@rizom/brain 0.2.0-alpha.584 → 0.2.0-alpha.586

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 (38) hide show
  1. package/dist/brain.js +44 -44
  2. package/dist/chunks/{app-25fctt6k.js → app-rh4ty0da.js} +2 -2
  3. package/dist/chunks/{blog-post-adapter-z1dtc2r2.js → blog-post-adapter-0x7wvkzq.js} +2 -2
  4. package/dist/chunks/{index-d2yxd329.js → index-0j7rk0ht.js} +2 -2
  5. package/dist/chunks/{index-jnfgrr88.js → index-1dy24s9t.js} +2 -2
  6. package/dist/chunks/{index-zezv3y29.js → index-3fvrpnmh.js} +2 -2
  7. package/dist/chunks/{index-ygy8j5wp.js → index-7c9cvp1j.js} +4 -5
  8. package/dist/chunks/{index-ygy8j5wp.js.map → index-7c9cvp1j.js.map} +3 -3
  9. package/dist/chunks/{index-vbjcqzth.js → index-n2515xkf.js} +3 -3
  10. package/dist/chunks/{index-vbjcqzth.js.map → index-n2515xkf.js.map} +1 -1
  11. package/dist/chunks/{index-jk3w409a.js → index-n9v4ww8s.js} +3 -3
  12. package/dist/chunks/{linkedin-template-f5g0md30.js → linkedin-template-8c2vjj5e.js} +2 -2
  13. package/dist/chunks/{rss-datasource-zh4j263b.js → rss-datasource-g6syrm7v.js} +2 -2
  14. package/dist/entities.js +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/interfaces.js +1 -1
  17. package/dist/model.js +43 -42
  18. package/dist/model.js.map +3 -3
  19. package/dist/plugins.js +1 -1
  20. package/dist/services.js +1 -1
  21. package/dist/ui/{studio-app-589ca178b493c37825116e19389e661774e7a872452f23d3e48b467ca1514a60.css → studio-app-1d8a85ef60f4d93da4506c0d76de4cc4bfbfcb91a83e2453da2f013b67988223.css} +1 -0
  22. package/dist/ui/{studio-app-cmq8cwna.js → studio-app-e55r86r3.js} +2 -2
  23. package/dist/ui/studio-asset-manifest.json +9 -9
  24. package/dist/ui/studio-chunks/{account-view-8z403hx4.js → account-view-0yz326ez.js} +1 -1
  25. package/dist/ui/studio-chunks/main-4vaeqvhy.js.map +1 -1
  26. package/dist/ui/studio-chunks/{main-xvgffskk.js → main-m8wmpxz1.js} +2 -2
  27. package/dist/ui/studio-chunks/{main-xvgffskk.js.map → main-m8wmpxz1.js.map} +3 -3
  28. package/package.json +1 -1
  29. /package/dist/chunks/{app-25fctt6k.js.map → app-rh4ty0da.js.map} +0 -0
  30. /package/dist/chunks/{blog-post-adapter-z1dtc2r2.js.map → blog-post-adapter-0x7wvkzq.js.map} +0 -0
  31. /package/dist/chunks/{index-d2yxd329.js.map → index-0j7rk0ht.js.map} +0 -0
  32. /package/dist/chunks/{index-jnfgrr88.js.map → index-1dy24s9t.js.map} +0 -0
  33. /package/dist/chunks/{index-zezv3y29.js.map → index-3fvrpnmh.js.map} +0 -0
  34. /package/dist/chunks/{index-jk3w409a.js.map → index-n9v4ww8s.js.map} +0 -0
  35. /package/dist/chunks/{linkedin-template-f5g0md30.js.map → linkedin-template-8c2vjj5e.js.map} +0 -0
  36. /package/dist/chunks/{rss-datasource-zh4j263b.js.map → rss-datasource-g6syrm7v.js.map} +0 -0
  37. /package/dist/ui/{studio-app-cmq8cwna.js.map → studio-app-e55r86r3.js.map} +0 -0
  38. /package/dist/ui/studio-chunks/{account-view-8z403hx4.js.map → account-view-0yz326ez.js.map} +0 -0
@@ -234,7 +234,7 @@
234
234
  "import {\n generateMarkdown,\n readMarkdownFrontmatter,\n} from \"@brains/utils/markdown-frontmatter\";\nimport { z } from \"@brains/utils/zod\";\nimport { objectKeys } from \"@brains/utils/object-keys\";\nimport { isPlainRecord } from \"@brains/utils/predicates\";\nimport type { BaseEntity, ContentVisibility } from \"./types\";\n\n/**\n * Configuration for frontmatter handling\n */\nexport interface FrontmatterConfig<T extends BaseEntity> {\n /**\n * Fields to explicitly include in frontmatter\n * If not specified, includes all non-system fields\n */\n includeFields?: (keyof T)[];\n\n /**\n * Fields to exclude from frontmatter\n * By default excludes: id, entityType, content, created, updated\n */\n excludeFields?: (keyof T)[];\n\n /**\n * Custom serializers for complex fields\n */\n customSerializers?: {\n [K in keyof T]?: (value: T[K]) => unknown;\n };\n}\n\nexport interface FrontmatterValidationSchema<T> {\n parse(data: unknown): T;\n}\n\n// Default system fields that should not be in frontmatter\nconst DEFAULT_SYSTEM_FIELDS: Array<keyof BaseEntity> = [\n \"id\",\n \"entityType\",\n \"content\",\n \"contentHash\",\n \"created\",\n \"updated\",\n \"visibility\",\n];\n\n/**\n * Extract metadata fields from an entity for frontmatter\n * Returns only non-system fields by default\n */\nexport function extractMetadata<T extends BaseEntity>(\n entity: T,\n config?: FrontmatterConfig<T>,\n): Record<string, unknown> {\n const { includeFields, excludeFields = [], customSerializers } = config ?? {};\n const excludedFieldNames = new Set<string>([\n ...DEFAULT_SYSTEM_FIELDS.map(String),\n ...excludeFields.map(String),\n ]);\n\n const metadata: Record<string, unknown> = {};\n\n // Get all fields from the entity\n const allFields = objectKeys(entity);\n\n // Determine which fields to include\n let fieldsToProcess: Array<keyof T & string>;\n if (includeFields) {\n // If includeFields is specified, only include those\n fieldsToProcess = includeFields\n .filter((field) => typeof field === \"string\")\n .filter((field) => !excludedFieldNames.has(field));\n } else {\n // Otherwise include all fields except excluded ones\n fieldsToProcess = allFields.filter(\n (field) => !excludedFieldNames.has(String(field)),\n );\n }\n\n // Process each field\n for (const field of fieldsToProcess) {\n const value = entity[field];\n\n // Skip undefined values\n if (value === undefined) {\n continue;\n }\n\n // Use custom serializer if available\n if (customSerializers && field in customSerializers) {\n const serializer = customSerializers[field];\n if (serializer) {\n metadata[field] = serializer(value);\n }\n } else {\n metadata[field] = value;\n }\n }\n\n return metadata;\n}\n\n/**\n * Generate markdown with frontmatter from content and metadata\n */\nexport function generateMarkdownWithFrontmatter(\n content: string,\n metadata: Record<string, unknown>,\n): string {\n // null is dropped alongside undefined. Schemas model an absent value as\n // `.nullable().default(null)` to keep section content JSON-serializable, so\n // parsing a file that simply omits a key yields an explicit null. Writing\n // that back would grow `key: null` lines in hand-authored markdown on every\n // sync, so absence has to round-trip as absence.\n const cleaned = Object.fromEntries(\n Object.entries(metadata).filter(([, v]) => v !== undefined && v !== null),\n );\n\n // Checked after cleaning: metadata consisting only of absent values must\n // produce bare content, not an empty frontmatter block.\n if (Object.keys(cleaned).length === 0) {\n return content;\n }\n\n return generateMarkdown(cleaned, content);\n}\n\n/**\n * Helper to convert all Date objects to ISO strings recursively\n */\nfunction convertDatesToStrings(obj: unknown): unknown {\n if (obj instanceof Date) {\n return obj.toISOString();\n }\n if (Array.isArray(obj)) {\n return obj.map(convertDatesToStrings);\n }\n if (obj !== null && typeof obj === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = convertDatesToStrings(value);\n }\n return result;\n }\n return obj;\n}\n\n/**\n * Parse markdown with frontmatter into content and metadata\n */\nexport function parseMarkdownWithFrontmatter<T>(\n markdown: string,\n schema: FrontmatterValidationSchema<T>,\n _options?: { cache?: boolean },\n): {\n content: string;\n metadata: T;\n} {\n // The shared reader retains no documents or mutable parsed objects.\n const { content, data } = readMarkdownFrontmatter(markdown);\n\n // Convert all Date objects to strings before parsing with Zod\n const normalizedData = convertDatesToStrings(data);\n\n return {\n content: content.trim(),\n metadata: schema.parse(normalizedData),\n };\n}\n\nconst titledFrontmatterSchema = z.object({ title: z.string().optional() });\n\n/**\n * An entity's own name: its metadata title, else the title in its\n * frontmatter, as on types that keep metadata empty; null when neither names it.\n */\nexport function entityTitle(\n entity: Pick<BaseEntity, \"metadata\" | \"content\">,\n): string | null {\n const metadataTitle = entity.metadata[\"title\"];\n if (typeof metadataTitle === \"string\") return metadataTitle;\n return (\n parseMarkdownWithFrontmatter(entity.content, titledFrontmatterSchema)\n .metadata.title ?? null\n );\n}\n\n/**\n * Generate frontmatter string from metadata\n */\nexport function generateFrontmatter(metadata: Record<string, unknown>): string {\n if (Object.keys(metadata).length === 0) {\n return \"\";\n }\n\n const fullMarkdown = generateMarkdown(metadata, \"\");\n\n // Extract just the frontmatter part\n const match = fullMarkdown.match(/^---\\n[\\s\\S]*?\\n---/);\n return match ? match[0] : \"\";\n}\n\n/**\n * Inverse of `applyVisibilityToMarkdown` for the adapter parse path: the\n * export pipeline injects the system-owned `visibility` key into every\n * non-public file's frontmatter, so it must be removed again before a domain\n * frontmatter schema validates — a strict adapter schema must accept its own\n * exported file on re-import. Module-internal: consumed by\n * `BaseEntityAdapter.parseFrontMatter`, not part of the package API.\n */\nexport function stripSystemVisibility(data: unknown): unknown {\n if (!isPlainRecord(data)) {\n return data;\n }\n const { visibility: _visibility, ...rest } = data;\n return rest;\n}\n\nconst visibilityFrontmatterSchema = z.object({\n visibility: z\n .enum([\"public\", \"shared\", \"restricted\", \"private\"])\n .optional()\n .transform((value): ContentVisibility | undefined => {\n if (value === undefined) return undefined;\n return value === \"private\" ? \"restricted\" : value;\n }),\n});\n\n/**\n * Read the visibility a markdown file declares, or undefined when it declares\n * none.\n *\n * Absence must stay distinguishable from an explicit \"public\".\n * `applyVisibilityToMarkdown` omits the key entirely for public entities, so a\n * file without it is the normal shape of exported content and carries no\n * opinion about visibility. Collapsing that to \"public\" makes every merge over\n * an existing entity a silent demotion.\n */\nexport function extractVisibilityFromMarkdown(\n markdown: string,\n): ContentVisibility | undefined {\n const parsed = readMarkdownFrontmatter(markdown);\n return visibilityFrontmatterSchema.parse(parsed.data).visibility;\n}\n\n/**\n * The text of a markdown document without its frontmatter block. It never\n * throws: a block it cannot recognise is left in place.\n */\nexport function markdownBody(markdown: string): string {\n return markdown\n .replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---[^\\S\\r\\n]*(?:\\r?\\n|$)/, \"\")\n .trim();\n}\n\nexport function hasVisibilityFrontmatter(markdown: string): boolean {\n const frontmatterMatch = markdown.match(/^---\\r?\\n[\\s\\S]*?\\r?\\n---/);\n const visibilityMatch = frontmatterMatch?.[0].match(/^visibility:/m);\n return visibilityMatch !== null && visibilityMatch !== undefined;\n}\n\nexport function applyVisibilityToMarkdown(\n markdown: string,\n visibility: ContentVisibility,\n): string {\n if (visibility === \"public\" && !hasVisibilityFrontmatter(markdown)) {\n return markdown;\n }\n\n const parsed = readMarkdownFrontmatter(markdown);\n if (parsed.data === null || parsed.data === undefined) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const fields: [string, unknown][] = Object.entries(parsed.data);\n const frontmatter = Object.fromEntries(\n fields.filter(([key]) => key !== \"visibility\"),\n );\n\n if (visibility !== \"public\") {\n frontmatter[\"visibility\"] = visibility;\n }\n\n return generateMarkdownWithFrontmatter(parsed.content.trim(), frontmatter);\n}\n",
235
235
  "import { getErrorMessage } from \"@brains/utils/error\";\nimport { z } from \"@brains/utils/zod\";\n\nconst validationIssuesErrorSchema = z.looseObject({\n issues: z.array(\n z.looseObject({\n message: z.string(),\n }),\n ),\n});\n\n// Source runners and packed plugins can carry separate class copies.\nconst entityValidationErrorSchema = z.object({\n name: z.literal(\"EntityValidationError\"),\n entityType: z.string(),\n originalError: z.unknown(),\n});\n\nexport class EntityValidationError extends Error {\n public readonly entityType: string;\n public readonly originalError: unknown;\n public readonly phase: \"schema\" | \"persist\";\n\n constructor(\n entityType: string,\n originalError: unknown,\n phase: \"schema\" | \"persist\" = \"schema\",\n ) {\n super(\n `Invalid entity data for ${entityType}: ${getErrorMessage(originalError)}`,\n );\n this.name = \"EntityValidationError\";\n this.entityType = entityType;\n this.originalError = originalError;\n this.phase = phase;\n }\n}\n\n// Read by shape, as a validator's error can come from another class copy.\nconst schemaPhaseErrorSchema = z.object({\n name: z.literal(\"EntityValidationError\"),\n phase: z.literal(\"schema\"),\n});\n\n/** A validation error that finds the content itself invalid, not a live policy refusing it. */\nexport function isSchemaPhaseValidationError(error: unknown): boolean {\n return schemaPhaseErrorSchema.safeParse(error).success;\n}\n\nexport function hasValidationIssues(error: unknown): boolean {\n return validationIssuesErrorSchema.safeParse(error).success;\n}\n\nexport function isEntityValidationError(error: unknown): boolean {\n return (\n error instanceof EntityValidationError ||\n entityValidationErrorSchema.safeParse(error).success ||\n hasValidationIssues(error)\n );\n}\n\nexport function toEntityValidationError(\n entityType: string,\n error: unknown,\n phase: \"schema\" | \"persist\" = \"schema\",\n): EntityValidationError | undefined {\n if (error instanceof EntityValidationError) {\n return error.phase === phase\n ? error\n : new EntityValidationError(entityType, error.originalError, phase);\n }\n const wrapped = entityValidationErrorSchema.safeParse(error);\n if (wrapped.success)\n return new EntityValidationError(\n entityType,\n wrapped.data.originalError,\n phase,\n );\n return hasValidationIssues(error)\n ? new EntityValidationError(entityType, error, phase)\n : undefined;\n}\n\n/** The brain keeps no embeddings, so nothing is semantically near anything. */\nexport class SemanticIndexingDisabledError extends Error {\n constructor() {\n super(\"Semantic indexing is disabled for this Brain instance\");\n this.name = \"SemanticIndexingDisabledError\";\n }\n}\n",
236
236
  "import { sql, type SQL } from \"drizzle-orm\";\nimport { entities } from \"./schema/entities\";\n\nconst statusExpr = sql`json_extract(${entities.metadata}, '$.status')`;\n\n/**\n * The publish gate for one entity type. A type that declares its published\n * statuses gets exactly those — no status is not published. Any other type\n * keeps the default lifecycle: published, active, or no status at all.\n */\nexport function publishedStatusCondition(publishedStatuses?: string[]): SQL {\n if (publishedStatuses && publishedStatuses.length > 0) {\n return sql`${statusExpr} IN (${sql.join(\n publishedStatuses.map((status) => sql`${status}`),\n sql`, `,\n )})`;\n }\n return sql`(${statusExpr} = 'published' OR ${statusExpr} = 'active' OR ${statusExpr} IS NULL)`;\n}\n\n/**\n * The publish gate across entity types, for queries such as search that span\n * them: each declaring type (`gates`, statuses by type) by its own statuses,\n * every other type by the default lifecycle.\n */\nexport function publishedAcrossTypesCondition(\n gates: Record<string, string[]>,\n): SQL {\n const declared = Object.entries(gates).filter(\n ([, statuses]) => statuses.length > 0,\n );\n if (declared.length === 0) return publishedStatusCondition();\n const byType = declared.map(\n ([entityType, statuses]) =>\n sql`(${entities.entityType} = ${entityType} AND ${publishedStatusCondition(statuses)})`,\n );\n const undeclared = sql`(${entities.entityType} NOT IN (${sql.join(\n declared.map(([entityType]) => sql`${entityType}`),\n sql`, `,\n )}) AND ${publishedStatusCondition()})`;\n return sql`(${sql.join([...byType, undeclared], sql` OR `)})`;\n}\n",
237
- "import type { EntitySearchDB } from \"./db\";\nimport {\n getVisibleContentVisibilities,\n type BaseEntity,\n type ContentVisibility,\n type SearchResult,\n type SearchOptions,\n type NearestEntity,\n type NearestToEntityRequest,\n type ProjectSemanticSpaceRequest,\n type SemanticSpaceProjection,\n} from \"./types\";\nimport type { IEmbeddingService } from \"./embedding-types\";\nimport { markdownBody } from \"./frontmatter\";\nimport type { EntitySerializer } from \"./entity-serializer\";\nimport { type Logger } from \"@brains/utils/logger\";\nimport { z } from \"@brains/utils/zod\";\nimport { sql, and, asc, desc, inArray, type SQL } from \"drizzle-orm\";\nimport { entities } from \"./schema/entities\";\nimport { SemanticIndexingDisabledError } from \"./errors\";\nimport { publishedAcrossTypesCondition } from \"./published-condition\";\nimport {\n buildSemanticSpaceProjection,\n type SemanticEmbedding,\n} from \"./semantic-space\";\n\n/**\n * The one embedding call search makes: it embeds the prepared query.\n *\n * IEmbeddingService also generates in batches and reports its dimensions;\n * asking for all of it meant a test could not supply one function without\n * asserting it was the whole service.\n */\nexport type QueryEmbedder = Pick<IEmbeddingService, \"generateEmbedding\">;\n\nexport const MAX_SEARCH_QUERY_CHARS = 12_000;\nconst MAX_VECTOR_DISTANCE = 0.82;\n\nfunction prepareSearchQuery(\n query: string,\n logger?: Logger,\n maxChars: number = MAX_SEARCH_QUERY_CHARS,\n): string {\n const normalizedQuery = query.trim().replace(/\\s+/g, \" \");\n\n if (normalizedQuery.length <= maxChars) {\n return normalizedQuery;\n }\n\n logger?.warn(\"Truncating search query that exceeds max length\", {\n originalLength: normalizedQuery.length,\n truncatedLength: maxChars,\n });\n\n return normalizedQuery.slice(0, maxChars);\n}\n\n/**\n * Schema for search options (excluding tags)\n */\nconst searchOptionsSchema = z.object({\n limit: z.number().int().positive().optional().default(20),\n offset: z.number().int().min(0).optional().default(0),\n types: z.array(z.string()).optional().default([]),\n excludeTypes: z.array(z.string()).optional().default([]),\n weight: z.record(z.string(), z.number()).optional(),\n visibilityScope: z.enum([\"public\", \"shared\", \"restricted\"]).optional(),\n includeUngenerated: z.boolean().optional().default(false),\n publishedOnly: z.boolean().optional().default(false),\n minScore: z.number().min(0).optional(),\n signal: z.instanceof(AbortSignal).optional(),\n});\n\nconst entityMetadataSchema = z.preprocess(\n (value) => {\n if (typeof value !== \"string\") return value;\n return JSON.parse(value);\n },\n z.record(z.string(), z.unknown()),\n);\n\n/**\n * EntitySearch handles all search operations for entities\n * Extracted from EntityService for single responsibility\n */\nexport class EntitySearch {\n private db: EntitySearchDB;\n private embeddingService: QueryEmbedder;\n private serializer: EntitySerializer;\n private logger: Logger;\n private readonly embeddingsEnabled: boolean;\n /** Published statuses by entity type, for the types that declare them. */\n private readonly publishGates: () => Record<string, string[]>;\n /**\n * The types this brain loads. Rows of any other type, left by a plugin the\n * brain no longer runs, cannot be read back, so search never returns them.\n */\n private readonly registeredTypes: (() => readonly string[]) | undefined;\n\n constructor(\n db: EntitySearchDB,\n embeddingService: QueryEmbedder,\n serializer: EntitySerializer,\n logger: Logger,\n embeddingsEnabled = true,\n publishGates: () => Record<string, string[]> = () => ({}),\n registeredTypes?: () => readonly string[],\n ) {\n this.db = db;\n this.embeddingService = embeddingService;\n this.serializer = serializer;\n this.logger = logger.child(\"EntitySearch\");\n this.embeddingsEnabled = embeddingsEnabled;\n this.publishGates = publishGates;\n this.registeredTypes = registeredTypes;\n }\n\n /** The requested types, or every type, narrowed to those the brain loads. */\n private searchableTypes(requested: string[]): string[] {\n const registered = this.registeredTypes?.();\n if (!registered) return requested;\n const candidates = requested.length > 0 ? requested : registered;\n return candidates.filter((type) => registered.includes(type));\n }\n\n /**\n * Search entities by query using vector similarity\n */\n public async search(\n query: string,\n options?: SearchOptions,\n ): Promise<SearchResult<BaseEntity>[]> {\n const validatedOptions = searchOptionsSchema.parse(options ?? {});\n const {\n offset,\n types: requestedTypes,\n excludeTypes,\n weight,\n visibilityScope,\n includeUngenerated,\n publishedOnly,\n minScore,\n signal,\n limit,\n } = validatedOptions;\n signal?.throwIfAborted();\n const types = this.searchableTypes(requestedTypes);\n if (this.registeredTypes && types.length === 0) return [];\n\n // Check if we have weights to apply\n const hasWeights = weight && Object.keys(weight).length > 0;\n const preparedQuery = prepareSearchQuery(query, this.logger);\n\n this.logger.debug(\n `Searching entities with query (${preparedQuery.length} chars)`,\n );\n\n if (!this.embeddingsEnabled) {\n return this.searchLexically(preparedQuery, {\n limit,\n offset,\n types,\n excludeTypes,\n weight,\n visibilityScope,\n includeUngenerated,\n publishedOnly,\n minScore,\n signal,\n });\n }\n\n // Generate embedding for the query\n const vector = (\n await (signal\n ? this.embeddingService.generateEmbedding(preparedQuery, signal)\n : this.embeddingService.generateEmbedding(preparedQuery))\n ).embedding;\n signal?.throwIfAborted();\n\n // Convert Float32Array to JSON array for SQL\n const embeddingArray = JSON.stringify(Array.from(vector));\n\n const weightMultiplier = this.buildWeightMultiplier(\n hasWeights ? weight : undefined,\n );\n\n // Build type filter conditions for drizzle\n const typeConditions: SQL[] = [];\n if (types.length > 0) {\n typeConditions.push(\n sql`${entities.entityType} IN (${sql.join(\n types.map((t) => sql`${t}`),\n sql`, `,\n )})`,\n );\n }\n if (excludeTypes.length > 0) {\n typeConditions.push(\n sql`${entities.entityType} NOT IN (${sql.join(\n excludeTypes.map((t) => sql`${t}`),\n sql`, `,\n )})`,\n );\n }\n\n return this.searchWithAttachedDb(\n embeddingArray,\n weightMultiplier,\n [\n ...typeConditions,\n ...this.buildVisibilityConditions(visibilityScope),\n ...this.buildGenerationStatusConditions(includeUngenerated),\n ...this.buildPublishedConditions(publishedOnly),\n ],\n limit,\n offset,\n preparedQuery,\n minScore,\n signal,\n );\n }\n\n private async searchLexically(\n query: string,\n options: {\n readonly limit: number;\n readonly offset: number;\n readonly types: string[];\n readonly excludeTypes: string[];\n readonly weight: Record<string, number> | undefined;\n readonly visibilityScope: ContentVisibility | undefined;\n readonly includeUngenerated: boolean;\n readonly publishedOnly: boolean;\n readonly minScore: number | undefined;\n readonly signal: AbortSignal | undefined;\n },\n ): Promise<SearchResult<BaseEntity>[]> {\n if (!query) return [];\n const ftsQuery = '\"' + query.replace(/\"/g, '\"\"') + '\"';\n const conditions: SQL[] = [sql`entity_fts MATCH ${ftsQuery}`];\n if (options.types.length > 0) {\n conditions.push(inArray(entities.entityType, options.types));\n }\n if (options.excludeTypes.length > 0) {\n conditions.push(\n sql`${entities.entityType} NOT IN (${sql.join(\n options.excludeTypes.map((type) => sql`${type}`),\n sql`, `,\n )})`,\n );\n }\n conditions.push(\n ...this.buildVisibilityConditions(options.visibilityScope),\n ...this.buildGenerationStatusConditions(options.includeUngenerated),\n ...this.buildPublishedConditions(options.publishedOnly),\n );\n\n // bm25() returns lower-is-better negative relevance. Map it to (0.5, 1)\n // so the system search default threshold still admits lexical matches,\n // while stronger matches remain ordered above weaker ones.\n const multiplier = this.buildWeightMultiplier(options.weight);\n const weightedScore = sql<number>`(0.5 + 0.5 * ((-bm25(entity_fts)) / (1.0 - bm25(entity_fts)))) * (${multiplier})`;\n if (options.minScore !== undefined) {\n conditions.push(sql`${weightedScore} >= ${options.minScore}`);\n }\n const results = await this.db\n .select({\n id: entities.id,\n entityType: entities.entityType,\n content: entities.content,\n contentHash: entities.contentHash,\n visibility: entities.visibility,\n created: entities.created,\n updated: entities.updated,\n metadata: entities.metadata,\n weighted_score: weightedScore.as(\"weighted_score\"),\n })\n .from(entities)\n .innerJoin(\n sql`entity_fts`,\n sql`entity_fts.entity_id = ${entities.id} AND entity_fts.entity_type = ${entities.entityType}`,\n )\n .where(and(...conditions))\n .orderBy(sql`weighted_score DESC`)\n .limit(options.limit)\n .offset(options.offset);\n options.signal?.throwIfAborted();\n return this.mapSearchResults(results, query);\n }\n\n private buildVisibilityConditions(\n visibilityScope?: ContentVisibility,\n ): SQL[] {\n // Fail closed: undefined scope filters to public-only.\n const scope: ContentVisibility = visibilityScope ?? \"public\";\n if (scope === \"restricted\") {\n return [];\n }\n return [inArray(entities.visibility, getVisibleContentVisibilities(scope))];\n }\n\n private buildGenerationStatusConditions(includeUngenerated: boolean): SQL[] {\n if (includeUngenerated) return [];\n return [\n sql`(json_extract(${entities.metadata}, '$.status') IS NULL OR json_extract(${entities.metadata}, '$.status') NOT IN ('generating', 'failed'))`,\n ];\n }\n\n private buildPublishedConditions(publishedOnly: boolean): SQL[] {\n return publishedOnly\n ? [publishedAcrossTypesCondition(this.publishGates())]\n : [];\n }\n\n /**\n * FTS5 boost weight. When a keyword match is found, this fraction of the\n * final score comes from FTS5 rank, the rest from vector similarity.\n * 0.3 = 30% keyword, 70% semantic.\n */\n private static readonly FTS_ALPHA = 0.3;\n\n /**\n * Build a parameterized CASE expression for entity-type score multipliers.\n * Weight keys may be caller-provided, so avoid raw SQL string interpolation.\n */\n private buildWeightMultiplier(weight?: Record<string, number>): SQL<number> {\n const entries = Object.entries(weight ?? {}).filter(([, multiplier]) =>\n Number.isFinite(multiplier),\n );\n\n if (entries.length === 0) {\n return sql`1.0`;\n }\n\n const cases = entries.map(\n ([entityType, multiplier]) =>\n sql`WHEN ${entities.entityType} = ${entityType} THEN ${multiplier}`,\n );\n\n return sql`CASE ${sql.join(cases, sql` `)} ELSE 1.0 END`;\n }\n\n /**\n * Execute search against an attached embedding database (aliased as \"emb\").\n */\n private async searchWithAttachedDb(\n embeddingArray: string,\n weightMultiplier: SQL,\n typeConditions: SQL[],\n limit: number,\n offset: number,\n query: string,\n minScore: number | undefined,\n signal?: AbortSignal,\n ): Promise<SearchResult<BaseEntity>[]> {\n const alpha = EntitySearch.FTS_ALPHA;\n\n // Vector similarity score (0..1, higher is better)\n const vectorScore = sql<number>`(1.0 - vector_distance_cos(emb_e.embedding, vector32(${embeddingArray})) / 2.0) * (${weightMultiplier})`;\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${embeddingArray}))`;\n\n // FTS5 keyword boost via subquery: 1.0 when matched, 0.0 when not.\n // Wrap in double quotes for phrase matching — prevents special characters\n // (?, *, OR, AND, etc.) from being parsed as FTS5 operators.\n const ftsQuery = '\"' + query.replace(/\"/g, '\"\"') + '\"';\n const ftsBoost = sql<number>`CASE WHEN EXISTS (\n SELECT 1 FROM entity_fts WHERE entity_fts MATCH ${ftsQuery}\n AND entity_id = ${entities.id} AND entity_type = ${entities.entityType}\n ) THEN 1.0 ELSE 0.0 END`;\n\n // Combined score: (1-α)*vector + α*keyword_match\n const combinedScore = sql<number>`(${1 - alpha} * ${vectorScore}) + (${alpha} * ${ftsBoost})`;\n\n const results = await this.db\n .select({\n id: entities.id,\n entityType: entities.entityType,\n content: entities.content,\n contentHash: entities.contentHash,\n visibility: entities.visibility,\n created: entities.created,\n updated: entities.updated,\n metadata: entities.metadata,\n distance: distanceExpr,\n weighted_score: combinedScore,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n sql`${distanceExpr} < ${MAX_VECTOR_DISTANCE}`,\n ...(minScore !== undefined\n ? [sql`${combinedScore} >= ${minScore}`]\n : []),\n ...typeConditions,\n ),\n )\n .orderBy(desc(combinedScore))\n .limit(limit)\n .offset(offset);\n signal?.throwIfAborted();\n return this.mapSearchResults(results, query);\n }\n\n /**\n * Search entities by type and query\n */\n public async searchEntities(\n entityType: string,\n query: string,\n options?: { limit?: number },\n ): Promise<SearchResult[]> {\n // Build search options with the entity type filter\n const searchOptions: SearchOptions = {\n types: [entityType],\n limit: options?.limit ?? 20,\n offset: 0,\n sortBy: \"relevance\",\n sortDirection: \"desc\",\n };\n\n return this.search(query, searchOptions);\n }\n\n /**\n * Project visible entity embeddings into a provider-independent semantic\n * space. Raw vectors never cross the entity-service boundary.\n */\n public async projectSemanticSpace(\n request: ProjectSemanticSpaceRequest,\n ): Promise<SemanticSpaceProjection> {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const listed = request.entities\n ? new Set(request.entities.map(referenceKey))\n : undefined;\n const pointTypes = request.entities\n ? new Set(request.entities.map(({ entityType }) => entityType))\n : request.types && request.types.length > 0\n ? new Set(request.types)\n : undefined;\n\n const embeddings = (\n await this.readEmbeddings(\n pointTypes ? Array.from(pointTypes) : undefined,\n request.visibilityScope,\n request.entities?.map(({ entityId }) => entityId),\n )\n ).filter((embedding) => !listed || listed.has(referenceKey(embedding)));\n const originReference = request.origin;\n // An origin of a type outside the points is read alone: reading its whole\n // type to find one vector makes a page per entry quadratic.\n const origin = originReference\n ? (embeddings.find(\n (embedding) =>\n embedding.entityId === originReference.entityId &&\n embedding.entityType === originReference.entityType,\n ) ??\n (pointTypes?.has(originReference.entityType) === false\n ? (\n await this.readEmbeddings(\n [originReference.entityType],\n request.visibilityScope,\n [originReference.entityId],\n )\n )[0]\n : undefined))\n : undefined;\n const points = embeddings.filter((embedding) => {\n const matchesPointType = pointTypes?.has(embedding.entityType) ?? true;\n const isOrigin =\n embedding.entityId === originReference?.entityId &&\n embedding.entityType === originReference.entityType;\n return matchesPointType && !isOrigin;\n });\n\n return buildSemanticSpaceProjection(points, {\n ...(origin && { origin }),\n ...(request.maxNeighborDistance !== undefined && {\n maxNeighborDistance: request.maxNeighborDistance,\n }),\n });\n }\n\n /** Read and decode vectors from the attached embedding database. */\n private async readEmbeddings(\n types?: string[],\n visibilityScope?: ContentVisibility,\n entityIds?: readonly string[],\n ): Promise<SemanticEmbedding[]> {\n const conditions = this.buildVisibilityConditions(visibilityScope);\n if (types && types.length > 0) {\n conditions.push(inArray(entities.entityType, types));\n }\n if (entityIds !== undefined) {\n conditions.push(inArray(entities.id, [...entityIds]));\n }\n\n const embeddingExpr = sql<Float32Array>`emb_e.embedding`.mapWith({\n mapFromDriverValue(value: unknown): Float32Array {\n if (!ArrayBuffer.isView(value)) {\n throw new TypeError(\n \"Expected embedding blob to be an ArrayBuffer view\",\n );\n }\n\n const source = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n if (source.byteLength % Float32Array.BYTES_PER_ELEMENT !== 0) {\n throw new RangeError(\n \"Embedding blob byte length must be divisible by 4\",\n );\n }\n\n const copy = new Uint8Array(source.byteLength);\n copy.set(source);\n return new Float32Array(copy.buffer);\n },\n });\n\n return this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n embedding: embeddingExpr,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(conditions.length > 0 ? and(...conditions) : undefined)\n .orderBy(asc(entities.entityType), asc(entities.id));\n }\n\n /**\n * Visible entities of the given types nearest an entity's stored embedding,\n * closest first. The origin is read alone and within the same scope; an\n * origin out of scope or without an embedding has no neighbours.\n */\n public async nearestToEntity(\n request: NearestToEntityRequest,\n ): Promise<NearestEntity[]> {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const [origin] = await this.readEmbeddings(\n [request.origin.entityType],\n request.visibilityScope,\n [request.origin.entityId],\n );\n if (!origin || request.types.length === 0) return [];\n\n const originVector = JSON.stringify(Array.from(origin.embedding));\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${originVector}))`;\n const query = this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n distance: distanceExpr,\n metadata: entities.metadata,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n ...this.buildVisibilityConditions(request.visibilityScope),\n inArray(entities.entityType, request.types),\n request.publishedOnly\n ? publishedAcrossTypesCondition(this.publishGates())\n : undefined,\n sql`NOT (${entities.id} = ${request.origin.entityId} AND ${entities.entityType} = ${request.origin.entityType})`,\n request.maxDistance !== undefined\n ? sql`${distanceExpr} <= ${request.maxDistance}`\n : undefined,\n ),\n )\n .orderBy(sql`${distanceExpr} ASC`);\n const rows =\n request.limit !== undefined\n ? await query.limit(request.limit)\n : await query;\n return rows.map(({ metadata, ...nearest }) =>\n request.includeMetadata ? { ...nearest, metadata } : nearest,\n );\n }\n\n /**\n * Return embedded entities with their raw cosine distance to the query,\n * sorted closest first. Without filters every embedded entity is returned,\n * for diagnostics and threshold tuning; `types` and `maxDistance` narrow it\n * in the query for callers that look for one close match.\n */\n public async searchWithDistances(\n query: string,\n filters: {\n readonly types?: string[] | undefined;\n readonly maxDistance?: number | undefined;\n } = {},\n ): Promise<\n Array<{ entityId: string; entityType: string; distance: number }>\n > {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const preparedQuery = prepareSearchQuery(query, this.logger);\n const { embedding: queryEmbedding } =\n await this.embeddingService.generateEmbedding(preparedQuery);\n const embeddingArray = JSON.stringify(Array.from(queryEmbedding));\n\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${embeddingArray}))`;\n\n const results = await this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n distance: distanceExpr,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n filters.types && filters.types.length > 0\n ? inArray(entities.entityType, filters.types)\n : undefined,\n filters.maxDistance !== undefined\n ? sql`${distanceExpr} <= ${filters.maxDistance}`\n : undefined,\n ),\n )\n .orderBy(sql`${distanceExpr} ASC`);\n\n return results;\n }\n\n /**\n * Transform raw query rows into SearchResult objects\n */\n private mapSearchResults(\n results: Array<{\n id: string;\n entityType: string;\n content: string;\n contentHash: string;\n visibility: ContentVisibility;\n created: number;\n updated: number;\n metadata: unknown;\n weighted_score: number;\n }>,\n query: string,\n ): SearchResult<BaseEntity>[] {\n const searchResults: SearchResult<BaseEntity>[] = [];\n\n for (const row of results) {\n try {\n const metadata = entityMetadataSchema.parse(row.metadata);\n\n const entity = this.serializer.reconstructEntity({\n id: row.id,\n entityType: row.entityType,\n content: row.content,\n contentHash: row.contentHash,\n visibility: row.visibility,\n created: row.created,\n updated: row.updated,\n metadata,\n });\n\n searchResults.push({\n entity,\n score: row.weighted_score,\n excerpt: this.createExcerpt(row.content, query),\n });\n } catch (error) {\n this.logger.error(`Failed to parse entity during search: ${error}`);\n }\n }\n\n const queryPreview =\n query.length > 50 ? query.substring(0, 50) + \"...\" : query;\n this.logger.debug(\n `Found ${searchResults.length} results for query \"${queryPreview}\"`,\n );\n\n return searchResults;\n }\n\n /**\n * Create an excerpt from content based on query\n */\n private createExcerpt(markdown: string, query: string): string {\n // A reader of the result sees its text, not its frontmatter.\n const content = markdownBody(markdown);\n const maxLength = 200;\n const queryLower = query.toLowerCase();\n const contentLower = content.toLowerCase();\n\n // Find the position of the query in the content\n const position = contentLower.indexOf(queryLower);\n\n if (position !== -1) {\n // Extract text around the query\n const start = Math.max(0, position - 50);\n const end = Math.min(content.length, position + queryLower.length + 50);\n let excerpt = content.slice(start, end);\n\n // Add ellipsis if needed\n if (start > 0) excerpt = \"...\" + excerpt;\n if (end < content.length) excerpt = excerpt + \"...\";\n\n return excerpt;\n }\n\n // If query not found, return beginning of content\n return (\n content.slice(0, maxLength) + (content.length > maxLength ? \"...\" : \"\")\n );\n }\n}\n\n/** One key for an entity reference: type and id. */\nfunction referenceKey(reference: {\n entityType: string;\n entityId: string;\n}): string {\n return `${reference.entityType}:${reference.entityId}`;\n}\n",
237
+ "import type { EntitySearchDB } from \"./db\";\nimport {\n getVisibleContentVisibilities,\n type BaseEntity,\n type ContentVisibility,\n type SearchResult,\n type SearchOptions,\n type NearestEntity,\n type NearestToEntityRequest,\n type ProjectSemanticSpaceRequest,\n type SemanticSpaceProjection,\n} from \"./types\";\nimport type { IEmbeddingService } from \"./embedding-types\";\nimport { markdownBody } from \"./frontmatter\";\nimport type { EntitySerializer } from \"./entity-serializer\";\nimport { type Logger } from \"@brains/utils/logger\";\nimport { z } from \"@brains/utils/zod\";\nimport { sql, and, asc, desc, inArray, type SQL } from \"drizzle-orm\";\nimport { entities } from \"./schema/entities\";\nimport { SemanticIndexingDisabledError } from \"./errors\";\nimport { publishedAcrossTypesCondition } from \"./published-condition\";\nimport {\n buildSemanticSpaceProjection,\n type SemanticEmbedding,\n} from \"./semantic-space\";\n\n/**\n * The one embedding call search makes: it embeds the prepared query.\n *\n * IEmbeddingService also generates in batches and reports its dimensions;\n * asking for all of it meant a test could not supply one function without\n * asserting it was the whole service.\n */\nexport type QueryEmbedder = Pick<IEmbeddingService, \"generateEmbedding\">;\n\nexport const MAX_SEARCH_QUERY_CHARS = 12_000;\nconst MAX_VECTOR_DISTANCE = 0.82;\n\nfunction prepareSearchQuery(\n query: string,\n logger?: Logger,\n maxChars: number = MAX_SEARCH_QUERY_CHARS,\n): string {\n const normalizedQuery = query.trim().replace(/\\s+/g, \" \");\n\n if (normalizedQuery.length <= maxChars) {\n return normalizedQuery;\n }\n\n logger?.warn(\"Truncating search query that exceeds max length\", {\n originalLength: normalizedQuery.length,\n truncatedLength: maxChars,\n });\n\n return normalizedQuery.slice(0, maxChars);\n}\n\n/**\n * Schema for search options (excluding tags)\n */\nconst searchOptionsSchema = z.object({\n limit: z.number().int().positive().optional().default(20),\n offset: z.number().int().min(0).optional().default(0),\n types: z.array(z.string()).optional().default([]),\n excludeTypes: z.array(z.string()).optional().default([]),\n weight: z.record(z.string(), z.number()).optional(),\n visibilityScope: z.enum([\"public\", \"shared\", \"restricted\"]).optional(),\n includeUngenerated: z.boolean().optional().default(false),\n publishedOnly: z.boolean().optional().default(false),\n minScore: z.number().min(0).optional(),\n signal: z.instanceof(AbortSignal).optional(),\n});\n\nconst entityMetadataSchema = z.preprocess(\n (value) => {\n if (typeof value !== \"string\") return value;\n return JSON.parse(value);\n },\n z.record(z.string(), z.unknown()),\n);\n\n/**\n * EntitySearch handles all search operations for entities\n * Extracted from EntityService for single responsibility\n */\nexport class EntitySearch {\n private db: EntitySearchDB;\n private embeddingService: QueryEmbedder;\n private serializer: EntitySerializer;\n private logger: Logger;\n private readonly embeddingsEnabled: boolean;\n /** Published statuses by entity type, for the types that declare them. */\n private readonly publishGates: () => Record<string, string[]>;\n /**\n * The types this brain loads. Rows of any other type, left by a plugin the\n * brain no longer runs, cannot be read back, so search never returns them.\n */\n private readonly registeredTypes: (() => readonly string[]) | undefined;\n\n constructor(\n db: EntitySearchDB,\n embeddingService: QueryEmbedder,\n serializer: EntitySerializer,\n logger: Logger,\n embeddingsEnabled = true,\n publishGates: () => Record<string, string[]> = () => ({}),\n registeredTypes?: () => readonly string[],\n ) {\n this.db = db;\n this.embeddingService = embeddingService;\n this.serializer = serializer;\n this.logger = logger.child(\"EntitySearch\");\n this.embeddingsEnabled = embeddingsEnabled;\n this.publishGates = publishGates;\n this.registeredTypes = registeredTypes;\n }\n\n /** The requested types, or every type, narrowed to those the brain loads. */\n private searchableTypes(requested: string[]): string[] {\n const registered = this.registeredTypes?.();\n if (!registered) return requested;\n const candidates = requested.length > 0 ? requested : registered;\n return candidates.filter((type) => registered.includes(type));\n }\n\n /**\n * Search entities by query using vector similarity\n */\n public async search(\n query: string,\n options?: SearchOptions,\n ): Promise<SearchResult<BaseEntity>[]> {\n const validatedOptions = searchOptionsSchema.parse(options ?? {});\n const {\n offset,\n types: requestedTypes,\n excludeTypes,\n weight,\n visibilityScope,\n includeUngenerated,\n publishedOnly,\n minScore,\n signal,\n limit,\n } = validatedOptions;\n signal?.throwIfAborted();\n const types = this.searchableTypes(requestedTypes);\n if (this.registeredTypes && types.length === 0) return [];\n\n // Check if we have weights to apply\n const hasWeights = weight && Object.keys(weight).length > 0;\n const preparedQuery = prepareSearchQuery(query, this.logger);\n\n this.logger.debug(\n `Searching entities with query (${preparedQuery.length} chars)`,\n );\n\n if (!this.embeddingsEnabled) {\n return this.searchLexically(preparedQuery, {\n limit,\n offset,\n types,\n excludeTypes,\n weight,\n visibilityScope,\n includeUngenerated,\n publishedOnly,\n minScore,\n signal,\n });\n }\n\n // Generate embedding for the query\n const vector = (\n await (signal\n ? this.embeddingService.generateEmbedding(preparedQuery, signal)\n : this.embeddingService.generateEmbedding(preparedQuery))\n ).embedding;\n signal?.throwIfAborted();\n\n // Convert Float32Array to JSON array for SQL\n const embeddingArray = JSON.stringify(Array.from(vector));\n\n const weightMultiplier = this.buildWeightMultiplier(\n hasWeights ? weight : undefined,\n );\n\n // Build type filter conditions for drizzle\n const typeConditions: SQL[] = [];\n if (types.length > 0) {\n typeConditions.push(\n sql`${entities.entityType} IN (${sql.join(\n types.map((t) => sql`${t}`),\n sql`, `,\n )})`,\n );\n }\n if (excludeTypes.length > 0) {\n typeConditions.push(\n sql`${entities.entityType} NOT IN (${sql.join(\n excludeTypes.map((t) => sql`${t}`),\n sql`, `,\n )})`,\n );\n }\n\n return this.searchWithAttachedDb(\n embeddingArray,\n weightMultiplier,\n [\n ...typeConditions,\n ...this.buildVisibilityConditions(visibilityScope),\n ...this.buildGenerationStatusConditions(includeUngenerated),\n ...this.buildPublishedConditions(publishedOnly),\n ],\n limit,\n offset,\n preparedQuery,\n minScore,\n signal,\n );\n }\n\n private async searchLexically(\n query: string,\n options: {\n readonly limit: number;\n readonly offset: number;\n readonly types: string[];\n readonly excludeTypes: string[];\n readonly weight: Record<string, number> | undefined;\n readonly visibilityScope: ContentVisibility | undefined;\n readonly includeUngenerated: boolean;\n readonly publishedOnly: boolean;\n readonly minScore: number | undefined;\n readonly signal: AbortSignal | undefined;\n },\n ): Promise<SearchResult<BaseEntity>[]> {\n if (!query) return [];\n const ftsQuery = '\"' + query.replace(/\"/g, '\"\"') + '\"';\n const conditions: SQL[] = [sql`entity_fts MATCH ${ftsQuery}`];\n if (options.types.length > 0) {\n conditions.push(inArray(entities.entityType, options.types));\n }\n if (options.excludeTypes.length > 0) {\n conditions.push(\n sql`${entities.entityType} NOT IN (${sql.join(\n options.excludeTypes.map((type) => sql`${type}`),\n sql`, `,\n )})`,\n );\n }\n conditions.push(\n ...this.buildVisibilityConditions(options.visibilityScope),\n ...this.buildGenerationStatusConditions(options.includeUngenerated),\n ...this.buildPublishedConditions(options.publishedOnly),\n );\n\n // bm25() returns lower-is-better negative relevance. Map it to (0.5, 1)\n // so the system search default threshold still admits lexical matches,\n // while stronger matches remain ordered above weaker ones.\n const multiplier = this.buildWeightMultiplier(options.weight);\n const weightedScore = sql<number>`(0.5 + 0.5 * ((-bm25(entity_fts)) / (1.0 - bm25(entity_fts)))) * (${multiplier})`;\n if (options.minScore !== undefined) {\n conditions.push(sql`${weightedScore} >= ${options.minScore}`);\n }\n const results = await this.db\n .select({\n id: entities.id,\n entityType: entities.entityType,\n content: entities.content,\n contentHash: entities.contentHash,\n visibility: entities.visibility,\n created: entities.created,\n updated: entities.updated,\n metadata: entities.metadata,\n weighted_score: weightedScore.as(\"weighted_score\"),\n })\n .from(entities)\n .innerJoin(\n sql`entity_fts`,\n sql`entity_fts.entity_id = ${entities.id} AND entity_fts.entity_type = ${entities.entityType}`,\n )\n .where(and(...conditions))\n .orderBy(sql`weighted_score DESC`)\n .limit(options.limit)\n .offset(options.offset);\n options.signal?.throwIfAborted();\n return this.mapSearchResults(results, query);\n }\n\n private buildVisibilityConditions(\n visibilityScope?: ContentVisibility,\n ): SQL[] {\n // Fail closed: undefined scope filters to public-only.\n const scope: ContentVisibility = visibilityScope ?? \"public\";\n if (scope === \"restricted\") {\n return [];\n }\n return [inArray(entities.visibility, getVisibleContentVisibilities(scope))];\n }\n\n private buildGenerationStatusConditions(includeUngenerated: boolean): SQL[] {\n if (includeUngenerated) return [];\n return [\n sql`(json_extract(${entities.metadata}, '$.status') IS NULL OR json_extract(${entities.metadata}, '$.status') NOT IN ('generating', 'failed'))`,\n ];\n }\n\n private buildPublishedConditions(publishedOnly: boolean): SQL[] {\n return publishedOnly\n ? [publishedAcrossTypesCondition(this.publishGates())]\n : [];\n }\n\n /**\n * FTS5 boost weight. When a keyword match is found, this fraction of the\n * final score comes from FTS5 rank, the rest from vector similarity.\n * 0.3 = 30% keyword, 70% semantic.\n */\n private static readonly FTS_ALPHA = 0.3;\n\n /**\n * Build a parameterized CASE expression for entity-type score multipliers.\n * Weight keys may be caller-provided, so avoid raw SQL string interpolation.\n */\n private buildWeightMultiplier(weight?: Record<string, number>): SQL<number> {\n const entries = Object.entries(weight ?? {}).filter(([, multiplier]) =>\n Number.isFinite(multiplier),\n );\n\n if (entries.length === 0) {\n return sql`1.0`;\n }\n\n const cases = entries.map(\n ([entityType, multiplier]) =>\n sql`WHEN ${entities.entityType} = ${entityType} THEN ${multiplier}`,\n );\n\n return sql`CASE ${sql.join(cases, sql` `)} ELSE 1.0 END`;\n }\n\n /**\n * Execute search against an attached embedding database (aliased as \"emb\").\n */\n private async searchWithAttachedDb(\n embeddingArray: string,\n weightMultiplier: SQL,\n typeConditions: SQL[],\n limit: number,\n offset: number,\n query: string,\n minScore: number | undefined,\n signal?: AbortSignal,\n ): Promise<SearchResult<BaseEntity>[]> {\n const alpha = EntitySearch.FTS_ALPHA;\n\n // Vector similarity score (0..1, higher is better)\n const vectorScore = sql<number>`(1.0 - vector_distance_cos(emb_e.embedding, vector32(${embeddingArray})) / 2.0) * (${weightMultiplier})`;\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${embeddingArray}))`;\n\n // FTS5 keyword boost: 1.0 when matched, 0.0 when not. The matches are a\n // list SQLite builds once per statement; a subquery correlated with the\n // candidate reruns the match for every entity, seconds on a book corpus.\n // Wrap in double quotes for phrase matching — prevents special characters\n // (?, *, OR, AND, etc.) from being parsed as FTS5 operators.\n const ftsQuery = '\"' + query.replace(/\"/g, '\"\"') + '\"';\n const ftsBoost = sql<number>`CASE WHEN (${entities.entityType}, ${entities.id}) IN (\n SELECT entity_type, entity_id FROM entity_fts WHERE entity_fts MATCH ${ftsQuery}\n ) THEN 1.0 ELSE 0.0 END`;\n\n // Combined score: (1-α)*vector + α*keyword_match\n const combinedScore = sql<number>`(${1 - alpha} * ${vectorScore}) + (${alpha} * ${ftsBoost})`;\n\n const results = await this.db\n .select({\n id: entities.id,\n entityType: entities.entityType,\n content: entities.content,\n contentHash: entities.contentHash,\n visibility: entities.visibility,\n created: entities.created,\n updated: entities.updated,\n metadata: entities.metadata,\n distance: distanceExpr,\n weighted_score: combinedScore,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n sql`${distanceExpr} < ${MAX_VECTOR_DISTANCE}`,\n ...(minScore !== undefined\n ? [sql`${combinedScore} >= ${minScore}`]\n : []),\n ...typeConditions,\n ),\n )\n .orderBy(desc(combinedScore))\n .limit(limit)\n .offset(offset);\n signal?.throwIfAborted();\n return this.mapSearchResults(results, query);\n }\n\n /**\n * Search entities by type and query\n */\n public async searchEntities(\n entityType: string,\n query: string,\n options?: { limit?: number },\n ): Promise<SearchResult[]> {\n // Build search options with the entity type filter\n const searchOptions: SearchOptions = {\n types: [entityType],\n limit: options?.limit ?? 20,\n offset: 0,\n sortBy: \"relevance\",\n sortDirection: \"desc\",\n };\n\n return this.search(query, searchOptions);\n }\n\n /**\n * Project visible entity embeddings into a provider-independent semantic\n * space. Raw vectors never cross the entity-service boundary.\n */\n public async projectSemanticSpace(\n request: ProjectSemanticSpaceRequest,\n ): Promise<SemanticSpaceProjection> {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const listed = request.entities\n ? new Set(request.entities.map(referenceKey))\n : undefined;\n const pointTypes = request.entities\n ? new Set(request.entities.map(({ entityType }) => entityType))\n : request.types && request.types.length > 0\n ? new Set(request.types)\n : undefined;\n\n const embeddings = (\n await this.readEmbeddings(\n pointTypes ? Array.from(pointTypes) : undefined,\n request.visibilityScope,\n request.entities?.map(({ entityId }) => entityId),\n )\n ).filter((embedding) => !listed || listed.has(referenceKey(embedding)));\n const originReference = request.origin;\n // An origin of a type outside the points is read alone: reading its whole\n // type to find one vector makes a page per entry quadratic.\n const origin = originReference\n ? (embeddings.find(\n (embedding) =>\n embedding.entityId === originReference.entityId &&\n embedding.entityType === originReference.entityType,\n ) ??\n (pointTypes?.has(originReference.entityType) === false\n ? (\n await this.readEmbeddings(\n [originReference.entityType],\n request.visibilityScope,\n [originReference.entityId],\n )\n )[0]\n : undefined))\n : undefined;\n const points = embeddings.filter((embedding) => {\n const matchesPointType = pointTypes?.has(embedding.entityType) ?? true;\n const isOrigin =\n embedding.entityId === originReference?.entityId &&\n embedding.entityType === originReference.entityType;\n return matchesPointType && !isOrigin;\n });\n\n return buildSemanticSpaceProjection(points, {\n ...(origin && { origin }),\n ...(request.maxNeighborDistance !== undefined && {\n maxNeighborDistance: request.maxNeighborDistance,\n }),\n });\n }\n\n /** Read and decode vectors from the attached embedding database. */\n private async readEmbeddings(\n types?: string[],\n visibilityScope?: ContentVisibility,\n entityIds?: readonly string[],\n ): Promise<SemanticEmbedding[]> {\n const conditions = this.buildVisibilityConditions(visibilityScope);\n if (types && types.length > 0) {\n conditions.push(inArray(entities.entityType, types));\n }\n if (entityIds !== undefined) {\n conditions.push(inArray(entities.id, [...entityIds]));\n }\n\n const embeddingExpr = sql<Float32Array>`emb_e.embedding`.mapWith({\n mapFromDriverValue(value: unknown): Float32Array {\n if (!ArrayBuffer.isView(value)) {\n throw new TypeError(\n \"Expected embedding blob to be an ArrayBuffer view\",\n );\n }\n\n const source = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n if (source.byteLength % Float32Array.BYTES_PER_ELEMENT !== 0) {\n throw new RangeError(\n \"Embedding blob byte length must be divisible by 4\",\n );\n }\n\n const copy = new Uint8Array(source.byteLength);\n copy.set(source);\n return new Float32Array(copy.buffer);\n },\n });\n\n return this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n embedding: embeddingExpr,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(conditions.length > 0 ? and(...conditions) : undefined)\n .orderBy(asc(entities.entityType), asc(entities.id));\n }\n\n /**\n * Visible entities of the given types nearest an entity's stored embedding,\n * closest first. The origin is read alone and within the same scope; an\n * origin out of scope or without an embedding has no neighbours.\n */\n public async nearestToEntity(\n request: NearestToEntityRequest,\n ): Promise<NearestEntity[]> {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const [origin] = await this.readEmbeddings(\n [request.origin.entityType],\n request.visibilityScope,\n [request.origin.entityId],\n );\n if (!origin || request.types.length === 0) return [];\n\n const originVector = JSON.stringify(Array.from(origin.embedding));\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${originVector}))`;\n const query = this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n distance: distanceExpr,\n metadata: entities.metadata,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n ...this.buildVisibilityConditions(request.visibilityScope),\n inArray(entities.entityType, request.types),\n request.publishedOnly\n ? publishedAcrossTypesCondition(this.publishGates())\n : undefined,\n sql`NOT (${entities.id} = ${request.origin.entityId} AND ${entities.entityType} = ${request.origin.entityType})`,\n request.maxDistance !== undefined\n ? sql`${distanceExpr} <= ${request.maxDistance}`\n : undefined,\n ),\n )\n .orderBy(sql`${distanceExpr} ASC`);\n const rows =\n request.limit !== undefined\n ? await query.limit(request.limit)\n : await query;\n return rows.map(({ metadata, ...nearest }) =>\n request.includeMetadata ? { ...nearest, metadata } : nearest,\n );\n }\n\n /**\n * Return embedded entities with their raw cosine distance to the query,\n * sorted closest first. Without filters every embedded entity is returned,\n * for diagnostics and threshold tuning; `types` and `maxDistance` narrow it\n * in the query for callers that look for one close match.\n */\n public async searchWithDistances(\n query: string,\n filters: {\n readonly types?: string[] | undefined;\n readonly maxDistance?: number | undefined;\n } = {},\n ): Promise<\n Array<{ entityId: string; entityType: string; distance: number }>\n > {\n if (!this.embeddingsEnabled) {\n throw new SemanticIndexingDisabledError();\n }\n const preparedQuery = prepareSearchQuery(query, this.logger);\n const { embedding: queryEmbedding } =\n await this.embeddingService.generateEmbedding(preparedQuery);\n const embeddingArray = JSON.stringify(Array.from(queryEmbedding));\n\n const distanceExpr = sql<number>`vector_distance_cos(emb_e.embedding, vector32(${embeddingArray}))`;\n\n const results = await this.db\n .select({\n entityId: entities.id,\n entityType: entities.entityType,\n distance: distanceExpr,\n })\n .from(entities)\n .innerJoin(\n sql`emb.embeddings AS emb_e`,\n sql`${entities.id} = emb_e.entity_id AND ${entities.entityType} = emb_e.entity_type`,\n )\n .where(\n and(\n filters.types && filters.types.length > 0\n ? inArray(entities.entityType, filters.types)\n : undefined,\n filters.maxDistance !== undefined\n ? sql`${distanceExpr} <= ${filters.maxDistance}`\n : undefined,\n ),\n )\n .orderBy(sql`${distanceExpr} ASC`);\n\n return results;\n }\n\n /**\n * Transform raw query rows into SearchResult objects\n */\n private mapSearchResults(\n results: Array<{\n id: string;\n entityType: string;\n content: string;\n contentHash: string;\n visibility: ContentVisibility;\n created: number;\n updated: number;\n metadata: unknown;\n weighted_score: number;\n }>,\n query: string,\n ): SearchResult<BaseEntity>[] {\n const searchResults: SearchResult<BaseEntity>[] = [];\n\n for (const row of results) {\n try {\n const metadata = entityMetadataSchema.parse(row.metadata);\n\n const entity = this.serializer.reconstructEntity({\n id: row.id,\n entityType: row.entityType,\n content: row.content,\n contentHash: row.contentHash,\n visibility: row.visibility,\n created: row.created,\n updated: row.updated,\n metadata,\n });\n\n searchResults.push({\n entity,\n score: row.weighted_score,\n excerpt: this.createExcerpt(row.content, query),\n });\n } catch (error) {\n this.logger.error(`Failed to parse entity during search: ${error}`);\n }\n }\n\n const queryPreview =\n query.length > 50 ? query.substring(0, 50) + \"...\" : query;\n this.logger.debug(\n `Found ${searchResults.length} results for query \"${queryPreview}\"`,\n );\n\n return searchResults;\n }\n\n /**\n * Create an excerpt from content based on query\n */\n private createExcerpt(markdown: string, query: string): string {\n // A reader of the result sees its text, not its frontmatter.\n const content = markdownBody(markdown);\n const maxLength = 200;\n const queryLower = query.toLowerCase();\n const contentLower = content.toLowerCase();\n\n // Find the position of the query in the content\n const position = contentLower.indexOf(queryLower);\n\n if (position !== -1) {\n // Extract text around the query\n const start = Math.max(0, position - 50);\n const end = Math.min(content.length, position + queryLower.length + 50);\n let excerpt = content.slice(start, end);\n\n // Add ellipsis if needed\n if (start > 0) excerpt = \"...\" + excerpt;\n if (end < content.length) excerpt = excerpt + \"...\";\n\n return excerpt;\n }\n\n // If query not found, return beginning of content\n return (\n content.slice(0, maxLength) + (content.length > maxLength ? \"...\" : \"\")\n );\n }\n}\n\n/** One key for an entity reference: type and id. */\nfunction referenceKey(reference: {\n entityType: string;\n entityId: string;\n}): string {\n return `${reference.entityType}:${reference.entityId}`;\n}\n",
238
238
  "import {\n generateMarkdown,\n readMarkdownFrontmatter,\n} from \"@brains/utils/markdown-frontmatter\";\nimport { z } from \"@brains/utils/zod\";\nimport type { FrontmatterSchema } from \"./types\";\n\nconst recordSchema = z.record(z.string(), z.unknown());\nconst policyKeys = new Set([\n \"id\",\n \"entityType\",\n \"content\",\n \"contentHash\",\n \"created\",\n \"updated\",\n \"visibility\",\n]);\n\n/** How a registered field whose stored value fails its own schema is treated. */\nexport type InvalidFieldPolicy = \"reject\" | \"omit\";\n\n/** Projection is derived from source, never from a caller's cached metadata. */\nexport function projectFrontmatterExtensions(\n source: Record<string, unknown>,\n metadata: Record<string, unknown>,\n extensions: readonly FrontmatterSchema[],\n invalid: InvalidFieldPolicy = \"reject\",\n): Record<string, unknown> {\n if (extensions.length === 0) return metadata;\n const projected = { ...metadata };\n for (const extension of extensions) {\n const keys = Object.keys(extension.shape);\n const input = Object.fromEntries(\n keys\n .filter((key) => Object.hasOwn(source, key))\n .map((key) => [key, source[key]]),\n );\n // Parse the whole extension, including cross-field refinements. Only this\n // extension's own keys are read, so another field's error never lands here.\n const result = extension.safeParse(input);\n if (!result.success && invalid === \"reject\") throw result.error;\n for (const key of keys) {\n delete projected[key];\n if (\n result.success &&\n Object.hasOwn(source, key) &&\n result.data[key] !== undefined &&\n !policyKeys.has(key)\n ) {\n projected[key] = result.data[key];\n }\n }\n }\n return projected;\n}\n\n/** Preserve unclaimed source fields even after their extension is disabled.\n * Export deliberately does not validate/repair malformed persisted values.\n */\nexport function preserveSourceFrontmatter(\n sourceContent: string,\n serializedContent: string,\n ownerSchema: FrontmatterSchema | undefined,\n extensions: readonly FrontmatterSchema[],\n groupingFields: readonly string[] = [],\n retiredFields: readonly string[] = [],\n): string {\n if (!ownerSchema) return serializedContent;\n // A nested path retires a key inside its object, never the object itself.\n const retired = new Set(retiredFields.filter((path) => !path.includes(\".\")));\n const source = readMarkdownFrontmatter(sourceContent);\n const serialized = readMarkdownFrontmatter(serializedContent);\n const sourceFields = recordSchema.parse(source.data);\n const serializedFields = recordSchema.parse(serialized.data);\n const extensionKeys = new Set([\n ...extensions.flatMap((schema) => Object.keys(schema.shape)),\n ...groupingFields,\n ]);\n const additions = Object.entries(sourceFields).filter(\n ([key, value]) =>\n !policyKeys.has(key) &&\n !retired.has(key) &&\n (!Object.hasOwn(ownerSchema.shape, key) || extensionKeys.has(key)) &&\n (!Object.hasOwn(serializedFields, key) ||\n JSON.stringify(serializedFields[key]) !== JSON.stringify(value)),\n );\n const removals = [\n ...[...extensionKeys].filter(\n (key) =>\n !Object.hasOwn(sourceFields, key) &&\n Object.hasOwn(serializedFields, key),\n ),\n ...[...retired].filter((key) => Object.hasOwn(serializedFields, key)),\n ];\n const merged = { ...serializedFields };\n for (const key of removals) delete merged[key];\n for (const [key, value] of additions) merged[key] = value;\n const result = dropFields(merged, retiredFields) ?? merged;\n if (additions.length === 0 && removals.length === 0 && result === merged)\n return serializedContent;\n // Unlike the domain formatter, preserve explicit null in unclaimed fields.\n return Object.keys(result).length > 0\n ? generateMarkdown(result, serialized.content)\n : serialized.content;\n}\n\n/** Keys a type never writes: its retired and its translated fields. */\nexport function unwrittenFields(config: {\n retiredFields?: readonly string[] | undefined;\n translatedFields?: readonly string[] | undefined;\n}): readonly string[] {\n return [...(config.retiredFields ?? []), ...(config.translatedFields ?? [])];\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The record without the given fields: a top-level key, or a key one level\n * down as `parent.key`. Undefined when the record holds none of them.\n */\nexport function dropFields(\n record: Record<string, unknown>,\n paths: readonly string[],\n): Record<string, unknown> | undefined {\n const result = paths.reduce<Record<string, unknown>>((current, path) => {\n const [parent, key] = path.split(\".\", 2);\n if (parent === undefined || !Object.hasOwn(current, parent)) return current;\n if (key === undefined) {\n const { [parent]: _dropped, ...rest } = current;\n return rest;\n }\n const nested = current[parent];\n if (!isPlainRecord(nested) || !Object.hasOwn(nested, key)) return current;\n const { [key]: _dropped, ...kept } = nested;\n return { ...current, [parent]: kept };\n }, record);\n return result === record ? undefined : result;\n}\n\n/** Markdown with the given frontmatter keys removed; unchanged when it has none of them. */\nexport function withoutFrontmatterFields(\n content: string,\n fields: readonly string[],\n): string {\n if (fields.length === 0) return content;\n const parsed = readMarkdownFrontmatter(content);\n const data = recordSchema.safeParse(parsed.data);\n if (!data.success) return content;\n const kept = dropFields(data.data, fields);\n if (!kept) return content;\n return Object.keys(kept).length > 0\n ? generateMarkdown(kept, parsed.content)\n : parsed.content;\n}\n",
239
239
  "import { z } from \"@brains/utils/zod\";\nimport { canonicalContentVisibilitySchema } from \"./visibility\";\n\nexport const entityGroupingSchema: z.ZodObject<{\n key: z.ZodString;\n label: z.ZodString;\n field: z.ZodString;\n types: z.ZodArray<z.ZodString>;\n}> = z.strictObject({\n key: z\n .string()\n .min(1)\n .max(80)\n .regex(/^[a-z][a-z0-9-]*$/),\n label: z.string().trim().min(1).max(100),\n field: z\n .string()\n .min(1)\n .max(80)\n .regex(/^[a-z][a-z0-9-]*$/),\n types: z\n .array(z.string().min(1).max(100))\n .min(1)\n .max(100)\n .refine(\n (types) => new Set(types).size === types.length,\n \"Grouping types must be unique\",\n ),\n});\nexport type EntityGrouping = z.infer<typeof entityGroupingSchema>;\n\n/** One ordering vocabulary, shared by the queries, the routes and the UI. */\nexport const groupingSortSchema: z.ZodEnum<{\n \"updated-desc\": \"updated-desc\";\n \"updated-asc\": \"updated-asc\";\n \"created-desc\": \"created-desc\";\n \"created-asc\": \"created-asc\";\n}> = z.enum([\"updated-desc\", \"updated-asc\", \"created-desc\", \"created-asc\"]);\nexport type GroupingSort = z.infer<typeof groupingSortSchema>;\n\nexport const GROUPING_PAGE_LIMIT = 50;\nexport const GROUPING_MAX_PAGE_LIMIT = 100;\n/** Bounds every grouping read, whoever builds the request. */\nexport const groupingKeySchema: z.ZodString = z.string().min(1).max(80);\nexport const groupingValueSchema: z.ZodString = z.string().max(10000);\nexport const groupingSearchSchema: z.ZodString = z.string().max(200);\n\nexport const queryGroupingCatalogSchema: z.ZodObject<{\n grouping: z.ZodString;\n entityTypes: z.ZodArray<z.ZodString>;\n visibilityScope: z.ZodOptional<typeof canonicalContentVisibilitySchema>;\n limit: z.ZodDefault<z.ZodNumber>;\n offset: z.ZodDefault<z.ZodNumber>;\n signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;\n}> = z.object({\n grouping: groupingKeySchema,\n /** Required caller-admitted set; it can only narrow the declared types. */\n entityTypes: z.array(z.string().min(1)).max(100),\n visibilityScope: canonicalContentVisibilitySchema.optional(),\n limit: z\n .number()\n .int()\n .min(1)\n .max(GROUPING_MAX_PAGE_LIMIT)\n .default(GROUPING_PAGE_LIMIT),\n offset: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER).default(0),\n signal: z.instanceof(AbortSignal).optional(),\n});\n\nexport const queryGroupingMembersSchema: z.ZodObject<{\n grouping: z.ZodString;\n entityTypes: z.ZodArray<z.ZodString>;\n visibilityScope: z.ZodOptional<typeof canonicalContentVisibilitySchema>;\n limit: z.ZodDefault<z.ZodNumber>;\n offset: z.ZodDefault<z.ZodNumber>;\n signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;\n value: z.ZodString;\n q: z.ZodOptional<z.ZodString>;\n sort: z.ZodDefault<typeof groupingSortSchema>;\n}> = queryGroupingCatalogSchema.extend({\n value: groupingValueSchema,\n q: groupingSearchSchema.optional(),\n sort: groupingSortSchema.default(\"updated-desc\"),\n});\n\n/** Usage is a distinct entry total plus counts for a bounded set of exact values. */\nexport const queryGroupingUsageSchema: z.ZodObject<{\n grouping: z.ZodString;\n entityTypes: z.ZodArray<z.ZodString>;\n visibilityScope: z.ZodOptional<typeof canonicalContentVisibilitySchema>;\n signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;\n values: z.ZodDefault<z.ZodArray<z.ZodString>>;\n}> = queryGroupingCatalogSchema.omit({ limit: true, offset: true }).extend({\n values: z.array(groupingValueSchema).max(GROUPING_MAX_PAGE_LIMIT).default([]),\n});\nexport type QueryGroupingUsageRequest = z.input<\n typeof queryGroupingUsageSchema\n>;\nexport interface EntityGroupingUsage {\n /** Entries with at least one text membership, including values outside a list. */\n entries: number;\n /** Request order and literals preserved; unused values have a zero count. */\n values: Array<{ value: string; count: number }>;\n}\n\nexport type QueryGroupingCatalogRequest = z.input<\n typeof queryGroupingCatalogSchema\n>;\nexport type QueryGroupingMembersRequest = z.input<\n typeof queryGroupingMembersSchema\n>;\n\nexport interface EntityGroupingCatalog {\n values: Array<{ value: string; count: number }>;\n total: number;\n}\nexport const GROUPING_RESERVED_FIELDS: ReadonlySet<string> = new Set([\n \"id\",\n \"entityType\",\n \"entity-type\",\n \"content\",\n \"contentHash\",\n \"content-hash\",\n \"created\",\n \"updated\",\n \"visibility\",\n \"metadata\",\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n",
240
240
  "import { z } from \"@brains/utils/zod\";\nimport { sql, type SQL, type SQLWrapper } from \"drizzle-orm\";\n\nexport type EntityIdPath = [string, ...string[]];\nexport type EntityIdPathInput = readonly [string, ...string[]];\n\nconst SEPARATOR = \":\";\n\nconst storedSegmentSchema = z\n .string()\n .refine((segment) => !segment.includes(SEPARATOR), {\n message: `Entity ID path segments cannot contain '${SEPARATOR}'`,\n });\n\n/** Navigation of existing identity is not validation of a new filesystem-safe path. */\nexport const storedEntityIdPathSchema: z.ZodType<EntityIdPath, unknown> =\n z.tuple([storedSegmentSchema], storedSegmentSchema);\n\nconst entityIdPathSegmentSchema = storedSegmentSchema\n .min(1)\n .refine((segment) => segment !== \".\" && segment !== \"..\", {\n message: \"Entity ID path segments cannot be dot segments\",\n })\n .refine((segment) => !segment.includes(\"/\") && !segment.includes(\"\\\\\"), {\n message: \"Entity ID path segments cannot contain path separators\",\n })\n .refine((segment) => !segment.includes(\"\\0\"), {\n message: \"Entity ID path segments cannot contain null bytes\",\n });\n\n/** Validates author input once; typed paths past this boundary are trusted. */\nexport const entityIdPathSchema: z.ZodType<EntityIdPath, unknown> = z.tuple(\n [entityIdPathSegmentSchema],\n entityIdPathSegmentSchema,\n);\n\n/** Serialize segments at a storage boundary; validate new author input separately. */\nexport function encodeEntityIdPath(path: EntityIdPathInput): string {\n return path.join(SEPARATOR);\n}\n\n/**\n * Decode stored identity losslessly, including values predating authoring validation.\n * Do not filter empty segments or normalize path-like values here: re-encoding must\n * reproduce the original ID. Filesystem placement belongs to directory-sync.\n */\nexport function decodeEntityIdPath(id: string): EntityIdPath {\n const [first = \"\", ...rest] = id.split(SEPARATOR);\n return [first, ...rest];\n}\n\n/** Database projection uses the same separator as encoding, never a second parser. */\nexport function entityIdHierarchyExpressions(\n id: SQLWrapper,\n prefix: EntityIdPathInput | null,\n): { withinPrefix: SQL; directChild: SQL; childName: SQL<ArrayBuffer> } {\n const prefixId =\n prefix === null ? \"\" : encodeEntityIdPath(prefix) + SEPARATOR;\n // Byte comparisons are case-sensitive, treat LIKE metacharacters literally,\n // and preserve Unicode and embedded NULs (SQLite text length stops at NUL).\n const bytes = sql`CAST(${id} AS BLOB)`;\n const prefixBytes = sql`CAST(${prefixId} AS BLOB)`;\n const remainder = sql`substr(${bytes}, length(${prefixBytes}) + 1)`;\n const separatorAt = sql`instr(${remainder}, CAST(${SEPARATOR} AS BLOB))`;\n return {\n // A half-open range preserves literal, binary prefix matching and lets\n // SQLite seek its existing ID index. The terminal separator supplies the\n // upper bound; callers never construct it or know its representation.\n withinPrefix:\n prefix === null\n ? sql`1 = 1`\n : sql`${id} >= ${prefixId} AND ${id} < ${encodeEntityIdPath(prefix) + String.fromCharCode(SEPARATOR.charCodeAt(0) + 1)}`,\n directChild: sql`${separatorAt} = 0`,\n childName: sql<ArrayBuffer>`substr(${remainder}, 1, ${separatorAt} - 1)`,\n };\n}\n",
@@ -44,7 +44,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
44
44
  .allow-interactivity-`).concat(t,` {pointer-events: all;}
45
45
  `)},tr=0,Et=[];function er(t){var e=D.useRef([]),n=D.useRef([0,0]),o=D.useRef(),x=D.useState(tr++)[0],a=D.useState(So)[0],r=D.useRef(t);D.useEffect(function(){r.current=t},[t]),D.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(x));var p=ja([t.lockRef.current],(t.shards||[]).map(Tn),!0).filter(Boolean);return p.forEach(function(f){return f.classList.add("allow-interactivity-".concat(x))}),function(){document.body.classList.remove("block-interactivity-".concat(x)),p.forEach(function(f){return f.classList.remove("allow-interactivity-".concat(x))})}}return},[t.inert,t.lockRef.current,t.shards]);var c=D.useCallback(function(p,f){if("touches"in p&&p.touches.length===2||p.type==="wheel"&&p.ctrlKey)return!r.current.allowPinchZoom;var w=Jt(p),S=n.current,j="deltaX"in p?p.deltaX:S[0]-w[0],O="deltaY"in p?p.deltaY:S[1]-w[1],E,R=p.target,C=Math.abs(j)>Math.abs(O)?"h":"v";if("touches"in p&&C==="h"&&R.type==="range")return!1;var st=window.getSelection(),ut=st&&st.anchorNode,V=ut?ut===R||ut.contains(R):!1;if(V)return!1;var N=Sn(C,R);if(!N)return!0;if(N)E=C;else E=C==="v"?"h":"v",N=Sn(C,R);if(!N)return!1;if(!o.current&&"changedTouches"in p&&(j||O))o.current=E;if(!E)return!0;var L=o.current||E;return Za(L,f,p,L==="h"?j:O,!0)},[]),u=D.useCallback(function(p){var f=p;if(!Et.length||Et[Et.length-1]!==a)return;var w="deltaY"in f?En(f):Jt(f),S=e.current.filter(function(E){return E.name===f.type&&(E.target===f.target||f.target===E.shadowParent)&&Ua(E.delta,w)})[0];if(S&&S.should){if(f.cancelable)f.preventDefault();return}if(!S){var j=(r.current.shards||[]).map(Tn).filter(Boolean).filter(function(E){return E.contains(f.target)}),O=j.length>0?c(f,j[0]):!r.current.noIsolation;if(O){if(f.cancelable)f.preventDefault()}}},[]),l=D.useCallback(function(p,f,w,S){var j={name:p,delta:f,target:w,should:S,shadowParent:nr(w)};e.current.push(j),setTimeout(function(){e.current=e.current.filter(function(O){return O!==j})},1)},[]),d=D.useCallback(function(p){n.current=Jt(p),o.current=void 0},[]),s=D.useCallback(function(p){l(p.type,En(p),p.target,c(p,t.lockRef.current))},[]),i=D.useCallback(function(p){l(p.type,Jt(p),p.target,c(p,t.lockRef.current))},[]);D.useEffect(function(){return Et.push(a),t.setCallbacks({onScrollCapture:s,onWheelCapture:s,onTouchMoveCapture:i}),document.addEventListener("wheel",u,St),document.addEventListener("touchmove",u,St),document.addEventListener("touchstart",d,St),function(){Et=Et.filter(function(p){return p!==a}),document.removeEventListener("wheel",u,St),document.removeEventListener("touchmove",u,St),document.removeEventListener("touchstart",d,St)}},[]);var{removeScrollBar:k,inert:g}=t;return D.createElement(D.Fragment,null,g?D.createElement(a,{styles:Ka(x)}):null,k?D.createElement(Ba,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function nr(t){var e=null;while(t!==null){if(t instanceof ShadowRoot)e=t.host,t=t.host;t=t.parentNode}return e}var or=Ta(Mo,er),Oo=ce.forwardRef(function(t,e){return ce.createElement(ge,ct({},t,{ref:e,sideCar:or}))});Oo.classNames=ge.classNames;var xr=Oo,ar=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Tt=new WeakMap,Zt=new WeakMap,Ut={},$e=0,Ro=function(t){return t&&(t.host||Ro(t.parentNode))},rr=function(t,e){return e.map(function(n){if(t.contains(n))return n;var o=Ro(n);if(o&&t.contains(o))return o;return console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null}).filter(function(n){return Boolean(n)})},ir=function(t,e,n,o){var x=rr(e,Array.isArray(t)?t:[t]);if(!Ut[n])Ut[n]=new WeakMap;var a=Ut[n],r=[],c=new Set,u=new Set(x),l=function(s){if(!s||c.has(s))return;c.add(s),l(s.parentNode)};x.forEach(l);var d=function(s){if(!s||u.has(s))return;Array.prototype.forEach.call(s.children,function(i){if(c.has(i))d(i);else try{var k=i.getAttribute(o),g=k!==null&&k!=="false",p=(Tt.get(i)||0)+1,f=(a.get(i)||0)+1;if(Tt.set(i,p),a.set(i,f),r.push(i),p===1&&g)Zt.set(i,!0);if(f===1)i.setAttribute(n,"true");if(!g)i.setAttribute(o,"true")}catch(w){console.error("aria-hidden: cannot operate on ",i,w)}})};return d(e),c.clear(),$e++,function(){if(r.forEach(function(s){var i=Tt.get(s)-1,k=a.get(s)-1;if(Tt.set(s,i),a.set(s,k),!i){if(!Zt.has(s))s.removeAttribute(o);Zt.delete(s)}if(!k)s.removeAttribute(n)}),$e--,!$e)Tt=new WeakMap,Tt=new WeakMap,Zt=new WeakMap,Ut={}}},sr=function(t,e,n){if(n===void 0)n="data-aria-hidden";var o=Array.from(Array.isArray(t)?t:[t]),x=e||ar(t);if(!x)return function(){return null};return o.push.apply(o,Array.from(x.querySelectorAll("[aria-live], script"))),ir(o,x,n,"aria-hidden")},he="Dialog",[Ao,Io]=go(he),[cr,it]=Ao(he),Co=(t)=>{let{__scopeDialog:e,children:n,open:o,defaultOpen:x,onOpenChange:a,modal:r=!0}=t,c=I.useRef(null),u=I.useRef(null),[l,d]=Px({prop:o,defaultProp:x??!1,onChange:a,caller:he});return A.jsx(cr,{scope:e,triggerRef:c,contentRef:u,contentId:be(),titleId:be(),descriptionId:be(),open:l,onOpenChange:d,onOpenToggle:I.useCallback(()=>d((s)=>!s),[d]),modal:r,children:n})};Co.displayName=he;var Po="DialogTrigger",Go=I.forwardRef((t,e)=>{let{__scopeDialog:n,...o}=t,x=it(Po,n),a=mt(e,x.triggerRef);return A.jsx(pt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":x.open,"aria-controls":x.open?x.contentId:void 0,"data-state":Fe(x.open),...o,ref:a,onClick:dt(t.onClick,x.onOpenToggle)})});Go.displayName=Po;var _e="DialogPortal",[lr,Vo]=Ao(_e,{forceMount:void 0}),Wo=(t)=>{let{__scopeDialog:e,forceMount:n,children:o,container:x}=t,a=it(_e,e);return A.jsx(lr,{scope:e,forceMount:n,children:I.Children.map(o,(r)=>A.jsx(fe,{present:n||a.open,children:A.jsx(zo,{asChild:!0,container:x,children:r})}))})};Wo.displayName=_e;var ne="DialogOverlay",Lo=I.forwardRef((t,e)=>{let n=Vo(ne,t.__scopeDialog),{forceMount:o=n.forceMount,...x}=t,a=it(ne,t.__scopeDialog);return a.modal?A.jsx(fe,{present:o||a.open,children:A.jsx(dr,{...x,ref:e})}):null});Lo.displayName=ne;var ur=pe("DialogOverlay.RemoveScroll"),dr=I.forwardRef((t,e)=>{let{__scopeDialog:n,...o}=t,x=it(ne,n),a=xa(),r=mt(e,a);return A.jsx(xr,{as:ur,allowPinchZoom:!0,shards:[x.contentRef],children:A.jsx(pt.div,{"data-state":Fe(x.open),...o,ref:r,style:{pointerEvents:"auto",...o.style}})})}),At="DialogContent",Ho=I.forwardRef((t,e)=>{let n=Vo(At,t.__scopeDialog),{forceMount:o=n.forceMount,...x}=t,a=it(At,t.__scopeDialog);return A.jsx(fe,{present:o||a.open,children:a.modal?A.jsx(kr,{...x,ref:e}):A.jsx(mr,{...x,ref:e})})});Ho.displayName=At;var kr=I.forwardRef((t,e)=>{let n=it(At,t.__scopeDialog),o=I.useRef(null),x=mt(e,n.contentRef,o);return I.useEffect(()=>{let a=o.current;if(a)return sr(a)},[]),A.jsx(Bo,{...t,ref:x,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:dt(t.onCloseAutoFocus,(a)=>{a.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:dt(t.onPointerDownOutside,(a)=>{let r=a.detail.originalEvent,c=r.button===0&&r.ctrlKey===!0;if(r.button===2||c)a.preventDefault()}),onFocusOutside:dt(t.onFocusOutside,(a)=>a.preventDefault())})}),mr=I.forwardRef((t,e)=>{let n=it(At,t.__scopeDialog),o=I.useRef(!1),x=I.useRef(!1);return A.jsx(Bo,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:(a)=>{if(t.onCloseAutoFocus?.(a),!a.defaultPrevented){if(!o.current)n.triggerRef.current?.focus();a.preventDefault()}o.current=!1,x.current=!1},onInteractOutside:(a)=>{if(t.onInteractOutside?.(a),!a.defaultPrevented){if(o.current=!0,a.detail.originalEvent.type==="pointerdown")x.current=!0}let r=a.target;if(n.triggerRef.current?.contains(r))a.preventDefault();if(a.detail.originalEvent.type==="focusin"&&x.current)a.preventDefault()}})}),Bo=I.forwardRef((t,e)=>{let{__scopeDialog:n,trapFocus:o,onOpenAutoFocus:x,onCloseAutoFocus:a,...r}=t,c=it(At,n);return ya(),A.jsx(A.Fragment,{children:A.jsx(wo,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:x,onUnmountAutoFocus:a,children:A.jsx(yo,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Fe(c.open),...r,ref:e,deferPointerDownOutside:!0,onDismiss:()=>c.onOpenChange(!1)})})})}),Xo="DialogTitle",Yo=I.forwardRef((t,e)=>{let{__scopeDialog:n,...o}=t,x=it(Xo,n);return A.jsx(pt.h2,{id:x.titleId,...o,ref:e})});Yo.displayName=Xo;var _o="DialogDescription",Qo=I.forwardRef((t,e)=>{let{__scopeDialog:n,...o}=t,x=it(_o,n);return A.jsx(pt.p,{id:x.descriptionId,...o,ref:e})});Qo.displayName=_o;var Fo="DialogClose",Qe=I.forwardRef((t,e)=>{let{__scopeDialog:n,...o}=t,x=it(Fo,n);return A.jsx(pt.button,{type:"button",...o,ref:e,onClick:dt(t.onClick,()=>x.onOpenChange(!1))})});Qe.displayName=Fo;function Fe(t){return t?"open":"closed"}var Jo="AlertDialog",[pr,fr]=go(Jo,[Io]),ft=Io(),Je=(t)=>{let{__scopeAlertDialog:e,...n}=t,o=ft(e);return at.jsx(Co,{...o,...n,modal:!0})};Je.displayName=Jo;var gr="AlertDialogTrigger",Ze=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,x=ft(n);return at.jsx(Go,{...x,...o,ref:e})});Ze.displayName=gr;var hr="AlertDialogPortal",Ue=(t)=>{let{__scopeAlertDialog:e,...n}=t,o=ft(e);return at.jsx(Wo,{...o,...n})};Ue.displayName=hr;var vr="AlertDialogOverlay",Ke=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,x=ft(n);return at.jsx(Lo,{...x,...o,ref:e})});Ke.displayName=vr;var Zo="AlertDialogContent",[br,yr]=pr(Zo),tn=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,children:o,...x}=t,a=ft(n),r=xt.useRef(null),c=mt(e,r),u=xt.useRef(null);return at.jsx(br,{scope:n,cancelRef:u,children:at.jsx(Ho,{role:"alertdialog",...a,...x,ref:c,onOpenAutoFocus:dt(x.onOpenAutoFocus,(l)=>{l.preventDefault(),u.current?.focus({preventScroll:!0})}),onPointerDownOutside:(l)=>l.preventDefault(),onInteractOutside:(l)=>l.preventDefault(),children:o})})});tn.displayName=Zo;var jr="AlertDialogTitle",en=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,x=ft(n);return at.jsx(Yo,{...x,...o,ref:e})});en.displayName=jr;var wr="AlertDialogDescription",nn=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,x=ft(n);return at.jsx(Qo,{...x,...o,ref:e})});nn.displayName=wr;var qr="AlertDialogAction",on=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,x=ft(n);return at.jsx(Qe,{...x,...o,ref:e})});on.displayName=qr;var Uo="AlertDialogCancel",xn=xt.forwardRef((t,e)=>{let{__scopeAlertDialog:n,...o}=t,{cancelRef:x}=yr(Uo,n),a=ft(n),r=mt(e,x);return at.jsx(Qe,{...a,...o,ref:r})});xn.displayName=Uo;var zr=Je,$r=Ze,Nr=Ue,Mr=Ke,Sr=tn,Er=on,Tr=xn,Dr=en,Or=nn;function Rr(...t){return t.filter(Boolean).join(" ")||void 0}var _={button:{kGNEyG:"x6s0dn4",kysU6D:"xjyslct",ksu8eU:"x1y0btm7",kMzoRj:"xmkeg23",kaIpWk:"xu4hgxq",kB7OPa:"x9f619",kkrTdU:"x1ypdohk",k1xSpc:"x3nfvp2",kmuXW:"x2lah0s",kMv6JI:"x5ddh9m",kGuDYH:"x4z9k3i",k63SB2:"x1s688f",kOIVth:"x167g77z",kjj79g:"xl56j7k",kLWn49:"xo5v014",kAzted:"xu0aao5",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kHjlTd:"xj0a0fe",kI3sdo:"x1a2a7pz",k8WAf4:"x1vvogim",kg3NbH:"xqin4a2",kybGjl:"x1hl2dhg",kmkexE:"x5gjymy x9kvfbb",khDVqt:"xeaf4i8",kEtg5x:"x1a2sn02",kYPGJ8:"x1s07b3s",kWCcOm:"xijokvz",kEVmhK:"x1gl3shj",kTWfjk:"x126n28w",$$css:!0},primary:{kWkggS:"x15vqgvx",kVAM5u:"xawfzfr",kMwMTN:"x1um1dla",k3aq6I:"x1nlf60j x6wgdar",kI3sdo:"x1a2a7pz x1f1sp5 x7iwzyl",kInvED:"xr2mjdv",kIa11j:"xvs6z26",kLmhY5:"xliqn1l",kD2jPA:"x163vtw",kdODIN:"xcysz91",kWC4TW:"x1bi1fg1",kWCcOm:"x1fzehxr",$$css:!0},secondary:{kWkggS:"xbslqsl",kVAM5u:"x8tuc8h",kMwMTN:"xqvuw85",kGzVvX:"x1uvu3ev",kaVNsj:"x1jokge8",$$css:!0},outline:{kWkggS:"xjbqb8w",kVAM5u:"x8tuc8h",kMwMTN:"xgi1xjn",kGzVvX:"xgvbf8n",kaVNsj:"x1jokge8",kDPRdz:"x18m2ztq",$$css:!0},ghost:{kWkggS:"xjbqb8w",kVAM5u:"x9r1u3d",kMwMTN:"xgi1xjn",kGzVvX:"xgvbf8n",kDPRdz:"x18m2ztq",$$css:!0},danger:{kWkggS:"xjbqb8w",kVAM5u:"x1ezim0c",kMwMTN:"x1mel2pz",kGzVvX:"xo6m4nm",kaVNsj:"xu43hr4",kEtg5x:"xfmqteo",$$css:!0},link:{kWkggS:"xjbqb8w",kVAM5u:"x9r1u3d",kMwMTN:"x1myn341",kAzted:"x65nank",k8WAf4:"xj8oexa",kg3NbH:"xnjsko4",k67Jb4:"xt0b8zv",$$css:!0},sizeXs:{kaIpWk:"x1kogg8i",kGuDYH:"x1j6dyjg",kOIVth:"x1nejdyq",kAzted:"xe0p6wg",k8WAf4:"xifx94n",kg3NbH:"x1q4txso",$$css:!0},sizeSm:{kGuDYH:"xfifm61",kAzted:"x21xpn4",k8WAf4:"x1t0vds8",kg3NbH:"xfoe8qy",$$css:!0},sizeLg:{kGuDYH:"xif65rj",kAzted:"xgujvf1",k8WAf4:"xp59q4u",kg3NbH:"x17qtykl",$$css:!0},icon:{kZKoxP:"xc9qbxq",kAzted:"xu0aao5",kmVPX3:"x1717udv",khDVqt:"xuxw1ft",kzqmXN:"x14qfxbe",$$css:!0},iconXs:{kZKoxP:"x1fgtraw",kAzted:"xe0p6wg",kmVPX3:"x1717udv",khDVqt:"xuxw1ft",kzqmXN:"xgd8bvy",$$css:!0},iconSm:{kZKoxP:"x10w6t97",kAzted:"x21xpn4",kmVPX3:"x1717udv",khDVqt:"xuxw1ft",kzqmXN:"x1td3qas",$$css:!0},iconLg:{kZKoxP:"x5kalc8",kAzted:"xgujvf1",khDVqt:"xuxw1ft",kmVPX3:"x1717udv",kzqmXN:"x10h3iyq",$$css:!0},touchIcon:{k7Eaqz:"xeuugli x160ygfx",$$css:!0},control:{kysU6D:"xjyslct",kWkggS:"x18s3upu",kVAM5u:"x8tuc8h",kaIpWk:"xu4hgxq",ksu8eU:"x1y0btm7",kMzoRj:"xmkeg23",kB7OPa:"x9f619",kMwMTN:"xqvuw85",kMv6JI:"x5ddh9m",kGuDYH:"x4z9k3i xhhd8f x1yr6pw4",kLWn49:"x1xfvgam",kAzted:"x1ba4aug",k7Eaqz:"xeuugli",kI3sdo:"x1a2a7pz",k8WAf4:"x1vvogim",kg3NbH:"xfoe8qy",kmkexE:"x1p5amsn",kzqmXN:"xh8yej3",k8Qsv1:"x1wku8z5",k4mVRr:"xf77ohz",kWEjV4:"x6q9x63",kYPGJ8:"x1s07b3s",kWCcOm:"xk0mbs4",kHRqo9:"xck444f",kSaF8F:"x10ve9f0",$$css:!0},select:{kKwaWg:"x18wh80x",k1YJky:"xqbhmck",kz484i:"xiy17q3",kgSjnq:"x6khlng",kwRFfy:"x5zjp28",$$css:!0},textarea:{kAzted:"xefclja",kHenm0:"x288g5",$$css:!0}};function Ar(t,e){let n=t==="default"||t==="primary"?_.primary:t==="destructive"||t==="danger"?_.danger:t==="secondary"?_.secondary:t==="ghost"?_.ghost:t==="link"?_.link:_.outline,o=e==="xs"?_.sizeXs:e==="sm"?_.sizeSm:e==="lg"?_.sizeLg:e==="icon"?_.icon:e==="icon-xs"?_.iconXs:e==="icon-sm"?_.iconSm:e==="icon-lg"?_.iconLg:void 0;return o?[_.button,n,o,e.startsWith("icon")&&_.touchIcon]:[_.button,n]}function oe({className:t,variant:e="default",size:n="default",asChild:o=!1,xstyle:x,style:a,...r}){let c=o?ho.Root:"button",u=T(...Ar(e,n),x);return ro.jsx(c,{"data-slot":"button","data-variant":e,"data-size":n,className:Rr(u.className,t),style:{...u.style,...a},...r})}function Ir(...t){return t.filter(Boolean).join(" ")||void 0}function Cr(){return()=>{}}function Pr(){return!0}function Gr(){return!1}function Vr(t){let e=t.pending===!0,n=ue.useSyncExternalStore(Cr,Pr,Gr),o=n?ht.Portal:ue.Fragment;return J.jsx(ht.Root,{open:!0,onOpenChange:(x)=>{if(!x&&!e)t.onCancel()},children:J.jsxs(o,{...n?{container:document.body}:{},children:[J.jsx(ht.Overlay,{className:"x779uuu xpivpjv x10a8y8t xixxii4 xfo81ep",onPointerDown:t.dismissOnOutside&&!e?t.onCancel:void 0}),J.jsxs(ht.Content,{className:Ir("x18s3upu x8tuc8h xixl9f9 x1y0btm7 xmkeg23 x1b3fvf2 xqvuw85 xj0a0fe xrvj5dj xou54vl x1nrll8i xojfs98 xw7nakj x1a2a7pz x1odjw0f xggk2y7 xixxii4 xwa60dl x11lhmoz xv9tjks x1bkdxzg x1lclwwd xgrp7ii x1imafyg x1lgz1aq x172uiah xxnk3sr xeyi6kz x1lak8av x1qa1qnr xl7365u x1mji7za x1dbdljh","delete-modal",t.sectionClassName),"aria-labelledby":t.titleId,children:[J.jsx("span",{className:"x6s0dn4 xu2kkqm x16rqkct x1mel2pz x3nfvp2 xa9opjo xosj86m xc9qbxq xl56j7k x14qfxbe","aria-hidden":!0,children:t.mark}),J.jsx(ht.Title,{id:t.titleId,className:"xqvuw85 xssy22x x1i1m3gp xk50ysn x1uo3zyz x1ghz6dp",children:t.title}),J.jsx(ht.Description,{asChild:!0,children:J.jsx("div",{children:t.children})}),J.jsxs("div",{className:"x78zum5 x883omv x13a6bvl x10acg2q x5z33oq",children:[J.jsx(ht.Cancel,{asChild:!0,children:J.jsx(oe,{type:"button",variant:"outline",disabled:e,children:t.cancelLabel})}),J.jsx(oe,{type:"button",variant:t.confirmVariant??"primary",className:t.confirmClassName,disabled:e,onClick:t.onConfirm,children:t.confirmLabel})]})]})]})})}var Ei=We.createContext(void 0);function Ko(t){return K.jsxs(K.Fragment,{children:[K.jsx("p",{...{0:{className:"x1pz56wa x5ddh9m xfifm61 xa7kkou xgi1xjn xj0a0fe"},4:{className:"x1pz56wa x5ddh9m xgi1xjn xj0a0fe x1ct8sxb x1evy7pa"},2:{className:"x1pz56wa x5ddh9m xfifm61 xgi1xjn xj0a0fe x1dbl2gt"},6:{className:"x1pz56wa x5ddh9m xgi1xjn xj0a0fe x1ct8sxb x1dbl2gt"},1:{className:"x1pz56wa x5ddh9m xfifm61 xa7kkou xgi1xjn xj0a0fe x104kibb x1ua5tub x1h7i4cw xb3r6kr"},5:{className:"x1pz56wa x5ddh9m xgi1xjn xj0a0fe x1ct8sxb x1evy7pa x104kibb x1ua5tub x1h7i4cw xb3r6kr"},3:{className:"x1pz56wa x5ddh9m xfifm61 xgi1xjn xj0a0fe x1dbl2gt x104kibb x1ua5tub x1h7i4cw xb3r6kr"},7:{className:"x1pz56wa x5ddh9m xgi1xjn xj0a0fe x1ct8sxb x1dbl2gt x104kibb x1ua5tub x1h7i4cw xb3r6kr"}}[(t.density==="compact")<<2|!!t.activity<<1|!!t.clamp<<0],children:t.text}),t.children]})}function Wr(t){let e=t.density==="compact";return K.jsxs("div",{...{className:"xeuugli x845mor"},children:[K.jsx("strong",{...T(jt.title,e&&!t.presentation&&jt.compactTitle,t.presentation==="editorial"&&jt.editorial,t.presentation==="attention"&&jt.attention,t.presentation==="attention"&&t.primary&&jt.primaryAttention,t.presentation==="activity"&&jt.activity,t.clamp&&jt.clamped),children:t.title}),typeof t.description==="string"?K.jsx(Ko,{text:t.description,density:e&&!t.presentation?"compact":"comfortable",activity:t.presentation==="activity",clamp:t.clamp}):t.description,t.metadata.length>0&&K.jsx("small",{...{0:{className:"x1lliihq x1xmf6yo xa9opjo x1j6dyjg x1dbl2gt x1ar3pfp xj0a0fe"},1:{className:"x1lliihq x1xmf6yo x1dbl2gt x1ar3pfp xj0a0fe xa9opjo x1s31vzs"}}[!!e<<0],children:K.jsx(me,{values:t.metadata,stackDates:t.presentation==="activity"})}),t.children]})}function Ne(t){let e={0:{},8:{className:"x1717udv xc342km xjbqb8w x1myn341 xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484"},4:{className:"x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006"},12:{className:"x1717udv xc342km xjbqb8w x1myn341 xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006"},2:{className:"x1heor9g xz2iokx"},10:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 x1heor9g xz2iokx"},6:{className:"x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 x1heor9g xz2iokx"},14:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 x1heor9g xz2iokx"},1:{className:"xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},9:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},5:{className:"x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},13:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},3:{className:"xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},11:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},7:{className:"x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"},15:{className:"x1717udv xc342km xjbqb8w xjb2p0i x1qlqyl8 x1pd3egz x4gjf66 x16tdsg8 xkrqix3 x1sur9pj xda060z x1ua538i x1ypdohk xj0a0fe x2wh2y9 x1t137rt x9v5kkp x1de99jn x1itw484 x1uhb9sk x1s928wv x1j6awrg xarstr8 x13k4006 xgi1xjn xz2iokx x13v5x0x xp7j7s0 x1c4ya5t"}}[(t.emphasis!=="action")<<3|!!t.stretch<<2|(t.emphasis==="title")<<1|(t.emphasis==="quiet")<<0],n=`declarative-inline-link operator-inline-link ${e.className??""}`,o=t.href!==void 0?K.jsx("a",{...e,className:n,href:t.href,...t.external?{target:"_blank",rel:"noreferrer"}:{},children:t.children}):K.jsx("button",{...e,className:n,type:"button",onClick:t.onClick,children:t.children});return t.emphasis==="action"?K.jsx(oe,{asChild:!0,variant:"outline",children:o}):o}function tx(t){let e=t.density==="compact",n=!e&&(t.tone==="warn"||t.tone==="error"),o=t.metadata?.length?U.jsx("small",{...{0:{className:"x1ar3pfp xa9opjo x1j6dyjg xo1l8bm x1dbl2gt x6mezaz x12oo3zp xj0a0fe"},1:{className:"x1ar3pfp xa9opjo x1j6dyjg xo1l8bm x1dbl2gt x6mezaz x12oo3zp xj0a0fe x1lliihq x1xmf6yo"}}[!!((n||t.renderDisclosure)&&t.presentation==="disclosure")<<0],children:U.jsx(me,{values:t.metadata})}):null,x=T(gt.card,e&&t.framed!==!1&&gt.compactCard,!e&&t.presentation==="disclosure"&&!t.renderDisclosure&&gt.disclosure,t.renderDisclosure&&gt.labeledDisclosure,t.presentation==="feature"&&t.framed!==!1&&gt.feature,t.tone==="warn"&&gt.warn,t.tone==="error"&&gt.error,e&&t.tone==="good"&&gt.good),a=`declarative-card ${x.className??""}`,r=U.jsxs("div",{"data-operator-card-body":"",...{0:{className:"xrvj5dj xou54vl xeuugli"},1:{className:"xrvj5dj xou54vl xeuugli xyamay9"}}[!!(e&&t.presentation==="disclosure")<<0],children:[t.children,t.footer&&U.jsx("div",{...{className:"x78zum5 x1a02dak x6s0dn4 x883omv xeuugli"},"data-card-controls":"",children:t.footer})]});return t.presentation==="disclosure"&&!t.renderDisclosure?U.jsxs("details",{...x,className:a,"data-tone":t.tone??"neutral",children:[U.jsxs("summary",{...{0:{className:"x1ypdohk x5ddh9m x4z9k3i x1dbl2gt xgi1xjn x2wh2y9 xj0a0fe"},2:{className:"x1ypdohk x5ddh9m x1dbl2gt x2wh2y9 xj0a0fe x9f619 x1wxaq2x x1g8o3q3 xfifm61 x1ar3pfp"},1:{className:"x1ypdohk x5ddh9m x2wh2y9 xj0a0fe xosj86m xk50ysn x1xfvgam xqvuw85"},3:{className:"x1ypdohk x5ddh9m x2wh2y9 xj0a0fe x9f619 x1wxaq2x x1g8o3q3 xosj86m xk50ysn x1xfvgam xqvuw85"}}[!e<<1|!!n<<0],children:[t.label,o&&U.jsxs(U.Fragment,{children:[" ",o]})]}),r]}):U.jsxs("section",{...x,className:a,"data-tone":t.tone??"neutral",children:[U.jsxs("header",{...{0:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp xsag5q8 xso031l x1q0q8m5 xna4lh4 x2hta5a x125tp1q x17l7a04 x1xfvgam xqvuw85"},8:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 x1xfvgam xyorhqc x18d9i69 x1qhh985 xa9opjo x121jh6c x1bgvhw5 x1r16saa xtvhhri x1ar3pfp"},4:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xswp564 x1e5oar2 xkhxzli xd0avp8 x12rpand x6mezaz x1yztbdb x18d9i69 x1qhh985 xqvuw85"},12:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xswp564 x1e5oar2 xkhxzli xd0avp8 x12rpand x6mezaz x1yztbdb x18d9i69 x1qhh985 xqvuw85"},2:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 x2hta5a x125tp1q x17l7a04 x1xfvgam xqvuw85 x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz"},10:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 x1xfvgam xa9opjo x121jh6c x1bgvhw5 x1ar3pfp x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz"},6:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xswp564 x1e5oar2 xkhxzli xd0avp8 xqvuw85 x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz"},14:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xswp564 x1e5oar2 xkhxzli xd0avp8 xqvuw85 x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz"},1:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp xsag5q8 xso031l x1q0q8m5 xna4lh4 x2hta5a xosj86m xk50ysn x1xfvgam xqvuw85"},9:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xyorhqc x18d9i69 x1qhh985 xa9opjo x1r16saa xtvhhri xosj86m xk50ysn x1xfvgam xqvuw85"},5:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xkhxzli x12rpand x6mezaz x1yztbdb x18d9i69 x1qhh985 xosj86m xk50ysn x1xfvgam xqvuw85"},13:{className:"x78zum5 x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xkhxzli x12rpand x6mezaz x1yztbdb x18d9i69 x1qhh985 xosj86m xk50ysn x1xfvgam xqvuw85"},3:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 x2hta5a x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz xosj86m xk50ysn x1xfvgam xqvuw85"},11:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xa9opjo x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz xosj86m xk50ysn x1xfvgam xqvuw85"},7:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xkhxzli x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz xosj86m xk50ysn x1xfvgam xqvuw85"},15:{className:"x1pha0wt x1qughib xou54vl x1ghz6dp x1q0q8m5 xna4lh4 xssy22x xkhxzli x1lliihq x1qhh985 x18d9i69 xat24cr x12oo3zp x6mezaz xosj86m xk50ysn x1xfvgam xqvuw85"}}[!!e<<3|(t.presentation==="feature")<<2|!!t.renderDisclosure<<1|!!(t.renderDisclosure&&n)<<0],children:[U.jsx("h2",{...{className:"x1ghz6dp xeuugli xjb2p0i x1qlqyl8 x1pd3egz x15bjb6t x4gjf66 x5ftkge xj0a0fe"},children:t.label}),o]}),t.renderDisclosure?t.renderDisclosure(r):r]})}function Lr(t){return io.jsx(Vr,{...t,dismissOnOutside:!0})}var Me={label:{k1xSpc:"xrvj5dj",kOIVth:"x1nejdyq",k7Eaqz:"xeuugli",kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kHjlTd:"xj0a0fe",$$css:!0},wideLabel:{kBCFzs:"x1osaytk",$$css:!0},control:{kAzted:"x141feeh x1c4ya5t",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kB7OPa:"x9f619",kMzoRj:"xmkeg23",ksu8eU:"x1y0btm7",kVAM5u:"x8tuc8h",kaIpWk:"xu4hgxq",kWkggS:"xbslqsl",kMwMTN:"xqvuw85",kmVPX3:"x1160tuk",kMv6JI:"x5ddh9m",kGuDYH:"xfifm61",kMeerF:"x1k57tk5 x784prv",k3XXqK:"xaatb59",kjBf7l:"x1itw484",kInvED:"x2ssjo2",$$css:!0},textarea:{kAzted:"xefclja",kHenm0:"x288g5",kLWn49:"xfrs9s4",$$css:!0},checkboxLabel:{k1xSpc:"x78zum5",kGNEyG:"x6s0dn4",kOIVth:"x167g77z",kAzted:"x2lwn1j x1c4ya5t",$$css:!0},checkbox:{kAzted:"x65nank xn3zsfb",kmuXW:"x2lah0s",$$css:!0}},Hr={frame:{k1xSpc:"xrvj5dj",kOIVth:"x167g77z",kzqmXN:"x9redfm",k7Eaqz:"xeuugli",kB7OPa:"x9f619",kmVPX3:"xc7ga6q",kMzoRj:"xmkeg23",ksu8eU:"x1y0btm7",kVAM5u:"xmt0h0j",kaIpWk:"xur7f20",kWkggS:"x9kxhyz",kpvhgV:"x14c6fbn x16e9dwd",kg5VkO:"x126usnh",k21Pnn:"x10spfxb",kgLgug:"x1q652j",kJLzUl:"x6imu0b xq4oo3n",kxlVUH:"x1ffza42 x17vqpdp",k1OL56:"xhesz8g x8wqbq1",kYsyRH:"xsucau6 x1ga0ivm",kAh4Fn:"xkktd5z x9as3ks",kvvOh:"x1yweesi",$$css:!0},title:{k7Eaqz:"xeuugli",kHjlTd:"xj0a0fe",$$css:!0},list:{k1xSpc:"xrvj5dj",kOIVth:"x1j9xkj6",kogj98:"x1ghz6dp",k7Eaqz:"xeuugli",$$css:!0},row:{k1xSpc:"xrvj5dj",kumcoG:"xw1czmm x1c2rghm x4jmfmw",kOIVth:"x883omv xv2j0n9 x1kis1tw",kGNEyG:"x6s0dn4",k7Eaqz:"xeuugli",$$css:!0},term:{kMwMTN:"x1ar3pfp",kGuDYH:"xvwhms9",kMv6JI:"xa9opjo",k63SB2:"xo1l8bm",kLWn49:"xggjnk3",kP9fke:"xtvhhri",kHjlTd:"xj0a0fe",$$css:!0},value:{k1xSpc:"x78zum5",kGNEyG:"x6s0dn4",kOIVth:"x167g77z",k7Eaqz:"xeuugli",kogj98:"x1ghz6dp",$$css:!0},code:{kVQacm:"xb3r6kr",k7Eaqz:"xeuugli",kMwMTN:"xqvuw85",kg5iWk:"xlyipyv",khDVqt:"xuxw1ft",$$css:!0},copy:{kmuXW:"x2lah0s",kAzted:"x1c4ya5t",k7Eaqz:"x1wkdlc4",$$css:!0}},Br={form:{k1xSpc:"xrvj5dj",kumcoG:"xnby9oq x1c2rghm x1ram2ln x4jmfmw",kOIVth:"x1v2ro7d",kzqmXN:"x9redfm x10x3x5a",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kB7OPa:"x9f619",$$css:!0},submit:{kSGwAc:"x7fd4wk",kFhvOy:"x1lqcxt8",$$css:!0}};function Xr({variant:t="primary",className:e,xstyle:n,style:o,...x}){if(t!=="link")return B.jsx(oe,{variant:t,xstyle:n,className:e,style:o,...x});let a=T(zx.link,n);return B.jsx("button",{className:[a.className,e].filter(Boolean).join(" "),style:{...a.style,...o},...x})}function Yr({xstyle:t,className:e,style:n,...o}){let x=T(t);return B.jsx("input",{className:[x.className,e].filter(Boolean).join(" "),style:{...x.style,...n},...o})}function _r({xstyle:t,className:e,style:n,...o}){let x=T(t);return B.jsx("select",{className:[x.className,e].filter(Boolean).join(" "),style:{...x.style,...n},...o})}function Qr({xstyle:t,className:e,style:n,...o}){let x=T(t);return B.jsx("textarea",{className:[x.className,e].filter(Boolean).join(" "),style:{...x.style,...n},...o})}function Fr(t){return B.jsx($x,{className:t.className,triggerLabel:t.triggerLabel,triggerVariant:t.triggerVariant,presentation:t.presentation,children:t.children})}function Jr(t){let e=t.tabs.find((n)=>n.value===t.value);return B.jsxs("div",{className:"declarative-tabs",children:[B.jsx(mo,{role:"tablist","aria-label":t.label,children:t.tabs.map((n)=>B.jsxs(po,{type:"button",role:"tab","aria-selected":n.value===e?.value,onClick:()=>t.onValueChange(n.value),children:[n.label,n.count!==void 0?` (${n.count})`:""]},n.value))}),e&&B.jsx("div",{role:"tabpanel",children:e.content})]})}function Zr(t){return B.jsxs("div",{"data-ui-tabs":!0,"data-ui-tabs-default":t.defaultValue,children:[B.jsx(Nx,{className:"widget-tabs","aria-label":t.label,children:t.tabs.map((e)=>{let n=e.value===t.defaultValue;return B.jsxs(Mx,{id:`${t.id}-tab-${e.value}`,className:"widget-tab",type:"button",role:"tab","data-ui-tab":e.value,"aria-controls":`${t.id}-panel-${e.value}`,"aria-selected":n,children:[e.label,e.count!==void 0&&B.jsx(Sx,{className:"widget-tab-count",children:e.count})]},e.value)})}),t.tabs.map((e)=>{let n=e.value===t.defaultValue;return B.jsx("div",{id:`${t.id}-panel-${e.value}`,className:n?"is-active":void 0,"data-ui-panel":e.value,role:"tabpanel","aria-labelledby":`${t.id}-tab-${e.value}`,hidden:!n,children:e.content},e.value)})]})}var ex={engine:"css",density:"compact",Button:Xr,Input:Yr,Select:_r,Textarea:Qr,ConfirmDialog:Lr,Disclosure:Fr,Tabs:Jr},Y=He.createContext({renderAllTabs:!1,components:ex}),an=He.createContext(null);function Re(t){let e=t instanceof Error?t.message.trim():"";return e?`Action failed: ${e}`:"Action failed."}function Ur(t){if(typeof t!=="object"||t===null)return!1;return"kind"in t&&t.kind==="prepared-confirmation"&&"token"in t&&typeof t.token==="string"&&"summary"in t&&typeof t.summary==="string"&&"expiresAt"in t&&typeof t.expiresAt==="string"}function Ae(t){if(t===null||typeof t==="string"||typeof t==="number"||typeof t==="boolean")return!0;if(Array.isArray(t))return t.every(Ae);if(typeof t!=="object")return!1;return Object.values(t).every(Ae)}function rn(t){if(t===null||typeof t!=="object"||Array.isArray(t))return;let e={};for(let[n,o]of Object.entries(t)){if(!Ae(o))return;e[n]=o}return e}function Kr(t,e){let n={};for(let[o,x]of Object.entries(rn(t.input)??{}))if(x!==void 0)n[o]=x;for(let o of t.form?.fields??[]){if(o.control==="checkbox"){n[o.name]=e.has(o.name);continue}let x=e.get(o.name);if(typeof x!=="string")continue;if(!o.required&&x===""){delete n[o.name];continue}n[o.name]=o.control==="number"?Number(x):x}return n}function ti(t,e){for(let n of t.form?.fields??[]){if(!n.secret)continue;let o=e.elements.namedItem(n.name);if(o&&"value"in o)o.value=""}}function nx(t,e){if(!t.result)return null;let n=rn(e);if(!n)return null;let o=t.result.fields.flatMap((x)=>{let a=n[x.name];if(a===void 0)return[];if(a!==null&&typeof a!=="string"&&typeof a!=="number"&&typeof a!=="boolean")return[];return[{name:x.name,label:x.label,value:a===null?"—":String(a),copyable:x.copyable===!0,sensitive:x.sensitive===!0}]});return o.length>0?{title:t.result.title,fields:o}:null}function Ie(t){let{Button:e}=G.useContext(Y).components,n={className:"xrvj5dj x167g77z x9redfm xeuugli x9f619 xc7ga6q xmkeg23 x1y0btm7 xmt0h0j xur7f20 x9kxhyz x14c6fbn x16e9dwd x126usnh x10spfxb x1q652j x6imu0b xq4oo3n x1ffza42 x17vqpdp xhesz8g x8wqbq1 xsucau6 x1ga0ivm xkktd5z x9as3ks x1yweesi"};return b.jsxs("section",{...n,className:`declarative-action-result ${n.className??""}`,"data-operator-action-result":"","aria-live":"polite",children:[b.jsx("strong",{...{className:"xeuugli xj0a0fe"},children:t.result.title}),b.jsx("dl",{...{className:"xrvj5dj x1j9xkj6 x1ghz6dp xeuugli"},children:t.result.fields.map((o)=>so.createElement("div",{...{className:"xrvj5dj xw1czmm x1c2rghm x4jmfmw x883omv xv2j0n9 x1kis1tw x6s0dn4 xeuugli"},key:o.name,"data-sensitive":o.sensitive||void 0},b.jsx("dt",{...{className:"x1ar3pfp xvwhms9 xa9opjo xo1l8bm xggjnk3 xtvhhri xj0a0fe"},children:o.label}),b.jsxs("dd",{...{className:"x78zum5 x6s0dn4 x167g77z xeuugli x1ghz6dp"},children:[b.jsx("code",{...{className:"xb3r6kr xeuugli xqvuw85 xlyipyv xuxw1ft"},title:o.value,children:o.value}),o.copyable&&b.jsx(e,{type:"button",variant:"ghost",onClick:()=>void navigator.clipboard.writeText(o.value),xstyle:Hr.copy,children:"Copy"})]})))}),t.onDismiss&&b.jsx(e,{type:"button",variant:"ghost",onClick:t.onDismiss,children:"Dismiss"})]})}function ei(t){let{Input:e,Select:n,Textarea:o,engine:x}=G.useContext(Y).components,a={xstyle:x==="css"&&Me.control},r=rn(t.action.input)??{},[c,u]=G.useState(()=>Object.fromEntries((t.action.form?.fields??[]).flatMap((l)=>{if(l.control!=="select")return[];let d=r[l.name],s=typeof d==="string"?d:l.required?l.options?.[0]?.value:void 0;return s?[[l.name,s]]:[]})));return b.jsx(b.Fragment,{children:t.action.form?.fields.map((l)=>{let d=r[l.name],s=l.labelBy?.values.find((k)=>k.value===c[l.labelBy?.field??""])?.label??l.label;if(l.control==="checkbox")return b.jsxs("label",{...{className:"xeuugli x1ar3pfp xa9opjo x1k6wstc xj0a0fe x78zum5 x6s0dn4 x167g77z x2lwn1j x1c4ya5t"},children:[b.jsx("input",{...{0:{className:"x65nank xn3zsfb x2lah0s"},1:{className:"xeuugli x193iq5w x9f619 xmkeg23 x1y0btm7 x8tuc8h xu4hgxq xbslqsl xqvuw85 x1160tuk x5ddh9m xfifm61 x1k57tk5 x784prv xaatb59 x1itw484 x2ssjo2 x65nank xn3zsfb x2lah0s"}}[(x==="css")<<0],name:l.name,type:"checkbox",defaultChecked:d===!0}),b.jsx("span",{children:s})]},l.name);if(l.control==="select")return b.jsxs("label",{...{className:"xrvj5dj x1nejdyq xeuugli x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:[b.jsx("span",{children:s}),b.jsxs(n,{...a,name:l.name,defaultValue:typeof d==="string"?d:l.required?void 0:"",required:l.required,onChange:(k)=>u((g)=>({...g,[l.name]:k.target.value})),children:[!l.required&&b.jsx("option",{value:"",children:"None"}),l.options?.map((k)=>b.jsx("option",{value:k.value,children:k.label},k.value))]})]},l.name);if(l.control==="textarea")return b.jsxs("label",{...{className:"xrvj5dj x1nejdyq xeuugli x1ar3pfp xa9opjo x1k6wstc xj0a0fe x1osaytk"},children:[b.jsx("span",{children:s}),b.jsx(o,{xstyle:x==="css"&&[Me.control,Me.textarea],name:l.name,defaultValue:typeof d==="string"?d:"",required:l.required,rows:4})]},l.name);let i=!l.secret&&(typeof d==="string"||typeof d==="number")?d:"";return b.jsxs("label",{...{className:"xrvj5dj x1nejdyq xeuugli x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:[b.jsx("span",{children:s}),b.jsx(e,{...a,name:l.name,type:l.secret?"password":l.control==="url"?"url":l.control==="number"?"number":"text",defaultValue:i,required:l.required,autoComplete:l.secret?"new-password":void 0})]},l.name)})})}function Dn(t,e,n){if(t.confirmation)return"danger";return e?"link":n?"primary":"secondary"}function sn(t){let e=G.useContext(Y),n=t.components??e.components,{Button:o,ConfirmDialog:x,Disclosure:a}=n,r=G.useId(),c=`${t.action.actionId}:${JSON.stringify(t.action.input)}`,u=G.useRef(!0),[l,d]=G.useState(!1),[s,i]=G.useState(""),[k,g]=G.useState(!1),[p,f]=G.useState(null),[w,S]=G.useState(null),[j,O]=G.useState(0);G.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]),G.useEffect(()=>{S(null)},[c]);let E=async(V)=>{d(!0),i(""),g(!1),S(null);try{let N=await t.onAction(V),L=nx(V,N);if(u.current)if(S(L),L||!V.form)i("Completed.");else O((Yt)=>Yt+1);else if(L)e.onDetachedActionResult?.(L)}catch(N){if(u.current)i(Re(N)),g(!0)}finally{if(u.current)d(!1),f(null)}},R=async(V)=>{let N=V.confirmation;if(N?.kind==="static"){f({summary:N.message,invocation:V});return}if(N?.kind!=="prepared"){await E(V);return}d(!0),i(""),g(!1);try{let L=await t.onAction({...V,invocation:{mode:"prepare"}});if(!Ur(L))throw Error("Invalid prepared confirmation");f({summary:L.summary,invocation:{...V,invocation:{mode:"execute",token:L.token}}})}catch(L){i(Re(L)),g(!0)}finally{d(!1)}},C=t.action.form?"div":"span",st={className:"xrvj5dj xnby9oq x1c2rghm x1ram2ln x4jmfmw x1v2ro7d x9redfm x10x3x5a xeuugli x193iq5w x9f619"},ut=t.action.form?b.jsxs("form",{...st,className:`declarative-action-form ${st.className??""}`,onSubmit:(V)=>{V.preventDefault();let N=Kr(t.action,new FormData(V.currentTarget));ti(t.action,V.currentTarget),R({...t.action,input:N})},children:[b.jsx(ei,{action:t.action}),b.jsx(o,{xstyle:Br.submit,type:"submit",variant:Dn(t.action,t.subordinate===!0,t.primary===!0),disabled:l||t.action.disabled===!0,children:l?"Working…":t.action.form.submitLabel??t.action.label}),s&&b.jsx("small",{className:k?"status status-error":"status","aria-live":"polite",children:s}),w&&b.jsx(Ie,{result:w})]},`${c}:${j}`):null;return b.jsxs(b.Fragment,{children:[b.jsxs(C,{...{className:"xwz0xwf x7a106z x167g77z xeuugli x193iq5w"},"data-control-engine":n.engine,children:[t.action.form?t.action.form.presentation==="disclosure"?b.jsx(a,{className:"declarative-action-disclosure",presentation:"action",triggerVariant:t.primary?"primary":void 0,title:t.action.label,triggerLabel:t.action.label,children:ut},`${c}:${j}`):ut:b.jsx(o,{type:"button",variant:Dn(t.action,t.subordinate===!0,t.primary===!0),disabled:l||t.action.disabled===!0,onClick:()=>void R(t.action),children:l?"Working…":t.action.label}),!t.action.form&&s&&b.jsx("small",{...{0:{className:"x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},1:{className:"xa9opjo x1k6wstc xj0a0fe x1mel2pz"}}[!!k<<0],"aria-live":"polite",children:s}),!t.action.form&&w&&b.jsx(Ie,{result:w})]}),p&&b.jsx(x,{mark:"!",title:"Run this workspace action?",titleId:r,cancelLabel:"Cancel",confirmLabel:l?"Working…":"Confirm action",pending:l,onCancel:()=>f(null),onConfirm:()=>void E(p.invocation),children:b.jsx("p",{children:p.summary})})]})}function cn(t){let{Disclosure:e}=G.useContext(Y).components;if(t.actions.length===0)return null;let n=t.subordinate===!0&&t.actions.length>1,o={0:{className:"x78zum5 x1a02dak x6s0dn4 x883omv xeuugli"},2:{className:"xrvj5dj x6s0dn4 x1v2ro7d xeuugli"},1:{className:"x78zum5 x1a02dak x6s0dn4 x883omv xeuugli x13a6bvl"},3:{className:"xrvj5dj x6s0dn4 x1v2ro7d xeuugli x13a6bvl"}}[!!n<<1|(t.align==="end")<<0],x=b.jsx("div",{...o,className:`declarative-actions ${o.className??""}`,children:t.actions.map((a,r)=>b.jsx(sn,{action:a,onAction:t.onAction,subordinate:t.subordinate===!0&&!n},`${a.actionId}:${a.capabilityId??"static"}:${r}`))});return n?b.jsx(e,{title:t.label??"Available actions",triggerLabel:t.triggerLabel??"Options",triggerVariant:"link",className:"operator-actions-options",children:x}):x}function ln(t){let e={0:{className:"xeuugli"},1:{className:"xeuugli x1ctc5qj xmkeg23 x1y0btm7 x8tuc8h xur7f20 x18s3upu"}}[(t.framed!==!1)<<0];return Ot.jsxs("article",{...e,className:`operator-source ${e.className??""}`,children:[t.label&&Ot.jsx("h3",{...{0:{className:"x8o5f6s x1ar3pfp x5ddh9m xif65rj x19s9jnd xj0a0fe"},1:{className:"x8o5f6s x1ar3pfp xj0a0fe xa9opjo xfmn3hh xk50ysn xa7ig63 xtvhhri"}}[(t.density==="compact")<<0],children:t.label}),Ot.jsx("pre",{...{className:"xgw0a1n x1ghz6dp xysyzu8 xgi1xjn xa9opjo xfifm61 x11m8ghp x126k92a xj0a0fe"},children:t.text}),t.truncated&&Ot.jsx("small",{...{className:"x1lliihq x1aawmmo x1ar3pfp xa9opjo x1k6wstc"},children:"Source content was truncated by its provider."})]})}var xe={meters:{k1xSpc:"xrvj5dj",kumcoG:"x1lelaru x1w43bmf",kOIVth:"xiv87he xps7s55",kogj98:"x1ghz6dp",k7Eaqz:"xeuugli",$$css:!0},meter:{k7Eaqz:"xeuugli",$$css:!0},label:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"xfmn3hh",kb6lSQ:"x1labic3",kP9fke:"xtvhhri",kHjlTd:"xj0a0fe",$$css:!0},value:{kogj98:"x1pz56wa",kMwMTN:"xqvuw85",kMv6JI:"xa9opjo",kGuDYH:"x1jvydc1",kHjlTd:"xj0a0fe",$$css:!0},frame:{k7Eaqz:"xeuugli",kmVPX3:"xbxpdvy",kMzoRj:"xmkeg23",ksu8eU:"x1y0btm7",kVAM5u:"x8tuc8h",kaIpWk:"xur7f20",kWkggS:"x18s3upu",$$css:!0},header:{k1xSpc:"x78zum5",kGNEyG:"x1pha0wt",kjj79g:"x1qughib",kOIVth:"x1af02g3",kwnvtZ:"x1a02dak",$$css:!0},title:{kMwMTN:"xqvuw85",kGuDYH:"x2ouz8m",k63SB2:"xh88oxj",k7Eaqz:"xeuugli",kHjlTd:"xj0a0fe",$$css:!0},state:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kb6lSQ:"x1dor1uw",kP9fke:"xtvhhri",kHjlTd:"xj0a0fe",$$css:!0},detail:{kogj98:"xe6w4ck",kMwMTN:"xgi1xjn",kGuDYH:"x1ct8sxb",kHjlTd:"xj0a0fe",$$css:!0},time:{k1xSpc:"x1lliihq",keoZOQ:"x1anpbxc",kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kHjlTd:"xj0a0fe",$$css:!0},good:{kMwMTN:"x19k5i5u",$$css:!0},warn:{kMwMTN:"x1ra7g20",$$css:!0},error:{kMwMTN:"x1mel2pz",$$css:!0},bar:{k1xSpc:"x1lliihq",kzqmXN:"xh8yej3",kZKoxP:"xqu0tyb",keoZOQ:"x1xmf6yo",kysU6D:"xjyslct",kMzoRj:"xc342km",kaIpWk:"x1e6avla xdyxp2i xeqdbg4 xbmcqy5",kWkggS:"xg47p5g x15jglqw x1h2yhso x1qjdyzq",keaTxX:"x1q9s9ta",$$css:!0}};var On={root:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kGNEyG:"xuk3077",kjj79g:"x1qughib",kOIVth:"x1avw0xy",k7Eaqz:"xeuugli",$$css:!0},controls:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x1af02g3",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kHdLCk:"x10acg2q",k1JLwA:"xou8obv",koRygp:"x1dbdljh",kFASis:"x1w305zg",kSbKWw:"x1nae48y",kXOHwa:"x1amo615",$$css:!0},label:{k1xSpc:"xrvj5dj",kOIVth:"x17d4w8g",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kMwMTN:"xgi1xjn",kMv6JI:"x5ddh9m",kGuDYH:"xfifm61",kLWn49:"x37zpob",kHjlTd:"xj0a0fe",$$css:!0},compactLabel:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"xfmn3hh",kb6lSQ:"x1labic3",kP9fke:"xtvhhri",$$css:!0},control:{k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",koRygp:"x1dbdljh",kTWfjk:"x126n28w",kr4CYY:"xf2x79s",$$css:!0},cssSelect:{kAzted:"x21xpn4",k7Eaqz:"xeuugli",ks0D6T:"x193iq5w",kzqmXN:"xh8yej3",kmVPX3:"x1astma3",kMzoRj:"xmkeg23",ksu8eU:"x1y0btm7",kVAM5u:"x8tuc8h",kaIpWk:"xu4hgxq",kWkggS:"x18s3upu",kMwMTN:"xqvuw85",kMv6JI:"x5ddh9m",kGuDYH:"x1ct8sxb",$$css:!0},footer:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kGNEyG:"x6s0dn4",kOIVth:"x1af02g3",koQZXg:"x8x9d4c",k7Eaqz:"xeuugli",koRygp:"x1dbdljh",kEh2j3:"x703316",kGOSNy:"x1s9bmkn",kXOHwa:"x1amo615",kGaPYi:"x1m2ds42",kUR4Rz:"xq86nrr",kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1j6dyjg",kHjlTd:"xj0a0fe",$$css:!0},standaloneFooter:{koQZXg:"xj3b58b",kjj79g:"x1qughib",kzqmXN:"xh8yej3",$$css:!0},pager:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x167g77z",$$css:!0}};function un(t){if(t===null)return"—";if(typeof t==="boolean")return t?"Yes":"No";return String(t)}function ni(t){return Array.isArray(t)}function oi(t){return ni(t)?t.join(", "):un(t===void 0?null:t)}function ae(t){let e=Se.useContext(an),n=Se.useContext(Y),o=t.target,x=n.resolveLink?.(o);if(x||o.kind==="external")return qt.jsx(Ne,{href:x??(o.kind==="external"?o.href:""),external:o.kind==="external",emphasis:t.emphasis,children:t.children});if(o.kind==="detail")return e?qt.jsx(Ne,{onClick:()=>e(o.itemId),emphasis:t.emphasis,stretch:t.emphasis==="title",children:t.children}):qt.jsx(qt.Fragment,{children:t.children});return qt.jsx(Ne,{onClick:()=>o.kind==="launch"?t.onLaunch(o.launch):t.onOpenEntity(o.entityType,o.id),emphasis:t.emphasis,children:t.children})}function ox({block:t,placement:e="body"}){let{components:n}=$t.useContext(Y);return q.jsx(Tx,{items:t.items,density:n.density,placement:e})}function xi({block:t}){let{components:e}=$t.useContext(Y);return q.jsx(fo,{density:e.density,items:t.items.map((n)=>({label:n.label,value:un(n.value)}))})}function ai({block:t}){let{components:e}=$t.useContext(Y),{Disclosure:n}=e;return q.jsx(Dx,{title:t.title,text:t.text,tone:t.tone??"neutral",density:e.density,children:t.details&&t.details.length>0&&q.jsx(n,{title:t.title??"Diagnostics",triggerLabel:"View diagnostics",className:"operator-notice-details",children:q.jsx(ln,{text:t.details.join(`
46
46
 
47
- `),density:e.density,framed:!1})})})}function ri({block:t}){let{components:e}=$t.useContext(Y);return q.jsx(ln,{label:t.label,text:t.text,truncated:t.truncated,density:e.density})}function ii(t){return q.jsx("nav",{...{className:"x78zum5 x1a02dak x6s0dn4 x1j9xkj6 xvtq9v3 x1g79t40 xs9z77v xeuugli"},"aria-label":"Workspace links",children:t.block.items.map((e,n)=>q.jsx(ae,{target:e.target,emphasis:"action",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:e.label},`${e.label}:${n}`))})}function si(t){let{components:e}=$t.useContext(Y);return q.jsx(tx,{label:t.block.label,density:e.density,framed:!1,children:q.jsx(fo,{density:e.density,items:t.block.items.map((n)=>({label:n.label,value:n.value===void 0?void 0:un(n.value),caption:n.description,tone:n.tone}))})})}function ci(t){return q.jsxs("section",{...{className:"xeuugli x193iq5w"},"aria-labelledby":`${t.block.id}-title`,children:[q.jsx("h3",{...{className:"x1lliihq xbckst3 x8o5f6s x1ar3pfp x4nd1th xjgl48g x19vr2a4 xel79qc xv6m45y xj0a0fe"},id:`${t.block.id}-title`,children:t.block.label}),q.jsx("ol",{...{className:"x78zum5 x1w305zg x10acg2q xxhr3t x16qsdag x1d3ddqg x1ghz6dp x9ms5i6 x3ct3a4 xw2csxc x10774h0 xdayf2q x193iq5w"},"data-direction":t.block.direction??"forward",children:t.block.steps.map((e)=>ke.createElement("li",{...{className:"x1n2onr6 x1j6awrg x9f619 x2lah0s xeuugli x1ghds7r xe0affe x1ll1jh2 x1prkmhq x9nnsnq x1s7jvk7 x11uxfgx x33yvzk x1uhho1l x1h1edae x1316j x18d9i69 xm1vsfr x1ckun3f x1ar3pfp x1s928wv xguj015 x5jc7rz x7hj2ou x1wdcn98 x12bpigw x44p448 x1e70te5 x14cqbmr x2e6dpv x194c2x1 xxw6uw7 x1ujw8yj xcock1l xpldujj x15t6rfx x1y3k7d7"},key:e.id,"data-status":e.status},q.jsx("span",{...{className:"x1uhb9sk x18of6z9 x1nck5sx x190b9kf xz59zry xxdgi2x x172uiah x1lliihq x9f619 x1wc42o8 xegnrdp xfitlp5 xmkeg23 x1y0btm7 x16rqkct x1vw2y1n x6cfppn xym8ms8 x1dd94t5 xn4j7m4 x1amwds0 x1gnnqk1 xyx7rhw"},"aria-hidden":"true"}),q.jsx("strong",{...{className:"x1lliihq x1ct8sxb xk50ysn xj0a0fe xgi1xjn xn6wv7h x1vjhw47"},children:e.label}),e.detail&&q.jsx("small",{...{className:"x1lliihq x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:e.detail})))})]})}function li(t){return q.jsx("dl",{...{className:"xrvj5dj x1lelaru x1w43bmf xiv87he xps7s55 x1ghz6dp xeuugli"},children:t.block.items.map((e)=>ke.createElement("div",{...{className:"xeuugli"},key:e.id,"data-tone":e.tone??"neutral"},q.jsx("dt",{...{className:"x1ar3pfp xa9opjo xfmn3hh x1labic3 xtvhhri xj0a0fe"},children:e.label}),q.jsxs("dd",{...T(xe.value,e.tone&&e.tone!=="neutral"&&xe[e.tone]),children:[q.jsxs("span",{children:[e.value,e.unit?` ${e.unit}`:""]}),e.max!==void 0&&q.jsxs("progress",{...{className:"x1lliihq xh8yej3 xqu0tyb x1xmf6yo xjyslct xc342km x1e6avla xdyxp2i xeqdbg4 xbmcqy5 xg47p5g x15jglqw x1h2yhso x1qjdyzq x1q9s9ta"},"aria-label":e.label,value:e.value,max:e.max,children:[e.value," / ",e.max]})]})))})}function ui(t){return q.jsxs("section",{...{className:"xeuugli xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xur7f20 x18s3upu"},"data-tone":t.block.tone??"neutral",children:[q.jsxs("header",{...{className:"x78zum5 x1pha0wt x1qughib x1af02g3 x1a02dak"},children:[q.jsx("strong",{...{className:"xqvuw85 x2ouz8m xh88oxj xeuugli xj0a0fe"},children:t.block.label}),q.jsx("span",{...T(xe.state,t.block.tone&&t.block.tone!=="neutral"&&xe[t.block.tone]),children:t.block.state})]}),t.block.progress!==void 0&&q.jsxs("progress",{...{className:"x1lliihq xh8yej3 xqu0tyb x1xmf6yo xjyslct xc342km x1e6avla xdyxp2i xeqdbg4 xbmcqy5 xg47p5g x15jglqw x1h2yhso x1qjdyzq x1q9s9ta"},"aria-label":t.block.label,value:t.block.progress,max:1,children:[Math.round(t.block.progress*100),"%"]}),t.block.detail&&q.jsx("p",{...{className:"xe6w4ck xgi1xjn x1ct8sxb xj0a0fe"},children:t.block.detail}),(t.block.startedAt??t.block.updatedAt)&&q.jsxs("small",{...{className:"x1lliihq x1anpbxc x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:[t.block.startedAt?`Started ${t.block.startedAt}`:"",t.block.startedAt&&t.block.updatedAt?" · ":"",t.block.updatedAt?`Updated ${t.block.updatedAt}`:""]})]})}function xx(t){let{Button:e,Select:n,density:o,engine:x}=$t.useContext(Y).components,a=(u,l)=>{let d={...t.query,offset:0};if(l==="")delete d[u];else d[u]=l;t.onQueryChange(d)},r=t.block.pagination,c=r?Math.min(r.offset+r.limit,r.total):0;return q.jsxs("section",{...{className:"x78zum5 x1a02dak xuk3077 x1qughib x1avw0xy xeuugli"},"aria-label":t.block.controls.length?"Workspace filters":"Collection pages",children:[t.block.controls.length>0&&q.jsx("div",{...{className:"x78zum5 x1a02dak x1af02g3 xeuugli x193iq5w x10acg2q xou8obv x1dbdljh x1w305zg x1nae48y x1amo615"},children:t.block.controls.map((u)=>ke.createElement("label",{...{0:{className:"xrvj5dj x17d4w8g xeuugli x193iq5w xgi1xjn x5ddh9m xfifm61 x37zpob xj0a0fe"},1:{className:"xrvj5dj x17d4w8g xeuugli x193iq5w x37zpob xj0a0fe x1ar3pfp xa9opjo xfmn3hh x1labic3 xtvhhri"}}[(o==="compact")<<0],key:u.key},q.jsx("span",{children:u.label}),q.jsxs(n,{xstyle:[x==="css"&&On.cssSelect,On.control],value:u.value??"",onChange:(l)=>a(u.key,l.target.value),children:[q.jsx("option",{value:"",children:u.allLabel??"All"}),u.options.map((l)=>q.jsxs("option",{value:l.value,children:[l.label,l.count===void 0?"":` (${l.count})`]},l.value))]})))}),r&&q.jsxs("footer",{...{0:{className:"x78zum5 x1a02dak x6s0dn4 x1af02g3 x8x9d4c xeuugli x1dbdljh x703316 x1s9bmkn x1amo615 x1m2ds42 xq86nrr x1ar3pfp xa9opjo x1j6dyjg xj0a0fe"},1:{className:"x78zum5 x1a02dak x6s0dn4 x1af02g3 xeuugli x1dbdljh x703316 x1s9bmkn x1amo615 x1m2ds42 xq86nrr x1ar3pfp xa9opjo x1j6dyjg xj0a0fe xj3b58b x1qughib xh8yej3"}}[(t.block.controls.length===0)<<0],children:[q.jsx("span",{children:r.total===0?"Nothing to show":r.offset>=r.total?`No items on this page · ${r.total} total`:`Showing ${r.offset+1}–${c} of ${r.total}`}),(r.offset>0||c<r.total)&&q.jsxs("span",{...{className:"x78zum5 x1a02dak x167g77z"},children:[q.jsx(e,{type:"button",variant:"ghost",disabled:r.offset===0,onClick:()=>t.onQueryChange({...t.query,offset:Math.max(0,r.offset-r.limit),limit:r.limit}),children:"Previous"}),q.jsx(e,{type:"button",variant:"ghost",disabled:c>=r.total,onClick:()=>t.onQueryChange({...t.query,offset:r.offset+r.limit,limit:r.limit}),children:r.label??"Next"})]})]})]})}var Rn={figure:{k1xSpc:"xrvj5dj",kOIVth:"x167g77z",kogj98:"x1ghz6dp",k7Eaqz:"xeuugli",$$css:!0},caption:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kb6lSQ:"x7447wj",kP9fke:"xtvhhri",$$css:!0},chart:{k1xSpc:"x1lliihq",kzqmXN:"xh8yej3",kZKoxP:"xhjk10j",kVQacm:"x1rea2x4",$$css:!0},flat:{kZKoxP:"xxk0z11",$$css:!0},hit:{kDwRjp:"xy6m8k3",$$css:!0},marker:{kDwRjp:"xgeoyvb",$$css:!0},bar:{kDwRjp:"x1rw6qo9 xg7jwtm",kmkexE:"xzjk7dm",$$css:!0},good:{kDwRjp:"x1s7eawt",$$css:!0},warn:{kDwRjp:"x1v1fulq",$$css:!0},error:{kDwRjp:"xp8jjoe",$$css:!0},missing:{kDwRjp:"xbh8q5q",kjVXCG:"x4vhfi8",k5rJSQ:"xbw2l0c",$$css:!0},axis:{k1xSpc:"x78zum5",kjj79g:"x1qughib",kOIVth:"x1v2ro7d",kMwMTN:"x1v3krkk",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kb6lSQ:"x1dgsrnt",$$css:!0},peak:{kMwMTN:"x1ar3pfp",$$css:!0}},Dt=10,Kt=8,di=100,ki=10,An=0.75;function mi(t,e){let n=t.value===null?"no data":`${t.value}${e?` ${e}`:""}`;return`${t.label}: ${n}${t.marker?` · ${t.marker}`:""}`}function pi(t){let{label:e,unit:n,points:o}=t.block,x=Math.max(0,...o.map((d)=>d.value??0)),a=o[0],r=o[o.length-1],c=o.length*Dt,u=x===0,l=u?ki:di;return F.jsxs("figure",{...{className:"xrvj5dj x167g77z x1ghz6dp xeuugli"},"data-series":t.block.id,children:[F.jsx("figcaption",{...{className:"x1ar3pfp xa9opjo x1k6wstc x7447wj xtvhhri"},children:e}),F.jsx("svg",{...{0:{className:"x1lliihq xh8yej3 xhjk10j x1rea2x4"},1:{className:"x1lliihq xh8yej3 x1rea2x4 xxk0z11"}}[!!u<<0],role:"img","aria-label":`${e}: ${o.length} points, peak ${x}${n?` ${n}`:""}`,viewBox:`0 0 ${c} ${l}`,preserveAspectRatio:"none",children:o.map((d,s)=>{let i=s*Dt,k=d.value===null||x===0?An:Math.max(An,d.value/x*l);return F.jsxs("g",{"data-series-point":d.id,"data-missing":d.value===null?"true":void 0,"data-tone":d.tone,children:[F.jsx("title",{children:mi(d,n)}),d.marker&&F.jsx("rect",{...{className:"xgeoyvb"},"data-series-marker":"",x:i,y:0,width:Dt,height:l}),F.jsx("rect",{...{className:"xy6m8k3"},x:i,y:0,width:Dt,height:l}),d.value===null?F.jsx("rect",{...{className:"xbh8q5q x4vhfi8 xbw2l0c"},x:i+(Dt-Kt)/2,y:l-2,width:Kt,height:2}):F.jsx("rect",{...T(Rn.bar,d.tone&&d.tone!=="neutral"&&Rn[d.tone]),x:i+(Dt-Kt)/2,y:l-k,width:Kt,height:k})]},d.id)})}),F.jsxs("div",{...{className:"x78zum5 x1qughib x1v2ro7d x1v3krkk xa9opjo x1k6wstc x1dgsrnt"},"data-series-axis":"",children:[F.jsx("span",{children:a?.label}),F.jsx("span",{...{className:"x1ar3pfp"},children:u?`no ${n??"values"}`:`peak ${x}${n?` ${n}`:""}`}),F.jsx("span",{children:r?.label})]})]})}var Z={list:{kB88ic:"xe8uvvx",kogj98:"x1ghz6dp",kmVPX3:"x1717udv",k7Eaqz:"xeuugli",$$css:!0},compactList:{kEafiO:"x178xt8z",kPef9Z:"x13fuv20",kLZC3w:"xltl5i9",$$css:!0},row:{k1xSpc:"x78zum5",kXwgrk:"x1q0g3np xyil5ud",kwnvtZ:"xozqiw3 x1i03alp xzbubq",kGNEyG:"x6s0dn4 x1ovenir",kjj79g:"x1qughib",kOIVth:"x1c1vhfx x1unfst4 x5cqck7 xd9d3ul",kmVPX3:"x1t7086c x1xukwvs x10e8r38",kt9PQ7:"xso031l x1z10cro",kfdmCh:"x1q0q8m5",kL6WhQ:"xpqg30t",k7Eaqz:"xeuugli",kVAEAm:"x1n2onr6",$$css:!0},compactRow:{kmVPX3:"x1vgkc3a",kGNEyG:"x7a106z",krbiMz:"x1g3ag0e",kkwO13:"x1943nhg",kqJkrk:"x1n3jums",kt4jb9:"xlw4hyx",kZMVlr:"x9awmtd",kZPUVn:"x1k72cru",$$css:!0},master:{kGNEyG:"x7a106z",$$css:!0},stacked:{kXwgrk:"xdt5ytf",kGNEyG:"x1qjc9v5",kOIVth:"x1v2ro7d",$$css:!0},stackedTrailing:{ks0D6T:"x193iq5w",kjj79g:"x1nhvcw1",$$css:!0},selected:{kWkggS:"x18s3upu",kGVxlE:"xfv7mty",$$css:!0},interactive:{kWkggS:"xjbqb8w xd8d5gp",$$css:!0},trailing:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kGNEyG:"x6s0dn4",kjj79g:"x13a6bvl x1aoecvx x6z9i88 xmn758v",kOIVth:"x167g77z",k7Eaqz:"xeuugli",ks0D6T:"x8jryan x1uikkot xdq2x6k xjjsibu",kmuXW:"x2lah0s",kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",$$css:!0},controls:{kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",k7Eaqz:"xeuugli",$$css:!0},count:{k7Eaqz:"xeuugli",kMwMTN:"xgi1xjn",kMv6JI:"xa9opjo",kGuDYH:"x1j6dyjg",kHjlTd:"xj0a0fe",$$css:!0},links:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x3phc52",kGuDYH:"xfifm61",kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",$$css:!0},footerMetadata:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1j6dyjg",kLWn49:"x1dbl2gt",k7Eaqz:"xeuugli",kHjlTd:"xj0a0fe",$$css:!0},tags:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x1nejdyq",keoZOQ:"x1rhet7l",$$css:!0},badge:{ks0D6T:"x193iq5w",kMwMTN:"xgi1xjn",kMv6JI:"x5ddh9m",kGuDYH:"xfifm61",kHjlTd:"xj0a0fe",$$css:!0},compactBadge:{kmVPX3:"xbjd7y",kaIpWk:"x1e6avla",kWkggS:"x1ghvq8m",kMv6JI:"xa9opjo",kGuDYH:"xfmn3hh",kb6lSQ:"x9pfba7",kP9fke:"xtvhhri",$$css:!0},good:{kMwMTN:"x19k5i5u",$$css:!0},warn:{kMwMTN:"x1ra7g20",$$css:!0},error:{kMwMTN:"x1mel2pz",$$css:!0},compactGood:{kWkggS:"x153t6mt",$$css:!0},compactWarn:{kWkggS:"x1mh3lbe",$$css:!0},compactError:{kWkggS:"x42um7s",$$css:!0}};function fi(t){let e={0:{className:"xe8uvvx x1ghz6dp x1717udv xeuugli"},1:{className:"xe8uvvx x1ghz6dp x1717udv xeuugli x178xt8z x13fuv20 xltl5i9"}}[(t.density==="compact")<<0];return Pt.jsx("ol",{...e,className:`operator-record-list ${e.className??""}`,"data-presentation":t.presentation,children:t.children})}function gi(t){return Pt.jsxs("li",{draggable:t.drag?!0:void 0,onDragStart:t.drag?.onStart,onDragEnd:t.drag?.onEnd,...T(Z.row,t.density==="compact"&&Z.compactRow,t.master&&Z.master,t.stacked&&Z.stacked,t.interactive&&Z.interactive,t.selected&&Z.selected),"data-tone":t.tone??"neutral","aria-current":t.selected?"true":void 0,children:[t.children,t.trailing&&Pt.jsx("div",{...{0:{className:"x78zum5 x1a02dak x6s0dn4 x13a6bvl x1aoecvx x6z9i88 xmn758v x167g77z xeuugli x8jryan x1uikkot xdq2x6k xjjsibu x2lah0s x1n2onr6 x1vjfegm"},1:{className:"x78zum5 x1a02dak x6s0dn4 x167g77z xeuugli x2lah0s x1n2onr6 x1vjfegm x193iq5w x1nhvcw1"}}[!!t.stacked<<0],"data-record-trailing":"true",children:t.trailing})]})}function In(t){let e=t.tone??"neutral",n=t.density==="compact";return Pt.jsx("span",{...T(Z.badge,n&&Z.compactBadge,e==="good"&&Z.good,e==="warn"&&Z.warn,e==="error"&&Z.error,n&&e==="good"&&Z.compactGood,n&&e==="warn"&&Z.compactWarn,n&&e==="error"&&Z.compactError),"data-tone":e,"data-record-badge":"true",children:t.children})}function dn(t){let{components:e}=yt.useContext(Y),n=t.drag,{Disclosure:o}=e,x=yt.useContext(an)!==null;return v.jsx(fi,{density:e.density,presentation:t.presentation,children:t.items.map((a,r)=>{let c=[...a.meta?[a.meta]:[],...a.metadata??[]];return v.jsx(gi,{density:e.density,tone:a.tone,selected:t.openId===a.id,master:x&&t.openId!==void 0,stacked:t.presentation==="activity"||t.presentation==="attention",interactive:Boolean(a.link??a.links?.length),drag:n&&ix(a).length>0?{onStart:(u)=>{u.dataTransfer.setData("text/plain",a.id),n.start(a)},onEnd:n.end}:void 0,trailing:a.count!==void 0||Boolean(a.badges?.length)||Boolean(a.actions?.length)||Boolean(a.links?.length)||t.presentation==="attention"&&c.length>0?v.jsxs(v.Fragment,{children:[t.presentation==="attention"&&c.length>0&&v.jsx("small",{...{className:"x1ar3pfp xa9opjo x1j6dyjg x1dbl2gt xeuugli xj0a0fe"},children:v.jsx(me,{values:c})}),a.links&&a.links.length>0&&v.jsx("nav",{...{className:"x78zum5 x1a02dak x3phc52 xfifm61 x1n2onr6 x1vjfegm"},"aria-label":`${a.title} links`,children:a.links.map((u,l)=>v.jsx(ae,{target:u.target,emphasis:"normal",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:u.label},`${u.label}:${l}`))}),a.count!==void 0&&v.jsx("span",{...{className:"xeuugli xgi1xjn xa9opjo x1j6dyjg xj0a0fe"},children:a.count}),a.badges?.map((u,l)=>v.jsx(In,{density:e.density,tone:u.tone,children:u.label},`${u.label}:${l}`)),v.jsx(cn,{actions:a.actions??[],onAction:t.onAction,subordinate:!0,label:a.title,triggerLabel:a.actionsLabel})]}):void 0,children:v.jsx(Wr,{density:e.density,metadata:t.presentation==="attention"?[]:c,presentation:t.presentation,primary:r===0,clamp:x,title:a.link?v.jsx(ae,{target:a.link,emphasis:"title",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:a.title}):a.title,description:a.description&&(a.tone==="warn"||a.tone==="error")&&a.description.length>160?v.jsxs("div",{...{className:"x1n2onr6 x1vjfegm xeuugli"},children:[v.jsx(Ko,{text:a.description,density:e.density,clamp:!0}),v.jsx(o,{title:a.title,triggerLabel:"Details",className:"operator-issue-details",children:v.jsx(ln,{text:a.description,density:e.density,framed:!1})})]}):a.description,children:a.tags&&a.tags.length>0&&v.jsx("span",{...{className:"x78zum5 x1a02dak x1nejdyq x1rhet7l"},children:a.tags.map((u)=>v.jsx(In,{density:e.density,children:u},u))})})},a.id)})})}function ax(t){let[e,n]=yt.useState(t.block.filter?.defaultValue??"all"),o=t.block.filter?.allValue??"all",x=t.block.items.filter((a)=>!t.block.filter||e===o||a.filterValues?.includes(e));if(t.block.items.length===0)return v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty});return v.jsxs("div",{children:[t.block.filter&&v.jsx(mo,{className:"declarative-filter",role:"group","aria-label":t.block.filter.label,children:t.block.filter.options.map((a)=>v.jsxs(po,{type:"button",emphasis:a.emphasis==="gap"?"attention":void 0,"aria-pressed":e===a.value,"data-emphasis":a.emphasis,onClick:()=>n(a.value),children:[a.label,a.count!==void 0?` (${a.count})`:""]},a.value))}),x.length===0?v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty}):v.jsx(dn,{items:x,presentation:t.block.presentation,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId})]})}function rx(t){let e=t.block.rows.some((a)=>(a.actions?.length??0)>0),n=t.block.rows.flatMap((a)=>{if(!a.compact)return[];return[{id:a.id,title:a.compact.title,...a.compact.description?{description:a.compact.description}:{},...a.compact.metadata?{metadata:a.compact.metadata}:{},...a.compact.badges?{badges:a.compact.badges}:{},...a.compact.count!==void 0?{count:a.compact.count}:{},...a.compact.tone?{tone:a.compact.tone}:{},...a.link?{link:a.link}:{},...a.actions?{actions:a.actions}:{}}]}),o=t.block.rows.some((a)=>!a.compact),x=t.block.rows.length===0?v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty}):v.jsxs(v.Fragment,{children:[n.length>0&&v.jsx("div",{...{className:"x1s85apg xplwmzv xfsj286"},className:"declarative-compact-rows x1s85apg xplwmzv xfsj286",children:v.jsx(dn,{items:n,presentation:"activity",onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId})}),v.jsx("div",{...{className:"x193iq5w xeuugli xw2csxc x1lliihq xplwmzv x22zvs4 xfsj286 x1a92eo6 x18d9i69 x1aciil0 xs4y3db x1yy75ev x1yieemc xsjhqdm x5zp4vj x1douzxv x3y8eqj xqwvrdo xosa0jh xvwifah x1rfhg52 x1668a04 x1defwea"},className:"declarative-table-scroll operator-table-scroll x193iq5w xeuugli xw2csxc x1lliihq xplwmzv x22zvs4 xfsj286 x1a92eo6 x18d9i69 x1aciil0 xs4y3db x1yy75ev x1yieemc xsjhqdm x5zp4vj x1douzxv x3y8eqj xqwvrdo xosa0jh xvwifah x1rfhg52 x1668a04 x1defwea",...n.length>0?{"data-has-unannotated":o?"true":"false"}:{},children:v.jsxs("table",{...{className:"xh8yej3 x193iq5w x1mwwwfo xgi1xjn xfifm61"},className:"declarative-table operator-table xh8yej3 x193iq5w x1mwwwfo xgi1xjn xfifm61",children:[v.jsx("thead",{children:v.jsxs("tr",{children:[t.block.columns.map((a)=>Lt.createElement("th",{...{className:"xexx8yu xdvlbce x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 x1594w68 x1ar3pfp xa9opjo x1vz2964 x1bgvhw5 x1r16saa xtvhhri xuxw1ft x16dsc37 xdpxx8g x1ffr0y8 xpebyx1"},key:a.key,"data-align":a.align??"start"},a.label)),e&&v.jsx("th",{...{className:"xexx8yu xdvlbce x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 x1594w68 x1ar3pfp xa9opjo x1vz2964 x1bgvhw5 x1r16saa xtvhhri xuxw1ft x16dsc37 xdpxx8g x1ffr0y8 xpebyx1"},"data-align":"end",children:"Actions"})]})}),v.jsx("tbody",{children:t.block.rows.map((a)=>Lt.createElement("tr",{...{className:"xf5m44m x1lu4wmf x15zwrp0 x1fdxwjo x1kvcy9f xjbqb8w xd8d5gp x1b32d6n x1gnnqk1 x1v17x4h"},key:a.id,...a.compact?{"data-compact-row":"true"}:{},...t.openId===a.id?{"aria-current":"true"}:{}},t.block.columns.map((r,c)=>{let u=oi(a.cells[r.key]);return Lt.createElement("td",{...{className:"xz9dl7a xsag5q8 x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 xpqg30t xgi1xjn xbd3v37 x4z9k3i xq648tx xo1l8bm xsnqk1y xxymvpz xdpxx8g x1ffr0y8 xpebyx1"},key:r.key,"data-align":r.align??"start"},c===0&&a.link?v.jsx(ae,{target:a.link,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:u}):u)}),e&&v.jsx("td",{...{className:"xz9dl7a xsag5q8 x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 xpqg30t xgi1xjn xbd3v37 x4z9k3i xq648tx xo1l8bm xsnqk1y xxymvpz xdpxx8g x1ffr0y8 xpebyx1"},"data-align":"end",children:v.jsx(cn,{align:"end",actions:a.actions??[],onAction:t.onAction,subordinate:!0})})))})]})})]});if(!t.block.query)return x;return v.jsxs("div",{className:"declarative-table-collection",children:[v.jsx(xx,{block:t.block.query,query:t.query,onQueryChange:t.onQueryChange}),x]})}function ix(t){return(t.actions??[]).filter((e)=>e.dropTarget!==void 0&&e.disabled!==!0)}function sx(t){let e=yt.useContext(Y),[n,o]=yt.useState(null),[x,a]=yt.useState(""),r=t.openId!==void 0?1:t.block.columns??2,c=async(u)=>{a("");try{let l=nx(u,await t.onAction(u));if(l)e.onDetachedActionResult?.(l)}catch(l){a(Re(l))}};return v.jsx("div",{...{className:"xzxxqnc x12h1iku xeuugli"},children:v.jsxs("div",{...{className:"xrvj5dj xaobbuh xeuugli x1mkdm3x x1q3wkif x1gbo546 xkyyx2n xchmvhn x1mqdp8p x16lgxdz x1gjrsil"},"data-columns":r,children:[x&&v.jsx("p",{...{className:"x1mel2pz"},role:"alert",children:x}),t.block.cells.map((u)=>{let l=n?ix(n).find((d)=>d.dropTarget===u.id):void 0;return Lt.createElement("section",{...{0:{className:"x17il9kl x12h1iku xeuugli xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xamhcws x172wxxo xvw7cn x1qaj2f5 xoy5xpq xur7f20 x18s3upu"},1:{className:"x17il9kl x12h1iku xeuugli xbxpdvy xmkeg23 xamhcws x172wxxo xvw7cn x1qaj2f5 xoy5xpq xur7f20 xbsl7fq xawfzfr x9kxhyz"}}[!!l<<0],key:u.id,"data-tone":u.tone??"neutral","data-matrix-cell":"","data-drop":l?"allowed":void 0,onDragOver:l?(d)=>d.preventDefault():void 0,onDrop:l?(d)=>{d.preventDefault(),o(null),c(l)}:void 0},v.jsx("h3",{...{className:"x8o5f6s x1ar3pfp xv6m45y x4nd1th xjgl48g x19vr2a4 xel79qc xj0a0fe"},children:u.label}),u.items.length===0?v.jsx("p",{...{className:"x1ghz6dp x1ar3pfp x1ct8sxb xj0a0fe x1toko95"},children:u.empty}):v.jsx(dn,{items:u.items,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId,drag:{start:o,end:()=>o(null)}}))})]})})}function hi(t,e){let n=(e-90)*Math.PI/180,o=t*45;return{x:50+Math.cos(n)*o,y:50+Math.sin(n)*o}}function vi(t){let e=new Map;if(t.layout==="cartesian"){for(let n of t.points)e.set(n.id,{x:n.x*100,y:n.y*100});for(let n of t.zones)e.set(n.id,{x:n.x*100,y:n.y*100})}else for(let n of t.points)e.set(n.id,hi(n.distance,n.bearing));return e}function bi({block:t}){let e=vi(t);return P.jsxs("figure",{...{className:"xrvj5dj x1v2ro7d xeuugli x1ghz6dp xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xur7f20 x18s3upu"},"data-ui-spatial":!0,"aria-label":t.label,children:[P.jsxs("div",{...{className:"x1n2onr6 xeuugli x1mrxzx8 xb3r6kr xmkeg23 x1y0btm7 xy1lt07 xur7f20 xnhfnza x18s3upu"},children:[P.jsxs("svg",{...{className:"x10l6tqk x10a8y8t xh8yej3 x5yr21d"},viewBox:"0 0 1000 600",preserveAspectRatio:"none","aria-hidden":"true",children:[t.layout==="radial"&&t.strata.map((o)=>P.jsx("ellipse",{...{className:"xbh8q5q x4vhfi8 xhr4kjn x13efnbd"},cx:"500",cy:"300",rx:o.maxDistance*450,ry:o.maxDistance*270},o.id)),t.layout==="cartesian"&&t.zones.map((o)=>P.jsx("circle",{...{className:"x4vhfi8 xhr4kjn x13efnbd x63ly0w xl9zam1"},cx:o.x*1000,cy:o.y*600,r:"72"},o.id)),(t.relationships??[]).map((o,x)=>{let a=e.get(o.sourceId),r=e.get(o.targetId);if(!a||!r)return null;return P.jsx("line",{"data-tone":o.tone??"neutral",...{className:"x4vhfi8 xgw5xlg xgcfudb xnpr05h x13efnbd"},x1:a.x*10,y1:a.y*6,x2:r.x*10,y2:r.y*6},`${o.sourceId}:${o.targetId}:${x}`)})]}),t.layout==="radial"&&P.jsx("span",{...{className:"x10l6tqk xwa60dl x1nrll8i xhtitgo x2aouup x1jmcyos xmkeg23 x1y0btm7 xmt0h0j x1e6avla x18s3upu xqvuw85 xa9opjo x1k6wstc x2b8uid x11lhmoz xj0a0fe"},"data-kind":t.centerKind,children:t.centerLabel}),P.jsx("div",{...{className:"x10l6tqk x10a8y8t xh8yej3 x5yr21d"},role:"list",children:t.points.map((o)=>{let x=e.get(o.id);if(!x)return null;let a="category"in o?[o.category,...o.details??[]]:[o.kind,o.status,...o.tags??[],...o.details??[]];return P.jsxs("button",{...{className:"x10l6tqk xzkaem6 x1scvahe x1qm06za x110e2yq xrvj5dj x175yr4d x1nejdyq x6s0dn4 x16q51m2 x18juh3m xc342km xiy2bcw xgi1xjn x1711cle x1r2bfix x1s1kr4f xa9opjo xvwhms9 x1u7k74 xdpxx8g x11lhmoz x1ypdohk x1mz1wvm x4wkmsb xgdialr xwji4o3 x1k57tk5 xcdb3qq x4xl6zf xiaifju xaatb59 x100b2on x1hl8ikr x1hc1fzr x64nxkd"},type:"button",role:"listitem",style:{left:`${x.x}%`,top:`${x.y}%`},"data-ui-spatial-point":o.id,"data-ui-spatial-related":JSON.stringify("relatedIds"in o?o.relatedIds??[]:[]),"data-tone":o.tone??"neutral","aria-pressed":"false","aria-controls":`${t.id}-detail-${o.id}`,title:`${o.label}: ${a.join(", ")}`,children:[P.jsx("span",{...{className:"x1wc42o8 xegnrdp xdh2fpr x1y0btm7 x1vw2y1n xjgjgpo xt7649k xu3iebo x16rqkct x18s3upu"},"aria-hidden":"true"}),P.jsx("span",{...{className:"xeuugli xj0a0fe"},children:o.label})]},o.id)})})]}),P.jsxs("figcaption",{children:[P.jsx("p",{...{className:"xjgi5au xgi1xjn x1ct8sxb x1evy7pa xj0a0fe"},children:t.description}),P.jsx("ul",{...{className:"x78zum5 x1a02dak x1u7gxyo xe6w4ck x1717udv x1ar3pfp xa9opjo xvwhms9 x3ct3a4"},"aria-label":"Legend",children:t.legend.map((o,x)=>P.jsx("li",{...{className:"xeuugli xj0a0fe x1y1aw1k x178xt8z x13fuv20 xvg7k2t x1cpjm7i xtcx8v3 x1fhgk32 x1x7x01p xf3jtlm xmz0esg xz8fyzm x1fo1fc9 x1x6ksa7 x9msap3"},"data-tone":o.tone??"neutral",children:o.label},`${o.label}:${x}`))}),P.jsx("div",{"aria-live":"polite",children:t.points.map((o)=>P.jsxs("article",{id:`${t.id}-detail-${o.id}`,"data-ui-spatial-detail":o.id,...{className:"x78zum5 xvgho8r x1a02dak x167g77z x1xmf6yo x1ar3pfp x1j6dyjg xeuugli"},hidden:!0,children:[P.jsx("strong",{...{className:"x8o5f6s xqvuw85 x4nd1th xjgl48g x19vr2a4 xel79qc xv6m45y xj0a0fe"},children:o.label}),P.jsx("span",{...{className:"xeuugli xj0a0fe"},children:"category"in o?o.category:`${o.kind} · ${o.status}`})]},o.id))})]})]})}function ve(t){switch(t.block.type){case"stats":return h.jsx(ox,{block:t.block});case"key-values":return h.jsx(xi,{block:t.block});case"notice":return h.jsx(ai,{block:t.block});case"text":return h.jsx(ri,{block:t.block});case"group":return h.jsx(si,{block:t.block});case"flow":return h.jsx(ci,{block:t.block});case"meters":return h.jsx(li,{block:t.block});case"series":return h.jsx(pi,{block:t.block});case"progress":return h.jsx(ui,{block:t.block});case"query":return h.jsx(xx,{block:t.block,query:t.query,onQueryChange:t.onQueryChange});case"links":return h.jsx(ii,{block:t.block,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"list":return h.jsx(ax,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"table":return h.jsx(rx,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});case"matrix":return h.jsx(sx,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"spatial":return h.jsx(bi,{block:t.block});case"action":return h.jsx(sn,{action:t.block,onAction:t.onAction});case"actions":return h.jsx(cn,{actions:t.block.items,onAction:t.onAction})}}function yi(t){let{block:e,query:n,onQueryChange:o}=t,x=rt.useRef(null),a=n[e.queryKey],r=typeof a==="string"&&a!==""?a:void 0,c=e.open?.forId===r?e.open:void 0,u=r!==void 0&&c===void 0;rt.useEffect(()=>{if(c)x.current?.focus()},[c]);let l=(i)=>{o({...n,[e.queryKey]:i})},d=()=>{let i={...n};delete i[e.queryKey],o(i)},s=e.master.type==="list"?h.jsx(ax,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:r}):e.master.type==="matrix"?h.jsx(sx,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:r}):h.jsx(rx,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o,openId:r});return h.jsxs("div",{className:`declarative-detail ${{0:{className:"xrvj5dj x1mkdm3x x7a106z x33pbmt xeuugli"},1:{className:"xrvj5dj x7a106z x33pbmt xeuugli x1bu5on4 x1ids1fr xf4kbi9"}}[(r!==void 0)<<0].className??""}`,"data-open":r===void 0?"false":"true",children:[h.jsx("section",{className:`declarative-detail-master ${{0:{className:"xeuugli"},1:{className:"xeuugli xubcuz8 x1lvm2b2"}}[(r!==void 0)<<0].className??""}`,"aria-label":"Items",children:h.jsx(an.Provider,{value:l,children:s})}),r!==void 0&&h.jsx("section",{"data-operator-detail-pane":"",className:"declarative-detail-pane xeuugli xggk2y7 xwn745a xmkeg23 x1y0btm7 xy1lt07 x1sxf85j x18s3upu","aria-label":c?c.title:"Detail",children:c?h.jsxs(h.Fragment,{children:[h.jsx("button",{type:"button",className:"declarative-detail-back x1s85apg xsyu1bm x19y3i14 x6s0dn4 x1eguyfn xod5an3 x1717udv xc342km xjbqb8w x5ddh9m xfifm61 x1myn341 x1ypdohk x16dl9wz xj3ae5l",onClick:d,children:"← Back"}),h.jsx("h2",{...{className:"x1qe5pcq xssy22x x1pvqxga xo1l8bm xkhxzli xwn7fz2 xqvuw85 xj0a0fe x1a2a7pz x1uqgcet"},ref:x,tabIndex:-1,children:c.title}),h.jsx("div",{...{className:"xrvj5dj x1c1vhfx xeuugli"},children:c.blocks.map((i,k)=>h.jsx("section",{"data-block":i.type,children:i.type==="card"?h.jsx(kn,{framed:!1,block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o}):h.jsx(ve,{block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o})},i.id??`${i.type}:${k}`))})]}):h.jsxs(h.Fragment,{children:[h.jsx("button",{type:"button",className:"declarative-detail-back x1s85apg xsyu1bm x19y3i14 x6s0dn4 x1eguyfn xod5an3 x1717udv xc342km xjbqb8w x5ddh9m xfifm61 x1myn341 x1ypdohk x16dl9wz xj3ae5l",onClick:d,children:"← Back"}),h.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},"aria-live":"polite",children:u?"Loading…":e.empty})]})})]})}function kn(t){let{components:e}=rt.useContext(Y),n=t.block.blocks,o=n.reduce((r,c,u)=>c.type==="links"||c.type==="actions"?r:u,-1)+1,x=n.length-o>1,a=(r,c)=>h.jsx("div",{"data-block":r.type,children:h.jsx(ve,{block:r,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},r.id??`${r.type}:${c}`);return h.jsx(tx,{label:t.block.label,metadata:t.block.metadata,framed:t.framed,tone:t.block.tone,presentation:t.block.presentation,density:e.density,renderDisclosure:t.block.presentation==="disclosure"&&t.block.disclosureLabel!==void 0?(r)=>h.jsx(e.Disclosure,{title:t.block.label,triggerLabel:t.block.disclosureLabel,triggerVariant:"outline",children:r}):void 0,footer:x?n.slice(o).map((r,c)=>a(r,o+c)):void 0,children:n.slice(0,x?o:n.length).map(a)})}function ji(t){let{components:e}=rt.useContext(Y),n=(o)=>h.jsx(h.Fragment,{children:o.map((x,a)=>h.jsx("section",{...{0:{},1:{className:"xaqh0s9"}}[(e.density==="comfortable"&&a>0&&!(x.type==="card"&&x.presentation==="disclosure"))<<0],"data-block":x.type,children:x.type==="card"?h.jsx(kn,{block:x,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange}):h.jsx(ve,{block:x,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},x.id??`${x.type}:${a}`))});return h.jsx(Ex,{density:e.density,joined:e.density==="comfortable",primary:n(t.block.primary),aside:n(t.block.aside)})}function cx(t){let e=t.block.type==="tabs"?t.block.defaultTab:"",n=t.block.type==="tabs"?t.block.queryKey:void 0,[o,x]=rt.useState(e);rt.useEffect(()=>{if(!n)x(e)},[e,n]);let a=rt.useContext(Y);if(t.block.type==="columns")return h.jsx(ji,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type==="card")return h.jsx(kn,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type==="detail")return h.jsx(yi,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type!=="tabs")return h.jsx(ve,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});let r=t.block.tabs.map((s)=>({value:s.id,label:s.label,...s.count!==void 0?{count:s.count}:{},content:s.blocks.map((i,k)=>h.jsx("section",{className:`operator-block operator-block--${i.type} ${{0:{className:"xeuugli"},1:{className:"xeuugli xaqh0s9"}}[(k>0)<<0].className??""}`,children:h.jsx(cx,{block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},i.id??`${i.type}:${k}`))}));if(a.renderAllTabs)return h.jsx(Zr,{id:`operator-${t.block.id}`,label:t.block.label,defaultValue:t.block.defaultTab,tabs:r});let c=n?t.query[n]:void 0,u=typeof c==="string"?c:o,l=r.some((s)=>s.value===u)?u:r[0]?.value??"",{Tabs:d}=a.components;return h.jsx(d,{label:t.block.label,value:l,tabs:r,onValueChange:(s)=>{if(n)t.onQueryChange({[n]:s});else x(s)}})}var wi=new Set(["key-values","group","meters","progress"]);function Cn(t){return wi.has(t)?"compact":"wide"}function Ti(t){let[e,n]=co.useState(null),{title:o,blocks:x}=t.data.view,[a]=x,r=t.renderHead!==!1&&t.renderAllTabs!==!0&&a?.type==="stats"?a:null,c=r?x.slice(1):x,u=t.components??ex,l={0:{className:"x2lwn1j x186ixgm xdbnglg x1odjw0f x1cb063g"},1:{className:"x186ixgm x1foj65r x12h1iku x65nank x1717udv x1plvlek xryxfnj xb1114b"}}[(t.renderHead===!1)<<0],d={0:{className:"xrvj5dj x1jsv65m x7a106z x14i4cvt x1p5oq8j x4jmfmw x62c7l xugsc6q x1c2rghm xyedrc3 x1tkkb8"},1:{className:"xrvj5dj x1jsv65m x7a106z x4jmfmw x1c2rghm x1jaupxr x7sb2j6 xqca30q xugsc6q x1wlbpn8 x1tkkb8"}}[(u.density==="comfortable")<<0],{kicker:s,description:i,status:k,primaryAction:g}=t.data.view,p=Boolean(o)||Boolean(s)||Boolean(i)||r!==null||k!==void 0||g!==void 0;return W.jsx(Y.Provider,{value:{resolveLink:t.resolveLink,onDetachedActionResult:n,renderAllTabs:t.renderAllTabs===!0,components:u},children:W.jsxs("main",{...l,className:`declarative-workspace operator-view ${l.className??""}`,"data-control-engine":u.engine,children:[t.renderHead!==!1&&p&&W.jsxs("header",{...{className:"x78zum5 x1a02dak x1cy8zhl x1qughib x1lblyuz x1l90r2v xlxy82 x1q0q8m5 x1594w68 xeuugli"},children:[W.jsxs("div",{...{className:"x148vls7 xeuugli"},children:[s&&W.jsx("span",{...{className:"x1lliihq xzueoph x1myn341 xa9opjo xvwhms9 x11fj6oh xtvhhri xj0a0fe"},children:s}),W.jsx("h2",{...{className:"x1ghz6dp xqvuw85 xssy22x x1m6oxru x1mg0i68 x17owtcr xseu7c4 x5sy3j4 x1f41ap9 xj0a0fe"},children:o}),i&&W.jsx("p",{...{className:"x1rhet7l xgi1xjn x4z9k3i x1evy7pa xj0a0fe"},children:i})]}),W.jsxs("div",{...{className:"xrvj5dj x4xo5sw x1v2ro7d xeuugli x193iq5w"},children:[k&&W.jsxs("strong",{...{className:"xrvj5dj x4xo5sw x1ed6fcf xqvuw85 xh9rmbx x16a6thm x1mvgbya x1ct8sxb xh88oxj xj0a0fe"},"data-tone":k.tone??"neutral",children:[k.label,k.detail&&W.jsx("small",{...{className:"x1ar3pfp xa9opjo xfmn3hh xo1l8bm xj0a0fe"},children:k.detail})]}),r&&W.jsx(ox,{block:r,placement:"head"}),g&&W.jsx(sn,{action:g,primary:!0,onAction:t.onAction})]})]}),W.jsxs("div",{...d,"data-operator-blocks":"",className:`declarative-blocks ${d.className??""}`,children:[e&&W.jsx("section",{className:"operator-block operator-block--action declarative-action-receipt xeuugli x1osaytk","data-block":"action","data-span":"wide",children:W.jsx(Ie,{result:e,onDismiss:()=>n(null)})}),c.map((f,w)=>W.jsx("section",{className:`operator-block operator-block--${f.type} ${{0:{className:"xeuugli"},2:{className:"xeuugli x1osaytk"},1:{className:"xeuugli xifccgj"},3:{className:"xeuugli x1osaytk xifccgj"}}[(Cn(f.type)==="wide")<<1|(f.type==="query")<<0].className??""}`,"data-block":f.type,"data-span":Cn(f.type),children:W.jsx(cx,{block:f,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch??(()=>{}),query:t.query??{},onQueryChange:t.onQueryChange??(()=>{})})},f.id??`${f.type}:${w}`))]})]})})}
47
+ `),density:e.density,framed:!1})})})}function ri({block:t}){let{components:e}=$t.useContext(Y);return q.jsx(ln,{label:t.label,text:t.text,truncated:t.truncated,density:e.density})}function ii(t){return q.jsx("nav",{...{className:"x78zum5 x1a02dak x6s0dn4 x1j9xkj6 xvtq9v3 x1g79t40 xs9z77v xeuugli"},"aria-label":"Workspace links",children:t.block.items.map((e,n)=>q.jsx(ae,{target:e.target,emphasis:"action",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:e.label},`${e.label}:${n}`))})}function si(t){let{components:e}=$t.useContext(Y);return q.jsx(tx,{label:t.block.label,density:e.density,framed:!1,children:q.jsx(fo,{density:e.density,items:t.block.items.map((n)=>({label:n.label,value:n.value===void 0?void 0:un(n.value),caption:n.description,tone:n.tone}))})})}function ci(t){return q.jsxs("section",{...{className:"xeuugli x193iq5w"},"aria-labelledby":`${t.block.id}-title`,children:[q.jsx("h3",{...{className:"x1lliihq xbckst3 x8o5f6s x1ar3pfp x4nd1th xjgl48g x19vr2a4 xel79qc xv6m45y xj0a0fe"},id:`${t.block.id}-title`,children:t.block.label}),q.jsx("ol",{...{className:"x78zum5 x1w305zg x10acg2q xxhr3t x16qsdag x1d3ddqg x1ghz6dp x9ms5i6 x3ct3a4 xw2csxc x10774h0 xdayf2q x193iq5w"},"data-direction":t.block.direction??"forward",children:t.block.steps.map((e)=>ke.createElement("li",{...{className:"x1n2onr6 x1j6awrg x9f619 x2lah0s xeuugli x1ghds7r xe0affe x1ll1jh2 x1prkmhq x9nnsnq x1s7jvk7 x11uxfgx x33yvzk x1uhho1l x1h1edae x1316j x18d9i69 xm1vsfr x1ckun3f x1ar3pfp x1s928wv xguj015 x5jc7rz x7hj2ou x1wdcn98 x12bpigw x44p448 x1e70te5 x14cqbmr x2e6dpv x194c2x1 xxw6uw7 x1ujw8yj xcock1l xpldujj x15t6rfx x1y3k7d7"},key:e.id,"data-status":e.status},q.jsx("span",{...{className:"x1uhb9sk x18of6z9 x1nck5sx x190b9kf xz59zry xxdgi2x x172uiah x1lliihq x9f619 x1wc42o8 xegnrdp xfitlp5 xmkeg23 x1y0btm7 x16rqkct x1vw2y1n x6cfppn xym8ms8 x1dd94t5 xn4j7m4 x1amwds0 x1gnnqk1 xyx7rhw"},"aria-hidden":"true"}),q.jsx("strong",{...{className:"x1lliihq x1ct8sxb xk50ysn xj0a0fe xgi1xjn xn6wv7h x1vjhw47"},children:e.label}),e.detail&&q.jsx("small",{...{className:"x1lliihq x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:e.detail})))})]})}function li(t){return q.jsx("dl",{...{className:"xrvj5dj x1lelaru x1w43bmf xiv87he xps7s55 x1ghz6dp xeuugli"},children:t.block.items.map((e)=>ke.createElement("div",{...{className:"xeuugli"},key:e.id,"data-tone":e.tone??"neutral"},q.jsx("dt",{...{className:"x1ar3pfp xa9opjo xfmn3hh x1labic3 xtvhhri xj0a0fe"},children:e.label}),q.jsxs("dd",{...T(xe.value,e.tone&&e.tone!=="neutral"&&xe[e.tone]),children:[q.jsxs("span",{children:[e.value,e.unit?` ${e.unit}`:""]}),e.max!==void 0&&q.jsxs("progress",{...{className:"x1lliihq xh8yej3 xqu0tyb x1xmf6yo xjyslct xc342km x1e6avla xdyxp2i xeqdbg4 xbmcqy5 xg47p5g x15jglqw x1h2yhso x1qjdyzq x1q9s9ta"},"aria-label":e.label,value:e.value,max:e.max,children:[e.value," / ",e.max]})]})))})}function ui(t){return q.jsxs("section",{...{className:"xeuugli xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xur7f20 x18s3upu"},"data-tone":t.block.tone??"neutral",children:[q.jsxs("header",{...{className:"x78zum5 x1pha0wt x1qughib x1af02g3 x1a02dak"},children:[q.jsx("strong",{...{className:"xqvuw85 x2ouz8m xh88oxj xeuugli xj0a0fe"},children:t.block.label}),q.jsx("span",{...T(xe.state,t.block.tone&&t.block.tone!=="neutral"&&xe[t.block.tone]),children:t.block.state})]}),t.block.progress!==void 0&&q.jsxs("progress",{...{className:"x1lliihq xh8yej3 xqu0tyb x1xmf6yo xjyslct xc342km x1e6avla xdyxp2i xeqdbg4 xbmcqy5 xg47p5g x15jglqw x1h2yhso x1qjdyzq x1q9s9ta"},"aria-label":t.block.label,value:t.block.progress,max:1,children:[Math.round(t.block.progress*100),"%"]}),t.block.detail&&q.jsx("p",{...{className:"xe6w4ck xgi1xjn x1ct8sxb xj0a0fe"},children:t.block.detail}),(t.block.startedAt??t.block.updatedAt)&&q.jsxs("small",{...{className:"x1lliihq x1anpbxc x1ar3pfp xa9opjo x1k6wstc xj0a0fe"},children:[t.block.startedAt?`Started ${t.block.startedAt}`:"",t.block.startedAt&&t.block.updatedAt?" · ":"",t.block.updatedAt?`Updated ${t.block.updatedAt}`:""]})]})}function xx(t){let{Button:e,Select:n,density:o,engine:x}=$t.useContext(Y).components,a=(u,l)=>{let d={...t.query,offset:0};if(l==="")delete d[u];else d[u]=l;t.onQueryChange(d)},r=t.block.pagination,c=r?Math.min(r.offset+r.limit,r.total):0;return q.jsxs("section",{...{className:"x78zum5 x1a02dak xuk3077 x1qughib x1avw0xy xeuugli"},"aria-label":t.block.controls.length?"Workspace filters":"Collection pages",children:[t.block.controls.length>0&&q.jsx("div",{...{className:"x78zum5 x1a02dak x1af02g3 xeuugli x193iq5w x10acg2q xou8obv x1dbdljh x1w305zg x1nae48y x1amo615"},children:t.block.controls.map((u)=>ke.createElement("label",{...{0:{className:"xrvj5dj x17d4w8g xeuugli x193iq5w xgi1xjn x5ddh9m xfifm61 x37zpob xj0a0fe"},1:{className:"xrvj5dj x17d4w8g xeuugli x193iq5w x37zpob xj0a0fe x1ar3pfp xa9opjo xfmn3hh x1labic3 xtvhhri"}}[(o==="compact")<<0],key:u.key},q.jsx("span",{children:u.label}),q.jsxs(n,{xstyle:[x==="css"&&On.cssSelect,On.control],value:u.value??"",onChange:(l)=>a(u.key,l.target.value),children:[q.jsx("option",{value:"",children:u.allLabel??"All"}),u.options.map((l)=>q.jsxs("option",{value:l.value,children:[l.label,l.count===void 0?"":` (${l.count})`]},l.value))]})))}),r&&q.jsxs("footer",{...{0:{className:"x78zum5 x1a02dak x6s0dn4 x1af02g3 x8x9d4c xeuugli x1dbdljh x703316 x1s9bmkn x1amo615 x1m2ds42 xq86nrr x1ar3pfp xa9opjo x1j6dyjg xj0a0fe"},1:{className:"x78zum5 x1a02dak x6s0dn4 x1af02g3 xeuugli x1dbdljh x703316 x1s9bmkn x1amo615 x1m2ds42 xq86nrr x1ar3pfp xa9opjo x1j6dyjg xj0a0fe xj3b58b x1qughib xh8yej3"}}[(t.block.controls.length===0)<<0],children:[q.jsx("span",{children:r.total===0?"Nothing to show":r.offset>=r.total?`No items on this page · ${r.total} total`:`Showing ${r.offset+1}–${c} of ${r.total}`}),(r.offset>0||c<r.total)&&q.jsxs("span",{...{className:"x78zum5 x1a02dak x167g77z"},children:[q.jsx(e,{type:"button",variant:"ghost",disabled:r.offset===0,onClick:()=>t.onQueryChange({...t.query,offset:Math.max(0,r.offset-r.limit),limit:r.limit}),children:"Previous"}),q.jsx(e,{type:"button",variant:"ghost",disabled:c>=r.total,onClick:()=>t.onQueryChange({...t.query,offset:r.offset+r.limit,limit:r.limit}),children:r.label??"Next"})]})]})]})}var Rn={figure:{k1xSpc:"xrvj5dj",kOIVth:"x167g77z",kogj98:"x1ghz6dp",k7Eaqz:"xeuugli",$$css:!0},caption:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kb6lSQ:"x7447wj",kP9fke:"xtvhhri",$$css:!0},chart:{k1xSpc:"x1lliihq",kzqmXN:"xh8yej3",kZKoxP:"xhjk10j",kVQacm:"x1rea2x4",$$css:!0},flat:{kZKoxP:"xxk0z11",$$css:!0},hit:{kDwRjp:"xy6m8k3",$$css:!0},marker:{kDwRjp:"xgeoyvb",$$css:!0},bar:{kDwRjp:"x1rw6qo9 xg7jwtm",kmkexE:"xzjk7dm",$$css:!0},good:{kDwRjp:"x1s7eawt",$$css:!0},warn:{kDwRjp:"x1v1fulq",$$css:!0},error:{kDwRjp:"xp8jjoe",$$css:!0},missing:{kDwRjp:"xbh8q5q",kjVXCG:"x4vhfi8",k5rJSQ:"xbw2l0c",$$css:!0},axis:{k1xSpc:"x78zum5",kjj79g:"x1qughib",kOIVth:"x1v2ro7d",kMwMTN:"x1v3krkk",kMv6JI:"xa9opjo",kGuDYH:"x1k6wstc",kb6lSQ:"x1dgsrnt",$$css:!0},peak:{kMwMTN:"x1ar3pfp",$$css:!0}},Dt=10,Kt=8,di=100,ki=10,An=0.75;function mi(t,e){let n=t.value===null?"no data":`${t.value}${e?` ${e}`:""}`;return`${t.label}: ${n}${t.marker?` · ${t.marker}`:""}`}function pi(t){let{label:e,unit:n,points:o}=t.block,x=Math.max(0,...o.map((d)=>d.value??0)),a=o[0],r=o[o.length-1],c=o.length*Dt,u=x===0,l=u?ki:di;return F.jsxs("figure",{...{className:"xrvj5dj x167g77z x1ghz6dp xeuugli"},"data-series":t.block.id,children:[F.jsx("figcaption",{...{className:"x1ar3pfp xa9opjo x1k6wstc x7447wj xtvhhri"},children:e}),F.jsx("svg",{...{0:{className:"x1lliihq xh8yej3 xhjk10j x1rea2x4"},1:{className:"x1lliihq xh8yej3 x1rea2x4 xxk0z11"}}[!!u<<0],role:"img","aria-label":`${e}: ${o.length} points, peak ${x}${n?` ${n}`:""}`,viewBox:`0 0 ${c} ${l}`,preserveAspectRatio:"none",children:o.map((d,s)=>{let i=s*Dt,k=d.value===null||x===0?An:Math.max(An,d.value/x*l);return F.jsxs("g",{"data-series-point":d.id,"data-missing":d.value===null?"true":void 0,"data-tone":d.tone,children:[F.jsx("title",{children:mi(d,n)}),d.marker&&F.jsx("rect",{...{className:"xgeoyvb"},"data-series-marker":"",x:i,y:0,width:Dt,height:l}),F.jsx("rect",{...{className:"xy6m8k3"},x:i,y:0,width:Dt,height:l}),d.value===null?F.jsx("rect",{...{className:"xbh8q5q x4vhfi8 xbw2l0c"},x:i+(Dt-Kt)/2,y:l-2,width:Kt,height:2}):F.jsx("rect",{...T(Rn.bar,d.tone&&d.tone!=="neutral"&&Rn[d.tone]),x:i+(Dt-Kt)/2,y:l-k,width:Kt,height:k})]},d.id)})}),F.jsxs("div",{...{className:"x78zum5 x1qughib x1v2ro7d x1v3krkk xa9opjo x1k6wstc x1dgsrnt"},"data-series-axis":"",children:[F.jsx("span",{children:a?.label}),F.jsx("span",{...{className:"x1ar3pfp"},children:u?`no ${n??"values"}`:`peak ${x}${n?` ${n}`:""}`}),F.jsx("span",{children:r?.label})]})]})}var Z={list:{kB88ic:"xe8uvvx",kogj98:"x1ghz6dp",kmVPX3:"x1717udv",k7Eaqz:"xeuugli",$$css:!0},compactList:{kEafiO:"x178xt8z",kPef9Z:"x13fuv20",kLZC3w:"xltl5i9",$$css:!0},row:{k1xSpc:"x78zum5",kXwgrk:"x1q0g3np xyil5ud",kwnvtZ:"xozqiw3 x1i03alp xzbubq",kGNEyG:"x6s0dn4 x1ovenir",kjj79g:"x1qughib",kOIVth:"x1c1vhfx x1unfst4 x5cqck7 xd9d3ul",kmVPX3:"x1t7086c x1xukwvs x10e8r38",kt9PQ7:"xso031l x1z10cro",kfdmCh:"x1q0q8m5",kL6WhQ:"xpqg30t",k7Eaqz:"xeuugli",kVAEAm:"x1n2onr6",$$css:!0},compactRow:{kmVPX3:"x1vgkc3a",kGNEyG:"x7a106z",krbiMz:"x1g3ag0e",kkwO13:"x1943nhg",kqJkrk:"x1n3jums",kt4jb9:"xlw4hyx",kZMVlr:"x9awmtd",kZPUVn:"x1k72cru",$$css:!0},master:{kGNEyG:"x7a106z",kE3dHu:"xzjhap9",kpe85a:"x19tmk5i",$$css:!0},stacked:{kXwgrk:"xdt5ytf",kGNEyG:"x1qjc9v5",kOIVth:"x1v2ro7d",$$css:!0},stackedTrailing:{ks0D6T:"x193iq5w",kjj79g:"x1nhvcw1",$$css:!0},selected:{kWkggS:"x18jj7c1",kGVxlE:"xfv7mty",$$css:!0},interactive:{kWkggS:"xjbqb8w xd8d5gp",$$css:!0},trailing:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kGNEyG:"x6s0dn4",kjj79g:"x13a6bvl x1aoecvx x6z9i88 xmn758v",kOIVth:"x167g77z",k7Eaqz:"xeuugli",ks0D6T:"x8jryan x1uikkot xdq2x6k xjjsibu",kmuXW:"x2lah0s",kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",$$css:!0},controls:{kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",k7Eaqz:"xeuugli",$$css:!0},count:{k7Eaqz:"xeuugli",kMwMTN:"xgi1xjn",kMv6JI:"xa9opjo",kGuDYH:"x1j6dyjg",kHjlTd:"xj0a0fe",$$css:!0},links:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x3phc52",kGuDYH:"xfifm61",kVAEAm:"x1n2onr6",kY2c9j:"x1vjfegm",$$css:!0},footerMetadata:{kMwMTN:"x1ar3pfp",kMv6JI:"xa9opjo",kGuDYH:"x1j6dyjg",kLWn49:"x1dbl2gt",k7Eaqz:"xeuugli",kHjlTd:"xj0a0fe",$$css:!0},tags:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"x1nejdyq",keoZOQ:"x1rhet7l",$$css:!0},badge:{ks0D6T:"x193iq5w",kMwMTN:"xgi1xjn",kMv6JI:"x5ddh9m",kGuDYH:"xfifm61",kHjlTd:"xj0a0fe",$$css:!0},compactBadge:{kmVPX3:"xbjd7y",kaIpWk:"x1e6avla",kWkggS:"x1ghvq8m",kMv6JI:"xa9opjo",kGuDYH:"xfmn3hh",kb6lSQ:"x9pfba7",kP9fke:"xtvhhri",$$css:!0},good:{kMwMTN:"x19k5i5u",$$css:!0},warn:{kMwMTN:"x1ra7g20",$$css:!0},error:{kMwMTN:"x1mel2pz",$$css:!0},compactGood:{kWkggS:"x153t6mt",$$css:!0},compactWarn:{kWkggS:"x1mh3lbe",$$css:!0},compactError:{kWkggS:"x42um7s",$$css:!0}};function fi(t){let e={0:{className:"xe8uvvx x1ghz6dp x1717udv xeuugli"},1:{className:"xe8uvvx x1ghz6dp x1717udv xeuugli x178xt8z x13fuv20 xltl5i9"}}[(t.density==="compact")<<0];return Pt.jsx("ol",{...e,className:`operator-record-list ${e.className??""}`,"data-presentation":t.presentation,children:t.children})}function gi(t){return Pt.jsxs("li",{draggable:t.drag?!0:void 0,onDragStart:t.drag?.onStart,onDragEnd:t.drag?.onEnd,...T(Z.row,t.density==="compact"&&Z.compactRow,t.master&&Z.master,t.stacked&&Z.stacked,t.interactive&&Z.interactive,t.selected&&Z.selected),"data-tone":t.tone??"neutral","aria-current":t.selected?"true":void 0,children:[t.children,t.trailing&&Pt.jsx("div",{...{0:{className:"x78zum5 x1a02dak x6s0dn4 x13a6bvl x1aoecvx x6z9i88 xmn758v x167g77z xeuugli x8jryan x1uikkot xdq2x6k xjjsibu x2lah0s x1n2onr6 x1vjfegm"},1:{className:"x78zum5 x1a02dak x6s0dn4 x167g77z xeuugli x2lah0s x1n2onr6 x1vjfegm x193iq5w x1nhvcw1"}}[!!t.stacked<<0],"data-record-trailing":"true",children:t.trailing})]})}function In(t){let e=t.tone??"neutral",n=t.density==="compact";return Pt.jsx("span",{...T(Z.badge,n&&Z.compactBadge,e==="good"&&Z.good,e==="warn"&&Z.warn,e==="error"&&Z.error,n&&e==="good"&&Z.compactGood,n&&e==="warn"&&Z.compactWarn,n&&e==="error"&&Z.compactError),"data-tone":e,"data-record-badge":"true",children:t.children})}function dn(t){let{components:e}=yt.useContext(Y),n=t.drag,{Disclosure:o}=e,x=yt.useContext(an)!==null;return v.jsx(fi,{density:e.density,presentation:t.presentation,children:t.items.map((a,r)=>{let c=[...a.meta?[a.meta]:[],...a.metadata??[]];return v.jsx(gi,{density:e.density,tone:a.tone,selected:t.openId===a.id,master:x&&t.openId!==void 0,stacked:t.presentation==="activity"||t.presentation==="attention",interactive:Boolean(a.link??a.links?.length),drag:n&&ix(a).length>0?{onStart:(u)=>{u.dataTransfer.setData("text/plain",a.id),n.start(a)},onEnd:n.end}:void 0,trailing:a.count!==void 0||Boolean(a.badges?.length)||Boolean(a.actions?.length)||Boolean(a.links?.length)||t.presentation==="attention"&&c.length>0?v.jsxs(v.Fragment,{children:[t.presentation==="attention"&&c.length>0&&v.jsx("small",{...{className:"x1ar3pfp xa9opjo x1j6dyjg x1dbl2gt xeuugli xj0a0fe"},children:v.jsx(me,{values:c})}),a.links&&a.links.length>0&&v.jsx("nav",{...{className:"x78zum5 x1a02dak x3phc52 xfifm61 x1n2onr6 x1vjfegm"},"aria-label":`${a.title} links`,children:a.links.map((u,l)=>v.jsx(ae,{target:u.target,emphasis:"normal",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:u.label},`${u.label}:${l}`))}),a.count!==void 0&&v.jsx("span",{...{className:"xeuugli xgi1xjn xa9opjo x1j6dyjg xj0a0fe"},children:a.count}),a.badges?.map((u,l)=>v.jsx(In,{density:e.density,tone:u.tone,children:u.label},`${u.label}:${l}`)),v.jsx(cn,{actions:a.actions??[],onAction:t.onAction,subordinate:!0,label:a.title,triggerLabel:a.actionsLabel})]}):void 0,children:v.jsx(Wr,{density:e.density,metadata:t.presentation==="attention"?[]:c,presentation:t.presentation,primary:r===0,clamp:x,title:a.link?v.jsx(ae,{target:a.link,emphasis:"title",onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:a.title}):a.title,description:a.description&&(a.tone==="warn"||a.tone==="error")&&a.description.length>160?v.jsxs("div",{...{className:"x1n2onr6 x1vjfegm xeuugli"},children:[v.jsx(Ko,{text:a.description,density:e.density,clamp:!0}),v.jsx(o,{title:a.title,triggerLabel:"Details",className:"operator-issue-details",children:v.jsx(ln,{text:a.description,density:e.density,framed:!1})})]}):a.description,children:a.tags&&a.tags.length>0&&v.jsx("span",{...{className:"x78zum5 x1a02dak x1nejdyq x1rhet7l"},children:a.tags.map((u)=>v.jsx(In,{density:e.density,children:u},u))})})},a.id)})})}function ax(t){let[e,n]=yt.useState(t.block.filter?.defaultValue??"all"),o=t.block.filter?.allValue??"all",x=t.block.items.filter((a)=>!t.block.filter||e===o||a.filterValues?.includes(e));if(t.block.items.length===0)return v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty});return v.jsxs("div",{children:[t.block.filter&&v.jsx(mo,{className:"declarative-filter",role:"group","aria-label":t.block.filter.label,children:t.block.filter.options.map((a)=>v.jsxs(po,{type:"button",emphasis:a.emphasis==="gap"?"attention":void 0,"aria-pressed":e===a.value,"data-emphasis":a.emphasis,onClick:()=>n(a.value),children:[a.label,a.count!==void 0?` (${a.count})`:""]},a.value))}),x.length===0?v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty}):v.jsx(dn,{items:x,presentation:t.block.presentation,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId})]})}function rx(t){let e=t.block.rows.some((r)=>(r.actions?.length??0)>0),n=t.openId!==void 0,o=t.block.rows.flatMap((r)=>{if(!r.compact)return[];return[{id:r.id,title:r.compact.title,...r.compact.description?{description:r.compact.description}:{},...r.compact.metadata?{metadata:r.compact.metadata}:{},...r.compact.badges?{badges:r.compact.badges}:{},...r.compact.count!==void 0?{count:r.compact.count}:{},...r.compact.tone?{tone:r.compact.tone}:{},...r.link?{link:r.link}:{},...r.actions?{actions:r.actions}:{}}]}),x=t.block.rows.some((r)=>!r.compact),a=t.block.rows.length===0?v.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},children:t.block.empty}):v.jsxs(v.Fragment,{children:[o.length>0&&v.jsx("div",{...{className:"x1s85apg xplwmzv xfsj286"},className:"declarative-compact-rows x1s85apg xplwmzv xfsj286",children:v.jsx(dn,{items:o,presentation:"activity",onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId})}),v.jsx("div",{...{className:"x193iq5w xeuugli xw2csxc x1lliihq xplwmzv x22zvs4 xfsj286 x1a92eo6 x18d9i69 x1aciil0 xs4y3db x1yy75ev x1yieemc xsjhqdm x5zp4vj x1douzxv x3y8eqj xqwvrdo xosa0jh xvwifah x1rfhg52 x1668a04 x1defwea"},className:"declarative-table-scroll operator-table-scroll x193iq5w xeuugli xw2csxc x1lliihq xplwmzv x22zvs4 xfsj286 x1a92eo6 x18d9i69 x1aciil0 xs4y3db x1yy75ev x1yieemc xsjhqdm x5zp4vj x1douzxv x3y8eqj xqwvrdo xosa0jh xvwifah x1rfhg52 x1668a04 x1defwea",...o.length>0?{"data-has-unannotated":x?"true":"false"}:{},children:v.jsxs("table",{...{className:"xh8yej3 x193iq5w x1mwwwfo xgi1xjn xfifm61"},className:"declarative-table operator-table xh8yej3 x193iq5w x1mwwwfo xgi1xjn xfifm61",children:[v.jsx("thead",{children:v.jsxs("tr",{children:[t.block.columns.map((r,c)=>Lt.createElement("th",{...{0:{className:"xexx8yu xdvlbce x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 x1594w68 x1ar3pfp xa9opjo x1vz2964 x1bgvhw5 x1r16saa xtvhhri xuxw1ft x16dsc37 xdpxx8g x1ffr0y8 xpebyx1"},1:{className:"xexx8yu xdvlbce x1xpa7k x1s4zo15 xso031l x1q0q8m5 x1594w68 x1ar3pfp xa9opjo x1vz2964 x1bgvhw5 x1r16saa xtvhhri xuxw1ft x16dsc37 xdpxx8g x1ffr0y8 xpebyx1 xzjhap9"}}[!!(n&&c===0)<<0],key:r.key,"data-align":r.align??"start"},r.label)),e&&v.jsx("th",{...{className:"xexx8yu xdvlbce x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 x1594w68 x1ar3pfp xa9opjo x1vz2964 x1bgvhw5 x1r16saa xtvhhri xuxw1ft x16dsc37 xdpxx8g x1ffr0y8 xpebyx1"},"data-align":"end",children:"Actions"})]})}),v.jsx("tbody",{children:t.block.rows.map((r)=>Lt.createElement("tr",{...{className:"xf5m44m x1lu4wmf x15zwrp0 x1fdxwjo x1kvcy9f xjbqb8w xd8d5gp x1b32d6n x1gnnqk1 x1v17x4h"},key:r.id,...r.compact?{"data-compact-row":"true"}:{},...t.openId===r.id?{"aria-current":"true"}:{}},t.block.columns.map((c,u)=>{let l=oi(r.cells[c.key]);return Lt.createElement("td",{...{0:{className:"xz9dl7a xsag5q8 x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 xpqg30t xgi1xjn xbd3v37 x4z9k3i xq648tx xo1l8bm xsnqk1y xxymvpz xdpxx8g x1ffr0y8 xpebyx1"},1:{className:"xz9dl7a xsag5q8 x1xpa7k x1s4zo15 xso031l x1q0q8m5 xpqg30t xgi1xjn xbd3v37 x4z9k3i xq648tx xo1l8bm xsnqk1y xxymvpz xdpxx8g x1ffr0y8 xpebyx1 xzjhap9"}}[!!(n&&u===0)<<0],key:c.key,"data-align":c.align??"start"},u===0&&r.link?v.jsx(ae,{target:r.link,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,children:l}):l)}),e&&v.jsx("td",{...{className:"xz9dl7a xsag5q8 x1xpa7k x1s4zo15 x1uhho1l xxakyfl xso031l x1q0q8m5 xpqg30t xgi1xjn xbd3v37 x4z9k3i xq648tx xo1l8bm xsnqk1y xxymvpz xdpxx8g x1ffr0y8 xpebyx1"},"data-align":"end",children:v.jsx(cn,{align:"end",actions:r.actions??[],onAction:t.onAction,subordinate:!0})})))})]})})]});if(!t.block.query)return a;return v.jsxs("div",{className:"declarative-table-collection",children:[v.jsx(xx,{block:t.block.query,query:t.query,onQueryChange:t.onQueryChange}),a]})}function ix(t){return(t.actions??[]).filter((e)=>e.dropTarget!==void 0&&e.disabled!==!0)}function sx(t){let e=yt.useContext(Y),[n,o]=yt.useState(null),[x,a]=yt.useState(""),r=t.openId!==void 0?1:t.block.columns??2,c=async(u)=>{a("");try{let l=nx(u,await t.onAction(u));if(l)e.onDetachedActionResult?.(l)}catch(l){a(Re(l))}};return v.jsx("div",{...{className:"xzxxqnc x12h1iku xeuugli"},children:v.jsxs("div",{...{className:"xrvj5dj xaobbuh xeuugli x1mkdm3x x1q3wkif x1gbo546 xkyyx2n xchmvhn x1mqdp8p x16lgxdz x1gjrsil"},"data-columns":r,children:[x&&v.jsx("p",{...{className:"x1mel2pz"},role:"alert",children:x}),t.block.cells.map((u)=>{let l=n?ix(n).find((d)=>d.dropTarget===u.id):void 0;return Lt.createElement("section",{...{0:{className:"x17il9kl x12h1iku xeuugli xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xamhcws x172wxxo xvw7cn x1qaj2f5 xoy5xpq xur7f20 x18s3upu"},1:{className:"x17il9kl x12h1iku xeuugli xbxpdvy xmkeg23 xamhcws x172wxxo xvw7cn x1qaj2f5 xoy5xpq xur7f20 xbsl7fq xawfzfr x9kxhyz"}}[!!l<<0],key:u.id,"data-tone":u.tone??"neutral","data-matrix-cell":"","data-drop":l?"allowed":void 0,onDragOver:l?(d)=>d.preventDefault():void 0,onDrop:l?(d)=>{d.preventDefault(),o(null),c(l)}:void 0},v.jsx("h3",{...{className:"x8o5f6s x1ar3pfp xv6m45y x4nd1th xjgl48g x19vr2a4 xel79qc xj0a0fe"},children:u.label}),u.items.length===0?v.jsx("p",{...{className:"x1ghz6dp x1ar3pfp x1ct8sxb xj0a0fe x1toko95"},children:u.empty}):v.jsx(dn,{items:u.items,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:t.openId,drag:{start:o,end:()=>o(null)}}))})]})})}function hi(t,e){let n=(e-90)*Math.PI/180,o=t*45;return{x:50+Math.cos(n)*o,y:50+Math.sin(n)*o}}function vi(t){let e=new Map;if(t.layout==="cartesian"){for(let n of t.points)e.set(n.id,{x:n.x*100,y:n.y*100});for(let n of t.zones)e.set(n.id,{x:n.x*100,y:n.y*100})}else for(let n of t.points)e.set(n.id,hi(n.distance,n.bearing));return e}function bi({block:t}){let e=vi(t);return P.jsxs("figure",{...{className:"xrvj5dj x1v2ro7d xeuugli x1ghz6dp xbxpdvy xmkeg23 x1y0btm7 x8tuc8h xur7f20 x18s3upu"},"data-ui-spatial":!0,"aria-label":t.label,children:[P.jsxs("div",{...{className:"x1n2onr6 xeuugli x1mrxzx8 xb3r6kr xmkeg23 x1y0btm7 xy1lt07 xur7f20 xnhfnza x18s3upu"},children:[P.jsxs("svg",{...{className:"x10l6tqk x10a8y8t xh8yej3 x5yr21d"},viewBox:"0 0 1000 600",preserveAspectRatio:"none","aria-hidden":"true",children:[t.layout==="radial"&&t.strata.map((o)=>P.jsx("ellipse",{...{className:"xbh8q5q x4vhfi8 xhr4kjn x13efnbd"},cx:"500",cy:"300",rx:o.maxDistance*450,ry:o.maxDistance*270},o.id)),t.layout==="cartesian"&&t.zones.map((o)=>P.jsx("circle",{...{className:"x4vhfi8 xhr4kjn x13efnbd x63ly0w xl9zam1"},cx:o.x*1000,cy:o.y*600,r:"72"},o.id)),(t.relationships??[]).map((o,x)=>{let a=e.get(o.sourceId),r=e.get(o.targetId);if(!a||!r)return null;return P.jsx("line",{"data-tone":o.tone??"neutral",...{className:"x4vhfi8 xgw5xlg xgcfudb xnpr05h x13efnbd"},x1:a.x*10,y1:a.y*6,x2:r.x*10,y2:r.y*6},`${o.sourceId}:${o.targetId}:${x}`)})]}),t.layout==="radial"&&P.jsx("span",{...{className:"x10l6tqk xwa60dl x1nrll8i xhtitgo x2aouup x1jmcyos xmkeg23 x1y0btm7 xmt0h0j x1e6avla x18s3upu xqvuw85 xa9opjo x1k6wstc x2b8uid x11lhmoz xj0a0fe"},"data-kind":t.centerKind,children:t.centerLabel}),P.jsx("div",{...{className:"x10l6tqk x10a8y8t xh8yej3 x5yr21d"},role:"list",children:t.points.map((o)=>{let x=e.get(o.id);if(!x)return null;let a="category"in o?[o.category,...o.details??[]]:[o.kind,o.status,...o.tags??[],...o.details??[]];return P.jsxs("button",{...{className:"x10l6tqk xzkaem6 x1scvahe x1qm06za x110e2yq xrvj5dj x175yr4d x1nejdyq x6s0dn4 x16q51m2 x18juh3m xc342km xiy2bcw xgi1xjn x1711cle x1r2bfix x1s1kr4f xa9opjo xvwhms9 x1u7k74 xdpxx8g x11lhmoz x1ypdohk x1mz1wvm x4wkmsb xgdialr xwji4o3 x1k57tk5 xcdb3qq x4xl6zf xiaifju xaatb59 x100b2on x1hl8ikr x1hc1fzr x64nxkd"},type:"button",role:"listitem",style:{left:`${x.x}%`,top:`${x.y}%`},"data-ui-spatial-point":o.id,"data-ui-spatial-related":JSON.stringify("relatedIds"in o?o.relatedIds??[]:[]),"data-tone":o.tone??"neutral","aria-pressed":"false","aria-controls":`${t.id}-detail-${o.id}`,title:`${o.label}: ${a.join(", ")}`,children:[P.jsx("span",{...{className:"x1wc42o8 xegnrdp xdh2fpr x1y0btm7 x1vw2y1n xjgjgpo xt7649k xu3iebo x16rqkct x18s3upu"},"aria-hidden":"true"}),P.jsx("span",{...{className:"xeuugli xj0a0fe"},children:o.label})]},o.id)})})]}),P.jsxs("figcaption",{children:[P.jsx("p",{...{className:"xjgi5au xgi1xjn x1ct8sxb x1evy7pa xj0a0fe"},children:t.description}),P.jsx("ul",{...{className:"x78zum5 x1a02dak x1u7gxyo xe6w4ck x1717udv x1ar3pfp xa9opjo xvwhms9 x3ct3a4"},"aria-label":"Legend",children:t.legend.map((o,x)=>P.jsx("li",{...{className:"xeuugli xj0a0fe x1y1aw1k x178xt8z x13fuv20 xvg7k2t x1cpjm7i xtcx8v3 x1fhgk32 x1x7x01p xf3jtlm xmz0esg xz8fyzm x1fo1fc9 x1x6ksa7 x9msap3"},"data-tone":o.tone??"neutral",children:o.label},`${o.label}:${x}`))}),P.jsx("div",{"aria-live":"polite",children:t.points.map((o)=>P.jsxs("article",{id:`${t.id}-detail-${o.id}`,"data-ui-spatial-detail":o.id,...{className:"x78zum5 xvgho8r x1a02dak x167g77z x1xmf6yo x1ar3pfp x1j6dyjg xeuugli"},hidden:!0,children:[P.jsx("strong",{...{className:"x8o5f6s xqvuw85 x4nd1th xjgl48g x19vr2a4 xel79qc xv6m45y xj0a0fe"},children:o.label}),P.jsx("span",{...{className:"xeuugli xj0a0fe"},children:"category"in o?o.category:`${o.kind} · ${o.status}`})]},o.id))})]})]})}function ve(t){switch(t.block.type){case"stats":return h.jsx(ox,{block:t.block});case"key-values":return h.jsx(xi,{block:t.block});case"notice":return h.jsx(ai,{block:t.block});case"text":return h.jsx(ri,{block:t.block});case"group":return h.jsx(si,{block:t.block});case"flow":return h.jsx(ci,{block:t.block});case"meters":return h.jsx(li,{block:t.block});case"series":return h.jsx(pi,{block:t.block});case"progress":return h.jsx(ui,{block:t.block});case"query":return h.jsx(xx,{block:t.block,query:t.query,onQueryChange:t.onQueryChange});case"links":return h.jsx(ii,{block:t.block,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"list":return h.jsx(ax,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"table":return h.jsx(rx,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});case"matrix":return h.jsx(sx,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch});case"spatial":return h.jsx(bi,{block:t.block});case"action":return h.jsx(sn,{action:t.block,onAction:t.onAction});case"actions":return h.jsx(cn,{actions:t.block.items,onAction:t.onAction})}}function yi(t){let{block:e,query:n,onQueryChange:o}=t,x=rt.useRef(null),a=n[e.queryKey],r=typeof a==="string"&&a!==""?a:void 0,c=e.open?.forId===r?e.open:void 0,u=r!==void 0&&c===void 0;rt.useEffect(()=>{if(c)x.current?.focus()},[c]);let l=(i)=>{o({...n,[e.queryKey]:i})},d=()=>{let i={...n};delete i[e.queryKey],o(i)},s=e.master.type==="list"?h.jsx(ax,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:r}):e.master.type==="matrix"?h.jsx(sx,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,openId:r}):h.jsx(rx,{block:e.master,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o,openId:r});return h.jsxs("div",{className:`declarative-detail ${{0:{className:"xrvj5dj x1mkdm3x x7a106z x33pbmt xeuugli"},1:{className:"xrvj5dj x7a106z x33pbmt xeuugli x1bu5on4 x1ids1fr xf4kbi9"}}[(r!==void 0)<<0].className??""}`,"data-open":r===void 0?"false":"true",children:[h.jsx("section",{className:`declarative-detail-master ${{0:{className:"xeuugli"},1:{className:"xeuugli xubcuz8 x1lvm2b2"}}[(r!==void 0)<<0].className??""}`,"aria-label":"Items",children:h.jsx(an.Provider,{value:l,children:s})}),r!==void 0&&h.jsx("section",{"data-operator-detail-pane":"",className:"declarative-detail-pane xeuugli xggk2y7 xwn745a xmkeg23 x1y0btm7 xy1lt07 x1sxf85j x18s3upu","aria-label":c?c.title:"Detail",children:c?h.jsxs(h.Fragment,{children:[h.jsx("button",{type:"button",className:"declarative-detail-back x1s85apg xsyu1bm x19y3i14 x6s0dn4 x1eguyfn xod5an3 x1717udv xc342km xjbqb8w x5ddh9m xfifm61 x1myn341 x1ypdohk x16dl9wz xj3ae5l",onClick:d,children:"← Back"}),h.jsx("h2",{...{className:"x1qe5pcq xssy22x x1pvqxga xo1l8bm xkhxzli xwn7fz2 xqvuw85 xj0a0fe x1a2a7pz x1uqgcet"},ref:x,tabIndex:-1,children:c.title}),h.jsx("div",{...{className:"xrvj5dj x1c1vhfx xeuugli"},children:c.blocks.map((i,k)=>h.jsx("section",{"data-block":i.type,children:i.type==="card"?h.jsx(kn,{framed:!1,block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o}):h.jsx(ve,{block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:n,onQueryChange:o})},i.id??`${i.type}:${k}`))})]}):h.jsxs(h.Fragment,{children:[h.jsx("button",{type:"button",className:"declarative-detail-back x1s85apg xsyu1bm x19y3i14 x6s0dn4 x1eguyfn xod5an3 x1717udv xc342km xjbqb8w x5ddh9m xfifm61 x1myn341 x1ypdohk x16dl9wz xj3ae5l",onClick:d,children:"← Back"}),h.jsx("p",{...{className:"x1ghz6dp x3sov96 x1ar3pfp x1ct8sxb xj0a0fe"},"aria-live":"polite",children:u?"Loading…":e.empty})]})})]})}function kn(t){let{components:e}=rt.useContext(Y),n=t.block.blocks,o=n.reduce((r,c,u)=>c.type==="links"||c.type==="actions"?r:u,-1)+1,x=n.length-o>1,a=(r,c)=>h.jsx("div",{"data-block":r.type,children:h.jsx(ve,{block:r,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},r.id??`${r.type}:${c}`);return h.jsx(tx,{label:t.block.label,metadata:t.block.metadata,framed:t.framed,tone:t.block.tone,presentation:t.block.presentation,density:e.density,renderDisclosure:t.block.presentation==="disclosure"&&t.block.disclosureLabel!==void 0?(r)=>h.jsx(e.Disclosure,{title:t.block.label,triggerLabel:t.block.disclosureLabel,triggerVariant:"outline",children:r}):void 0,footer:x?n.slice(o).map((r,c)=>a(r,o+c)):void 0,children:n.slice(0,x?o:n.length).map(a)})}function ji(t){let{components:e}=rt.useContext(Y),n=(o)=>h.jsx(h.Fragment,{children:o.map((x,a)=>h.jsx("section",{...{0:{},1:{className:"xaqh0s9"}}[(e.density==="comfortable"&&a>0&&!(x.type==="card"&&x.presentation==="disclosure"))<<0],"data-block":x.type,children:x.type==="card"?h.jsx(kn,{block:x,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange}):h.jsx(ve,{block:x,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},x.id??`${x.type}:${a}`))});return h.jsx(Ex,{density:e.density,joined:e.density==="comfortable",primary:n(t.block.primary),aside:n(t.block.aside)})}function cx(t){let e=t.block.type==="tabs"?t.block.defaultTab:"",n=t.block.type==="tabs"?t.block.queryKey:void 0,[o,x]=rt.useState(e);rt.useEffect(()=>{if(!n)x(e)},[e,n]);let a=rt.useContext(Y);if(t.block.type==="columns")return h.jsx(ji,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type==="card")return h.jsx(kn,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type==="detail")return h.jsx(yi,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});if(t.block.type!=="tabs")return h.jsx(ve,{block:t.block,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange});let r=t.block.tabs.map((s)=>({value:s.id,label:s.label,...s.count!==void 0?{count:s.count}:{},content:s.blocks.map((i,k)=>h.jsx("section",{className:`operator-block operator-block--${i.type} ${{0:{className:"xeuugli"},1:{className:"xeuugli xaqh0s9"}}[(k>0)<<0].className??""}`,children:h.jsx(cx,{block:i,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch,query:t.query,onQueryChange:t.onQueryChange})},i.id??`${i.type}:${k}`))}));if(a.renderAllTabs)return h.jsx(Zr,{id:`operator-${t.block.id}`,label:t.block.label,defaultValue:t.block.defaultTab,tabs:r});let c=n?t.query[n]:void 0,u=typeof c==="string"?c:o,l=r.some((s)=>s.value===u)?u:r[0]?.value??"",{Tabs:d}=a.components;return h.jsx(d,{label:t.block.label,value:l,tabs:r,onValueChange:(s)=>{if(n)t.onQueryChange({[n]:s});else x(s)}})}var wi=new Set(["key-values","group","meters","progress"]);function Cn(t){return wi.has(t)?"compact":"wide"}function Ti(t){let[e,n]=co.useState(null),{title:o,blocks:x}=t.data.view,[a]=x,r=t.renderHead!==!1&&t.renderAllTabs!==!0&&a?.type==="stats"?a:null,c=r?x.slice(1):x,u=t.components??ex,l={0:{className:"x2lwn1j x186ixgm xdbnglg x1odjw0f x1cb063g"},1:{className:"x186ixgm x1foj65r x12h1iku x65nank x1717udv x1plvlek xryxfnj xb1114b"}}[(t.renderHead===!1)<<0],d={0:{className:"xrvj5dj x1jsv65m x7a106z x14i4cvt x1p5oq8j x4jmfmw x62c7l xugsc6q x1c2rghm xyedrc3 x1tkkb8"},1:{className:"xrvj5dj x1jsv65m x7a106z x4jmfmw x1c2rghm x1jaupxr x7sb2j6 xqca30q xugsc6q x1wlbpn8 x1tkkb8"}}[(u.density==="comfortable")<<0],{kicker:s,description:i,status:k,primaryAction:g}=t.data.view,p=Boolean(o)||Boolean(s)||Boolean(i)||r!==null||k!==void 0||g!==void 0;return W.jsx(Y.Provider,{value:{resolveLink:t.resolveLink,onDetachedActionResult:n,renderAllTabs:t.renderAllTabs===!0,components:u},children:W.jsxs("main",{...l,className:`declarative-workspace operator-view ${l.className??""}`,"data-control-engine":u.engine,children:[t.renderHead!==!1&&p&&W.jsxs("header",{...{className:"x78zum5 x1a02dak x1cy8zhl x1qughib x1lblyuz x1l90r2v xlxy82 x1q0q8m5 x1594w68 xeuugli"},children:[W.jsxs("div",{...{className:"x148vls7 xeuugli"},children:[s&&W.jsx("span",{...{className:"x1lliihq xzueoph x1myn341 xa9opjo xvwhms9 x11fj6oh xtvhhri xj0a0fe"},children:s}),W.jsx("h2",{...{className:"x1ghz6dp xqvuw85 xssy22x x1m6oxru x1mg0i68 x17owtcr xseu7c4 x5sy3j4 x1f41ap9 xj0a0fe"},children:o}),i&&W.jsx("p",{...{className:"x1rhet7l xgi1xjn x4z9k3i x1evy7pa xj0a0fe"},children:i})]}),W.jsxs("div",{...{className:"xrvj5dj x4xo5sw x1v2ro7d xeuugli x193iq5w"},children:[k&&W.jsxs("strong",{...{className:"xrvj5dj x4xo5sw x1ed6fcf xqvuw85 xh9rmbx x16a6thm x1mvgbya x1ct8sxb xh88oxj xj0a0fe"},"data-tone":k.tone??"neutral",children:[k.label,k.detail&&W.jsx("small",{...{className:"x1ar3pfp xa9opjo xfmn3hh xo1l8bm xj0a0fe"},children:k.detail})]}),r&&W.jsx(ox,{block:r,placement:"head"}),g&&W.jsx(sn,{action:g,primary:!0,onAction:t.onAction})]})]}),W.jsxs("div",{...d,"data-operator-blocks":"",className:`declarative-blocks ${d.className??""}`,children:[e&&W.jsx("section",{className:"operator-block operator-block--action declarative-action-receipt xeuugli x1osaytk","data-block":"action","data-span":"wide",children:W.jsx(Ie,{result:e,onDismiss:()=>n(null)})}),c.map((f,w)=>W.jsx("section",{className:`operator-block operator-block--${f.type} ${{0:{className:"xeuugli"},2:{className:"xeuugli x1osaytk"},1:{className:"xeuugli xifccgj"},3:{className:"xeuugli x1osaytk xifccgj"}}[(Cn(f.type)==="wide")<<1|(f.type==="query")<<0].className??""}`,"data-block":f.type,"data-span":Cn(f.type),children:W.jsx(cx,{block:f,onAction:t.onAction,onOpenEntity:t.onOpenEntity,onLaunch:t.onLaunch??(()=>{}),query:t.query??{},onQueryChange:t.onQueryChange??(()=>{})})},f.id??`${f.type}:${w}`))]})]})})}
48
48
  export{qi as a,zi as b,Wr as c,tx as d,sn as e,Ti as f};
49
49
 
50
- //# debugId=ECF4F5A62823521064756E2164756E21
50
+ //# debugId=B0235E417779344064756E2164756E21