@xapps-platform/marketplace-ui 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/i18n.d.ts.map +1 -1
- package/dist/index.js +317 -19
- package/dist/index.js.map +4 -4
- package/dist/pages/RequestDetailPage.d.ts.map +1 -1
- package/dist/pages/RequestsPage.d.ts.map +1 -1
- package/dist/pages/WidgetView.d.ts.map +1 -1
- package/dist/pages/XappDetailPage.d.ts.map +1 -1
- package/dist/pages/XappDetailPage.monetization.test.d.ts +2 -0
- package/dist/pages/XappDetailPage.monetization.test.d.ts.map +1 -0
- package/dist/types.d.ts +50 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/guardMonetization.d.ts +7 -0
- package/dist/utils/guardMonetization.d.ts.map +1 -0
- package/dist/utils/guardMonetization.test.d.ts +2 -0
- package/dist/utils/guardMonetization.test.d.ts.map +1 -0
- package/dist/utils/monetizationAccess.d.ts +14 -0
- package/dist/utils/monetizationAccess.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/MarketplaceContext.tsx", "../../platform-i18n/src/index.tsx", "../src/i18n.tsx", "../src/MarketplaceApp.tsx", "../src/pages/CatalogPage.tsx", "../src/components/ConfirmActionModal.tsx", "../src/components/MarketplacePrimaryNav.tsx", "../src/utils/embedSearch.ts", "../src/utils/readers.ts", "../src/pages/InvoicesPage.tsx", "../src/components/MarketplaceActivityTabs.tsx", "../src/pages/NotificationsPage.tsx", "../src/pages/PaymentsPage.tsx", "../src/pages/RequestDetailPage.tsx", "../src/components/SchemaOutputView.tsx", "../src/utils/paymentLock.ts", "../src/utils/operationalSurfaces.ts", "../src/pages/RequestsPage.tsx", "../src/pages/XappDetailPage.tsx", "../src/pages/WidgetView.tsx", "../src/pages/PublishersPage.tsx", "../src/pages/PublisherDetailPage.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { createContext, useContext, useEffect } from \"react\";\nimport { MarketplaceI18nProvider } from \"./i18n\";\nimport type { MarketplaceClient, MarketplaceEnv, MarketplaceHostAdapter } from \"./types\";\n\nexport type MarketplaceContextValue = {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n};\n\nconst Ctx = createContext<MarketplaceContextValue | null>(null);\n\nfunction applyMarketplaceThemeToDocument(theme: Record<string, unknown> | null | undefined): void {\n if (!theme || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const map: Array<[string, string[]]> = [\n [\"primary\", [\"--cx-primary\", \"--mx-primary\"]],\n [\"primaryDark\", [\"--cx-primary-dark\", \"--mx-primary-hover\"]],\n [\"bg\", [\"--cx-bg\", \"--mx-bg\"]],\n [\"bgSubtle\", [\"--cx-bg-subtle\", \"--mx-bg-subtle\"]],\n [\"card\", [\"--cx-card\", \"--mx-card-bg\"]],\n [\"border\", [\"--cx-border\", \"--mx-border\"]],\n [\"text\", [\"--cx-text\", \"--mx-text-main\"]],\n [\"muted\", [\"--cx-muted\", \"--mx-text-muted\"]],\n [\"shadowSm\", [\"--cx-shadow-sm\", \"--mx-shadow-sm\"]],\n [\"shadow\", [\"--cx-shadow\", \"--mx-shadow\"]],\n [\"shadowLg\", [\"--cx-shadow-lg\", \"--mx-shadow-lg\"]],\n [\"radiusSm\", [\"--cx-radius-sm\", \"--mx-radius-sm\"]],\n [\"radiusMd\", [\"--cx-radius-md\", \"--mx-radius-md\"]],\n [\"radius\", [\"--cx-radius\", \"--cx-radius-lg\", \"--mx-radius-md\", \"--mx-radius-lg\"]],\n [\"radiusLg\", [\"--cx-radius-lg\", \"--mx-radius-lg\"]],\n [\"fontFamily\", [\"--mx-font-family\"]],\n ];\n\n for (const [key, cssVars] of map) {\n const rawValue = theme[key];\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n for (const cssVar of cssVars) root.style.setProperty(cssVar, value);\n }\n\n if (\n typeof theme.radius === \"string\" &&\n theme.radius.trim() &&\n !(typeof theme.radiusSm === \"string\" && theme.radiusSm.trim())\n ) {\n root.style.setProperty(\"--cx-radius-sm\", theme.radius.trim());\n root.style.setProperty(\"--mx-radius-sm\", theme.radius.trim());\n }\n if (typeof theme.bg === \"string\" && theme.bg.trim() && !theme.bgSubtle) {\n root.style.setProperty(\"--cx-bg-subtle\", theme.bg.trim());\n root.style.setProperty(\"--mx-bg-subtle\", theme.bg.trim());\n }\n\n const directTokens =\n theme.tokens && typeof theme.tokens === \"object\" && !Array.isArray(theme.tokens)\n ? (theme.tokens as Record<string, unknown>)\n : null;\n if (directTokens) {\n for (const [cssVar, rawValue] of Object.entries(directTokens)) {\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n if (\n !cssVar.startsWith(\"--mx-\") &&\n !cssVar.startsWith(\"--cx-\") &&\n !cssVar.startsWith(\"--xapps-\")\n ) {\n continue;\n }\n root.style.setProperty(cssVar, value);\n }\n }\n\n const themeMode =\n typeof theme.mode === \"string\"\n ? theme.mode.trim().toLowerCase()\n : typeof theme.themeMode === \"string\"\n ? theme.themeMode.trim().toLowerCase()\n : \"\";\n if (themeMode === \"dark\" || themeMode === \"light\") {\n root.dataset.xappsThemeMode = themeMode;\n }\n}\n\nfunction MarketplaceRuntimeBridge(props: {\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n useEffect(() => {\n const locale = String(props.env?.locale || props.host.locale || \"\").trim();\n if (locale && typeof document !== \"undefined\") {\n document.documentElement.lang = locale;\n }\n }, [props.env?.locale, props.host.locale]);\n\n useEffect(() => {\n applyMarketplaceThemeToDocument(props.host.theme || null);\n }, [props.host.theme]);\n\n return <>{props.children}</>;\n}\n\nexport function MarketplaceProvider(props: {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n return (\n <MarketplaceI18nProvider locale={props.env?.locale}>\n <MarketplaceRuntimeBridge host={props.host} env={props.env}>\n <Ctx.Provider value={{ client: props.client, host: props.host, env: props.env }}>\n {props.children}\n </Ctx.Provider>\n </MarketplaceRuntimeBridge>\n </MarketplaceI18nProvider>\n );\n}\n\nexport function useMarketplace(): MarketplaceContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"MarketplaceProvider is missing\");\n return v;\n}\n", "import React, { createContext, useContext, useMemo } from \"react\";\n\nexport type LocalizedText = string | Record<string, string | null | undefined> | null | undefined;\nexport type TranslationParams = Record<string, string | number | boolean | null | undefined>;\nexport type TranslationCatalog = Record<string, string>;\nexport type TranslationCatalogs = Record<string, TranslationCatalog>;\n\nexport type TranslateFunction = (\n key: string,\n params?: TranslationParams,\n fallback?: string,\n) => string;\n\nexport function normalizeLocale(input: unknown, fallbackLocale = \"en\"): string {\n const raw = String(input || \"\")\n .trim()\n .replace(/_/g, \"-\");\n if (!raw) return fallbackLocale;\n const parts = raw\n .split(\"-\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length === 0) return fallbackLocale;\n const [language, ...rest] = parts;\n return [language.toLowerCase(), ...rest.map((part) => part.toUpperCase())].join(\"-\");\n}\n\nexport function getLocaleCandidates(input: unknown, fallbackLocale = \"en\"): string[] {\n const normalized = normalizeLocale(input, fallbackLocale);\n const out = new Set<string>();\n if (normalized) out.add(normalized);\n const dash = normalized.indexOf(\"-\");\n if (dash > 0) out.add(normalized.slice(0, dash));\n const fallback = normalizeLocale(fallbackLocale, \"en\");\n if (fallback) out.add(fallback);\n const fallbackDash = fallback.indexOf(\"-\");\n if (fallbackDash > 0) out.add(fallback.slice(0, fallbackDash));\n out.add(\"en\");\n return Array.from(out);\n}\n\nexport function pickSupportedLocale(\n input: unknown,\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n const normalizedSupported = Array.from(\n new Set(\n supportedLocales.map((locale) => normalizeLocale(locale, fallbackLocale)).filter(Boolean),\n ),\n );\n const candidates = getLocaleCandidates(input, fallbackLocale);\n for (const candidate of candidates) {\n if (normalizedSupported.includes(candidate)) return candidate;\n }\n return normalizedSupported[0] || normalizeLocale(fallbackLocale, \"en\");\n}\n\nexport function detectBrowserLocale(\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n if (typeof navigator === \"undefined\") {\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n }\n const candidates = [\n navigator.language,\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n ];\n for (const candidate of candidates) {\n const resolved = pickSupportedLocale(candidate, supportedLocales, fallbackLocale);\n if (resolved) return resolved;\n }\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n}\n\nexport function interpolateTranslation(\n template: string,\n params: TranslationParams | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return template;\n return template.replace(/\\{([a-zA-Z0-9_]+)\\}/g, (_match, key) => {\n const value = params[key];\n return value === null || value === undefined ? \"\" : String(value);\n });\n}\n\nexport function resolveLocalizedText(\n value: LocalizedText,\n locale: string,\n fallbackLocale = \"en\",\n): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const candidates = getLocaleCandidates(locale, fallbackLocale);\n for (const candidate of candidates) {\n const localized = value[candidate];\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n for (const localized of Object.values(value)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n\nexport function translateFromCatalogs(input: {\n catalogs: TranslationCatalogs;\n locale: string;\n key: string;\n params?: TranslationParams;\n fallback?: string;\n fallbackLocale?: string;\n}): string {\n const fallbackLocale = input.fallbackLocale || \"en\";\n const candidates = getLocaleCandidates(input.locale, fallbackLocale);\n for (const candidate of candidates) {\n const catalog = input.catalogs[candidate];\n const template = catalog?.[input.key];\n if (typeof template === \"string\" && template.trim()) {\n return interpolateTranslation(template, input.params);\n }\n }\n return interpolateTranslation(input.fallback || input.key, input.params);\n}\n\ntype I18nContextValue = {\n locale: string;\n fallbackLocale: string;\n supportedLocales: readonly string[];\n setLocale: (nextLocale: string) => void;\n t: TranslateFunction;\n resolveText: (value: LocalizedText) => string;\n};\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\nexport function I18nProvider(props: {\n locale: string;\n catalogs: TranslationCatalogs;\n supportedLocales?: readonly string[];\n fallbackLocale?: string;\n setLocale?: (nextLocale: string) => void;\n children: React.ReactNode;\n}) {\n const fallbackLocale = props.fallbackLocale || \"en\";\n const supportedLocales = props.supportedLocales || Object.keys(props.catalogs);\n const locale = pickSupportedLocale(props.locale, supportedLocales, fallbackLocale);\n const setLocale = props.setLocale || (() => {});\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n fallbackLocale,\n supportedLocales,\n setLocale,\n t: (key, params, fallback) =>\n translateFromCatalogs({\n catalogs: props.catalogs,\n locale,\n key,\n params,\n fallback,\n fallbackLocale,\n }),\n resolveText: (value) => resolveLocalizedText(value, locale, fallbackLocale),\n }),\n [fallbackLocale, locale, props.catalogs, setLocale, supportedLocales],\n );\n\n return <I18nContext.Provider value={value}>{props.children}</I18nContext.Provider>;\n}\n\nexport function useI18n(): I18nContextValue {\n const value = useContext(I18nContext);\n if (!value) {\n throw new Error(\"I18nProvider is missing\");\n }\n return value;\n}\n", "import { I18nProvider, type LocalizedText, useI18n } from \"@xapps-platform/platform-i18n\";\nimport type { ReactNode } from \"react\";\n\nconst MARKETPLACE_CATALOGS = {\n en: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Error\",\n \"common.refresh\": \"Refresh\",\n \"common.previous\": \"Previous\",\n \"common.next\": \"Next\",\n \"common.search\": \"Search\",\n \"common.tag\": \"Tag\",\n \"common.all_tags\": \"All Tags\",\n \"common.clear_filter\": \"Clear Filter\",\n \"common.close_dialog\": \"Close dialog\",\n \"common.back_to_marketplace\": \"Back to Marketplace\",\n \"common.back_to_portal\": \"Back to Portal\",\n \"common.view_app_details\": \"View app details\",\n \"common.catalog_app\": \"Catalog app\",\n \"common.by\": \"by\",\n \"common.added\": \"Added\",\n \"common.added_only\": \"Added only\",\n \"common.confirm\": \"Confirm\",\n \"common.cancel\": \"Cancel\",\n \"common.details\": \"Details\",\n \"common.version\": \"Version\",\n \"common.status\": \"Status\",\n \"common.created\": \"Created\",\n \"common.completed\": \"Completed\",\n \"common.tool\": \"Tool\",\n \"common.action\": \"Action\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Session\",\n \"common.amount\": \"Amount\",\n \"common.payment\": \"Payment\",\n \"common.payment_session\": \"Payment Session\",\n \"common.invoice\": \"Invoice\",\n \"common.provider\": \"Provider\",\n \"common.channel\": \"Channel\",\n \"common.message\": \"Message\",\n \"common.trigger\": \"Trigger\",\n \"common.received\": \"Received\",\n \"common.document\": \"Document\",\n \"common.download\": \"Download\",\n \"common.open\": \"Open\",\n \"common.request\": \"Request\",\n \"common.request_id\": \"Request ID\",\n \"common.reason\": \"Reason\",\n \"common.app\": \"App\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"just now\",\n \"common.seconds_ago\": \"{value}s ago\",\n \"common.minutes_ago\": \"{value}m ago\",\n \"common.hours_ago\": \"{value}h ago\",\n \"common.days_ago\": \"{value}d ago\",\n \"nav.marketplace\": \"Marketplace navigation\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Publishers\",\n \"nav.activity\": \"Activity\",\n \"publisher.publishers_title\": \"Publishers\",\n \"publisher.search_publishers\": \"Search publishers\",\n \"publisher.search_publishers_placeholder\": \"Search by name or slug...\",\n \"publisher.publishers_count\": \"Publishers\",\n \"publisher.catalog_xapps\": \"Catalog xApps\",\n \"publisher.results_count\": \"{count} publisher{suffix}\",\n \"publisher.no_publishers_found\": \"No publishers found\",\n \"publisher.empty_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_default\": \"No publishers are available in the catalog right now.\",\n \"publisher.view_publisher\": \"View publisher\",\n \"publisher.search_xapps\": \"Search xapps\",\n \"publisher.search_xapps_placeholder\": \"Search by title, slug, description...\",\n \"publisher.search_xapps_aria\": \"Search this publisher's xapps\",\n \"publisher.no_xapps_found\": \"No xapps found\",\n \"publisher.empty_xapps_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_xapps_default\": \"{publisher} has no active xapps in the catalog right now.\",\n \"activity.navigation\": \"Activity navigation\",\n \"activity.requests\": \"Requests\",\n \"activity.payments\": \"Payments\",\n \"activity.invoices\": \"Invoices\",\n \"activity.notifications\": \"Notifications\",\n \"activity.requests_title\": \"Requests\",\n \"activity.payments_title\": \"Payments\",\n \"activity.invoices_title\": \"Invoices\",\n \"activity.notifications_title\": \"Notifications\",\n \"activity.unavailable_requests_title\": \"Requests are unavailable\",\n \"activity.unavailable_requests_desc\":\n \"This public catalog does not support viewing personal requests.\",\n \"activity.unavailable_payments_title\": \"Payments are unavailable in this host.\",\n \"activity.unavailable_invoices_title\": \"Invoices are unavailable in this host.\",\n \"activity.unavailable_notifications_title\": \"Notifications are unavailable in this host.\",\n \"activity.subject_required_title\": \"Subject required\",\n \"activity.subject_required_desc\":\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n \"activity.showing_requests_for\": \"Showing requests for {title}\",\n \"activity.showing_requests_for_prefix\": \"Showing requests for\",\n \"activity.showing_payments_for\": \"Showing payment activity for {title}\",\n \"activity.showing_payments_for_prefix\": \"Showing payment activity for\",\n \"activity.showing_invoices_for\": \"Showing invoice records for {title}\",\n \"activity.showing_invoices_for_prefix\": \"Showing invoice records for\",\n \"activity.showing_notifications_for\": \"Showing notification activity for {title}\",\n \"activity.showing_notifications_for_prefix\": \"Showing notification activity for\",\n \"activity.payment_detail\": \"Payment Detail\",\n \"activity.invoice_detail\": \"Invoice Detail\",\n \"activity.back_to_payment_list\": \"Back to payment list\",\n \"activity.back_to_invoice_list\": \"Back to invoice list\",\n \"activity.back_to_notification_list\": \"Back to notification list\",\n \"activity.mark_all_read\": \"Mark all read\",\n \"activity.mark_read\": \"Mark read\",\n \"activity.unread_count\": \"{count} unread item{suffix}\",\n \"activity.loading_requests\": \"Loading requests...\",\n \"activity.no_requests\": \"No requests yet.\",\n \"activity.loading_payments\": \"Loading payments...\",\n \"activity.no_payments\": \"No payment activity found.\",\n \"activity.loading_payment_detail\": \"Loading payment details...\",\n \"activity.resume_payment\": \"Resume\",\n \"activity.loading_invoices\": \"Loading invoices...\",\n \"activity.no_invoices\": \"No invoices found.\",\n \"activity.loading_invoice_detail\": \"Loading invoice details...\",\n \"activity.lifecycle_history\": \"Lifecycle History\",\n \"activity.open_document\": \"Open Document\",\n \"activity.open_external\": \"Open External\",\n \"activity.notification_detail\": \"Notification Detail\",\n \"activity.loading_notifications\": \"Loading notifications...\",\n \"activity.no_notifications\": \"No notification activity found.\",\n \"activity.loading_notification_detail\": \"Loading notification details...\",\n \"activity.page_of\": \"Page {page} of {totalPages}\",\n \"activity.event\": \"Event\",\n \"activity.event_fallback\": \"event\",\n \"activity.request_detail_title\": \"Request Details\",\n \"activity.show_details\": \"Show details\",\n \"activity.hide_details\": \"Hide details\",\n \"activity.response_title\": \"Response\",\n \"activity.payment_pending\": \"Payment Pending\",\n \"activity.payment_required\": \"Payment Required\",\n \"activity.complete_payment\": \"Complete Payment\",\n \"activity.confirm_payment\": \"Confirm Payment\",\n \"activity.confirming_payment\": \"Confirming...\",\n \"activity.refresh_status\": \"Refresh Status\",\n \"activity.waiting_for_payment\": \"Waiting for payment confirmation\u2026\",\n \"activity.waiting_for_response\": \"Waiting for response\u2026\",\n \"activity.execution_timeline\": \"Execution Timeline\",\n \"activity.artifacts_title\": \"Artifacts\",\n \"activity.download_artifact\": \"Download Artifact\",\n \"activity.related_widgets_title\": \"Related Widgets\",\n \"activity.help_title\": \"Help\",\n \"activity.back_to_requests\": \"Back to Requests\",\n \"activity.open_widget\": \"Open {widget}\",\n \"activity.help_request\":\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} event\",\n \"activity.timeline_count_other\": \"{count} events\",\n \"activity.timeline_error_count_one\": \"{count} error\",\n \"activity.timeline_error_count_other\": \"{count} errors\",\n \"activity.guard_badge\": \"guard: {value}\",\n \"activity.trigger_badge\": \"trigger: {value}\",\n \"activity.outcome_badge\": \"outcome: {value}\",\n \"activity.reason_detail\": \"reason={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Upgrade subscription{suffix}\",\n \"activity.guard_action_complete_payment\": \"Complete payment{suffix}\",\n \"activity.guard_action_step_up_authentication\": \"Complete step-up authentication{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm action\",\n \"activity.guard_action_confirm_action_message\": \"Confirm action ({message})\",\n \"activity.guard_action_custom\": \"Action: {kind}\",\n \"status.unread\": \"Unread\",\n \"status.read\": \"Read\",\n \"common.back\": \"Back\",\n \"catalog.search_placeholder\": \"Search by name, description...\",\n \"catalog.search_aria\": \"Search apps\",\n \"catalog.filter_by_tag\": \"Filter by tag\",\n \"catalog.results_all\": \"{count} app{suffix}\",\n \"catalog.results_filtered\": \"{count} of {total} app{suffix}\",\n \"catalog.no_apps_found\": \"No apps found\",\n \"catalog.empty_added_only\":\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n \"catalog.empty_filtered\":\n \"Try adjusting your search or filters to find what you're looking for.\",\n \"catalog.empty_default\": \"No apps are available in the catalog right now.\",\n \"catalog.view_details\": \"View details\",\n \"catalog.remove_app_title\": \"Remove app?\",\n \"catalog.remove_app_description\":\n \"Remove {title} from your current workspace? You can add it again later.\",\n \"xapp.kicker_publisher\": \"Publisher: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Add to workspace\",\n \"xapp.remove_from_workspace\": \"Remove from workspace\",\n \"xapp.update_app\": \"Update app\",\n \"xapp.open_app\": \"Open app\",\n \"xapp.terms_title\": \"Terms & Conditions\",\n \"xapp.update_available\": \"Update available\",\n \"xapp.about_title\": \"About\",\n \"xapp.available_views_title\": \"Available Views\",\n \"xapp.add_to_access_views\": \"Add this app to your workspace to access its available views.\",\n \"xapp.update_to_access_views\":\n \"An update is available. Please update the app to access its available views.\",\n \"xapp.load_as_user_to_access\": \"Load the catalog as a user to access this app.\",\n \"xapp.no_views_available\": \"No app views are currently available.\",\n \"xapp.widget_primary\": \"Primary\",\n \"xapp.widget_open\": \"Open\",\n \"xapp.how_app_runs\": \"How This App Runs\",\n \"xapp.view_details\": \"View details\",\n \"xapp.no_run_requirements\": \"This app has no extra run requirements configured.\",\n \"xapp.guard_summary\":\n \"This app includes {itemCount} run check{itemSuffix} across {stageCount} stage{stageSuffix}. Open details to review access, payment, or follow-up steps.\",\n \"xapp.trigger_before_tool_run\": \"Before running this app\",\n \"xapp.trigger_after_tool_run\": \"After this app finishes\",\n \"xapp.trigger_before_widget_open\": \"Before opening this app\",\n \"xapp.trigger_after_widget_open\": \"After opening this app\",\n \"xapp.trigger_default\": \"App stage\",\n \"xapp.policy_any\": \"Any one satisfies\",\n \"xapp.policy_all\": \"All steps apply\",\n \"xapp.auto\": \"Auto\",\n \"xapp.user_step\": \"User step\",\n \"xapp.required\": \"Required\",\n \"xapp.info\": \"Info\",\n \"xapp.screenshots_title\": \"Screenshots\",\n \"xapp.screenshot_alt\": \"Screenshot {index}\",\n \"xapp.usage_credits_title\": \"Usage Credits\",\n \"xapp.available_label\": \"Available\",\n \"xapp.ready_to_use\": \"{count} ready to use\",\n \"xapp.source_label\": \"Source\",\n \"xapp.linked_payment_sessions\": \"{count} linked to visible payment sessions\",\n \"xapp.in_flight_label\": \"In flight\",\n \"xapp.needs_review_label\": \"Needs review\",\n \"xapp.invalid_label\": \"Invalid\",\n \"xapp.invalid_credits\": \"{count} orphan ledger rows are not usable credits\",\n \"xapp.by_tool_label\": \"By tool\",\n \"xapp.for_label\": \"for\",\n \"xapp.invalid_short\": \"{count} invalid\",\n \"xapp.in_flight_short\": \"{count} in flight\",\n \"xapp.stale_short\": \"{count} stale\",\n \"xapp.activity_title\": \"Activity\",\n \"xapp.details_title\": \"Details\",\n \"xapp.app_id_label\": \"App ID\",\n \"xapp.status_added\": \"Added\",\n \"xapp.status_available\": \"Available\",\n \"xapp.publisher_label\": \"Publisher\",\n \"xapp.tags_label\": \"Tags\",\n \"xapp.view_terms\": \"View Terms & Conditions\",\n \"xapp.close_terms_dialog\": \"Close terms dialog\",\n \"xapp.view_full_document\": \"View Full Document\",\n \"xapp.accept_terms\": \"I have read and accept the terms and conditions.\",\n \"xapp.accept_add_app\": \"Accept & Add app\",\n \"xapp.accept_update\": \"Accept & Update\",\n \"widget.session_ended_title\": \"Session ended\",\n \"widget.session_ended_message\": \"Your session ended. Go back and open the widget again.\",\n \"widget.session_expired_title\": \"Widget session expired\",\n \"widget.session_expired_refresh_failed\":\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n \"widget.session_expired_default\":\n \"This widget session ended. Go back and open it again to continue.\",\n \"widget.confirm_continue_prompt\": \"This action requires confirmation. Continue?\",\n \"widget.unable_to_load\": \"Unable to load widget\",\n \"widget.preparing\": \"Preparing {title}...\",\n \"widget.secure_session_setup\": \"Setting up a secure session for this app.\",\n \"payment_lock.complete_payment\": \"Complete Payment\",\n \"payment_lock.continue\": \"Continue\",\n \"payment_lock.confirming_payment_finality\": \"Confirming payment finality with provider.\",\n \"payment_lock.pending_retry_confirm\":\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n \"payment_lock.confirmed_refresh\": \"Payment is confirmed. Refresh to continue.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Payment is not settled. Complete a new payment attempt.\",\n \"payment_lock.requires_additional_action\":\n \"Payment requires additional action. Complete payment to continue.\",\n \"payment_lock.attempt_failed\": \"Last payment attempt failed. Complete payment to continue.\",\n \"payment_lock.evidence_used\": \"Payment evidence was already used. Start a new payment attempt.\",\n \"payment_lock.evidence_consumed\":\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n \"payment_lock.required_before_request\": \"Payment is required before this request can proceed.\",\n },\n ro: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Eroare\",\n \"common.refresh\": \"Re\u00EEmprosp\u0103tare\",\n \"common.previous\": \"Anterior\",\n \"common.next\": \"Urm\u0103tor\",\n \"common.search\": \"C\u0103utare\",\n \"common.tag\": \"Etichet\u0103\",\n \"common.all_tags\": \"Toate etichetele\",\n \"common.clear_filter\": \"\u0218terge filtrul\",\n \"common.close_dialog\": \"\u00CEnchide dialogul\",\n \"common.back_to_marketplace\": \"\u00CEnapoi la Marketplace\",\n \"common.back_to_portal\": \"\u00CEnapoi la Portal\",\n \"common.view_app_details\": \"Vezi detaliile aplica\u021Biei\",\n \"common.catalog_app\": \"Aplica\u021Bie din catalog\",\n \"common.by\": \"de\",\n \"common.added\": \"Ad\u0103ugat\u0103\",\n \"common.added_only\": \"Doar ad\u0103ugate\",\n \"common.confirm\": \"Confirm\u0103\",\n \"common.cancel\": \"Anuleaz\u0103\",\n \"common.details\": \"Detalii\",\n \"common.version\": \"Versiune\",\n \"common.status\": \"Stare\",\n \"common.created\": \"Creat\",\n \"common.completed\": \"Finalizat\",\n \"common.tool\": \"Instrument\",\n \"common.action\": \"Ac\u021Biune\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Sesiune\",\n \"common.amount\": \"Sum\u0103\",\n \"common.payment\": \"Plat\u0103\",\n \"common.payment_session\": \"Sesiune de plat\u0103\",\n \"common.invoice\": \"Factur\u0103\",\n \"common.provider\": \"Furnizor\",\n \"common.channel\": \"Canal\",\n \"common.message\": \"Mesaj\",\n \"common.trigger\": \"Declan\u0219ator\",\n \"common.received\": \"Primit\",\n \"common.document\": \"Document\",\n \"common.download\": \"Descarc\u0103\",\n \"common.open\": \"Deschide\",\n \"common.request\": \"Cerere\",\n \"common.request_id\": \"ID cerere\",\n \"common.reason\": \"Motiv\",\n \"common.app\": \"Aplica\u021Bie\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"chiar acum\",\n \"common.seconds_ago\": \"acum {value}s\",\n \"common.minutes_ago\": \"acum {value}m\",\n \"common.hours_ago\": \"acum {value}h\",\n \"common.days_ago\": \"acum {value}z\",\n \"nav.marketplace\": \"Navigare marketplace\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Dezvoltatori\",\n \"nav.activity\": \"Activitate\",\n \"activity.navigation\": \"Navigare activitate\",\n \"activity.requests\": \"Cereri\",\n \"activity.payments\": \"Pl\u0103\u021Bi\",\n \"activity.invoices\": \"Facturi\",\n \"activity.notifications\": \"Notific\u0103ri\",\n \"activity.requests_title\": \"Cereri\",\n \"activity.payments_title\": \"Pl\u0103\u021Bi\",\n \"activity.invoices_title\": \"Facturi\",\n \"activity.notifications_title\": \"Notific\u0103ri\",\n \"publisher.publishers_title\": \"Dezvoltatori\",\n \"publisher.search_publishers\": \"Caut\u0103 dezvoltatori\",\n \"publisher.search_publishers_placeholder\": \"Caut\u0103 dup\u0103 nume sau slug...\",\n \"publisher.publishers_count\": \"Dezvoltatori\",\n \"publisher.catalog_xapps\": \"xApps \u00EEn catalog\",\n \"publisher.results_count\": \"{count} dezvoltator{suffix}\",\n \"publisher.no_publishers_found\": \"Nu au fost g\u0103si\u021Bi dezvoltatori\",\n \"publisher.empty_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_default\": \"Momentan nu exist\u0103 dezvoltatori disponibili \u00EEn catalog.\",\n \"publisher.view_publisher\": \"Vezi dezvoltatorul\",\n \"publisher.search_xapps\": \"Caut\u0103 xapps\",\n \"publisher.search_xapps_placeholder\": \"Caut\u0103 dup\u0103 titlu, slug, descriere...\",\n \"publisher.search_xapps_aria\": \"Caut\u0103 xapps-urile acestui dezvoltator\",\n \"publisher.no_xapps_found\": \"Nu au fost g\u0103site xapps\",\n \"publisher.empty_xapps_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_xapps_default\": \"{publisher} nu are xapps active \u00EEn catalog acum.\",\n \"activity.unavailable_requests_title\": \"Cereri indisponibile\",\n \"activity.unavailable_requests_desc\":\n \"Acest catalog public nu permite vizualizarea cererilor personale.\",\n \"activity.unavailable_payments_title\": \"Pl\u0103\u021Bile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_invoices_title\": \"Facturile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_notifications_title\": \"Notific\u0103rile nu sunt disponibile \u00EEn acest host.\",\n \"activity.subject_required_title\": \"Subiect necesar\",\n \"activity.subject_required_desc\":\n \"Aceast\u0103 sesiune de host nu este asociat\u0103 cu un utilizator. Cere hostului s\u0103 creeze o sesiune de catalog cu un subjectId.\",\n \"activity.showing_requests_for\": \"Se afi\u0219eaz\u0103 cererile pentru {title}\",\n \"activity.showing_requests_for_prefix\": \"Se afi\u0219eaz\u0103 cererile pentru\",\n \"activity.showing_payments_for\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru {title}\",\n \"activity.showing_payments_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru\",\n \"activity.showing_invoices_for\": \"Se afi\u0219eaz\u0103 facturile pentru {title}\",\n \"activity.showing_invoices_for_prefix\": \"Se afi\u0219eaz\u0103 facturile pentru\",\n \"activity.showing_notifications_for\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru {title}\",\n \"activity.showing_notifications_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru\",\n \"activity.payment_detail\": \"Detaliu plat\u0103\",\n \"activity.invoice_detail\": \"Detaliu factur\u0103\",\n \"activity.back_to_payment_list\": \"\u00CEnapoi la lista pl\u0103\u021Bilor\",\n \"activity.back_to_invoice_list\": \"\u00CEnapoi la lista facturilor\",\n \"activity.back_to_notification_list\": \"\u00CEnapoi la lista notific\u0103rilor\",\n \"activity.mark_all_read\": \"Marcheaz\u0103 tot ca citit\",\n \"activity.mark_read\": \"Marcheaz\u0103 ca citit\",\n \"activity.unread_count\": \"{count} notific{suffix} necitit{suffix2}\",\n \"activity.loading_requests\": \"Se \u00EEncarc\u0103 cererile...\",\n \"activity.no_requests\": \"Nu exist\u0103 \u00EEnc\u0103 cereri.\",\n \"activity.loading_payments\": \"Se \u00EEncarc\u0103 pl\u0103\u021Bile...\",\n \"activity.no_payments\": \"Nu a fost g\u0103sit\u0103 activitate de plat\u0103.\",\n \"activity.loading_payment_detail\": \"Se \u00EEncarc\u0103 detaliile pl\u0103\u021Bii...\",\n \"activity.resume_payment\": \"Reia\",\n \"activity.loading_invoices\": \"Se \u00EEncarc\u0103 facturile...\",\n \"activity.no_invoices\": \"Nu au fost g\u0103site facturi.\",\n \"activity.loading_invoice_detail\": \"Se \u00EEncarc\u0103 detaliile facturii...\",\n \"activity.lifecycle_history\": \"Istoric ciclu de via\u021B\u0103\",\n \"activity.open_document\": \"Deschide documentul\",\n \"activity.open_external\": \"Deschide extern\",\n \"activity.notification_detail\": \"Detaliu notificare\",\n \"activity.loading_notifications\": \"Se \u00EEncarc\u0103 notific\u0103rile...\",\n \"activity.no_notifications\": \"Nu a fost g\u0103sit\u0103 activitate de notificare.\",\n \"activity.loading_notification_detail\": \"Se \u00EEncarc\u0103 detaliile notific\u0103rii...\",\n \"activity.page_of\": \"Pagina {page} din {totalPages}\",\n \"activity.event\": \"Eveniment\",\n \"activity.event_fallback\": \"eveniment\",\n \"activity.request_detail_title\": \"Detalii cerere\",\n \"activity.show_details\": \"Arat\u0103 detalii\",\n \"activity.hide_details\": \"Ascunde detalii\",\n \"activity.response_title\": \"R\u0103spuns\",\n \"activity.payment_pending\": \"Plat\u0103 \u00EEn a\u0219teptare\",\n \"activity.payment_required\": \"Plata este necesar\u0103\",\n \"activity.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"activity.confirm_payment\": \"Confirm\u0103 plata\",\n \"activity.confirming_payment\": \"Se confirm\u0103...\",\n \"activity.refresh_status\": \"Re\u00EEmprosp\u0103teaz\u0103 starea\",\n \"activity.waiting_for_payment\": \"\u00CEn a\u0219teptarea confirm\u0103rii pl\u0103\u021Bii\u2026\",\n \"activity.waiting_for_response\": \"\u00CEn a\u0219teptarea r\u0103spunsului\u2026\",\n \"activity.execution_timeline\": \"Cronologia execu\u021Biei\",\n \"activity.artifacts_title\": \"Artefacte\",\n \"activity.download_artifact\": \"Descarc\u0103 artefactul\",\n \"activity.related_widgets_title\": \"Widget-uri asociate\",\n \"activity.help_title\": \"Ajutor\",\n \"activity.back_to_requests\": \"\u00CEnapoi la cereri\",\n \"activity.open_widget\": \"Deschide {widget}\",\n \"activity.help_request\":\n \"Ai nevoie de ajutor pentru aceast\u0103 cerere? Contacteaz\u0103 administratorul folosind ID-ul cererii de mai sus.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} eveniment\",\n \"activity.timeline_count_other\": \"{count} evenimente\",\n \"activity.timeline_error_count_one\": \"{count} eroare\",\n \"activity.timeline_error_count_other\": \"{count} erori\",\n \"activity.guard_badge\": \"gard\u0103: {value}\",\n \"activity.trigger_badge\": \"declan\u0219ator: {value}\",\n \"activity.outcome_badge\": \"rezultat: {value}\",\n \"activity.reason_detail\": \"motiv={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Actualizeaz\u0103 abonamentul{suffix}\",\n \"activity.guard_action_complete_payment\": \"Finalizeaz\u0103 plata{suffix}\",\n \"activity.guard_action_step_up_authentication\":\n \"Finalizeaz\u0103 autentificarea suplimentar\u0103{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm\u0103 ac\u021Biunea\",\n \"activity.guard_action_confirm_action_message\": \"Confirm\u0103 ac\u021Biunea ({message})\",\n \"activity.guard_action_custom\": \"Ac\u021Biune: {kind}\",\n \"status.unread\": \"Necitit\",\n \"status.read\": \"Citit\",\n \"common.back\": \"\u00CEnapoi\",\n \"catalog.search_placeholder\": \"Caut\u0103 dup\u0103 nume, descriere...\",\n \"catalog.search_aria\": \"Caut\u0103 aplica\u021Bii\",\n \"catalog.filter_by_tag\": \"Filtreaz\u0103 dup\u0103 etichet\u0103\",\n \"catalog.results_all\": \"{count} aplica\u021Bi{suffix}\",\n \"catalog.results_filtered\": \"{count} din {total} aplica\u021Bi{suffix}\",\n \"catalog.no_apps_found\": \"Nu au fost g\u0103site aplica\u021Bii\",\n \"catalog.empty_added_only\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii instalate pentru subiectul curent. Dezactiveaz\u0103 filtrul Doar ad\u0103ugate pentru a vedea catalogul complet.\",\n \"catalog.empty_filtered\":\n \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea sau filtrele pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"catalog.empty_default\": \"Momentan nu exist\u0103 aplica\u021Bii disponibile \u00EEn catalog.\",\n \"catalog.view_details\": \"Vezi detalii\",\n \"catalog.remove_app_title\": \"Elimini aplica\u021Bia?\",\n \"catalog.remove_app_description\":\n \"Elimini {title} din spa\u021Biul de lucru curent? O po\u021Bi ad\u0103uga din nou mai t\u00E2rziu.\",\n \"xapp.kicker_publisher\": \"Dezvoltator: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Adaug\u0103 \u00EEn spa\u021Biul de lucru\",\n \"xapp.remove_from_workspace\": \"Elimin\u0103 din spa\u021Biul de lucru\",\n \"xapp.update_app\": \"Actualizeaz\u0103 aplica\u021Bia\",\n \"xapp.open_app\": \"Deschide aplica\u021Bia\",\n \"xapp.terms_title\": \"Termeni \u0219i condi\u021Bii\",\n \"xapp.update_available\": \"Actualizare disponibil\u0103\",\n \"xapp.about_title\": \"Despre\",\n \"xapp.available_views_title\": \"Vizualiz\u0103ri disponibile\",\n \"xapp.add_to_access_views\":\n \"Adaug\u0103 aceast\u0103 aplica\u021Bie \u00EEn spa\u021Biul t\u0103u de lucru pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.update_to_access_views\":\n \"Este disponibil\u0103 o actualizare. Actualizeaz\u0103 aplica\u021Bia pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.load_as_user_to_access\":\n \"\u00CEncarc\u0103 catalogul ca utilizator pentru a accesa aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_views_available\": \"Nu exist\u0103 \u00EEn prezent vizualiz\u0103ri disponibile pentru aplica\u021Bie.\",\n \"xapp.widget_primary\": \"Principal\",\n \"xapp.widget_open\": \"Deschide\",\n \"xapp.how_app_runs\": \"Cum ruleaz\u0103 aceast\u0103 aplica\u021Bie\",\n \"xapp.view_details\": \"Vezi detalii\",\n \"xapp.no_run_requirements\":\n \"Aceast\u0103 aplica\u021Bie nu are cerin\u021Be suplimentare de rulare configurate.\",\n \"xapp.guard_summary\":\n \"Aceast\u0103 aplica\u021Bie include {itemCount} verific\u0103r{itemSuffix} de rulare \u00EEn {stageCount} etap{stageSuffix}. Deschide detaliile pentru a vedea accesul, plata sau pa\u0219ii de continuare.\",\n \"xapp.trigger_before_tool_run\": \"\u00CEnainte de rularea aplica\u021Biei\",\n \"xapp.trigger_after_tool_run\": \"Dup\u0103 finalizarea aplica\u021Biei\",\n \"xapp.trigger_before_widget_open\": \"\u00CEnainte de deschiderea aplica\u021Biei\",\n \"xapp.trigger_after_widget_open\": \"Dup\u0103 deschiderea aplica\u021Biei\",\n \"xapp.trigger_default\": \"Etap\u0103 aplica\u021Bie\",\n \"xapp.policy_any\": \"Este suficient\u0103 una\",\n \"xapp.policy_all\": \"Se aplic\u0103 to\u021Bi pa\u0219ii\",\n \"xapp.auto\": \"Automat\",\n \"xapp.user_step\": \"Pas utilizator\",\n \"xapp.required\": \"Obligatoriu\",\n \"xapp.info\": \"Informativ\",\n \"xapp.screenshots_title\": \"Capturi de ecran\",\n \"xapp.screenshot_alt\": \"Captur\u0103 de ecran {index}\",\n \"xapp.usage_credits_title\": \"Credite de utilizare\",\n \"xapp.available_label\": \"Disponibile\",\n \"xapp.ready_to_use\": \"{count} gata de utilizare\",\n \"xapp.source_label\": \"Surs\u0103\",\n \"xapp.linked_payment_sessions\": \"{count} asociate sesiunilor de plat\u0103 vizibile\",\n \"xapp.in_flight_label\": \"\u00CEn curs\",\n \"xapp.needs_review_label\": \"Necesit\u0103 verificare\",\n \"xapp.invalid_label\": \"Invalide\",\n \"xapp.invalid_credits\":\n \"{count} \u00EEnregistr\u0103ri orfane din ledger nu reprezint\u0103 credite utilizabile\",\n \"xapp.by_tool_label\": \"Dup\u0103 instrument\",\n \"xapp.for_label\": \"pentru\",\n \"xapp.invalid_short\": \"{count} invalide\",\n \"xapp.in_flight_short\": \"{count} \u00EEn curs\",\n \"xapp.stale_short\": \"{count} expirate\",\n \"xapp.activity_title\": \"Activitate\",\n \"xapp.details_title\": \"Detalii\",\n \"xapp.app_id_label\": \"ID aplica\u021Bie\",\n \"xapp.status_added\": \"Ad\u0103ugat\u0103\",\n \"xapp.status_available\": \"Disponibil\u0103\",\n \"xapp.publisher_label\": \"Dezvoltator\",\n \"xapp.tags_label\": \"Etichete\",\n \"xapp.view_terms\": \"Vezi termenii \u0219i condi\u021Biile\",\n \"xapp.close_terms_dialog\": \"\u00CEnchide dialogul termenilor\",\n \"xapp.view_full_document\": \"Vezi documentul complet\",\n \"xapp.accept_terms\": \"Am citit \u0219i accept termenii \u0219i condi\u021Biile.\",\n \"xapp.accept_add_app\": \"Accept\u0103 \u0219i adaug\u0103 aplica\u021Bia\",\n \"xapp.accept_update\": \"Accept\u0103 \u0219i actualizeaz\u0103\",\n \"widget.session_ended_title\": \"Sesiune \u00EEncheiat\u0103\",\n \"widget.session_ended_message\": \"Sesiunea s-a \u00EEncheiat. Revino \u0219i deschide din nou widgetul.\",\n \"widget.session_expired_title\": \"Sesiunea widgetului a expirat\",\n \"widget.session_expired_refresh_failed\":\n \"Sesiunea acestui widget a expirat \u0219i nu a putut fi re\u00EEnnoit\u0103. Deschide-l din nou pentru a continua.\",\n \"widget.session_expired_default\":\n \"Sesiunea acestui widget s-a \u00EEncheiat. Revino \u0219i deschide-l din nou pentru a continua.\",\n \"widget.confirm_continue_prompt\": \"Aceast\u0103 ac\u021Biune necesit\u0103 confirmare. Continua\u021Bi?\",\n \"widget.unable_to_load\": \"Widgetul nu a putut fi \u00EEnc\u0103rcat\",\n \"widget.preparing\": \"Se preg\u0103te\u0219te {title}...\",\n \"widget.secure_session_setup\": \"Se configureaz\u0103 o sesiune securizat\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n \"payment_lock.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"payment_lock.continue\": \"Continu\u0103\",\n \"payment_lock.confirming_payment_finality\": \"Se confirm\u0103 finalitatea pl\u0103\u021Bii la procesator.\",\n \"payment_lock.pending_retry_confirm\":\n \"Plata este \u00EEnc\u0103 \u00EEn a\u0219teptare la procesator. Re\u00EEncearc\u0103 verificarea \u00EEn c\u00E2teva secunde.\",\n \"payment_lock.confirmed_refresh\": \"Plata este confirmat\u0103. Re\u00EEmprosp\u0103teaz\u0103 pentru a continua.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Plata nu este finalizat\u0103. \u00CEncepe o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.requires_additional_action\":\n \"Plata necesit\u0103 o ac\u021Biune suplimentar\u0103. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.attempt_failed\":\n \"Ultima \u00EEncercare de plat\u0103 a e\u0219uat. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.evidence_used\":\n \"Dovada pl\u0103\u021Bii a fost deja folosit\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.evidence_consumed\":\n \"Dovada pl\u0103\u021Bii a fost deja consumat\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.required_before_request\":\n \"Plata este necesar\u0103 \u00EEnainte ca aceast\u0103 cerere s\u0103 poat\u0103 continua.\",\n },\n} as const;\n\nexport function MarketplaceI18nProvider(props: { locale?: string; children: ReactNode }) {\n return (\n <I18nProvider locale={props.locale || \"en\"} catalogs={MARKETPLACE_CATALOGS}>\n {props.children}\n </I18nProvider>\n );\n}\n\nexport function useMarketplaceI18n() {\n return useI18n();\n}\n\nexport function resolveMarketplaceText(value: LocalizedText, locale?: string | null): string {\n let candidateValue: LocalizedText = value;\n if (typeof candidateValue === \"string\") {\n const trimmed = candidateValue.trim();\n if (!trimmed) return \"\";\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n candidateValue = parsed as Record<string, string | null | undefined>;\n } else {\n return trimmed;\n }\n } catch {\n return trimmed;\n }\n } else {\n return trimmed;\n }\n }\n if (!candidateValue || typeof candidateValue !== \"object\" || Array.isArray(candidateValue)) {\n return \"\";\n }\n const currentLocale = String(locale || \"en\").trim() || \"en\";\n const direct = candidateValue[currentLocale];\n if (typeof direct === \"string\" && direct.trim()) return direct;\n const base = currentLocale.split(\"-\")[0];\n const baseValue = candidateValue[base];\n if (typeof baseValue === \"string\" && baseValue.trim()) return baseValue;\n const english = candidateValue.en;\n if (typeof english === \"string\" && english.trim()) return english;\n for (const localized of Object.values(candidateValue)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n", "import { Route, Routes } from \"react-router-dom\";\nimport { CatalogPage } from \"./pages/CatalogPage\";\nimport { InvoicesPage } from \"./pages/InvoicesPage\";\nimport { NotificationsPage } from \"./pages/NotificationsPage\";\nimport { PaymentsPage } from \"./pages/PaymentsPage\";\nimport { RequestDetailPage } from \"./pages/RequestDetailPage\";\nimport { RequestsPage } from \"./pages/RequestsPage\";\nimport { XappDetailPage } from \"./pages/XappDetailPage\";\nimport { WidgetView } from \"./pages/WidgetView\";\nimport { PublishersPage } from \"./pages/PublishersPage\";\nimport { PublisherDetailPage } from \"./pages/PublisherDetailPage\";\n\nexport function MarketplaceApp() {\n return (\n <Routes>\n {/*\n IMPORTANT: These routes must be mountable under arbitrary bases (Portal: /marketplace,\n Embed: /embed/catalog). Therefore, we use relative paths (no leading \"/\").\n */}\n <Route path=\"\" element={<CatalogPage />} />\n <Route path=\"publishers\" element={<PublishersPage />} />\n <Route path=\"publishers/:publisherSlug\" element={<PublisherDetailPage />} />\n <Route path=\"xapps/:xappId\" element={<XappDetailPage />} />\n <Route path=\"requests\" element={<RequestsPage />} />\n <Route path=\"payments\" element={<PaymentsPage />} />\n <Route path=\"invoices\" element={<InvoicesPage />} />\n <Route path=\"notifications\" element={<NotificationsPage />} />\n <Route path=\"requests/:id\" element={<RequestDetailPage />} />\n <Route path=\"widget/:installationId/:widgetId\" element={<WidgetView />} />\n <Route path=\"*\" element={<CatalogPage />} />\n </Routes>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXapp } from \"../types\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype StoredCatalogFilters = {\n addedOnly?: boolean;\n selectedTag?: string;\n};\n\ntype PendingRemoval = {\n installationId: string;\n xappId: string;\n title: string;\n} | null;\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction getDefaultWidgetId(x: CatalogXapp): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = def || widgets[0];\n return readFirstString(asRecord(pick).id) || null;\n}\n\nfunction buildCatalogFilterStorageKey(input: {\n isEmbedded: boolean;\n singleXappMode?: boolean;\n xappId?: string;\n publishers?: string[];\n tags?: string[];\n subjectId?: string | null;\n}): string {\n const mode = input.isEmbedded ? \"embed\" : \"portal\";\n const scope = input.singleXappMode && input.xappId ? `xapp:${input.xappId}` : \"catalog\";\n const publishers = (input.publishers ?? []).slice().sort().join(\",\") || \"all\";\n const tags = (input.tags ?? []).slice().sort().join(\",\") || \"all\";\n const subject = String(input.subjectId || \"\").trim() || \"anonymous\";\n return `xapps:marketplace:catalog-filters:${mode}:${scope}:subject=${subject}:publishers=${publishers}:tags=${tags}`;\n}\n\nfunction readStoredCatalogFilters(storageKey: string): StoredCatalogFilters | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredCatalogFilters | null;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredCatalogFilters(storageKey: string, value: StoredCatalogFilters): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(value));\n } catch {\n // Ignore storage write failures; filters still work for the current session.\n }\n}\n\nexport function CatalogPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add app\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove app\";\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const storageKey = useMemo(\n () =>\n buildCatalogFilterStorageKey({\n isEmbedded,\n singleXappMode: env?.singleXappMode,\n xappId: env?.xappId,\n publishers: env?.publishers,\n tags: env?.tags,\n subjectId: host.subjectId,\n }),\n [env?.publishers, env?.singleXappMode, env?.tags, env?.xappId, host.subjectId, isEmbedded],\n );\n const defaultTag = env?.tags?.[0] ?? \"\";\n\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [q, setQ] = useState(\"\");\n const [installedOnly, setInstalledOnly] = useState<boolean>(() =>\n Boolean(readStoredCatalogFilters(storageKey)?.addedOnly),\n );\n const [selectedTag, setSelectedTag] = useState<string>(() => {\n const stored = readStoredCatalogFilters(storageKey);\n return typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag;\n });\n const [pendingRemoval, setPendingRemoval] = useState<PendingRemoval>(null);\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n const allTags = useMemo(() => {\n const s = new Set<string>();\n for (const x of items) {\n const tags = x.manifest?.tags;\n if (Array.isArray(tags)) {\n for (const t of tags) s.add(t);\n }\n }\n // If env.tags provided, we might want to restrict the dropdown to only those.\n if (env?.tags && env.tags.length > 0) {\n return Array.from(s)\n .filter((t) => env.tags!.includes(t))\n .sort((a, b) => a.localeCompare(b));\n }\n return Array.from(s).sort((a, b) => a.localeCompare(b));\n }, [items, env?.tags]);\n\n async function refresh() {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listCatalogXapps();\n setItems(Array.isArray(res?.items) ? res.items : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const stored = readStoredCatalogFilters(storageKey);\n setInstalledOnly(Boolean(stored?.addedOnly));\n setSelectedTag(typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag);\n }, [defaultTag, storageKey]);\n\n useEffect(() => {\n const restrictedTags = env?.tags ?? [];\n if (selectedTag && restrictedTags.length > 0 && !restrictedTags.includes(selectedTag)) {\n setSelectedTag(defaultTag);\n }\n }, [defaultTag, env?.tags, selectedTag]);\n\n useEffect(() => {\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: selectedTag || \"\",\n });\n }, [installedOnly, selectedTag, storageKey]);\n\n const filtered = useMemo(() => {\n const qq = q.trim().toLowerCase();\n return items.filter((x) => {\n const inst = installationsByXappId[String(x.id)];\n const isInstalled = Boolean(inst);\n if (installedOnly && !isInstalled) return false;\n\n // Filter by tags from env (if any) - these are usually mandatory restrictions from the session\n if (env?.tags && env.tags.length > 0) {\n const xTags = Array.isArray(x.manifest?.tags)\n ? x.manifest.tags.filter((tag): tag is string => typeof tag === \"string\")\n : [];\n const hasMatch = env.tags.some((t) => xTags.includes(t));\n if (!hasMatch) return false;\n }\n\n // Filter by publishers from env (if any)\n if (env?.publishers && env.publishers.length > 0) {\n if (x.publisher?.slug && !env.publishers.includes(x.publisher.slug)) return false;\n }\n\n // Local UI filter (Tags dropdown)\n if (selectedTag) {\n const tags = asRecord(x).manifest ? asRecord(asRecord(x).manifest).tags : undefined;\n if (!Array.isArray(tags) || !tags.includes(selectedTag)) return false;\n }\n\n if (!qq) return true;\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const description =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${description} ${x.slug}`.toLowerCase();\n return hay.includes(qq);\n });\n }, [\n env?.publishers,\n env?.tags,\n installationsByXappId,\n installedOnly,\n items,\n locale,\n q,\n selectedTag,\n ]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav active=\"xapps\" isEmbedded={isEmbedded} tokenSearch={tokenSearch} />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">{t(\"common.search\", undefined, \"Search\")}</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"catalog.search_placeholder\",\n undefined,\n \"Search by name, description...\",\n )}\n aria-label={t(\"catalog.search_aria\", undefined, \"Search apps\")}\n />\n </div>\n\n <div className=\"mx-input-group\">\n <label className=\"mx-label\">{t(\"common.tag\", undefined, \"Tag\")}</label>\n <select\n className=\"mx-input mx-select\"\n value={selectedTag}\n onChange={(e) => {\n const next = e.target.value;\n setSelectedTag(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: next,\n });\n }}\n aria-label={t(\"catalog.filter_by_tag\", undefined, \"Filter by tag\")}\n >\n <option value=\"\">{t(\"common.all_tags\", undefined, \"All Tags\")}</option>\n {allTags.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n </div>\n\n <label className=\"mx-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={installedOnly}\n onChange={(e) => {\n const next = e.target.checked;\n setInstalledOnly(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: next,\n selectedTag: selectedTag || \"\",\n });\n }}\n className=\"mx-checkbox\"\n />\n <span className=\"mx-label mx-label-inline\">\n {t(\"common.added_only\", undefined, \"Added only\")}\n </span>\n </label>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filtered.length === items.length\n ? t(\n \"catalog.results_all\",\n {\n count: filtered.length,\n suffix: filtered.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} app${filtered.length === 1 ? \"\" : \"s\"}`,\n )\n : t(\n \"catalog.results_filtered\",\n {\n count: filtered.length,\n total: items.length,\n suffix: items.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} of ${items.length} app${items.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filtered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"catalog.no_apps_found\", undefined, \"No apps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {installedOnly && items.length > 0\n ? t(\n \"catalog.empty_added_only\",\n undefined,\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n )\n : q || selectedTag || installedOnly\n ? t(\n \"catalog.empty_filtered\",\n undefined,\n \"Try adjusting your search or filters to find what you're looking for.\",\n )\n : t(\n \"catalog.empty_default\",\n undefined,\n \"No apps are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n filtered.map((x: CatalogXapp) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug) ||\n \"App\";\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n typeof manifest.image === \"string\"\n ? manifest.image\n : \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const defaultWidgetId = getDefaultWidgetId(x);\n\n const xTerms = asRecord(manifest.terms);\n const requiresTerms = Boolean(\n Object.keys(xTerms).length > 0 ||\n (typeof xTerms.text === \"string\" && xTerms.text.trim()) ||\n (typeof xTerms.url === \"string\" && xTerms.url.trim()),\n );\n const needsInstallDetails = !x.manifest || !(\"terms\" in manifest) || requiresTerms;\n\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n {x.publisher?.slug ? (\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")}{\" \"}\n <Link\n to={{\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(String(x.publisher.slug))}`\n : `/marketplace/publishers/${encodeURIComponent(\n String(x.publisher.slug),\n )}`,\n search: tokenSearch,\n }}\n className=\"mx-inline-link\"\n >\n {x.publisher.name || x.publisher.slug}\n </Link>\n </div>\n ) : (\n <div className=\"mx-card-publisher\">\n {t(\"common.catalog_app\", undefined, \"Catalog app\")}\n </div>\n )}\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {(Array.isArray(manifest.tags) ? manifest.tags : [])\n .filter((t): t is string => typeof t === \"string\")\n .slice(0, 3)\n .map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n {canMutate &&\n (!installed ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (needsInstallDetails) {\n navigate(detailTo);\n return;\n }\n host.requestInstall({\n xappId: String(x.id),\n defaultWidgetId,\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm mx-btn-danger-text\"\n disabled={!inst?.installationId}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (inst?.installationId) {\n setPendingRemoval({\n installationId: inst.installationId,\n xappId: String(x.id),\n title,\n });\n }\n }}\n >\n {removeAppLabel}\n </button>\n ))}\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n <ConfirmActionModal\n open={Boolean(pendingRemoval)}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={\n pendingRemoval\n ? t(\n \"catalog.remove_app_description\",\n { title: pendingRemoval.title },\n `Remove ${pendingRemoval.title} from your current workspace? You can add it again later.`,\n )\n : \"\"\n }\n confirmLabel={removeAppLabel}\n onCancel={() => setPendingRemoval(null)}\n onConfirm={() => {\n if (!pendingRemoval) return;\n host.requestUninstall?.({\n installationId: pendingRemoval.installationId,\n xappId: pendingRemoval.xappId,\n });\n setPendingRemoval(null);\n }}\n />\n </div>\n );\n}\n", "import { useEffect } from \"react\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\nexport function ConfirmActionModal(props: {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const { t } = useMarketplaceI18n();\n const {\n open,\n title,\n description,\n confirmLabel = t(\"common.confirm\", undefined, \"Confirm\"),\n cancelLabel = t(\"common.cancel\", undefined, \"Cancel\"),\n onConfirm,\n onCancel,\n } = props;\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onCancel();\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [onCancel, open]);\n\n if (!open) return null;\n\n return (\n <div className=\"mx-detail-modal-backdrop\" onClick={onCancel}>\n <div\n className=\"mx-sidebar-card mx-detail-modal\"\n onClick={(event) => event.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mx-confirm-action-title\"\n >\n <div className=\"mx-detail-modal-head\">\n <h2 id=\"mx-confirm-action-title\" className=\"mx-section-title mx-section-title-tight\">\n {title}\n </h2>\n <button\n onClick={onCancel}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"common.close_dialog\", undefined, \"Close dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {description ? (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{description}</div>\n ) : null}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <button className=\"mx-btn mx-btn-outline\" data-variant=\"danger\" onClick={onConfirm}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype MarketplacePrimaryNavProps = {\n active: \"xapps\" | \"publishers\" | \"activity\";\n isEmbedded: boolean;\n tokenSearch: string;\n};\n\nexport function MarketplacePrimaryNav(props: MarketplacePrimaryNavProps) {\n const { t } = useMarketplaceI18n();\n const xappsTo = props.isEmbedded ? `/${props.tokenSearch}` : `/marketplace${props.tokenSearch}`;\n const publishersTo = props.isEmbedded\n ? `/publishers${props.tokenSearch}`\n : `/marketplace/publishers${props.tokenSearch}`;\n const activityTo = props.isEmbedded\n ? `/requests${props.tokenSearch}`\n : `/marketplace/requests${props.tokenSearch}`;\n\n return (\n <nav\n className=\"mx-nav-switch\"\n aria-label={t(\"nav.marketplace\", undefined, \"Marketplace navigation\")}\n >\n <Link\n to={xappsTo as any}\n className={`mx-nav-link ${props.active === \"xapps\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"xapps\" ? \"page\" : undefined}\n >\n {t(\"nav.xapps\", undefined, \"Xapps\")}\n </Link>\n <Link\n to={publishersTo as any}\n className={`mx-nav-link ${props.active === \"publishers\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"publishers\" ? \"page\" : undefined}\n >\n {t(\"nav.publishers\", undefined, \"Publishers\")}\n </Link>\n <Link\n to={activityTo as any}\n className={`mx-nav-link ${props.active === \"activity\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"activity\" ? \"page\" : undefined}\n >\n {t(\"nav.activity\", undefined, \"Activity\")}\n </Link>\n </nav>\n );\n}\n", "export function readHostReturnUrl(search: string): string {\n const qs = new URLSearchParams(String(search || \"\"));\n return String(qs.get(\"xapps_host_return_url\") || qs.get(\"xappsHostReturnUrl\") || \"\").trim();\n}\n\nexport function buildTokenSearch(token: string, search: string): string {\n const params = new URLSearchParams();\n if (token) params.set(\"token\", token);\n const hostReturnUrl = readHostReturnUrl(search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n const out = params.toString();\n return out ? `?${out}` : \"\";\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nexport function readString(value: unknown): string {\n if (typeof value === \"string\") return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return \"\";\n}\n\nexport function readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const candidate = readString(value);\n if (candidate) return candidate;\n }\n return \"\";\n}\n\nexport function parseDateValue(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n\n if (isRecord(value)) {\n const secondsValue = value.seconds ?? value._seconds;\n const nanosValue = value.nanoseconds ?? value._nanoseconds;\n const seconds = typeof secondsValue === \"number\" ? secondsValue : Number(secondsValue);\n const nanos = typeof nanosValue === \"number\" ? nanosValue : Number(nanosValue || 0);\n if (Number.isFinite(seconds)) {\n const parsed = new Date(seconds * 1000 + (Number.isFinite(nanos) ? nanos / 1_000_000 : 0));\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n }\n\n const text = readString(value);\n if (!text) return null;\n\n const candidates = new Set<string>([text]);\n if (/^\\d+$/.test(text)) {\n const asMs = new Date(Number(text));\n if (!Number.isNaN(asMs.getTime())) return asMs;\n }\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/.test(text)) {\n candidates.add(text.replace(\" \", \"T\"));\n candidates.add(`${text.replace(\" \", \"T\")}Z`);\n }\n if (text.endsWith(\" UTC\")) {\n candidates.add(`${text.slice(0, -4)}Z`);\n }\n\n for (const candidate of candidates) {\n const parsed = new Date(candidate);\n if (!Number.isNaN(parsed.getTime())) return parsed;\n }\n\n return null;\n}\n\nexport function formatDateTime(value: unknown): string {\n const parsed = parseDateValue(value);\n return parsed ? parsed.toLocaleString() : \"\";\n}\n\nexport function normalizeExpandStage(\n value: unknown,\n expanded: boolean,\n): \"inline\" | \"focus\" | \"fullscreen\" {\n return value === \"inline\" || value === \"focus\" || value === \"fullscreen\"\n ? value\n : expanded\n ? \"focus\"\n : \"inline\";\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype InvoiceRecord = Record<string, unknown>;\ntype InvoicePagination = { total: number; page: number; pageSize: number; totalPages: number };\n\nexport function InvoicesPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedInvoiceId = query.get(\"invoiceId\") ?? \"\";\n const paymentSessionIdFilter = query.get(\"paymentSessionId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n const [items, setItems] = useState<InvoiceRecord[]>([]);\n const [focusedInvoice, setFocusedInvoice] = useState<InvoiceRecord | null>(null);\n const [focusedHistory, setFocusedHistory] = useState<InvoiceRecord[]>([]);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [pagination, setPagination] = useState<InvoicePagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh(page: number = 1) {\n if (!client.listMyInvoices) {\n setError(\n t(\n \"activity.unavailable_invoices_title\",\n undefined,\n \"Invoices are unavailable in this host.\",\n ),\n );\n setItems([]);\n setPagination(null);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyInvoices({\n paymentSessionId: paymentSessionIdFilter || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n const nextPagination = asRecord(res?.pagination);\n setPagination(\n Object.keys(nextPagination).length\n ? {\n total: Number(nextPagination.total || 0),\n page: Number(nextPagination.page || page),\n pageSize: Number(nextPagination.pageSize || 20),\n totalPages: Number(nextPagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"invoices\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [installationIdFilter, pageParam, paymentSessionIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedInvoiceId || !client.getMyInvoiceHistory) {\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyInvoiceHistory!(focusedInvoiceId);\n if (cancelled) return;\n const history = asRecord(res);\n setFocusedInvoice(asRecord(history.item));\n setFocusedHistory(\n Array.isArray(history.events) ? history.events.map((event) => asRecord(event)) : [],\n );\n } catch (e) {\n if (cancelled) return;\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedInvoiceId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n if (paymentSessionIdFilter) qs.set(\"paymentSessionId\", paymentSessionIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.invoices_title\", undefined, \"Invoices\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.invoices_title\", undefined, \"Invoices\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh(pageParam)}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"invoices\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_invoices_for_prefix\", undefined, \"Showing invoice records for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedInvoiceId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.invoice_detail\", undefined, \"Invoice Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedInvoiceId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_invoice_list\", undefined, \"Back to invoice list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedInvoice ? (\n <>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readFirstString(\n focusedInvoice.status,\n focusedInvoice.lifecycle_status,\n )}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.provider\", undefined, \"Provider\")}\n </div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedInvoice.provider_key, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.payment_session\", undefined, \"Payment Session\")}\n </div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedInvoice.payment_session_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedInvoice.created_at) || \"\u2014\"}\n </div>\n </div>\n {(readString(focusedInvoice.document_url) ||\n readString(focusedInvoice.document_download_url) ||\n readString(focusedInvoice.external_url)) && (\n <div className=\"mx-record-actions\">\n {focusedInvoice.document_url ? (\n <a\n href={String(focusedInvoice.document_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_document\", undefined, \"Open Document\")}\n </a>\n ) : null}\n {focusedInvoice.document_download_url ? (\n <a\n href={String(focusedInvoice.document_download_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.download\", undefined, \"Download\")}\n </a>\n ) : null}\n {!focusedInvoice.document_download_url &&\n !focusedInvoice.document_url &&\n focusedInvoice.external_url ? (\n <a\n href={String(focusedInvoice.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_external\", undefined, \"Open External\")}\n </a>\n ) : null}\n </div>\n )}\n </div>\n {focusedHistory.length > 0 && (\n <div className=\"mx-record-timeline\">\n <div className=\"mx-record-label\">\n {t(\"activity.lifecycle_history\", undefined, \"Lifecycle History\")}\n </div>\n <div className=\"mx-detail-guard-list mx-detail-guard-list-compact\">\n {focusedHistory.map((event, index) => (\n <div\n key={readFirstString(event.id, index)}\n className=\"mx-record-timeline-item\"\n >\n <strong>\n {readFirstString(\n event.action,\n event.type,\n t(\"activity.event\", undefined, \"Event\"),\n )}\n </strong>\n {formatDateTime(event.created_at)\n ? ` \u2022 ${formatDateTime(event.created_at)}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoice_detail\", undefined, \"Loading invoice details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.invoice\", undefined, \"Invoice\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.provider\", undefined, \"Provider\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.document\", undefined, \"Document\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 5 : 6}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoices\", undefined, \"Loading invoices...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_invoices\", undefined, \"No invoices found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td data-label={t(\"common.invoice\", undefined, \"Invoice\")}>\n <div className=\"mx-cell-bold\">\n {readFirstString(\n item.invoice_identifier,\n item.series,\n item.number,\n item.id,\n \"\u2014\",\n )}\n </div>\n {readString(item.payment_session_id) && (\n <div className=\"mx-cell-sub\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(item.payment_session_id)}\n </div>\n )}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readFirstString(item.status, item.lifecycle_status)} />\n </td>\n <td data-label={t(\"common.provider\", undefined, \"Provider\")}>\n {readFirstString(item.provider_key, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.document\", undefined, \"Document\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"invoiceId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.document_download_url || item.external_url ? (\n <a\n href={String(item.document_download_url || item.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.open\", undefined, \"Open\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam <= 1}\n onClick={() => void refresh(pageParam - 1)}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </button>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam >= Number(pagination.totalPages || 1)}\n onClick={() => void refresh(pageParam + 1)}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </button>\n </div>\n )}\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype ActivityTabKey = \"requests\" | \"payments\" | \"invoices\" | \"notifications\";\n\ntype MarketplaceActivityTabsProps = {\n active: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n};\n\nfunction buildActivityHref(input: {\n surface: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n}) {\n const qs = new URLSearchParams();\n if (input.token) qs.set(\"token\", input.token);\n if (input.xappId) qs.set(\"xappId\", input.xappId);\n if (input.installationId && input.surface !== \"requests\") {\n qs.set(\"installationId\", input.installationId);\n }\n const suffix = qs.toString();\n return {\n pathname: input.isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nexport function MarketplaceActivityTabs(props: MarketplaceActivityTabsProps) {\n const { t } = useMarketplaceI18n();\n const tabs: Array<{ key: ActivityTabKey; label: string }> = [\n { key: \"requests\", label: t(\"activity.requests\", undefined, \"Requests\") },\n { key: \"payments\", label: t(\"activity.payments\", undefined, \"Payments\") },\n { key: \"invoices\", label: t(\"activity.invoices\", undefined, \"Invoices\") },\n { key: \"notifications\", label: t(\"activity.notifications\", undefined, \"Notifications\") },\n ];\n\n return (\n <nav\n className=\"mx-activity-tabs\"\n aria-label={t(\"activity.navigation\", undefined, \"Activity navigation\")}\n >\n {tabs.map((tab) => (\n <Link\n key={tab.key}\n to={\n buildActivityHref({\n surface: tab.key,\n isEmbedded: props.isEmbedded,\n token: props.token,\n xappId: props.xappId,\n installationId: props.installationId,\n }) as any\n }\n className={`mx-activity-tab ${props.active === tab.key ? \"is-active\" : \"\"}`}\n aria-current={props.active === tab.key ? \"page\" : undefined}\n >\n {tab.label}\n </Link>\n ))}\n </nav>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status, unread }: { status: string; unread: boolean }) {\n const { t } = useMarketplaceI18n();\n if (unread) {\n return (\n <span className=\"mx-badge mx-badge-warning\">{t(\"status.unread\", undefined, \"Unread\")}</span>\n );\n }\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className = normalized === \"COMPLETED\" ? \"mx-badge-success\" : \"mx-badge-danger\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype NotificationRecord = Record<string, unknown>;\n\nexport function NotificationsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedNotificationId = query.get(\"notificationId\") ?? \"\";\n const [items, setItems] = useState<NotificationRecord[]>([]);\n const [focusedNotification, setFocusedNotification] = useState<NotificationRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [unreadCount, setUnreadCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyNotifications) {\n setError(\n t(\n \"activity.unavailable_notifications_title\",\n undefined,\n \"Notifications are unavailable in this host.\",\n ),\n );\n setItems([]);\n setUnreadCount(0);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyNotifications({\n notificationId: focusedNotificationId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n async function markRead(notificationId: string) {\n if (!client.markMyNotificationRead) return;\n try {\n const res = await client.markMyNotificationRead(notificationId);\n setItems((current) =>\n current.map((item) =>\n readString(item.id) === notificationId\n ? {\n ...item,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : item,\n ),\n );\n setFocusedNotification((current) =>\n current && readString(current.id) === notificationId\n ? {\n ...current,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n async function markAllRead() {\n if (!client.markAllMyNotificationsRead) return;\n try {\n const res = await client.markAllMyNotificationsRead();\n setItems((current) =>\n current.map((item) => ({\n ...item,\n unread: false,\n read_at: readString(item.read_at) || new Date().toISOString(),\n })),\n );\n setFocusedNotification((current) =>\n current\n ? {\n ...current,\n unread: false,\n read_at: readString(current.read_at) || new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"notifications\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedNotificationId) {\n setFocusedNotification(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.listMyNotifications?.({\n notificationId: focusedNotificationId,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 1,\n });\n if (cancelled) return;\n const item = Array.isArray(res?.items) ? asRecord(res.items[0]) : null;\n setFocusedNotification(item);\n } catch (e) {\n if (cancelled) return;\n setFocusedNotification(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.notifications_title\", undefined, \"Notifications\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <div>\n <h1 className=\"mx-title\">\n {t(\"activity.notifications_title\", undefined, \"Notifications\")}\n </h1>\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.unread_count\",\n {\n count: unreadCount,\n suffix: unreadCount === 1 ? \"\" : \"s\",\n suffix2: unreadCount === 1 ? \"\" : \"e\",\n },\n `${unreadCount} unread item${unreadCount === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {client.markAllMyNotificationsRead && unreadCount > 0 && (\n <button className=\"mx-btn mx-btn-outline\" onClick={() => void markAllRead()}>\n {t(\"activity.mark_all_read\", undefined, \"Mark all read\")}\n </button>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"notifications\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\n \"activity.showing_notifications_for_prefix\",\n undefined,\n \"Showing notification activity for\",\n )}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedNotificationId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.notification_detail\", undefined, \"Notification Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedNotificationId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_notification_list\", undefined, \"Back to notification list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedNotification ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readString(focusedNotification.status)}\n unread={Boolean(focusedNotification.unread)}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.trigger\", undefined, \"Trigger\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.trigger, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.channel\", undefined, \"Channel\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.channel, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.received\", undefined, \"Received\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedNotification.created_at) || \"\u2014\"}\n </div>\n </div>\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">{t(\"common.message\", undefined, \"Message\")}</div>\n <div className=\"mx-record-value\">\n {readFirstString(focusedNotification.message, \"\u2014\")}\n </div>\n </div>\n {(readString(focusedNotification.request_id) ||\n readString(focusedNotification.payment_session_id) ||\n readString(focusedNotification.reason)) && (\n <div className=\"mx-record-pill-row\">\n {readString(focusedNotification.request_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.request\", undefined, \"Request\")}:{\" \"}\n {readString(focusedNotification.request_id)}\n </span>\n ) : null}\n {readString(focusedNotification.payment_session_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(focusedNotification.payment_session_id)}\n </span>\n ) : null}\n {readString(focusedNotification.reason) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.reason\", undefined, \"Reason\")}:{\" \"}\n {readString(focusedNotification.reason)}\n </span>\n ) : null}\n </div>\n )}\n {Boolean(focusedNotification.unread) && client.markMyNotificationRead ? (\n <div className=\"mx-record-actions\">\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(focusedNotification.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\n \"activity.loading_notification_detail\",\n undefined,\n \"Loading notification details...\",\n )}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.trigger\", undefined, \"Trigger\")}</th>\n <th scope=\"col\">{t(\"common.channel\", undefined, \"Channel\")}</th>\n <th scope=\"col\">{t(\"common.message\", undefined, \"Message\")}</th>\n <th scope=\"col\">{t(\"common.received\", undefined, \"Received\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td colSpan={6} className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}>\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_notifications\", undefined, \"Loading notifications...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_notifications\", undefined, \"No notification activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} unread={Boolean(item.unread)} />\n </td>\n <td data-label={t(\"common.trigger\", undefined, \"Trigger\")}>\n {readFirstString(item.trigger, \"\u2014\")}\n </td>\n <td data-label={t(\"common.channel\", undefined, \"Channel\")}>\n {readFirstString(item.channel, \"\u2014\")}\n </td>\n <td data-label={t(\"common.message\", undefined, \"Message\")}>\n {readFirstString(item.message, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.received\", undefined, \"Received\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"notificationId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {Boolean(item.unread) && client.markMyNotificationRead ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(item.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype PaymentSessionRecord = Record<string, unknown>;\n\nexport function PaymentsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedPaymentSessionId = query.get(\"paymentSessionId\") ?? \"\";\n const [items, setItems] = useState<PaymentSessionRecord[]>([]);\n const [focusedSession, setFocusedSession] = useState<PaymentSessionRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyPaymentSessions) {\n setError(\n t(\n \"activity.unavailable_payments_title\",\n undefined,\n \"Payments are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyPaymentSessions({\n paymentSessionId: focusedPaymentSessionId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"payments\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedPaymentSessionId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedPaymentSessionId || !client.getMyPaymentSession) {\n setFocusedSession(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyPaymentSession!(focusedPaymentSessionId);\n if (cancelled) return;\n const session = asRecord(asRecord(res).session);\n setFocusedSession(Object.keys(session).length > 0 ? session : null);\n } catch (e) {\n if (cancelled) return;\n setFocusedSession(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedPaymentSessionId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.payments_title\", undefined, \"Payments\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.payments_title\", undefined, \"Payments\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"payments\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_payments_for_prefix\", undefined, \"Showing payment activity for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedPaymentSessionId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.payment_detail\", undefined, \"Payment Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedPaymentSessionId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_payment_list\", undefined, \"Back to payment list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedSession ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge status={readString(focusedSession.status)} />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.amount\", undefined, \"Amount\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.amount, \"\u2014\")}{\" \"}\n {readString(focusedSession.currency)}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.tool\", undefined, \"Tool\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.tool_name, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.provider\", undefined, \"Provider\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.provider_key, focusedSession.issuer, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.request\", undefined, \"Request\")}</div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedSession.request_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedSession.created_at) || \"\u2014\"}\n </div>\n </div>\n {Array.isArray(focusedSession.invoices) && focusedSession.invoices.length > 0 && (\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">\n {t(\"activity.invoices_title\", undefined, \"Invoices\")}\n </div>\n <div className=\"mx-record-pill-row\">\n {focusedSession.invoices.map((invoice, index) => {\n const invoiceRecord = asRecord(invoice);\n return (\n <span\n key={readFirstString(invoiceRecord.id, index)}\n className=\"mx-badge mx-badge-outline\"\n >\n {readFirstString(\n invoiceRecord.invoice_identifier,\n invoiceRecord.id,\n t(\"common.invoice\", undefined, \"Invoice\"),\n )}\n </span>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payment_detail\", undefined, \"Loading payment details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.session\", undefined, \"Session\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.amount\", undefined, \"Amount\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 6 : 7}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payments\", undefined, \"Loading payments...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_payments\", undefined, \"No payment activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.payment_session_id, item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td\n className=\"mx-cell-mono\"\n data-label={t(\"common.session\", undefined, \"Session\")}\n >\n {readFirstString(item.payment_session_id, \"\u2014\")}\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n {readFirstString(item.tool_name, \"\u2014\")}\n </td>\n <td className=\"mx-cell-bold\" data-label={t(\"common.amount\", undefined, \"Amount\")}>\n {readString(item.amount)} {readString(item.currency)}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.payment_session_id)\n qs.set(\"paymentSessionId\", String(item.payment_session_id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.resume_url ? (\n <a\n href={String(item.resume_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.resume_payment\", undefined, \"Resume\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { SchemaOutputView } from \"../components/SchemaOutputView\";\nimport {\n resolvePaymentLockStateFromGuardSummary,\n type PaymentReconcileState,\n} from \"../utils/paymentLock\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { buildOperationalSurfaceHref } from \"../utils/operationalSurfaces\";\nimport {\n asRecord,\n formatDateTime,\n parseDateValue,\n readFirstString,\n readString,\n} from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction navigateToExternalOrHost(url: string): void {\n const next = String(url || \"\").trim();\n if (!next || typeof window === \"undefined\") return;\n try {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: \"XAPPS_UI_NAVIGATE\", data: { path: next } }, \"*\");\n return;\n }\n } catch {\n // fall through to top-level navigation\n }\n window.location.href = next;\n}\n\nexport function RequestDetailPage() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { id } = useParams();\n const token = useQueryToken();\n const query = useQuery();\n const loc = useLocation();\n const navigate = useNavigate();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n\n const tokenSearch = buildTokenSearch(token, loc.search);\n\n const [data, setData] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [reconcileBusy, setReconcileBusy] = useState(false);\n const [reconcileError, setReconcileError] = useState<string | null>(null);\n const [reconcileState, setReconcileState] = useState<PaymentReconcileState>(\"none\");\n const dataRecord = asRecord(data);\n const requestRecord = asRecord(dataRecord.request);\n const toolRecord = asRecord(dataRecord.tool);\n const manifestRecord = asRecord(dataRecord.manifest);\n const requestPayment = asRecord(requestRecord.payment);\n const requestPaymentSummary = asRecord(requestRecord.payment_summary);\n const status = readFirstString(requestRecord.status) || undefined;\n const isTerminal = status === \"COMPLETED\" || status === \"FAILED\";\n const effectiveXappId = readFirstString(requestRecord.xapp_id, xappIdFilter);\n const effectiveXappTitle =\n resolveMarketplaceText(manifestRecord.title as any, locale) ||\n readFirstString(requestRecord.xapp_name);\n const xappCrumbLabel = effectiveXappTitle || effectiveXappId;\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = effectiveXappId\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(effectiveXappId)}`\n : `/marketplace/xapps/${encodeURIComponent(effectiveXappId)}`,\n search: tokenSearch,\n } as any)\n : null;\n\n const backToRequests = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n ...(readHostReturnUrl(loc.search)\n ? { xapps_host_return_url: readHostReturnUrl(loc.search) }\n : {}),\n }).toString()}`,\n };\n\n async function refreshOnce() {\n if (!id) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getMyRequest(String(id));\n setData(res);\n if (\n !resolvePaymentLockStateFromGuardSummary(\n asRecord(asRecord(res).request).guard_summary ?? null,\n {\n requestStatus: readFirstString(asRecord(asRecord(res).request).status),\n paymentStatus: readFirstString(asRecord(asRecord(res).request).payment_status),\n t: (key, fallback) => t(key, undefined, fallback),\n },\n ).isLocked\n ) {\n setReconcileState(\"confirmed_paid\");\n }\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n if (!id) return;\n let alive = true;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"request-detail\",\n params: { id },\n });\n\n void refreshOnce();\n\n timer = setInterval(async () => {\n try {\n const res = await client.getMyRequest(String(id));\n if (!alive) return;\n setData(res);\n const s = asRecord(asRecord(res).request).status;\n if (s === \"COMPLETED\" || s === \"FAILED\") {\n if (timer) clearInterval(timer);\n }\n } catch {\n // ignore background polling errors\n }\n }, 1500);\n\n return () => {\n alive = false;\n if (timer) clearInterval(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const title =\n resolveMarketplaceText(toolRecord.title as any, locale) ||\n readFirstString(requestRecord.tool_name) ||\n t(\"activity.request_detail_title\", undefined, \"Request Details\");\n const artifacts = Array.isArray(dataRecord.artifacts) ? dataRecord.artifacts : [];\n\n function attachArtifactLinks(value: unknown, arts: unknown[]): unknown {\n if (typeof value === \"string\") {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === value);\n if (readString(match?.url)) {\n return {\n filename: readFirstString(match?.filename, value),\n url: readString(match?.url),\n mimeType: readString(match?.mime_type) || undefined,\n };\n }\n }\n if (Array.isArray(value)) {\n return value.map((item) => attachArtifactLinks(item, arts));\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n const record = asRecord(value);\n const filename = readString(record.filename) || null;\n if (filename && !readString(record.url)) {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === filename);\n if (readString(match?.url)) {\n return {\n ...record,\n url: readString(match?.url),\n mimeType: record.mimeType ?? match?.mime_type,\n };\n }\n }\n const next: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n next[key] = attachArtifactLinks(val, arts);\n }\n return next;\n }\n\n if (env?.requestsEnabled === false) {\n const backToX = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToX as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n const responsePayload = useMemo(\n () => attachArtifactLinks(dataRecord.response ?? null, artifacts),\n [dataRecord, artifacts],\n );\n\n const outputSchema = useMemo(() => {\n const schema = toolRecord.output_schema;\n return schema && typeof schema === \"object\" ? asRecord(schema) : null;\n }, [toolRecord]);\n const requestPaymentLock = useMemo(\n () =>\n resolvePaymentLockStateFromGuardSummary(requestRecord.guard_summary ?? null, {\n requestStatus: readFirstString(requestRecord.status),\n paymentStatus: readFirstString(requestRecord.payment_status),\n reconcileState,\n t: (key, fallback) => t(key, undefined, fallback),\n }),\n [requestRecord.guard_summary, reconcileState, t],\n );\n const isPaymentPending =\n String(status || \"\")\n .trim()\n .toUpperCase() === \"PAYMENT_PENDING\";\n const showPaymentWaitState = requestPaymentLock.isLocked || isPaymentPending;\n const eventPaymentSessionId = useMemo(() => {\n const events = Array.isArray(dataRecord.events) ? dataRecord.events : [];\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const candidate = readPaymentSessionIdFromUnknown(getEventPayload(events[index]));\n if (candidate) return candidate;\n }\n return \"\";\n }, [dataRecord.events]);\n const effectivePaymentSessionId =\n readFirstString(\n requestPaymentLock.paymentSessionId,\n requestRecord.payment_session_id,\n requestRecord.paymentSessionId,\n requestPayment.payment_session_id,\n requestPayment.paymentSessionId,\n requestPaymentSummary.payment_session_id,\n requestPaymentSummary.paymentSessionId,\n eventPaymentSessionId,\n ) || \"\";\n const directPaymentUrl =\n readFirstString(\n requestRecord.payment_resume_url,\n requestRecord.paymentResumeUrl,\n requestPayment.resume_url,\n requestPayment.resumeUrl,\n requestPaymentSummary.payment_resume_url,\n requestPaymentSummary.paymentResumeUrl,\n requestPaymentLock.actionUrl,\n ) || \"\";\n const paymentSurfaceHref = (() => {\n if (!effectivePaymentSessionId) return \"\";\n const installationId = readFirstString(requestRecord.installation_id) || undefined;\n if (effectiveXappId) {\n return buildOperationalSurfaceHref({\n surface: \"payments\",\n xappId: effectiveXappId,\n installationId,\n paymentSessionId: effectivePaymentSessionId,\n token: token || undefined,\n isEmbedded,\n });\n }\n const params = new URLSearchParams({\n paymentSessionId: effectivePaymentSessionId,\n ...(installationId ? { installationId } : {}),\n ...(token ? { token } : {}),\n });\n return `${isEmbedded ? \"/payments\" : \"/marketplace/payments\"}?${params.toString()}`;\n })();\n\n function getEventPayload(ev: unknown): unknown | null {\n const eventRecord = asRecord(ev);\n if (!Object.keys(eventRecord).length) return null;\n const keys = [\"data\", \"payload\", \"details\", \"detail\", \"meta\", \"extra\", \"context\"];\n for (const k of keys) {\n const v = eventRecord[k];\n if (v !== undefined) return v;\n }\n const err = asRecord(eventRecord.error);\n if (Object.keys(err).length) {\n if (err.details) return err.details;\n if (err.data) return err.data;\n if (err.meta) return err.meta;\n }\n return null;\n }\n\n function readPaymentSessionIdFromUnknown(value: unknown): string {\n const record = asRecord(value);\n const direct = readFirstString(\n record.payment_session_id,\n record.paymentSessionId,\n asRecord(record.action).payment_session_id,\n asRecord(record.action).paymentSessionId,\n asRecord(record.guard).payment_session_id,\n asRecord(asRecord(record.guard).action).payment_session_id,\n asRecord(asRecord(record.guard).action).paymentSessionId,\n );\n if (direct) return direct;\n const url = readFirstString(\n record.url,\n record.payment_url,\n record.paymentUrl,\n asRecord(record.action).url,\n asRecord(asRecord(record.guard).action).url,\n );\n if (!url) return \"\";\n try {\n const parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n );\n return (\n readFirstString(\n parsed.searchParams.get(\"payment_session_id\"),\n parsed.searchParams.get(\"paymentSessionId\"),\n ) || \"\"\n );\n } catch {\n return \"\";\n }\n }\n\n function extractGuardSummary(payload: unknown): {\n trigger: string;\n outcome: string;\n guardSlug: string;\n reason: string;\n actionKind: string;\n actionUrl: string;\n actionMessage: string;\n } | null {\n const p = asRecord(payload);\n const guard = asRecord(p.guard);\n const topAction = asRecord(p.action);\n const guardAction = asRecord(guard.action);\n const action = Object.keys(topAction).length > 0 ? topAction : guardAction;\n\n const trigger =\n readString(p.trigger) || readString(p.guardTrigger) || readString(p.guard_trigger);\n const outcome =\n readString(p.outcome) || readString(p.guardOutcome) || readString(p.guard_outcome);\n const guardSlug = readString(guard.slug) || readString(p.guardSlug) || readString(p.guard_slug);\n const reason =\n readString(guard.reason) ||\n readString(p.reason) ||\n readString(p.guardReason) ||\n readString(p.guard_reason);\n const actionKind = readString(action.kind);\n const actionUrl = readString(action.url);\n const actionMessage = readString(action.message);\n\n if (!trigger && !outcome && !guardSlug && !reason && !actionKind) return null;\n return { trigger, outcome, guardSlug, reason, actionKind, actionUrl, actionMessage };\n }\n\n function renderGuardActionLabel(summary: ReturnType<typeof extractGuardSummary>): string {\n if (!summary) return \"\";\n const suffix = summary.actionUrl ? ` (${summary.actionUrl})` : \"\";\n if (summary.actionKind === \"upgrade_subscription\") {\n return t(\n \"activity.guard_action_upgrade_subscription\",\n { suffix },\n \"Upgrade subscription{suffix}\",\n );\n }\n if (summary.actionKind === \"complete_payment\") {\n return t(\"activity.guard_action_complete_payment\", { suffix }, \"Complete payment{suffix}\");\n }\n if (summary.actionKind === \"step_up_auth\") {\n return t(\n \"activity.guard_action_step_up_authentication\",\n { suffix },\n \"Complete step-up authentication{suffix}\",\n );\n }\n if (summary.actionKind === \"confirm_action\") {\n return summary.actionMessage\n ? t(\n \"activity.guard_action_confirm_action_message\",\n { message: summary.actionMessage },\n \"Confirm action ({message})\",\n )\n : t(\"activity.guard_action_confirm_action\", undefined, \"Confirm action\");\n }\n return summary.actionKind\n ? t(\"activity.guard_action_custom\", { kind: summary.actionKind }, \"Action: {kind}\")\n : \"\";\n }\n\n function relativeTime(dateValue: unknown): string {\n try {\n const parsed = parseDateValue(dateValue);\n if (!parsed) return \"\";\n const now = Date.now();\n const then = parsed.getTime();\n if (Number.isNaN(then)) return \"\";\n const diff = now - then;\n if (diff < 0) return t(\"common.just_now\", undefined, \"just now\");\n const seconds = Math.floor(diff / 1000);\n if (seconds < 10) return t(\"common.just_now\", undefined, \"just now\");\n if (seconds < 60) return t(\"common.seconds_ago\", { value: seconds }, \"{value}s ago\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"common.minutes_ago\", { value: minutes }, \"{value}m ago\");\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t(\"common.hours_ago\", { value: hours }, \"{value}h ago\");\n const days = Math.floor(hours / 24);\n return t(\"common.days_ago\", { value: days }, \"{value}d ago\");\n } catch {\n return \"\";\n }\n }\n\n const [expandedPayloads, setExpandedPayloads] = useState<Record<number, boolean>>({});\n const [timelineOpen, setTimelineOpen] = useState(false);\n\n function togglePayload(idx: number) {\n setExpandedPayloads((prev) => ({ ...prev, [idx]: !prev[idx] }));\n }\n\n function renderEventPayload(ev: unknown, idx: number) {\n const raw = getEventPayload(ev);\n if (raw == null) return null;\n const enriched = attachArtifactLinks(raw, artifacts);\n const isOpen = expandedPayloads[idx] ?? false;\n return (\n <>\n <button\n className={`mx-event-payload-toggle ${isOpen ? \"is-open\" : \"\"}`}\n onClick={() => togglePayload(idx)}\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n {isOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"activity.show_details\", undefined, \"Show details\")}\n </button>\n {isOpen && (\n <div className=\"mx-event-payload-body\">\n <SchemaOutputView schema={null} value={enriched} />\n </div>\n )}\n </>\n );\n }\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n async function continuePayment() {\n if (client.reconcileMyRequestPayment && isPaymentPending) {\n setReconcileError(null);\n setReconcileState(\"confirming_payment\");\n setReconcileBusy(true);\n try {\n const hostReturnUrl = readHostReturnUrl(loc.search);\n const currentReturnUrl = String(\n hostReturnUrl || (typeof window !== \"undefined\" ? window.location.href : \"\") || \"\",\n ).trim();\n const res = await client.reconcileMyRequestPayment({\n requestId: String(id),\n paymentSessionId: effectivePaymentSessionId || undefined,\n returnUrl: currentReturnUrl || undefined,\n cancelUrl: currentReturnUrl || undefined,\n });\n setReconcileState(res?.finality_state || \"none\");\n const redirectUrl = String(res?.redirect_url || \"\").trim();\n if (redirectUrl) {\n navigateToExternalOrHost(redirectUrl);\n return;\n }\n await refreshOnce();\n return;\n } catch (e) {\n setReconcileError(readFirstString(asRecord(e).message) || String(e));\n setReconcileState(\"failed\");\n return;\n } finally {\n setReconcileBusy(false);\n }\n }\n\n if (directPaymentUrl) {\n navigateToExternalOrHost(directPaymentUrl);\n return;\n }\n if (paymentSurfaceHref) {\n void navigate(paymentSurfaceHref);\n }\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {env?.singleXappMode && !env?.embedMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {xappTo && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !env?.embedMode)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappTo}>{xappCrumbLabel}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToRequests as any}>\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span className=\"mx-cell-mono\">{id?.slice(0, 8)}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {t(\"activity.request_detail_title\", undefined, \"Request Details\")}\n </h1>\n <div className=\"mx-header-actions\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refreshOnce()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {busy && !data ? (\n <div className=\"mx-request-detail-skeleton\">\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-meta-grid\">\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n </div>\n </div>\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ) : (\n <div className=\"mx-detail-grid\">\n <div className=\"mx-detail-main\">\n <section className=\"mx-table-container mx-request-section\">\n <div className=\"mx-request-section-head\">\n <div>\n <h2 className=\"mx-title mx-request-section-title\">{title}</h2>\n <div className=\"mx-request-meta-row\">\n <span>{effectiveXappTitle || \"\u2014\"}</span>\n {readString(requestRecord.xapp_version) && (\n <>\n <span>\u00B7</span>\n <span>v{readString(requestRecord.xapp_version)}</span>\n </>\n )}\n </div>\n </div>\n <StatusBadge status={status ?? \"\"} />\n </div>\n\n <div className=\"mx-request-meta-grid\">\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.request_id\", undefined, \"Request ID\")}\n </span>\n <code className=\"mx-request-code\">{id}</code>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.tool\", undefined, \"Tool\")}</span>\n <span className=\"mx-meta-value\">\n {title || readFirstString(requestRecord.tool_name) || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.created\", undefined, \"Created\")}</span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.created_at) || \"\u2014\"}\n </span>\n </div>\n {readString(requestRecord.completed_at) && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.completed\", undefined, \"Completed\")}\n </span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.completed_at) || \"\u2014\"}\n </span>\n </div>\n )}\n </div>\n </section>\n\n <section className=\"mx-table-container mx-request-section\">\n <h3 className=\"mx-section-title mx-section-title-md\">\n {t(\"activity.response_title\", undefined, \"Response\")}\n </h3>\n {showPaymentWaitState ? (\n <div className=\"mx-payment-lock-banner\">\n <div className=\"mx-payment-lock-title\">\n {isPaymentPending\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : t(\"activity.payment_required\", undefined, \"Payment Required\")}\n </div>\n <div className=\"mx-payment-lock-message\">\n {requestPaymentLock.isLocked\n ? requestPaymentLock.message\n : t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n <div className=\"mx-payment-lock-actions\">\n {isPaymentPending ||\n effectivePaymentSessionId ||\n directPaymentUrl ||\n paymentSurfaceHref ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n onClick={() => void continuePayment()}\n disabled={reconcileBusy}\n >\n {t(\"activity.complete_payment\", undefined, \"Complete Payment\")}\n </button>\n ) : null}\n <button className=\"mx-btn mx-btn-secondary\" onClick={() => void refreshOnce()}>\n {t(\"activity.refresh_status\", undefined, \"Refresh Status\")}\n </button>\n </div>\n {reconcileError ? (\n <div className=\"mx-payment-lock-error\">{reconcileError}</div>\n ) : null}\n </div>\n ) : null}\n {!isTerminal ? (\n showPaymentWaitState ? (\n <div className=\"mx-waiting-state\">\n {t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n ) : (\n <div className=\"mx-waiting-state\">\n {t(\"activity.waiting_for_response\", undefined, \"Waiting for response\u2026\")}\n </div>\n )\n ) : (\n <SchemaOutputView schema={outputSchema} value={responsePayload} />\n )}\n </section>\n\n {Array.isArray(dataRecord.events) &&\n dataRecord.events.length > 0 &&\n (() => {\n const evts = dataRecord.events;\n const classifyEvent = (ev: unknown) => {\n const t = readString(asRecord(ev).type).toLowerCase();\n if (t.includes(\"fail\") || t.includes(\"error\") || t.includes(\"exception\"))\n return \"error\";\n if (t.includes(\"warn\") || t.includes(\"retry\")) return \"warn\";\n if (t.includes(\"complet\") || t.includes(\"success\") || t.includes(\"done\"))\n return \"success\";\n return \"default\";\n };\n const errorCount = evts.filter((e) => classifyEvent(e) === \"error\").length;\n const successCount = evts.filter((e) => classifyEvent(e) === \"success\").length;\n const firstTs = parseDateValue(asRecord(evts[0]).created_at);\n const lastTs = parseDateValue(asRecord(evts[evts.length - 1]).created_at);\n let durationLabel = \"\";\n if (firstTs && lastTs) {\n const ms = Math.abs(lastTs.getTime() - firstTs.getTime());\n if (ms < 1000) {\n durationLabel = t(\"activity.timeline_duration_ms\", { value: ms }, \"{value}ms\");\n } else if (ms < 60_000) {\n durationLabel = t(\n \"activity.timeline_duration_seconds\",\n { value: (ms / 1000).toFixed(1) },\n \"{value}s\",\n );\n } else {\n durationLabel = t(\n \"activity.timeline_duration_minutes\",\n { value: (ms / 60_000).toFixed(1) },\n \"{value}m\",\n );\n }\n }\n return (\n <section className=\"mx-table-container mx-request-section\">\n <button\n type=\"button\"\n className=\"mx-timeline-toggle\"\n onClick={() => setTimelineOpen((v) => !v)}\n aria-expanded={timelineOpen}\n >\n <svg\n className={`mx-timeline-chevron ${timelineOpen ? \"is-open\" : \"\"}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <div className=\"mx-timeline-toggle-content\">\n <div className=\"mx-timeline-toggle-top\">\n <h3 className=\"mx-section-title mx-section-title-md mx-section-title-tight\">\n {t(\"activity.execution_timeline\", undefined, \"Execution Timeline\")}\n </h3>\n <span className=\"mx-timeline-count\">\n {evts.length === 1\n ? t(\n \"activity.timeline_count_one\",\n { count: evts.length },\n \"{count} event\",\n )\n : t(\n \"activity.timeline_count_other\",\n { count: evts.length },\n \"{count} events\",\n )}\n </span>\n </div>\n {!timelineOpen && (\n <div className=\"mx-timeline-summary\">\n <div className=\"mx-timeline-dots\">\n {evts.map((ev, i: number) => (\n <span\n key={i}\n className={`mx-timeline-mini-dot mx-timeline-mini-dot-${classifyEvent(ev)}`}\n />\n ))}\n </div>\n <div className=\"mx-timeline-summary-stats\">\n {errorCount > 0 && (\n <span className=\"mx-timeline-stat mx-timeline-stat-error\">\n {errorCount === 1\n ? t(\n \"activity.timeline_error_count_one\",\n { count: errorCount },\n \"{count} error\",\n )\n : t(\n \"activity.timeline_error_count_other\",\n { count: errorCount },\n \"{count} errors\",\n )}\n </span>\n )}\n {durationLabel && (\n <span className=\"mx-timeline-stat mx-timeline-stat-duration\">\n {durationLabel}\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n </button>\n {timelineOpen && (\n <ol className=\"mx-timeline\">\n {dataRecord.events.map((ev, idx: number) => {\n const eventRecord = asRecord(ev);\n const typeText =\n readFirstString(eventRecord.type) ||\n t(\"activity.event_fallback\", undefined, \"event\");\n const lower = typeText.toLowerCase();\n const isErr =\n lower.includes(\"fail\") ||\n lower.includes(\"error\") ||\n lower.includes(\"exception\");\n const isWarn = lower.includes(\"warn\") || lower.includes(\"retry\");\n const isComplete =\n lower.includes(\"complet\") ||\n lower.includes(\"success\") ||\n lower.includes(\"done\");\n\n const dotClass = isErr\n ? \"mx-timeline-dot-error\"\n : isWarn\n ? \"mx-timeline-dot-warn\"\n : isComplete\n ? \"mx-timeline-dot-success\"\n : \"mx-timeline-dot-default\";\n\n const progress =\n typeof eventRecord.progress === \"number\" ? eventRecord.progress : null;\n const guardSummary =\n extractGuardSummary(ev) ??\n extractGuardSummary(getEventPayload(ev)) ??\n extractGuardSummary(eventRecord.payload);\n const guardActionLabel = renderGuardActionLabel(guardSummary);\n\n return (\n <li\n key={readFirstString(eventRecord.id) || String(idx)}\n className=\"mx-timeline-item\"\n >\n <div className={`mx-timeline-dot ${dotClass}`}>\n {isErr ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : isComplete ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : isWarn ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ) : null}\n </div>\n <div\n className={`mx-event-card ${isErr ? \"mx-event-card-error\" : isWarn ? \"mx-event-card-warn\" : \"\"}`}\n >\n <div className=\"mx-event-head\">\n <div\n className={`mx-event-type ${isErr ? \"mx-event-type-error\" : isWarn ? \"mx-event-type-warn\" : \"\"}`}\n >\n {typeText}\n {readString(eventRecord.code) && (\n <span className=\"mx-event-code\">\n {readString(eventRecord.code)}\n </span>\n )}\n </div>\n <div className=\"mx-event-time\">\n <div className=\"mx-event-date\">\n {formatDateTime(eventRecord.created_at)}\n </div>\n {parseDateValue(eventRecord.created_at) && (\n <div className=\"mx-event-relative\">\n {relativeTime(eventRecord.created_at)}\n </div>\n )}\n </div>\n </div>\n\n {readString(eventRecord.message) && (\n <div className=\"mx-event-message\">\n {readString(eventRecord.message)}\n </div>\n )}\n\n {guardSummary && (\n <div className=\"mx-event-guard\">\n <div className=\"mx-event-guard-badges\">\n {guardSummary.guardSlug && (\n <span className=\"mx-badge\">\n {t(\n \"activity.guard_badge\",\n { value: guardSummary.guardSlug },\n \"guard: {value}\",\n )}\n </span>\n )}\n {guardSummary.trigger && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.trigger_badge\",\n { value: guardSummary.trigger },\n \"trigger: {value}\",\n )}\n </span>\n )}\n {guardSummary.outcome && (\n <span className=\"mx-badge mx-badge-success\">\n {t(\n \"activity.outcome_badge\",\n { value: guardSummary.outcome },\n \"outcome: {value}\",\n )}\n </span>\n )}\n </div>\n {(guardSummary.reason || guardActionLabel) && (\n <div className=\"mx-event-guard-detail\">\n {guardSummary.reason\n ? t(\n \"activity.reason_detail\",\n { value: guardSummary.reason },\n \"reason={value}\",\n )\n : \"\"}\n {guardSummary.reason && guardActionLabel ? \" \u00B7 \" : \"\"}\n {guardActionLabel}\n </div>\n )}\n </div>\n )}\n\n {progress != null && (\n <div className=\"mx-event-progress-track\">\n <div\n className={`mx-event-progress-bar ${isErr ? \"mx-event-progress-error\" : \"mx-event-progress-default\"}`}\n style={{\n width: `${Math.max(0, Math.min(100, progress <= 1 ? progress * 100 : progress))}%`,\n }}\n />\n </div>\n )}\n\n {renderEventPayload(ev, idx)}\n </div>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n );\n })()}\n </div>\n\n <aside className=\"mx-detail-sidebar\">\n {artifacts.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.artifacts_title\", undefined, \"Artifacts\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {artifacts.map((a) => {\n const artifact = asRecord(a);\n return (\n <a\n key={readFirstString(artifact.id, artifact.url, artifact.filename)}\n href={readFirstString(artifact.url) || \"#\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-sidebar-artifact-link\"\n >\n {readFirstString(artifact.filename) ||\n t(\"activity.download_artifact\", undefined, \"Download Artifact\")}\n </a>\n );\n })}\n </div>\n </div>\n )}\n\n {readString(requestRecord.installation_id) &&\n Array.isArray(dataRecord.widgets) &&\n dataRecord.widgets.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.related_widgets_title\", undefined, \"Related Widgets\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {(Array.isArray(dataRecord.widgets) ? dataRecord.widgets : []).map((w) => {\n const widget = asRecord(w);\n return (\n <button\n key={readFirstString(widget.id)}\n className=\"mx-btn mx-btn-primary mx-btn-sidebar\"\n onClick={() => {\n const installationId = readFirstString(requestRecord.installation_id);\n const widgetId = readFirstString(widget.id);\n const widgetName =\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\");\n if (!installationId || !widgetId) return;\n\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId,\n widgetId,\n xappId: readString(requestRecord.xapp_id),\n xappTitle: effectiveXappTitle,\n widgetName,\n toolName: readString(requestRecord.tool_name),\n });\n }}\n >\n {t(\n \"activity.open_widget\",\n {\n widget:\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n },\n `Open ${\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\")\n }`,\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.help_title\", undefined, \"Help\")}\n </h3>\n <p className=\"mx-sidebar-help-text\">\n {t(\n \"activity.help_request\",\n undefined,\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n )}\n </p>\n <Link to={backToRequests as any} className=\"mx-btn mx-btn-outline mx-btn-sidebar\">\n {t(\"activity.back_to_requests\", undefined, \"Back to Requests\")}\n </Link>\n </div>\n </aside>\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\n\ntype JsonSchema = Record<string, unknown> | null;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction isPrimitive(value: unknown) {\n return value == null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\nfunction asArtifactLink(\n value: unknown,\n): { filename?: string; url: string; mimeType?: string } | null {\n const record = asRecord(value);\n if (typeof record.url === \"string\") {\n return {\n filename: typeof record.filename === \"string\" ? record.filename : undefined,\n url: record.url,\n mimeType: typeof record.mimeType === \"string\" ? record.mimeType : undefined,\n };\n }\n return null;\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div style={{ display: \"grid\", gap: 6, padding: \"8px 0\", borderBottom: \"1px solid #f3f4f6\" }}>\n <div style={{ fontSize: 12, color: \"#6b7280\" }}>{label}</div>\n <div>{children}</div>\n </div>\n );\n}\n\nfunction renderValue(schema: JsonSchema | undefined, value: unknown): React.ReactNode {\n const artifact = asArtifactLink(value);\n if (artifact) {\n return (\n <a href={artifact.url} target=\"_blank\" rel=\"noreferrer\">\n {artifact.filename ?? artifact.url}\n </a>\n );\n }\n\n if (isPrimitive(value)) {\n return (\n <code style={{ fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\" }}>\n {String(value)}\n </code>\n );\n }\n\n if (Array.isArray(value)) {\n const itemSchema = asRecord(schema?.items);\n return (\n <div style={{ display: \"grid\", gap: 8 }}>\n {value.map((v, idx) => (\n <div key={idx} style={{ padding: 10, border: \"1px solid #e5e7eb\", borderRadius: 10 }}>\n {renderValue(itemSchema, v)}\n </div>\n ))}\n </div>\n );\n }\n\n // object\n const props = asRecord(schema?.properties);\n const valueRecord = asRecord(value);\n const keys = Object.keys(props).length ? Object.keys(props) : Object.keys(valueRecord);\n return (\n <div>\n {keys.map((k) => (\n <Field key={k} label={asRecord(props[k]).title ? String(asRecord(props[k]).title) : k}>\n {renderValue(asRecord(props[k]), valueRecord[k])}\n </Field>\n ))}\n </div>\n );\n}\n\nexport function SchemaOutputView({ schema, value }: { schema: JsonSchema; value: unknown }) {\n if (!schema) {\n return (\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n background: \"#f8fafc\",\n padding: 12,\n borderRadius: 12,\n }}\n >\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n }\n\n return <div>{renderValue(schema, value)}</div>;\n}\n", "export type PaymentReconcileState =\n | \"none\"\n | \"confirming_payment\"\n | \"still_pending\"\n | \"confirmed_paid\"\n | \"failed\";\n\nexport type PaymentLockResolution = {\n isLocked: boolean;\n reason: string;\n actionKind: string;\n actionUrl: string;\n ctaLabel: string;\n message: string;\n paymentSessionId: string | null;\n paymentAttemptState: string;\n reconcileState: PaymentReconcileState;\n monetizationState: Record<string, unknown> | null;\n};\n\ntype PaymentLockTranslate = (key: string, fallback: string) => string;\ntype PaymentLockOptions = {\n reconcileState?: PaymentReconcileState | null;\n requestStatus?: string | null;\n paymentStatus?: string | null;\n t?: PaymentLockTranslate;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction resolveAction(summary: Record<string, unknown>): Record<string, unknown> {\n const topAction = asRecord(summary.action);\n if (Object.keys(topAction).length > 0) return topAction;\n const details = asRecord(summary.details);\n const detailsAction = asRecord(details.action);\n if (Object.keys(detailsAction).length > 0) return detailsAction;\n const guard = asRecord(summary.guard);\n const guardAction = asRecord(guard.action);\n if (Object.keys(guardAction).length > 0) return guardAction;\n return {};\n}\n\nfunction normalizeActionKind(raw: string): string {\n return readString(raw).toLowerCase();\n}\n\nfunction resolveText(t: PaymentLockTranslate | undefined, key: string, fallback: string): string {\n return typeof t === \"function\" ? t(key, fallback) : fallback;\n}\n\nfunction isSettledPaymentStatus(value: unknown): boolean {\n const normalized = readString(value).toLowerCase();\n return (\n normalized === \"paid\" ||\n normalized === \"settled\" ||\n normalized === \"succeeded\" ||\n normalized === \"completed\"\n );\n}\n\nfunction resolveCtaLabel(actionKind: string, t?: PaymentLockTranslate): string {\n if (actionKind === \"complete_payment\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n if (actionKind === \"payment_required\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n return resolveText(t, \"payment_lock.continue\", \"Continue\");\n}\n\nfunction resolveLockMessage(\n reason: string,\n paymentAttemptState: string,\n reconcileState: PaymentReconcileState,\n t?: PaymentLockTranslate,\n): string {\n if (reconcileState === \"confirming_payment\") {\n return resolveText(\n t,\n \"payment_lock.confirming_payment_finality\",\n \"Confirming payment finality with provider.\",\n );\n }\n if (reconcileState === \"still_pending\") {\n return resolveText(\n t,\n \"payment_lock.pending_retry_confirm\",\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n );\n }\n if (reconcileState === \"confirmed_paid\") {\n return resolveText(\n t,\n \"payment_lock.confirmed_refresh\",\n \"Payment is confirmed. Refresh to continue.\",\n );\n }\n if (reconcileState === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.not_settled_new_attempt\",\n \"Payment is not settled. Complete a new payment attempt.\",\n );\n }\n const attempt = readString(paymentAttemptState).toLowerCase();\n if (attempt === \"requires_action\") {\n return resolveText(\n t,\n \"payment_lock.requires_additional_action\",\n \"Payment requires additional action. Complete payment to continue.\",\n );\n }\n if (attempt === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.attempt_failed\",\n \"Last payment attempt failed. Complete payment to continue.\",\n );\n }\n if (attempt === \"replayed\") {\n return resolveText(\n t,\n \"payment_lock.evidence_used\",\n \"Payment evidence was already used. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_receipt_already_used\") {\n return resolveText(\n t,\n \"payment_lock.evidence_consumed\",\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_evidence_missing\" || reason === \"payment_required\") {\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n }\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n}\n\nexport function resolvePaymentLockStateFromGuardSummary(\n summaryInput: unknown,\n options?: PaymentLockOptions,\n): PaymentLockResolution {\n const summary = asRecord(summaryInput);\n const action = resolveAction(summary);\n const actionKind = normalizeActionKind(String(action.kind ?? summary.reason ?? \"\"));\n const actionUrl = readString(action.url);\n const reason = readString(summary.reason).toLowerCase();\n const monetizationState = asRecord(summary.monetization_state);\n const paymentSessionId =\n readString(monetizationState.payment_session_id) || readString(action.payment_session_id);\n const paymentAttemptState = readString(monetizationState.payment_attempt_state).toLowerCase();\n const reconcileState = ((): PaymentReconcileState => {\n const candidate = readString(options?.reconcileState).toLowerCase();\n if (\n candidate === \"confirming_payment\" ||\n candidate === \"still_pending\" ||\n candidate === \"confirmed_paid\" ||\n candidate === \"failed\"\n ) {\n return candidate;\n }\n return \"none\";\n })();\n const isPaymentKind = actionKind === \"complete_payment\" || actionKind === \"payment_required\";\n const isPaymentReason =\n reason === \"payment_required\" ||\n reason === \"payment_evidence_missing\" ||\n reason === \"payment_receipt_already_used\";\n const requestStatus = readString(options?.requestStatus).toUpperCase();\n const paymentSettled = isSettledPaymentStatus(options?.paymentStatus);\n const isHeldForPayment = requestStatus === \"PAYMENT_PENDING\";\n const isResolvedPastHold = paymentSettled && requestStatus !== \"\" && !isHeldForPayment;\n const isLocked = !isResolvedPastHold && (isPaymentKind || isPaymentReason);\n\n return {\n isLocked,\n reason,\n actionKind,\n actionUrl,\n ctaLabel: resolveCtaLabel(actionKind, options?.t),\n message: resolveLockMessage(reason, paymentAttemptState, reconcileState, options?.t),\n paymentSessionId: paymentSessionId || null,\n paymentAttemptState: paymentAttemptState || \"unknown\",\n reconcileState,\n monetizationState: Object.keys(monetizationState).length > 0 ? monetizationState : null,\n };\n}\n", "import type {\n CatalogXappDetail,\n MarketplaceClient,\n MarketplaceEnv,\n OperationalSurfacePlacement,\n OperationalSurfacesDescriptor,\n} from \"../types\";\n\nexport type OperationalSurfaceKey = keyof OperationalSurfacesDescriptor;\n\nfunction readPathEmbedded(): boolean {\n return typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n}\n\nexport function getOperationalSurfaces(\n detail: CatalogXappDetail | null | undefined,\n): OperationalSurfacesDescriptor | null {\n const value = detail?.operational_surfaces;\n if (!value || typeof value !== \"object\") return null;\n return value;\n}\n\nfunction readOperationalSurfaceMode(input: {\n env?: MarketplaceEnv;\n isEmbedded: boolean;\n}): \"contract\" | \"testing_all\" {\n const policy = input.env?.operationalSurfacesVisibility;\n return input.isEmbedded ? (policy?.embed ?? \"contract\") : (policy?.portal ?? \"contract\");\n}\n\nexport function isOperationalSurfaceVisible(\n detail: CatalogXappDetail | null | undefined,\n surface: OperationalSurfaceKey,\n options?: { isEmbedded?: boolean },\n): boolean {\n const surfaces = getOperationalSurfaces(detail);\n const descriptor = surfaces?.[surface];\n if (!descriptor?.enabled) return false;\n const isEmbedded = options?.isEmbedded ?? readPathEmbedded();\n return isEmbedded ? descriptor.visibility.embed : descriptor.visibility.portal;\n}\n\nexport function surfaceClientAvailable(\n client: MarketplaceClient,\n surface: OperationalSurfaceKey,\n): boolean {\n if (surface === \"requests\") return typeof client.listMyRequests === \"function\";\n if (surface === \"payments\") return typeof client.listMyPaymentSessions === \"function\";\n if (surface === \"invoices\") return typeof client.listMyInvoices === \"function\";\n if (surface === \"notifications\") return typeof client.listMyNotifications === \"function\";\n return false;\n}\n\nexport function buildOperationalSurfaceHref(input: {\n surface: OperationalSurfaceKey;\n xappId: string;\n installationId?: string;\n requestId?: string;\n paymentSessionId?: string;\n invoiceId?: string;\n notificationId?: string;\n token?: string;\n isEmbedded?: boolean;\n}): string {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.installationId ? { installationId: input.installationId } : {}),\n ...(input.paymentSessionId ? { paymentSessionId: input.paymentSessionId } : {}),\n ...(input.invoiceId ? { invoiceId: input.invoiceId } : {}),\n ...(input.notificationId ? { notificationId: input.notificationId } : {}),\n ...(input.token ? { token: input.token } : {}),\n });\n const base = isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`;\n const detailSegment =\n input.surface === \"requests\" && input.requestId\n ? `/${encodeURIComponent(input.requestId)}`\n : \"\";\n return `${base}${detailSegment}?${params.toString()}`;\n}\n\nexport function getVisibleOperationalSurfaces(input: {\n detail: CatalogXappDetail | null | undefined;\n client: MarketplaceClient;\n env?: MarketplaceEnv;\n isEmbedded?: boolean;\n}): OperationalSurfaceKey[] {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const mode = readOperationalSurfaceMode({\n env: input.env,\n isEmbedded,\n });\n const allSurfaces = [\n \"requests\",\n \"payments\",\n \"invoices\",\n \"notifications\",\n ] as OperationalSurfaceKey[];\n if (mode === \"testing_all\") {\n return allSurfaces.filter((surface) => {\n if (surface === \"requests\" && input.env?.requestsEnabled === false) return false;\n return surfaceClientAvailable(input.client, surface);\n });\n }\n const surfaces = getOperationalSurfaces(input.detail);\n if (!surfaces) return [];\n return allSurfaces.filter(\n (surface) =>\n surfaceClientAvailable(input.client, surface) &&\n isOperationalSurfaceVisible(input.detail, surface, { isEmbedded }),\n );\n}\n\nexport function getOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"requests\") return \"Requests\";\n if (surface === \"payments\") return \"Payments\";\n if (surface === \"invoices\") return \"Invoices\";\n return \"Notifications\";\n}\n\nexport function resolveOperationalSurfacePlacement(input: {\n env?: MarketplaceEnv;\n surface: OperationalSurfaceKey;\n isEmbedded?: boolean;\n}): OperationalSurfacePlacement {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const policy = input.env?.operationalSurfacePlacement;\n const scopePolicy = isEmbedded ? policy?.embed : policy?.portal;\n const bySurface = scopePolicy?.bySurface?.[input.surface];\n if (bySurface) return bySurface;\n return scopePolicy?.default ?? \"in_router\";\n}\n\nexport async function discoverOperationalSurfaceData(input: {\n client: MarketplaceClient;\n xappId: string;\n installationId?: string | null;\n}): Promise<OperationalSurfaceKey[]> {\n const xappId = String(input.xappId || \"\").trim();\n const installationId = String(input.installationId || \"\").trim();\n if (!xappId) return [];\n\n const queryBase = {\n xappId,\n ...(installationId ? { installationId } : {}),\n };\n\n const checks = await Promise.all([\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyPaymentSessions !== \"function\") return null;\n try {\n const res = await input.client.listMyPaymentSessions({\n ...queryBase,\n limit: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"payments\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyInvoices !== \"function\") return null;\n try {\n const res = await input.client.listMyInvoices({\n ...queryBase,\n page: 1,\n pageSize: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"invoices\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyNotifications !== \"function\") return null;\n try {\n const res = await input.client.listMyNotifications({\n ...queryBase,\n limit: 1,\n });\n return (Array.isArray(res?.items) && res.items.length > 0) ||\n Number(res?.unread_count || 0) > 0\n ? \"notifications\"\n : null;\n } catch {\n return null;\n }\n })(),\n ]);\n\n return checks.filter((surface): surface is OperationalSurfaceKey => Boolean(surface));\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype RequestListPagination = {\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction renderGuardActionHint(summary: Record<string, unknown>): string {\n const action = asRecord(summary.action);\n const kind = readString(action.kind);\n if (kind === \"upgrade_subscription\") return \"Upgrade subscription\";\n if (kind === \"complete_payment\") return \"Complete payment\";\n if (kind === \"step_up_auth\") return \"Complete step-up authentication\";\n if (kind === \"confirm_action\") {\n const msg = readString(action.message);\n return msg ? `Confirm action (${msg})` : \"Confirm action\";\n }\n return kind ? `Action: ${kind}` : \"\";\n}\n\nexport function RequestsPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n\n const [items, setItems] = useState<unknown[]>([]);\n const [pagination, setPagination] = useState<RequestListPagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n\n async function refresh(page: number = 1) {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyRequests({\n xappId: xappIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res.items) ? res.items : []);\n setPagination(\n res.pagination\n ? {\n total: Number(res.pagination.total || 0),\n page: Number(res.pagination.page || 1),\n pageSize: Number(res.pagination.pageSize || 20),\n totalPages: Number(res.pagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"requests\",\n params: { xappId: xappIdFilter },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [xappIdFilter, pageParam]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n const detail = asRecord(res);\n const name =\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name);\n if (!alive) return;\n setXappTitle(name);\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n\n return () => {\n alive = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, xappIdFilter]);\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const backToContext =\n xappIdFilter && xappLink\n ? xappLink\n : {\n pathname: isEmbedded ? \"\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const clearHref = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n if (env?.requestsEnabled === false) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToContext as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {env?.singleXappMode && !isEmbedded && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {xappIdFilter && xappLink && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !isEmbedded)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappLink as any}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.requests_title\", undefined, \"Requests\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.requests_title\", undefined, \"Requests\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"requests\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_requests_for_prefix\", undefined, \"Showing requests for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || String(xappIdFilter)}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || String(xappIdFilter)}</span>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.id\", undefined, \"ID\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.version\", undefined, \"Version\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={5}\n data-label={t(\"common.status\", undefined, \"Status\")}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_requests\", undefined, \"Loading requests...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_requests\", undefined, \"No requests yet.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((r) => {\n const request = asRecord(r);\n const manifest = asRecord(request.manifest);\n const href = {\n pathname: `./${encodeURIComponent(readFirstString(request.id))}`,\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n }).toString()}`,\n };\n\n const tags: string[] = Array.isArray(manifest.tags)\n ? manifest.tags\n .filter((t) => typeof t === \"string\" && t.trim())\n .map((t) => String(t).trim())\n : [];\n const guardSummary = asRecord(request.guard_summary);\n const guardSlug =\n readString(guardSummary.slug) || readString(guardSummary.guardSlug);\n const guardReason = readString(guardSummary.reason);\n const guardOutcome = readString(guardSummary.outcome);\n const guardActionHint = renderGuardActionHint(guardSummary);\n const hasGuardInfo =\n Boolean(guardSlug) || Boolean(guardReason) || Boolean(guardActionHint);\n\n return (\n <tr key={readFirstString(request.id)}>\n <td className=\"mx-cell-id\" data-label={t(\"common.id\", undefined, \"ID\")}>\n <Link to={href as any}>{readFirstString(request.id).slice(0, 8)}...</Link>\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n <div className=\"mx-cell-bold\">\n {resolveMarketplaceText(request.tool_title as any, locale) ||\n readFirstString(request.tool_name) ||\n \"\u2014\"}\n </div>\n {tags.length > 0 && (\n <div className=\"mx-card-tags mx-card-tags-inline\">\n {tags.slice(0, 3).map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n )}\n {hasGuardInfo && (\n <div className=\"mx-guard-summary\">\n <div>\n {guardSlug ? `guard=${guardSlug}` : \"\"}\n {guardSlug && guardOutcome ? \" \u00B7 \" : \"\"}\n {guardOutcome ? `outcome=${guardOutcome}` : \"\"}\n {(guardSlug || guardOutcome) && guardReason ? \" \u00B7 \" : \"\"}\n {guardReason ? `reason=${guardReason}` : \"\"}\n </div>\n {guardActionHint && <div>{guardActionHint}</div>}\n </div>\n )}\n </td>\n <td\n className=\"mx-cell-muted\"\n data-label={t(\"common.version\", undefined, \"Version\")}\n >\n {readString(request.xapp_version)\n ? `v${readString(request.xapp_version)}`\n : \"\u2014\"}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(request.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(request.created_at) || \"\u2014\"}\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.max(1, pageParam - 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam <= 1 || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </Link>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.min(pagination.totalPages, pageParam + 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam >= pagination.totalPages || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </Link>\n </div>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport type { TranslateFunction } from \"@xapps-platform/platform-i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getVisibleOperationalSurfaces,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport type { CatalogXappDetail } from \"../types\";\nimport \"../marketplace.css\";\n\ntype GuardInfo = {\n slug: string;\n trigger: string;\n headless: boolean;\n blocking: boolean;\n order: number | null;\n policyKind: string;\n};\n\ntype UsageCreditToolSummary = {\n tool_name: string;\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n};\n\ntype UsageCreditSummary = {\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n updated_at: string | null;\n by_tool: UsageCreditToolSummary[];\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQueryAction(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"action\") ?? \"\";\n}\n\nfunction useQueryToolName(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"toolName\") ?? qs.get(\"tool_name\") ?? \"\";\n}\n\nfunction buildRequestsHref(input: { xappId: string; token?: string; isEmbedded: boolean }): string {\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.token ? { token: input.token } : {}),\n });\n const s = params.toString();\n\n // IMPORTANT: Navigate from `xapps/:xappId` to the sibling `requests` route.\n // In Portal, this is sibling. In Embed, we want absolute path to be safe.\n if (input.isEmbedded) return `/requests?${s}`;\n return `/marketplace/requests?${s}`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction readBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction normalizeUsageCreditSummary(value: unknown): UsageCreditSummary | null {\n const summary = asRecord(value);\n if (!summary) return null;\n const availableCount = readNumber(summary.available_count) ?? 0;\n const availableSessionBackedCount = readNumber(summary.available_session_backed_count) ?? 0;\n const availableLedgerOnlyCount = readNumber(summary.available_ledger_only_count) ?? 0;\n const reservedCount = readNumber(summary.reserved_count) ?? 0;\n const reservedActiveCount = readNumber(summary.reserved_active_count) ?? reservedCount;\n const reservedStaleCount = readNumber(summary.reserved_stale_count) ?? 0;\n const consumedCount = readNumber(summary.consumed_count) ?? 0;\n const byToolRaw = Array.isArray(summary.by_tool) ? summary.by_tool : [];\n const byTool = byToolRaw\n .map((entry): UsageCreditToolSummary | null => {\n const record = asRecord(entry);\n if (!record) return null;\n const toolName = readString(record.tool_name);\n if (!toolName) return null;\n return {\n tool_name: toolName,\n available_count: readNumber(record.available_count) ?? 0,\n available_session_backed_count: readNumber(record.available_session_backed_count) ?? 0,\n available_ledger_only_count: readNumber(record.available_ledger_only_count) ?? 0,\n reserved_count: readNumber(record.reserved_count) ?? 0,\n reserved_active_count:\n readNumber(record.reserved_active_count) ?? readNumber(record.reserved_count) ?? 0,\n reserved_stale_count: readNumber(record.reserved_stale_count) ?? 0,\n consumed_count: readNumber(record.consumed_count) ?? 0,\n };\n })\n .filter((entry): entry is UsageCreditToolSummary => Boolean(entry))\n .filter(\n (entry) =>\n entry.available_count > 0 ||\n entry.available_ledger_only_count > 0 ||\n entry.reserved_active_count > 0 ||\n entry.reserved_stale_count > 0,\n );\n if (\n availableCount <= 0 &&\n availableLedgerOnlyCount <= 0 &&\n reservedCount <= 0 &&\n consumedCount <= 0 &&\n byTool.length === 0\n ) {\n return null;\n }\n return {\n available_count: availableCount,\n available_session_backed_count: availableSessionBackedCount,\n available_ledger_only_count: availableLedgerOnlyCount,\n reserved_count: reservedCount,\n reserved_active_count: reservedActiveCount,\n reserved_stale_count: reservedStaleCount,\n consumed_count: consumedCount,\n updated_at: readString(summary.updated_at) || null,\n by_tool: byTool,\n };\n}\n\nfunction normalizeGuardPolicyKind(policy: unknown): string {\n if (policy === \"all\" || policy === \"any\") return policy;\n const policyObj = asRecord(policy);\n const mode = readString(policyObj?.mode);\n return mode === \"any\" ? \"any\" : \"all\";\n}\n\nfunction defaultBlockingForTrigger(trigger: string): boolean {\n return !trigger.startsWith(\"after:\");\n}\n\nfunction humanizeSlug(slug: string): string {\n return String(slug || \"\")\n .trim()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction humanizeTrigger(trigger: string, translate: TranslateFunction): string {\n const normalized = String(trigger || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"before:tool_run\") {\n return translate(\"xapp.trigger_before_tool_run\", undefined, \"Before running this app\");\n }\n if (normalized === \"after:tool_run\") {\n return translate(\"xapp.trigger_after_tool_run\", undefined, \"After this app finishes\");\n }\n if (normalized === \"before:widget_open\") {\n return translate(\"xapp.trigger_before_widget_open\", undefined, \"Before opening this app\");\n }\n if (normalized === \"after:widget_open\") {\n return translate(\"xapp.trigger_after_widget_open\", undefined, \"After opening this app\");\n }\n if (!normalized) return translate(\"xapp.trigger_default\", undefined, \"App stage\");\n return humanizeSlug(normalized.replace(/:/g, \" \"));\n}\n\nfunction describeGuardChain(policyKind: string, translate: TranslateFunction): string {\n return policyKind === \"any\"\n ? translate(\"xapp.policy_any\", undefined, \"Any one satisfies\")\n : translate(\"xapp.policy_all\", undefined, \"All steps apply\");\n}\n\nexport function XappDetailPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const { xappId } = useParams();\n const loc = useLocation();\n const token = useQueryToken();\n const action = useQueryAction();\n const queryToolName = useQueryToolName();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const autoOpenedWidgetKeyRef = useRef<string>(\"\");\n\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel =\n env?.copy?.addAppLabel || t(\"xapp.add_to_workspace\", undefined, \"Add to workspace\");\n const removeAppLabel =\n env?.copy?.removeAppLabel ||\n t(\"xapp.remove_from_workspace\", undefined, \"Remove from workspace\");\n const updateAppLabel = env?.copy?.updateAppLabel || t(\"xapp.update_app\", undefined, \"Update app\");\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n\n const [data, setData] = useState<Record<string, unknown> | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n\n const [termsOpen, setTermsOpen] = useState(false);\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsAction, setTermsAction] = useState<\"none\" | \"install\" | \"update\">(\"none\");\n const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const [guardSummaryOpen, setGuardSummaryOpen] = useState(false);\n\n const hasSubject = Boolean(host.subjectId);\n const installationsByXappId = hasSubject ? host.getInstallationsByXappId() : {};\n const installation = xappId ? installationsByXappId[String(xappId)] : null;\n const updateAvailable = Boolean(installation?.updateAvailable);\n const widgetsEnabled = Boolean(installation) && !updateAvailable && hasSubject;\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const singleXappMode = env?.singleXappMode;\n\n async function refresh() {\n if (!xappId) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getCatalogXapp(String(xappId), {\n installationId: installation?.installationId ?? null,\n });\n setData(asRecord(res));\n } catch (e) {\n setError(readString(asRecord(e)?.message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"xapp-detail\",\n params: { xappId },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, installation?.installationId, xappId]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId: currentXappId,\n installationId: installation?.installationId ?? null,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installation?.installationId, xappId]);\n\n const manifest = asRecord(data?.manifest);\n const xappRecord = asRecord(data?.xapp);\n const versionRecord = asRecord(data?.version);\n const publisherRecord = asRecord(xappRecord?.publisher);\n const title =\n resolveMarketplaceText(manifest?.title as any, locale) ||\n readString(xappRecord?.name) ||\n t(\"xapp.kicker_default\", undefined, \"Xapp\");\n const description =\n resolveMarketplaceText(manifest?.description as any, locale) ||\n readString(xappRecord?.description) ||\n \"\";\n const imageUrl = readString(manifest?.image) || \"https://picsum.photos/seed/xapps-detail/840/360\";\n\n const widgets: Record<string, unknown>[] = Array.isArray(data?.widgets)\n ? data.widgets.filter((widget): widget is Record<string, unknown> => Boolean(asRecord(widget)))\n : [];\n const defaultWidget = useMemo(() => {\n const def = widgets.find((w) => readBoolean(w.default, false));\n return def || widgets[0] || null;\n }, [widgets]);\n const requestedWidget = useMemo(() => {\n const desiredToolName = readString(queryToolName);\n if (!desiredToolName) return defaultWidget;\n return (\n widgets.find((widget) => readString(widget.bind_tool_name) === desiredToolName) ||\n defaultWidget\n );\n }, [defaultWidget, queryToolName, widgets]);\n\n const backTo = {\n pathname: isEmbedded ? \"/embed/catalog\" : \"..\",\n search: tokenSearch,\n };\n\n const terms = asRecord(manifest?.terms);\n const termsTitle =\n resolveMarketplaceText(terms?.title as any, locale) ||\n t(\"xapp.terms_title\", undefined, \"Terms & Conditions\");\n const termsText = resolveMarketplaceText(terms?.text as any, locale) || readString(terms?.text);\n const termsUrl = readString(terms?.url);\n const hasTermsContent = Boolean(termsText || termsUrl);\n const requiresTerms = Boolean(terms || action === \"install\" || action === \"update\");\n\n useEffect(() => {\n if (action === \"install\") {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsOpen(true);\n return;\n }\n if (action === \"update\" && installation) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsOpen(true);\n }\n }, [action, installation]);\n\n useEffect(() => {\n if (action !== \"open-widget\") return;\n if (env?.embedMode) return;\n if (!installation || !widgetsEnabled) return;\n\n const widget = requestedWidget;\n const widgetId = readString(widget?.id);\n if (!widgetId) return;\n\n const key = [\n String(xappId ?? \"\"),\n installation.installationId,\n widgetId,\n readString(queryToolName),\n ].join(\":\");\n if (autoOpenedWidgetKeyRef.current === key) return;\n autoOpenedWidgetKeyRef.current = key;\n\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(widget?.title as any, locale) ||\n readString(widget?.widget_name) ||\n readString(widget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n toolName: readString(widget?.bind_tool_name),\n });\n }, [\n action,\n env?.embedMode,\n host,\n installation,\n locale,\n queryToolName,\n requestedWidget,\n title,\n widgetsEnabled,\n xappId,\n ]);\n\n const requestsTo = buildRequestsHref({\n xappId: String(xappId ?? \"\"),\n isEmbedded,\n ...(token ? { token } : {}),\n });\n const detailForOperationalSurfaces = data as unknown as CatalogXappDetail | null;\n const visibleOperationalSurfaces = useMemo(\n () =>\n getVisibleOperationalSurfaces({\n detail: detailForOperationalSurfaces,\n client,\n env,\n isEmbedded,\n }),\n [client, detailForOperationalSurfaces, env, isEmbedded],\n );\n const secondarySurfaceLinks = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n ).filter((surface) => surface !== \"requests\");\n function getLocalizedOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"payments\") {\n return t(\"activity.payments_title\", undefined, \"Payments\");\n }\n if (surface === \"invoices\") {\n return t(\"activity.invoices_title\", undefined, \"Invoices\");\n }\n if (surface === \"notifications\") {\n return t(\"activity.notifications_title\", undefined, \"Notifications\");\n }\n return t(\"activity.requests_title\", undefined, \"Requests\");\n }\n const publisherSlug = readString(publisherRecord?.slug);\n const publisherName = readString(publisherRecord?.name) || publisherSlug;\n const publisherTo = publisherSlug\n ? {\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(publisherSlug)}`\n : `/marketplace/publishers/${encodeURIComponent(publisherSlug)}`,\n search: tokenSearch,\n }\n : null;\n const guardSummary = useMemo(() => {\n const guardsRaw = Array.isArray(manifest?.guards) ? manifest.guards : [];\n const policyMap = asRecord(manifest?.guards_policy) ?? {};\n const items: GuardInfo[] = guardsRaw\n .map((raw): GuardInfo | null => {\n const guard = asRecord(raw);\n if (!guard) return null;\n const trigger = readString(guard.trigger);\n const slug = readString(guard.slug);\n if (!trigger || !slug) return null;\n const policyKind = normalizeGuardPolicyKind(policyMap[trigger]);\n return {\n slug,\n trigger,\n headless: readBoolean(guard.headless, true),\n blocking: readBoolean(guard.blocking, defaultBlockingForTrigger(trigger)),\n order: readNumber(guard.order),\n policyKind,\n };\n })\n .filter((item): item is GuardInfo => Boolean(item))\n .sort((a, b) => {\n const orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n if (orderA !== orderB) return orderA - orderB;\n if (a.trigger !== b.trigger) return a.trigger.localeCompare(b.trigger);\n return a.slug.localeCompare(b.slug);\n });\n const byTrigger = new Map<string, GuardInfo[]>();\n for (const item of items) {\n const existing = byTrigger.get(item.trigger) ?? [];\n existing.push(item);\n byTrigger.set(item.trigger, existing);\n }\n return { items, byTrigger };\n }, [manifest]);\n const usageCreditSummary = useMemo(\n () => normalizeUsageCreditSummary(data?.usage_credit_summary),\n [data?.usage_credit_summary],\n );\n const manifestScreenshots = Array.isArray(manifest?.screenshots)\n ? manifest.screenshots.map((shot) => readString(shot)).filter(Boolean)\n : [];\n const manifestTags = Array.isArray(manifest?.tags)\n ? manifest.tags.map((tag) => readString(tag)).filter(Boolean)\n : [];\n return (\n <div className={`mx-detail-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-detail-topbar\">\n <div className=\"mx-detail-topbar-left\">\n {!singleXappMode && (\n <Link to={backTo as any} relative=\"path\" className=\"mx-btn mx-btn-ghost\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n )}\n <div className=\"mx-detail-topbar-title\">{title}</div>\n </div>\n <div className=\"mx-detail-topbar-right\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </div>\n\n {error && <div className=\"mx-detail-error\">{error}</div>}\n\n {busy && !data ? (\n <>\n <div className=\"mx-detail-skeleton-header\" aria-busy=\"true\">\n <div className=\"mx-detail-skeleton-icon\" />\n <div className=\"mx-detail-skeleton-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"55%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"45%\" }} />\n </div>\n </div>\n <div className=\"mx-detail-skeleton-grid\">\n <div className=\"mx-detail-skeleton-sections\">\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"30%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"70%\" }} />\n </div>\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"40%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"60%\" }} />\n </div>\n </div>\n <div>\n <div className=\"mx-detail-skeleton-sidebar-card\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"45%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"65%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </>\n ) : (\n <>\n <header className=\"mx-detail-header\">\n <img src={imageUrl} alt={title} className=\"mx-detail-icon\" />\n <div className=\"mx-detail-info\">\n <div className=\"mx-detail-kicker\">\n {publisherName\n ? t(\n \"xapp.kicker_publisher\",\n { publisher: publisherName },\n `Publisher: ${publisherName}`,\n )\n : t(\"xapp.kicker_default\", undefined, \"Xapp\")}\n </div>\n <h1 className=\"mx-detail-title\">{title}</h1>\n {description ? <p className=\"mx-detail-subtitle\">{description}</p> : null}\n <div className=\"mx-detail-meta-row\">\n <div className=\"mx-card-slug\">{xappId}</div>\n {readString(versionRecord?.version) && (\n <div className=\"mx-card-version mx-detail-version-pill\">\n v{readString(versionRecord?.version)}\n </div>\n )}\n {updateAvailable ? (\n <div className=\"mx-detail-update-pill\">\n {t(\"xapp.update_available\", undefined, \"Update available\")}\n </div>\n ) : null}\n </div>\n </div>\n <div className=\"mx-detail-actions\">\n {canMutate ? (\n <>\n {installation && updateAvailable && host.requestUpdate ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsOpen(true);\n return;\n }\n if (!installation.installationId) return;\n host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n }}\n >\n {updateAppLabel}\n </button>\n ) : null}\n\n {!installation ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsOpen(true);\n return;\n }\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (!installation.installationId) return;\n setRemoveConfirmOpen(true);\n }}\n >\n {removeAppLabel}\n </button>\n )}\n </>\n ) : null}\n </div>\n </header>\n\n <div className=\"mx-detail-grid\">\n <main className=\"mx-detail-main\">\n <section className=\"mx-detail-section mx-detail-section-about\">\n <h2 className=\"mx-section-title\">{t(\"xapp.about_title\", undefined, \"About\")}</h2>\n <div className=\"mx-detail-desc\">{description}</div>\n </section>\n\n <section className=\"mx-detail-section mx-detail-section-widgets\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.available_views_title\", undefined, \"Available Views\")}\n </h2>\n {!widgetsEnabled ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {!installation\n ? t(\n \"xapp.add_to_access_views\",\n undefined,\n \"Add this app to your workspace to access its available views.\",\n )\n : updateAvailable\n ? t(\n \"xapp.update_to_access_views\",\n undefined,\n \"An update is available. Please update the app to access its available views.\",\n )\n : !hasSubject\n ? t(\n \"xapp.load_as_user_to_access\",\n undefined,\n \"Load the catalog as a user to access this app.\",\n )\n : null}\n </div>\n ) : widgets.length === 0 ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {t(\n \"xapp.no_views_available\",\n undefined,\n \"No app views are currently available.\",\n )}\n </div>\n ) : (\n <div className=\"mx-detail-widget-list\">\n {widgets.map((w, idx) => {\n const name =\n resolveMarketplaceText(w.title as any, locale) ||\n readString(w.widget_name) ||\n readString(w.name) ||\n readString(w.id) ||\n t(\"common.widget\", undefined, \"Widget\");\n const disabled = !widgetsEnabled;\n const isDefault =\n readBoolean(w.default, false) ||\n (idx === 0 && !widgets.some((ww) => readBoolean(ww.default, false)));\n const widgetType = String(w.type || \"\").toLowerCase();\n return (\n <button\n key={String(w.id)}\n disabled={disabled}\n className={`mx-detail-widget-card ${disabled ? \"is-disabled\" : \"\"} ${isDefault ? \"is-default\" : \"\"}`}\n onClick={() => {\n if (!installation || !widgetsEnabled) return;\n const widgetId = readString(w.id);\n if (!widgetId) return;\n\n if (env?.embedMode && installation) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName: name,\n toolName: readString(w.bind_tool_name),\n });\n }}\n >\n <div className=\"mx-detail-widget-icon\">\n {widgetType === \"read\" ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n )}\n </div>\n <div className=\"mx-detail-widget-body\">\n <div className=\"mx-detail-widget-name\">{name}</div>\n {readString(w.bind_tool_name) && (\n <div className=\"mx-detail-widget-tool\">\n {readString(w.bind_tool_name)}\n </div>\n )}\n <div className=\"mx-detail-widget-badges\">\n {isDefault && (\n <span className=\"mx-detail-widget-badge is-primary\">\n {t(\"xapp.widget_primary\", undefined, \"Primary\")}\n </span>\n )}\n {widgetType && (\n <span className=\"mx-detail-widget-badge\">{widgetType}</span>\n )}\n </div>\n </div>\n <div className=\"mx-detail-widget-action\">\n <span className=\"mx-detail-widget-action-label\">\n {t(\"xapp.widget_open\", undefined, \"Open\")}\n </span>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </section>\n <section className=\"mx-detail-section mx-detail-section-guards\">\n <div className=\"mx-detail-guard-header\">\n <h2 className=\"mx-section-title mx-section-title-tight\">\n {t(\"xapp.how_app_runs\", undefined, \"How This App Runs\")}\n </h2>\n <button\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n onClick={() => setGuardSummaryOpen((v) => !v)}\n >\n {guardSummaryOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"xapp.view_details\", undefined, \"View details\")}\n </button>\n </div>\n {!guardSummaryOpen ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n {guardSummary.items.length === 0 ? (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 2l7 4v4c0 4.42-2.98 8.28-7 9.5C5.98 18.28 3 14.42 3 10V6l7-4z\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 10l2 2 4-4\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-summary-text\">\n {guardSummary.items.length === 0\n ? t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )\n : t(\n \"xapp.guard_summary\",\n {\n itemCount: guardSummary.items.length,\n itemSuffix: guardSummary.items.length === 1 ? \"\" : \"s\",\n stageCount: guardSummary.byTrigger.size,\n stageSuffix: guardSummary.byTrigger.size === 1 ? \"\" : \"s\",\n },\n `This app includes ${guardSummary.items.length} run check${guardSummary.items.length === 1 ? \"\" : \"s\"} across ${guardSummary.byTrigger.size} stage${guardSummary.byTrigger.size === 1 ? \"\" : \"s\"}. Open details to review access, payment, or follow-up steps.`,\n )}\n </div>\n </div>\n ) : guardSummary.items.length === 0 ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mx-guard-summary-text\">\n {t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )}\n </div>\n </div>\n ) : (\n <div className=\"mx-guard-pipeline\">\n {Array.from(guardSummary.byTrigger.entries()).map(\n ([trigger, items], stageIdx) => (\n <div key={trigger} className=\"mx-guard-stage\">\n <div className=\"mx-guard-stage-header\">\n <div className=\"mx-guard-stage-number\">{stageIdx + 1}</div>\n <div className=\"mx-guard-stage-icon\">\n {trigger.startsWith(\"after:\") ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 8l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 3.5l6 4.5-6 4.5V3.5z\" fill=\"currentColor\" />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-stage-title\">\n {humanizeTrigger(trigger, t)}\n </div>\n <div className=\"mx-guard-stage-policy\">\n {describeGuardChain(items[0]?.policyKind || \"all\", t)}\n </div>\n </div>\n <div className=\"mx-guard-stage-body\">\n {items.map((guard, guardIdx) => (\n <div\n key={`${trigger}-${guard.slug}`}\n className={`mx-guard-row ${guard.blocking ? \"mx-guard-row--required\" : \"mx-guard-row--info\"}`}\n >\n <div className=\"mx-guard-row-left\">\n {guard.order !== null ? (\n <span className=\"mx-guard-row-order\">{guard.order}</span>\n ) : (\n <span className=\"mx-guard-row-order\">{guardIdx + 1}</span>\n )}\n <span className=\"mx-guard-row-name\" title={guard.slug}>\n {humanizeSlug(guard.slug)}\n </span>\n </div>\n <div className=\"mx-guard-row-right\">\n <span\n className={`mx-guard-indicator ${guard.headless ? \"mx-guard-indicator--auto\" : \"mx-guard-indicator--user\"}`}\n >\n {guard.headless ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M4.5 7l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"4.5\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M2 12c0-2.76 2.24-5 5-5s5 2.24 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n <span>\n {guard.headless\n ? t(\"xapp.auto\", undefined, \"Auto\")\n : t(\"xapp.user_step\", undefined, \"User step\")}\n </span>\n </span>\n <span\n className={`mx-guard-severity ${guard.blocking ? \"mx-guard-severity--required\" : \"mx-guard-severity--optional\"}`}\n >\n {guard.blocking\n ? t(\"xapp.required\", undefined, \"Required\")\n : t(\"xapp.info\", undefined, \"Info\")}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </section>\n\n {manifestScreenshots.length > 0 && (\n <section className=\"mx-detail-section mx-detail-section-screenshots\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.screenshots_title\", undefined, \"Screenshots\")}\n </h2>\n <div className=\"mx-screenshots\">\n {manifestScreenshots.map((s, i) => (\n <img\n key={i}\n src={s}\n alt={t(\"xapp.screenshot_alt\", { index: i + 1 }, `Screenshot ${i + 1}`)}\n className=\"mx-screenshot\"\n />\n ))}\n </div>\n </section>\n )}\n </main>\n\n <aside className=\"mx-detail-sidebar\">\n {usageCreditSummary ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.usage_credits_title\", undefined, \"Usage Credits\")}\n </h3>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.available_label\", undefined, \"Available\")}\n </span>\n <span className=\"mx-meta-value\">\n {t(\n \"xapp.ready_to_use\",\n { count: usageCreditSummary.available_count },\n `${usageCreditSummary.available_count} ready to use`,\n )}\n </span>\n </div>\n {usageCreditSummary.available_session_backed_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.source_label\", undefined, \"Source\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.linked_payment_sessions\",\n { count: usageCreditSummary.available_session_backed_count },\n `${usageCreditSummary.available_session_backed_count} linked to visible payment sessions`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.reserved_active_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.in_flight_label\", undefined, \"In flight\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_active_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.reserved_stale_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.needs_review_label\", undefined, \"Needs review\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_stale_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.available_ledger_only_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.invalid_label\", undefined, \"Invalid\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.invalid_credits\",\n { count: usageCreditSummary.available_ledger_only_count },\n `${usageCreditSummary.available_ledger_only_count} orphan ledger rows are not usable credits`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.by_tool.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.by_tool_label\", undefined, \"By tool\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-md\">\n {usageCreditSummary.by_tool.map((tool) => (\n <div key={tool.tool_name}>\n <strong>{tool.available_count}</strong>{\" \"}\n {t(\"xapp.for_label\", undefined, \"for\")} <code>{tool.tool_name}</code>\n {tool.available_ledger_only_count > 0\n ? ` \u00B7 ${t(\n \"xapp.invalid_short\",\n { count: tool.available_ledger_only_count },\n `${tool.available_ledger_only_count} invalid`,\n )}`\n : \"\"}\n {tool.reserved_active_count > 0\n ? ` \u00B7 ${t(\n \"xapp.in_flight_short\",\n { count: tool.reserved_active_count },\n `${tool.reserved_active_count} in flight`,\n )}`\n : \"\"}\n {tool.reserved_stale_count > 0\n ? ` \u00B7 ${t(\n \"xapp.stale_short\",\n { count: tool.reserved_stale_count },\n `${tool.reserved_stale_count} stale`,\n )}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {installation && defaultWidget && hasSubject && (\n <button\n className=\"mx-btn mx-btn-primary mx-detail-primary-cta\"\n onClick={() => {\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`,\n search: tokenSearch,\n });\n return;\n }\n host.openWidget({\n installationId: installation.installationId,\n widgetId: readString(defaultWidget.id),\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n toolName: readString(defaultWidget?.bind_tool_name),\n });\n }}\n >\n {openAppLabel}\n </button>\n )}\n\n {(env?.requestsEnabled !== false || secondarySurfaceLinks.length > 0) && (\n <div className=\"mx-sidebar-card mx-activity-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.activity_title\", undefined, \"Activity\")}\n </h3>\n {env?.requestsEnabled !== false && (\n <Link to={requestsTo} relative=\"path\" className=\"mx-activity-link\">\n <div className=\"mx-activity-link-icon mx-activity-link-icon-requests\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <span className=\"mx-activity-link-label\">\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n )}\n {secondarySurfaceLinks.map((surface: OperationalSurfaceKey) => {\n const iconClass =\n surface === \"payments\"\n ? \"mx-activity-link-icon-payments\"\n : surface === \"invoices\"\n ? \"mx-activity-link-icon-invoices\"\n : \"mx-activity-link-icon-notifications\";\n return (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId: String(xappId ?? \"\"),\n token,\n isEmbedded,\n })}\n className=\"mx-activity-link\"\n >\n <div className={`mx-activity-link-icon ${iconClass}`}>\n {surface === \"payments\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\" />\n </svg>\n ) : surface === \"invoices\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n )}\n </div>\n <span className=\"mx-activity-link-label\">\n {getLocalizedOperationalSurfaceLabel(surface)}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n );\n })}\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.details_title\", undefined, \"Details\")}\n </h3>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.app_id_label\", undefined, \"App ID\")}\n </span>\n <code className=\"mx-meta-value mx-meta-code\">{xappId}</code>\n </div>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.status\", undefined, \"Status\")}</span>\n <span className=\"mx-meta-value\">\n {installation\n ? t(\"xapp.status_added\", undefined, \"Added\")\n : t(\"xapp.status_available\", undefined, \"Available\")}\n </span>\n </div>\n\n {publisherTo ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.publisher_label\", undefined, \"Publisher\")}\n </span>\n <Link to={publisherTo as any} className=\"mx-meta-value\">\n {publisherName}\n </Link>\n </div>\n ) : null}\n\n {manifestTags.length > 0 && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.tags_label\", undefined, \"Tags\")}</span>\n <div className=\"mx-tag-list\">\n {manifestTags.map((t) => (\n <span key={t} className=\"mx-tag\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {requiresTerms && (\n <div className=\"mx-detail-terms-link-wrap\">\n <button\n className=\"mx-btn mx-btn-ghost mx-detail-terms-link\"\n onClick={() => {\n setTermsAction(\"none\");\n setTermsOpen(true);\n }}\n >\n {t(\"xapp.view_terms\", undefined, \"View Terms & Conditions\")} \u2192\n </button>\n </div>\n )}\n </div>\n </aside>\n </div>\n\n {termsOpen && (\n <div className=\"mx-detail-modal-backdrop\" onClick={() => setTermsOpen(false)}>\n <div className=\"mx-sidebar-card mx-detail-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"mx-detail-modal-head\">\n <h2 className=\"mx-section-title mx-section-title-tight\">{termsTitle}</h2>\n <button\n onClick={() => setTermsOpen(false)}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"xapp.close_terms_dialog\", undefined, \"Close terms dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {termsText && (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{termsText}</div>\n )}\n {termsUrl && (\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-detail-modal-link\"\n >\n {t(\"xapp.view_full_document\", undefined, \"View Full Document\")}\n </a>\n )}\n\n {(termsAction === \"install\" || termsAction === \"update\") && (\n <label className=\"mx-detail-terms-accept\">\n <input\n type=\"checkbox\"\n checked={termsAccepted}\n onChange={(e) => setTermsAccepted(e.target.checked)}\n className=\"mx-detail-terms-checkbox\"\n />\n <span className=\"mx-detail-terms-copy\">\n {t(\n \"xapp.accept_terms\",\n undefined,\n \"I have read and accept the terms and conditions.\",\n )}\n </span>\n </label>\n )}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={() => setTermsOpen(false)}>\n {t(\"common.cancel\", undefined, \"Cancel\")}\n </button>\n {termsAction === \"install\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted}\n onClick={() => {\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n {t(\"xapp.accept_add_app\", undefined, \"Accept & Add app\")}\n </button>\n ) : termsAction === \"update\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted || !installation}\n onClick={() => {\n if (!installation) return;\n host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n {t(\"xapp.accept_update\", undefined, \"Accept & Update\")}\n </button>\n ) : null}\n </div>\n </div>\n </div>\n )}\n\n <ConfirmActionModal\n open={removeConfirmOpen}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={t(\n \"catalog.remove_app_description\",\n { title },\n `Remove ${title} from your current workspace? You can add it again later.`,\n )}\n confirmLabel={removeAppLabel}\n onCancel={() => setRemoveConfirmOpen(false)}\n onConfirm={() => {\n if (!host.requestUninstall || !installation?.installationId) return;\n host.requestUninstall({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n setRemoveConfirmOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport type { TranslationParams } from \"@xapps-platform/platform-i18n\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXappDetail } from \"../types\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { asRecord, normalizeExpandStage, readFirstString, readString } from \"../utils/readers\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getOperationalSurfaceLabel,\n getVisibleOperationalSurfaces,\n resolveOperationalSurfacePlacement,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport \"../marketplace.css\";\n\ntype ExpandStage = \"inline\" | \"focus\" | \"fullscreen\";\n\ntype NestedPendingExpand = {\n sourceWindow: Window | null;\n timeoutId: number;\n cleanupId: number | null;\n settled: boolean;\n onLateResult: ((value: Record<string, unknown>) => void) | null;\n resolve: (value: Record<string, unknown> | null) => void;\n};\n\ntype SessionExpiredUi = {\n title: string;\n message: string;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction readPaymentEvidenceParams(search: string): URLSearchParams {\n const out = new URLSearchParams();\n const qs = new URLSearchParams(String(search || \"\"));\n for (const [k, v] of qs.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n if (Array.from(out.keys()).length > 0) return out;\n const hostReturnUrl = readHostReturnUrl(search);\n if (!hostReturnUrl) return out;\n try {\n const host = new URL(hostReturnUrl);\n for (const [k, v] of host.searchParams.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n } catch {\n // ignore malformed host return URL\n }\n return out;\n}\n\nfunction toSessionExpiredUi(\n input: unknown,\n t: (key: string, params?: TranslationParams, fallback?: string) => string,\n): SessionExpiredUi {\n const data = asRecord(input);\n const reason = readString(data.reason).toLowerCase();\n const message = readFirstString(data.message);\n\n if (reason === \"logout\") {\n return {\n title: t(\"widget.session_ended_title\", undefined, \"Session ended\"),\n message:\n message ||\n t(\n \"widget.session_ended_message\",\n undefined,\n \"Your session ended. Go back and open the widget again.\",\n ),\n };\n }\n\n if (reason === \"token_refresh_failed\") {\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_refresh_failed\",\n undefined,\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n ),\n };\n }\n\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_default\",\n undefined,\n \"This widget session ended. Go back and open it again to continue.\",\n ),\n };\n}\n\nexport function WidgetView() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { installationId, widgetId } = useParams();\n const token = useQueryToken();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const shellRef = useRef<HTMLDivElement>(null);\n const nestedExpandSeqRef = useRef(0);\n const nestedExpandPendingRef = useRef<Map<string, NestedPendingExpand>>(new Map());\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n const [xappId, setXappId] = useState<string>(\"\");\n const [xappDetail, setXappDetail] = useState<CatalogXappDetail | null>(null);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n const [widgetToken, setWidgetToken] = useState<string>(\"\");\n const [error, setError] = useState<string | null>(null);\n const [sessionExpired, setSessionExpired] = useState<SessionExpiredUi | null>(null);\n const [hostNestedExpandStage, setHostNestedExpandStage] = useState<ExpandStage>(\"inline\");\n\n const loc = useLocation();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = xappId\n ? {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(xappId)}`\n : `/marketplace/xapps/${encodeURIComponent(xappId)}`,\n search: tokenSearch,\n }\n : null;\n const visibleOperationalSurfaces = getVisibleOperationalSurfaces({\n detail: xappDetail,\n client,\n env,\n isEmbedded,\n });\n const linkedOperationalSurfaces = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n );\n\n const onBackToPortal = () => {\n host.notifyNavigation?.({\n path: \"/\",\n page: \"portal-home\",\n });\n };\n\n useEffect(() => {\n if (!installationId) return;\n let alive = true;\n void (async () => {\n try {\n const installs = host.getInstallationsByXappId();\n const inst = Object.values(installs || {}).find(\n (i) => i && String(i.installationId) === String(installationId),\n );\n if (inst && inst.xappId) {\n if (!alive) return;\n setXappId(inst.xappId);\n const res = await client.getCatalogXapp(inst.xappId, {\n installationId: String(installationId || \"\").trim() || null,\n });\n if (!alive) return;\n setXappDetail(res);\n const detail = asRecord(res);\n setXappTitle(\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name) ||\n \"App\",\n );\n }\n } catch {}\n })();\n return () => {\n alive = false;\n };\n }, [installationId, client, host, locale]);\n\n useEffect(() => {\n if (!xappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId,\n installationId,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installationId, xappId]);\n\n useEffect(() => {\n if (!installationId || !widgetId || !host.notifyNavigation) return;\n host.notifyNavigation({\n path: window.location.pathname,\n page: \"widget-view\",\n params: { installationId, widgetId },\n });\n }, [installationId, widgetId, host]);\n\n useEffect(() => {\n if (!installationId || !widgetId) return;\n let alive = true;\n void (async () => {\n try {\n const { token: wToken } = await client.getWidgetToken(installationId, widgetId);\n if (!alive) return;\n setSessionExpired(null);\n setWidgetToken(wToken);\n } catch (e) {\n if (!alive) return;\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n alive = false;\n };\n }, [installationId, widgetId, client]);\n\n async function remintWidgetSession() {\n if (!installationId || !widgetId) {\n throw new Error(\"Missing installationId/widgetId for widget refresh\");\n }\n const refreshed = await client.getWidgetToken(installationId, widgetId);\n const nextToken = String(refreshed?.token || \"\").trim();\n if (!nextToken) {\n throw new Error(\"Widget refresh did not return a token\");\n }\n setSessionExpired(null);\n setWidgetToken(nextToken);\n return {\n token: nextToken,\n expires_in:\n Number.isFinite(Number(refreshed?.expires_in)) && Number(refreshed?.expires_in) > 0\n ? Number(refreshed?.expires_in)\n : undefined,\n };\n }\n\n useEffect(() => {\n return () => {\n for (const [, pending] of nestedExpandPendingRef.current) {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n pending.resolve(null);\n }\n nestedExpandPendingRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const shell = shellRef.current;\n const rootEl = shell?.parentElement ?? null;\n const htmlEl = document.documentElement;\n const bodyEl = document.body;\n const expanded = env?.embedMode && hostNestedExpandStage !== \"inline\";\n\n if (!expanded) return;\n\n const prev = {\n htmlStyle: htmlEl.getAttribute(\"style\"),\n bodyStyle: bodyEl.getAttribute(\"style\"),\n rootStyle: rootEl?.getAttribute(\"style\") ?? null,\n };\n\n htmlEl.style.height = \"100%\";\n bodyEl.style.height = \"100%\";\n bodyEl.style.overflow = \"hidden\";\n bodyEl.style.margin = \"0\";\n if (rootEl) {\n rootEl.style.height = \"100%\";\n rootEl.style.display = \"flex\";\n rootEl.style.flexDirection = \"column\";\n rootEl.style.minHeight = \"0\";\n }\n\n return () => {\n if (prev.htmlStyle == null) htmlEl.removeAttribute(\"style\");\n else htmlEl.setAttribute(\"style\", prev.htmlStyle);\n if (prev.bodyStyle == null) bodyEl.removeAttribute(\"style\");\n else bodyEl.setAttribute(\"style\", prev.bodyStyle);\n if (rootEl) {\n if (prev.rootStyle == null) rootEl.removeAttribute(\"style\");\n else rootEl.setAttribute(\"style\", prev.rootStyle);\n }\n };\n }, [env?.embedMode, hostNestedExpandStage]);\n\n useEffect(() => {\n if (!env?.embedMode) return;\n const handler = (e: MessageEvent) => {\n if (e.source !== window.parent) return;\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (msgType !== \"XAPPS_UI_EXPAND_RESULT\") return;\n const data = asRecord(msg.data);\n const hostManaged = data.hostManaged === true;\n const expanded = data.expanded === true;\n const stage = normalizeExpandStage(data.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [env?.embedMode]);\n\n useEffect(() => {\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n const sourceIsParent = e.source === window.parent;\n const sourceIsSameOrigin = e.origin === window.location.origin;\n if (!sourceIsParent && !sourceIsSameOrigin) return;\n\n if (msgType === \"XAPPS_UI_NESTED_EXPAND_RESULT\" && sourceIsParent) {\n const data = asRecord(msg.data);\n const requestId = readString(data.requestId);\n if (!requestId) return;\n const pending = nestedExpandPendingRef.current.get(requestId);\n if (!pending) return;\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n if (pending.settled) {\n nestedExpandPendingRef.current.delete(requestId);\n pending.onLateResult?.(msg);\n return;\n }\n pending.settled = true;\n nestedExpandPendingRef.current.delete(requestId);\n pending.resolve(msg);\n return;\n }\n\n try {\n iframeRef.current?.contentWindow?.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n useEffect(() => {\n if (!widgetToken) return;\n\n const postExpandResultToWidget = (\n target: Window | null,\n result:\n | { ok: true; data: Record<string, unknown> }\n | { ok: false; error: { message: string; code?: string } },\n ) => {\n if (!target || typeof target.postMessage !== \"function\") return;\n try {\n target.postMessage(\n {\n type: \"XAPPS_UI_EXPAND_RESULT\",\n ...result,\n },\n \"*\",\n );\n } catch {}\n };\n\n const requestNestedHostExpand = async (\n sourceWindow: Window | null,\n input: Record<string, unknown>,\n onLateResult: ((value: Record<string, unknown>) => void) | null = null,\n ): Promise<Record<string, unknown> | null> => {\n if (!env?.embedMode || window.parent === window) return null;\n const requestId = `mx-nested-expand-${Date.now()}-${++nestedExpandSeqRef.current}`;\n const payload = {\n requestId,\n source: \"marketplace-widget-host\",\n installationId: installationId ? String(installationId) : \"\",\n widgetId: widgetId ? String(widgetId) : \"\",\n expanded: Boolean(input.expanded),\n stage: normalizeExpandStage(input.stage, Boolean(input.expanded)),\n mode: input.mode === \"expand\" || input.mode === \"collapse\" ? String(input.mode) : undefined,\n path: window.location.pathname,\n };\n\n const response = await new Promise<Record<string, unknown> | null>((resolve) => {\n const pending: NestedPendingExpand = {\n sourceWindow,\n timeoutId: 0,\n cleanupId: null,\n settled: false,\n onLateResult,\n resolve,\n };\n pending.timeoutId = window.setTimeout(() => {\n pending.settled = true;\n pending.cleanupId = window.setTimeout(() => {\n nestedExpandPendingRef.current.delete(requestId);\n }, 4000);\n resolve(null);\n }, 1200);\n nestedExpandPendingRef.current.set(requestId, pending);\n try {\n window.parent.postMessage(\n {\n type: \"XAPPS_UI_NESTED_EXPAND_REQUEST\",\n data: payload,\n },\n \"*\",\n );\n } catch {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n nestedExpandPendingRef.current.delete(requestId);\n resolve(null);\n }\n });\n\n return response;\n };\n\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n\n // Security check: only allow same-origin if it's from the catalog itself\n // or from the widget iframe (which we can't easily check origin of here\n // without extra plumbing, but we trust the type prefix).\n\n // Handle UI actions from the widget by forwarding them to the real host.\n // In embedMode, window.parent is the Host integration that frames the catalog.\n if (\n msgType === \"XAPPS_UI_EXPAND_REQUEST\" &&\n env?.embedMode &&\n e.source === iframeRef.current?.contentWindow\n ) {\n const data = asRecord(msg.data);\n void (async () => {\n const requestedExpanded = data.expanded === true;\n const requestedStage = normalizeExpandStage(data.stage, requestedExpanded);\n const applyNestedExpandResult = (nestedResp: Record<string, unknown> | null): boolean => {\n if (\n !nestedResp ||\n nestedResp.type !== \"XAPPS_UI_NESTED_EXPAND_RESULT\" ||\n nestedResp.ok !== true ||\n !nestedResp.data ||\n typeof nestedResp.data !== \"object\"\n ) {\n return false;\n }\n const nestedData = nestedResp.data as Record<string, unknown>;\n const hostManaged = nestedData.hostManaged === true;\n const expanded = nestedData.expanded === true;\n const stage = normalizeExpandStage(nestedData.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n postExpandResultToWidget(e.source as Window | null, {\n ok: true,\n data: {\n hostManaged,\n expanded: hostManaged && expanded,\n stage: hostManaged ? stage : \"inline\",\n ...(nestedData.nativeFullscreen === true ? { nativeFullscreen: true } : {}),\n },\n });\n return true;\n };\n // Optimistic UI reduction so the marketplace shell yields immediately while the\n // outer host processes nested expansion. We reconcile on ack or fallback.\n setHostNestedExpandStage(requestedExpanded ? requestedStage : \"inline\");\n const nestedResp = await requestNestedHostExpand(\n e.source as Window | null,\n data,\n (lateResp) => {\n if (applyNestedExpandResult(lateResp)) return;\n setHostNestedExpandStage(\"inline\");\n },\n );\n if (applyNestedExpandResult(nestedResp)) {\n return;\n }\n\n setHostNestedExpandStage(\"inline\");\n })();\n return;\n }\n\n if (msgType === \"XAPPS_UI_CONFIRM_REQUEST\") {\n if (!env?.embedMode) {\n const data = asRecord(msg.data);\n const requestId = msg.id;\n const prompt = String(\n data.message ||\n t(\n \"widget.confirm_continue_prompt\",\n undefined,\n \"This action requires confirmation. Continue?\",\n ),\n );\n const confirmed = typeof window.confirm === \"function\" ? window.confirm(prompt) : false;\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_UI_CONFIRM_RESULT\",\n id: requestId,\n ok: true,\n data: { confirmed },\n },\n \"*\",\n );\n } catch {}\n return;\n }\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (\n msgType === \"XAPPS_TOKEN_REFRESH_REQUEST\" &&\n e.source === iframeRef.current?.contentWindow\n ) {\n void (async () => {\n try {\n const refreshed = await remintWidgetSession();\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_TOKEN_REFRESH\",\n id: readString(msg.id) || undefined,\n data: {\n token: refreshed.token,\n ...(typeof refreshed.expires_in === \"number\"\n ? { expires_in: refreshed.expires_in }\n : {}),\n },\n },\n \"*\",\n );\n } catch {}\n } catch (refreshError) {\n const sessionExpiredUi = toSessionExpiredUi(\n {\n reason: \"token_refresh_failed\",\n message:\n readFirstString(asRecord(refreshError).message) ||\n \"Widget session refresh failed\",\n },\n t,\n );\n setSessionExpired(sessionExpiredUi);\n setWidgetToken(\"\");\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_SESSION_EXPIRED\",\n id: readString(msg.id) || undefined,\n data: {\n reason: \"token_refresh_failed\",\n channel: \"host\",\n recoverable: false,\n message: sessionExpiredUi.message,\n },\n },\n \"*\",\n );\n } catch {}\n }\n })();\n return;\n }\n\n if (\n (msgType === \"XAPPS_WIDGET_CONTEXT_REQUEST\" || msgType === \"XAPPS_WIDGET_READY\") &&\n e.source === iframeRef.current?.contentWindow\n ) {\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_WIDGET_CONTEXT\",\n locale: env?.locale || null,\n },\n \"*\",\n );\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_SESSION_EXPIRED\") {\n setSessionExpired(toSessionExpiredUi(msg.data, t));\n setWidgetToken(\"\");\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_WIDGET\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const targetInstId = readFirstString(data.installationId, installationId);\n const targetWidgetId = readFirstString(data.widgetId);\n\n if (targetWidgetId && env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`\n : `/marketplace/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n // If not in embed mode or no target widget, forward to host\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_OPERATIONAL_SURFACE\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const surface = readString(data.surface).toLowerCase();\n const placement =\n data.placement === \"in_router\" ||\n data.placement === \"side_panel\" ||\n data.placement === \"full_page\"\n ? data.placement\n : resolveOperationalSurfacePlacement({\n env,\n surface: surface as OperationalSurfaceKey,\n isEmbedded,\n });\n\n if (\n env?.embedMode &&\n xappId &&\n [\"requests\", \"payments\", \"invoices\", \"notifications\"].includes(surface) &&\n placement === \"in_router\"\n ) {\n navigate(\n buildOperationalSurfaceHref({\n surface: surface as OperationalSurfaceKey,\n xappId,\n installationId: String(data.installationId || installationId || \"\"),\n requestId: String(data.requestId || \"\"),\n paymentSessionId: String(data.paymentSessionId || \"\"),\n invoiceId: String(data.invoiceId || \"\"),\n notificationId: String(data.notificationId || \"\"),\n token: token || undefined,\n isEmbedded,\n }),\n );\n return;\n }\n\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n // Forward all other XAPPS_* messages to host integration.\n // If it came from our own window (proxied from host), don't send it back to parent.\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n widgetToken,\n installationId,\n widgetId,\n env?.embedMode,\n navigate,\n isEmbedded,\n tokenSearch,\n token,\n xappId,\n t,\n ]);\n\n useEffect(() => {\n if (!widgetToken || !env?.locale) return;\n try {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: \"XAPPS_LOCALE_CHANGED\",\n locale: env.locale,\n },\n \"*\",\n );\n } catch {}\n }, [env?.locale, widgetToken]);\n\n const widgetUrl = (() => {\n if (!widgetToken) return \"\";\n const params = new URLSearchParams({ token: widgetToken });\n const hostReturnUrl = readHostReturnUrl(loc.search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n if (env?.embedMode && hostNestedExpandStage !== \"inline\") {\n params.set(\"xapps_host_overlay\", \"1\");\n } else {\n params.delete(\"xapps_host_overlay\");\n }\n const paymentParams = readPaymentEvidenceParams(loc.search);\n for (const [k, v] of paymentParams.entries()) {\n params.set(k, v);\n }\n return `/embed/widgets/${widgetId}?${params.toString()}`;\n })();\n\n if (error) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.error\", undefined, \"Error\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">\n {t(\"widget.unable_to_load\", undefined, \"Unable to load widget\")}\n </div>\n <div className=\"mx-widget-error-desc\">{error}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n {xappTo && (\n <Link to={xappTo as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n if (sessionExpired) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.session\", undefined, \"Session\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">{sessionExpired.title}</div>\n <div className=\"mx-widget-error-desc\">{sessionExpired.message}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n <button className=\"mx-btn mx-btn-ghost\" onClick={onBackToPortal}>\n {t(\"common.back_to_portal\", undefined, \"Back to Portal\")}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!widgetToken) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{xappTitle || t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n <div className=\"mx-widget-loading\">\n <div className=\"mx-spinner mx-spinner-lg\" />\n <div className=\"mx-widget-loading-title\">\n {t(\n \"widget.preparing\",\n {\n title: xappTitle || t(\"common.widget\", undefined, \"Widget\"),\n },\n \"Preparing {title}...\",\n )}\n </div>\n <div className=\"mx-widget-loading-sub\">\n {t(\n \"widget.secure_session_setup\",\n undefined,\n \"Setting up a secure session for this app.\",\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={shellRef}\n className={`mx-catalog-container mx-widget-view-shell ${isEmbedded ? \"is-embedded\" : \"\"} ${\n env?.embedMode && hostNestedExpandStage !== \"inline\" ? \"is-host-expanded\" : \"\"\n }`}\n data-expand-stage={env?.embedMode ? hostNestedExpandStage : \"inline\"}\n >\n {env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb mx-breadcrumb-top\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n {!env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n\n {!isEmbedded && xappId && linkedOperationalSurfaces.length > 0 && (\n <div className=\"mx-widget-surface-nav\">\n {linkedOperationalSurfaces.map((surface: OperationalSurfaceKey) => (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId,\n token,\n isEmbedded,\n })}\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n >\n {getOperationalSurfaceLabel(surface)}\n </Link>\n ))}\n </div>\n )}\n\n <div\n className=\"mx-widget-view-content\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}\n >\n <iframe\n ref={iframeRef}\n src={widgetUrl}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: hostNestedExpandStage === \"inline\" ? \"600px\" : \"0\",\n border: \"none\",\n borderRadius: \"var(--mx-radius)\",\n background: \"var(--mx-bg-card)\",\n }}\n title=\"Widget\"\n />\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype PublisherItem = {\n slug: string;\n name: string;\n xappCount: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nconst AVATAR_COLORS = [\n \"#2563eb\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#059669\",\n \"#d97706\",\n \"#dc2626\",\n \"#db2777\",\n \"#4f46e5\",\n \"#0d9488\",\n \"#ea580c\",\n];\n\nfunction avatarColor(slug: string): string {\n let hash = 0;\n for (let i = 0; i < slug.length; i++) {\n hash = slug.charCodeAt(i) + ((hash << 5) - hash);\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nexport function PublishersPage() {\n const { client, env } = useMarketplace();\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const [q, setQ] = useState(\"\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<PublisherItem[]>([]);\n\n async function loadPublishers() {\n const res = await client.listCatalogXapps();\n const list = Array.isArray(res?.items) ? res.items : [];\n const grouped = new Map<string, PublisherItem>();\n for (const x of list) {\n const status = String(x.status || \"active\").toLowerCase();\n if (status !== \"active\") continue;\n const slug = String(x.publisher?.slug || \"\").trim();\n if (!slug) continue;\n const current = grouped.get(slug);\n if (current) {\n current.xappCount += 1;\n } else {\n grouped.set(slug, {\n slug,\n name: String(x.publisher?.name || slug),\n xappCount: 1,\n });\n }\n }\n setItems(Array.from(grouped.values()).sort((a, b) => a.name.localeCompare(b.name)));\n }\n\n useEffect(() => {\n void (async () => {\n setBusy(true);\n setError(null);\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }, [client]);\n\n const filtered = useMemo(() => {\n let list = items;\n if (env?.publishers && env.publishers.length > 0) {\n const allowed = new Set(env.publishers.map((v) => String(v)));\n list = list.filter((i) => allowed.has(i.slug));\n }\n const query = q.trim().toLowerCase();\n if (!query) return list;\n return list.filter((i) => {\n const hay = `${i.name} ${i.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, env?.publishers, q]);\n\n const totalXapps = useMemo(() => {\n return filtered.reduce((acc, p) => acc + p.xappCount, 0);\n }, [filtered]);\n\n const ordered = useMemo(() => {\n return [...filtered].sort((a, b) => {\n if (b.xappCount !== a.xappCount) return b.xappCount - a.xappCount;\n return a.name.localeCompare(b.name);\n });\n }, [filtered]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => {\n setBusy(true);\n void (async () => {\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_publishers_placeholder\",\n undefined,\n \"Search by name or slug...\",\n )}\n aria-label={t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n />\n </div>\n <div className=\"mx-stats-grid\">\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.publishers_count\", undefined, \"Publishers\")}\n </div>\n <div className=\"mx-stat-value\">{ordered.length}</div>\n </div>\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.catalog_xapps\", undefined, \"Catalog xApps\")}\n </div>\n <div className=\"mx-stat-value\">{totalXapps}</div>\n </div>\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-publisher-row\">\n <div className=\"mx-skeleton-line mx-skeleton-avatar\" />\n <div className=\"mx-skeleton-publisher-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {t(\n \"publisher.results_count\",\n { count: ordered.length, suffix: ordered.length === 1 ? \"\" : \"s\" },\n `${ordered.length} publisher${ordered.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {ordered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n </div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_publishers_found\", undefined, \"No publishers found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_default\",\n undefined,\n \"No publishers are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n ordered.map((p) => {\n const detailTo = isEmbedded\n ? `/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`\n : `/marketplace/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`;\n return (\n <div key={p.slug} className=\"mx-card\">\n <div className=\"mx-publisher-card-body\">\n <div\n className=\"mx-publisher-avatar\"\n style={{ background: avatarColor(p.slug) }}\n >\n {(p.name || p.slug).charAt(0)}\n </div>\n <div className=\"mx-publisher-card-info\">\n <div className=\"mx-publisher-card-slug\">{p.slug}</div>\n <h3 className=\"mx-publisher-card-name\">\n <Link to={detailTo}>{p.name}</Link>\n </h3>\n <div className=\"mx-publisher-card-count\">\n {p.xappCount} xapp{p.xappCount === 1 ? \"\" : \"s\"} in catalog\n </div>\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"publisher.view_publisher\", undefined, \"View publisher\")}\n </Link>\n <Link to={detailTo} className=\"mx-btn mx-btn-outline mx-btn-sm\">\n Browse xapps\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport type { CatalogXapp } from \"../types\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nexport function PublisherDetailPage() {\n const { publisherSlug = \"\" } = useParams();\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [q, setQ] = useState(\"\");\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n async function refresh() {\n if (!publisherSlug) return;\n setBusy(true);\n setError(null);\n try {\n const catalogRes = await client.listCatalogXapps();\n const list = Array.isArray(catalogRes?.items) ? catalogRes.items : [];\n setItems(\n list.filter((x) => {\n const slug = String(x.publisher?.slug || \"\").trim();\n const status = String(x.status || \"active\").toLowerCase();\n return slug === String(publisherSlug) && status === \"active\";\n }),\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [publisherSlug]);\n\n const publisherName = useMemo(() => {\n return String(items[0]?.publisher?.name || \"\").trim() || String(publisherSlug);\n }, [items, publisherSlug]);\n\n const backToPublishers = isEmbedded\n ? `/publishers${tokenSearch}`\n : `/marketplace/publishers${tokenSearch}`;\n const backToXapps = isEmbedded ? `/${tokenSearch}` : `/marketplace${tokenSearch}`;\n\n const filteredItems = useMemo(() => {\n const query = q.trim().toLowerCase();\n if (!query) return items;\n return items.filter((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${desc} ${x.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, locale, q]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={backToXapps}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToPublishers}>\n {t(\"publisher.publishers_title\", undefined, \"Publishers\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{publisherName}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{publisherName}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_xapps\", undefined, \"Search xapps\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_xapps_placeholder\",\n undefined,\n \"Search by title, slug, description...\",\n )}\n aria-label={t(\n \"publisher.search_xapps_aria\",\n undefined,\n \"Search this publisher's xapps\",\n )}\n />\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filteredItems.length === items.length\n ? `${filteredItems.length} xapp${filteredItems.length === 1 ? \"\" : \"s\"}`\n : `${filteredItems.length} of ${items.length} xapp${items.length === 1 ? \"\" : \"s\"}`}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filteredItems.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_xapps_found\", undefined, \"No xapps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_xapps_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_xapps_default\",\n { publisher: publisherName },\n `${publisherName} has no active xapps in the catalog right now.`,\n )}\n </div>\n </div>\n ) : (\n filteredItems.map((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug, \"App\");\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n readString(manifest.image) || \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const tags = Array.isArray(manifest.tags)\n ? manifest.tags\n .map((tag) => readString(tag))\n .filter(Boolean)\n .slice(0, 3)\n : [];\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")} {publisherName}\n </div>\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {tags.map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n View details\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["createContext", "useContext", "value", "jsx", "jsx", "createContext", "useContext", "useEffect", "useMemo", "Link", "useEffect", "jsx", "useEffect", "jsx", "jsxs", "Fragment", "jsx", "jsxs", "useMemo", "t", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Link", "jsx", "Link", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useMemo", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "jsx", "jsxs", "asRecord", "asRecord", "readString", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useNavigate", "useState", "useEffect", "Link", "StatusBadge", "status", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "StatusBadge", "Link", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "asRecord", "readString", "useParams", "useNavigate", "useState", "useEffect", "useMemo", "Link", "t", "useEffect", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useRef", "useState", "useNavigate", "useEffect", "nestedResp", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useState", "useEffect", "useMemo", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useState", "useEffect", "useMemo", "Link", "t", "jsx", "jsxs"]
|
|
3
|
+
"sources": ["../src/MarketplaceContext.tsx", "../../platform-i18n/src/index.tsx", "../src/i18n.tsx", "../src/MarketplaceApp.tsx", "../src/pages/CatalogPage.tsx", "../src/components/ConfirmActionModal.tsx", "../src/components/MarketplacePrimaryNav.tsx", "../src/utils/embedSearch.ts", "../src/utils/readers.ts", "../src/pages/InvoicesPage.tsx", "../src/components/MarketplaceActivityTabs.tsx", "../src/pages/NotificationsPage.tsx", "../src/pages/PaymentsPage.tsx", "../src/pages/RequestDetailPage.tsx", "../src/components/SchemaOutputView.tsx", "../src/utils/paymentLock.ts", "../src/utils/guardMonetization.ts", "../src/utils/operationalSurfaces.ts", "../src/pages/RequestsPage.tsx", "../src/pages/XappDetailPage.tsx", "../src/utils/monetizationAccess.ts", "../src/pages/WidgetView.tsx", "../src/pages/PublishersPage.tsx", "../src/pages/PublisherDetailPage.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { createContext, useContext, useEffect } from \"react\";\nimport { MarketplaceI18nProvider } from \"./i18n\";\nimport type { MarketplaceClient, MarketplaceEnv, MarketplaceHostAdapter } from \"./types\";\n\nexport type MarketplaceContextValue = {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n};\n\nconst Ctx = createContext<MarketplaceContextValue | null>(null);\n\nfunction applyMarketplaceThemeToDocument(theme: Record<string, unknown> | null | undefined): void {\n if (!theme || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const map: Array<[string, string[]]> = [\n [\"primary\", [\"--cx-primary\", \"--mx-primary\"]],\n [\"primaryDark\", [\"--cx-primary-dark\", \"--mx-primary-hover\"]],\n [\"bg\", [\"--cx-bg\", \"--mx-bg\"]],\n [\"bgSubtle\", [\"--cx-bg-subtle\", \"--mx-bg-subtle\"]],\n [\"card\", [\"--cx-card\", \"--mx-card-bg\"]],\n [\"border\", [\"--cx-border\", \"--mx-border\"]],\n [\"text\", [\"--cx-text\", \"--mx-text-main\"]],\n [\"muted\", [\"--cx-muted\", \"--mx-text-muted\"]],\n [\"shadowSm\", [\"--cx-shadow-sm\", \"--mx-shadow-sm\"]],\n [\"shadow\", [\"--cx-shadow\", \"--mx-shadow\"]],\n [\"shadowLg\", [\"--cx-shadow-lg\", \"--mx-shadow-lg\"]],\n [\"radiusSm\", [\"--cx-radius-sm\", \"--mx-radius-sm\"]],\n [\"radiusMd\", [\"--cx-radius-md\", \"--mx-radius-md\"]],\n [\"radius\", [\"--cx-radius\", \"--cx-radius-lg\", \"--mx-radius-md\", \"--mx-radius-lg\"]],\n [\"radiusLg\", [\"--cx-radius-lg\", \"--mx-radius-lg\"]],\n [\"fontFamily\", [\"--mx-font-family\"]],\n ];\n\n for (const [key, cssVars] of map) {\n const rawValue = theme[key];\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n for (const cssVar of cssVars) root.style.setProperty(cssVar, value);\n }\n\n if (\n typeof theme.radius === \"string\" &&\n theme.radius.trim() &&\n !(typeof theme.radiusSm === \"string\" && theme.radiusSm.trim())\n ) {\n root.style.setProperty(\"--cx-radius-sm\", theme.radius.trim());\n root.style.setProperty(\"--mx-radius-sm\", theme.radius.trim());\n }\n if (typeof theme.bg === \"string\" && theme.bg.trim() && !theme.bgSubtle) {\n root.style.setProperty(\"--cx-bg-subtle\", theme.bg.trim());\n root.style.setProperty(\"--mx-bg-subtle\", theme.bg.trim());\n }\n\n const directTokens =\n theme.tokens && typeof theme.tokens === \"object\" && !Array.isArray(theme.tokens)\n ? (theme.tokens as Record<string, unknown>)\n : null;\n if (directTokens) {\n for (const [cssVar, rawValue] of Object.entries(directTokens)) {\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n if (\n !cssVar.startsWith(\"--mx-\") &&\n !cssVar.startsWith(\"--cx-\") &&\n !cssVar.startsWith(\"--xapps-\")\n ) {\n continue;\n }\n root.style.setProperty(cssVar, value);\n }\n }\n\n const themeMode =\n typeof theme.mode === \"string\"\n ? theme.mode.trim().toLowerCase()\n : typeof theme.themeMode === \"string\"\n ? theme.themeMode.trim().toLowerCase()\n : \"\";\n if (themeMode === \"dark\" || themeMode === \"light\") {\n root.dataset.xappsThemeMode = themeMode;\n }\n}\n\nfunction MarketplaceRuntimeBridge(props: {\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n useEffect(() => {\n const locale = String(props.env?.locale || props.host.locale || \"\").trim();\n if (locale && typeof document !== \"undefined\") {\n document.documentElement.lang = locale;\n }\n }, [props.env?.locale, props.host.locale]);\n\n useEffect(() => {\n applyMarketplaceThemeToDocument(props.host.theme || null);\n }, [props.host.theme]);\n\n return <>{props.children}</>;\n}\n\nexport function MarketplaceProvider(props: {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n return (\n <MarketplaceI18nProvider locale={props.env?.locale}>\n <MarketplaceRuntimeBridge host={props.host} env={props.env}>\n <Ctx.Provider value={{ client: props.client, host: props.host, env: props.env }}>\n {props.children}\n </Ctx.Provider>\n </MarketplaceRuntimeBridge>\n </MarketplaceI18nProvider>\n );\n}\n\nexport function useMarketplace(): MarketplaceContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"MarketplaceProvider is missing\");\n return v;\n}\n", "import React, { createContext, useContext, useMemo } from \"react\";\n\nexport type LocalizedText = string | Record<string, string | null | undefined> | null | undefined;\nexport type TranslationParams = Record<string, string | number | boolean | null | undefined>;\nexport type TranslationCatalog = Record<string, string>;\nexport type TranslationCatalogs = Record<string, TranslationCatalog>;\n\nexport type TranslateFunction = (\n key: string,\n params?: TranslationParams,\n fallback?: string,\n) => string;\n\nexport function normalizeLocale(input: unknown, fallbackLocale = \"en\"): string {\n const raw = String(input || \"\")\n .trim()\n .replace(/_/g, \"-\");\n if (!raw) return fallbackLocale;\n const parts = raw\n .split(\"-\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length === 0) return fallbackLocale;\n const [language, ...rest] = parts;\n return [language.toLowerCase(), ...rest.map((part) => part.toUpperCase())].join(\"-\");\n}\n\nexport function getLocaleCandidates(input: unknown, fallbackLocale = \"en\"): string[] {\n const normalized = normalizeLocale(input, fallbackLocale);\n const out = new Set<string>();\n if (normalized) out.add(normalized);\n const dash = normalized.indexOf(\"-\");\n if (dash > 0) out.add(normalized.slice(0, dash));\n const fallback = normalizeLocale(fallbackLocale, \"en\");\n if (fallback) out.add(fallback);\n const fallbackDash = fallback.indexOf(\"-\");\n if (fallbackDash > 0) out.add(fallback.slice(0, fallbackDash));\n out.add(\"en\");\n return Array.from(out);\n}\n\nexport function pickSupportedLocale(\n input: unknown,\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n const normalizedSupported = Array.from(\n new Set(\n supportedLocales.map((locale) => normalizeLocale(locale, fallbackLocale)).filter(Boolean),\n ),\n );\n const candidates = getLocaleCandidates(input, fallbackLocale);\n for (const candidate of candidates) {\n if (normalizedSupported.includes(candidate)) return candidate;\n }\n return normalizedSupported[0] || normalizeLocale(fallbackLocale, \"en\");\n}\n\nexport function detectBrowserLocale(\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n if (typeof navigator === \"undefined\") {\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n }\n const candidates = [\n navigator.language,\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n ];\n for (const candidate of candidates) {\n const resolved = pickSupportedLocale(candidate, supportedLocales, fallbackLocale);\n if (resolved) return resolved;\n }\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n}\n\nexport function interpolateTranslation(\n template: string,\n params: TranslationParams | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return template;\n return template.replace(/\\{([a-zA-Z0-9_]+)\\}/g, (_match, key) => {\n const value = params[key];\n return value === null || value === undefined ? \"\" : String(value);\n });\n}\n\nexport function resolveLocalizedText(\n value: LocalizedText,\n locale: string,\n fallbackLocale = \"en\",\n): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const candidates = getLocaleCandidates(locale, fallbackLocale);\n for (const candidate of candidates) {\n const localized = value[candidate];\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n for (const localized of Object.values(value)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n\nexport function translateFromCatalogs(input: {\n catalogs: TranslationCatalogs;\n locale: string;\n key: string;\n params?: TranslationParams;\n fallback?: string;\n fallbackLocale?: string;\n}): string {\n const fallbackLocale = input.fallbackLocale || \"en\";\n const candidates = getLocaleCandidates(input.locale, fallbackLocale);\n for (const candidate of candidates) {\n const catalog = input.catalogs[candidate];\n const template = catalog?.[input.key];\n if (typeof template === \"string\" && template.trim()) {\n return interpolateTranslation(template, input.params);\n }\n }\n return interpolateTranslation(input.fallback || input.key, input.params);\n}\n\ntype I18nContextValue = {\n locale: string;\n fallbackLocale: string;\n supportedLocales: readonly string[];\n setLocale: (nextLocale: string) => void;\n t: TranslateFunction;\n resolveText: (value: LocalizedText) => string;\n};\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\nexport function I18nProvider(props: {\n locale: string;\n catalogs: TranslationCatalogs;\n supportedLocales?: readonly string[];\n fallbackLocale?: string;\n setLocale?: (nextLocale: string) => void;\n children: React.ReactNode;\n}) {\n const fallbackLocale = props.fallbackLocale || \"en\";\n const supportedLocales = props.supportedLocales || Object.keys(props.catalogs);\n const locale = pickSupportedLocale(props.locale, supportedLocales, fallbackLocale);\n const setLocale = props.setLocale || (() => {});\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n fallbackLocale,\n supportedLocales,\n setLocale,\n t: (key, params, fallback) =>\n translateFromCatalogs({\n catalogs: props.catalogs,\n locale,\n key,\n params,\n fallback,\n fallbackLocale,\n }),\n resolveText: (value) => resolveLocalizedText(value, locale, fallbackLocale),\n }),\n [fallbackLocale, locale, props.catalogs, setLocale, supportedLocales],\n );\n\n return <I18nContext.Provider value={value}>{props.children}</I18nContext.Provider>;\n}\n\nexport function useI18n(): I18nContextValue {\n const value = useContext(I18nContext);\n if (!value) {\n throw new Error(\"I18nProvider is missing\");\n }\n return value;\n}\n", "import { I18nProvider, type LocalizedText, useI18n } from \"@xapps-platform/platform-i18n\";\nimport type { ReactNode } from \"react\";\n\nconst MARKETPLACE_CATALOGS = {\n en: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Error\",\n \"common.refresh\": \"Refresh\",\n \"common.previous\": \"Previous\",\n \"common.next\": \"Next\",\n \"common.search\": \"Search\",\n \"common.tag\": \"Tag\",\n \"common.all_tags\": \"All Tags\",\n \"common.clear_filter\": \"Clear Filter\",\n \"common.close_dialog\": \"Close dialog\",\n \"common.back_to_marketplace\": \"Back to Marketplace\",\n \"common.back_to_portal\": \"Back to Portal\",\n \"common.view_app_details\": \"View app details\",\n \"common.catalog_app\": \"Catalog app\",\n \"common.by\": \"by\",\n \"common.added\": \"Added\",\n \"common.added_only\": \"Added only\",\n \"common.confirm\": \"Confirm\",\n \"common.cancel\": \"Cancel\",\n \"common.details\": \"Details\",\n \"common.version\": \"Version\",\n \"common.status\": \"Status\",\n \"common.created\": \"Created\",\n \"common.completed\": \"Completed\",\n \"common.tool\": \"Tool\",\n \"common.action\": \"Action\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Session\",\n \"common.amount\": \"Amount\",\n \"common.payment\": \"Payment\",\n \"common.payment_session\": \"Payment Session\",\n \"common.invoice\": \"Invoice\",\n \"common.provider\": \"Provider\",\n \"common.channel\": \"Channel\",\n \"common.message\": \"Message\",\n \"common.trigger\": \"Trigger\",\n \"common.received\": \"Received\",\n \"common.document\": \"Document\",\n \"common.download\": \"Download\",\n \"common.open\": \"Open\",\n \"common.request\": \"Request\",\n \"common.request_id\": \"Request ID\",\n \"common.reason\": \"Reason\",\n \"common.app\": \"App\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"just now\",\n \"common.seconds_ago\": \"{value}s ago\",\n \"common.minutes_ago\": \"{value}m ago\",\n \"common.hours_ago\": \"{value}h ago\",\n \"common.days_ago\": \"{value}d ago\",\n \"nav.marketplace\": \"Marketplace navigation\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Publishers\",\n \"nav.activity\": \"Activity\",\n \"publisher.publishers_title\": \"Publishers\",\n \"publisher.search_publishers\": \"Search publishers\",\n \"publisher.search_publishers_placeholder\": \"Search by name or slug...\",\n \"publisher.publishers_count\": \"Publishers\",\n \"publisher.catalog_xapps\": \"Catalog xApps\",\n \"publisher.results_count\": \"{count} publisher{suffix}\",\n \"publisher.no_publishers_found\": \"No publishers found\",\n \"publisher.empty_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_default\": \"No publishers are available in the catalog right now.\",\n \"publisher.view_publisher\": \"View publisher\",\n \"publisher.search_xapps\": \"Search xapps\",\n \"publisher.search_xapps_placeholder\": \"Search by title, slug, description...\",\n \"publisher.search_xapps_aria\": \"Search this publisher's xapps\",\n \"publisher.no_xapps_found\": \"No xapps found\",\n \"publisher.empty_xapps_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_xapps_default\": \"{publisher} has no active xapps in the catalog right now.\",\n \"activity.navigation\": \"Activity navigation\",\n \"activity.requests\": \"Requests\",\n \"activity.payments\": \"Payments\",\n \"activity.invoices\": \"Invoices\",\n \"activity.notifications\": \"Notifications\",\n \"activity.requests_title\": \"Requests\",\n \"activity.payments_title\": \"Payments\",\n \"activity.invoices_title\": \"Invoices\",\n \"activity.notifications_title\": \"Notifications\",\n \"activity.unavailable_requests_title\": \"Requests are unavailable\",\n \"activity.unavailable_requests_desc\":\n \"This public catalog does not support viewing personal requests.\",\n \"activity.unavailable_payments_title\": \"Payments are unavailable in this host.\",\n \"activity.unavailable_invoices_title\": \"Invoices are unavailable in this host.\",\n \"activity.unavailable_notifications_title\": \"Notifications are unavailable in this host.\",\n \"activity.subject_required_title\": \"Subject required\",\n \"activity.subject_required_desc\":\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n \"activity.showing_requests_for\": \"Showing requests for {title}\",\n \"activity.showing_requests_for_prefix\": \"Showing requests for\",\n \"activity.showing_payments_for\": \"Showing payment activity for {title}\",\n \"activity.showing_payments_for_prefix\": \"Showing payment activity for\",\n \"activity.showing_invoices_for\": \"Showing invoice records for {title}\",\n \"activity.showing_invoices_for_prefix\": \"Showing invoice records for\",\n \"activity.showing_notifications_for\": \"Showing notification activity for {title}\",\n \"activity.showing_notifications_for_prefix\": \"Showing notification activity for\",\n \"activity.payment_detail\": \"Payment Detail\",\n \"activity.invoice_detail\": \"Invoice Detail\",\n \"activity.back_to_payment_list\": \"Back to payment list\",\n \"activity.back_to_invoice_list\": \"Back to invoice list\",\n \"activity.back_to_notification_list\": \"Back to notification list\",\n \"activity.mark_all_read\": \"Mark all read\",\n \"activity.mark_read\": \"Mark read\",\n \"activity.unread_count\": \"{count} unread item{suffix}\",\n \"activity.loading_requests\": \"Loading requests...\",\n \"activity.no_requests\": \"No requests yet.\",\n \"activity.loading_payments\": \"Loading payments...\",\n \"activity.no_payments\": \"No payment activity found.\",\n \"activity.loading_payment_detail\": \"Loading payment details...\",\n \"activity.resume_payment\": \"Resume\",\n \"activity.loading_invoices\": \"Loading invoices...\",\n \"activity.no_invoices\": \"No invoices found.\",\n \"activity.loading_invoice_detail\": \"Loading invoice details...\",\n \"activity.lifecycle_history\": \"Lifecycle History\",\n \"activity.open_document\": \"Open Document\",\n \"activity.open_external\": \"Open External\",\n \"activity.notification_detail\": \"Notification Detail\",\n \"activity.loading_notifications\": \"Loading notifications...\",\n \"activity.no_notifications\": \"No notification activity found.\",\n \"activity.loading_notification_detail\": \"Loading notification details...\",\n \"activity.page_of\": \"Page {page} of {totalPages}\",\n \"activity.event\": \"Event\",\n \"activity.event_fallback\": \"event\",\n \"activity.request_detail_title\": \"Request Details\",\n \"activity.show_details\": \"Show details\",\n \"activity.hide_details\": \"Hide details\",\n \"activity.response_title\": \"Response\",\n \"activity.payment_pending\": \"Payment Pending\",\n \"activity.payment_required\": \"Payment Required\",\n \"activity.complete_payment\": \"Complete Payment\",\n \"activity.confirm_payment\": \"Confirm Payment\",\n \"activity.confirming_payment\": \"Confirming...\",\n \"activity.refresh_status\": \"Refresh Status\",\n \"activity.waiting_for_payment\": \"Waiting for payment confirmation\u2026\",\n \"activity.waiting_for_response\": \"Waiting for response\u2026\",\n \"activity.execution_timeline\": \"Execution Timeline\",\n \"activity.artifacts_title\": \"Artifacts\",\n \"activity.download_artifact\": \"Download Artifact\",\n \"activity.related_widgets_title\": \"Related Widgets\",\n \"activity.help_title\": \"Help\",\n \"activity.back_to_requests\": \"Back to Requests\",\n \"activity.open_widget\": \"Open {widget}\",\n \"activity.help_request\":\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} event\",\n \"activity.timeline_count_other\": \"{count} events\",\n \"activity.timeline_error_count_one\": \"{count} error\",\n \"activity.timeline_error_count_other\": \"{count} errors\",\n \"activity.guard_badge\": \"guard: {value}\",\n \"activity.trigger_badge\": \"trigger: {value}\",\n \"activity.outcome_badge\": \"outcome: {value}\",\n \"activity.current_access_badge\": \"access: {value}\",\n \"activity.current_access_detail\": \"Current access: {value}\",\n \"activity.reason_detail\": \"reason={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Upgrade subscription{suffix}\",\n \"activity.guard_action_complete_payment\": \"Complete payment{suffix}\",\n \"activity.guard_action_step_up_authentication\": \"Complete step-up authentication{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm action\",\n \"activity.guard_action_confirm_action_message\": \"Confirm action ({message})\",\n \"activity.guard_action_custom\": \"Action: {kind}\",\n \"status.unread\": \"Unread\",\n \"status.read\": \"Read\",\n \"common.back\": \"Back\",\n \"catalog.search_placeholder\": \"Search by name, description...\",\n \"catalog.search_aria\": \"Search apps\",\n \"catalog.filter_by_tag\": \"Filter by tag\",\n \"catalog.results_all\": \"{count} app{suffix}\",\n \"catalog.results_filtered\": \"{count} of {total} app{suffix}\",\n \"catalog.no_apps_found\": \"No apps found\",\n \"catalog.empty_added_only\":\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n \"catalog.empty_filtered\":\n \"Try adjusting your search or filters to find what you're looking for.\",\n \"catalog.empty_default\": \"No apps are available in the catalog right now.\",\n \"catalog.view_details\": \"View details\",\n \"catalog.remove_app_title\": \"Remove app?\",\n \"catalog.remove_app_description\":\n \"Remove {title} from your current workspace? You can add it again later.\",\n \"xapp.kicker_publisher\": \"Publisher: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Add to workspace\",\n \"xapp.remove_from_workspace\": \"Remove from workspace\",\n \"xapp.update_app\": \"Update app\",\n \"xapp.open_app\": \"Open app\",\n \"xapp.terms_title\": \"Terms & Conditions\",\n \"xapp.update_available\": \"Update available\",\n \"xapp.about_title\": \"About\",\n \"xapp.available_views_title\": \"Available Views\",\n \"xapp.add_to_access_views\": \"Add this app to your workspace to access its available views.\",\n \"xapp.update_to_access_views\":\n \"An update is available. Please update the app to access its available views.\",\n \"xapp.load_as_user_to_access\": \"Load the catalog as a user to access this app.\",\n \"xapp.no_views_available\": \"No app views are currently available.\",\n \"xapp.widget_primary\": \"Primary\",\n \"xapp.widget_open\": \"Open\",\n \"xapp.how_app_runs\": \"How This App Runs\",\n \"xapp.view_details\": \"View details\",\n \"xapp.no_run_requirements\": \"This app has no extra run requirements configured.\",\n \"xapp.guard_summary\":\n \"This app includes {itemCount} run check{itemSuffix} across {stageCount} stage{stageSuffix}. Open details to review access, payment, or follow-up steps.\",\n \"xapp.trigger_before_tool_run\": \"Before running this app\",\n \"xapp.trigger_after_tool_run\": \"After this app finishes\",\n \"xapp.trigger_before_widget_open\": \"Before opening this app\",\n \"xapp.trigger_after_widget_open\": \"After opening this app\",\n \"xapp.trigger_default\": \"App stage\",\n \"xapp.policy_any\": \"Any one satisfies\",\n \"xapp.policy_all\": \"All steps apply\",\n \"xapp.auto\": \"Auto\",\n \"xapp.user_step\": \"User step\",\n \"xapp.required\": \"Required\",\n \"xapp.info\": \"Info\",\n \"xapp.screenshots_title\": \"Screenshots\",\n \"xapp.screenshot_alt\": \"Screenshot {index}\",\n \"xapp.usage_credits_title\": \"Usage Credits\",\n \"xapp.current_access_title\": \"Current Access\",\n \"xapp.current_plan_label\": \"Current plan\",\n \"xapp.access_state_label\": \"Access state\",\n \"xapp.access_state_available\": \"available\",\n \"xapp.subscription_status_label\": \"Subscription status\",\n \"xapp.subscription_coverage_label\": \"Coverage\",\n \"xapp.subscription_reason_label\": \"Status reason\",\n \"xapp.subscription_overdue_since_label\": \"Overdue since\",\n \"xapp.subscription_expiry_boundary_label\": \"Expiry boundary\",\n \"xapp.subscription_coverage_active\": \"Still covered\",\n \"xapp.subscription_coverage_inactive\": \"Not covered\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Coverage remains during grace period\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Current period ended without successful renewal\",\n \"xapp.subscription_reason_expired_after_boundary\": \"Expiry boundary reached\",\n \"xapp.renews_at_label\": \"Renews at\",\n \"xapp.expires_at_label\": \"Expires at\",\n \"xapp.credits_remaining_label\": \"Credits remaining\",\n \"xapp.available_label\": \"Available\",\n \"xapp.ready_to_use\": \"{count} ready to use\",\n \"xapp.source_label\": \"Source\",\n \"xapp.linked_payment_sessions\": \"{count} linked to visible payment sessions\",\n \"xapp.in_flight_label\": \"In flight\",\n \"xapp.needs_review_label\": \"Needs review\",\n \"xapp.invalid_label\": \"Invalid\",\n \"xapp.invalid_credits\": \"{count} orphan ledger rows are not usable credits\",\n \"xapp.by_tool_label\": \"By tool\",\n \"xapp.for_label\": \"for\",\n \"xapp.invalid_short\": \"{count} invalid\",\n \"xapp.in_flight_short\": \"{count} in flight\",\n \"xapp.stale_short\": \"{count} stale\",\n \"xapp.activity_title\": \"Activity\",\n \"xapp.details_title\": \"Details\",\n \"xapp.app_id_label\": \"App ID\",\n \"xapp.status_added\": \"Added\",\n \"xapp.status_available\": \"Available\",\n \"xapp.publisher_label\": \"Publisher\",\n \"xapp.tags_label\": \"Tags\",\n \"xapp.view_terms\": \"View Terms & Conditions\",\n \"xapp.close_terms_dialog\": \"Close terms dialog\",\n \"xapp.view_full_document\": \"View Full Document\",\n \"xapp.accept_terms\": \"I have read and accept the terms and conditions.\",\n \"xapp.accept_add_app\": \"Accept & Add app\",\n \"xapp.accept_update\": \"Accept & Update\",\n \"widget.session_ended_title\": \"Session ended\",\n \"widget.session_ended_message\": \"Your session ended. Go back and open the widget again.\",\n \"widget.session_expired_title\": \"Widget session expired\",\n \"widget.session_expired_refresh_failed\":\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n \"widget.session_expired_default\":\n \"This widget session ended. Go back and open it again to continue.\",\n \"widget.confirm_continue_prompt\": \"This action requires confirmation. Continue?\",\n \"widget.unable_to_load\": \"Unable to load widget\",\n \"widget.preparing\": \"Preparing {title}...\",\n \"widget.secure_session_setup\": \"Setting up a secure session for this app.\",\n \"payment_lock.complete_payment\": \"Complete Payment\",\n \"payment_lock.continue\": \"Continue\",\n \"payment_lock.confirming_payment_finality\": \"Confirming payment finality with provider.\",\n \"payment_lock.pending_retry_confirm\":\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n \"payment_lock.confirmed_refresh\": \"Payment is confirmed. Refresh to continue.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Payment is not settled. Complete a new payment attempt.\",\n \"payment_lock.requires_additional_action\":\n \"Payment requires additional action. Complete payment to continue.\",\n \"payment_lock.attempt_failed\": \"Last payment attempt failed. Complete payment to continue.\",\n \"payment_lock.evidence_used\": \"Payment evidence was already used. Start a new payment attempt.\",\n \"payment_lock.evidence_consumed\":\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n \"payment_lock.required_before_request\": \"Payment is required before this request can proceed.\",\n },\n ro: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Eroare\",\n \"common.refresh\": \"Re\u00EEmprosp\u0103tare\",\n \"common.previous\": \"Anterior\",\n \"common.next\": \"Urm\u0103tor\",\n \"common.search\": \"C\u0103utare\",\n \"common.tag\": \"Etichet\u0103\",\n \"common.all_tags\": \"Toate etichetele\",\n \"common.clear_filter\": \"\u0218terge filtrul\",\n \"common.close_dialog\": \"\u00CEnchide dialogul\",\n \"common.back_to_marketplace\": \"\u00CEnapoi la Marketplace\",\n \"common.back_to_portal\": \"\u00CEnapoi la Portal\",\n \"common.view_app_details\": \"Vezi detaliile aplica\u021Biei\",\n \"common.catalog_app\": \"Aplica\u021Bie din catalog\",\n \"common.by\": \"de\",\n \"common.added\": \"Ad\u0103ugat\u0103\",\n \"common.added_only\": \"Doar ad\u0103ugate\",\n \"common.confirm\": \"Confirm\u0103\",\n \"common.cancel\": \"Anuleaz\u0103\",\n \"common.details\": \"Detalii\",\n \"common.version\": \"Versiune\",\n \"common.status\": \"Stare\",\n \"common.created\": \"Creat\",\n \"common.completed\": \"Finalizat\",\n \"common.tool\": \"Instrument\",\n \"common.action\": \"Ac\u021Biune\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Sesiune\",\n \"common.amount\": \"Sum\u0103\",\n \"common.payment\": \"Plat\u0103\",\n \"common.payment_session\": \"Sesiune de plat\u0103\",\n \"common.invoice\": \"Factur\u0103\",\n \"common.provider\": \"Furnizor\",\n \"common.channel\": \"Canal\",\n \"common.message\": \"Mesaj\",\n \"common.trigger\": \"Declan\u0219ator\",\n \"common.received\": \"Primit\",\n \"common.document\": \"Document\",\n \"common.download\": \"Descarc\u0103\",\n \"common.open\": \"Deschide\",\n \"common.request\": \"Cerere\",\n \"common.request_id\": \"ID cerere\",\n \"common.reason\": \"Motiv\",\n \"common.app\": \"Aplica\u021Bie\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"chiar acum\",\n \"common.seconds_ago\": \"acum {value}s\",\n \"common.minutes_ago\": \"acum {value}m\",\n \"common.hours_ago\": \"acum {value}h\",\n \"common.days_ago\": \"acum {value}z\",\n \"nav.marketplace\": \"Navigare marketplace\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Dezvoltatori\",\n \"nav.activity\": \"Activitate\",\n \"activity.navigation\": \"Navigare activitate\",\n \"activity.requests\": \"Cereri\",\n \"activity.payments\": \"Pl\u0103\u021Bi\",\n \"activity.invoices\": \"Facturi\",\n \"activity.notifications\": \"Notific\u0103ri\",\n \"activity.requests_title\": \"Cereri\",\n \"activity.payments_title\": \"Pl\u0103\u021Bi\",\n \"activity.invoices_title\": \"Facturi\",\n \"activity.notifications_title\": \"Notific\u0103ri\",\n \"publisher.publishers_title\": \"Dezvoltatori\",\n \"publisher.search_publishers\": \"Caut\u0103 dezvoltatori\",\n \"publisher.search_publishers_placeholder\": \"Caut\u0103 dup\u0103 nume sau slug...\",\n \"publisher.publishers_count\": \"Dezvoltatori\",\n \"publisher.catalog_xapps\": \"xApps \u00EEn catalog\",\n \"publisher.results_count\": \"{count} dezvoltator{suffix}\",\n \"publisher.no_publishers_found\": \"Nu au fost g\u0103si\u021Bi dezvoltatori\",\n \"publisher.empty_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_default\": \"Momentan nu exist\u0103 dezvoltatori disponibili \u00EEn catalog.\",\n \"publisher.view_publisher\": \"Vezi dezvoltatorul\",\n \"publisher.search_xapps\": \"Caut\u0103 xapps\",\n \"publisher.search_xapps_placeholder\": \"Caut\u0103 dup\u0103 titlu, slug, descriere...\",\n \"publisher.search_xapps_aria\": \"Caut\u0103 xapps-urile acestui dezvoltator\",\n \"publisher.no_xapps_found\": \"Nu au fost g\u0103site xapps\",\n \"publisher.empty_xapps_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_xapps_default\": \"{publisher} nu are xapps active \u00EEn catalog acum.\",\n \"activity.unavailable_requests_title\": \"Cereri indisponibile\",\n \"activity.unavailable_requests_desc\":\n \"Acest catalog public nu permite vizualizarea cererilor personale.\",\n \"activity.unavailable_payments_title\": \"Pl\u0103\u021Bile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_invoices_title\": \"Facturile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_notifications_title\": \"Notific\u0103rile nu sunt disponibile \u00EEn acest host.\",\n \"activity.subject_required_title\": \"Subiect necesar\",\n \"activity.subject_required_desc\":\n \"Aceast\u0103 sesiune de host nu este asociat\u0103 cu un utilizator. Cere hostului s\u0103 creeze o sesiune de catalog cu un subjectId.\",\n \"activity.showing_requests_for\": \"Se afi\u0219eaz\u0103 cererile pentru {title}\",\n \"activity.showing_requests_for_prefix\": \"Se afi\u0219eaz\u0103 cererile pentru\",\n \"activity.showing_payments_for\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru {title}\",\n \"activity.showing_payments_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru\",\n \"activity.showing_invoices_for\": \"Se afi\u0219eaz\u0103 facturile pentru {title}\",\n \"activity.showing_invoices_for_prefix\": \"Se afi\u0219eaz\u0103 facturile pentru\",\n \"activity.showing_notifications_for\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru {title}\",\n \"activity.showing_notifications_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru\",\n \"activity.payment_detail\": \"Detaliu plat\u0103\",\n \"activity.invoice_detail\": \"Detaliu factur\u0103\",\n \"activity.back_to_payment_list\": \"\u00CEnapoi la lista pl\u0103\u021Bilor\",\n \"activity.back_to_invoice_list\": \"\u00CEnapoi la lista facturilor\",\n \"activity.back_to_notification_list\": \"\u00CEnapoi la lista notific\u0103rilor\",\n \"activity.mark_all_read\": \"Marcheaz\u0103 tot ca citit\",\n \"activity.mark_read\": \"Marcheaz\u0103 ca citit\",\n \"activity.unread_count\": \"{count} notific{suffix} necitit{suffix2}\",\n \"activity.loading_requests\": \"Se \u00EEncarc\u0103 cererile...\",\n \"activity.no_requests\": \"Nu exist\u0103 \u00EEnc\u0103 cereri.\",\n \"activity.loading_payments\": \"Se \u00EEncarc\u0103 pl\u0103\u021Bile...\",\n \"activity.no_payments\": \"Nu a fost g\u0103sit\u0103 activitate de plat\u0103.\",\n \"activity.loading_payment_detail\": \"Se \u00EEncarc\u0103 detaliile pl\u0103\u021Bii...\",\n \"activity.resume_payment\": \"Reia\",\n \"activity.loading_invoices\": \"Se \u00EEncarc\u0103 facturile...\",\n \"activity.no_invoices\": \"Nu au fost g\u0103site facturi.\",\n \"activity.loading_invoice_detail\": \"Se \u00EEncarc\u0103 detaliile facturii...\",\n \"activity.lifecycle_history\": \"Istoric ciclu de via\u021B\u0103\",\n \"activity.open_document\": \"Deschide documentul\",\n \"activity.open_external\": \"Deschide extern\",\n \"activity.notification_detail\": \"Detaliu notificare\",\n \"activity.loading_notifications\": \"Se \u00EEncarc\u0103 notific\u0103rile...\",\n \"activity.no_notifications\": \"Nu a fost g\u0103sit\u0103 activitate de notificare.\",\n \"activity.loading_notification_detail\": \"Se \u00EEncarc\u0103 detaliile notific\u0103rii...\",\n \"activity.page_of\": \"Pagina {page} din {totalPages}\",\n \"activity.event\": \"Eveniment\",\n \"activity.event_fallback\": \"eveniment\",\n \"activity.request_detail_title\": \"Detalii cerere\",\n \"activity.show_details\": \"Arat\u0103 detalii\",\n \"activity.hide_details\": \"Ascunde detalii\",\n \"activity.response_title\": \"R\u0103spuns\",\n \"activity.payment_pending\": \"Plat\u0103 \u00EEn a\u0219teptare\",\n \"activity.payment_required\": \"Plata este necesar\u0103\",\n \"activity.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"activity.confirm_payment\": \"Confirm\u0103 plata\",\n \"activity.confirming_payment\": \"Se confirm\u0103...\",\n \"activity.refresh_status\": \"Re\u00EEmprosp\u0103teaz\u0103 starea\",\n \"activity.waiting_for_payment\": \"\u00CEn a\u0219teptarea confirm\u0103rii pl\u0103\u021Bii\u2026\",\n \"activity.waiting_for_response\": \"\u00CEn a\u0219teptarea r\u0103spunsului\u2026\",\n \"activity.execution_timeline\": \"Cronologia execu\u021Biei\",\n \"activity.artifacts_title\": \"Artefacte\",\n \"activity.download_artifact\": \"Descarc\u0103 artefactul\",\n \"activity.related_widgets_title\": \"Widget-uri asociate\",\n \"activity.help_title\": \"Ajutor\",\n \"activity.back_to_requests\": \"\u00CEnapoi la cereri\",\n \"activity.open_widget\": \"Deschide {widget}\",\n \"activity.help_request\":\n \"Ai nevoie de ajutor pentru aceast\u0103 cerere? Contacteaz\u0103 administratorul folosind ID-ul cererii de mai sus.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} eveniment\",\n \"activity.timeline_count_other\": \"{count} evenimente\",\n \"activity.timeline_error_count_one\": \"{count} eroare\",\n \"activity.timeline_error_count_other\": \"{count} erori\",\n \"activity.guard_badge\": \"gard\u0103: {value}\",\n \"activity.trigger_badge\": \"declan\u0219ator: {value}\",\n \"activity.outcome_badge\": \"rezultat: {value}\",\n \"activity.current_access_badge\": \"acces: {value}\",\n \"activity.current_access_detail\": \"Acces curent: {value}\",\n \"activity.reason_detail\": \"motiv={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Actualizeaz\u0103 abonamentul{suffix}\",\n \"activity.guard_action_complete_payment\": \"Finalizeaz\u0103 plata{suffix}\",\n \"activity.guard_action_step_up_authentication\":\n \"Finalizeaz\u0103 autentificarea suplimentar\u0103{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm\u0103 ac\u021Biunea\",\n \"activity.guard_action_confirm_action_message\": \"Confirm\u0103 ac\u021Biunea ({message})\",\n \"activity.guard_action_custom\": \"Ac\u021Biune: {kind}\",\n \"status.unread\": \"Necitit\",\n \"status.read\": \"Citit\",\n \"common.back\": \"\u00CEnapoi\",\n \"catalog.search_placeholder\": \"Caut\u0103 dup\u0103 nume, descriere...\",\n \"catalog.search_aria\": \"Caut\u0103 aplica\u021Bii\",\n \"catalog.filter_by_tag\": \"Filtreaz\u0103 dup\u0103 etichet\u0103\",\n \"catalog.results_all\": \"{count} aplica\u021Bi{suffix}\",\n \"catalog.results_filtered\": \"{count} din {total} aplica\u021Bi{suffix}\",\n \"catalog.no_apps_found\": \"Nu au fost g\u0103site aplica\u021Bii\",\n \"catalog.empty_added_only\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii instalate pentru subiectul curent. Dezactiveaz\u0103 filtrul Doar ad\u0103ugate pentru a vedea catalogul complet.\",\n \"catalog.empty_filtered\":\n \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea sau filtrele pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"catalog.empty_default\": \"Momentan nu exist\u0103 aplica\u021Bii disponibile \u00EEn catalog.\",\n \"catalog.view_details\": \"Vezi detalii\",\n \"catalog.remove_app_title\": \"Elimini aplica\u021Bia?\",\n \"catalog.remove_app_description\":\n \"Elimini {title} din spa\u021Biul de lucru curent? O po\u021Bi ad\u0103uga din nou mai t\u00E2rziu.\",\n \"xapp.kicker_publisher\": \"Dezvoltator: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Adaug\u0103 \u00EEn spa\u021Biul de lucru\",\n \"xapp.remove_from_workspace\": \"Elimin\u0103 din spa\u021Biul de lucru\",\n \"xapp.update_app\": \"Actualizeaz\u0103 aplica\u021Bia\",\n \"xapp.open_app\": \"Deschide aplica\u021Bia\",\n \"xapp.terms_title\": \"Termeni \u0219i condi\u021Bii\",\n \"xapp.update_available\": \"Actualizare disponibil\u0103\",\n \"xapp.about_title\": \"Despre\",\n \"xapp.available_views_title\": \"Vizualiz\u0103ri disponibile\",\n \"xapp.add_to_access_views\":\n \"Adaug\u0103 aceast\u0103 aplica\u021Bie \u00EEn spa\u021Biul t\u0103u de lucru pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.update_to_access_views\":\n \"Este disponibil\u0103 o actualizare. Actualizeaz\u0103 aplica\u021Bia pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.load_as_user_to_access\":\n \"\u00CEncarc\u0103 catalogul ca utilizator pentru a accesa aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_views_available\": \"Nu exist\u0103 \u00EEn prezent vizualiz\u0103ri disponibile pentru aplica\u021Bie.\",\n \"xapp.widget_primary\": \"Principal\",\n \"xapp.widget_open\": \"Deschide\",\n \"xapp.how_app_runs\": \"Cum ruleaz\u0103 aceast\u0103 aplica\u021Bie\",\n \"xapp.view_details\": \"Vezi detalii\",\n \"xapp.no_run_requirements\":\n \"Aceast\u0103 aplica\u021Bie nu are cerin\u021Be suplimentare de rulare configurate.\",\n \"xapp.guard_summary\":\n \"Aceast\u0103 aplica\u021Bie include {itemCount} verific\u0103r{itemSuffix} de rulare \u00EEn {stageCount} etap{stageSuffix}. Deschide detaliile pentru a vedea accesul, plata sau pa\u0219ii de continuare.\",\n \"xapp.trigger_before_tool_run\": \"\u00CEnainte de rularea aplica\u021Biei\",\n \"xapp.trigger_after_tool_run\": \"Dup\u0103 finalizarea aplica\u021Biei\",\n \"xapp.trigger_before_widget_open\": \"\u00CEnainte de deschiderea aplica\u021Biei\",\n \"xapp.trigger_after_widget_open\": \"Dup\u0103 deschiderea aplica\u021Biei\",\n \"xapp.trigger_default\": \"Etap\u0103 aplica\u021Bie\",\n \"xapp.policy_any\": \"Este suficient\u0103 una\",\n \"xapp.policy_all\": \"Se aplic\u0103 to\u021Bi pa\u0219ii\",\n \"xapp.auto\": \"Automat\",\n \"xapp.user_step\": \"Pas utilizator\",\n \"xapp.required\": \"Obligatoriu\",\n \"xapp.info\": \"Informativ\",\n \"xapp.screenshots_title\": \"Capturi de ecran\",\n \"xapp.screenshot_alt\": \"Captur\u0103 de ecran {index}\",\n \"xapp.usage_credits_title\": \"Credite de utilizare\",\n \"xapp.current_access_title\": \"Acces curent\",\n \"xapp.current_plan_label\": \"Plan curent\",\n \"xapp.access_state_label\": \"Stare acces\",\n \"xapp.access_state_available\": \"disponibil\",\n \"xapp.subscription_status_label\": \"Stare abonament\",\n \"xapp.subscription_coverage_label\": \"Acoperire\",\n \"xapp.subscription_reason_label\": \"Motiv stare\",\n \"xapp.subscription_overdue_since_label\": \"\u00CEn \u00EEnt\u00E2rziere din\",\n \"xapp.subscription_expiry_boundary_label\": \"Limit\u0103 expirare\",\n \"xapp.subscription_coverage_active\": \"\u00CEnc\u0103 activ\",\n \"xapp.subscription_coverage_inactive\": \"Inactiv\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Accesul r\u0103m\u00E2ne activ \u00EEn perioada de gra\u021Bie\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Perioada curent\u0103 s-a \u00EEncheiat f\u0103r\u0103 re\u00EEnnoire reu\u0219it\u0103\",\n \"xapp.subscription_reason_expired_after_boundary\": \"A fost atins\u0103 limita de expirare\",\n \"xapp.renews_at_label\": \"Se re\u00EEnnoie\u0219te la\",\n \"xapp.expires_at_label\": \"Expir\u0103 la\",\n \"xapp.credits_remaining_label\": \"Credite r\u0103mase\",\n \"xapp.available_label\": \"Disponibile\",\n \"xapp.ready_to_use\": \"{count} gata de utilizare\",\n \"xapp.source_label\": \"Surs\u0103\",\n \"xapp.linked_payment_sessions\": \"{count} asociate sesiunilor de plat\u0103 vizibile\",\n \"xapp.in_flight_label\": \"\u00CEn curs\",\n \"xapp.needs_review_label\": \"Necesit\u0103 verificare\",\n \"xapp.invalid_label\": \"Invalide\",\n \"xapp.invalid_credits\":\n \"{count} \u00EEnregistr\u0103ri orfane din ledger nu reprezint\u0103 credite utilizabile\",\n \"xapp.by_tool_label\": \"Dup\u0103 instrument\",\n \"xapp.for_label\": \"pentru\",\n \"xapp.invalid_short\": \"{count} invalide\",\n \"xapp.in_flight_short\": \"{count} \u00EEn curs\",\n \"xapp.stale_short\": \"{count} expirate\",\n \"xapp.activity_title\": \"Activitate\",\n \"xapp.details_title\": \"Detalii\",\n \"xapp.app_id_label\": \"ID aplica\u021Bie\",\n \"xapp.status_added\": \"Ad\u0103ugat\u0103\",\n \"xapp.status_available\": \"Disponibil\u0103\",\n \"xapp.publisher_label\": \"Dezvoltator\",\n \"xapp.tags_label\": \"Etichete\",\n \"xapp.view_terms\": \"Vezi termenii \u0219i condi\u021Biile\",\n \"xapp.close_terms_dialog\": \"\u00CEnchide dialogul termenilor\",\n \"xapp.view_full_document\": \"Vezi documentul complet\",\n \"xapp.accept_terms\": \"Am citit \u0219i accept termenii \u0219i condi\u021Biile.\",\n \"xapp.accept_add_app\": \"Accept\u0103 \u0219i adaug\u0103 aplica\u021Bia\",\n \"xapp.accept_update\": \"Accept\u0103 \u0219i actualizeaz\u0103\",\n \"widget.session_ended_title\": \"Sesiune \u00EEncheiat\u0103\",\n \"widget.session_ended_message\": \"Sesiunea s-a \u00EEncheiat. Revino \u0219i deschide din nou widgetul.\",\n \"widget.session_expired_title\": \"Sesiunea widgetului a expirat\",\n \"widget.session_expired_refresh_failed\":\n \"Sesiunea acestui widget a expirat \u0219i nu a putut fi re\u00EEnnoit\u0103. Deschide-l din nou pentru a continua.\",\n \"widget.session_expired_default\":\n \"Sesiunea acestui widget s-a \u00EEncheiat. Revino \u0219i deschide-l din nou pentru a continua.\",\n \"widget.confirm_continue_prompt\": \"Aceast\u0103 ac\u021Biune necesit\u0103 confirmare. Continua\u021Bi?\",\n \"widget.unable_to_load\": \"Widgetul nu a putut fi \u00EEnc\u0103rcat\",\n \"widget.preparing\": \"Se preg\u0103te\u0219te {title}...\",\n \"widget.secure_session_setup\": \"Se configureaz\u0103 o sesiune securizat\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n \"payment_lock.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"payment_lock.continue\": \"Continu\u0103\",\n \"payment_lock.confirming_payment_finality\": \"Se confirm\u0103 finalitatea pl\u0103\u021Bii la procesator.\",\n \"payment_lock.pending_retry_confirm\":\n \"Plata este \u00EEnc\u0103 \u00EEn a\u0219teptare la procesator. Re\u00EEncearc\u0103 verificarea \u00EEn c\u00E2teva secunde.\",\n \"payment_lock.confirmed_refresh\": \"Plata este confirmat\u0103. Re\u00EEmprosp\u0103teaz\u0103 pentru a continua.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Plata nu este finalizat\u0103. \u00CEncepe o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.requires_additional_action\":\n \"Plata necesit\u0103 o ac\u021Biune suplimentar\u0103. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.attempt_failed\":\n \"Ultima \u00EEncercare de plat\u0103 a e\u0219uat. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.evidence_used\":\n \"Dovada pl\u0103\u021Bii a fost deja folosit\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.evidence_consumed\":\n \"Dovada pl\u0103\u021Bii a fost deja consumat\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.required_before_request\":\n \"Plata este necesar\u0103 \u00EEnainte ca aceast\u0103 cerere s\u0103 poat\u0103 continua.\",\n },\n} as const;\n\nexport function MarketplaceI18nProvider(props: { locale?: string; children: ReactNode }) {\n return (\n <I18nProvider locale={props.locale || \"en\"} catalogs={MARKETPLACE_CATALOGS}>\n {props.children}\n </I18nProvider>\n );\n}\n\nexport function useMarketplaceI18n() {\n return useI18n();\n}\n\nexport function resolveMarketplaceText(value: LocalizedText, locale?: string | null): string {\n let candidateValue: LocalizedText = value;\n if (typeof candidateValue === \"string\") {\n const trimmed = candidateValue.trim();\n if (!trimmed) return \"\";\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n candidateValue = parsed as Record<string, string | null | undefined>;\n } else {\n return trimmed;\n }\n } catch {\n return trimmed;\n }\n } else {\n return trimmed;\n }\n }\n if (!candidateValue || typeof candidateValue !== \"object\" || Array.isArray(candidateValue)) {\n return \"\";\n }\n const currentLocale = String(locale || \"en\").trim() || \"en\";\n const direct = candidateValue[currentLocale];\n if (typeof direct === \"string\" && direct.trim()) return direct;\n const base = currentLocale.split(\"-\")[0];\n const baseValue = candidateValue[base];\n if (typeof baseValue === \"string\" && baseValue.trim()) return baseValue;\n const english = candidateValue.en;\n if (typeof english === \"string\" && english.trim()) return english;\n for (const localized of Object.values(candidateValue)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n", "import { Route, Routes } from \"react-router-dom\";\nimport { CatalogPage } from \"./pages/CatalogPage\";\nimport { InvoicesPage } from \"./pages/InvoicesPage\";\nimport { NotificationsPage } from \"./pages/NotificationsPage\";\nimport { PaymentsPage } from \"./pages/PaymentsPage\";\nimport { RequestDetailPage } from \"./pages/RequestDetailPage\";\nimport { RequestsPage } from \"./pages/RequestsPage\";\nimport { XappDetailPage } from \"./pages/XappDetailPage\";\nimport { WidgetView } from \"./pages/WidgetView\";\nimport { PublishersPage } from \"./pages/PublishersPage\";\nimport { PublisherDetailPage } from \"./pages/PublisherDetailPage\";\n\nexport function MarketplaceApp() {\n return (\n <Routes>\n {/*\n IMPORTANT: These routes must be mountable under arbitrary bases (Portal: /marketplace,\n Embed: /embed/catalog). Therefore, we use relative paths (no leading \"/\").\n */}\n <Route path=\"\" element={<CatalogPage />} />\n <Route path=\"publishers\" element={<PublishersPage />} />\n <Route path=\"publishers/:publisherSlug\" element={<PublisherDetailPage />} />\n <Route path=\"xapps/:xappId\" element={<XappDetailPage />} />\n <Route path=\"requests\" element={<RequestsPage />} />\n <Route path=\"payments\" element={<PaymentsPage />} />\n <Route path=\"invoices\" element={<InvoicesPage />} />\n <Route path=\"notifications\" element={<NotificationsPage />} />\n <Route path=\"requests/:id\" element={<RequestDetailPage />} />\n <Route path=\"widget/:installationId/:widgetId\" element={<WidgetView />} />\n <Route path=\"*\" element={<CatalogPage />} />\n </Routes>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXapp } from \"../types\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype StoredCatalogFilters = {\n addedOnly?: boolean;\n selectedTag?: string;\n};\n\ntype PendingRemoval = {\n installationId: string;\n xappId: string;\n title: string;\n} | null;\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction getDefaultWidgetId(x: CatalogXapp): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = def || widgets[0];\n return readFirstString(asRecord(pick).id) || null;\n}\n\nfunction buildCatalogFilterStorageKey(input: {\n isEmbedded: boolean;\n singleXappMode?: boolean;\n xappId?: string;\n publishers?: string[];\n tags?: string[];\n subjectId?: string | null;\n}): string {\n const mode = input.isEmbedded ? \"embed\" : \"portal\";\n const scope = input.singleXappMode && input.xappId ? `xapp:${input.xappId}` : \"catalog\";\n const publishers = (input.publishers ?? []).slice().sort().join(\",\") || \"all\";\n const tags = (input.tags ?? []).slice().sort().join(\",\") || \"all\";\n const subject = String(input.subjectId || \"\").trim() || \"anonymous\";\n return `xapps:marketplace:catalog-filters:${mode}:${scope}:subject=${subject}:publishers=${publishers}:tags=${tags}`;\n}\n\nfunction readStoredCatalogFilters(storageKey: string): StoredCatalogFilters | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredCatalogFilters | null;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredCatalogFilters(storageKey: string, value: StoredCatalogFilters): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(value));\n } catch {\n // Ignore storage write failures; filters still work for the current session.\n }\n}\n\nexport function CatalogPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add app\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove app\";\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const storageKey = useMemo(\n () =>\n buildCatalogFilterStorageKey({\n isEmbedded,\n singleXappMode: env?.singleXappMode,\n xappId: env?.xappId,\n publishers: env?.publishers,\n tags: env?.tags,\n subjectId: host.subjectId,\n }),\n [env?.publishers, env?.singleXappMode, env?.tags, env?.xappId, host.subjectId, isEmbedded],\n );\n const defaultTag = env?.tags?.[0] ?? \"\";\n\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [q, setQ] = useState(\"\");\n const [installedOnly, setInstalledOnly] = useState<boolean>(() =>\n Boolean(readStoredCatalogFilters(storageKey)?.addedOnly),\n );\n const [selectedTag, setSelectedTag] = useState<string>(() => {\n const stored = readStoredCatalogFilters(storageKey);\n return typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag;\n });\n const [pendingRemoval, setPendingRemoval] = useState<PendingRemoval>(null);\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n const allTags = useMemo(() => {\n const s = new Set<string>();\n for (const x of items) {\n const tags = x.manifest?.tags;\n if (Array.isArray(tags)) {\n for (const t of tags) s.add(t);\n }\n }\n // If env.tags provided, we might want to restrict the dropdown to only those.\n if (env?.tags && env.tags.length > 0) {\n return Array.from(s)\n .filter((t) => env.tags!.includes(t))\n .sort((a, b) => a.localeCompare(b));\n }\n return Array.from(s).sort((a, b) => a.localeCompare(b));\n }, [items, env?.tags]);\n\n async function refresh() {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listCatalogXapps();\n setItems(Array.isArray(res?.items) ? res.items : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const stored = readStoredCatalogFilters(storageKey);\n setInstalledOnly(Boolean(stored?.addedOnly));\n setSelectedTag(typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag);\n }, [defaultTag, storageKey]);\n\n useEffect(() => {\n const restrictedTags = env?.tags ?? [];\n if (selectedTag && restrictedTags.length > 0 && !restrictedTags.includes(selectedTag)) {\n setSelectedTag(defaultTag);\n }\n }, [defaultTag, env?.tags, selectedTag]);\n\n useEffect(() => {\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: selectedTag || \"\",\n });\n }, [installedOnly, selectedTag, storageKey]);\n\n const filtered = useMemo(() => {\n const qq = q.trim().toLowerCase();\n return items.filter((x) => {\n const inst = installationsByXappId[String(x.id)];\n const isInstalled = Boolean(inst);\n if (installedOnly && !isInstalled) return false;\n\n // Filter by tags from env (if any) - these are usually mandatory restrictions from the session\n if (env?.tags && env.tags.length > 0) {\n const xTags = Array.isArray(x.manifest?.tags)\n ? x.manifest.tags.filter((tag): tag is string => typeof tag === \"string\")\n : [];\n const hasMatch = env.tags.some((t) => xTags.includes(t));\n if (!hasMatch) return false;\n }\n\n // Filter by publishers from env (if any)\n if (env?.publishers && env.publishers.length > 0) {\n if (x.publisher?.slug && !env.publishers.includes(x.publisher.slug)) return false;\n }\n\n // Local UI filter (Tags dropdown)\n if (selectedTag) {\n const tags = asRecord(x).manifest ? asRecord(asRecord(x).manifest).tags : undefined;\n if (!Array.isArray(tags) || !tags.includes(selectedTag)) return false;\n }\n\n if (!qq) return true;\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const description =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${description} ${x.slug}`.toLowerCase();\n return hay.includes(qq);\n });\n }, [\n env?.publishers,\n env?.tags,\n installationsByXappId,\n installedOnly,\n items,\n locale,\n q,\n selectedTag,\n ]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav active=\"xapps\" isEmbedded={isEmbedded} tokenSearch={tokenSearch} />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">{t(\"common.search\", undefined, \"Search\")}</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"catalog.search_placeholder\",\n undefined,\n \"Search by name, description...\",\n )}\n aria-label={t(\"catalog.search_aria\", undefined, \"Search apps\")}\n />\n </div>\n\n <div className=\"mx-input-group\">\n <label className=\"mx-label\">{t(\"common.tag\", undefined, \"Tag\")}</label>\n <select\n className=\"mx-input mx-select\"\n value={selectedTag}\n onChange={(e) => {\n const next = e.target.value;\n setSelectedTag(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: next,\n });\n }}\n aria-label={t(\"catalog.filter_by_tag\", undefined, \"Filter by tag\")}\n >\n <option value=\"\">{t(\"common.all_tags\", undefined, \"All Tags\")}</option>\n {allTags.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n </div>\n\n <label className=\"mx-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={installedOnly}\n onChange={(e) => {\n const next = e.target.checked;\n setInstalledOnly(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: next,\n selectedTag: selectedTag || \"\",\n });\n }}\n className=\"mx-checkbox\"\n />\n <span className=\"mx-label mx-label-inline\">\n {t(\"common.added_only\", undefined, \"Added only\")}\n </span>\n </label>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filtered.length === items.length\n ? t(\n \"catalog.results_all\",\n {\n count: filtered.length,\n suffix: filtered.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} app${filtered.length === 1 ? \"\" : \"s\"}`,\n )\n : t(\n \"catalog.results_filtered\",\n {\n count: filtered.length,\n total: items.length,\n suffix: items.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} of ${items.length} app${items.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filtered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"catalog.no_apps_found\", undefined, \"No apps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {installedOnly && items.length > 0\n ? t(\n \"catalog.empty_added_only\",\n undefined,\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n )\n : q || selectedTag || installedOnly\n ? t(\n \"catalog.empty_filtered\",\n undefined,\n \"Try adjusting your search or filters to find what you're looking for.\",\n )\n : t(\n \"catalog.empty_default\",\n undefined,\n \"No apps are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n filtered.map((x: CatalogXapp) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug) ||\n \"App\";\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n typeof manifest.image === \"string\"\n ? manifest.image\n : \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const defaultWidgetId = getDefaultWidgetId(x);\n\n const xTerms = asRecord(manifest.terms);\n const requiresTerms = Boolean(\n Object.keys(xTerms).length > 0 ||\n (typeof xTerms.text === \"string\" && xTerms.text.trim()) ||\n (typeof xTerms.url === \"string\" && xTerms.url.trim()),\n );\n const needsInstallDetails = !x.manifest || !(\"terms\" in manifest) || requiresTerms;\n\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n {x.publisher?.slug ? (\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")}{\" \"}\n <Link\n to={{\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(String(x.publisher.slug))}`\n : `/marketplace/publishers/${encodeURIComponent(\n String(x.publisher.slug),\n )}`,\n search: tokenSearch,\n }}\n className=\"mx-inline-link\"\n >\n {x.publisher.name || x.publisher.slug}\n </Link>\n </div>\n ) : (\n <div className=\"mx-card-publisher\">\n {t(\"common.catalog_app\", undefined, \"Catalog app\")}\n </div>\n )}\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {(Array.isArray(manifest.tags) ? manifest.tags : [])\n .filter((t): t is string => typeof t === \"string\")\n .slice(0, 3)\n .map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n {canMutate &&\n (!installed ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (needsInstallDetails) {\n navigate(detailTo);\n return;\n }\n host.requestInstall({\n xappId: String(x.id),\n defaultWidgetId,\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm mx-btn-danger-text\"\n disabled={!inst?.installationId}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (inst?.installationId) {\n setPendingRemoval({\n installationId: inst.installationId,\n xappId: String(x.id),\n title,\n });\n }\n }}\n >\n {removeAppLabel}\n </button>\n ))}\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n <ConfirmActionModal\n open={Boolean(pendingRemoval)}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={\n pendingRemoval\n ? t(\n \"catalog.remove_app_description\",\n { title: pendingRemoval.title },\n `Remove ${pendingRemoval.title} from your current workspace? You can add it again later.`,\n )\n : \"\"\n }\n confirmLabel={removeAppLabel}\n onCancel={() => setPendingRemoval(null)}\n onConfirm={() => {\n if (!pendingRemoval) return;\n host.requestUninstall?.({\n installationId: pendingRemoval.installationId,\n xappId: pendingRemoval.xappId,\n });\n setPendingRemoval(null);\n }}\n />\n </div>\n );\n}\n", "import { useEffect } from \"react\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\nexport function ConfirmActionModal(props: {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const { t } = useMarketplaceI18n();\n const {\n open,\n title,\n description,\n confirmLabel = t(\"common.confirm\", undefined, \"Confirm\"),\n cancelLabel = t(\"common.cancel\", undefined, \"Cancel\"),\n onConfirm,\n onCancel,\n } = props;\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onCancel();\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [onCancel, open]);\n\n if (!open) return null;\n\n return (\n <div className=\"mx-detail-modal-backdrop\" onClick={onCancel}>\n <div\n className=\"mx-sidebar-card mx-detail-modal\"\n onClick={(event) => event.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mx-confirm-action-title\"\n >\n <div className=\"mx-detail-modal-head\">\n <h2 id=\"mx-confirm-action-title\" className=\"mx-section-title mx-section-title-tight\">\n {title}\n </h2>\n <button\n onClick={onCancel}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"common.close_dialog\", undefined, \"Close dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {description ? (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{description}</div>\n ) : null}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <button className=\"mx-btn mx-btn-outline\" data-variant=\"danger\" onClick={onConfirm}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype MarketplacePrimaryNavProps = {\n active: \"xapps\" | \"publishers\" | \"activity\";\n isEmbedded: boolean;\n tokenSearch: string;\n};\n\nexport function MarketplacePrimaryNav(props: MarketplacePrimaryNavProps) {\n const { t } = useMarketplaceI18n();\n const xappsTo = props.isEmbedded ? `/${props.tokenSearch}` : `/marketplace${props.tokenSearch}`;\n const publishersTo = props.isEmbedded\n ? `/publishers${props.tokenSearch}`\n : `/marketplace/publishers${props.tokenSearch}`;\n const activityTo = props.isEmbedded\n ? `/requests${props.tokenSearch}`\n : `/marketplace/requests${props.tokenSearch}`;\n\n return (\n <nav\n className=\"mx-nav-switch\"\n aria-label={t(\"nav.marketplace\", undefined, \"Marketplace navigation\")}\n >\n <Link\n to={xappsTo as any}\n className={`mx-nav-link ${props.active === \"xapps\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"xapps\" ? \"page\" : undefined}\n >\n {t(\"nav.xapps\", undefined, \"Xapps\")}\n </Link>\n <Link\n to={publishersTo as any}\n className={`mx-nav-link ${props.active === \"publishers\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"publishers\" ? \"page\" : undefined}\n >\n {t(\"nav.publishers\", undefined, \"Publishers\")}\n </Link>\n <Link\n to={activityTo as any}\n className={`mx-nav-link ${props.active === \"activity\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"activity\" ? \"page\" : undefined}\n >\n {t(\"nav.activity\", undefined, \"Activity\")}\n </Link>\n </nav>\n );\n}\n", "export function readHostReturnUrl(search: string): string {\n const qs = new URLSearchParams(String(search || \"\"));\n return String(qs.get(\"xapps_host_return_url\") || qs.get(\"xappsHostReturnUrl\") || \"\").trim();\n}\n\nexport function buildTokenSearch(token: string, search: string): string {\n const params = new URLSearchParams();\n if (token) params.set(\"token\", token);\n const hostReturnUrl = readHostReturnUrl(search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n const out = params.toString();\n return out ? `?${out}` : \"\";\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nexport function readString(value: unknown): string {\n if (typeof value === \"string\") return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return \"\";\n}\n\nexport function readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const candidate = readString(value);\n if (candidate) return candidate;\n }\n return \"\";\n}\n\nexport function parseDateValue(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n\n if (isRecord(value)) {\n const secondsValue = value.seconds ?? value._seconds;\n const nanosValue = value.nanoseconds ?? value._nanoseconds;\n const seconds = typeof secondsValue === \"number\" ? secondsValue : Number(secondsValue);\n const nanos = typeof nanosValue === \"number\" ? nanosValue : Number(nanosValue || 0);\n if (Number.isFinite(seconds)) {\n const parsed = new Date(seconds * 1000 + (Number.isFinite(nanos) ? nanos / 1_000_000 : 0));\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n }\n\n const text = readString(value);\n if (!text) return null;\n\n const candidates = new Set<string>([text]);\n if (/^\\d+$/.test(text)) {\n const asMs = new Date(Number(text));\n if (!Number.isNaN(asMs.getTime())) return asMs;\n }\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/.test(text)) {\n candidates.add(text.replace(\" \", \"T\"));\n candidates.add(`${text.replace(\" \", \"T\")}Z`);\n }\n if (text.endsWith(\" UTC\")) {\n candidates.add(`${text.slice(0, -4)}Z`);\n }\n\n for (const candidate of candidates) {\n const parsed = new Date(candidate);\n if (!Number.isNaN(parsed.getTime())) return parsed;\n }\n\n return null;\n}\n\nexport function formatDateTime(value: unknown): string {\n const parsed = parseDateValue(value);\n return parsed ? parsed.toLocaleString() : \"\";\n}\n\nexport function normalizeExpandStage(\n value: unknown,\n expanded: boolean,\n): \"inline\" | \"focus\" | \"fullscreen\" {\n return value === \"inline\" || value === \"focus\" || value === \"fullscreen\"\n ? value\n : expanded\n ? \"focus\"\n : \"inline\";\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype InvoiceRecord = Record<string, unknown>;\ntype InvoicePagination = { total: number; page: number; pageSize: number; totalPages: number };\n\nexport function InvoicesPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedInvoiceId = query.get(\"invoiceId\") ?? \"\";\n const paymentSessionIdFilter = query.get(\"paymentSessionId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n const [items, setItems] = useState<InvoiceRecord[]>([]);\n const [focusedInvoice, setFocusedInvoice] = useState<InvoiceRecord | null>(null);\n const [focusedHistory, setFocusedHistory] = useState<InvoiceRecord[]>([]);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [pagination, setPagination] = useState<InvoicePagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh(page: number = 1) {\n if (!client.listMyInvoices) {\n setError(\n t(\n \"activity.unavailable_invoices_title\",\n undefined,\n \"Invoices are unavailable in this host.\",\n ),\n );\n setItems([]);\n setPagination(null);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyInvoices({\n paymentSessionId: paymentSessionIdFilter || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n const nextPagination = asRecord(res?.pagination);\n setPagination(\n Object.keys(nextPagination).length\n ? {\n total: Number(nextPagination.total || 0),\n page: Number(nextPagination.page || page),\n pageSize: Number(nextPagination.pageSize || 20),\n totalPages: Number(nextPagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"invoices\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [installationIdFilter, pageParam, paymentSessionIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedInvoiceId || !client.getMyInvoiceHistory) {\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyInvoiceHistory!(focusedInvoiceId);\n if (cancelled) return;\n const history = asRecord(res);\n setFocusedInvoice(asRecord(history.item));\n setFocusedHistory(\n Array.isArray(history.events) ? history.events.map((event) => asRecord(event)) : [],\n );\n } catch (e) {\n if (cancelled) return;\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedInvoiceId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n if (paymentSessionIdFilter) qs.set(\"paymentSessionId\", paymentSessionIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.invoices_title\", undefined, \"Invoices\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.invoices_title\", undefined, \"Invoices\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh(pageParam)}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"invoices\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_invoices_for_prefix\", undefined, \"Showing invoice records for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedInvoiceId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.invoice_detail\", undefined, \"Invoice Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedInvoiceId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_invoice_list\", undefined, \"Back to invoice list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedInvoice ? (\n <>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readFirstString(\n focusedInvoice.status,\n focusedInvoice.lifecycle_status,\n )}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.provider\", undefined, \"Provider\")}\n </div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedInvoice.provider_key, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.payment_session\", undefined, \"Payment Session\")}\n </div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedInvoice.payment_session_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedInvoice.created_at) || \"\u2014\"}\n </div>\n </div>\n {(readString(focusedInvoice.document_url) ||\n readString(focusedInvoice.document_download_url) ||\n readString(focusedInvoice.external_url)) && (\n <div className=\"mx-record-actions\">\n {focusedInvoice.document_url ? (\n <a\n href={String(focusedInvoice.document_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_document\", undefined, \"Open Document\")}\n </a>\n ) : null}\n {focusedInvoice.document_download_url ? (\n <a\n href={String(focusedInvoice.document_download_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.download\", undefined, \"Download\")}\n </a>\n ) : null}\n {!focusedInvoice.document_download_url &&\n !focusedInvoice.document_url &&\n focusedInvoice.external_url ? (\n <a\n href={String(focusedInvoice.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_external\", undefined, \"Open External\")}\n </a>\n ) : null}\n </div>\n )}\n </div>\n {focusedHistory.length > 0 && (\n <div className=\"mx-record-timeline\">\n <div className=\"mx-record-label\">\n {t(\"activity.lifecycle_history\", undefined, \"Lifecycle History\")}\n </div>\n <div className=\"mx-detail-guard-list mx-detail-guard-list-compact\">\n {focusedHistory.map((event, index) => (\n <div\n key={readFirstString(event.id, index)}\n className=\"mx-record-timeline-item\"\n >\n <strong>\n {readFirstString(\n event.action,\n event.type,\n t(\"activity.event\", undefined, \"Event\"),\n )}\n </strong>\n {formatDateTime(event.created_at)\n ? ` \u2022 ${formatDateTime(event.created_at)}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoice_detail\", undefined, \"Loading invoice details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.invoice\", undefined, \"Invoice\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.provider\", undefined, \"Provider\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.document\", undefined, \"Document\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 5 : 6}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoices\", undefined, \"Loading invoices...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_invoices\", undefined, \"No invoices found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td data-label={t(\"common.invoice\", undefined, \"Invoice\")}>\n <div className=\"mx-cell-bold\">\n {readFirstString(\n item.invoice_identifier,\n item.series,\n item.number,\n item.id,\n \"\u2014\",\n )}\n </div>\n {readString(item.payment_session_id) && (\n <div className=\"mx-cell-sub\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(item.payment_session_id)}\n </div>\n )}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readFirstString(item.status, item.lifecycle_status)} />\n </td>\n <td data-label={t(\"common.provider\", undefined, \"Provider\")}>\n {readFirstString(item.provider_key, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.document\", undefined, \"Document\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"invoiceId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.document_download_url || item.external_url ? (\n <a\n href={String(item.document_download_url || item.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.open\", undefined, \"Open\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam <= 1}\n onClick={() => void refresh(pageParam - 1)}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </button>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam >= Number(pagination.totalPages || 1)}\n onClick={() => void refresh(pageParam + 1)}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </button>\n </div>\n )}\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype ActivityTabKey = \"requests\" | \"payments\" | \"invoices\" | \"notifications\";\n\ntype MarketplaceActivityTabsProps = {\n active: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n};\n\nfunction buildActivityHref(input: {\n surface: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n}) {\n const qs = new URLSearchParams();\n if (input.token) qs.set(\"token\", input.token);\n if (input.xappId) qs.set(\"xappId\", input.xappId);\n if (input.installationId && input.surface !== \"requests\") {\n qs.set(\"installationId\", input.installationId);\n }\n const suffix = qs.toString();\n return {\n pathname: input.isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nexport function MarketplaceActivityTabs(props: MarketplaceActivityTabsProps) {\n const { t } = useMarketplaceI18n();\n const tabs: Array<{ key: ActivityTabKey; label: string }> = [\n { key: \"requests\", label: t(\"activity.requests\", undefined, \"Requests\") },\n { key: \"payments\", label: t(\"activity.payments\", undefined, \"Payments\") },\n { key: \"invoices\", label: t(\"activity.invoices\", undefined, \"Invoices\") },\n { key: \"notifications\", label: t(\"activity.notifications\", undefined, \"Notifications\") },\n ];\n\n return (\n <nav\n className=\"mx-activity-tabs\"\n aria-label={t(\"activity.navigation\", undefined, \"Activity navigation\")}\n >\n {tabs.map((tab) => (\n <Link\n key={tab.key}\n to={\n buildActivityHref({\n surface: tab.key,\n isEmbedded: props.isEmbedded,\n token: props.token,\n xappId: props.xappId,\n installationId: props.installationId,\n }) as any\n }\n className={`mx-activity-tab ${props.active === tab.key ? \"is-active\" : \"\"}`}\n aria-current={props.active === tab.key ? \"page\" : undefined}\n >\n {tab.label}\n </Link>\n ))}\n </nav>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status, unread }: { status: string; unread: boolean }) {\n const { t } = useMarketplaceI18n();\n if (unread) {\n return (\n <span className=\"mx-badge mx-badge-warning\">{t(\"status.unread\", undefined, \"Unread\")}</span>\n );\n }\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className = normalized === \"COMPLETED\" ? \"mx-badge-success\" : \"mx-badge-danger\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype NotificationRecord = Record<string, unknown>;\n\nexport function NotificationsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedNotificationId = query.get(\"notificationId\") ?? \"\";\n const [items, setItems] = useState<NotificationRecord[]>([]);\n const [focusedNotification, setFocusedNotification] = useState<NotificationRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [unreadCount, setUnreadCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyNotifications) {\n setError(\n t(\n \"activity.unavailable_notifications_title\",\n undefined,\n \"Notifications are unavailable in this host.\",\n ),\n );\n setItems([]);\n setUnreadCount(0);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyNotifications({\n notificationId: focusedNotificationId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n async function markRead(notificationId: string) {\n if (!client.markMyNotificationRead) return;\n try {\n const res = await client.markMyNotificationRead(notificationId);\n setItems((current) =>\n current.map((item) =>\n readString(item.id) === notificationId\n ? {\n ...item,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : item,\n ),\n );\n setFocusedNotification((current) =>\n current && readString(current.id) === notificationId\n ? {\n ...current,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n async function markAllRead() {\n if (!client.markAllMyNotificationsRead) return;\n try {\n const res = await client.markAllMyNotificationsRead();\n setItems((current) =>\n current.map((item) => ({\n ...item,\n unread: false,\n read_at: readString(item.read_at) || new Date().toISOString(),\n })),\n );\n setFocusedNotification((current) =>\n current\n ? {\n ...current,\n unread: false,\n read_at: readString(current.read_at) || new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"notifications\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedNotificationId) {\n setFocusedNotification(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.listMyNotifications?.({\n notificationId: focusedNotificationId,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 1,\n });\n if (cancelled) return;\n const item = Array.isArray(res?.items) ? asRecord(res.items[0]) : null;\n setFocusedNotification(item);\n } catch (e) {\n if (cancelled) return;\n setFocusedNotification(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.notifications_title\", undefined, \"Notifications\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <div>\n <h1 className=\"mx-title\">\n {t(\"activity.notifications_title\", undefined, \"Notifications\")}\n </h1>\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.unread_count\",\n {\n count: unreadCount,\n suffix: unreadCount === 1 ? \"\" : \"s\",\n suffix2: unreadCount === 1 ? \"\" : \"e\",\n },\n `${unreadCount} unread item${unreadCount === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {client.markAllMyNotificationsRead && unreadCount > 0 && (\n <button className=\"mx-btn mx-btn-outline\" onClick={() => void markAllRead()}>\n {t(\"activity.mark_all_read\", undefined, \"Mark all read\")}\n </button>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"notifications\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\n \"activity.showing_notifications_for_prefix\",\n undefined,\n \"Showing notification activity for\",\n )}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedNotificationId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.notification_detail\", undefined, \"Notification Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedNotificationId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_notification_list\", undefined, \"Back to notification list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedNotification ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readString(focusedNotification.status)}\n unread={Boolean(focusedNotification.unread)}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.trigger\", undefined, \"Trigger\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.trigger, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.channel\", undefined, \"Channel\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.channel, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.received\", undefined, \"Received\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedNotification.created_at) || \"\u2014\"}\n </div>\n </div>\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">{t(\"common.message\", undefined, \"Message\")}</div>\n <div className=\"mx-record-value\">\n {readFirstString(focusedNotification.message, \"\u2014\")}\n </div>\n </div>\n {(readString(focusedNotification.request_id) ||\n readString(focusedNotification.payment_session_id) ||\n readString(focusedNotification.reason)) && (\n <div className=\"mx-record-pill-row\">\n {readString(focusedNotification.request_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.request\", undefined, \"Request\")}:{\" \"}\n {readString(focusedNotification.request_id)}\n </span>\n ) : null}\n {readString(focusedNotification.payment_session_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(focusedNotification.payment_session_id)}\n </span>\n ) : null}\n {readString(focusedNotification.reason) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.reason\", undefined, \"Reason\")}:{\" \"}\n {readString(focusedNotification.reason)}\n </span>\n ) : null}\n </div>\n )}\n {Boolean(focusedNotification.unread) && client.markMyNotificationRead ? (\n <div className=\"mx-record-actions\">\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(focusedNotification.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\n \"activity.loading_notification_detail\",\n undefined,\n \"Loading notification details...\",\n )}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.trigger\", undefined, \"Trigger\")}</th>\n <th scope=\"col\">{t(\"common.channel\", undefined, \"Channel\")}</th>\n <th scope=\"col\">{t(\"common.message\", undefined, \"Message\")}</th>\n <th scope=\"col\">{t(\"common.received\", undefined, \"Received\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td colSpan={6} className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}>\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_notifications\", undefined, \"Loading notifications...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_notifications\", undefined, \"No notification activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} unread={Boolean(item.unread)} />\n </td>\n <td data-label={t(\"common.trigger\", undefined, \"Trigger\")}>\n {readFirstString(item.trigger, \"\u2014\")}\n </td>\n <td data-label={t(\"common.channel\", undefined, \"Channel\")}>\n {readFirstString(item.channel, \"\u2014\")}\n </td>\n <td data-label={t(\"common.message\", undefined, \"Message\")}>\n {readFirstString(item.message, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.received\", undefined, \"Received\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"notificationId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {Boolean(item.unread) && client.markMyNotificationRead ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(item.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype PaymentSessionRecord = Record<string, unknown>;\n\nexport function PaymentsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedPaymentSessionId = query.get(\"paymentSessionId\") ?? \"\";\n const [items, setItems] = useState<PaymentSessionRecord[]>([]);\n const [focusedSession, setFocusedSession] = useState<PaymentSessionRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyPaymentSessions) {\n setError(\n t(\n \"activity.unavailable_payments_title\",\n undefined,\n \"Payments are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyPaymentSessions({\n paymentSessionId: focusedPaymentSessionId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"payments\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedPaymentSessionId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedPaymentSessionId || !client.getMyPaymentSession) {\n setFocusedSession(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyPaymentSession!(focusedPaymentSessionId);\n if (cancelled) return;\n const session = asRecord(asRecord(res).session);\n setFocusedSession(Object.keys(session).length > 0 ? session : null);\n } catch (e) {\n if (cancelled) return;\n setFocusedSession(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedPaymentSessionId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.payments_title\", undefined, \"Payments\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.payments_title\", undefined, \"Payments\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"payments\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_payments_for_prefix\", undefined, \"Showing payment activity for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedPaymentSessionId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.payment_detail\", undefined, \"Payment Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedPaymentSessionId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_payment_list\", undefined, \"Back to payment list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedSession ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge status={readString(focusedSession.status)} />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.amount\", undefined, \"Amount\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.amount, \"\u2014\")}{\" \"}\n {readString(focusedSession.currency)}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.tool\", undefined, \"Tool\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.tool_name, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.provider\", undefined, \"Provider\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.provider_key, focusedSession.issuer, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.request\", undefined, \"Request\")}</div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedSession.request_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedSession.created_at) || \"\u2014\"}\n </div>\n </div>\n {Array.isArray(focusedSession.invoices) && focusedSession.invoices.length > 0 && (\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">\n {t(\"activity.invoices_title\", undefined, \"Invoices\")}\n </div>\n <div className=\"mx-record-pill-row\">\n {focusedSession.invoices.map((invoice, index) => {\n const invoiceRecord = asRecord(invoice);\n return (\n <span\n key={readFirstString(invoiceRecord.id, index)}\n className=\"mx-badge mx-badge-outline\"\n >\n {readFirstString(\n invoiceRecord.invoice_identifier,\n invoiceRecord.id,\n t(\"common.invoice\", undefined, \"Invoice\"),\n )}\n </span>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payment_detail\", undefined, \"Loading payment details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.session\", undefined, \"Session\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.amount\", undefined, \"Amount\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 6 : 7}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payments\", undefined, \"Loading payments...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_payments\", undefined, \"No payment activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.payment_session_id, item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td\n className=\"mx-cell-mono\"\n data-label={t(\"common.session\", undefined, \"Session\")}\n >\n {readFirstString(item.payment_session_id, \"\u2014\")}\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n {readFirstString(item.tool_name, \"\u2014\")}\n </td>\n <td className=\"mx-cell-bold\" data-label={t(\"common.amount\", undefined, \"Amount\")}>\n {readString(item.amount)} {readString(item.currency)}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.payment_session_id)\n qs.set(\"paymentSessionId\", String(item.payment_session_id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.resume_url ? (\n <a\n href={String(item.resume_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.resume_payment\", undefined, \"Resume\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { SchemaOutputView } from \"../components/SchemaOutputView\";\nimport {\n resolvePaymentLockStateFromGuardSummary,\n type PaymentReconcileState,\n} from \"../utils/paymentLock\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { buildOperationalSurfaceHref } from \"../utils/operationalSurfaces\";\nimport {\n asRecord,\n formatDateTime,\n parseDateValue,\n readFirstString,\n readString,\n} from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction navigateToExternalOrHost(url: string): void {\n const next = String(url || \"\").trim();\n if (!next || typeof window === \"undefined\") return;\n try {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: \"XAPPS_UI_NAVIGATE\", data: { path: next } }, \"*\");\n return;\n }\n } catch {\n // fall through to top-level navigation\n }\n window.location.href = next;\n}\n\nexport function RequestDetailPage() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { id } = useParams();\n const token = useQueryToken();\n const query = useQuery();\n const loc = useLocation();\n const navigate = useNavigate();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n\n const tokenSearch = buildTokenSearch(token, loc.search);\n\n const [data, setData] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [reconcileBusy, setReconcileBusy] = useState(false);\n const [reconcileError, setReconcileError] = useState<string | null>(null);\n const [reconcileState, setReconcileState] = useState<PaymentReconcileState>(\"none\");\n const dataRecord = asRecord(data);\n const requestRecord = asRecord(dataRecord.request);\n const toolRecord = asRecord(dataRecord.tool);\n const manifestRecord = asRecord(dataRecord.manifest);\n const requestPayment = asRecord(requestRecord.payment);\n const requestPaymentSummary = asRecord(requestRecord.payment_summary);\n const status = readFirstString(requestRecord.status) || undefined;\n const isTerminal = status === \"COMPLETED\" || status === \"FAILED\";\n const effectiveXappId = readFirstString(requestRecord.xapp_id, xappIdFilter);\n const effectiveXappTitle =\n resolveMarketplaceText(manifestRecord.title as any, locale) ||\n readFirstString(requestRecord.xapp_name);\n const xappCrumbLabel = effectiveXappTitle || effectiveXappId;\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = effectiveXappId\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(effectiveXappId)}`\n : `/marketplace/xapps/${encodeURIComponent(effectiveXappId)}`,\n search: tokenSearch,\n } as any)\n : null;\n\n const backToRequests = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n ...(readHostReturnUrl(loc.search)\n ? { xapps_host_return_url: readHostReturnUrl(loc.search) }\n : {}),\n }).toString()}`,\n };\n\n async function refreshOnce() {\n if (!id) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getMyRequest(String(id));\n setData(res);\n if (\n !resolvePaymentLockStateFromGuardSummary(\n asRecord(asRecord(res).request).guard_summary ?? null,\n {\n requestStatus: readFirstString(asRecord(asRecord(res).request).status),\n paymentStatus: readFirstString(asRecord(asRecord(res).request).payment_status),\n t: (key, fallback) => t(key, undefined, fallback),\n },\n ).isLocked\n ) {\n setReconcileState(\"confirmed_paid\");\n }\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n if (!id) return;\n let alive = true;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"request-detail\",\n params: { id },\n });\n\n void refreshOnce();\n\n timer = setInterval(async () => {\n try {\n const res = await client.getMyRequest(String(id));\n if (!alive) return;\n setData(res);\n const s = asRecord(asRecord(res).request).status;\n if (s === \"COMPLETED\" || s === \"FAILED\") {\n if (timer) clearInterval(timer);\n }\n } catch {\n // ignore background polling errors\n }\n }, 1500);\n\n return () => {\n alive = false;\n if (timer) clearInterval(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const title =\n resolveMarketplaceText(toolRecord.title as any, locale) ||\n readFirstString(requestRecord.tool_name) ||\n t(\"activity.request_detail_title\", undefined, \"Request Details\");\n const artifacts = Array.isArray(dataRecord.artifacts) ? dataRecord.artifacts : [];\n\n function attachArtifactLinks(value: unknown, arts: unknown[]): unknown {\n if (typeof value === \"string\") {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === value);\n if (readString(match?.url)) {\n return {\n filename: readFirstString(match?.filename, value),\n url: readString(match?.url),\n mimeType: readString(match?.mime_type) || undefined,\n };\n }\n }\n if (Array.isArray(value)) {\n return value.map((item) => attachArtifactLinks(item, arts));\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n const record = asRecord(value);\n const filename = readString(record.filename) || null;\n if (filename && !readString(record.url)) {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === filename);\n if (readString(match?.url)) {\n return {\n ...record,\n url: readString(match?.url),\n mimeType: record.mimeType ?? match?.mime_type,\n };\n }\n }\n const next: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n next[key] = attachArtifactLinks(val, arts);\n }\n return next;\n }\n\n if (env?.requestsEnabled === false) {\n const backToX = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToX as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n const responsePayload = useMemo(\n () => attachArtifactLinks(dataRecord.response ?? null, artifacts),\n [dataRecord, artifacts],\n );\n\n const outputSchema = useMemo(() => {\n const schema = toolRecord.output_schema;\n return schema && typeof schema === \"object\" ? asRecord(schema) : null;\n }, [toolRecord]);\n const requestPaymentLock = useMemo(\n () =>\n resolvePaymentLockStateFromGuardSummary(requestRecord.guard_summary ?? null, {\n requestStatus: readFirstString(requestRecord.status),\n paymentStatus: readFirstString(requestRecord.payment_status),\n reconcileState,\n t: (key, fallback) => t(key, undefined, fallback),\n }),\n [requestRecord.guard_summary, reconcileState, t],\n );\n const isPaymentPending =\n String(status || \"\")\n .trim()\n .toUpperCase() === \"PAYMENT_PENDING\";\n const showPaymentWaitState = requestPaymentLock.isLocked || isPaymentPending;\n const requestGuardCurrentAccess = describeGuardCurrentAccess(\n requestRecord.guard_summary ?? null,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n },\n );\n const eventPaymentSessionId = useMemo(() => {\n const events = Array.isArray(dataRecord.events) ? dataRecord.events : [];\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const candidate = readPaymentSessionIdFromUnknown(getEventPayload(events[index]));\n if (candidate) return candidate;\n }\n return \"\";\n }, [dataRecord.events]);\n const effectivePaymentSessionId =\n readFirstString(\n requestPaymentLock.paymentSessionId,\n requestRecord.payment_session_id,\n requestRecord.paymentSessionId,\n requestPayment.payment_session_id,\n requestPayment.paymentSessionId,\n requestPaymentSummary.payment_session_id,\n requestPaymentSummary.paymentSessionId,\n eventPaymentSessionId,\n ) || \"\";\n const directPaymentUrl =\n readFirstString(\n requestRecord.payment_resume_url,\n requestRecord.paymentResumeUrl,\n requestPayment.resume_url,\n requestPayment.resumeUrl,\n requestPaymentSummary.payment_resume_url,\n requestPaymentSummary.paymentResumeUrl,\n requestPaymentLock.actionUrl,\n ) || \"\";\n const paymentSurfaceHref = (() => {\n if (!effectivePaymentSessionId) return \"\";\n const installationId = readFirstString(requestRecord.installation_id) || undefined;\n if (effectiveXappId) {\n return buildOperationalSurfaceHref({\n surface: \"payments\",\n xappId: effectiveXappId,\n installationId,\n paymentSessionId: effectivePaymentSessionId,\n token: token || undefined,\n isEmbedded,\n });\n }\n const params = new URLSearchParams({\n paymentSessionId: effectivePaymentSessionId,\n ...(installationId ? { installationId } : {}),\n ...(token ? { token } : {}),\n });\n return `${isEmbedded ? \"/payments\" : \"/marketplace/payments\"}?${params.toString()}`;\n })();\n\n function getEventPayload(ev: unknown): unknown | null {\n const eventRecord = asRecord(ev);\n if (!Object.keys(eventRecord).length) return null;\n const keys = [\"data\", \"payload\", \"details\", \"detail\", \"meta\", \"extra\", \"context\"];\n for (const k of keys) {\n const v = eventRecord[k];\n if (v !== undefined) return v;\n }\n const err = asRecord(eventRecord.error);\n if (Object.keys(err).length) {\n if (err.details) return err.details;\n if (err.data) return err.data;\n if (err.meta) return err.meta;\n }\n return null;\n }\n\n function readPaymentSessionIdFromUnknown(value: unknown): string {\n const record = asRecord(value);\n const direct = readFirstString(\n record.payment_session_id,\n record.paymentSessionId,\n asRecord(record.action).payment_session_id,\n asRecord(record.action).paymentSessionId,\n asRecord(record.guard).payment_session_id,\n asRecord(asRecord(record.guard).action).payment_session_id,\n asRecord(asRecord(record.guard).action).paymentSessionId,\n );\n if (direct) return direct;\n const url = readFirstString(\n record.url,\n record.payment_url,\n record.paymentUrl,\n asRecord(record.action).url,\n asRecord(asRecord(record.guard).action).url,\n );\n if (!url) return \"\";\n try {\n const parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n );\n return (\n readFirstString(\n parsed.searchParams.get(\"payment_session_id\"),\n parsed.searchParams.get(\"paymentSessionId\"),\n ) || \"\"\n );\n } catch {\n return \"\";\n }\n }\n\n function extractGuardSummary(payload: unknown): {\n trigger: string;\n outcome: string;\n guardSlug: string;\n reason: string;\n actionKind: string;\n actionUrl: string;\n actionMessage: string;\n } | null {\n const p = asRecord(payload);\n const guard = asRecord(p.guard);\n const topAction = asRecord(p.action);\n const guardAction = asRecord(guard.action);\n const action = Object.keys(topAction).length > 0 ? topAction : guardAction;\n\n const trigger =\n readString(p.trigger) || readString(p.guardTrigger) || readString(p.guard_trigger);\n const outcome =\n readString(p.outcome) || readString(p.guardOutcome) || readString(p.guard_outcome);\n const guardSlug = readString(guard.slug) || readString(p.guardSlug) || readString(p.guard_slug);\n const reason =\n readString(guard.reason) ||\n readString(p.reason) ||\n readString(p.guardReason) ||\n readString(p.guard_reason);\n const actionKind = readString(action.kind);\n const actionUrl = readString(action.url);\n const actionMessage = readString(action.message);\n\n if (!trigger && !outcome && !guardSlug && !reason && !actionKind) return null;\n return { trigger, outcome, guardSlug, reason, actionKind, actionUrl, actionMessage };\n }\n\n function renderGuardActionLabel(summary: ReturnType<typeof extractGuardSummary>): string {\n if (!summary) return \"\";\n const suffix = summary.actionUrl ? ` (${summary.actionUrl})` : \"\";\n if (summary.actionKind === \"upgrade_subscription\") {\n return t(\n \"activity.guard_action_upgrade_subscription\",\n { suffix },\n \"Upgrade subscription{suffix}\",\n );\n }\n if (summary.actionKind === \"complete_payment\") {\n return t(\"activity.guard_action_complete_payment\", { suffix }, \"Complete payment{suffix}\");\n }\n if (summary.actionKind === \"step_up_auth\") {\n return t(\n \"activity.guard_action_step_up_authentication\",\n { suffix },\n \"Complete step-up authentication{suffix}\",\n );\n }\n if (summary.actionKind === \"confirm_action\") {\n return summary.actionMessage\n ? t(\n \"activity.guard_action_confirm_action_message\",\n { message: summary.actionMessage },\n \"Confirm action ({message})\",\n )\n : t(\"activity.guard_action_confirm_action\", undefined, \"Confirm action\");\n }\n return summary.actionKind\n ? t(\"activity.guard_action_custom\", { kind: summary.actionKind }, \"Action: {kind}\")\n : \"\";\n }\n\n function relativeTime(dateValue: unknown): string {\n try {\n const parsed = parseDateValue(dateValue);\n if (!parsed) return \"\";\n const now = Date.now();\n const then = parsed.getTime();\n if (Number.isNaN(then)) return \"\";\n const diff = now - then;\n if (diff < 0) return t(\"common.just_now\", undefined, \"just now\");\n const seconds = Math.floor(diff / 1000);\n if (seconds < 10) return t(\"common.just_now\", undefined, \"just now\");\n if (seconds < 60) return t(\"common.seconds_ago\", { value: seconds }, \"{value}s ago\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"common.minutes_ago\", { value: minutes }, \"{value}m ago\");\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t(\"common.hours_ago\", { value: hours }, \"{value}h ago\");\n const days = Math.floor(hours / 24);\n return t(\"common.days_ago\", { value: days }, \"{value}d ago\");\n } catch {\n return \"\";\n }\n }\n\n const [expandedPayloads, setExpandedPayloads] = useState<Record<number, boolean>>({});\n const [timelineOpen, setTimelineOpen] = useState(false);\n\n function togglePayload(idx: number) {\n setExpandedPayloads((prev) => ({ ...prev, [idx]: !prev[idx] }));\n }\n\n function renderEventPayload(ev: unknown, idx: number) {\n const raw = getEventPayload(ev);\n if (raw == null) return null;\n const enriched = attachArtifactLinks(raw, artifacts);\n const isOpen = expandedPayloads[idx] ?? false;\n return (\n <>\n <button\n className={`mx-event-payload-toggle ${isOpen ? \"is-open\" : \"\"}`}\n onClick={() => togglePayload(idx)}\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n {isOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"activity.show_details\", undefined, \"Show details\")}\n </button>\n {isOpen && (\n <div className=\"mx-event-payload-body\">\n <SchemaOutputView schema={null} value={enriched} />\n </div>\n )}\n </>\n );\n }\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n async function continuePayment() {\n if (client.reconcileMyRequestPayment && isPaymentPending) {\n setReconcileError(null);\n setReconcileState(\"confirming_payment\");\n setReconcileBusy(true);\n try {\n const hostReturnUrl = readHostReturnUrl(loc.search);\n const currentReturnUrl = String(\n hostReturnUrl || (typeof window !== \"undefined\" ? window.location.href : \"\") || \"\",\n ).trim();\n const res = await client.reconcileMyRequestPayment({\n requestId: String(id),\n paymentSessionId: isPaymentPending ? undefined : effectivePaymentSessionId || undefined,\n returnUrl: currentReturnUrl || undefined,\n cancelUrl: currentReturnUrl || undefined,\n });\n setReconcileState(res?.finality_state || \"none\");\n const redirectUrl = String(res?.redirect_url || \"\").trim();\n if (redirectUrl) {\n navigateToExternalOrHost(redirectUrl);\n return;\n }\n await refreshOnce();\n return;\n } catch (e) {\n setReconcileError(readFirstString(asRecord(e).message) || String(e));\n setReconcileState(\"failed\");\n return;\n } finally {\n setReconcileBusy(false);\n }\n }\n\n if (directPaymentUrl) {\n navigateToExternalOrHost(directPaymentUrl);\n return;\n }\n if (paymentSurfaceHref) {\n void navigate(paymentSurfaceHref);\n }\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {env?.singleXappMode && !env?.embedMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {xappTo && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !env?.embedMode)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappTo}>{xappCrumbLabel}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToRequests as any}>\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span className=\"mx-cell-mono\">{id?.slice(0, 8)}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {t(\"activity.request_detail_title\", undefined, \"Request Details\")}\n </h1>\n <div className=\"mx-header-actions\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refreshOnce()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {busy && !data ? (\n <div className=\"mx-request-detail-skeleton\">\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-meta-grid\">\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n </div>\n </div>\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ) : (\n <div className=\"mx-detail-grid\">\n <div className=\"mx-detail-main\">\n <section className=\"mx-table-container mx-request-section\">\n <div className=\"mx-request-section-head\">\n <div>\n <h2 className=\"mx-title mx-request-section-title\">{title}</h2>\n <div className=\"mx-request-meta-row\">\n <span>{effectiveXappTitle || \"\u2014\"}</span>\n {readString(requestRecord.xapp_version) && (\n <>\n <span>\u00B7</span>\n <span>v{readString(requestRecord.xapp_version)}</span>\n </>\n )}\n </div>\n </div>\n <StatusBadge status={status ?? \"\"} />\n </div>\n\n <div className=\"mx-request-meta-grid\">\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.request_id\", undefined, \"Request ID\")}\n </span>\n <code className=\"mx-request-code\">{id}</code>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.tool\", undefined, \"Tool\")}</span>\n <span className=\"mx-meta-value\">\n {title || readFirstString(requestRecord.tool_name) || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.created\", undefined, \"Created\")}</span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.created_at) || \"\u2014\"}\n </span>\n </div>\n {readString(requestRecord.completed_at) && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.completed\", undefined, \"Completed\")}\n </span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.completed_at) || \"\u2014\"}\n </span>\n </div>\n )}\n </div>\n </section>\n\n <section className=\"mx-table-container mx-request-section\">\n <h3 className=\"mx-section-title mx-section-title-md\">\n {t(\"activity.response_title\", undefined, \"Response\")}\n </h3>\n {showPaymentWaitState ? (\n <div className=\"mx-payment-lock-banner\">\n <div className=\"mx-payment-lock-title\">\n {isPaymentPending\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : t(\"activity.payment_required\", undefined, \"Payment Required\")}\n </div>\n <div className=\"mx-payment-lock-message\">\n {requestPaymentLock.isLocked\n ? requestPaymentLock.message\n : t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n {requestGuardCurrentAccess ? (\n <div className=\"mx-payment-lock-message\">\n {t(\n \"activity.current_access_detail\",\n { value: requestGuardCurrentAccess },\n \"Current access: {value}\",\n )}\n </div>\n ) : null}\n <div className=\"mx-payment-lock-actions\">\n {isPaymentPending ||\n effectivePaymentSessionId ||\n directPaymentUrl ||\n paymentSurfaceHref ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n onClick={() => void continuePayment()}\n disabled={reconcileBusy}\n >\n {t(\"activity.complete_payment\", undefined, \"Complete Payment\")}\n </button>\n ) : null}\n <button className=\"mx-btn mx-btn-secondary\" onClick={() => void refreshOnce()}>\n {t(\"activity.refresh_status\", undefined, \"Refresh Status\")}\n </button>\n </div>\n {reconcileError ? (\n <div className=\"mx-payment-lock-error\">{reconcileError}</div>\n ) : null}\n </div>\n ) : null}\n {!isTerminal ? (\n showPaymentWaitState ? (\n <div className=\"mx-waiting-state\">\n {t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n ) : (\n <div className=\"mx-waiting-state\">\n {t(\"activity.waiting_for_response\", undefined, \"Waiting for response\u2026\")}\n </div>\n )\n ) : (\n <SchemaOutputView schema={outputSchema} value={responsePayload} />\n )}\n </section>\n\n {Array.isArray(dataRecord.events) &&\n dataRecord.events.length > 0 &&\n (() => {\n const evts = dataRecord.events;\n const classifyEvent = (ev: unknown) => {\n const t = readString(asRecord(ev).type).toLowerCase();\n if (t.includes(\"fail\") || t.includes(\"error\") || t.includes(\"exception\"))\n return \"error\";\n if (t.includes(\"warn\") || t.includes(\"retry\")) return \"warn\";\n if (t.includes(\"complet\") || t.includes(\"success\") || t.includes(\"done\"))\n return \"success\";\n return \"default\";\n };\n const errorCount = evts.filter((e) => classifyEvent(e) === \"error\").length;\n const successCount = evts.filter((e) => classifyEvent(e) === \"success\").length;\n const firstTs = parseDateValue(asRecord(evts[0]).created_at);\n const lastTs = parseDateValue(asRecord(evts[evts.length - 1]).created_at);\n let durationLabel = \"\";\n if (firstTs && lastTs) {\n const ms = Math.abs(lastTs.getTime() - firstTs.getTime());\n if (ms < 1000) {\n durationLabel = t(\"activity.timeline_duration_ms\", { value: ms }, \"{value}ms\");\n } else if (ms < 60_000) {\n durationLabel = t(\n \"activity.timeline_duration_seconds\",\n { value: (ms / 1000).toFixed(1) },\n \"{value}s\",\n );\n } else {\n durationLabel = t(\n \"activity.timeline_duration_minutes\",\n { value: (ms / 60_000).toFixed(1) },\n \"{value}m\",\n );\n }\n }\n return (\n <section className=\"mx-table-container mx-request-section\">\n <button\n type=\"button\"\n className=\"mx-timeline-toggle\"\n onClick={() => setTimelineOpen((v) => !v)}\n aria-expanded={timelineOpen}\n >\n <svg\n className={`mx-timeline-chevron ${timelineOpen ? \"is-open\" : \"\"}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <div className=\"mx-timeline-toggle-content\">\n <div className=\"mx-timeline-toggle-top\">\n <h3 className=\"mx-section-title mx-section-title-md mx-section-title-tight\">\n {t(\"activity.execution_timeline\", undefined, \"Execution Timeline\")}\n </h3>\n <span className=\"mx-timeline-count\">\n {evts.length === 1\n ? t(\n \"activity.timeline_count_one\",\n { count: evts.length },\n \"{count} event\",\n )\n : t(\n \"activity.timeline_count_other\",\n { count: evts.length },\n \"{count} events\",\n )}\n </span>\n </div>\n {!timelineOpen && (\n <div className=\"mx-timeline-summary\">\n <div className=\"mx-timeline-dots\">\n {evts.map((ev, i: number) => (\n <span\n key={i}\n className={`mx-timeline-mini-dot mx-timeline-mini-dot-${classifyEvent(ev)}`}\n />\n ))}\n </div>\n <div className=\"mx-timeline-summary-stats\">\n {errorCount > 0 && (\n <span className=\"mx-timeline-stat mx-timeline-stat-error\">\n {errorCount === 1\n ? t(\n \"activity.timeline_error_count_one\",\n { count: errorCount },\n \"{count} error\",\n )\n : t(\n \"activity.timeline_error_count_other\",\n { count: errorCount },\n \"{count} errors\",\n )}\n </span>\n )}\n {durationLabel && (\n <span className=\"mx-timeline-stat mx-timeline-stat-duration\">\n {durationLabel}\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n </button>\n {timelineOpen && (\n <ol className=\"mx-timeline\">\n {dataRecord.events.map((ev, idx: number) => {\n const eventRecord = asRecord(ev);\n const typeText =\n readFirstString(eventRecord.type) ||\n t(\"activity.event_fallback\", undefined, \"event\");\n const lower = typeText.toLowerCase();\n const isErr =\n lower.includes(\"fail\") ||\n lower.includes(\"error\") ||\n lower.includes(\"exception\");\n const isWarn = lower.includes(\"warn\") || lower.includes(\"retry\");\n const isComplete =\n lower.includes(\"complet\") ||\n lower.includes(\"success\") ||\n lower.includes(\"done\");\n\n const dotClass = isErr\n ? \"mx-timeline-dot-error\"\n : isWarn\n ? \"mx-timeline-dot-warn\"\n : isComplete\n ? \"mx-timeline-dot-success\"\n : \"mx-timeline-dot-default\";\n\n const progress =\n typeof eventRecord.progress === \"number\" ? eventRecord.progress : null;\n const guardSummary =\n extractGuardSummary(ev) ??\n extractGuardSummary(getEventPayload(ev)) ??\n extractGuardSummary(eventRecord.payload);\n const guardActionLabel = renderGuardActionLabel(guardSummary);\n const guardMonetizationSource =\n getEventPayload(ev) ?? eventRecord.payload ?? ev;\n const guardCurrentAccess = describeGuardCurrentAccess(\n guardMonetizationSource,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\n \"xapp.subscription_coverage_inactive\",\n undefined,\n \"Not covered\",\n ),\n },\n );\n\n return (\n <li\n key={readFirstString(eventRecord.id) || String(idx)}\n className=\"mx-timeline-item\"\n >\n <div className={`mx-timeline-dot ${dotClass}`}>\n {isErr ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : isComplete ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : isWarn ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ) : null}\n </div>\n <div\n className={`mx-event-card ${isErr ? \"mx-event-card-error\" : isWarn ? \"mx-event-card-warn\" : \"\"}`}\n >\n <div className=\"mx-event-head\">\n <div\n className={`mx-event-type ${isErr ? \"mx-event-type-error\" : isWarn ? \"mx-event-type-warn\" : \"\"}`}\n >\n {typeText}\n {readString(eventRecord.code) && (\n <span className=\"mx-event-code\">\n {readString(eventRecord.code)}\n </span>\n )}\n </div>\n <div className=\"mx-event-time\">\n <div className=\"mx-event-date\">\n {formatDateTime(eventRecord.created_at)}\n </div>\n {parseDateValue(eventRecord.created_at) && (\n <div className=\"mx-event-relative\">\n {relativeTime(eventRecord.created_at)}\n </div>\n )}\n </div>\n </div>\n\n {readString(eventRecord.message) && (\n <div className=\"mx-event-message\">\n {readString(eventRecord.message)}\n </div>\n )}\n\n {guardSummary && (\n <div className=\"mx-event-guard\">\n <div className=\"mx-event-guard-badges\">\n {guardSummary.guardSlug && (\n <span className=\"mx-badge\">\n {t(\n \"activity.guard_badge\",\n { value: guardSummary.guardSlug },\n \"guard: {value}\",\n )}\n </span>\n )}\n {guardSummary.trigger && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.trigger_badge\",\n { value: guardSummary.trigger },\n \"trigger: {value}\",\n )}\n </span>\n )}\n {guardSummary.outcome && (\n <span className=\"mx-badge mx-badge-success\">\n {t(\n \"activity.outcome_badge\",\n { value: guardSummary.outcome },\n \"outcome: {value}\",\n )}\n </span>\n )}\n {guardCurrentAccess && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.current_access_badge\",\n { value: guardCurrentAccess },\n \"access: {value}\",\n )}\n </span>\n )}\n </div>\n {(guardSummary.reason || guardActionLabel) && (\n <div className=\"mx-event-guard-detail\">\n {guardSummary.reason\n ? t(\n \"activity.reason_detail\",\n { value: guardSummary.reason },\n \"reason={value}\",\n )\n : \"\"}\n {guardSummary.reason && guardActionLabel ? \" \u00B7 \" : \"\"}\n {guardActionLabel}\n </div>\n )}\n </div>\n )}\n\n {progress != null && (\n <div className=\"mx-event-progress-track\">\n <div\n className={`mx-event-progress-bar ${isErr ? \"mx-event-progress-error\" : \"mx-event-progress-default\"}`}\n style={{\n width: `${Math.max(0, Math.min(100, progress <= 1 ? progress * 100 : progress))}%`,\n }}\n />\n </div>\n )}\n\n {renderEventPayload(ev, idx)}\n </div>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n );\n })()}\n </div>\n\n <aside className=\"mx-detail-sidebar\">\n {artifacts.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.artifacts_title\", undefined, \"Artifacts\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {artifacts.map((a) => {\n const artifact = asRecord(a);\n return (\n <a\n key={readFirstString(artifact.id, artifact.url, artifact.filename)}\n href={readFirstString(artifact.url) || \"#\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-sidebar-artifact-link\"\n >\n {readFirstString(artifact.filename) ||\n t(\"activity.download_artifact\", undefined, \"Download Artifact\")}\n </a>\n );\n })}\n </div>\n </div>\n )}\n\n {readString(requestRecord.installation_id) &&\n Array.isArray(dataRecord.widgets) &&\n dataRecord.widgets.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.related_widgets_title\", undefined, \"Related Widgets\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {(Array.isArray(dataRecord.widgets) ? dataRecord.widgets : []).map((w) => {\n const widget = asRecord(w);\n return (\n <button\n key={readFirstString(widget.id)}\n className=\"mx-btn mx-btn-primary mx-btn-sidebar\"\n onClick={() => {\n const installationId = readFirstString(requestRecord.installation_id);\n const widgetId = readFirstString(widget.id);\n const widgetName =\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\");\n if (!installationId || !widgetId) return;\n\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId,\n widgetId,\n xappId: readString(requestRecord.xapp_id),\n xappTitle: effectiveXappTitle,\n widgetName,\n toolName: readString(requestRecord.tool_name),\n });\n }}\n >\n {t(\n \"activity.open_widget\",\n {\n widget:\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n },\n `Open ${\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\")\n }`,\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.help_title\", undefined, \"Help\")}\n </h3>\n <p className=\"mx-sidebar-help-text\">\n {t(\n \"activity.help_request\",\n undefined,\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n )}\n </p>\n <Link to={backToRequests as any} className=\"mx-btn mx-btn-outline mx-btn-sidebar\">\n {t(\"activity.back_to_requests\", undefined, \"Back to Requests\")}\n </Link>\n </div>\n </aside>\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\n\ntype JsonSchema = Record<string, unknown> | null;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction isPrimitive(value: unknown) {\n return value == null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\nfunction asArtifactLink(\n value: unknown,\n): { filename?: string; url: string; mimeType?: string } | null {\n const record = asRecord(value);\n if (typeof record.url === \"string\") {\n return {\n filename: typeof record.filename === \"string\" ? record.filename : undefined,\n url: record.url,\n mimeType: typeof record.mimeType === \"string\" ? record.mimeType : undefined,\n };\n }\n return null;\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div style={{ display: \"grid\", gap: 6, padding: \"8px 0\", borderBottom: \"1px solid #f3f4f6\" }}>\n <div style={{ fontSize: 12, color: \"#6b7280\" }}>{label}</div>\n <div>{children}</div>\n </div>\n );\n}\n\nfunction renderValue(schema: JsonSchema | undefined, value: unknown): React.ReactNode {\n const artifact = asArtifactLink(value);\n if (artifact) {\n return (\n <a href={artifact.url} target=\"_blank\" rel=\"noreferrer\">\n {artifact.filename ?? artifact.url}\n </a>\n );\n }\n\n if (isPrimitive(value)) {\n return (\n <code style={{ fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\" }}>\n {String(value)}\n </code>\n );\n }\n\n if (Array.isArray(value)) {\n const itemSchema = asRecord(schema?.items);\n return (\n <div style={{ display: \"grid\", gap: 8 }}>\n {value.map((v, idx) => (\n <div key={idx} style={{ padding: 10, border: \"1px solid #e5e7eb\", borderRadius: 10 }}>\n {renderValue(itemSchema, v)}\n </div>\n ))}\n </div>\n );\n }\n\n // object\n const props = asRecord(schema?.properties);\n const valueRecord = asRecord(value);\n const keys = Object.keys(props).length ? Object.keys(props) : Object.keys(valueRecord);\n return (\n <div>\n {keys.map((k) => (\n <Field key={k} label={asRecord(props[k]).title ? String(asRecord(props[k]).title) : k}>\n {renderValue(asRecord(props[k]), valueRecord[k])}\n </Field>\n ))}\n </div>\n );\n}\n\nexport function SchemaOutputView({ schema, value }: { schema: JsonSchema; value: unknown }) {\n if (!schema) {\n return (\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n background: \"#f8fafc\",\n padding: 12,\n borderRadius: 12,\n }}\n >\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n }\n\n return <div>{renderValue(schema, value)}</div>;\n}\n", "export type PaymentReconcileState =\n | \"none\"\n | \"confirming_payment\"\n | \"still_pending\"\n | \"confirmed_paid\"\n | \"failed\";\n\nexport type PaymentLockResolution = {\n isLocked: boolean;\n reason: string;\n actionKind: string;\n actionUrl: string;\n ctaLabel: string;\n message: string;\n paymentSessionId: string | null;\n paymentAttemptState: string;\n reconcileState: PaymentReconcileState;\n monetizationState: Record<string, unknown> | null;\n};\n\ntype PaymentLockTranslate = (key: string, fallback: string) => string;\ntype PaymentLockOptions = {\n reconcileState?: PaymentReconcileState | null;\n requestStatus?: string | null;\n paymentStatus?: string | null;\n t?: PaymentLockTranslate;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction resolveAction(summary: Record<string, unknown>): Record<string, unknown> {\n const topAction = asRecord(summary.action);\n if (Object.keys(topAction).length > 0) return topAction;\n const details = asRecord(summary.details);\n const detailsAction = asRecord(details.action);\n if (Object.keys(detailsAction).length > 0) return detailsAction;\n const guard = asRecord(summary.guard);\n const guardAction = asRecord(guard.action);\n if (Object.keys(guardAction).length > 0) return guardAction;\n return {};\n}\n\nfunction normalizeActionKind(raw: string): string {\n return readString(raw).toLowerCase();\n}\n\nfunction resolveText(t: PaymentLockTranslate | undefined, key: string, fallback: string): string {\n return typeof t === \"function\" ? t(key, fallback) : fallback;\n}\n\nfunction isSettledPaymentStatus(value: unknown): boolean {\n const normalized = readString(value).toLowerCase();\n return (\n normalized === \"paid\" ||\n normalized === \"settled\" ||\n normalized === \"succeeded\" ||\n normalized === \"completed\"\n );\n}\n\nfunction resolveCtaLabel(actionKind: string, t?: PaymentLockTranslate): string {\n if (actionKind === \"complete_payment\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n if (actionKind === \"payment_required\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n return resolveText(t, \"payment_lock.continue\", \"Continue\");\n}\n\nfunction resolveLockMessage(\n reason: string,\n paymentAttemptState: string,\n reconcileState: PaymentReconcileState,\n t?: PaymentLockTranslate,\n): string {\n if (reconcileState === \"confirming_payment\") {\n return resolveText(\n t,\n \"payment_lock.confirming_payment_finality\",\n \"Confirming payment finality with provider.\",\n );\n }\n if (reconcileState === \"still_pending\") {\n return resolveText(\n t,\n \"payment_lock.pending_retry_confirm\",\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n );\n }\n if (reconcileState === \"confirmed_paid\") {\n return resolveText(\n t,\n \"payment_lock.confirmed_refresh\",\n \"Payment is confirmed. Refresh to continue.\",\n );\n }\n if (reconcileState === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.not_settled_new_attempt\",\n \"Payment is not settled. Complete a new payment attempt.\",\n );\n }\n const attempt = readString(paymentAttemptState).toLowerCase();\n if (attempt === \"requires_action\") {\n return resolveText(\n t,\n \"payment_lock.requires_additional_action\",\n \"Payment requires additional action. Complete payment to continue.\",\n );\n }\n if (attempt === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.attempt_failed\",\n \"Last payment attempt failed. Complete payment to continue.\",\n );\n }\n if (attempt === \"replayed\") {\n return resolveText(\n t,\n \"payment_lock.evidence_used\",\n \"Payment evidence was already used. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_receipt_already_used\") {\n return resolveText(\n t,\n \"payment_lock.evidence_consumed\",\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_evidence_missing\" || reason === \"payment_required\") {\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n }\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n}\n\nexport function resolvePaymentLockStateFromGuardSummary(\n summaryInput: unknown,\n options?: PaymentLockOptions,\n): PaymentLockResolution {\n const summary = asRecord(summaryInput);\n const action = resolveAction(summary);\n const actionKind = normalizeActionKind(String(action.kind ?? summary.reason ?? \"\"));\n const actionUrl = readString(action.url);\n const reason = readString(summary.reason).toLowerCase();\n const monetizationState = asRecord(summary.monetization_state);\n const paymentSessionId =\n readString(monetizationState.payment_session_id) || readString(action.payment_session_id);\n const paymentAttemptState = readString(monetizationState.payment_attempt_state).toLowerCase();\n const reconcileState = ((): PaymentReconcileState => {\n const candidate = readString(options?.reconcileState).toLowerCase();\n if (\n candidate === \"confirming_payment\" ||\n candidate === \"still_pending\" ||\n candidate === \"confirmed_paid\" ||\n candidate === \"failed\"\n ) {\n return candidate;\n }\n return \"none\";\n })();\n const isPaymentKind = actionKind === \"complete_payment\" || actionKind === \"payment_required\";\n const isPaymentReason =\n reason === \"payment_required\" ||\n reason === \"payment_evidence_missing\" ||\n reason === \"payment_receipt_already_used\";\n const requestStatus = readString(options?.requestStatus).toUpperCase();\n const paymentSettled = isSettledPaymentStatus(options?.paymentStatus);\n const isHeldForPayment = requestStatus === \"PAYMENT_PENDING\";\n const isResolvedPastHold = paymentSettled && requestStatus !== \"\" && !isHeldForPayment;\n const isLocked = !isResolvedPastHold && (isPaymentKind || isPaymentReason);\n\n return {\n isLocked,\n reason,\n actionKind,\n actionUrl,\n ctaLabel: resolveCtaLabel(actionKind, options?.t),\n message: resolveLockMessage(reason, paymentAttemptState, reconcileState, options?.t),\n paymentSessionId: paymentSessionId || null,\n paymentAttemptState: paymentAttemptState || \"unknown\",\n reconcileState,\n monetizationState: Object.keys(monetizationState).length > 0 ? monetizationState : null,\n };\n}\n", "function asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nexport function readGuardMonetizationState(input: unknown): Record<string, unknown> | null {\n const root = asRecord(input);\n const details = asRecord(root.details);\n const guard = asRecord(root.guard);\n const guardDetails = asRecord(guard.details);\n const candidates = [\n asRecord(root.monetization_state),\n asRecord(details.monetization_state),\n asRecord(guardDetails.monetization_state),\n ];\n for (const candidate of candidates) {\n if (Object.keys(candidate).length > 0) return candidate;\n }\n return null;\n}\n\nexport function readGuardHasCurrentAccess(input: unknown): boolean | null {\n const value = readGuardMonetizationState(input)?.has_current_access;\n return typeof value === \"boolean\" ? value : null;\n}\n\nexport function describeGuardCurrentAccess(\n input: unknown,\n labels: { available: string; unavailable: string },\n): string {\n const hasCurrentAccess = readGuardHasCurrentAccess(input);\n if (hasCurrentAccess === null) return \"\";\n return hasCurrentAccess ? labels.available : labels.unavailable;\n}\n", "import type {\n CatalogXappDetail,\n MarketplaceClient,\n MarketplaceEnv,\n OperationalSurfacePlacement,\n OperationalSurfacesDescriptor,\n} from \"../types\";\n\nexport type OperationalSurfaceKey = keyof OperationalSurfacesDescriptor;\n\nfunction readPathEmbedded(): boolean {\n return typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n}\n\nexport function getOperationalSurfaces(\n detail: CatalogXappDetail | null | undefined,\n): OperationalSurfacesDescriptor | null {\n const value = detail?.operational_surfaces;\n if (!value || typeof value !== \"object\") return null;\n return value;\n}\n\nfunction readOperationalSurfaceMode(input: {\n env?: MarketplaceEnv;\n isEmbedded: boolean;\n}): \"contract\" | \"testing_all\" {\n const policy = input.env?.operationalSurfacesVisibility;\n return input.isEmbedded ? (policy?.embed ?? \"contract\") : (policy?.portal ?? \"contract\");\n}\n\nexport function isOperationalSurfaceVisible(\n detail: CatalogXappDetail | null | undefined,\n surface: OperationalSurfaceKey,\n options?: { isEmbedded?: boolean },\n): boolean {\n const surfaces = getOperationalSurfaces(detail);\n const descriptor = surfaces?.[surface];\n if (!descriptor?.enabled) return false;\n const isEmbedded = options?.isEmbedded ?? readPathEmbedded();\n return isEmbedded ? descriptor.visibility.embed : descriptor.visibility.portal;\n}\n\nexport function surfaceClientAvailable(\n client: MarketplaceClient,\n surface: OperationalSurfaceKey,\n): boolean {\n if (surface === \"requests\") return typeof client.listMyRequests === \"function\";\n if (surface === \"payments\") return typeof client.listMyPaymentSessions === \"function\";\n if (surface === \"invoices\") return typeof client.listMyInvoices === \"function\";\n if (surface === \"notifications\") return typeof client.listMyNotifications === \"function\";\n return false;\n}\n\nexport function buildOperationalSurfaceHref(input: {\n surface: OperationalSurfaceKey;\n xappId: string;\n installationId?: string;\n requestId?: string;\n paymentSessionId?: string;\n invoiceId?: string;\n notificationId?: string;\n token?: string;\n isEmbedded?: boolean;\n}): string {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.installationId ? { installationId: input.installationId } : {}),\n ...(input.paymentSessionId ? { paymentSessionId: input.paymentSessionId } : {}),\n ...(input.invoiceId ? { invoiceId: input.invoiceId } : {}),\n ...(input.notificationId ? { notificationId: input.notificationId } : {}),\n ...(input.token ? { token: input.token } : {}),\n });\n const base = isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`;\n const detailSegment =\n input.surface === \"requests\" && input.requestId\n ? `/${encodeURIComponent(input.requestId)}`\n : \"\";\n return `${base}${detailSegment}?${params.toString()}`;\n}\n\nexport function getVisibleOperationalSurfaces(input: {\n detail: CatalogXappDetail | null | undefined;\n client: MarketplaceClient;\n env?: MarketplaceEnv;\n isEmbedded?: boolean;\n}): OperationalSurfaceKey[] {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const mode = readOperationalSurfaceMode({\n env: input.env,\n isEmbedded,\n });\n const allSurfaces = [\n \"requests\",\n \"payments\",\n \"invoices\",\n \"notifications\",\n ] as OperationalSurfaceKey[];\n if (mode === \"testing_all\") {\n return allSurfaces.filter((surface) => {\n if (surface === \"requests\" && input.env?.requestsEnabled === false) return false;\n return surfaceClientAvailable(input.client, surface);\n });\n }\n const surfaces = getOperationalSurfaces(input.detail);\n if (!surfaces) return [];\n return allSurfaces.filter(\n (surface) =>\n surfaceClientAvailable(input.client, surface) &&\n isOperationalSurfaceVisible(input.detail, surface, { isEmbedded }),\n );\n}\n\nexport function getOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"requests\") return \"Requests\";\n if (surface === \"payments\") return \"Payments\";\n if (surface === \"invoices\") return \"Invoices\";\n return \"Notifications\";\n}\n\nexport function resolveOperationalSurfacePlacement(input: {\n env?: MarketplaceEnv;\n surface: OperationalSurfaceKey;\n isEmbedded?: boolean;\n}): OperationalSurfacePlacement {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const policy = input.env?.operationalSurfacePlacement;\n const scopePolicy = isEmbedded ? policy?.embed : policy?.portal;\n const bySurface = scopePolicy?.bySurface?.[input.surface];\n if (bySurface) return bySurface;\n return scopePolicy?.default ?? \"in_router\";\n}\n\nexport async function discoverOperationalSurfaceData(input: {\n client: MarketplaceClient;\n xappId: string;\n installationId?: string | null;\n}): Promise<OperationalSurfaceKey[]> {\n const xappId = String(input.xappId || \"\").trim();\n const installationId = String(input.installationId || \"\").trim();\n if (!xappId) return [];\n\n const queryBase = {\n xappId,\n ...(installationId ? { installationId } : {}),\n };\n\n const checks = await Promise.all([\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyPaymentSessions !== \"function\") return null;\n try {\n const res = await input.client.listMyPaymentSessions({\n ...queryBase,\n limit: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"payments\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyInvoices !== \"function\") return null;\n try {\n const res = await input.client.listMyInvoices({\n ...queryBase,\n page: 1,\n pageSize: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"invoices\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyNotifications !== \"function\") return null;\n try {\n const res = await input.client.listMyNotifications({\n ...queryBase,\n limit: 1,\n });\n return (Array.isArray(res?.items) && res.items.length > 0) ||\n Number(res?.unread_count || 0) > 0\n ? \"notifications\"\n : null;\n } catch {\n return null;\n }\n })(),\n ]);\n\n return checks.filter((surface): surface is OperationalSurfaceKey => Boolean(surface));\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport \"../marketplace.css\";\n\ntype RequestListPagination = {\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction renderGuardActionHint(summary: Record<string, unknown>): string {\n const action = asRecord(summary.action);\n const kind = readString(action.kind);\n if (kind === \"upgrade_subscription\") return \"Upgrade subscription\";\n if (kind === \"complete_payment\") return \"Complete payment\";\n if (kind === \"step_up_auth\") return \"Complete step-up authentication\";\n if (kind === \"confirm_action\") {\n const msg = readString(action.message);\n return msg ? `Confirm action (${msg})` : \"Confirm action\";\n }\n return kind ? `Action: ${kind}` : \"\";\n}\n\nexport function RequestsPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n\n const [items, setItems] = useState<unknown[]>([]);\n const [pagination, setPagination] = useState<RequestListPagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n\n async function refresh(page: number = 1) {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyRequests({\n xappId: xappIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res.items) ? res.items : []);\n setPagination(\n res.pagination\n ? {\n total: Number(res.pagination.total || 0),\n page: Number(res.pagination.page || 1),\n pageSize: Number(res.pagination.pageSize || 20),\n totalPages: Number(res.pagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"requests\",\n params: { xappId: xappIdFilter },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [xappIdFilter, pageParam]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n const detail = asRecord(res);\n const name =\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name);\n if (!alive) return;\n setXappTitle(name);\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n\n return () => {\n alive = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, xappIdFilter]);\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const backToContext =\n xappIdFilter && xappLink\n ? xappLink\n : {\n pathname: isEmbedded ? \"\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const clearHref = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n if (env?.requestsEnabled === false) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToContext as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {env?.singleXappMode && !isEmbedded && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {xappIdFilter && xappLink && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !isEmbedded)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappLink as any}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.requests_title\", undefined, \"Requests\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.requests_title\", undefined, \"Requests\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"requests\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_requests_for_prefix\", undefined, \"Showing requests for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || String(xappIdFilter)}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || String(xappIdFilter)}</span>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.id\", undefined, \"ID\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.version\", undefined, \"Version\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={5}\n data-label={t(\"common.status\", undefined, \"Status\")}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_requests\", undefined, \"Loading requests...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_requests\", undefined, \"No requests yet.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((r) => {\n const request = asRecord(r);\n const manifest = asRecord(request.manifest);\n const href = {\n pathname: `./${encodeURIComponent(readFirstString(request.id))}`,\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n }).toString()}`,\n };\n\n const tags: string[] = Array.isArray(manifest.tags)\n ? manifest.tags\n .filter((t) => typeof t === \"string\" && t.trim())\n .map((t) => String(t).trim())\n : [];\n const guardSummary = asRecord(request.guard_summary);\n const guardSlug =\n readString(guardSummary.slug) || readString(guardSummary.guardSlug);\n const guardReason = readString(guardSummary.reason);\n const guardOutcome = readString(guardSummary.outcome);\n const guardActionHint = renderGuardActionHint(guardSummary);\n const guardAccessHint = describeGuardCurrentAccess(guardSummary, {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n });\n const hasGuardInfo =\n Boolean(guardSlug) ||\n Boolean(guardReason) ||\n Boolean(guardActionHint) ||\n Boolean(guardAccessHint);\n\n return (\n <tr key={readFirstString(request.id)}>\n <td className=\"mx-cell-id\" data-label={t(\"common.id\", undefined, \"ID\")}>\n <Link to={href as any}>{readFirstString(request.id).slice(0, 8)}...</Link>\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n <div className=\"mx-cell-bold\">\n {resolveMarketplaceText(request.tool_title as any, locale) ||\n readFirstString(request.tool_name) ||\n \"\u2014\"}\n </div>\n {tags.length > 0 && (\n <div className=\"mx-card-tags mx-card-tags-inline\">\n {tags.slice(0, 3).map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n )}\n {hasGuardInfo && (\n <div className=\"mx-guard-summary\">\n <div>\n {guardSlug ? `guard=${guardSlug}` : \"\"}\n {guardSlug && guardOutcome ? \" \u00B7 \" : \"\"}\n {guardOutcome ? `outcome=${guardOutcome}` : \"\"}\n {(guardSlug || guardOutcome) && guardReason ? \" \u00B7 \" : \"\"}\n {guardReason ? `reason=${guardReason}` : \"\"}\n </div>\n {guardActionHint && <div>{guardActionHint}</div>}\n {guardAccessHint && (\n <div>\n {t(\n \"activity.current_access_detail\",\n { value: guardAccessHint },\n \"Current access: {value}\",\n )}\n </div>\n )}\n </div>\n )}\n </td>\n <td\n className=\"mx-cell-muted\"\n data-label={t(\"common.version\", undefined, \"Version\")}\n >\n {readString(request.xapp_version)\n ? `v${readString(request.xapp_version)}`\n : \"\u2014\"}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(request.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(request.created_at) || \"\u2014\"}\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.max(1, pageParam - 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam <= 1 || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </Link>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.min(pagination.totalPages, pageParam + 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam >= pagination.totalPages || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </Link>\n </div>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport type { TranslateFunction } from \"@xapps-platform/platform-i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport {\n hasMarketplaceCatalogMonetization,\n resolveMarketplaceDefaultAccessState,\n} from \"../utils/monetizationAccess\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getVisibleOperationalSurfaces,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport type {\n CatalogXappDetail,\n MarketplaceMonetizationAccessProjection,\n MarketplaceXappMonetizationState,\n} from \"../types\";\nimport \"../marketplace.css\";\n\ntype GuardInfo = {\n slug: string;\n trigger: string;\n headless: boolean;\n blocking: boolean;\n order: number | null;\n policyKind: string;\n};\n\ntype UsageCreditToolSummary = {\n tool_name: string;\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n};\n\ntype UsageCreditSummary = {\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n updated_at: string | null;\n by_tool: UsageCreditToolSummary[];\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQueryAction(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"action\") ?? \"\";\n}\n\nfunction useQueryToolName(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"toolName\") ?? qs.get(\"tool_name\") ?? \"\";\n}\n\nfunction buildRequestsHref(input: { xappId: string; token?: string; isEmbedded: boolean }): string {\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.token ? { token: input.token } : {}),\n });\n const s = params.toString();\n\n // IMPORTANT: Navigate from `xapps/:xappId` to the sibling `requests` route.\n // In Portal, this is sibling. In Embed, we want absolute path to be safe.\n if (input.isEmbedded) return `/requests?${s}`;\n return `/marketplace/requests?${s}`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction readBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction formatDateTime(value: unknown, locale: string): string {\n const raw = readString(value);\n if (!raw) return \"\";\n const parsed = new Date(raw);\n if (Number.isNaN(parsed.getTime())) return raw;\n try {\n return parsed.toLocaleString(locale || undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } catch {\n return parsed.toISOString();\n }\n}\n\nfunction normalizeUsageCreditSummary(value: unknown): UsageCreditSummary | null {\n const summary = asRecord(value);\n if (!summary) return null;\n const availableCount = readNumber(summary.available_count) ?? 0;\n const availableSessionBackedCount = readNumber(summary.available_session_backed_count) ?? 0;\n const availableLedgerOnlyCount = readNumber(summary.available_ledger_only_count) ?? 0;\n const reservedCount = readNumber(summary.reserved_count) ?? 0;\n const reservedActiveCount = readNumber(summary.reserved_active_count) ?? reservedCount;\n const reservedStaleCount = readNumber(summary.reserved_stale_count) ?? 0;\n const consumedCount = readNumber(summary.consumed_count) ?? 0;\n const byToolRaw = Array.isArray(summary.by_tool) ? summary.by_tool : [];\n const byTool = byToolRaw\n .map((entry): UsageCreditToolSummary | null => {\n const record = asRecord(entry);\n if (!record) return null;\n const toolName = readString(record.tool_name);\n if (!toolName) return null;\n return {\n tool_name: toolName,\n available_count: readNumber(record.available_count) ?? 0,\n available_session_backed_count: readNumber(record.available_session_backed_count) ?? 0,\n available_ledger_only_count: readNumber(record.available_ledger_only_count) ?? 0,\n reserved_count: readNumber(record.reserved_count) ?? 0,\n reserved_active_count:\n readNumber(record.reserved_active_count) ?? readNumber(record.reserved_count) ?? 0,\n reserved_stale_count: readNumber(record.reserved_stale_count) ?? 0,\n consumed_count: readNumber(record.consumed_count) ?? 0,\n };\n })\n .filter((entry): entry is UsageCreditToolSummary => Boolean(entry))\n .filter(\n (entry) =>\n entry.available_count > 0 ||\n entry.available_ledger_only_count > 0 ||\n entry.reserved_active_count > 0 ||\n entry.reserved_stale_count > 0,\n );\n if (\n availableCount <= 0 &&\n availableLedgerOnlyCount <= 0 &&\n reservedCount <= 0 &&\n consumedCount <= 0 &&\n byTool.length === 0\n ) {\n return null;\n }\n return {\n available_count: availableCount,\n available_session_backed_count: availableSessionBackedCount,\n available_ledger_only_count: availableLedgerOnlyCount,\n reserved_count: reservedCount,\n reserved_active_count: reservedActiveCount,\n reserved_stale_count: reservedStaleCount,\n consumed_count: consumedCount,\n updated_at: readString(summary.updated_at) || null,\n by_tool: byTool,\n };\n}\n\nfunction normalizeGuardPolicyKind(policy: unknown): string {\n if (policy === \"all\" || policy === \"any\") return policy;\n const policyObj = asRecord(policy);\n const mode = readString(policyObj?.mode);\n return mode === \"any\" ? \"any\" : \"all\";\n}\n\nfunction defaultBlockingForTrigger(trigger: string): boolean {\n return !trigger.startsWith(\"after:\");\n}\n\nfunction humanizeSlug(slug: string): string {\n return String(slug || \"\")\n .trim()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction humanizeTrigger(trigger: string, translate: TranslateFunction): string {\n const normalized = String(trigger || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"before:tool_run\") {\n return translate(\"xapp.trigger_before_tool_run\", undefined, \"Before running this app\");\n }\n if (normalized === \"after:tool_run\") {\n return translate(\"xapp.trigger_after_tool_run\", undefined, \"After this app finishes\");\n }\n if (normalized === \"before:widget_open\") {\n return translate(\"xapp.trigger_before_widget_open\", undefined, \"Before opening this app\");\n }\n if (normalized === \"after:widget_open\") {\n return translate(\"xapp.trigger_after_widget_open\", undefined, \"After opening this app\");\n }\n if (!normalized) return translate(\"xapp.trigger_default\", undefined, \"App stage\");\n return humanizeSlug(normalized.replace(/:/g, \" \"));\n}\n\nfunction describeGuardChain(policyKind: string, translate: TranslateFunction): string {\n return policyKind === \"any\"\n ? translate(\"xapp.policy_any\", undefined, \"Any one satisfies\")\n : translate(\"xapp.policy_all\", undefined, \"All steps apply\");\n}\n\nexport function XappDetailPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const { xappId } = useParams();\n const loc = useLocation();\n const token = useQueryToken();\n const action = useQueryAction();\n const queryToolName = useQueryToolName();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const autoOpenedWidgetKeyRef = useRef<string>(\"\");\n\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel =\n env?.copy?.addAppLabel || t(\"xapp.add_to_workspace\", undefined, \"Add to workspace\");\n const removeAppLabel =\n env?.copy?.removeAppLabel ||\n t(\"xapp.remove_from_workspace\", undefined, \"Remove from workspace\");\n const updateAppLabel = env?.copy?.updateAppLabel || t(\"xapp.update_app\", undefined, \"Update app\");\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n\n const [data, setData] = useState<Record<string, unknown> | null>(null);\n const [monetization, setMonetization] = useState<MarketplaceXappMonetizationState | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n\n const [termsOpen, setTermsOpen] = useState(false);\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsAction, setTermsAction] = useState<\"none\" | \"install\" | \"update\">(\"none\");\n const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const [guardSummaryOpen, setGuardSummaryOpen] = useState(false);\n\n const hasSubject = Boolean(host.subjectId);\n const installationsByXappId = hasSubject ? host.getInstallationsByXappId() : {};\n const installation = xappId ? installationsByXappId[String(xappId)] : null;\n const updateAvailable = Boolean(installation?.updateAvailable);\n const widgetsEnabled = Boolean(installation) && !updateAvailable && hasSubject;\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const singleXappMode = env?.singleXappMode;\n\n async function refresh() {\n if (!xappId) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getCatalogXapp(String(xappId), {\n installationId: installation?.installationId ?? null,\n });\n setData(asRecord(res));\n } catch (e) {\n setError(readString(asRecord(e)?.message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"xapp-detail\",\n params: { xappId },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, installation?.installationId, xappId]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId: currentXappId,\n installationId: installation?.installationId ?? null,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installation?.installationId, xappId]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId || !host.subjectId || typeof client.getMyXappMonetization !== \"function\") {\n setMonetization(null);\n return;\n }\n let cancelled = false;\n void (async () => {\n try {\n const next = await client.getMyXappMonetization!(currentXappId);\n if (!cancelled) {\n setMonetization(next);\n }\n } catch {\n if (!cancelled) {\n setMonetization(null);\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, host.subjectId, xappId]);\n\n const manifest = asRecord(data?.manifest);\n const xappRecord = asRecord(data?.xapp);\n const versionRecord = asRecord(data?.version);\n const publisherRecord = asRecord(xappRecord?.publisher);\n const title =\n resolveMarketplaceText(manifest?.title as any, locale) ||\n readString(xappRecord?.name) ||\n t(\"xapp.kicker_default\", undefined, \"Xapp\");\n const description =\n resolveMarketplaceText(manifest?.description as any, locale) ||\n readString(xappRecord?.description) ||\n \"\";\n const imageUrl = readString(manifest?.image) || \"https://picsum.photos/seed/xapps-detail/840/360\";\n\n const widgets: Record<string, unknown>[] = Array.isArray(data?.widgets)\n ? data.widgets.filter((widget): widget is Record<string, unknown> => Boolean(asRecord(widget)))\n : [];\n const defaultWidget = useMemo(() => {\n const def = widgets.find((w) => readBoolean(w.default, false));\n return def || widgets[0] || null;\n }, [widgets]);\n const requestedWidget = useMemo(() => {\n const desiredToolName = readString(queryToolName);\n if (!desiredToolName) return defaultWidget;\n return (\n widgets.find((widget) => readString(widget.bind_tool_name) === desiredToolName) ||\n defaultWidget\n );\n }, [defaultWidget, queryToolName, widgets]);\n\n const backTo = {\n pathname: isEmbedded ? \"/embed/catalog\" : \"..\",\n search: tokenSearch,\n };\n\n const terms = asRecord(manifest?.terms);\n const termsTitle =\n resolveMarketplaceText(terms?.title as any, locale) ||\n t(\"xapp.terms_title\", undefined, \"Terms & Conditions\");\n const termsText = resolveMarketplaceText(terms?.text as any, locale) || readString(terms?.text);\n const termsUrl = readString(terms?.url);\n const hasTermsContent = Boolean(termsText || termsUrl);\n const requiresTerms = Boolean(terms || action === \"install\" || action === \"update\");\n\n useEffect(() => {\n if (action === \"install\") {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsOpen(true);\n return;\n }\n if (action === \"update\" && installation) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsOpen(true);\n }\n }, [action, installation]);\n\n useEffect(() => {\n if (action !== \"open-widget\") return;\n if (env?.embedMode) return;\n if (!installation || !widgetsEnabled) return;\n\n const widget = requestedWidget;\n const widgetId = readString(widget?.id);\n if (!widgetId) return;\n\n const key = [\n String(xappId ?? \"\"),\n installation.installationId,\n widgetId,\n readString(queryToolName),\n ].join(\":\");\n if (autoOpenedWidgetKeyRef.current === key) return;\n autoOpenedWidgetKeyRef.current = key;\n\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(widget?.title as any, locale) ||\n readString(widget?.widget_name) ||\n readString(widget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n toolName: readString(widget?.bind_tool_name),\n });\n }, [\n action,\n env?.embedMode,\n host,\n installation,\n locale,\n queryToolName,\n requestedWidget,\n title,\n widgetsEnabled,\n xappId,\n ]);\n\n const requestsTo = buildRequestsHref({\n xappId: String(xappId ?? \"\"),\n isEmbedded,\n ...(token ? { token } : {}),\n });\n const detailForOperationalSurfaces = data as unknown as CatalogXappDetail | null;\n const visibleOperationalSurfaces = useMemo(\n () =>\n getVisibleOperationalSurfaces({\n detail: detailForOperationalSurfaces,\n client,\n env,\n isEmbedded,\n }),\n [client, detailForOperationalSurfaces, env, isEmbedded],\n );\n const secondarySurfaceLinks = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n ).filter((surface) => surface !== \"requests\");\n function getLocalizedOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"payments\") {\n return t(\"activity.payments_title\", undefined, \"Payments\");\n }\n if (surface === \"invoices\") {\n return t(\"activity.invoices_title\", undefined, \"Invoices\");\n }\n if (surface === \"notifications\") {\n return t(\"activity.notifications_title\", undefined, \"Notifications\");\n }\n return t(\"activity.requests_title\", undefined, \"Requests\");\n }\n const publisherSlug = readString(publisherRecord?.slug);\n const publisherName = readString(publisherRecord?.name) || publisherSlug;\n const publisherTo = publisherSlug\n ? {\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(publisherSlug)}`\n : `/marketplace/publishers/${encodeURIComponent(publisherSlug)}`,\n search: tokenSearch,\n }\n : null;\n const guardSummary = useMemo(() => {\n const guardsRaw = Array.isArray(manifest?.guards) ? manifest.guards : [];\n const policyMap = asRecord(manifest?.guards_policy) ?? {};\n const items: GuardInfo[] = guardsRaw\n .map((raw): GuardInfo | null => {\n const guard = asRecord(raw);\n if (!guard) return null;\n const trigger = readString(guard.trigger);\n const slug = readString(guard.slug);\n if (!trigger || !slug) return null;\n const policyKind = normalizeGuardPolicyKind(policyMap[trigger]);\n return {\n slug,\n trigger,\n headless: readBoolean(guard.headless, true),\n blocking: readBoolean(guard.blocking, defaultBlockingForTrigger(trigger)),\n order: readNumber(guard.order),\n policyKind,\n };\n })\n .filter((item): item is GuardInfo => Boolean(item))\n .sort((a, b) => {\n const orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n if (orderA !== orderB) return orderA - orderB;\n if (a.trigger !== b.trigger) return a.trigger.localeCompare(b.trigger);\n return a.slug.localeCompare(b.slug);\n });\n const byTrigger = new Map<string, GuardInfo[]>();\n for (const item of items) {\n const existing = byTrigger.get(item.trigger) ?? [];\n existing.push(item);\n byTrigger.set(item.trigger, existing);\n }\n return { items, byTrigger };\n }, [manifest]);\n const usageCreditSummary = useMemo(\n () => normalizeUsageCreditSummary(data?.usage_credit_summary),\n [data?.usage_credit_summary],\n );\n const monetizationAccessProjection =\n (monetization?.access_projection as\n | MarketplaceMonetizationAccessProjection\n | null\n | undefined) ?? null;\n const hasCatalogMonetization = hasMarketplaceCatalogMonetization(manifest);\n const monetizationAccess = asRecord(monetization?.access_projection);\n const monetizationSubscription = asRecord(monetization?.current_subscription);\n const overduePolicy = asRecord(monetizationSubscription?.overdue_policy);\n const currentTier =\n readString(monetizationSubscription?.tier) || readString(monetizationAccess?.tier);\n const balanceState = readString(monetizationAccess?.balance_state);\n const subscriptionStatus = readString(monetizationSubscription?.status);\n const subscriptionCoverage =\n typeof overduePolicy?.has_current_access === \"boolean\"\n ? overduePolicy.has_current_access\n ? t(\"xapp.subscription_coverage_active\", undefined, \"Still covered\")\n : t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\")\n : null;\n const subscriptionReasonKey = readString(overduePolicy?.effective_status_reason);\n const subscriptionReason =\n subscriptionReasonKey === \"grace_covered_past_due\"\n ? t(\n \"xapp.subscription_reason_grace_covered_past_due\",\n undefined,\n \"Coverage remains during grace period\",\n )\n : subscriptionReasonKey === \"past_due_after_period_end\"\n ? t(\n \"xapp.subscription_reason_past_due_after_period_end\",\n undefined,\n \"Current period ended without successful renewal\",\n )\n : subscriptionReasonKey === \"expired_after_boundary\"\n ? t(\n \"xapp.subscription_reason_expired_after_boundary\",\n undefined,\n \"Expiry boundary reached\",\n )\n : null;\n const overdueSince = formatDateTime(overduePolicy?.overdue_since, locale);\n const expiryBoundaryAt = formatDateTime(overduePolicy?.expiry_boundary_at, locale);\n const renewsAt = formatDateTime(monetizationSubscription?.renews_at, locale);\n const expiresAt =\n formatDateTime(monetizationSubscription?.expired_at, locale) ||\n formatDateTime(monetizationSubscription?.current_period_ends_at, locale);\n const creditsRemaining = readString(monetizationAccess?.credits_remaining);\n const accessState = resolveMarketplaceDefaultAccessState({\n projection: monetizationAccessProjection,\n hasCatalogMonetization,\n availableLabel: t(\"xapp.access_state_available\", undefined, \"available\"),\n });\n const hasMonetizationState = Boolean(\n currentTier ||\n accessState ||\n subscriptionStatus ||\n subscriptionCoverage ||\n subscriptionReason ||\n overdueSince ||\n expiryBoundaryAt ||\n renewsAt ||\n expiresAt ||\n creditsRemaining,\n );\n const manifestScreenshots = Array.isArray(manifest?.screenshots)\n ? manifest.screenshots.map((shot) => readString(shot)).filter(Boolean)\n : [];\n const manifestTags = Array.isArray(manifest?.tags)\n ? manifest.tags.map((tag) => readString(tag)).filter(Boolean)\n : [];\n return (\n <div className={`mx-detail-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-detail-topbar\">\n <div className=\"mx-detail-topbar-left\">\n {!singleXappMode && (\n <Link to={backTo as any} relative=\"path\" className=\"mx-btn mx-btn-ghost\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n )}\n <div className=\"mx-detail-topbar-title\">{title}</div>\n </div>\n <div className=\"mx-detail-topbar-right\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </div>\n\n {error && <div className=\"mx-detail-error\">{error}</div>}\n\n {busy && !data ? (\n <>\n <div className=\"mx-detail-skeleton-header\" aria-busy=\"true\">\n <div className=\"mx-detail-skeleton-icon\" />\n <div className=\"mx-detail-skeleton-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"55%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"45%\" }} />\n </div>\n </div>\n <div className=\"mx-detail-skeleton-grid\">\n <div className=\"mx-detail-skeleton-sections\">\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"30%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"70%\" }} />\n </div>\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"40%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"60%\" }} />\n </div>\n </div>\n <div>\n <div className=\"mx-detail-skeleton-sidebar-card\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"45%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"65%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </>\n ) : (\n <>\n <header className=\"mx-detail-header\">\n <img src={imageUrl} alt={title} className=\"mx-detail-icon\" />\n <div className=\"mx-detail-info\">\n <div className=\"mx-detail-kicker\">\n {publisherName\n ? t(\n \"xapp.kicker_publisher\",\n { publisher: publisherName },\n `Publisher: ${publisherName}`,\n )\n : t(\"xapp.kicker_default\", undefined, \"Xapp\")}\n </div>\n <h1 className=\"mx-detail-title\">{title}</h1>\n {description ? <p className=\"mx-detail-subtitle\">{description}</p> : null}\n <div className=\"mx-detail-meta-row\">\n <div className=\"mx-card-slug\">{xappId}</div>\n {readString(versionRecord?.version) && (\n <div className=\"mx-card-version mx-detail-version-pill\">\n v{readString(versionRecord?.version)}\n </div>\n )}\n {updateAvailable ? (\n <div className=\"mx-detail-update-pill\">\n {t(\"xapp.update_available\", undefined, \"Update available\")}\n </div>\n ) : null}\n </div>\n </div>\n <div className=\"mx-detail-actions\">\n {canMutate ? (\n <>\n {installation && updateAvailable && host.requestUpdate ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsOpen(true);\n return;\n }\n if (!installation.installationId) return;\n host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n }}\n >\n {updateAppLabel}\n </button>\n ) : null}\n\n {!installation ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsOpen(true);\n return;\n }\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (!installation.installationId) return;\n setRemoveConfirmOpen(true);\n }}\n >\n {removeAppLabel}\n </button>\n )}\n </>\n ) : null}\n </div>\n </header>\n\n <div className=\"mx-detail-grid\">\n <main className=\"mx-detail-main\">\n <section className=\"mx-detail-section mx-detail-section-about\">\n <h2 className=\"mx-section-title\">{t(\"xapp.about_title\", undefined, \"About\")}</h2>\n <div className=\"mx-detail-desc\">{description}</div>\n </section>\n\n <section className=\"mx-detail-section mx-detail-section-widgets\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.available_views_title\", undefined, \"Available Views\")}\n </h2>\n {!widgetsEnabled ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {!installation\n ? t(\n \"xapp.add_to_access_views\",\n undefined,\n \"Add this app to your workspace to access its available views.\",\n )\n : updateAvailable\n ? t(\n \"xapp.update_to_access_views\",\n undefined,\n \"An update is available. Please update the app to access its available views.\",\n )\n : !hasSubject\n ? t(\n \"xapp.load_as_user_to_access\",\n undefined,\n \"Load the catalog as a user to access this app.\",\n )\n : null}\n </div>\n ) : widgets.length === 0 ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {t(\n \"xapp.no_views_available\",\n undefined,\n \"No app views are currently available.\",\n )}\n </div>\n ) : (\n <div className=\"mx-detail-widget-list\">\n {widgets.map((w, idx) => {\n const name =\n resolveMarketplaceText(w.title as any, locale) ||\n readString(w.widget_name) ||\n readString(w.name) ||\n readString(w.id) ||\n t(\"common.widget\", undefined, \"Widget\");\n const disabled = !widgetsEnabled;\n const isDefault =\n readBoolean(w.default, false) ||\n (idx === 0 && !widgets.some((ww) => readBoolean(ww.default, false)));\n const widgetType = String(w.type || \"\").toLowerCase();\n return (\n <button\n key={String(w.id)}\n disabled={disabled}\n className={`mx-detail-widget-card ${disabled ? \"is-disabled\" : \"\"} ${isDefault ? \"is-default\" : \"\"}`}\n onClick={() => {\n if (!installation || !widgetsEnabled) return;\n const widgetId = readString(w.id);\n if (!widgetId) return;\n\n if (env?.embedMode && installation) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName: name,\n toolName: readString(w.bind_tool_name),\n });\n }}\n >\n <div className=\"mx-detail-widget-icon\">\n {widgetType === \"read\" ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n )}\n </div>\n <div className=\"mx-detail-widget-body\">\n <div className=\"mx-detail-widget-name\">{name}</div>\n {readString(w.bind_tool_name) && (\n <div className=\"mx-detail-widget-tool\">\n {readString(w.bind_tool_name)}\n </div>\n )}\n <div className=\"mx-detail-widget-badges\">\n {isDefault && (\n <span className=\"mx-detail-widget-badge is-primary\">\n {t(\"xapp.widget_primary\", undefined, \"Primary\")}\n </span>\n )}\n {widgetType && (\n <span className=\"mx-detail-widget-badge\">{widgetType}</span>\n )}\n </div>\n </div>\n <div className=\"mx-detail-widget-action\">\n <span className=\"mx-detail-widget-action-label\">\n {t(\"xapp.widget_open\", undefined, \"Open\")}\n </span>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </section>\n <section className=\"mx-detail-section mx-detail-section-guards\">\n <div className=\"mx-detail-guard-header\">\n <h2 className=\"mx-section-title mx-section-title-tight\">\n {t(\"xapp.how_app_runs\", undefined, \"How This App Runs\")}\n </h2>\n <button\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n onClick={() => setGuardSummaryOpen((v) => !v)}\n >\n {guardSummaryOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"xapp.view_details\", undefined, \"View details\")}\n </button>\n </div>\n {!guardSummaryOpen ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n {guardSummary.items.length === 0 ? (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 2l7 4v4c0 4.42-2.98 8.28-7 9.5C5.98 18.28 3 14.42 3 10V6l7-4z\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 10l2 2 4-4\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-summary-text\">\n {guardSummary.items.length === 0\n ? t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )\n : t(\n \"xapp.guard_summary\",\n {\n itemCount: guardSummary.items.length,\n itemSuffix: guardSummary.items.length === 1 ? \"\" : \"s\",\n stageCount: guardSummary.byTrigger.size,\n stageSuffix: guardSummary.byTrigger.size === 1 ? \"\" : \"s\",\n },\n `This app includes ${guardSummary.items.length} run check${guardSummary.items.length === 1 ? \"\" : \"s\"} across ${guardSummary.byTrigger.size} stage${guardSummary.byTrigger.size === 1 ? \"\" : \"s\"}. Open details to review access, payment, or follow-up steps.`,\n )}\n </div>\n </div>\n ) : guardSummary.items.length === 0 ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mx-guard-summary-text\">\n {t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )}\n </div>\n </div>\n ) : (\n <div className=\"mx-guard-pipeline\">\n {Array.from(guardSummary.byTrigger.entries()).map(\n ([trigger, items], stageIdx) => (\n <div key={trigger} className=\"mx-guard-stage\">\n <div className=\"mx-guard-stage-header\">\n <div className=\"mx-guard-stage-number\">{stageIdx + 1}</div>\n <div className=\"mx-guard-stage-icon\">\n {trigger.startsWith(\"after:\") ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 8l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 3.5l6 4.5-6 4.5V3.5z\" fill=\"currentColor\" />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-stage-title\">\n {humanizeTrigger(trigger, t)}\n </div>\n <div className=\"mx-guard-stage-policy\">\n {describeGuardChain(items[0]?.policyKind || \"all\", t)}\n </div>\n </div>\n <div className=\"mx-guard-stage-body\">\n {items.map((guard, guardIdx) => (\n <div\n key={`${trigger}-${guard.slug}`}\n className={`mx-guard-row ${guard.blocking ? \"mx-guard-row--required\" : \"mx-guard-row--info\"}`}\n >\n <div className=\"mx-guard-row-left\">\n {guard.order !== null ? (\n <span className=\"mx-guard-row-order\">{guard.order}</span>\n ) : (\n <span className=\"mx-guard-row-order\">{guardIdx + 1}</span>\n )}\n <span className=\"mx-guard-row-name\" title={guard.slug}>\n {humanizeSlug(guard.slug)}\n </span>\n </div>\n <div className=\"mx-guard-row-right\">\n <span\n className={`mx-guard-indicator ${guard.headless ? \"mx-guard-indicator--auto\" : \"mx-guard-indicator--user\"}`}\n >\n {guard.headless ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M4.5 7l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"4.5\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M2 12c0-2.76 2.24-5 5-5s5 2.24 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n <span>\n {guard.headless\n ? t(\"xapp.auto\", undefined, \"Auto\")\n : t(\"xapp.user_step\", undefined, \"User step\")}\n </span>\n </span>\n <span\n className={`mx-guard-severity ${guard.blocking ? \"mx-guard-severity--required\" : \"mx-guard-severity--optional\"}`}\n >\n {guard.blocking\n ? t(\"xapp.required\", undefined, \"Required\")\n : t(\"xapp.info\", undefined, \"Info\")}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </section>\n\n {manifestScreenshots.length > 0 && (\n <section className=\"mx-detail-section mx-detail-section-screenshots\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.screenshots_title\", undefined, \"Screenshots\")}\n </h2>\n <div className=\"mx-screenshots\">\n {manifestScreenshots.map((s, i) => (\n <img\n key={i}\n src={s}\n alt={t(\"xapp.screenshot_alt\", { index: i + 1 }, `Screenshot ${i + 1}`)}\n className=\"mx-screenshot\"\n />\n ))}\n </div>\n </section>\n )}\n </main>\n\n <aside className=\"mx-detail-sidebar\">\n {hasMonetizationState ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.current_access_title\", undefined, \"Current Access\")}\n </h3>\n {currentTier ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_plan_label\", undefined, \"Current plan\")}\n </span>\n <span className=\"mx-meta-value\">{currentTier}</span>\n </div>\n ) : null}\n {accessState ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.access_state_label\", undefined, \"Access state\")}\n </span>\n <span className=\"mx-meta-value\">{accessState}</span>\n </div>\n ) : null}\n {subscriptionStatus ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_status_label\", undefined, \"Subscription status\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionStatus}</span>\n </div>\n ) : null}\n {subscriptionCoverage ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_coverage_label\", undefined, \"Coverage\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionCoverage}</span>\n </div>\n ) : null}\n {subscriptionReason ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_reason_label\", undefined, \"Status reason\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionReason}</span>\n </div>\n ) : null}\n {overdueSince ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_overdue_since_label\", undefined, \"Overdue since\")}\n </span>\n <span className=\"mx-meta-value\">{overdueSince}</span>\n </div>\n ) : null}\n {expiryBoundaryAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_expiry_boundary_label\", undefined, \"Expiry boundary\")}\n </span>\n <span className=\"mx-meta-value\">{expiryBoundaryAt}</span>\n </div>\n ) : null}\n {renewsAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.renews_at_label\", undefined, \"Renews at\")}\n </span>\n <span className=\"mx-meta-value\">{renewsAt}</span>\n </div>\n ) : null}\n {expiresAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.expires_at_label\", undefined, \"Expires at\")}\n </span>\n <span className=\"mx-meta-value\">{expiresAt}</span>\n </div>\n ) : null}\n {creditsRemaining ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.credits_remaining_label\", undefined, \"Credits remaining\")}\n </span>\n <span className=\"mx-meta-value\">{creditsRemaining}</span>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {usageCreditSummary ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.usage_credits_title\", undefined, \"Usage Credits\")}\n </h3>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.available_label\", undefined, \"Available\")}\n </span>\n <span className=\"mx-meta-value\">\n {t(\n \"xapp.ready_to_use\",\n { count: usageCreditSummary.available_count },\n `${usageCreditSummary.available_count} ready to use`,\n )}\n </span>\n </div>\n {usageCreditSummary.available_session_backed_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.source_label\", undefined, \"Source\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.linked_payment_sessions\",\n { count: usageCreditSummary.available_session_backed_count },\n `${usageCreditSummary.available_session_backed_count} linked to visible payment sessions`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.reserved_active_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.in_flight_label\", undefined, \"In flight\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_active_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.reserved_stale_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.needs_review_label\", undefined, \"Needs review\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_stale_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.available_ledger_only_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.invalid_label\", undefined, \"Invalid\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.invalid_credits\",\n { count: usageCreditSummary.available_ledger_only_count },\n `${usageCreditSummary.available_ledger_only_count} orphan ledger rows are not usable credits`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.by_tool.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.by_tool_label\", undefined, \"By tool\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-md\">\n {usageCreditSummary.by_tool.map((tool) => (\n <div key={tool.tool_name}>\n <strong>{tool.available_count}</strong>{\" \"}\n {t(\"xapp.for_label\", undefined, \"for\")} <code>{tool.tool_name}</code>\n {tool.available_ledger_only_count > 0\n ? ` \u00B7 ${t(\n \"xapp.invalid_short\",\n { count: tool.available_ledger_only_count },\n `${tool.available_ledger_only_count} invalid`,\n )}`\n : \"\"}\n {tool.reserved_active_count > 0\n ? ` \u00B7 ${t(\n \"xapp.in_flight_short\",\n { count: tool.reserved_active_count },\n `${tool.reserved_active_count} in flight`,\n )}`\n : \"\"}\n {tool.reserved_stale_count > 0\n ? ` \u00B7 ${t(\n \"xapp.stale_short\",\n { count: tool.reserved_stale_count },\n `${tool.reserved_stale_count} stale`,\n )}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {installation && defaultWidget && hasSubject && (\n <button\n className=\"mx-btn mx-btn-primary mx-detail-primary-cta\"\n onClick={() => {\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`,\n search: tokenSearch,\n });\n return;\n }\n host.openWidget({\n installationId: installation.installationId,\n widgetId: readString(defaultWidget.id),\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n toolName: readString(defaultWidget?.bind_tool_name),\n });\n }}\n >\n {openAppLabel}\n </button>\n )}\n\n {(env?.requestsEnabled !== false || secondarySurfaceLinks.length > 0) && (\n <div className=\"mx-sidebar-card mx-activity-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.activity_title\", undefined, \"Activity\")}\n </h3>\n {env?.requestsEnabled !== false && (\n <Link to={requestsTo} relative=\"path\" className=\"mx-activity-link\">\n <div className=\"mx-activity-link-icon mx-activity-link-icon-requests\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <span className=\"mx-activity-link-label\">\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n )}\n {secondarySurfaceLinks.map((surface: OperationalSurfaceKey) => {\n const iconClass =\n surface === \"payments\"\n ? \"mx-activity-link-icon-payments\"\n : surface === \"invoices\"\n ? \"mx-activity-link-icon-invoices\"\n : \"mx-activity-link-icon-notifications\";\n return (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId: String(xappId ?? \"\"),\n token,\n isEmbedded,\n })}\n className=\"mx-activity-link\"\n >\n <div className={`mx-activity-link-icon ${iconClass}`}>\n {surface === \"payments\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\" />\n </svg>\n ) : surface === \"invoices\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n )}\n </div>\n <span className=\"mx-activity-link-label\">\n {getLocalizedOperationalSurfaceLabel(surface)}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n );\n })}\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.details_title\", undefined, \"Details\")}\n </h3>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.app_id_label\", undefined, \"App ID\")}\n </span>\n <code className=\"mx-meta-value mx-meta-code\">{xappId}</code>\n </div>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.status\", undefined, \"Status\")}</span>\n <span className=\"mx-meta-value\">\n {installation\n ? t(\"xapp.status_added\", undefined, \"Added\")\n : t(\"xapp.status_available\", undefined, \"Available\")}\n </span>\n </div>\n\n {publisherTo ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.publisher_label\", undefined, \"Publisher\")}\n </span>\n <Link to={publisherTo as any} className=\"mx-meta-value\">\n {publisherName}\n </Link>\n </div>\n ) : null}\n\n {manifestTags.length > 0 && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.tags_label\", undefined, \"Tags\")}</span>\n <div className=\"mx-tag-list\">\n {manifestTags.map((t) => (\n <span key={t} className=\"mx-tag\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {requiresTerms && (\n <div className=\"mx-detail-terms-link-wrap\">\n <button\n className=\"mx-btn mx-btn-ghost mx-detail-terms-link\"\n onClick={() => {\n setTermsAction(\"none\");\n setTermsOpen(true);\n }}\n >\n {t(\"xapp.view_terms\", undefined, \"View Terms & Conditions\")} \u2192\n </button>\n </div>\n )}\n </div>\n </aside>\n </div>\n\n {termsOpen && (\n <div className=\"mx-detail-modal-backdrop\" onClick={() => setTermsOpen(false)}>\n <div className=\"mx-sidebar-card mx-detail-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"mx-detail-modal-head\">\n <h2 className=\"mx-section-title mx-section-title-tight\">{termsTitle}</h2>\n <button\n onClick={() => setTermsOpen(false)}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"xapp.close_terms_dialog\", undefined, \"Close terms dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {termsText && (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{termsText}</div>\n )}\n {termsUrl && (\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-detail-modal-link\"\n >\n {t(\"xapp.view_full_document\", undefined, \"View Full Document\")}\n </a>\n )}\n\n {(termsAction === \"install\" || termsAction === \"update\") && (\n <label className=\"mx-detail-terms-accept\">\n <input\n type=\"checkbox\"\n checked={termsAccepted}\n onChange={(e) => setTermsAccepted(e.target.checked)}\n className=\"mx-detail-terms-checkbox\"\n />\n <span className=\"mx-detail-terms-copy\">\n {t(\n \"xapp.accept_terms\",\n undefined,\n \"I have read and accept the terms and conditions.\",\n )}\n </span>\n </label>\n )}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={() => setTermsOpen(false)}>\n {t(\"common.cancel\", undefined, \"Cancel\")}\n </button>\n {termsAction === \"install\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted}\n onClick={() => {\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n {t(\"xapp.accept_add_app\", undefined, \"Accept & Add app\")}\n </button>\n ) : termsAction === \"update\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted || !installation}\n onClick={() => {\n if (!installation) return;\n host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n {t(\"xapp.accept_update\", undefined, \"Accept & Update\")}\n </button>\n ) : null}\n </div>\n </div>\n </div>\n )}\n\n <ConfirmActionModal\n open={removeConfirmOpen}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={t(\n \"catalog.remove_app_description\",\n { title },\n `Remove ${title} from your current workspace? You can add it again later.`,\n )}\n confirmLabel={removeAppLabel}\n onCancel={() => setRemoveConfirmOpen(false)}\n onConfirm={() => {\n if (!host.requestUninstall || !installation?.installationId) return;\n host.requestUninstall({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n setRemoveConfirmOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n", "import type { MarketplaceMonetizationAccessProjection } from \"../types\";\nimport { readString } from \"./readers\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readCurrentAccessFlag(value: unknown): boolean {\n return typeof value === \"boolean\" ? value : false;\n}\n\nexport function hasMarketplaceCatalogMonetization(manifest: unknown): boolean {\n const manifestRecord = asRecord(manifest);\n const monetization = asRecord(manifestRecord?.monetization);\n if (!monetization) return false;\n return [\"products\", \"offerings\", \"packages\", \"prices\"].some((key) => {\n const items = monetization[key];\n return Array.isArray(items) && items.length > 0;\n });\n}\n\nexport function hasMarketplaceCurrentAccess(\n projection: MarketplaceMonetizationAccessProjection | null | undefined,\n): boolean {\n if (!projection) return false;\n if (readCurrentAccessFlag(projection.has_current_access)) return true;\n\n const entitlementState = readString(projection.entitlement_state);\n const balanceState = readString(projection.balance_state);\n return (\n entitlementState === \"active\" ||\n entitlementState === \"grace_period\" ||\n balanceState === \"sufficient\"\n );\n}\n\nexport function resolveMarketplaceAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const entitlementState = readString(input.projection?.entitlement_state);\n if (entitlementState && entitlementState !== \"inactive\") return entitlementState;\n return hasMarketplaceCurrentAccess(input.projection)\n ? input.availableLabel\n : entitlementState || null;\n}\n\nexport function resolveMarketplaceDefaultAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const resolved = resolveMarketplaceAccessState(input);\n if (resolved && resolved !== \"inactive\") return resolved;\n if (input.projection && input.hasCatalogMonetization === false) {\n return input.availableLabel;\n }\n return resolved;\n}\n", "import { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport type { TranslationParams } from \"@xapps-platform/platform-i18n\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXappDetail } from \"../types\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { asRecord, normalizeExpandStage, readFirstString, readString } from \"../utils/readers\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getOperationalSurfaceLabel,\n getVisibleOperationalSurfaces,\n resolveOperationalSurfacePlacement,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport \"../marketplace.css\";\n\ntype ExpandStage = \"inline\" | \"focus\" | \"fullscreen\";\n\ntype NestedPendingExpand = {\n sourceWindow: Window | null;\n timeoutId: number;\n cleanupId: number | null;\n settled: boolean;\n onLateResult: ((value: Record<string, unknown>) => void) | null;\n resolve: (value: Record<string, unknown> | null) => void;\n};\n\ntype SessionExpiredUi = {\n title: string;\n message: string;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction readPaymentEvidenceParams(search: string): URLSearchParams {\n const out = new URLSearchParams();\n const qs = new URLSearchParams(String(search || \"\"));\n for (const [k, v] of qs.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n if (Array.from(out.keys()).length > 0) return out;\n const hostReturnUrl = readHostReturnUrl(search);\n if (!hostReturnUrl) return out;\n try {\n const host = new URL(hostReturnUrl);\n for (const [k, v] of host.searchParams.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n } catch {\n // ignore malformed host return URL\n }\n return out;\n}\n\nfunction toSessionExpiredUi(\n input: unknown,\n t: (key: string, params?: TranslationParams, fallback?: string) => string,\n): SessionExpiredUi {\n const data = asRecord(input);\n const reason = readString(data.reason).toLowerCase();\n const message = readFirstString(data.message);\n\n if (reason === \"logout\") {\n return {\n title: t(\"widget.session_ended_title\", undefined, \"Session ended\"),\n message:\n message ||\n t(\n \"widget.session_ended_message\",\n undefined,\n \"Your session ended. Go back and open the widget again.\",\n ),\n };\n }\n\n if (reason === \"token_refresh_failed\") {\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_refresh_failed\",\n undefined,\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n ),\n };\n }\n\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_default\",\n undefined,\n \"This widget session ended. Go back and open it again to continue.\",\n ),\n };\n}\n\nexport function WidgetView() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { installationId, widgetId } = useParams();\n const token = useQueryToken();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const shellRef = useRef<HTMLDivElement>(null);\n const nestedExpandSeqRef = useRef(0);\n const nestedExpandPendingRef = useRef<Map<string, NestedPendingExpand>>(new Map());\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n const [xappId, setXappId] = useState<string>(\"\");\n const [xappDetail, setXappDetail] = useState<CatalogXappDetail | null>(null);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n const [widgetToken, setWidgetToken] = useState<string>(\"\");\n const [widgetSessionContext, setWidgetSessionContext] = useState<{\n clientId: string;\n installationId: string;\n xappId: string;\n subjectId: string | null;\n requestId?: string | null;\n resultPresentation?: \"runtime_default\" | \"inline\" | \"publisher_managed\";\n locale?: string | null;\n } | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [sessionExpired, setSessionExpired] = useState<SessionExpiredUi | null>(null);\n const [hostNestedExpandStage, setHostNestedExpandStage] = useState<ExpandStage>(\"inline\");\n\n const loc = useLocation();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = xappId\n ? {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(xappId)}`\n : `/marketplace/xapps/${encodeURIComponent(xappId)}`,\n search: tokenSearch,\n }\n : null;\n const visibleOperationalSurfaces = getVisibleOperationalSurfaces({\n detail: xappDetail,\n client,\n env,\n isEmbedded,\n });\n const linkedOperationalSurfaces = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n );\n\n const onBackToPortal = () => {\n host.notifyNavigation?.({\n path: \"/\",\n page: \"portal-home\",\n });\n };\n\n useEffect(() => {\n if (!installationId) return;\n let alive = true;\n void (async () => {\n try {\n const installs = host.getInstallationsByXappId();\n const inst = Object.values(installs || {}).find(\n (i) => i && String(i.installationId) === String(installationId),\n );\n if (inst && inst.xappId) {\n if (!alive) return;\n setXappId(inst.xappId);\n const res = await client.getCatalogXapp(inst.xappId, {\n installationId: String(installationId || \"\").trim() || null,\n });\n if (!alive) return;\n setXappDetail(res);\n const detail = asRecord(res);\n setXappTitle(\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name) ||\n \"App\",\n );\n }\n } catch {}\n })();\n return () => {\n alive = false;\n };\n }, [installationId, client, host, locale]);\n\n useEffect(() => {\n if (!xappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId,\n installationId,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installationId, xappId]);\n\n useEffect(() => {\n if (!installationId || !widgetId || !host.notifyNavigation) return;\n host.notifyNavigation({\n path: window.location.pathname,\n page: \"widget-view\",\n params: { installationId, widgetId },\n });\n }, [installationId, widgetId, host]);\n\n useEffect(() => {\n if (!installationId || !widgetId) return;\n let alive = true;\n void (async () => {\n try {\n const { token: wToken, context } = await client.getWidgetToken(installationId, widgetId);\n if (!alive) return;\n setSessionExpired(null);\n setWidgetToken(wToken);\n setWidgetSessionContext(context ?? null);\n } catch (e) {\n if (!alive) return;\n setWidgetSessionContext(null);\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n alive = false;\n };\n }, [installationId, widgetId, client]);\n\n async function remintWidgetSession() {\n if (!installationId || !widgetId) {\n throw new Error(\"Missing installationId/widgetId for widget refresh\");\n }\n const refreshed = await client.getWidgetToken(installationId, widgetId);\n const nextToken = String(refreshed?.token || \"\").trim();\n if (!nextToken) {\n throw new Error(\"Widget refresh did not return a token\");\n }\n setSessionExpired(null);\n setWidgetToken(nextToken);\n setWidgetSessionContext(refreshed?.context ?? null);\n return {\n token: nextToken,\n expires_in:\n Number.isFinite(Number(refreshed?.expires_in)) && Number(refreshed?.expires_in) > 0\n ? Number(refreshed?.expires_in)\n : undefined,\n };\n }\n\n function buildWidgetBridgeContext() {\n const context = widgetSessionContext;\n if (!context || !widgetToken) return null;\n const matchingWidget = Array.isArray(xappDetail?.widgets)\n ? xappDetail.widgets.find((item) => String(item?.id || \"\") === String(widgetId || \"\"))\n : null;\n return {\n type: \"XAPPS_WIDGET_CONTEXT\" as const,\n token: widgetToken,\n baseUrl: window.location.origin,\n hostOrigin: window.location.origin,\n installationId: context.installationId || String(installationId || \"\"),\n clientId: context.clientId,\n xappId: context.xappId || xappId,\n subjectId: context.subjectId,\n publisherUserId: null,\n email: null,\n bindToolName:\n readFirstString(\n asRecord(matchingWidget).bind_tool_name,\n asRecord(matchingWidget).bindToolName,\n ) || null,\n theme: host.theme || null,\n locale: context.locale || env?.locale || host.locale || null,\n };\n }\n\n useEffect(() => {\n return () => {\n for (const [, pending] of nestedExpandPendingRef.current) {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n pending.resolve(null);\n }\n nestedExpandPendingRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const shell = shellRef.current;\n const rootEl = shell?.parentElement ?? null;\n const htmlEl = document.documentElement;\n const bodyEl = document.body;\n const expanded = env?.embedMode && hostNestedExpandStage !== \"inline\";\n\n if (!expanded) return;\n\n const prev = {\n htmlStyle: htmlEl.getAttribute(\"style\"),\n bodyStyle: bodyEl.getAttribute(\"style\"),\n rootStyle: rootEl?.getAttribute(\"style\") ?? null,\n };\n\n htmlEl.style.height = \"100%\";\n bodyEl.style.height = \"100%\";\n bodyEl.style.overflow = \"hidden\";\n bodyEl.style.margin = \"0\";\n if (rootEl) {\n rootEl.style.height = \"100%\";\n rootEl.style.display = \"flex\";\n rootEl.style.flexDirection = \"column\";\n rootEl.style.minHeight = \"0\";\n }\n\n return () => {\n if (prev.htmlStyle == null) htmlEl.removeAttribute(\"style\");\n else htmlEl.setAttribute(\"style\", prev.htmlStyle);\n if (prev.bodyStyle == null) bodyEl.removeAttribute(\"style\");\n else bodyEl.setAttribute(\"style\", prev.bodyStyle);\n if (rootEl) {\n if (prev.rootStyle == null) rootEl.removeAttribute(\"style\");\n else rootEl.setAttribute(\"style\", prev.rootStyle);\n }\n };\n }, [env?.embedMode, hostNestedExpandStage]);\n\n useEffect(() => {\n if (!env?.embedMode) return;\n const handler = (e: MessageEvent) => {\n if (e.source !== window.parent) return;\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (msgType !== \"XAPPS_UI_EXPAND_RESULT\") return;\n const data = asRecord(msg.data);\n const hostManaged = data.hostManaged === true;\n const expanded = data.expanded === true;\n const stage = normalizeExpandStage(data.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [env?.embedMode]);\n\n useEffect(() => {\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n const sourceIsParent = e.source === window.parent;\n const sourceIsSameOrigin = e.origin === window.location.origin;\n if (!sourceIsParent && !sourceIsSameOrigin) return;\n\n if (msgType === \"XAPPS_UI_NESTED_EXPAND_RESULT\" && sourceIsParent) {\n const data = asRecord(msg.data);\n const requestId = readString(data.requestId);\n if (!requestId) return;\n const pending = nestedExpandPendingRef.current.get(requestId);\n if (!pending) return;\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n if (pending.settled) {\n nestedExpandPendingRef.current.delete(requestId);\n pending.onLateResult?.(msg);\n return;\n }\n pending.settled = true;\n nestedExpandPendingRef.current.delete(requestId);\n pending.resolve(msg);\n return;\n }\n\n try {\n iframeRef.current?.contentWindow?.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n useEffect(() => {\n if (!widgetToken) return;\n\n const postExpandResultToWidget = (\n target: Window | null,\n result:\n | { ok: true; data: Record<string, unknown> }\n | { ok: false; error: { message: string; code?: string } },\n ) => {\n if (!target || typeof target.postMessage !== \"function\") return;\n try {\n target.postMessage(\n {\n type: \"XAPPS_UI_EXPAND_RESULT\",\n ...result,\n },\n \"*\",\n );\n } catch {}\n };\n\n const requestNestedHostExpand = async (\n sourceWindow: Window | null,\n input: Record<string, unknown>,\n onLateResult: ((value: Record<string, unknown>) => void) | null = null,\n ): Promise<Record<string, unknown> | null> => {\n if (!env?.embedMode || window.parent === window) return null;\n const requestId = `mx-nested-expand-${Date.now()}-${++nestedExpandSeqRef.current}`;\n const payload = {\n requestId,\n source: \"marketplace-widget-host\",\n installationId: installationId ? String(installationId) : \"\",\n widgetId: widgetId ? String(widgetId) : \"\",\n expanded: Boolean(input.expanded),\n stage: normalizeExpandStage(input.stage, Boolean(input.expanded)),\n mode: input.mode === \"expand\" || input.mode === \"collapse\" ? String(input.mode) : undefined,\n path: window.location.pathname,\n };\n\n const response = await new Promise<Record<string, unknown> | null>((resolve) => {\n const pending: NestedPendingExpand = {\n sourceWindow,\n timeoutId: 0,\n cleanupId: null,\n settled: false,\n onLateResult,\n resolve,\n };\n pending.timeoutId = window.setTimeout(() => {\n pending.settled = true;\n pending.cleanupId = window.setTimeout(() => {\n nestedExpandPendingRef.current.delete(requestId);\n }, 4000);\n resolve(null);\n }, 1200);\n nestedExpandPendingRef.current.set(requestId, pending);\n try {\n window.parent.postMessage(\n {\n type: \"XAPPS_UI_NESTED_EXPAND_REQUEST\",\n data: payload,\n },\n \"*\",\n );\n } catch {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n nestedExpandPendingRef.current.delete(requestId);\n resolve(null);\n }\n });\n\n return response;\n };\n\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n\n // Security check: only allow same-origin if it's from the catalog itself\n // or from the widget iframe (which we can't easily check origin of here\n // without extra plumbing, but we trust the type prefix).\n\n // Handle UI actions from the widget by forwarding them to the real host.\n // In embedMode, window.parent is the Host integration that frames the catalog.\n if (\n msgType === \"XAPPS_UI_EXPAND_REQUEST\" &&\n env?.embedMode &&\n e.source === iframeRef.current?.contentWindow\n ) {\n const data = asRecord(msg.data);\n void (async () => {\n const requestedExpanded = data.expanded === true;\n const requestedStage = normalizeExpandStage(data.stage, requestedExpanded);\n const applyNestedExpandResult = (nestedResp: Record<string, unknown> | null): boolean => {\n if (\n !nestedResp ||\n nestedResp.type !== \"XAPPS_UI_NESTED_EXPAND_RESULT\" ||\n nestedResp.ok !== true ||\n !nestedResp.data ||\n typeof nestedResp.data !== \"object\"\n ) {\n return false;\n }\n const nestedData = nestedResp.data as Record<string, unknown>;\n const hostManaged = nestedData.hostManaged === true;\n const expanded = nestedData.expanded === true;\n const stage = normalizeExpandStage(nestedData.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n postExpandResultToWidget(e.source as Window | null, {\n ok: true,\n data: {\n hostManaged,\n expanded: hostManaged && expanded,\n stage: hostManaged ? stage : \"inline\",\n ...(nestedData.nativeFullscreen === true ? { nativeFullscreen: true } : {}),\n },\n });\n return true;\n };\n // Optimistic UI reduction so the marketplace shell yields immediately while the\n // outer host processes nested expansion. We reconcile on ack or fallback.\n setHostNestedExpandStage(requestedExpanded ? requestedStage : \"inline\");\n const nestedResp = await requestNestedHostExpand(\n e.source as Window | null,\n data,\n (lateResp) => {\n if (applyNestedExpandResult(lateResp)) return;\n setHostNestedExpandStage(\"inline\");\n },\n );\n if (applyNestedExpandResult(nestedResp)) {\n return;\n }\n\n setHostNestedExpandStage(\"inline\");\n })();\n return;\n }\n\n if (msgType === \"XAPPS_UI_CONFIRM_REQUEST\") {\n if (!env?.embedMode) {\n const data = asRecord(msg.data);\n const requestId = msg.id;\n const prompt = String(\n data.message ||\n t(\n \"widget.confirm_continue_prompt\",\n undefined,\n \"This action requires confirmation. Continue?\",\n ),\n );\n const confirmed = typeof window.confirm === \"function\" ? window.confirm(prompt) : false;\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_UI_CONFIRM_RESULT\",\n id: requestId,\n ok: true,\n data: { confirmed },\n },\n \"*\",\n );\n } catch {}\n return;\n }\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (\n msgType === \"XAPPS_TOKEN_REFRESH_REQUEST\" &&\n e.source === iframeRef.current?.contentWindow\n ) {\n void (async () => {\n try {\n const refreshed = await remintWidgetSession();\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_TOKEN_REFRESH\",\n id: readString(msg.id) || undefined,\n data: {\n token: refreshed.token,\n ...(typeof refreshed.expires_in === \"number\"\n ? { expires_in: refreshed.expires_in }\n : {}),\n },\n },\n \"*\",\n );\n } catch {}\n } catch (refreshError) {\n const sessionExpiredUi = toSessionExpiredUi(\n {\n reason: \"token_refresh_failed\",\n message:\n readFirstString(asRecord(refreshError).message) ||\n \"Widget session refresh failed\",\n },\n t,\n );\n setSessionExpired(sessionExpiredUi);\n setWidgetToken(\"\");\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_SESSION_EXPIRED\",\n id: readString(msg.id) || undefined,\n data: {\n reason: \"token_refresh_failed\",\n channel: \"host\",\n recoverable: false,\n message: sessionExpiredUi.message,\n },\n },\n \"*\",\n );\n } catch {}\n }\n })();\n return;\n }\n\n if (\n (msgType === \"XAPPS_WIDGET_CONTEXT_REQUEST\" || msgType === \"XAPPS_WIDGET_READY\") &&\n e.source === iframeRef.current?.contentWindow\n ) {\n try {\n const payload = buildWidgetBridgeContext();\n (e.source as Window | null)?.postMessage(\n payload || {\n type: \"XAPPS_WIDGET_CONTEXT\",\n locale: env?.locale || null,\n },\n \"*\",\n );\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_SESSION_EXPIRED\") {\n setSessionExpired(toSessionExpiredUi(msg.data, t));\n setWidgetToken(\"\");\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_WIDGET\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const targetInstId = readFirstString(data.installationId, installationId);\n const targetWidgetId = readFirstString(data.widgetId);\n\n if (targetWidgetId && env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`\n : `/marketplace/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n // If not in embed mode or no target widget, forward to host\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_OPERATIONAL_SURFACE\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const surface = readString(data.surface).toLowerCase();\n const placement =\n data.placement === \"in_router\" ||\n data.placement === \"side_panel\" ||\n data.placement === \"full_page\"\n ? data.placement\n : resolveOperationalSurfacePlacement({\n env,\n surface: surface as OperationalSurfaceKey,\n isEmbedded,\n });\n\n if (\n env?.embedMode &&\n xappId &&\n [\"requests\", \"payments\", \"invoices\", \"notifications\"].includes(surface) &&\n placement === \"in_router\"\n ) {\n navigate(\n buildOperationalSurfaceHref({\n surface: surface as OperationalSurfaceKey,\n xappId,\n installationId: String(data.installationId || installationId || \"\"),\n requestId: String(data.requestId || \"\"),\n paymentSessionId: String(data.paymentSessionId || \"\"),\n invoiceId: String(data.invoiceId || \"\"),\n notificationId: String(data.notificationId || \"\"),\n token: token || undefined,\n isEmbedded,\n }),\n );\n return;\n }\n\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n // Forward all other XAPPS_* messages to host integration.\n // If it came from our own window (proxied from host), don't send it back to parent.\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n widgetToken,\n widgetSessionContext,\n installationId,\n widgetId,\n xappDetail,\n host,\n xappId,\n env?.embedMode,\n env?.locale,\n navigate,\n isEmbedded,\n tokenSearch,\n token,\n xappId,\n t,\n ]);\n\n useEffect(() => {\n if (!widgetToken || !env?.locale) return;\n try {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: \"XAPPS_LOCALE_CHANGED\",\n locale: env.locale,\n },\n \"*\",\n );\n } catch {}\n }, [env?.locale, widgetToken]);\n\n const widgetUrl = (() => {\n if (!widgetToken) return \"\";\n const params = new URLSearchParams({ token: widgetToken });\n const hostReturnUrl = readHostReturnUrl(loc.search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n if (env?.embedMode && hostNestedExpandStage !== \"inline\") {\n params.set(\"xapps_host_overlay\", \"1\");\n } else {\n params.delete(\"xapps_host_overlay\");\n }\n const paymentParams = readPaymentEvidenceParams(loc.search);\n for (const [k, v] of paymentParams.entries()) {\n params.set(k, v);\n }\n return `/embed/widgets/${widgetId}?${params.toString()}`;\n })();\n\n if (error) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.error\", undefined, \"Error\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">\n {t(\"widget.unable_to_load\", undefined, \"Unable to load widget\")}\n </div>\n <div className=\"mx-widget-error-desc\">{error}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n {xappTo && (\n <Link to={xappTo as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n if (sessionExpired) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.session\", undefined, \"Session\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">{sessionExpired.title}</div>\n <div className=\"mx-widget-error-desc\">{sessionExpired.message}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n <button className=\"mx-btn mx-btn-ghost\" onClick={onBackToPortal}>\n {t(\"common.back_to_portal\", undefined, \"Back to Portal\")}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!widgetToken) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{xappTitle || t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n <div className=\"mx-widget-loading\">\n <div className=\"mx-spinner mx-spinner-lg\" />\n <div className=\"mx-widget-loading-title\">\n {t(\n \"widget.preparing\",\n {\n title: xappTitle || t(\"common.widget\", undefined, \"Widget\"),\n },\n \"Preparing {title}...\",\n )}\n </div>\n <div className=\"mx-widget-loading-sub\">\n {t(\n \"widget.secure_session_setup\",\n undefined,\n \"Setting up a secure session for this app.\",\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={shellRef}\n className={`mx-catalog-container mx-widget-view-shell ${isEmbedded ? \"is-embedded\" : \"\"} ${\n env?.embedMode && hostNestedExpandStage !== \"inline\" ? \"is-host-expanded\" : \"\"\n }`}\n data-expand-stage={env?.embedMode ? hostNestedExpandStage : \"inline\"}\n >\n {env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb mx-breadcrumb-top\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n {!env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n\n {!isEmbedded && xappId && linkedOperationalSurfaces.length > 0 && (\n <div className=\"mx-widget-surface-nav\">\n {linkedOperationalSurfaces.map((surface: OperationalSurfaceKey) => (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId,\n token,\n isEmbedded,\n })}\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n >\n {getOperationalSurfaceLabel(surface)}\n </Link>\n ))}\n </div>\n )}\n\n <div\n className=\"mx-widget-view-content\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}\n >\n <iframe\n ref={iframeRef}\n src={widgetUrl}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: hostNestedExpandStage === \"inline\" ? \"600px\" : \"0\",\n border: \"none\",\n borderRadius: \"var(--mx-radius)\",\n background: \"var(--mx-bg-card)\",\n }}\n title=\"Widget\"\n />\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype PublisherItem = {\n slug: string;\n name: string;\n xappCount: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nconst AVATAR_COLORS = [\n \"#2563eb\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#059669\",\n \"#d97706\",\n \"#dc2626\",\n \"#db2777\",\n \"#4f46e5\",\n \"#0d9488\",\n \"#ea580c\",\n];\n\nfunction avatarColor(slug: string): string {\n let hash = 0;\n for (let i = 0; i < slug.length; i++) {\n hash = slug.charCodeAt(i) + ((hash << 5) - hash);\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nexport function PublishersPage() {\n const { client, env } = useMarketplace();\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const [q, setQ] = useState(\"\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<PublisherItem[]>([]);\n\n async function loadPublishers() {\n const res = await client.listCatalogXapps();\n const list = Array.isArray(res?.items) ? res.items : [];\n const grouped = new Map<string, PublisherItem>();\n for (const x of list) {\n const status = String(x.status || \"active\").toLowerCase();\n if (status !== \"active\") continue;\n const slug = String(x.publisher?.slug || \"\").trim();\n if (!slug) continue;\n const current = grouped.get(slug);\n if (current) {\n current.xappCount += 1;\n } else {\n grouped.set(slug, {\n slug,\n name: String(x.publisher?.name || slug),\n xappCount: 1,\n });\n }\n }\n setItems(Array.from(grouped.values()).sort((a, b) => a.name.localeCompare(b.name)));\n }\n\n useEffect(() => {\n void (async () => {\n setBusy(true);\n setError(null);\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }, [client]);\n\n const filtered = useMemo(() => {\n let list = items;\n if (env?.publishers && env.publishers.length > 0) {\n const allowed = new Set(env.publishers.map((v) => String(v)));\n list = list.filter((i) => allowed.has(i.slug));\n }\n const query = q.trim().toLowerCase();\n if (!query) return list;\n return list.filter((i) => {\n const hay = `${i.name} ${i.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, env?.publishers, q]);\n\n const totalXapps = useMemo(() => {\n return filtered.reduce((acc, p) => acc + p.xappCount, 0);\n }, [filtered]);\n\n const ordered = useMemo(() => {\n return [...filtered].sort((a, b) => {\n if (b.xappCount !== a.xappCount) return b.xappCount - a.xappCount;\n return a.name.localeCompare(b.name);\n });\n }, [filtered]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => {\n setBusy(true);\n void (async () => {\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_publishers_placeholder\",\n undefined,\n \"Search by name or slug...\",\n )}\n aria-label={t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n />\n </div>\n <div className=\"mx-stats-grid\">\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.publishers_count\", undefined, \"Publishers\")}\n </div>\n <div className=\"mx-stat-value\">{ordered.length}</div>\n </div>\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.catalog_xapps\", undefined, \"Catalog xApps\")}\n </div>\n <div className=\"mx-stat-value\">{totalXapps}</div>\n </div>\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-publisher-row\">\n <div className=\"mx-skeleton-line mx-skeleton-avatar\" />\n <div className=\"mx-skeleton-publisher-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {t(\n \"publisher.results_count\",\n { count: ordered.length, suffix: ordered.length === 1 ? \"\" : \"s\" },\n `${ordered.length} publisher${ordered.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {ordered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n </div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_publishers_found\", undefined, \"No publishers found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_default\",\n undefined,\n \"No publishers are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n ordered.map((p) => {\n const detailTo = isEmbedded\n ? `/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`\n : `/marketplace/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`;\n return (\n <div key={p.slug} className=\"mx-card\">\n <div className=\"mx-publisher-card-body\">\n <div\n className=\"mx-publisher-avatar\"\n style={{ background: avatarColor(p.slug) }}\n >\n {(p.name || p.slug).charAt(0)}\n </div>\n <div className=\"mx-publisher-card-info\">\n <div className=\"mx-publisher-card-slug\">{p.slug}</div>\n <h3 className=\"mx-publisher-card-name\">\n <Link to={detailTo}>{p.name}</Link>\n </h3>\n <div className=\"mx-publisher-card-count\">\n {p.xappCount} xapp{p.xappCount === 1 ? \"\" : \"s\"} in catalog\n </div>\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"publisher.view_publisher\", undefined, \"View publisher\")}\n </Link>\n <Link to={detailTo} className=\"mx-btn mx-btn-outline mx-btn-sm\">\n Browse xapps\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport type { CatalogXapp } from \"../types\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nexport function PublisherDetailPage() {\n const { publisherSlug = \"\" } = useParams();\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [q, setQ] = useState(\"\");\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n async function refresh() {\n if (!publisherSlug) return;\n setBusy(true);\n setError(null);\n try {\n const catalogRes = await client.listCatalogXapps();\n const list = Array.isArray(catalogRes?.items) ? catalogRes.items : [];\n setItems(\n list.filter((x) => {\n const slug = String(x.publisher?.slug || \"\").trim();\n const status = String(x.status || \"active\").toLowerCase();\n return slug === String(publisherSlug) && status === \"active\";\n }),\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [publisherSlug]);\n\n const publisherName = useMemo(() => {\n return String(items[0]?.publisher?.name || \"\").trim() || String(publisherSlug);\n }, [items, publisherSlug]);\n\n const backToPublishers = isEmbedded\n ? `/publishers${tokenSearch}`\n : `/marketplace/publishers${tokenSearch}`;\n const backToXapps = isEmbedded ? `/${tokenSearch}` : `/marketplace${tokenSearch}`;\n\n const filteredItems = useMemo(() => {\n const query = q.trim().toLowerCase();\n if (!query) return items;\n return items.filter((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${desc} ${x.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, locale, q]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={backToXapps}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToPublishers}>\n {t(\"publisher.publishers_title\", undefined, \"Publishers\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{publisherName}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{publisherName}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_xapps\", undefined, \"Search xapps\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_xapps_placeholder\",\n undefined,\n \"Search by title, slug, description...\",\n )}\n aria-label={t(\n \"publisher.search_xapps_aria\",\n undefined,\n \"Search this publisher's xapps\",\n )}\n />\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filteredItems.length === items.length\n ? `${filteredItems.length} xapp${filteredItems.length === 1 ? \"\" : \"s\"}`\n : `${filteredItems.length} of ${items.length} xapp${items.length === 1 ? \"\" : \"s\"}`}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filteredItems.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_xapps_found\", undefined, \"No xapps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_xapps_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_xapps_default\",\n { publisher: publisherName },\n `${publisherName} has no active xapps in the catalog right now.`,\n )}\n </div>\n </div>\n ) : (\n filteredItems.map((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug, \"App\");\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n readString(manifest.image) || \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const tags = Array.isArray(manifest.tags)\n ? manifest.tags\n .map((tag) => readString(tag))\n .filter(Boolean)\n .slice(0, 3)\n : [];\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")} {publisherName}\n </div>\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {tags.map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n View details\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAgB,iBAAAA,gBAAe,cAAAC,aAAY,iBAAiB;;;ACA5D,SAAgB,eAAe,YAAY,eAAe;AAyKjD;AA5JF,SAAS,gBAAgB,OAAgB,iBAAiB,MAAc;AAC7E,QAAM,MAAM,OAAO,SAAS,EAAE,EAC3B,KAAK,EACL,QAAQ,MAAM,GAAG;AACpB,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,QAAQ,IACX,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,CAAC,UAAU,GAAG,IAAI,IAAI;AAC5B,SAAO,CAAC,SAAS,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG;AACrF;AAEO,SAAS,oBAAoB,OAAgB,iBAAiB,MAAgB;AACnF,QAAM,aAAa,gBAAgB,OAAO,cAAc;AACxD,QAAM,MAAM,oBAAI,IAAY;AAC5B,MAAI,WAAY,KAAI,IAAI,UAAU;AAClC,QAAM,OAAO,WAAW,QAAQ,GAAG;AACnC,MAAI,OAAO,EAAG,KAAI,IAAI,WAAW,MAAM,GAAG,IAAI,CAAC;AAC/C,QAAM,WAAW,gBAAgB,gBAAgB,IAAI;AACrD,MAAI,SAAU,KAAI,IAAI,QAAQ;AAC9B,QAAM,eAAe,SAAS,QAAQ,GAAG;AACzC,MAAI,eAAe,EAAG,KAAI,IAAI,SAAS,MAAM,GAAG,YAAY,CAAC;AAC7D,MAAI,IAAI,IAAI;AACZ,SAAO,MAAM,KAAK,GAAG;AACvB;AAEO,SAAS,oBACd,OACA,kBACA,iBAAiB,MACT;AACR,QAAM,sBAAsB,MAAM;AAAA,IAChC,IAAI;AAAA,MACF,iBAAiB,IAAI,CAAC,WAAW,gBAAgB,QAAQ,cAAc,CAAC,EAAE,OAAO,OAAO;AAAA,IAC1F;AAAA,EACF;AACA,QAAM,aAAa,oBAAoB,OAAO,cAAc;AAC5D,aAAW,aAAa,YAAY;AAClC,QAAI,oBAAoB,SAAS,SAAS,EAAG,QAAO;AAAA,EACtD;AACA,SAAO,oBAAoB,CAAC,KAAK,gBAAgB,gBAAgB,IAAI;AACvE;AAoBO,SAAS,uBACd,UACA,QACQ;AACR,MAAI,CAAC,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AACxD,SAAO,SAAS,QAAQ,wBAAwB,CAAC,QAAQ,QAAQ;AAC/D,UAAM,QAAQ,OAAO,GAAG;AACxB,WAAO,UAAU,QAAQ,UAAU,SAAY,KAAK,OAAO,KAAK;AAAA,EAClE,CAAC;AACH;AAEO,SAAS,qBACd,OACA,QACA,iBAAiB,MACT;AACR,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,aAAa,oBAAoB,QAAQ,cAAc;AAC7D,aAAW,aAAa,YAAY;AAClC,UAAM,YAAY,MAAM,SAAS;AACjC,QAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAG,QAAO;AAAA,EAChE;AACA,aAAW,aAAa,OAAO,OAAO,KAAK,GAAG;AAC5C,QAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAG,QAAO;AAAA,EAChE;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,OAO3B;AACT,QAAM,iBAAiB,MAAM,kBAAkB;AAC/C,QAAM,aAAa,oBAAoB,MAAM,QAAQ,cAAc;AACnE,aAAW,aAAa,YAAY;AAClC,UAAM,UAAU,MAAM,SAAS,SAAS;AACxC,UAAM,WAAW,UAAU,MAAM,GAAG;AACpC,QAAI,OAAO,aAAa,YAAY,SAAS,KAAK,GAAG;AACnD,aAAO,uBAAuB,UAAU,MAAM,MAAM;AAAA,IACtD;AAAA,EACF;AACA,SAAO,uBAAuB,MAAM,YAAY,MAAM,KAAK,MAAM,MAAM;AACzE;AAWA,IAAM,cAAc,cAAuC,IAAI;AAExD,SAAS,aAAa,OAO1B;AACD,QAAM,iBAAiB,MAAM,kBAAkB;AAC/C,QAAM,mBAAmB,MAAM,oBAAoB,OAAO,KAAK,MAAM,QAAQ;AAC7E,QAAM,SAAS,oBAAoB,MAAM,QAAQ,kBAAkB,cAAc;AACjF,QAAM,YAAY,MAAM,cAAc,MAAM;AAAA,EAAC;AAE7C,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,CAAC,KAAK,QAAQ,aACf,sBAAsB;AAAA,QACpB,UAAU,MAAM;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACH,aAAa,CAACC,WAAU,qBAAqBA,QAAO,QAAQ,cAAc;AAAA,IAC5E;AAAA,IACA,CAAC,gBAAgB,QAAQ,MAAM,UAAU,WAAW,gBAAgB;AAAA,EACtE;AAEA,SAAO,oBAAC,YAAY,UAAZ,EAAqB,OAAe,gBAAM,UAAS;AAC7D;AAEO,SAAS,UAA4B;AAC1C,QAAM,QAAQ,WAAW,WAAW;AACpC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACA,SAAO;AACT;;;ACoaI,gBAAAC,YAAA;AAnlBJ,IAAM,uBAAuB;AAAA,EAC3B,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,8BAA8B;AAAA,IAC9B,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,+BAA+B;AAAA,IAC/B,2CAA2C;AAAA,IAC3C,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,sCAAsC;AAAA,IACtC,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,gCAAgC;AAAA,IAChC,uCAAuC;AAAA,IACvC,sCACE;AAAA,IACF,uCAAuC;AAAA,IACvC,uCAAuC;AAAA,IACvC,4CAA4C;AAAA,IAC5C,mCAAmC;AAAA,IACnC,kCACE;AAAA,IACF,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,sCAAsC;AAAA,IACtC,6CAA6C;AAAA,IAC7C,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,mCAAmC;AAAA,IACnC,2BAA2B;AAAA,IAC3B,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,mCAAmC;AAAA,IACnC,8BAA8B;AAAA,IAC9B,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,gCAAgC;AAAA,IAChC,kCAAkC;AAAA,IAClC,6BAA6B;AAAA,IAC7B,wCAAwC;AAAA,IACxC,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,IAC5B,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA,IAC5B,+BAA+B;AAAA,IAC/B,2BAA2B;AAAA,IAC3B,gCAAgC;AAAA,IAChC,iCAAiC;AAAA,IACjC,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,8BAA8B;AAAA,IAC9B,kCAAkC;AAAA,IAClC,uBAAuB;AAAA,IACvB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,yBACE;AAAA,IACF,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,sCAAsC;AAAA,IACtC,+BAA+B;AAAA,IAC/B,iCAAiC;AAAA,IACjC,qCAAqC;AAAA,IACrC,uCAAuC;AAAA,IACvC,wBAAwB;AAAA,IACxB,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IACjC,kCAAkC;AAAA,IAClC,0BAA0B;AAAA,IAC1B,8CAA8C;AAAA,IAC9C,0CAA0C;AAAA,IAC1C,gDAAgD;AAAA,IAChD,wCAAwC;AAAA,IACxC,gDAAgD;AAAA,IAChD,gCAAgC;AAAA,IAChC,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,8BAA8B;AAAA,IAC9B,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,4BAA4B;AAAA,IAC5B,yBAAyB;AAAA,IACzB,4BACE;AAAA,IACF,0BACE;AAAA,IACF,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,4BAA4B;AAAA,IAC5B,kCACE;AAAA,IACF,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,IAC5B,+BACE;AAAA,IACF,+BAA+B;AAAA,IAC/B,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,sBACE;AAAA,IACF,gCAAgC;AAAA,IAChC,+BAA+B;AAAA,IAC/B,mCAAmC;AAAA,IACnC,kCAAkC;AAAA,IAClC,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,0BAA0B;AAAA,IAC1B,uBAAuB;AAAA,IACvB,4BAA4B;AAAA,IAC5B,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,kCAAkC;AAAA,IAClC,oCAAoC;AAAA,IACpC,kCAAkC;AAAA,IAClC,yCAAyC;AAAA,IACzC,2CAA2C;AAAA,IAC3C,qCAAqC;AAAA,IACrC,uCAAuC;AAAA,IACvC,mDAAmD;AAAA,IACnD,sDACE;AAAA,IACF,mDAAmD;AAAA,IACnD,wBAAwB;AAAA,IACxB,yBAAyB;AAAA,IACzB,gCAAgC;AAAA,IAChC,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,gCAAgC;AAAA,IAChC,wBAAwB;AAAA,IACxB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,IAC9B,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,yCACE;AAAA,IACF,kCACE;AAAA,IACF,kCAAkC;AAAA,IAClC,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,+BAA+B;AAAA,IAC/B,iCAAiC;AAAA,IACjC,yBAAyB;AAAA,IACzB,4CAA4C;AAAA,IAC5C,sCACE;AAAA,IACF,kCAAkC;AAAA,IAClC,wCACE;AAAA,IACF,2CACE;AAAA,IACF,+BAA+B;AAAA,IAC/B,8BAA8B;AAAA,IAC9B,kCACE;AAAA,IACF,wCAAwC;AAAA,EAC1C;AAAA,EACA,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,8BAA8B;AAAA,IAC9B,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,gCAAgC;AAAA,IAChC,8BAA8B;AAAA,IAC9B,+BAA+B;AAAA,IAC/B,2CAA2C;AAAA,IAC3C,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,sCAAsC;AAAA,IACtC,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,uCAAuC;AAAA,IACvC,sCACE;AAAA,IACF,uCAAuC;AAAA,IACvC,uCAAuC;AAAA,IACvC,4CAA4C;AAAA,IAC5C,mCAAmC;AAAA,IACnC,kCACE;AAAA,IACF,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,iCAAiC;AAAA,IACjC,wCAAwC;AAAA,IACxC,sCAAsC;AAAA,IACtC,6CAA6C;AAAA,IAC7C,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,mCAAmC;AAAA,IACnC,2BAA2B;AAAA,IAC3B,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,mCAAmC;AAAA,IACnC,8BAA8B;AAAA,IAC9B,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,gCAAgC;AAAA,IAChC,kCAAkC;AAAA,IAClC,6BAA6B;AAAA,IAC7B,wCAAwC;AAAA,IACxC,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,IAC5B,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA,IAC5B,+BAA+B;AAAA,IAC/B,2BAA2B;AAAA,IAC3B,gCAAgC;AAAA,IAChC,iCAAiC;AAAA,IACjC,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,8BAA8B;AAAA,IAC9B,kCAAkC;AAAA,IAClC,uBAAuB;AAAA,IACvB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,yBACE;AAAA,IACF,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,sCAAsC;AAAA,IACtC,+BAA+B;AAAA,IAC/B,iCAAiC;AAAA,IACjC,qCAAqC;AAAA,IACrC,uCAAuC;AAAA,IACvC,wBAAwB;AAAA,IACxB,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IACjC,kCAAkC;AAAA,IAClC,0BAA0B;AAAA,IAC1B,8CAA8C;AAAA,IAC9C,0CAA0C;AAAA,IAC1C,gDACE;AAAA,IACF,wCAAwC;AAAA,IACxC,gDAAgD;AAAA,IAChD,gCAAgC;AAAA,IAChC,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,8BAA8B;AAAA,IAC9B,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,4BAA4B;AAAA,IAC5B,yBAAyB;AAAA,IACzB,4BACE;AAAA,IACF,0BACE;AAAA,IACF,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,4BAA4B;AAAA,IAC5B,kCACE;AAAA,IACF,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BACE;AAAA,IACF,+BACE;AAAA,IACF,+BACE;AAAA,IACF,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,4BACE;AAAA,IACF,sBACE;AAAA,IACF,gCAAgC;AAAA,IAChC,+BAA+B;AAAA,IAC/B,mCAAmC;AAAA,IACnC,kCAAkC;AAAA,IAClC,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,0BAA0B;AAAA,IAC1B,uBAAuB;AAAA,IACvB,4BAA4B;AAAA,IAC5B,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,kCAAkC;AAAA,IAClC,oCAAoC;AAAA,IACpC,kCAAkC;AAAA,IAClC,yCAAyC;AAAA,IACzC,2CAA2C;AAAA,IAC3C,qCAAqC;AAAA,IACrC,uCAAuC;AAAA,IACvC,mDAAmD;AAAA,IACnD,sDACE;AAAA,IACF,mDAAmD;AAAA,IACnD,wBAAwB;AAAA,IACxB,yBAAyB;AAAA,IACzB,gCAAgC;AAAA,IAChC,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,gCAAgC;AAAA,IAChC,wBAAwB;AAAA,IACxB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,wBACE;AAAA,IACF,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,2BAA2B;AAAA,IAC3B,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,IAC9B,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,yCACE;AAAA,IACF,kCACE;AAAA,IACF,kCAAkC;AAAA,IAClC,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,+BAA+B;AAAA,IAC/B,iCAAiC;AAAA,IACjC,yBAAyB;AAAA,IACzB,4CAA4C;AAAA,IAC5C,sCACE;AAAA,IACF,kCAAkC;AAAA,IAClC,wCACE;AAAA,IACF,2CACE;AAAA,IACF,+BACE;AAAA,IACF,8BACE;AAAA,IACF,kCACE;AAAA,IACF,wCACE;AAAA,EACJ;AACF;AAEO,SAAS,wBAAwB,OAAiD;AACvF,SACE,gBAAAA,KAAC,gBAAa,QAAQ,MAAM,UAAU,MAAM,UAAU,sBACnD,gBAAM,UACT;AAEJ;AAEO,SAAS,qBAAqB;AACnC,SAAO,QAAQ;AACjB;AAEO,SAAS,uBAAuB,OAAsB,QAAgC;AAC3F,MAAI,iBAAgC;AACpC,MAAI,OAAO,mBAAmB,UAAU;AACtC,UAAM,UAAU,eAAe,KAAK;AACpC,QAAI,CAAC,QAAS,QAAO;AACrB,QAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,OAAO;AACjC,YAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAAG;AAClE,2BAAiB;AAAA,QACnB,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,kBAAkB,OAAO,mBAAmB,YAAY,MAAM,QAAQ,cAAc,GAAG;AAC1F,WAAO;AAAA,EACT;AACA,QAAM,gBAAgB,OAAO,UAAU,IAAI,EAAE,KAAK,KAAK;AACvD,QAAM,SAAS,eAAe,aAAa;AAC3C,MAAI,OAAO,WAAW,YAAY,OAAO,KAAK,EAAG,QAAO;AACxD,QAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC;AACvC,QAAM,YAAY,eAAe,IAAI;AACrC,MAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAG,QAAO;AAC9D,QAAM,UAAU,eAAe;AAC/B,MAAI,OAAO,YAAY,YAAY,QAAQ,KAAK,EAAG,QAAO;AAC1D,aAAW,aAAa,OAAO,OAAO,cAAc,GAAG;AACrD,QAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAG,QAAO;AAAA,EAChE;AACA,SAAO;AACT;;;AF/hBS,0BAAAC,YAAA;AA1FT,IAAM,MAAMC,eAA8C,IAAI;AAE9D,SAAS,gCAAgC,OAAyD;AAChG,MAAI,CAAC,SAAS,OAAO,aAAa,YAAa;AAC/C,QAAM,OAAO,SAAS;AACtB,QAAM,MAAiC;AAAA,IACrC,CAAC,WAAW,CAAC,gBAAgB,cAAc,CAAC;AAAA,IAC5C,CAAC,eAAe,CAAC,qBAAqB,oBAAoB,CAAC;AAAA,IAC3D,CAAC,MAAM,CAAC,WAAW,SAAS,CAAC;AAAA,IAC7B,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,QAAQ,CAAC,aAAa,cAAc,CAAC;AAAA,IACtC,CAAC,UAAU,CAAC,eAAe,aAAa,CAAC;AAAA,IACzC,CAAC,QAAQ,CAAC,aAAa,gBAAgB,CAAC;AAAA,IACxC,CAAC,SAAS,CAAC,cAAc,iBAAiB,CAAC;AAAA,IAC3C,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,UAAU,CAAC,eAAe,aAAa,CAAC;AAAA,IACzC,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,UAAU,CAAC,eAAe,kBAAkB,kBAAkB,gBAAgB,CAAC;AAAA,IAChF,CAAC,YAAY,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,IACjD,CAAC,cAAc,CAAC,kBAAkB,CAAC;AAAA,EACrC;AAEA,aAAW,CAAC,KAAK,OAAO,KAAK,KAAK;AAChC,UAAM,WAAW,MAAM,GAAG;AAC1B,UAAM,QAAQ,OAAO,aAAa,WAAW,SAAS,KAAK,IAAI;AAC/D,QAAI,CAAC,MAAO;AACZ,eAAW,UAAU,QAAS,MAAK,MAAM,YAAY,QAAQ,KAAK;AAAA,EACpE;AAEA,MACE,OAAO,MAAM,WAAW,YACxB,MAAM,OAAO,KAAK,KAClB,EAAE,OAAO,MAAM,aAAa,YAAY,MAAM,SAAS,KAAK,IAC5D;AACA,SAAK,MAAM,YAAY,kBAAkB,MAAM,OAAO,KAAK,CAAC;AAC5D,SAAK,MAAM,YAAY,kBAAkB,MAAM,OAAO,KAAK,CAAC;AAAA,EAC9D;AACA,MAAI,OAAO,MAAM,OAAO,YAAY,MAAM,GAAG,KAAK,KAAK,CAAC,MAAM,UAAU;AACtE,SAAK,MAAM,YAAY,kBAAkB,MAAM,GAAG,KAAK,CAAC;AACxD,SAAK,MAAM,YAAY,kBAAkB,MAAM,GAAG,KAAK,CAAC;AAAA,EAC1D;AAEA,QAAM,eACJ,MAAM,UAAU,OAAO,MAAM,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,MAAM,IAC1E,MAAM,SACP;AACN,MAAI,cAAc;AAChB,eAAW,CAAC,QAAQ,QAAQ,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC7D,YAAM,QAAQ,OAAO,aAAa,WAAW,SAAS,KAAK,IAAI;AAC/D,UAAI,CAAC,MAAO;AACZ,UACE,CAAC,OAAO,WAAW,OAAO,KAC1B,CAAC,OAAO,WAAW,OAAO,KAC1B,CAAC,OAAO,WAAW,UAAU,GAC7B;AACA;AAAA,MACF;AACA,WAAK,MAAM,YAAY,QAAQ,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,YACJ,OAAO,MAAM,SAAS,WAClB,MAAM,KAAK,KAAK,EAAE,YAAY,IAC9B,OAAO,MAAM,cAAc,WACzB,MAAM,UAAU,KAAK,EAAE,YAAY,IACnC;AACR,MAAI,cAAc,UAAU,cAAc,SAAS;AACjD,SAAK,QAAQ,iBAAiB;AAAA,EAChC;AACF;AAEA,SAAS,yBAAyB,OAI/B;AACD,YAAU,MAAM;AACd,UAAM,SAAS,OAAO,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,EAAE,EAAE,KAAK;AACzE,QAAI,UAAU,OAAO,aAAa,aAAa;AAC7C,eAAS,gBAAgB,OAAO;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,QAAQ,MAAM,KAAK,MAAM,CAAC;AAEzC,YAAU,MAAM;AACd,oCAAgC,MAAM,KAAK,SAAS,IAAI;AAAA,EAC1D,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC;AAErB,SAAO,gBAAAD,KAAA,YAAG,gBAAM,UAAS;AAC3B;AAEO,SAAS,oBAAoB,OAKjC;AACD,SACE,gBAAAA,KAAC,2BAAwB,QAAQ,MAAM,KAAK,QAC1C,0BAAAA,KAAC,4BAAyB,MAAM,MAAM,MAAM,KAAK,MAAM,KACrD,0BAAAA,KAAC,IAAI,UAAJ,EAAa,OAAO,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,MAAM,IAAI,GAC3E,gBAAM,UACT,GACF,GACF;AAEJ;AAEO,SAAS,iBAA0C;AACxD,QAAM,IAAIE,YAAW,GAAG;AACxB,MAAI,CAAC,EAAG,OAAM,IAAI,MAAM,gCAAgC;AACxD,SAAO;AACT;;;AG5HA,SAAS,OAAO,cAAc;;;ACA9B,SAAS,aAAAC,YAAW,WAAAC,UAAS,gBAAgB;AAC7C,SAAS,QAAAC,OAAM,aAAa,mBAAmB;;;ACD/C,SAAS,aAAAC,kBAAiB;AA8ClB,SACE,OAAAC,MADF;AA3CD,SAAS,mBAAmB,OAQhC;AACD,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,EAAE,kBAAkB,QAAW,SAAS;AAAA,IACvD,cAAc,EAAE,iBAAiB,QAAW,QAAQ;AAAA,IACpD;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,OAAO,WAAW,YAAa;AAC5C,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AAC1B,cAAM,eAAe;AACrB,iBAAS;AAAA,MACX;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,MAAI,CAAC,KAAM,QAAO;AAElB,SACE,gBAAAD,KAAC,SAAI,WAAU,4BAA2B,SAAS,UACjD;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,MAC1C,MAAK;AAAA,MACL,cAAW;AAAA,MACX,mBAAgB;AAAA,MAEhB;AAAA,6BAAC,SAAI,WAAU,wBACb;AAAA,0BAAAA,KAAC,QAAG,IAAG,2BAA0B,WAAU,2CACxC,iBACH;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,cAAY,EAAE,uBAAuB,QAAW,cAAc;AAAA,cAC/D;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QAEA,gBAAAA,KAAC,SAAI,WAAU,wBACZ,wBACC,gBAAAA,KAAC,SAAI,WAAU,uCAAuC,uBAAY,IAChE,MACN;AAAA,QAEA,qBAAC,SAAI,WAAU,2BACb;AAAA,0BAAAA,KAAC,YAAO,WAAU,yBAAwB,SAAS,UAChD,uBACH;AAAA,UACA,gBAAAA,KAAC,YAAO,WAAU,yBAAwB,gBAAa,UAAS,SAAS,WACtE,wBACH;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;;;AC5EA,SAAS,YAAY;AAoBjB,SAIE,OAAAE,MAJF,QAAAC,aAAA;AAXG,SAAS,sBAAsB,OAAmC;AACvE,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM,UAAU,MAAM,aAAa,IAAI,MAAM,WAAW,KAAK,eAAe,MAAM,WAAW;AAC7F,QAAM,eAAe,MAAM,aACvB,cAAc,MAAM,WAAW,KAC/B,0BAA0B,MAAM,WAAW;AAC/C,QAAM,aAAa,MAAM,aACrB,YAAY,MAAM,WAAW,KAC7B,wBAAwB,MAAM,WAAW;AAE7C,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAY,EAAE,mBAAmB,QAAW,wBAAwB;AAAA,MAEpE;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAW,eAAe,MAAM,WAAW,UAAU,cAAc,EAAE;AAAA,YACrE,gBAAc,MAAM,WAAW,UAAU,SAAS;AAAA,YAEjD,YAAE,aAAa,QAAW,OAAO;AAAA;AAAA,QACpC;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAW,eAAe,MAAM,WAAW,eAAe,cAAc,EAAE;AAAA,YAC1E,gBAAc,MAAM,WAAW,eAAe,SAAS;AAAA,YAEtD,YAAE,kBAAkB,QAAW,YAAY;AAAA;AAAA,QAC9C;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAW,eAAe,MAAM,WAAW,aAAa,cAAc,EAAE;AAAA,YACxE,gBAAc,MAAM,WAAW,aAAa,SAAS;AAAA,YAEpD,YAAE,gBAAgB,QAAW,UAAU;AAAA;AAAA,QAC1C;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC/CO,SAAS,kBAAkB,QAAwB;AACxD,QAAM,KAAK,IAAI,gBAAgB,OAAO,UAAU,EAAE,CAAC;AACnD,SAAO,OAAO,GAAG,IAAI,uBAAuB,KAAK,GAAG,IAAI,oBAAoB,KAAK,EAAE,EAAE,KAAK;AAC5F;AAEO,SAAS,iBAAiB,OAAe,QAAwB;AACtE,QAAM,SAAS,IAAI,gBAAgB;AACnC,MAAI,MAAO,QAAO,IAAI,SAAS,KAAK;AACpC,QAAM,gBAAgB,kBAAkB,MAAM;AAC9C,MAAI,cAAe,QAAO,IAAI,yBAAyB,aAAa;AACpE,QAAM,MAAM,OAAO,SAAS;AAC5B,SAAO,MAAM,IAAI,GAAG,KAAK;AAC3B;;;ACZO,SAAS,SAAS,OAAkD;AACzE,SAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,SAAS,OAAyC;AAChE,SAAO,SAAS,KAAK,IAAI,QAAQ,CAAC;AACpC;AAEO,SAAS,WAAW,OAAwB;AACjD,MAAI,OAAO,UAAU,SAAU,QAAO,MAAM,KAAK;AACjD,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO,OAAO,KAAK;AAChF,SAAO;AACT;AAEO,SAAS,mBAAmB,QAA2B;AAC5D,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,WAAW,KAAK;AAClC,QAAI,UAAW,QAAO;AAAA,EACxB;AACA,SAAO;AACT;AAEO,SAAS,eAAe,OAA6B;AAC1D,MAAI,iBAAiB,MAAM;AACzB,WAAO,OAAO,MAAM,MAAM,QAAQ,CAAC,IAAI,OAAO;AAAA,EAChD;AAEA,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,eAAe,MAAM,WAAW,MAAM;AAC5C,UAAM,aAAa,MAAM,eAAe,MAAM;AAC9C,UAAM,UAAU,OAAO,iBAAiB,WAAW,eAAe,OAAO,YAAY;AACrF,UAAM,QAAQ,OAAO,eAAe,WAAW,aAAa,OAAO,cAAc,CAAC;AAClF,QAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,YAAM,SAAS,IAAI,KAAK,UAAU,OAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,MAAY,EAAE;AACzF,aAAO,OAAO,MAAM,OAAO,QAAQ,CAAC,IAAI,OAAO;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,OAAO,WAAW,KAAK;AAC7B,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,aAAa,oBAAI,IAAY,CAAC,IAAI,CAAC;AACzC,MAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,UAAM,OAAO,IAAI,KAAK,OAAO,IAAI,CAAC;AAClC,QAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AAAA,EAC5C;AACA,MAAI,uCAAuC,KAAK,IAAI,GAAG;AACrD,eAAW,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;AACrC,eAAW,IAAI,GAAG,KAAK,QAAQ,KAAK,GAAG,CAAC,GAAG;AAAA,EAC7C;AACA,MAAI,KAAK,SAAS,MAAM,GAAG;AACzB,eAAW,IAAI,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG;AAAA,EACxC;AAEA,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,IAAI,KAAK,SAAS;AACjC,QAAI,CAAC,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAG,QAAO;AAAA,EAC9C;AAEA,SAAO;AACT;AAEO,SAAS,eAAe,OAAwB;AACrD,QAAM,SAAS,eAAe,KAAK;AACnC,SAAO,SAAS,OAAO,eAAe,IAAI;AAC5C;AAEO,SAAS,qBACd,OACA,UACmC;AACnC,SAAO,UAAU,YAAY,UAAU,WAAW,UAAU,eACxD,QACA,WACE,UACA;AACR;;;AJkJQ,SAwGA,YAAAE,WAxGA,OAAAC,MAGA,QAAAC,aAHA;AAxMR,SAAS,gBAAwB;AAC/B,QAAM,MAAM,YAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAAS,mBAAmB,GAA+B;AACzD,QAAM,aAAa,SAAS,EAAE,QAAQ,EAAE;AACxC,QAAM,UAA4B,MAAM,QAAQ,UAAU,IAAI,aAAa;AAC3E,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAC7C,QAAM,MAAM,QAAQ,KAAK,CAAC,MAAM,SAAS,CAAC,EAAE,YAAY,IAAI;AAC5D,QAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,SAAO,gBAAgB,SAAS,IAAI,EAAE,EAAE,KAAK;AAC/C;AAEA,SAAS,6BAA6B,OAO3B;AACT,QAAM,OAAO,MAAM,aAAa,UAAU;AAC1C,QAAM,QAAQ,MAAM,kBAAkB,MAAM,SAAS,QAAQ,MAAM,MAAM,KAAK;AAC9E,QAAM,cAAc,MAAM,cAAc,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK;AACxE,QAAM,QAAQ,MAAM,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK;AAC5D,QAAM,UAAU,OAAO,MAAM,aAAa,EAAE,EAAE,KAAK,KAAK;AACxD,SAAO,qCAAqC,IAAI,IAAI,KAAK,YAAY,OAAO,eAAe,UAAU,SAAS,IAAI;AACpH;AAEA,SAAS,yBAAyB,YAAiD;AACjF,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,UAAU;AAClD,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,0BAA0B,YAAoB,OAAmC;AACxF,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,WAAO,aAAa,QAAQ,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,EAC/D,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,cAAc;AAC5B,QAAM,EAAE,QAAQ,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,YAAY,KAAK,YAAY,KAAK,UAAU,IAAI;AACtD,QAAM,cAAc,KAAK,MAAM,eAAe;AAC9C,QAAM,iBAAiB,KAAK,MAAM,kBAAkB;AACpD,QAAM,MAAM,YAAY;AACxB,QAAM,QAAQ,cAAc;AAC5B,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AACtD,QAAM,WAAW,YAAY;AAC7B,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAC/D,QAAM,aAAaC;AAAA,IACjB,MACE,6BAA6B;AAAA,MAC3B;AAAA,MACA,gBAAgB,KAAK;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb,YAAY,KAAK;AAAA,MACjB,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,IACH,CAAC,KAAK,YAAY,KAAK,gBAAgB,KAAK,MAAM,KAAK,QAAQ,KAAK,WAAW,UAAU;AAAA,EAC3F;AACA,QAAM,aAAa,KAAK,OAAO,CAAC,KAAK;AAErC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,CAAC,CAAC;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,IAAI;AACrC,QAAM,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE;AAC7B,QAAM,CAAC,eAAe,gBAAgB,IAAI;AAAA,IAAkB,MAC1D,QAAQ,yBAAyB,UAAU,GAAG,SAAS;AAAA,EACzD;AACA,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,MAAM;AAC3D,UAAM,SAAS,yBAAyB,UAAU;AAClD,WAAO,OAAO,QAAQ,gBAAgB,WAAW,OAAO,cAAc;AAAA,EACxE,CAAC;AACD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAyB,IAAI;AAEzE,QAAM,wBAAwB,KAAK,yBAAyB;AAE5D,QAAM,UAAUA,SAAQ,MAAM;AAC5B,UAAM,IAAI,oBAAI,IAAY;AAC1B,eAAW,KAAK,OAAO;AACrB,YAAM,OAAO,EAAE,UAAU;AACzB,UAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,mBAAWC,MAAK,KAAM,GAAE,IAAIA,EAAC;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,GAAG;AACpC,aAAO,MAAM,KAAK,CAAC,EAChB,OAAO,CAACA,OAAM,IAAI,KAAM,SAASA,EAAC,CAAC,EACnC,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAAA,IACtC;AACA,WAAO,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAAA,EACxD,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;AAErB,iBAAe,UAAU;AACvB,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,iBAAiB;AAC1C,eAAS,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC;AAAA,IACrD,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,QAAQ;AACb,SAAK,qBAAqB;AAAA,EAE5B,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,UAAM,SAAS,yBAAyB,UAAU;AAClD,qBAAiB,QAAQ,QAAQ,SAAS,CAAC;AAC3C,mBAAe,OAAO,QAAQ,gBAAgB,WAAW,OAAO,cAAc,UAAU;AAAA,EAC1F,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,EAAAA,WAAU,MAAM;AACd,UAAM,iBAAiB,KAAK,QAAQ,CAAC;AACrC,QAAI,eAAe,eAAe,SAAS,KAAK,CAAC,eAAe,SAAS,WAAW,GAAG;AACrF,qBAAe,UAAU;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,YAAY,KAAK,MAAM,WAAW,CAAC;AAEvC,EAAAA,WAAU,MAAM;AACd,8BAA0B,YAAY;AAAA,MACpC,WAAW;AAAA,MACX,aAAa,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH,GAAG,CAAC,eAAe,aAAa,UAAU,CAAC;AAE3C,QAAM,WAAWF,SAAQ,MAAM;AAC7B,UAAM,KAAK,EAAE,KAAK,EAAE,YAAY;AAChC,WAAO,MAAM,OAAO,CAAC,MAAM;AACzB,YAAM,OAAO,sBAAsB,OAAO,EAAE,EAAE,CAAC;AAC/C,YAAM,cAAc,QAAQ,IAAI;AAChC,UAAI,iBAAiB,CAAC,YAAa,QAAO;AAG1C,UAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,GAAG;AACpC,cAAM,QAAQ,MAAM,QAAQ,EAAE,UAAU,IAAI,IACxC,EAAE,SAAS,KAAK,OAAO,CAAC,QAAuB,OAAO,QAAQ,QAAQ,IACtE,CAAC;AACL,cAAM,WAAW,IAAI,KAAK,KAAK,CAACC,OAAM,MAAM,SAASA,EAAC,CAAC;AACvD,YAAI,CAAC,SAAU,QAAO;AAAA,MACxB;AAGA,UAAI,KAAK,cAAc,IAAI,WAAW,SAAS,GAAG;AAChD,YAAI,EAAE,WAAW,QAAQ,CAAC,IAAI,WAAW,SAAS,EAAE,UAAU,IAAI,EAAG,QAAO;AAAA,MAC9E;AAGA,UAAI,aAAa;AACf,cAAM,OAAO,SAAS,CAAC,EAAE,WAAW,SAAS,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO;AAC1E,YAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,SAAS,WAAW,EAAG,QAAO;AAAA,MAClE;AAEA,UAAI,CAAC,GAAI,QAAO;AAChB,YAAM,WAAW,SAAS,EAAE,QAAQ;AACpC,YAAM,QACJ,uBAAuB,SAAS,OAAc,MAAM,KAAK,gBAAgB,EAAE,IAAI;AACjF,YAAM,cACJ,uBAAuB,SAAS,aAAoB,MAAM,KAC1D,gBAAgB,EAAE,WAAW;AAC/B,YAAM,MAAM,GAAG,KAAK,IAAI,WAAW,IAAI,EAAE,IAAI,GAAG,YAAY;AAC5D,aAAO,IAAI,SAAS,EAAE;AAAA,IACxB,CAAC;AAAA,EACH,GAAG;AAAA,IACD,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAF,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,KAAC,QAAG,WAAU,YACX,eAAK,SAAS,EAAE,sBAAsB,QAAW,aAAa,GACjE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD,KAAC,yBAAsB,QAAO,SAAQ,YAAwB,aAA0B;AAAA,QACxF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,YAC5B,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,KAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEC,SAAS,gBAAAA,KAAC,SAAI,WAAU,2BAA2B,iBAAM;AAAA,IAE1D,gBAAAA,KAAC,SAAI,WAAU,qBACb,0BAAAC,MAAC,SAAI,WAAU,oBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,sCACb;AAAA,wBAAAD,KAAC,WAAM,WAAU,YAAY,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACrE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,KAAK,EAAE,OAAO,KAAK;AAAA,YACpC,aAAa;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,cAAY,EAAE,uBAAuB,QAAW,aAAa;AAAA;AAAA,QAC/D;AAAA,SACF;AAAA,MAEA,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,wBAAAD,KAAC,WAAM,WAAU,YAAY,YAAE,cAAc,QAAW,KAAK,GAAE;AAAA,QAC/D,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,MAAM;AACf,oBAAM,OAAO,EAAE,OAAO;AACtB,6BAAe,IAAI;AACnB,wCAA0B,YAAY;AAAA,gBACpC,WAAW;AAAA,gBACX,aAAa;AAAA,cACf,CAAC;AAAA,YACH;AAAA,YACA,cAAY,EAAE,yBAAyB,QAAW,eAAe;AAAA,YAEjE;AAAA,8BAAAD,KAAC,YAAO,OAAM,IAAI,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,cAC7D,QAAQ,IAAI,CAACG,OACZ,gBAAAH,KAAC,YAAe,OAAOG,IACpB,UAAAA,MADUA,EAEb,CACD;AAAA;AAAA;AAAA,QACH;AAAA,SACF;AAAA,MAEA,gBAAAF,MAAC,WAAM,WAAU,qBACf;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU,CAAC,MAAM;AACf,oBAAM,OAAO,EAAE,OAAO;AACtB,+BAAiB,IAAI;AACrB,wCAA0B,YAAY;AAAA,gBACpC,WAAW;AAAA,gBACX,aAAa,eAAe;AAAA,cAC9B,CAAC;AAAA,YACH;AAAA,YACA,WAAU;AAAA;AAAA,QACZ;AAAA,QACA,gBAAAA,KAAC,UAAK,WAAU,4BACb,YAAE,qBAAqB,QAAW,YAAY,GACjD;AAAA,SACF;AAAA,OACF,GACF;AAAA,IAEC,QAAQ,MAAM,WAAW,IACxB,gBAAAA,KAAC,SAAI,WAAU,WAAU,aAAU,QAChC,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,gBAAAC,MAAC,SAAY,WAAU,oBACrB;AAAA,sBAAAD,KAAC,SAAI,WAAU,0BAAyB;AAAA,MACxC,gBAAAC,MAAC,SAAI,WAAU,4BACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,wCAAuC;AAAA,QACtD,gBAAAA,KAAC,SAAI,WAAU,2CAA0C;AAAA,QACzD,gBAAAA,KAAC,SAAI,WAAU,0CAAyC;AAAA,QACxD,gBAAAA,KAAC,SAAI,WAAU,2CAA0C;AAAA,SAC3D;AAAA,SAPQ,CAQV,CACD,GACH,IAEA,gBAAAC,MAAAF,WAAA,EACG;AAAA,OAAC,QACA,gBAAAC,KAAC,SAAI,WAAU,kBACb,0BAAAA,KAAC,SAAI,WAAU,oBACZ,mBAAS,WAAW,MAAM,SACvB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS,WAAW,IAAI,KAAK;AAAA,QACvC;AAAA,QACA,GAAG,SAAS,MAAM,OAAO,SAAS,WAAW,IAAI,KAAK,GAAG;AAAA,MAC3D,IACA;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO,SAAS;AAAA,UAChB,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,WAAW,IAAI,KAAK;AAAA,QACpC;AAAA,QACA,GAAG,SAAS,MAAM,OAAO,MAAM,MAAM,OAAO,MAAM,WAAW,IAAI,KAAK,GAAG;AAAA,MAC3E,GACN,GACF;AAAA,MAEF,gBAAAA,KAAC,SAAI,WAAU,WACZ,mBAAS,WAAW,KAAK,CAAC,OACzB,gBAAAC,MAAC,SAAI,WAAU,oBACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,yBAAwB,oBAAC;AAAA,QACxC,gBAAAA,KAAC,SAAI,WAAU,0BACZ,YAAE,yBAAyB,QAAW,eAAe,GACxD;AAAA,QACA,gBAAAA,KAAC,SAAI,WAAU,yBACZ,2BAAiB,MAAM,SAAS,IAC7B;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA,KAAK,eAAe,gBAClB;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,GACR;AAAA,SACF,IAEA,SAAS,IAAI,CAAC,MAAmB;AAC/B,cAAM,WAAW,SAAS,EAAE,QAAQ;AACpC,cAAM,QACJ,uBAAuB,SAAS,OAAc,MAAM,KACpD,gBAAgB,EAAE,MAAM,EAAE,IAAI,KAC9B;AACF,cAAM,OACJ,uBAAuB,SAAS,aAAoB,MAAM,KAC1D,gBAAgB,EAAE,WAAW;AAC/B,cAAM,QACJ,OAAO,SAAS,UAAU,WACtB,SAAS,QACT,gCAAgC,EAAE,OAAO;AAC/C,cAAM,OAAO,sBAAsB,OAAO,EAAE,EAAE,CAAC;AAC/C,cAAM,YAAY,QAAQ,IAAI;AAC9B,cAAM,kBAAkB,mBAAmB,CAAC;AAE5C,cAAM,SAAS,SAAS,SAAS,KAAK;AACtC,cAAM,gBAAgB;AAAA,UACpB,OAAO,KAAK,MAAM,EAAE,SAAS,KAC5B,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,KAAK,KACpD,OAAO,OAAO,QAAQ,YAAY,OAAO,IAAI,KAAK;AAAA,QACrD;AACA,cAAM,sBAAsB,CAAC,EAAE,YAAY,EAAE,WAAW,aAAa;AAErE,cAAM,WAAW;AAAA,UACf,UAAU,aACN,UAAU,mBAAmB,OAAO,EAAE,EAAE,CAAC,CAAC,KAC1C,sBAAsB,mBAAmB,OAAO,EAAE,EAAE,CAAC,CAAC;AAAA,UAC1D,QAAQ;AAAA,QACV;AAEA,eACE,gBAAAC,MAAC,SAAe,WAAU,WACxB;AAAA,0BAAAD,KAACK,OAAA,EAAK,IAAI,UAAU,WAAU,sBAC5B,0BAAAL,KAAC,SAAI,KAAK,OAAO,KAAK,OAAO,WAAU,iBAAgB,GACzD;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,4BAAAA,MAAC,SAAI,WAAU,gBACb;AAAA,8BAAAA,MAAC,SAAI,WAAU,gBACZ;AAAA,kBAAE,WAAW,OACZ,gBAAAA,MAAC,SAAI,WAAU,qBACZ;AAAA,oBAAE,aAAa,QAAW,IAAI;AAAA,kBAAG;AAAA,kBAClC,gBAAAD;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,UAAU,aACN,eAAe,mBAAmB,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,KAC3D,2BAA2B;AAAA,0BACzB,OAAO,EAAE,UAAU,IAAI;AAAA,wBACzB,CAAC;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,sBACA,WAAU;AAAA,sBAET,YAAE,UAAU,QAAQ,EAAE,UAAU;AAAA;AAAA,kBACnC;AAAA,mBACF,IAEA,gBAAAL,KAAC,SAAI,WAAU,qBACZ,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,gBAEF,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA,+BACC,gBAAAA,MAAC,UAAK,WAAU,2BACd;AAAA,oCAAAD,KAAC,UAAK,WAAU,+BAA8B;AAAA,oBAC7C,EAAE,gBAAgB,QAAW,OAAO;AAAA,qBACvC;AAAA,kBAED,EAAE,gBAAgB,WACjB,gBAAAC,MAAC,SAAI,WAAU,mBAAkB;AAAA;AAAA,oBAAE,EAAE,eAAe;AAAA,qBAAQ;AAAA,mBAEhE;AAAA,iBACF;AAAA,cACA,gBAAAD,KAAC,QAAG,WAAU,iBACZ,0BAAAA,KAACK,OAAA,EAAK,IAAI,UAAU,WAAU,sBAC3B,iBACH,GACF;AAAA,eACF;AAAA,YACA,gBAAAL,KAAC,OAAE,WAAU,gBAAgB,gBAAK;AAAA,YAClC,gBAAAA,KAAC,SAAI,WAAU,gBACX,iBAAM,QAAQ,SAAS,IAAI,IAAI,SAAS,OAAO,CAAC,GAC/C,OAAO,CAACG,OAAmB,OAAOA,OAAM,QAAQ,EAChD,MAAM,GAAG,CAAC,EACV,IAAI,CAACA,OACJ,gBAAAH,KAAC,UAAa,WAAU,yBACrB,UAAAG,MADQA,EAEX,CACD,GACL;AAAA,aACF;AAAA,UACA,gBAAAF,MAAC,SAAI,WAAU,kBACb;AAAA,4BAAAD;AAAA,cAACK;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,gBACJ,WAAU;AAAA,gBAET,YAAE,wBAAwB,QAAW,cAAc;AAAA;AAAA,YACtD;AAAA,YACC,cACE,CAAC,YACA,gBAAAL;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAAC,MAAM;AACd,oBAAE,eAAe;AACjB,oBAAE,gBAAgB;AAClB,sBAAI,qBAAqB;AACvB,6BAAS,QAAQ;AACjB;AAAA,kBACF;AACA,uBAAK,eAAe;AAAA,oBAClB,QAAQ,OAAO,EAAE,EAAE;AAAA,oBACnB;AAAA,oBACA,WAAW,KAAK,aAAa;AAAA,kBAC/B,CAAC;AAAA,gBACH;AAAA,gBAEC;AAAA;AAAA,YACH,IAEA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,UAAU,CAAC,MAAM;AAAA,gBACjB,SAAS,CAAC,MAAM;AACd,oBAAE,eAAe;AACjB,oBAAE,gBAAgB;AAClB,sBAAI,MAAM,gBAAgB;AACxB,sCAAkB;AAAA,sBAChB,gBAAgB,KAAK;AAAA,sBACrB,QAAQ,OAAO,EAAE,EAAE;AAAA,sBACnB;AAAA,oBACF,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA,aAEN;AAAA,aAzGQ,EAAE,EA0GZ;AAAA,MAEJ,CAAC,GAEL;AAAA,OACF;AAAA,IAEF,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,QAAQ,cAAc;AAAA,QAC5B,OAAO,EAAE,4BAA4B,QAAW,aAAa;AAAA,QAC7D,aACE,iBACI;AAAA,UACE;AAAA,UACA,EAAE,OAAO,eAAe,MAAM;AAAA,UAC9B,UAAU,eAAe,KAAK;AAAA,QAChC,IACA;AAAA,QAEN,cAAc;AAAA,QACd,UAAU,MAAM,kBAAkB,IAAI;AAAA,QACtC,WAAW,MAAM;AACf,cAAI,CAAC,eAAgB;AACrB,eAAK,mBAAmB;AAAA,YACtB,gBAAgB,eAAe;AAAA,YAC/B,QAAQ,eAAe;AAAA,UACzB,CAAC;AACD,4BAAkB,IAAI;AAAA,QACxB;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AKtiBA,SAAS,aAAAM,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,OAAM,eAAAC,oBAAmB;;;ACDlC,SAAS,QAAAC,aAAY;AAgDb,gBAAAC,YAAA;AAnCR,SAAS,kBAAkB,OAMxB;AACD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,MAAM,MAAO,IAAG,IAAI,SAAS,MAAM,KAAK;AAC5C,MAAI,MAAM,OAAQ,IAAG,IAAI,UAAU,MAAM,MAAM;AAC/C,MAAI,MAAM,kBAAkB,MAAM,YAAY,YAAY;AACxD,OAAG,IAAI,kBAAkB,MAAM,cAAc;AAAA,EAC/C;AACA,QAAM,SAAS,GAAG,SAAS;AAC3B,SAAO;AAAA,IACL,UAAU,MAAM,aAAa,IAAI,MAAM,OAAO,KAAK,gBAAgB,MAAM,OAAO;AAAA,IAChF,QAAQ,SAAS,IAAI,MAAM,KAAK;AAAA,EAClC;AACF;AAEO,SAAS,wBAAwB,OAAqC;AAC3E,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM,OAAsD;AAAA,IAC1D,EAAE,KAAK,YAAY,OAAO,EAAE,qBAAqB,QAAW,UAAU,EAAE;AAAA,IACxE,EAAE,KAAK,YAAY,OAAO,EAAE,qBAAqB,QAAW,UAAU,EAAE;AAAA,IACxE,EAAE,KAAK,YAAY,OAAO,EAAE,qBAAqB,QAAW,UAAU,EAAE;AAAA,IACxE,EAAE,KAAK,iBAAiB,OAAO,EAAE,0BAA0B,QAAW,eAAe,EAAE;AAAA,EACzF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAY,EAAE,uBAAuB,QAAW,qBAAqB;AAAA,MAEpE,eAAK,IAAI,CAAC,QACT,gBAAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UAEC,IACE,kBAAkB;AAAA,YAChB,SAAS,IAAI;AAAA,YACb,YAAY,MAAM;AAAA,YAClB,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM;AAAA,YACd,gBAAgB,MAAM;AAAA,UACxB,CAAC;AAAA,UAEH,WAAW,mBAAmB,MAAM,WAAW,IAAI,MAAM,cAAc,EAAE;AAAA,UACzE,gBAAc,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,UAEjD,cAAI;AAAA;AAAA,QAbA,IAAI;AAAA,MAcX,CACD;AAAA;AAAA,EACH;AAEJ;;;ADnCI,SA8KM,YAAAC,WA9KN,OAAAC,MA8KM,QAAAC,aA9KN;AAvBJ,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAAS,WAA4B;AACnC,QAAM,MAAMA,aAAY;AACxB,SAAOC,SAAQ,MAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC;AACpE;AAEA,SAAS,YAAY,EAAE,OAAO,GAAuB;AACnD,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM,aAAa,OAAO,UAAU,EAAE,EACnC,KAAK,EACL,YAAY;AACf,QAAM,YACJ,eAAe,cACX,qBACA,eAAe,WACb,oBACA;AACR,SACE,gBAAAJ,KAAC,UAAK,WAAW,YAAY,SAAS,IACnC,wBAAc,EAAE,eAAe,QAAW,MAAM,GACnD;AAEJ;AAKO,SAAS,eAAe;AAC7B,QAAM,EAAE,QAAQ,KAAK,IAAI,eAAe;AACxC,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,QAAQE,eAAc;AAC5B,QAAM,QAAQ,SAAS;AAEvB,QAAM,eAAe,MAAM,IAAI,QAAQ,KAAK;AAC5C,QAAM,uBAAuB,MAAM,IAAI,gBAAgB,KAAK;AAC5D,QAAM,mBAAmB,MAAM,IAAI,WAAW,KAAK;AACnD,QAAM,yBAAyB,MAAM,IAAI,kBAAkB,KAAK;AAChE,QAAM,YAAY,KAAK,IAAI,GAAG,SAAS,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,KAAK,CAAC;AACzE,QAAM,CAAC,OAAO,QAAQ,IAAIG,UAA0B,CAAC,CAAC;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAA+B,IAAI;AAC/E,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAA0B,CAAC,CAAC;AACxE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAwB,IAAI;AACpE,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAmC,IAAI;AAC3E,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,EAAE;AAE7C,QAAM,aAAa,OAAO,WAAW,eAAe,OAAO,SAAS,SAAS,WAAW,QAAQ;AAEhG,iBAAe,QAAQ,OAAe,GAAG;AACvC,QAAI,CAAC,OAAO,gBAAgB;AAC1B;AAAA,QACE;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,eAAS,CAAC,CAAC;AACX,oBAAc,IAAI;AAClB,cAAQ,KAAK;AACb;AAAA,IACF;AACA,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,eAAe;AAAA,QACtC,kBAAkB,0BAA0B;AAAA,QAC5C,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA,QACxC;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AACD,eAAS,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,YAAM,iBAAiB,SAAS,KAAK,UAAU;AAC/C;AAAA,QACE,OAAO,KAAK,cAAc,EAAE,SACxB;AAAA,UACE,OAAO,OAAO,eAAe,SAAS,CAAC;AAAA,UACvC,MAAM,OAAO,eAAe,QAAQ,IAAI;AAAA,UACxC,UAAU,OAAO,eAAe,YAAY,EAAE;AAAA,UAC9C,YAAY,OAAO,eAAe,cAAc,CAAC;AAAA,QACnD,IACA;AAAA,MACN;AAAA,IACF,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,QAAQ,SAAS;AACtB,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,gBAAgB,KAAK;AAAA,IACzC,CAAC;AAAA,EAEH,GAAG,CAAC,sBAAsB,WAAW,wBAAwB,YAAY,CAAC;AAE1E,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,oBAAoB,CAAC,OAAO,qBAAqB;AACpD,wBAAkB,IAAI;AACtB,wBAAkB,CAAC,CAAC;AACpB,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,QAAI,YAAY;AAChB,oBAAgB,IAAI;AACpB,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,oBAAqB,gBAAgB;AAC9D,YAAI,UAAW;AACf,cAAM,UAAU,SAAS,GAAG;AAC5B,0BAAkB,SAAS,QAAQ,IAAI,CAAC;AACxC;AAAA,UACE,MAAM,QAAQ,QAAQ,MAAM,IAAI,QAAQ,OAAO,IAAI,CAAC,UAAU,SAAS,KAAK,CAAC,IAAI,CAAC;AAAA,QACpF;AAAA,MACF,SAAS,GAAG;AACV,YAAI,UAAW;AACf,0BAAkB,IAAI;AACtB,0BAAkB,CAAC,CAAC;AACpB,wBAAgB,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MACnE;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,gBAAgB,CAAC;AAE7B,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,mBAAa,EAAE;AACf;AAAA,IACF;AACA,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,eAAe,OAAO,YAAY,CAAC;AAC5D,YAAI,CAAC,MAAO;AACZ,cAAM,WAAW,SAAS,KAAK,QAAQ;AACvC,cAAM,OAAO,SAAS,KAAK,IAAI;AAC/B;AAAA,UACE,uBAAuB,SAAS,OAAc,MAAM,KAAK,gBAAgB,KAAK,IAAI;AAAA,QACpF;AAAA,MACF,QAAQ;AACN,YAAI,CAAC,MAAO;AACZ,qBAAa,EAAE;AAAA,MACjB;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,YAAY,CAAC;AAEjC,QAAM,WAAW,eACZ;AAAA,IACC,UAAU,aACN,UAAU,mBAAmB,OAAO,YAAY,CAAC,CAAC,KAClD,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,CAAC;AAAA,IAClE,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D,IACA;AAEJ,QAAM,YAAY;AAAA,IAChB,UAAU,aAAa,cAAc;AAAA,IACrC,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D;AACA,QAAM,WAAW;AAAA,IACf,UAAU,aAAa,cAAc;AAAA,IACrC,SAAS,MAAM;AACb,YAAM,KAAK,IAAI,gBAAgB;AAC/B,UAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,UAAI,aAAc,IAAG,IAAI,UAAU,YAAY;AAC/C,UAAI,qBAAsB,IAAG,IAAI,kBAAkB,oBAAoB;AACvE,UAAI,uBAAwB,IAAG,IAAI,oBAAoB,sBAAsB;AAC7E,YAAM,SAAS,GAAG,SAAS;AAC3B,aAAO,SAAS,IAAI,MAAM,KAAK;AAAA,IACjC,GAAG;AAAA,EACL;AAEA,QAAM,aAAa,UAAU,sBAAsB,UAAU;AAE7D,SACE,gBAAAL,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD,KAACO,OAAA,EAAK,IAAI,aAAa,MAAM,gBAC1B,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,MACC,YACC,gBAAAN,MAAAF,WAAA,EACE;AAAA,wBAAAC,KAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,KAACO,OAAA,EAAK,IAAI,UAAW,uBAAa,cAAa;AAAA,SACjD;AAAA,MAEF,gBAAAP,KAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,KAAC,UAAM,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,OAC7D;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,KAAC,QAAG,WAAU,YAAY,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,MAC9E,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,aAAa,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA;AAAA,QAC/D;AAAA,QACC,gBACC,gBAAAA,KAACO,OAAA,EAAK,IAAI,WAAkB,WAAU,uBACnC,YAAE,uBAAuB,QAAW,cAAc,GACrD;AAAA,QAEF,gBAAAP;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,YACrC,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,KAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA;AAAA,IAC1C;AAAA,IAEC,aACC,gBAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,sBAAAD,KAAC,SAAI,WAAU,0BACZ,YAAE,mCAAmC,QAAW,kBAAkB,GACrE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAAG;AAAA,QACH,gBAAAD,KAAC,UAAK,uBAAS;AAAA,QAAO;AAAA,SACxB;AAAA,OACF,IACE,QACF,gBAAAA,KAAC,SAAI,WAAU,8CAA8C,iBAAM,IACjE;AAAA,IAEH,gBACC,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA,QAAE,wCAAwC,QAAW,6BAA6B;AAAA,MAAG;AAAA,MACrF,WACC,gBAAAD,KAACO,OAAA,EAAK,IAAI,UAAU,WAAU,uBAC3B,uBAAa,cAChB,IAEA,gBAAAP,KAAC,UAAK,WAAU,yBAAyB,uBAAa,cAAa;AAAA,OAEvE;AAAA,IAGD,oBACC,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,wBACb;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,KAAC,SAAI,WAAU,0BACZ,YAAE,2BAA2B,QAAW,gBAAgB,GAC3D;AAAA,UACA,gBAAAA,KAAC,SAAI,WAAU,sBAAsB,4BAAiB;AAAA,WACxD;AAAA,QACA,gBAAAA,KAACO,OAAA,EAAK,IAAI,UAAiB,WAAU,uBAClC,YAAE,iCAAiC,QAAW,sBAAsB,GACvE;AAAA,SACF;AAAA,MACC,eACC,gBAAAP,KAAC,SAAI,WAAU,0CAA0C,wBAAa,IACpE,iBACF,gBAAAC,MAAAF,WAAA,EACE;AAAA,wBAAAE,MAAC,SAAI,WAAU,kBACb;AAAA,0BAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,YAC1E,gBAAAA,KAAC,SAAI,WAAU,mBACb,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,QAAQ;AAAA,kBACN,eAAe;AAAA,kBACf,eAAe;AAAA,gBACjB;AAAA;AAAA,YACF,GACF;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,mBACZ,YAAE,mBAAmB,QAAW,UAAU,GAC7C;AAAA,YACA,gBAAAA,KAAC,SAAI,WAAU,6BACZ,0BAAgB,eAAe,cAAc,QAAG,GACnD;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,mBACZ,YAAE,0BAA0B,QAAW,iBAAiB,GAC3D;AAAA,YACA,gBAAAA,KAAC,SAAI,WAAU,2BACZ,0BAAgB,eAAe,oBAAoB,QAAG,GACzD;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,YAC5E,gBAAAA,KAAC,SAAI,WAAU,mBACZ,yBAAe,eAAe,UAAU,KAAK,UAChD;AAAA,aACF;AAAA,WACE,WAAW,eAAe,YAAY,KACtC,WAAW,eAAe,qBAAqB,KAC/C,WAAW,eAAe,YAAY,MACtC,gBAAAC,MAAC,SAAI,WAAU,qBACZ;AAAA,2BAAe,eACd,gBAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,OAAO,eAAe,YAAY;AAAA,gBACxC,WAAU;AAAA,gBACV,QAAO;AAAA,gBACP,KAAI;AAAA,gBAEH,YAAE,0BAA0B,QAAW,eAAe;AAAA;AAAA,YACzD,IACE;AAAA,YACH,eAAe,wBACd,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,OAAO,eAAe,qBAAqB;AAAA,gBACjD,WAAU;AAAA,gBACV,QAAO;AAAA,gBACP,KAAI;AAAA,gBAEH,YAAE,mBAAmB,QAAW,UAAU;AAAA;AAAA,YAC7C,IACE;AAAA,YACH,CAAC,eAAe,yBACjB,CAAC,eAAe,gBAChB,eAAe,eACb,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,OAAO,eAAe,YAAY;AAAA,gBACxC,WAAU;AAAA,gBACV,QAAO;AAAA,gBACP,KAAI;AAAA,gBAEH,YAAE,0BAA0B,QAAW,eAAe;AAAA;AAAA,YACzD,IACE;AAAA,aACN;AAAA,WAEJ;AAAA,QACC,eAAe,SAAS,KACvB,gBAAAC,MAAC,SAAI,WAAU,sBACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBACZ,YAAE,8BAA8B,QAAW,mBAAmB,GACjE;AAAA,UACA,gBAAAA,KAAC,SAAI,WAAU,qDACZ,yBAAe,IAAI,CAAC,OAAO,UAC1B,gBAAAC;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAEV;AAAA,gCAAAD,KAAC,YACE;AAAA,kBACC,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,EAAE,kBAAkB,QAAW,OAAO;AAAA,gBACxC,GACF;AAAA,gBACC,eAAe,MAAM,UAAU,IAC5B,WAAM,eAAe,MAAM,UAAU,CAAC,KACtC;AAAA;AAAA;AAAA,YAZC,gBAAgB,MAAM,IAAI,KAAK;AAAA,UAatC,CACD,GACH;AAAA,WACF;AAAA,SAEJ,IAEA,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,cAAa;AAAA,QAC5B,gBAAAA,KAAC,UACE,YAAE,mCAAmC,QAAW,4BAA4B,GAC/E;AAAA,SACF;AAAA,OAEJ;AAAA,IAGF,gBAAAA,KAAC,SAAI,WAAU,sBACb,0BAAAC,MAAC,WAAM,WAAU,YAAW,mBAAgB,SAC1C;AAAA,sBAAAD,KAAC,WACC,0BAAAC,MAAC,QACE;AAAA,SAAC,gBAAgB,gBAAAD,KAAC,QAAG,OAAM,OAAO,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,QACvE,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACzD,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,QAC7D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,SAC/D,GACF;AAAA,MACA,gBAAAA,KAAC,WACE,gBAAM,WAAW,IAChB,gBAAAA,KAAC,QACC,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,eAAe,IAAI;AAAA,UAC5B,WAAW,OAAO,0BAA0B;AAAA,UAE3C,iBACC,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,cAAa;AAAA,YAC5B,gBAAAA,KAAC,UACE,YAAE,6BAA6B,QAAW,qBAAqB,GAClE;AAAA,aACF,IAEA,EAAE,wBAAwB,QAAW,oBAAoB;AAAA;AAAA,MAE7D,GACF,IAEA,MAAM,IAAI,CAAC,MAAM,UACf,gBAAAC,MAAC,QACE;AAAA,SAAC,gBACA,gBAAAD,KAAC,QAAG,cAAY,EAAE,eAAe,QAAW,MAAM,GAC/C,0BAAgB,KAAK,WAAW,KAAK,SAAS,QAAG,GACpD;AAAA,QAEF,gBAAAC,MAAC,QAAG,cAAY,EAAE,kBAAkB,QAAW,SAAS,GACtD;AAAA,0BAAAD,KAAC,SAAI,WAAU,gBACZ;AAAA,YACC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL;AAAA,UACF,GACF;AAAA,UACC,WAAW,KAAK,kBAAkB,KACjC,gBAAAC,MAAC,SAAI,WAAU,eACZ;AAAA,cAAE,kBAAkB,QAAW,SAAS;AAAA,YAAE;AAAA,YAAE;AAAA,YAC5C,WAAW,KAAK,kBAAkB;AAAA,aACrC;AAAA,WAEJ;AAAA,QACA,gBAAAD,KAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAA,KAAC,eAAY,QAAQ,gBAAgB,KAAK,QAAQ,KAAK,gBAAgB,GAAG,GAC5E;AAAA,QACA,gBAAAA,KAAC,QAAG,cAAY,EAAE,mBAAmB,QAAW,UAAU,GACvD,0BAAgB,KAAK,cAAc,QAAG,GACzC;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAY,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAEnD,yBAAe,KAAK,UAAU,KAAK;AAAA;AAAA,QACtC;AAAA,QACA,gBAAAA,KAAC,QAAG,cAAY,EAAE,mBAAmB,QAAW,UAAU,GACxD,0BAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,IACE;AAAA,gBACE,UAAU,aAAa,cAAc;AAAA,gBACrC,SAAS,MAAM;AACb,wBAAM,KAAK,IAAI,gBAAgB;AAC/B,sBAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,sBAAI,gBAAgB,KAAK;AACvB,uBAAG,IAAI,UAAU,gBAAgB,OAAO,KAAK,OAAO,CAAC;AACvD,sBAAI,wBAAwB,KAAK,iBAAiB;AAChD,uBAAG;AAAA,sBACD;AAAA,sBACA,wBAAwB,OAAO,KAAK,eAAe;AAAA,oBACrD;AAAA,kBACF;AACA,sBAAI,KAAK,GAAI,IAAG,IAAI,aAAa,OAAO,KAAK,EAAE,CAAC;AAChD,yBAAO,IAAI,GAAG,SAAS,CAAC;AAAA,gBAC1B,GAAG;AAAA,cACL;AAAA,cAEF,WAAU;AAAA,cAET,YAAE,kBAAkB,QAAW,SAAS;AAAA;AAAA,UAC3C;AAAA,UACC,KAAK,yBAAyB,KAAK,eAClC,gBAAAP;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO,KAAK,yBAAyB,KAAK,YAAY;AAAA,cAC5D,WAAU;AAAA,cACV,QAAO;AAAA,cACP,KAAI;AAAA,cAEH,YAAE,eAAe,QAAW,MAAM;AAAA;AAAA,UACrC,IACE;AAAA,WACN,GACF;AAAA,WAxEO,gBAAgB,KAAK,IAAI,KAAK,CAyEvC,CACD,GAEL;AAAA,OACF,GACF;AAAA,IAEC,cAAc,WAAW,aAAa,KACrC,gBAAAC,MAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAU,aAAa;AAAA,UACvB,SAAS,MAAM,KAAK,QAAQ,YAAY,CAAC;AAAA,UAExC,YAAE,mBAAmB,QAAW,UAAU;AAAA;AAAA,MAC7C;AAAA,MACA,gBAAAA,KAAC,UAAK,WAAU,sBACb;AAAA,QACC;AAAA,QACA,EAAE,MAAM,WAAW,MAAM,YAAY,WAAW,WAAW;AAAA,QAC3D,QAAQ,WAAW,IAAI,OAAO,WAAW,UAAU;AAAA,MACrD,GACF;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAU,aAAa,OAAO,WAAW,cAAc,CAAC;AAAA,UACxD,SAAS,MAAM,KAAK,QAAQ,YAAY,CAAC;AAAA,UAExC,YAAE,eAAe,QAAW,MAAM;AAAA;AAAA,MACrC;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AE3iBA,SAAS,aAAAQ,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,OAAM,eAAAC,oBAAmB;AAuB5B,SA8NI,YAAAC,WA9NJ,OAAAC,MA8NI,QAAAC,aA9NJ;AAfN,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAASC,YAA4B;AACnC,QAAM,MAAMD,aAAY;AACxB,SAAOE,SAAQ,MAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC;AACpE;AAEA,SAASC,aAAY,EAAE,QAAQ,OAAO,GAAwC;AAC5E,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,MAAI,QAAQ;AACV,WACE,gBAAAN,KAAC,UAAK,WAAU,6BAA6B,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,EAEzF;AACA,QAAM,aAAa,OAAO,UAAU,EAAE,EACnC,KAAK,EACL,YAAY;AACf,QAAM,YAAY,eAAe,cAAc,qBAAqB;AACpE,SACE,gBAAAA,KAAC,UAAK,WAAW,YAAY,SAAS,IACnC,wBAAc,EAAE,eAAe,QAAW,MAAM,GACnD;AAEJ;AAIO,SAAS,oBAAoB;AAClC,QAAM,EAAE,QAAQ,KAAK,IAAI,eAAe;AACxC,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,QAAQE,eAAc;AAC5B,QAAM,QAAQE,UAAS;AAEvB,QAAM,eAAe,MAAM,IAAI,QAAQ,KAAK;AAC5C,QAAM,uBAAuB,MAAM,IAAI,gBAAgB,KAAK;AAC5D,QAAM,wBAAwB,MAAM,IAAI,gBAAgB,KAAK;AAC7D,QAAM,CAAC,OAAO,QAAQ,IAAIG,UAA+B,CAAC,CAAC;AAC3D,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAoC,IAAI;AAC9F,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAwB,IAAI;AACpE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,CAAC;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,EAAE;AAE7C,QAAM,aAAa,OAAO,WAAW,eAAe,OAAO,SAAS,SAAS,WAAW,QAAQ;AAEhG,iBAAe,UAAU;AACvB,QAAI,CAAC,OAAO,qBAAqB;AAC/B;AAAA,QACE;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,eAAS,CAAC,CAAC;AACX,qBAAe,CAAC;AAChB,cAAQ,KAAK;AACb;AAAA,IACF;AACA,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,oBAAoB;AAAA,QAC3C,gBAAgB,yBAAyB;AAAA,QACzC,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA,QACxC,OAAO;AAAA,MACT,CAAC;AACD,eAAS,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,qBAAe,OAAO,KAAK,gBAAgB,CAAC,CAAC;AAAA,IAC/C,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,iBAAe,SAAS,gBAAwB;AAC9C,QAAI,CAAC,OAAO,uBAAwB;AACpC,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,uBAAuB,cAAc;AAC9D;AAAA,QAAS,CAAC,YACR,QAAQ;AAAA,UAAI,CAAC,SACX,WAAW,KAAK,EAAE,MAAM,iBACpB;AAAA,YACE,GAAG;AAAA,YACH,QAAQ;AAAA,YACR,UAAS,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,IACA;AAAA,QACN;AAAA,MACF;AACA;AAAA,QAAuB,CAAC,YACtB,WAAW,WAAW,QAAQ,EAAE,MAAM,iBAClC;AAAA,UACE,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,UAAS,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,IACA;AAAA,MACN;AACA,qBAAe,OAAO,KAAK,gBAAgB,CAAC,CAAC;AAAA,IAC/C,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D;AAAA,EACF;AAEA,iBAAe,cAAc;AAC3B,QAAI,CAAC,OAAO,2BAA4B;AACxC,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,2BAA2B;AACpD;AAAA,QAAS,CAAC,YACR,QAAQ,IAAI,CAAC,UAAU;AAAA,UACrB,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,SAAS,WAAW,KAAK,OAAO,MAAK,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC9D,EAAE;AAAA,MACJ;AACA;AAAA,QAAuB,CAAC,YACtB,UACI;AAAA,UACE,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,SAAS,WAAW,QAAQ,OAAO,MAAK,oBAAI,KAAK,GAAE,YAAY;AAAA,QACjE,IACA;AAAA,MACN;AACA,qBAAe,OAAO,KAAK,gBAAgB,CAAC,CAAC;AAAA,IAC/C,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,QAAQ;AACb,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,gBAAgB,KAAK;AAAA,IACzC,CAAC;AAAA,EAEH,GAAG,CAAC,uBAAuB,sBAAsB,YAAY,CAAC;AAE9D,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,uBAAuB;AAC1B,6BAAuB,IAAI;AAC3B,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,QAAI,YAAY;AAChB,oBAAgB,IAAI;AACpB,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,sBAAsB;AAAA,UAC7C,gBAAgB;AAAA,UAChB,QAAQ,gBAAgB;AAAA,UACxB,gBAAgB,wBAAwB;AAAA,UACxC,OAAO;AAAA,QACT,CAAC;AACD,YAAI,UAAW;AACf,cAAM,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,IAAI;AAClE,+BAAuB,IAAI;AAAA,MAC7B,SAAS,GAAG;AACV,YAAI,UAAW;AACf,+BAAuB,IAAI;AAC3B,wBAAgB,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MACnE;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,uBAAuB,sBAAsB,YAAY,CAAC;AAEtE,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,mBAAa,EAAE;AACf;AAAA,IACF;AACA,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,eAAe,OAAO,YAAY,CAAC;AAC5D,YAAI,CAAC,MAAO;AACZ,cAAM,WAAW,SAAS,KAAK,QAAQ;AACvC,cAAM,OAAO,SAAS,KAAK,IAAI;AAC/B;AAAA,UACE,uBAAuB,SAAS,OAAc,MAAM,KAAK,gBAAgB,KAAK,IAAI;AAAA,QACpF;AAAA,MACF,QAAQ;AACN,YAAI,CAAC,MAAO;AACZ,qBAAa,EAAE;AAAA,MACjB;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,YAAY,CAAC;AAEjC,QAAM,WAAW,eACZ;AAAA,IACC,UAAU,aACN,UAAU,mBAAmB,OAAO,YAAY,CAAC,CAAC,KAClD,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,CAAC;AAAA,IAClE,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D,IACA;AAEJ,QAAM,YAAY;AAAA,IAChB,UAAU,aAAa,mBAAmB;AAAA,IAC1C,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D;AACA,QAAM,WAAW;AAAA,IACf,UAAU,aAAa,mBAAmB;AAAA,IAC1C,SAAS,MAAM;AACb,YAAM,KAAK,IAAI,gBAAgB;AAC/B,UAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,UAAI,aAAc,IAAG,IAAI,UAAU,YAAY;AAC/C,UAAI,qBAAsB,IAAG,IAAI,kBAAkB,oBAAoB;AACvE,YAAM,SAAS,GAAG,SAAS;AAC3B,aAAO,SAAS,IAAI,MAAM,KAAK;AAAA,IACjC,GAAG;AAAA,EACL;AAEA,QAAM,aAAa,UAAU,sBAAsB,UAAU;AAE7D,SACE,gBAAAP,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD,KAACS,OAAA,EAAK,IAAI,aAAa,MAAM,gBAC1B,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,MACC,YACC,gBAAAR,MAAAF,WAAA,EACE;AAAA,wBAAAC,KAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,KAACS,OAAA,EAAK,IAAI,UAAW,uBAAa,cAAa;AAAA,SACjD;AAAA,MAEF,gBAAAT,KAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,KAAC,UAAM,YAAE,gCAAgC,QAAW,eAAe,GAAE;AAAA,OACvE;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAA,MAAC,SACC;AAAA,wBAAAD,KAAC,QAAG,WAAU,YACX,YAAE,gCAAgC,QAAW,eAAe,GAC/D;AAAA,QACA,gBAAAA,KAAC,SAAI,WAAU,yCACZ;AAAA,UACC;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,QAAQ,gBAAgB,IAAI,KAAK;AAAA,YACjC,SAAS,gBAAgB,IAAI,KAAK;AAAA,UACpC;AAAA,UACA,GAAG,WAAW,eAAe,gBAAgB,IAAI,KAAK,GAAG;AAAA,QAC3D,GACF;AAAA,SACF;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,aAAa,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA;AAAA,QAC/D;AAAA,QACC,OAAO,8BAA8B,cAAc,KAClD,gBAAAA,KAAC,YAAO,WAAU,yBAAwB,SAAS,MAAM,KAAK,YAAY,GACvE,YAAE,0BAA0B,QAAW,eAAe,GACzD;AAAA,QAED,gBACC,gBAAAA,KAACS,OAAA,EAAK,IAAI,WAAkB,WAAU,uBACnC,YAAE,uBAAuB,QAAW,cAAc,GACrD;AAAA,QAEF,gBAAAT;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,YAC5B,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,KAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA;AAAA,IAC1C;AAAA,IAEC,aACC,gBAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,sBAAAD,KAAC,SAAI,WAAU,0BACZ,YAAE,mCAAmC,QAAW,kBAAkB,GACrE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAAG;AAAA,QACH,gBAAAD,KAAC,UAAK,uBAAS;AAAA,QAAO;AAAA,SACxB;AAAA,OACF,IACE,QACF,gBAAAA,KAAC,SAAI,WAAU,8CAA8C,iBAAM,IACjE;AAAA,IAEH,gBACC,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAAG;AAAA,MACF,WACC,gBAAAD,KAACS,OAAA,EAAK,IAAI,UAAU,WAAU,uBAC3B,uBAAa,cAChB,IAEA,gBAAAT,KAAC,UAAK,WAAU,yBAAyB,uBAAa,cAAa;AAAA,OAEvE;AAAA,IAGD,yBACC,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,wBACb;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,KAAC,SAAI,WAAU,0BACZ,YAAE,gCAAgC,QAAW,qBAAqB,GACrE;AAAA,UACA,gBAAAA,KAAC,SAAI,WAAU,sBAAsB,iCAAsB;AAAA,WAC7D;AAAA,QACA,gBAAAA,KAACS,OAAA,EAAK,IAAI,UAAiB,WAAU,uBAClC,YAAE,sCAAsC,QAAW,2BAA2B,GACjF;AAAA,SACF;AAAA,MACC,eACC,gBAAAT,KAAC,SAAI,WAAU,0CAA0C,wBAAa,IACpE,sBACF,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,wBAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,UAC1E,gBAAAA,KAAC,SAAI,WAAU,mBACb,0BAAAA;AAAA,YAACM;AAAA,YAAA;AAAA,cACC,QAAQ,WAAW,oBAAoB,MAAM;AAAA,cAC7C,QAAQ,QAAQ,oBAAoB,MAAM;AAAA;AAAA,UAC5C,GACF;AAAA,WACF;AAAA,QACA,gBAAAL,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,UAC5E,gBAAAA,KAAC,SAAI,WAAU,6BACZ,0BAAgB,oBAAoB,SAAS,QAAG,GACnD;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,UAC5E,gBAAAA,KAAC,SAAI,WAAU,6BACZ,0BAAgB,oBAAoB,SAAS,QAAG,GACnD;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,UAC9E,gBAAAA,KAAC,SAAI,WAAU,mBACZ,yBAAe,oBAAoB,UAAU,KAAK,UACrD;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,gCACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,UAC5E,gBAAAA,KAAC,SAAI,WAAU,mBACZ,0BAAgB,oBAAoB,SAAS,QAAG,GACnD;AAAA,WACF;AAAA,SACE,WAAW,oBAAoB,UAAU,KACzC,WAAW,oBAAoB,kBAAkB,KACjD,WAAW,oBAAoB,MAAM,MACrC,gBAAAC,MAAC,SAAI,WAAU,sBACZ;AAAA,qBAAW,oBAAoB,UAAU,IACxC,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,cAAE,kBAAkB,QAAW,SAAS;AAAA,YAAE;AAAA,YAAE;AAAA,YAC5C,WAAW,oBAAoB,UAAU;AAAA,aAC5C,IACE;AAAA,UACH,WAAW,oBAAoB,kBAAkB,IAChD,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,cAAE,kBAAkB,QAAW,SAAS;AAAA,YAAE;AAAA,YAAE;AAAA,YAC5C,WAAW,oBAAoB,kBAAkB;AAAA,aACpD,IACE;AAAA,UACH,WAAW,oBAAoB,MAAM,IACpC,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,cAAE,iBAAiB,QAAW,QAAQ;AAAA,YAAE;AAAA,YAAE;AAAA,YAC1C,WAAW,oBAAoB,MAAM;AAAA,aACxC,IACE;AAAA,WACN;AAAA,QAED,QAAQ,oBAAoB,MAAM,KAAK,OAAO,yBAC7C,gBAAAD,KAAC,SAAI,WAAU,qBACb,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM,KAAK,SAAS,WAAW,oBAAoB,EAAE,CAAC;AAAA,YAE9D,YAAE,sBAAsB,QAAW,WAAW;AAAA;AAAA,QACjD,GACF,IACE;AAAA,SACN,IAEA,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,cAAa;AAAA,QAC5B,gBAAAA,KAAC,UACE;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF,GACF;AAAA,SACF;AAAA,OAEJ;AAAA,IAGF,gBAAAA,KAAC,SAAI,WAAU,sBACb,0BAAAC,MAAC,WAAM,WAAU,YAAW,mBAAgB,SAC1C;AAAA,sBAAAD,KAAC,WACC,0BAAAC,MAAC,QACC;AAAA,wBAAAD,KAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACzD,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,QAC7D,gBAAAA,KAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,SAC3D,GACF;AAAA,MACA,gBAAAA,KAAC,WACE,gBAAM,WAAW,IAChB,gBAAAA,KAAC,QACC,0BAAAA,KAAC,QAAG,SAAS,GAAG,WAAW,OAAO,0BAA0B,uBACzD,iBACC,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,cAAa;AAAA,QAC5B,gBAAAA,KAAC,UACE,YAAE,kCAAkC,QAAW,0BAA0B,GAC5E;AAAA,SACF,IAEA,EAAE,6BAA6B,QAAW,iCAAiC,GAE/E,GACF,IAEA,MAAM,IAAI,CAAC,MAAM,UACf,gBAAAC,MAAC,QACC;AAAA,wBAAAD,KAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAA,KAACM,cAAA,EAAY,QAAQ,WAAW,KAAK,MAAM,GAAG,QAAQ,QAAQ,KAAK,MAAM,GAAG,GAC9E;AAAA,QACA,gBAAAN,KAAC,QAAG,cAAY,EAAE,kBAAkB,QAAW,SAAS,GACrD,0BAAgB,KAAK,SAAS,QAAG,GACpC;AAAA,QACA,gBAAAA,KAAC,QAAG,cAAY,EAAE,kBAAkB,QAAW,SAAS,GACrD,0BAAgB,KAAK,SAAS,QAAG,GACpC;AAAA,QACA,gBAAAA,KAAC,QAAG,cAAY,EAAE,kBAAkB,QAAW,SAAS,GACrD,0BAAgB,KAAK,SAAS,QAAG,GACpC;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAY,EAAE,mBAAmB,QAAW,UAAU;AAAA,YAErD,yBAAe,KAAK,UAAU,KAAK;AAAA;AAAA,QACtC;AAAA,QACA,gBAAAA,KAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,IACE;AAAA,gBACE,UAAU,aAAa,mBAAmB;AAAA,gBAC1C,SAAS,MAAM;AACb,wBAAM,KAAK,IAAI,gBAAgB;AAC/B,sBAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,sBAAI,gBAAgB,KAAK;AACvB,uBAAG,IAAI,UAAU,gBAAgB,OAAO,KAAK,OAAO,CAAC;AACvD,sBAAI,wBAAwB,KAAK,iBAAiB;AAChD,uBAAG;AAAA,sBACD;AAAA,sBACA,wBAAwB,OAAO,KAAK,eAAe;AAAA,oBACrD;AAAA,kBACF;AACA,sBAAI,KAAK,GAAI,IAAG,IAAI,kBAAkB,OAAO,KAAK,EAAE,CAAC;AACrD,yBAAO,IAAI,GAAG,SAAS,CAAC;AAAA,gBAC1B,GAAG;AAAA,cACL;AAAA,cAEF,WAAU;AAAA,cAET,YAAE,kBAAkB,QAAW,SAAS;AAAA;AAAA,UAC3C;AAAA,UACC,QAAQ,KAAK,MAAM,KAAK,OAAO,yBAC9B,gBAAAT;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MAAM,KAAK,SAAS,WAAW,KAAK,EAAE,CAAC;AAAA,cAE/C,YAAE,sBAAsB,QAAW,WAAW;AAAA;AAAA,UACjD,IACE;AAAA,WACN,GACF;AAAA,WAtDO,gBAAgB,KAAK,IAAI,KAAK,CAuDvC,CACD,GAEL;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;AChiBA,SAAS,aAAAU,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,OAAM,eAAAC,oBAAmB;AA+B9B,SAsJM,YAAAC,WAtJN,OAAAC,OAsJM,QAAAC,aAtJN;AAvBJ,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAASC,YAA4B;AACnC,QAAM,MAAMD,aAAY;AACxB,SAAOE,SAAQ,MAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC;AACpE;AAEA,SAASC,aAAY,EAAE,OAAO,GAAuB;AACnD,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM,aAAa,OAAO,UAAU,EAAE,EACnC,KAAK,EACL,YAAY;AACf,QAAM,YACJ,eAAe,cACX,qBACA,eAAe,WACb,oBACA;AACR,SACE,gBAAAN,MAAC,UAAK,WAAW,YAAY,SAAS,IACnC,wBAAc,EAAE,eAAe,QAAW,MAAM,GACnD;AAEJ;AAIO,SAAS,eAAe;AAC7B,QAAM,EAAE,QAAQ,KAAK,IAAI,eAAe;AACxC,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,QAAQE,eAAc;AAC5B,QAAM,QAAQE,UAAS;AAEvB,QAAM,eAAe,MAAM,IAAI,QAAQ,KAAK;AAC5C,QAAM,uBAAuB,MAAM,IAAI,gBAAgB,KAAK;AAC5D,QAAM,0BAA0B,MAAM,IAAI,kBAAkB,KAAK;AACjE,QAAM,CAAC,OAAO,QAAQ,IAAIG,UAAiC,CAAC,CAAC;AAC7D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAsC,IAAI;AACtF,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAwB,IAAI;AACpE,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,EAAE;AAE7C,QAAM,aAAa,OAAO,WAAW,eAAe,OAAO,SAAS,SAAS,WAAW,QAAQ;AAEhG,iBAAe,UAAU;AACvB,QAAI,CAAC,OAAO,uBAAuB;AACjC;AAAA,QACE;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,eAAS,CAAC,CAAC;AACX,cAAQ,KAAK;AACb;AAAA,IACF;AACA,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,sBAAsB;AAAA,QAC7C,kBAAkB,2BAA2B;AAAA,QAC7C,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA,QACxC,OAAO;AAAA,MACT,CAAC;AACD,eAAS,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,IACnF,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,QAAQ;AACb,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,gBAAgB,KAAK;AAAA,IACzC,CAAC;AAAA,EAEH,GAAG,CAAC,yBAAyB,sBAAsB,YAAY,CAAC;AAEhE,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,2BAA2B,CAAC,OAAO,qBAAqB;AAC3D,wBAAkB,IAAI;AACtB,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,QAAI,YAAY;AAChB,oBAAgB,IAAI;AACpB,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,oBAAqB,uBAAuB;AACrE,YAAI,UAAW;AACf,cAAM,UAAU,SAAS,SAAS,GAAG,EAAE,OAAO;AAC9C,0BAAkB,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,UAAU,IAAI;AAAA,MACpE,SAAS,GAAG;AACV,YAAI,UAAW;AACf,0BAAkB,IAAI;AACtB,wBAAgB,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MACnE;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,uBAAuB,CAAC;AAEpC,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,mBAAa,EAAE;AACf;AAAA,IACF;AACA,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,eAAe,OAAO,YAAY,CAAC;AAC5D,YAAI,CAAC,MAAO;AACZ,cAAM,WAAW,SAAS,KAAK,QAAQ;AACvC,cAAM,OAAO,SAAS,KAAK,IAAI;AAC/B;AAAA,UACE,uBAAuB,SAAS,OAAc,MAAM,KAAK,gBAAgB,KAAK,IAAI;AAAA,QACpF;AAAA,MACF,QAAQ;AACN,YAAI,CAAC,MAAO;AACZ,qBAAa,EAAE;AAAA,MACjB;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,YAAY,CAAC;AAEjC,QAAM,WAAW,eACZ;AAAA,IACC,UAAU,aACN,UAAU,mBAAmB,OAAO,YAAY,CAAC,CAAC,KAClD,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,CAAC;AAAA,IAClE,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D,IACA;AAEJ,QAAM,YAAY;AAAA,IAChB,UAAU,aAAa,cAAc;AAAA,IACrC,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D;AACA,QAAM,WAAW;AAAA,IACf,UAAU,aAAa,cAAc;AAAA,IACrC,SAAS,MAAM;AACb,YAAM,KAAK,IAAI,gBAAgB;AAC/B,UAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,UAAI,aAAc,IAAG,IAAI,UAAU,YAAY;AAC/C,UAAI,qBAAsB,IAAG,IAAI,kBAAkB,oBAAoB;AACvE,YAAM,SAAS,GAAG,SAAS;AAC3B,aAAO,SAAS,IAAI,MAAM,KAAK;AAAA,IACjC,GAAG;AAAA,EACL;AAEA,QAAM,aAAa,UAAU,sBAAsB,UAAU;AAE7D,SACE,gBAAAP,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD,MAACS,OAAA,EAAK,IAAI,aAAa,MAAM,gBAC1B,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,MACC,YACC,gBAAAR,MAAAF,WAAA,EACE;AAAA,wBAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,MAACS,OAAA,EAAK,IAAI,UAAW,uBAAa,cAAa;AAAA,SACjD;AAAA,MAEF,gBAAAT,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAAC,UAAM,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,OAC7D;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,MAAC,QAAG,WAAU,YAAY,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,MAC9E,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,aAAa,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA;AAAA,QAC/D;AAAA,QACC,gBACC,gBAAAA,MAACS,OAAA,EAAK,IAAI,WAAkB,WAAU,uBACnC,YAAE,uBAAuB,QAAW,cAAc,GACrD;AAAA,QAEF,gBAAAT;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,YAC5B,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,wBAAwB;AAAA;AAAA,IAC1C;AAAA,IAEC,aACC,gBAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,0BACZ,YAAE,mCAAmC,QAAW,kBAAkB,GACrE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAAG;AAAA,QACH,gBAAAD,MAAC,UAAK,uBAAS;AAAA,QAAO;AAAA,SACxB;AAAA,OACF,IACE,QACF,gBAAAA,MAAC,SAAI,WAAU,8CAA8C,iBAAM,IACjE;AAAA,IAEH,gBACC,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA,QAAE,wCAAwC,QAAW,8BAA8B;AAAA,MAAG;AAAA,MACtF,WACC,gBAAAD,MAACS,OAAA,EAAK,IAAI,UAAU,WAAU,uBAC3B,uBAAa,cAChB,IAEA,gBAAAT,MAAC,UAAK,WAAU,yBAAyB,uBAAa,cAAa;AAAA,OAEvE;AAAA,IAGD,2BACC,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,wBACb;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,MAAC,SAAI,WAAU,0BACZ,YAAE,2BAA2B,QAAW,gBAAgB,GAC3D;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,sBAAsB,mCAAwB;AAAA,WAC/D;AAAA,QACA,gBAAAA,MAACS,OAAA,EAAK,IAAI,UAAiB,WAAU,uBAClC,YAAE,iCAAiC,QAAW,sBAAsB,GACvE;AAAA,SACF;AAAA,MACC,eACC,gBAAAT,MAAC,SAAI,WAAU,0CAA0C,wBAAa,IACpE,iBACF,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,wBAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,UAC1E,gBAAAA,MAAC,SAAI,WAAU,mBACb,0BAAAA,MAACM,cAAA,EAAY,QAAQ,WAAW,eAAe,MAAM,GAAG,GAC1D;AAAA,WACF;AAAA,QACA,gBAAAL,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,UAC1E,gBAAAC,MAAC,SAAI,WAAU,6BACZ;AAAA,4BAAgB,eAAe,QAAQ,QAAG;AAAA,YAAG;AAAA,YAC7C,WAAW,eAAe,QAAQ;AAAA,aACrC;AAAA,WACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,UACtE,gBAAAA,MAAC,SAAI,WAAU,6BACZ,0BAAgB,eAAe,WAAW,QAAG,GAChD;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,mBAAmB,QAAW,UAAU,GAAE;AAAA,UAC9E,gBAAAA,MAAC,SAAI,WAAU,6BACZ,0BAAgB,eAAe,cAAc,eAAe,QAAQ,QAAG,GAC1E;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,UAC5E,gBAAAA,MAAC,SAAI,WAAU,2BACZ,0BAAgB,eAAe,YAAY,QAAG,GACjD;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,UAC5E,gBAAAA,MAAC,SAAI,WAAU,mBACZ,yBAAe,eAAe,UAAU,KAAK,UAChD;AAAA,WACF;AAAA,QACC,MAAM,QAAQ,eAAe,QAAQ,KAAK,eAAe,SAAS,SAAS,KAC1E,gBAAAC,MAAC,SAAI,WAAU,gCACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mBACZ,YAAE,2BAA2B,QAAW,UAAU,GACrD;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,sBACZ,yBAAe,SAAS,IAAI,CAAC,SAAS,UAAU;AAC/C,kBAAM,gBAAgB,SAAS,OAAO;AACtC,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAU;AAAA,gBAET;AAAA,kBACC,cAAc;AAAA,kBACd,cAAc;AAAA,kBACd,EAAE,kBAAkB,QAAW,SAAS;AAAA,gBAC1C;AAAA;AAAA,cAPK,gBAAgB,cAAc,IAAI,KAAK;AAAA,YAQ9C;AAAA,UAEJ,CAAC,GACH;AAAA,WACF;AAAA,SAEJ,IAEA,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,cAAa;AAAA,QAC5B,gBAAAA,MAAC,UACE,YAAE,mCAAmC,QAAW,4BAA4B,GAC/E;AAAA,SACF;AAAA,OAEJ;AAAA,IAGF,gBAAAA,MAAC,SAAI,WAAU,sBACb,0BAAAC,MAAC,WAAM,WAAU,YAAW,mBAAgB,SAC1C;AAAA,sBAAAD,MAAC,WACC,0BAAAC,MAAC,QACE;AAAA,SAAC,gBAAgB,gBAAAD,MAAC,QAAG,OAAM,OAAO,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,QACvE,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,QACrD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACzD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACzD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,SAC3D,GACF;AAAA,MACA,gBAAAA,MAAC,WACE,gBAAM,WAAW,IAChB,gBAAAA,MAAC,QACC,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,eAAe,IAAI;AAAA,UAC5B,WAAW,OAAO,0BAA0B;AAAA,UAE3C,iBACC,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,cAAa;AAAA,YAC5B,gBAAAA,MAAC,UACE,YAAE,6BAA6B,QAAW,qBAAqB,GAClE;AAAA,aACF,IAEA,EAAE,wBAAwB,QAAW,4BAA4B;AAAA;AAAA,MAErE,GACF,IAEA,MAAM,IAAI,CAAC,MAAM,UACf,gBAAAC,MAAC,QACE;AAAA,SAAC,gBACA,gBAAAD,MAAC,QAAG,cAAY,EAAE,eAAe,QAAW,MAAM,GAC/C,0BAAgB,KAAK,WAAW,KAAK,SAAS,QAAG,GACpD;AAAA,QAEF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAY,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAEnD,0BAAgB,KAAK,oBAAoB,QAAG;AAAA;AAAA,QAC/C;AAAA,QACA,gBAAAA,MAAC,QAAG,cAAY,EAAE,eAAe,QAAW,MAAM,GAC/C,0BAAgB,KAAK,WAAW,QAAG,GACtC;AAAA,QACA,gBAAAC,MAAC,QAAG,WAAU,gBAAe,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GAC5E;AAAA,qBAAW,KAAK,MAAM;AAAA,UAAE;AAAA,UAAE,WAAW,KAAK,QAAQ;AAAA,WACrD;AAAA,QACA,gBAAAD,MAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAA,MAACM,cAAA,EAAY,QAAQ,WAAW,KAAK,MAAM,GAAG,GAChD;AAAA,QACA,gBAAAN;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAY,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAEnD,yBAAe,KAAK,UAAU,KAAK;AAAA;AAAA,QACtC;AAAA,QACA,gBAAAA,MAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,IACE;AAAA,gBACE,UAAU,aAAa,cAAc;AAAA,gBACrC,SAAS,MAAM;AACb,wBAAM,KAAK,IAAI,gBAAgB;AAC/B,sBAAI,MAAO,IAAG,IAAI,SAAS,KAAK;AAChC,sBAAI,gBAAgB,KAAK;AACvB,uBAAG,IAAI,UAAU,gBAAgB,OAAO,KAAK,OAAO,CAAC;AACvD,sBAAI,wBAAwB,KAAK,iBAAiB;AAChD,uBAAG;AAAA,sBACD;AAAA,sBACA,wBAAwB,OAAO,KAAK,eAAe;AAAA,oBACrD;AAAA,kBACF;AACA,sBAAI,KAAK;AACP,uBAAG,IAAI,oBAAoB,OAAO,KAAK,kBAAkB,CAAC;AAC5D,yBAAO,IAAI,GAAG,SAAS,CAAC;AAAA,gBAC1B,GAAG;AAAA,cACL;AAAA,cAEF,WAAU;AAAA,cAET,YAAE,kBAAkB,QAAW,SAAS;AAAA;AAAA,UAC3C;AAAA,UACC,KAAK,aACJ,gBAAAT;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO,KAAK,UAAU;AAAA,cAC5B,WAAU;AAAA,cACV,QAAO;AAAA,cACP,KAAI;AAAA,cAEH,YAAE,2BAA2B,QAAW,QAAQ;AAAA;AAAA,UACnD,IACE;AAAA,WACN,GACF;AAAA,WAjEO,gBAAgB,KAAK,oBAAoB,KAAK,IAAI,KAAK,CAkEhE,CACD,GAEL;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;AC7cA,SAAS,aAAAU,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,OAAM,eAAAC,cAAa,eAAAC,cAAa,iBAAiB;;;AC2BtD,SACE,OAAAC,OADF,QAAAC,aAAA;AAxBJ,SAASC,UAAS,OAAyC;AACzD,SAAO,SAAS,OAAO,UAAU,WAAY,QAAoC,CAAC;AACpF;AAEA,SAAS,YAAY,OAAgB;AACnC,SAAO,SAAS,QAAQ,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK;AAC/E;AAEA,SAAS,eACP,OAC8D;AAC9D,QAAM,SAASA,UAAS,KAAK;AAC7B,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,WAAO;AAAA,MACL,UAAU,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AAAA,MAClE,KAAK,OAAO;AAAA,MACZ,UAAU,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AAAA,IACpE;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,MAAM,EAAE,OAAO,SAAS,GAAiD;AAChF,SACE,gBAAAD,MAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAAG,SAAS,SAAS,cAAc,oBAAoB,GACzF;AAAA,oBAAAD,MAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,UAAU,GAAI,iBAAM;AAAA,IACvD,gBAAAA,MAAC,SAAK,UAAS;AAAA,KACjB;AAEJ;AAEA,SAAS,YAAY,QAAgC,OAAiC;AACpF,QAAM,WAAW,eAAe,KAAK;AACrC,MAAI,UAAU;AACZ,WACE,gBAAAA,MAAC,OAAE,MAAM,SAAS,KAAK,QAAO,UAAS,KAAI,cACxC,mBAAS,YAAY,SAAS,KACjC;AAAA,EAEJ;AAEA,MAAI,YAAY,KAAK,GAAG;AACtB,WACE,gBAAAA,MAAC,UAAK,OAAO,EAAE,YAAY,iDAAiD,GACzE,iBAAO,KAAK,GACf;AAAA,EAEJ;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,aAAaE,UAAS,QAAQ,KAAK;AACzC,WACE,gBAAAF,MAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACnC,gBAAM,IAAI,CAAC,GAAG,QACb,gBAAAA,MAAC,SAAc,OAAO,EAAE,SAAS,IAAI,QAAQ,qBAAqB,cAAc,GAAG,GAChF,sBAAY,YAAY,CAAC,KADlB,GAEV,CACD,GACH;AAAA,EAEJ;AAGA,QAAM,QAAQE,UAAS,QAAQ,UAAU;AACzC,QAAM,cAAcA,UAAS,KAAK;AAClC,QAAM,OAAO,OAAO,KAAK,KAAK,EAAE,SAAS,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,WAAW;AACrF,SACE,gBAAAF,MAAC,SACE,eAAK,IAAI,CAAC,MACT,gBAAAA,MAAC,SAAc,OAAOE,UAAS,MAAM,CAAC,CAAC,EAAE,QAAQ,OAAOA,UAAS,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,GACjF,sBAAYA,UAAS,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,KADrC,CAEZ,CACD,GACH;AAEJ;AAEO,SAAS,iBAAiB,EAAE,QAAQ,MAAM,GAA2C;AAC1F,MAAI,CAAC,QAAQ;AACX,WACE,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,cAAc;AAAA,QAChB;AAAA,QAEC,eAAK,UAAU,OAAO,MAAM,CAAC;AAAA;AAAA,IAChC;AAAA,EAEJ;AAEA,SAAO,gBAAAA,MAAC,SAAK,sBAAY,QAAQ,KAAK,GAAE;AAC1C;;;ACvEA,SAASG,UAAS,OAAyC;AACzD,SAAO,SAAS,OAAO,UAAU,WAAY,QAAoC,CAAC;AACpF;AAEA,SAASC,YAAW,OAAwB;AAC1C,SAAO,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AACpD;AAEA,SAAS,cAAc,SAA2D;AAChF,QAAM,YAAYD,UAAS,QAAQ,MAAM;AACzC,MAAI,OAAO,KAAK,SAAS,EAAE,SAAS,EAAG,QAAO;AAC9C,QAAM,UAAUA,UAAS,QAAQ,OAAO;AACxC,QAAM,gBAAgBA,UAAS,QAAQ,MAAM;AAC7C,MAAI,OAAO,KAAK,aAAa,EAAE,SAAS,EAAG,QAAO;AAClD,QAAM,QAAQA,UAAS,QAAQ,KAAK;AACpC,QAAM,cAAcA,UAAS,MAAM,MAAM;AACzC,MAAI,OAAO,KAAK,WAAW,EAAE,SAAS,EAAG,QAAO;AAChD,SAAO,CAAC;AACV;AAEA,SAAS,oBAAoB,KAAqB;AAChD,SAAOC,YAAW,GAAG,EAAE,YAAY;AACrC;AAEA,SAAS,YAAY,GAAqC,KAAa,UAA0B;AAC/F,SAAO,OAAO,MAAM,aAAa,EAAE,KAAK,QAAQ,IAAI;AACtD;AAEA,SAAS,uBAAuB,OAAyB;AACvD,QAAM,aAAaA,YAAW,KAAK,EAAE,YAAY;AACjD,SACE,eAAe,UACf,eAAe,aACf,eAAe,eACf,eAAe;AAEnB;AAEA,SAAS,gBAAgB,YAAoB,GAAkC;AAC7E,MAAI,eAAe,oBAAoB;AACrC,WAAO,YAAY,GAAG,iCAAiC,kBAAkB;AAAA,EAC3E;AACA,MAAI,eAAe,oBAAoB;AACrC,WAAO,YAAY,GAAG,iCAAiC,kBAAkB;AAAA,EAC3E;AACA,SAAO,YAAY,GAAG,yBAAyB,UAAU;AAC3D;AAEA,SAAS,mBACP,QACA,qBACA,gBACA,GACQ;AACR,MAAI,mBAAmB,sBAAsB;AAC3C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,mBAAmB,iBAAiB;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,mBAAmB,kBAAkB;AACvC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,mBAAmB,UAAU;AAC/B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAUA,YAAW,mBAAmB,EAAE,YAAY;AAC5D,MAAI,YAAY,mBAAmB;AACjC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY,YAAY;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,WAAW,gCAAgC;AAC7C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,WAAW,8BAA8B,WAAW,oBAAoB;AAC1E,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,wCACd,cACA,SACuB;AACvB,QAAM,UAAUD,UAAS,YAAY;AACrC,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,aAAa,oBAAoB,OAAO,OAAO,QAAQ,QAAQ,UAAU,EAAE,CAAC;AAClF,QAAM,YAAYC,YAAW,OAAO,GAAG;AACvC,QAAM,SAASA,YAAW,QAAQ,MAAM,EAAE,YAAY;AACtD,QAAM,oBAAoBD,UAAS,QAAQ,kBAAkB;AAC7D,QAAM,mBACJC,YAAW,kBAAkB,kBAAkB,KAAKA,YAAW,OAAO,kBAAkB;AAC1F,QAAM,sBAAsBA,YAAW,kBAAkB,qBAAqB,EAAE,YAAY;AAC5F,QAAM,kBAAkB,MAA6B;AACnD,UAAM,YAAYA,YAAW,SAAS,cAAc,EAAE,YAAY;AAClE,QACE,cAAc,wBACd,cAAc,mBACd,cAAc,oBACd,cAAc,UACd;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,GAAG;AACH,QAAM,gBAAgB,eAAe,sBAAsB,eAAe;AAC1E,QAAM,kBACJ,WAAW,sBACX,WAAW,8BACX,WAAW;AACb,QAAM,gBAAgBA,YAAW,SAAS,aAAa,EAAE,YAAY;AACrE,QAAM,iBAAiB,uBAAuB,SAAS,aAAa;AACpE,QAAM,mBAAmB,kBAAkB;AAC3C,QAAM,qBAAqB,kBAAkB,kBAAkB,MAAM,CAAC;AACtE,QAAM,WAAW,CAAC,uBAAuB,iBAAiB;AAE1D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,gBAAgB,YAAY,SAAS,CAAC;AAAA,IAChD,SAAS,mBAAmB,QAAQ,qBAAqB,gBAAgB,SAAS,CAAC;AAAA,IACnF,kBAAkB,oBAAoB;AAAA,IACtC,qBAAqB,uBAAuB;AAAA,IAC5C;AAAA,IACA,mBAAmB,OAAO,KAAK,iBAAiB,EAAE,SAAS,IAAI,oBAAoB;AAAA,EACrF;AACF;;;ACzMA,SAASC,UAAS,OAAyC;AACzD,SAAO,SAAS,OAAO,UAAU,WAAY,QAAoC,CAAC;AACpF;AAEO,SAAS,2BAA2B,OAAgD;AACzF,QAAM,OAAOA,UAAS,KAAK;AAC3B,QAAM,UAAUA,UAAS,KAAK,OAAO;AACrC,QAAM,QAAQA,UAAS,KAAK,KAAK;AACjC,QAAM,eAAeA,UAAS,MAAM,OAAO;AAC3C,QAAM,aAAa;AAAA,IACjBA,UAAS,KAAK,kBAAkB;AAAA,IAChCA,UAAS,QAAQ,kBAAkB;AAAA,IACnCA,UAAS,aAAa,kBAAkB;AAAA,EAC1C;AACA,aAAW,aAAa,YAAY;AAClC,QAAI,OAAO,KAAK,SAAS,EAAE,SAAS,EAAG,QAAO;AAAA,EAChD;AACA,SAAO;AACT;AAEO,SAAS,0BAA0B,OAAgC;AACxE,QAAM,QAAQ,2BAA2B,KAAK,GAAG;AACjD,SAAO,OAAO,UAAU,YAAY,QAAQ;AAC9C;AAEO,SAAS,2BACd,OACA,QACQ;AACR,QAAM,mBAAmB,0BAA0B,KAAK;AACxD,MAAI,qBAAqB,KAAM,QAAO;AACtC,SAAO,mBAAmB,OAAO,YAAY,OAAO;AACtD;;;ACtBA,SAAS,mBAA4B;AACnC,SAAO,OAAO,WAAW,eAAe,OAAO,SAAS,SAAS,WAAW,QAAQ;AACtF;AAEO,SAAS,uBACd,QACsC;AACtC,QAAM,QAAQ,QAAQ;AACtB,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,SAAO;AACT;AAEA,SAAS,2BAA2B,OAGL;AAC7B,QAAM,SAAS,MAAM,KAAK;AAC1B,SAAO,MAAM,aAAc,QAAQ,SAAS,aAAe,QAAQ,UAAU;AAC/E;AAEO,SAAS,4BACd,QACA,SACA,SACS;AACT,QAAM,WAAW,uBAAuB,MAAM;AAC9C,QAAM,aAAa,WAAW,OAAO;AACrC,MAAI,CAAC,YAAY,QAAS,QAAO;AACjC,QAAM,aAAa,SAAS,cAAc,iBAAiB;AAC3D,SAAO,aAAa,WAAW,WAAW,QAAQ,WAAW,WAAW;AAC1E;AAEO,SAAS,uBACd,QACA,SACS;AACT,MAAI,YAAY,WAAY,QAAO,OAAO,OAAO,mBAAmB;AACpE,MAAI,YAAY,WAAY,QAAO,OAAO,OAAO,0BAA0B;AAC3E,MAAI,YAAY,WAAY,QAAO,OAAO,OAAO,mBAAmB;AACpE,MAAI,YAAY,gBAAiB,QAAO,OAAO,OAAO,wBAAwB;AAC9E,SAAO;AACT;AAEO,SAAS,4BAA4B,OAUjC;AACT,QAAM,aAAa,MAAM,cAAc,iBAAiB;AACxD,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ,MAAM;AAAA,IACd,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAAA,IACvE,GAAI,MAAM,mBAAmB,EAAE,kBAAkB,MAAM,iBAAiB,IAAI,CAAC;AAAA,IAC7E,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,IACxD,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAAA,IACvE,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EAC9C,CAAC;AACD,QAAM,OAAO,aAAa,IAAI,MAAM,OAAO,KAAK,gBAAgB,MAAM,OAAO;AAC7E,QAAM,gBACJ,MAAM,YAAY,cAAc,MAAM,YAClC,IAAI,mBAAmB,MAAM,SAAS,CAAC,KACvC;AACN,SAAO,GAAG,IAAI,GAAG,aAAa,IAAI,OAAO,SAAS,CAAC;AACrD;AAEO,SAAS,8BAA8B,OAKlB;AAC1B,QAAM,aAAa,MAAM,cAAc,iBAAiB;AACxD,QAAM,OAAO,2BAA2B;AAAA,IACtC,KAAK,MAAM;AAAA,IACX;AAAA,EACF,CAAC;AACD,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,SAAS,eAAe;AAC1B,WAAO,YAAY,OAAO,CAAC,YAAY;AACrC,UAAI,YAAY,cAAc,MAAM,KAAK,oBAAoB,MAAO,QAAO;AAC3E,aAAO,uBAAuB,MAAM,QAAQ,OAAO;AAAA,IACrD,CAAC;AAAA,EACH;AACA,QAAM,WAAW,uBAAuB,MAAM,MAAM;AACpD,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO,YAAY;AAAA,IACjB,CAAC,YACC,uBAAuB,MAAM,QAAQ,OAAO,KAC5C,4BAA4B,MAAM,QAAQ,SAAS,EAAE,WAAW,CAAC;AAAA,EACrE;AACF;AAEO,SAAS,2BAA2B,SAAwC;AACjF,MAAI,YAAY,WAAY,QAAO;AACnC,MAAI,YAAY,WAAY,QAAO;AACnC,MAAI,YAAY,WAAY,QAAO;AACnC,SAAO;AACT;AAEO,SAAS,mCAAmC,OAInB;AAC9B,QAAM,aAAa,MAAM,cAAc,iBAAiB;AACxD,QAAM,SAAS,MAAM,KAAK;AAC1B,QAAM,cAAc,aAAa,QAAQ,QAAQ,QAAQ;AACzD,QAAM,YAAY,aAAa,YAAY,MAAM,OAAO;AACxD,MAAI,UAAW,QAAO;AACtB,SAAO,aAAa,WAAW;AACjC;AAEA,eAAsB,+BAA+B,OAIhB;AACnC,QAAM,SAAS,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK;AAC/C,QAAM,iBAAiB,OAAO,MAAM,kBAAkB,EAAE,EAAE,KAAK;AAC/D,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,QAAM,YAAY;AAAA,IAChB;AAAA,IACA,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,EAC7C;AAEA,QAAM,SAAS,MAAM,QAAQ,IAAI;AAAA,KAC9B,YAAmD;AAClD,UAAI,OAAO,MAAM,OAAO,0BAA0B,WAAY,QAAO;AACrE,UAAI;AACF,cAAM,MAAM,MAAM,MAAM,OAAO,sBAAsB;AAAA,UACnD,GAAG;AAAA,UACH,OAAO;AAAA,QACT,CAAC;AACD,eAAO,MAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM,SAAS,IAAI,aAAa;AAAA,MAC1E,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AAAA,KACF,YAAmD;AAClD,UAAI,OAAO,MAAM,OAAO,mBAAmB,WAAY,QAAO;AAC9D,UAAI;AACF,cAAM,MAAM,MAAM,MAAM,OAAO,eAAe;AAAA,UAC5C,GAAG;AAAA,UACH,MAAM;AAAA,UACN,UAAU;AAAA,QACZ,CAAC;AACD,eAAO,MAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM,SAAS,IAAI,aAAa;AAAA,MAC1E,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AAAA,KACF,YAAmD;AAClD,UAAI,OAAO,MAAM,OAAO,wBAAwB,WAAY,QAAO;AACnE,UAAI;AACF,cAAM,MAAM,MAAM,MAAM,OAAO,oBAAoB;AAAA,UACjD,GAAG;AAAA,UACH,OAAO;AAAA,QACT,CAAC;AACD,eAAQ,MAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM,SAAS,KACtD,OAAO,KAAK,gBAAgB,CAAC,IAAI,IAC/B,kBACA;AAAA,MACN,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AAAA,EACL,CAAC;AAED,SAAO,OAAO,OAAO,CAAC,YAA8C,QAAQ,OAAO,CAAC;AACtF;;;AJyBU,SA+PJ,YAAAC,WA/PI,OAAAC,OAUA,QAAAC,aAVA;AAnMV,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAASC,YAA4B;AACnC,QAAM,MAAMD,aAAY;AACxB,SAAOE,SAAQ,MAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC;AACpE;AAEA,SAAS,yBAAyB,KAAmB;AACnD,QAAM,OAAO,OAAO,OAAO,EAAE,EAAE,KAAK;AACpC,MAAI,CAAC,QAAQ,OAAO,WAAW,YAAa;AAC5C,MAAI;AACF,QAAI,OAAO,UAAU,OAAO,WAAW,QAAQ;AAC7C,aAAO,OAAO,YAAY,EAAE,MAAM,qBAAqB,MAAM,EAAE,MAAM,KAAK,EAAE,GAAG,GAAG;AAClF;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO,SAAS,OAAO;AACzB;AAEO,SAAS,oBAAoB;AAClC,QAAM,EAAE,QAAQ,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,EAAE,GAAG,OAAO,IAAI,mBAAmB;AACzC,QAAM,EAAE,GAAG,IAAI,UAAU;AACzB,QAAM,QAAQH,eAAc;AAC5B,QAAM,QAAQE,UAAS;AACvB,QAAM,MAAMD,aAAY;AACxB,QAAM,WAAWG,aAAY;AAC7B,QAAM,eAAe,MAAM,IAAI,QAAQ,KAAK;AAE5C,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AAEtD,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAkB,IAAI;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAwB,IAAI;AACxE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAgC,MAAM;AAClF,QAAM,aAAa,SAAS,IAAI;AAChC,QAAM,gBAAgB,SAAS,WAAW,OAAO;AACjD,QAAM,aAAa,SAAS,WAAW,IAAI;AAC3C,QAAM,iBAAiB,SAAS,WAAW,QAAQ;AACnD,QAAM,iBAAiB,SAAS,cAAc,OAAO;AACrD,QAAM,wBAAwB,SAAS,cAAc,eAAe;AACpE,QAAM,SAAS,gBAAgB,cAAc,MAAM,KAAK;AACxD,QAAM,aAAa,WAAW,eAAe,WAAW;AACxD,QAAM,kBAAkB,gBAAgB,cAAc,SAAS,YAAY;AAC3E,QAAM,qBACJ,uBAAuB,eAAe,OAAc,MAAM,KAC1D,gBAAgB,cAAc,SAAS;AACzC,QAAM,iBAAiB,sBAAsB;AAC7C,QAAM,aAAa,OAAO,WAAW,eAAe,OAAO,SAAS,SAAS,WAAW,QAAQ;AAEhG,QAAM,gBAAgB;AAAA,IACpB,UAAU,aAAa,MAAM;AAAA,IAC7B,QAAQ;AAAA,EACV;AAEA,QAAM,SAAS,kBACV;AAAA,IACC,UAAU,aACN,UAAU,mBAAmB,eAAe,CAAC,KAC7C,sBAAsB,mBAAmB,eAAe,CAAC;AAAA,IAC7D,QAAQ;AAAA,EACV,IACA;AAEJ,QAAM,iBAAiB;AAAA,IACrB,UAAU,aAAa,cAAc;AAAA,IACrC,QAAQ,IAAI,IAAI,gBAAgB;AAAA,MAC9B,GAAI,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,MAC/C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,MACzB,GAAI,kBAAkB,IAAI,MAAM,IAC5B,EAAE,uBAAuB,kBAAkB,IAAI,MAAM,EAAE,IACvD,CAAC;AAAA,IACP,CAAC,EAAE,SAAS,CAAC;AAAA,EACf;AAEA,iBAAe,cAAc;AAC3B,QAAI,CAAC,GAAI;AACT,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,aAAa,OAAO,EAAE,CAAC;AAChD,cAAQ,GAAG;AACX,UACE,CAAC;AAAA,QACC,SAAS,SAAS,GAAG,EAAE,OAAO,EAAE,iBAAiB;AAAA,QACjD;AAAA,UACE,eAAe,gBAAgB,SAAS,SAAS,GAAG,EAAE,OAAO,EAAE,MAAM;AAAA,UACrE,eAAe,gBAAgB,SAAS,SAAS,GAAG,EAAE,OAAO,EAAE,cAAc;AAAA,UAC7E,GAAG,CAAC,KAAK,aAAa,EAAE,KAAK,QAAW,QAAQ;AAAA,QAClD;AAAA,MACF,EAAE,UACF;AACA,0BAAkB,gBAAgB;AAAA,MACpC;AAAA,IACF,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,GAAI;AACT,QAAI,QAAQ;AACZ,QAAI,QAA+C;AAEnD,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ,EAAE,GAAG;AAAA,IACf,CAAC;AAED,SAAK,YAAY;AAEjB,YAAQ,YAAY,YAAY;AAC9B,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,aAAa,OAAO,EAAE,CAAC;AAChD,YAAI,CAAC,MAAO;AACZ,gBAAQ,GAAG;AACX,cAAM,IAAI,SAAS,SAAS,GAAG,EAAE,OAAO,EAAE;AAC1C,YAAI,MAAM,eAAe,MAAM,UAAU;AACvC,cAAI,MAAO,eAAc,KAAK;AAAA,QAChC;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF,GAAG,IAAI;AAEP,WAAO,MAAM;AACX,cAAQ;AACR,UAAI,MAAO,eAAc,KAAK;AAAA,IAChC;AAAA,EAEF,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,aAAa,UAAU,sBAAsB,UAAU;AAE7D,QAAM,QACJ,uBAAuB,WAAW,OAAc,MAAM,KACtD,gBAAgB,cAAc,SAAS,KACvC,EAAE,iCAAiC,QAAW,iBAAiB;AACjE,QAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,IAAI,WAAW,YAAY,CAAC;AAEhF,WAAS,oBAAoB,OAAgB,MAA0B;AACrE,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,QAAQ,KAAK,IAAI,QAAQ,EAAE,KAAK,CAAC,MAAM,WAAW,EAAE,QAAQ,MAAM,KAAK;AAC7E,UAAI,WAAW,OAAO,GAAG,GAAG;AAC1B,eAAO;AAAA,UACL,UAAU,gBAAgB,OAAO,UAAU,KAAK;AAAA,UAChD,KAAK,WAAW,OAAO,GAAG;AAAA,UAC1B,UAAU,WAAW,OAAO,SAAS,KAAK;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,MAAM,IAAI,CAAC,SAAS,oBAAoB,MAAM,IAAI,CAAC;AAAA,IAC5D;AACA,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,aAAO;AAAA,IACT;AACA,UAAM,SAAS,SAAS,KAAK;AAC7B,UAAM,WAAW,WAAW,OAAO,QAAQ,KAAK;AAChD,QAAI,YAAY,CAAC,WAAW,OAAO,GAAG,GAAG;AACvC,YAAM,QAAQ,KAAK,IAAI,QAAQ,EAAE,KAAK,CAAC,MAAM,WAAW,EAAE,QAAQ,MAAM,QAAQ;AAChF,UAAI,WAAW,OAAO,GAAG,GAAG;AAC1B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,KAAK,WAAW,OAAO,GAAG;AAAA,UAC1B,UAAU,OAAO,YAAY,OAAO;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AACA,UAAM,OAAgC,CAAC;AACvC,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC/C,WAAK,GAAG,IAAI,oBAAoB,KAAK,IAAI;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,oBAAoB,OAAO;AAClC,UAAM,UAAU;AAAA,MACd,UAAU,aAAa,MAAM;AAAA,MAC7B,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,IAC1D;AACA,WACE,gBAAAR,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE,0BAAAC,MAAC,SAAI,WAAU,qCACb;AAAA,sBAAAD,MAAC,QAAG,WAAU,iCACX,YAAE,uCAAuC,QAAW,0BAA0B,GACjF;AAAA,MACA,gBAAAA,MAAC,OAAE,WAAU,uBACV;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF,GACF;AAAA,MACA,gBAAAC,MAACQ,OAAA,EAAK,IAAI,SAAgB,WAAU,yBAAwB;AAAA;AAAA,QACvD,EAAE,eAAe,QAAW,MAAM;AAAA,SACvC;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,QAAM,kBAAkBJ;AAAA,IACtB,MAAM,oBAAoB,WAAW,YAAY,MAAM,SAAS;AAAA,IAChE,CAAC,YAAY,SAAS;AAAA,EACxB;AAEA,QAAM,eAAeA,SAAQ,MAAM;AACjC,UAAM,SAAS,WAAW;AAC1B,WAAO,UAAU,OAAO,WAAW,WAAW,SAAS,MAAM,IAAI;AAAA,EACnE,GAAG,CAAC,UAAU,CAAC;AACf,QAAM,qBAAqBA;AAAA,IACzB,MACE,wCAAwC,cAAc,iBAAiB,MAAM;AAAA,MAC3E,eAAe,gBAAgB,cAAc,MAAM;AAAA,MACnD,eAAe,gBAAgB,cAAc,cAAc;AAAA,MAC3D;AAAA,MACA,GAAG,CAAC,KAAK,aAAa,EAAE,KAAK,QAAW,QAAQ;AAAA,IAClD,CAAC;AAAA,IACH,CAAC,cAAc,eAAe,gBAAgB,CAAC;AAAA,EACjD;AACA,QAAM,mBACJ,OAAO,UAAU,EAAE,EAChB,KAAK,EACL,YAAY,MAAM;AACvB,QAAM,uBAAuB,mBAAmB,YAAY;AAC5D,QAAM,4BAA4B;AAAA,IAChC,cAAc,iBAAiB;AAAA,IAC/B;AAAA,MACE,WAAW,EAAE,oBAAoB,QAAW,WAAW;AAAA,MACvD,aAAa,EAAE,uCAAuC,QAAW,aAAa;AAAA,IAChF;AAAA,EACF;AACA,QAAM,wBAAwBA,SAAQ,MAAM;AAC1C,UAAM,SAAS,MAAM,QAAQ,WAAW,MAAM,IAAI,WAAW,SAAS,CAAC;AACvE,aAAS,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC1D,YAAM,YAAY,gCAAgC,gBAAgB,OAAO,KAAK,CAAC,CAAC;AAChF,UAAI,UAAW,QAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,MAAM,CAAC;AACtB,QAAM,4BACJ;AAAA,IACE,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB;AAAA,EACF,KAAK;AACP,QAAM,mBACJ;AAAA,IACE,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,EACrB,KAAK;AACP,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,0BAA2B,QAAO;AACvC,UAAM,iBAAiB,gBAAgB,cAAc,eAAe,KAAK;AACzE,QAAI,iBAAiB;AACnB,aAAO,4BAA4B;AAAA,QACjC,SAAS;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,QACA,kBAAkB;AAAA,QAClB,OAAO,SAAS;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,kBAAkB;AAAA,MAClB,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,MAC3C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IAC3B,CAAC;AACD,WAAO,GAAG,aAAa,cAAc,uBAAuB,IAAI,OAAO,SAAS,CAAC;AAAA,EACnF,GAAG;AAEH,WAAS,gBAAgB,IAA6B;AACpD,UAAM,cAAc,SAAS,EAAE;AAC/B,QAAI,CAAC,OAAO,KAAK,WAAW,EAAE,OAAQ,QAAO;AAC7C,UAAM,OAAO,CAAC,QAAQ,WAAW,WAAW,UAAU,QAAQ,SAAS,SAAS;AAChF,eAAW,KAAK,MAAM;AACpB,YAAM,IAAI,YAAY,CAAC;AACvB,UAAI,MAAM,OAAW,QAAO;AAAA,IAC9B;AACA,UAAM,MAAM,SAAS,YAAY,KAAK;AACtC,QAAI,OAAO,KAAK,GAAG,EAAE,QAAQ;AAC3B,UAAI,IAAI,QAAS,QAAO,IAAI;AAC5B,UAAI,IAAI,KAAM,QAAO,IAAI;AACzB,UAAI,IAAI,KAAM,QAAO,IAAI;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,WAAS,gCAAgC,OAAwB;AAC/D,UAAM,SAAS,SAAS,KAAK;AAC7B,UAAM,SAAS;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,OAAO,MAAM,EAAE;AAAA,MACxB,SAAS,OAAO,MAAM,EAAE;AAAA,MACxB,SAAS,OAAO,KAAK,EAAE;AAAA,MACvB,SAAS,SAAS,OAAO,KAAK,EAAE,MAAM,EAAE;AAAA,MACxC,SAAS,SAAS,OAAO,KAAK,EAAE,MAAM,EAAE;AAAA,IAC1C;AACA,QAAI,OAAQ,QAAO;AACnB,UAAM,MAAM;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,OAAO,MAAM,EAAE;AAAA,MACxB,SAAS,SAAS,OAAO,KAAK,EAAE,MAAM,EAAE;AAAA,IAC1C;AACA,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI;AACF,YAAM,SAAS,IAAI;AAAA,QACjB;AAAA,QACA,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,MACzD;AACA,aACE;AAAA,QACE,OAAO,aAAa,IAAI,oBAAoB;AAAA,QAC5C,OAAO,aAAa,IAAI,kBAAkB;AAAA,MAC5C,KAAK;AAAA,IAET,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAAS,oBAAoB,SAQpB;AACP,UAAM,IAAI,SAAS,OAAO;AAC1B,UAAM,QAAQ,SAAS,EAAE,KAAK;AAC9B,UAAM,YAAY,SAAS,EAAE,MAAM;AACnC,UAAM,cAAc,SAAS,MAAM,MAAM;AACzC,UAAM,SAAS,OAAO,KAAK,SAAS,EAAE,SAAS,IAAI,YAAY;AAE/D,UAAM,UACJ,WAAW,EAAE,OAAO,KAAK,WAAW,EAAE,YAAY,KAAK,WAAW,EAAE,aAAa;AACnF,UAAM,UACJ,WAAW,EAAE,OAAO,KAAK,WAAW,EAAE,YAAY,KAAK,WAAW,EAAE,aAAa;AACnF,UAAM,YAAY,WAAW,MAAM,IAAI,KAAK,WAAW,EAAE,SAAS,KAAK,WAAW,EAAE,UAAU;AAC9F,UAAM,SACJ,WAAW,MAAM,MAAM,KACvB,WAAW,EAAE,MAAM,KACnB,WAAW,EAAE,WAAW,KACxB,WAAW,EAAE,YAAY;AAC3B,UAAM,aAAa,WAAW,OAAO,IAAI;AACzC,UAAM,YAAY,WAAW,OAAO,GAAG;AACvC,UAAM,gBAAgB,WAAW,OAAO,OAAO;AAE/C,QAAI,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,WAAY,QAAO;AACzE,WAAO,EAAE,SAAS,SAAS,WAAW,QAAQ,YAAY,WAAW,cAAc;AAAA,EACrF;AAEA,WAAS,uBAAuB,SAAyD;AACvF,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,SAAS,QAAQ,YAAY,KAAK,QAAQ,SAAS,MAAM;AAC/D,QAAI,QAAQ,eAAe,wBAAwB;AACjD,aAAO;AAAA,QACL;AAAA,QACA,EAAE,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,eAAe,oBAAoB;AAC7C,aAAO,EAAE,0CAA0C,EAAE,OAAO,GAAG,0BAA0B;AAAA,IAC3F;AACA,QAAI,QAAQ,eAAe,gBAAgB;AACzC,aAAO;AAAA,QACL;AAAA,QACA,EAAE,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,eAAe,kBAAkB;AAC3C,aAAO,QAAQ,gBACX;AAAA,QACE;AAAA,QACA,EAAE,SAAS,QAAQ,cAAc;AAAA,QACjC;AAAA,MACF,IACA,EAAE,wCAAwC,QAAW,gBAAgB;AAAA,IAC3E;AACA,WAAO,QAAQ,aACX,EAAE,gCAAgC,EAAE,MAAM,QAAQ,WAAW,GAAG,gBAAgB,IAChF;AAAA,EACN;AAEA,WAAS,aAAa,WAA4B;AAChD,QAAI;AACF,YAAM,SAAS,eAAe,SAAS;AACvC,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,OAAO,OAAO,QAAQ;AAC5B,UAAI,OAAO,MAAM,IAAI,EAAG,QAAO;AAC/B,YAAM,OAAO,MAAM;AACnB,UAAI,OAAO,EAAG,QAAO,EAAE,mBAAmB,QAAW,UAAU;AAC/D,YAAM,UAAU,KAAK,MAAM,OAAO,GAAI;AACtC,UAAI,UAAU,GAAI,QAAO,EAAE,mBAAmB,QAAW,UAAU;AACnE,UAAI,UAAU,GAAI,QAAO,EAAE,sBAAsB,EAAE,OAAO,QAAQ,GAAG,cAAc;AACnF,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,UAAI,UAAU,GAAI,QAAO,EAAE,sBAAsB,EAAE,OAAO,QAAQ,GAAG,cAAc;AACnF,YAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,UAAI,QAAQ,GAAI,QAAO,EAAE,oBAAoB,EAAE,OAAO,MAAM,GAAG,cAAc;AAC7E,YAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAClC,aAAO,EAAE,mBAAmB,EAAE,OAAO,KAAK,GAAG,cAAc;AAAA,IAC7D,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,CAAC,kBAAkB,mBAAmB,IAAIE,UAAkC,CAAC,CAAC;AACpF,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AAEtD,WAAS,cAAc,KAAa;AAClC,wBAAoB,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE;AAAA,EAChE;AAEA,WAAS,mBAAmB,IAAa,KAAa;AACpD,UAAM,MAAM,gBAAgB,EAAE;AAC9B,QAAI,OAAO,KAAM,QAAO;AACxB,UAAM,WAAW,oBAAoB,KAAK,SAAS;AACnD,UAAM,SAAS,iBAAiB,GAAG,KAAK;AACxC,WACE,gBAAAN,MAAAF,WAAA,EACE;AAAA,sBAAAE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,2BAA2B,SAAS,YAAY,EAAE;AAAA,UAC7D,SAAS,MAAM,cAAc,GAAG;AAAA,UAChC,MAAK;AAAA,UAEL;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,MAAC,cAAS,QAAO,kBAAiB;AAAA;AAAA,YACpC;AAAA,YACC,SACG,EAAE,yBAAyB,QAAW,cAAc,IACpD,EAAE,yBAAyB,QAAW,cAAc;AAAA;AAAA;AAAA,MAC1D;AAAA,MACC,UACC,gBAAAA,MAAC,SAAI,WAAU,yBACb,0BAAAA,MAAC,oBAAiB,QAAQ,MAAM,OAAO,UAAU,GACnD;AAAA,OAEJ;AAAA,EAEJ;AAEA,WAASU,aAAY,EAAE,QAAAC,QAAO,GAAuB;AACnD,UAAM,IAAI,OAAOA,WAAU,EAAE;AAC7B,UAAM,aAAa,EAAE,KAAK,EAAE,YAAY;AACxC,UAAM,YACJ,MAAM,cACF,qBACA,MAAM,WACJ,oBACA;AACR,UAAM,QACJ,eAAe,oBACX,EAAE,4BAA4B,QAAW,iBAAiB,IAC1D,KAAK;AACX,WAAO,gBAAAX,MAAC,UAAK,WAAW,YAAY,SAAS,IAAK,iBAAM;AAAA,EAC1D;AAEA,iBAAe,kBAAkB;AAC/B,QAAI,OAAO,6BAA6B,kBAAkB;AACxD,wBAAkB,IAAI;AACtB,wBAAkB,oBAAoB;AACtC,uBAAiB,IAAI;AACrB,UAAI;AACF,cAAM,gBAAgB,kBAAkB,IAAI,MAAM;AAClD,cAAM,mBAAmB;AAAA,UACvB,kBAAkB,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO,OAAO;AAAA,QAClF,EAAE,KAAK;AACP,cAAM,MAAM,MAAM,OAAO,0BAA0B;AAAA,UACjD,WAAW,OAAO,EAAE;AAAA,UACpB,kBAAkB,mBAAmB,SAAY,6BAA6B;AAAA,UAC9E,WAAW,oBAAoB;AAAA,UAC/B,WAAW,oBAAoB;AAAA,QACjC,CAAC;AACD,0BAAkB,KAAK,kBAAkB,MAAM;AAC/C,cAAM,cAAc,OAAO,KAAK,gBAAgB,EAAE,EAAE,KAAK;AACzD,YAAI,aAAa;AACf,mCAAyB,WAAW;AACpC;AAAA,QACF;AACA,cAAM,YAAY;AAClB;AAAA,MACF,SAAS,GAAG;AACV,0BAAkB,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AACnE,0BAAkB,QAAQ;AAC1B;AAAA,MACF,UAAE;AACA,yBAAiB,KAAK;AAAA,MACxB;AAAA,IACF;AAEA,QAAI,kBAAkB;AACpB,+BAAyB,gBAAgB;AACzC;AAAA,IACF;AACA,QAAI,oBAAoB;AACtB,WAAK,SAAS,kBAAkB;AAAA,IAClC;AAAA,EACF;AAEA,SACE,gBAAAC,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,SAAI,WAAU,iBACZ;AAAA,OAAC,KAAK,kBACL,gBAAAD,MAACS,OAAA,EAAK,IAAI,eAAuB,YAAE,sBAAsB,QAAW,aAAa,GAAE;AAAA,MAEpF,KAAK,kBAAkB,CAAC,KAAK,aAC5B,gBAAAT,MAACS,OAAA,EAAK,IAAI,eAAuB,YAAE,sBAAsB,QAAW,aAAa,GAAE;AAAA,MAEpF,UACC,gBAAAR,MAAAF,WAAA,EACI;AAAA,UAAC,KAAK,kBAAmB,KAAK,kBAAkB,CAAC,KAAK,cACtD,gBAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QAEvC,gBAAAA,MAACS,OAAA,EAAK,IAAI,QAAS,0BAAe;AAAA,SACpC;AAAA,MAEF,gBAAAT,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAACS,OAAA,EAAK,IAAI,gBACP,YAAE,2BAA2B,QAAW,UAAU,GACrD;AAAA,MACA,gBAAAT,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAAC,UAAK,WAAU,gBAAgB,cAAI,MAAM,GAAG,CAAC,GAAE;AAAA,OAClD;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,MAAC,QAAG,WAAU,YACX,YAAE,iCAAiC,QAAW,iBAAiB,GAClE;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAU,qBACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,UACnD,SAAS,MAAM,KAAK,YAAY;AAAA,UAChC,UAAU;AAAA,UACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,UAE/C,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA,cAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,UACrG;AAAA;AAAA,MACF,GACF;AAAA,OACF;AAAA,IAEC,aACC,gBAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,0BACZ,YAAE,mCAAmC,QAAW,kBAAkB,GACrE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAAG;AAAA,QACH,gBAAAD,MAAC,UAAK,uBAAS;AAAA,QAAO;AAAA,SACxB;AAAA,OACF,IACE,QACF,gBAAAA,MAAC,SAAI,WAAU,8CAA8C,iBAAM,IACjE;AAAA,IAEH,QAAQ,CAAC,OACR,gBAAAC,MAAC,SAAI,WAAU,8BACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,sCACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,2CAA0C;AAAA,QACzD,gBAAAA,MAAC,SAAI,WAAU,wCAAuC;AAAA,QACtD,gBAAAC,MAAC,SAAI,WAAU,yBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,WAC1D;AAAA,SACF;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,2CAA0C;AAAA,QACzD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,QACxD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,SAC3D;AAAA,OACF,IAEA,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,kBACb;AAAA,wBAAAA,MAAC,aAAQ,WAAU,yCACjB;AAAA,0BAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,4BAAAA,MAAC,SACC;AAAA,8BAAAD,MAAC,QAAG,WAAU,qCAAqC,iBAAM;AAAA,cACzD,gBAAAC,MAAC,SAAI,WAAU,uBACb;AAAA,gCAAAD,MAAC,UAAM,gCAAsB,UAAI;AAAA,gBAChC,WAAW,cAAc,YAAY,KACpC,gBAAAC,MAAAF,WAAA,EACE;AAAA,kCAAAC,MAAC,UAAK,kBAAC;AAAA,kBACP,gBAAAC,MAAC,UAAK;AAAA;AAAA,oBAAE,WAAW,cAAc,YAAY;AAAA,qBAAE;AAAA,mBACjD;AAAA,iBAEJ;AAAA,eACF;AAAA,YACA,gBAAAD,MAACU,cAAA,EAAY,QAAQ,UAAU,IAAI;AAAA,aACrC;AAAA,UAEA,gBAAAT,MAAC,SAAI,WAAU,wBACb;AAAA,4BAAAA,MAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,qBAAqB,QAAW,YAAY,GACjD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,mBAAmB,cAAG;AAAA,eACxC;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBAAiB,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,cACrE,gBAAAA,MAAC,UAAK,WAAU,iBACb,mBAAS,gBAAgB,cAAc,SAAS,KAAK,UACxD;AAAA,eACF;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBAAiB,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,cAC3E,gBAAAA,MAAC,UAAK,WAAU,iBACb,yBAAe,cAAc,UAAU,KAAK,UAC/C;AAAA,eACF;AAAA,YACC,WAAW,cAAc,YAAY,KACpC,gBAAAC,MAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,oBAAoB,QAAW,WAAW,GAC/C;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBACb,yBAAe,cAAc,YAAY,KAAK,UACjD;AAAA,eACF;AAAA,aAEJ;AAAA,WACF;AAAA,QAEA,gBAAAC,MAAC,aAAQ,WAAU,yCACjB;AAAA,0BAAAD,MAAC,QAAG,WAAU,wCACX,YAAE,2BAA2B,QAAW,UAAU,GACrD;AAAA,UACC,uBACC,gBAAAC,MAAC,SAAI,WAAU,0BACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,yBACZ,6BACG,EAAE,4BAA4B,QAAW,iBAAiB,IAC1D,EAAE,6BAA6B,QAAW,kBAAkB,GAClE;AAAA,YACA,gBAAAA,MAAC,SAAI,WAAU,2BACZ,6BAAmB,WAChB,mBAAmB,UACnB;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,YACF,GACN;AAAA,YACC,4BACC,gBAAAA,MAAC,SAAI,WAAU,2BACZ;AAAA,cACC;AAAA,cACA,EAAE,OAAO,0BAA0B;AAAA,cACnC;AAAA,YACF,GACF,IACE;AAAA,YACJ,gBAAAC,MAAC,SAAI,WAAU,2BACZ;AAAA,kCACD,6BACA,oBACA,qBACE,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS,MAAM,KAAK,gBAAgB;AAAA,kBACpC,UAAU;AAAA,kBAET,YAAE,6BAA6B,QAAW,kBAAkB;AAAA;AAAA,cAC/D,IACE;AAAA,cACJ,gBAAAA,MAAC,YAAO,WAAU,2BAA0B,SAAS,MAAM,KAAK,YAAY,GACzE,YAAE,2BAA2B,QAAW,gBAAgB,GAC3D;AAAA,eACF;AAAA,YACC,iBACC,gBAAAA,MAAC,SAAI,WAAU,yBAAyB,0BAAe,IACrD;AAAA,aACN,IACE;AAAA,UACH,CAAC,aACA,uBACE,gBAAAA,MAAC,SAAI,WAAU,oBACZ;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF,GACF,IAEA,gBAAAA,MAAC,SAAI,WAAU,oBACZ,YAAE,iCAAiC,QAAW,4BAAuB,GACxE,IAGF,gBAAAA,MAAC,oBAAiB,QAAQ,cAAc,OAAO,iBAAiB;AAAA,WAEpE;AAAA,QAEC,MAAM,QAAQ,WAAW,MAAM,KAC9B,WAAW,OAAO,SAAS,MAC1B,MAAM;AACL,gBAAM,OAAO,WAAW;AACxB,gBAAM,gBAAgB,CAAC,OAAgB;AACrC,kBAAMY,KAAI,WAAW,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY;AACpD,gBAAIA,GAAE,SAAS,MAAM,KAAKA,GAAE,SAAS,OAAO,KAAKA,GAAE,SAAS,WAAW;AACrE,qBAAO;AACT,gBAAIA,GAAE,SAAS,MAAM,KAAKA,GAAE,SAAS,OAAO,EAAG,QAAO;AACtD,gBAAIA,GAAE,SAAS,SAAS,KAAKA,GAAE,SAAS,SAAS,KAAKA,GAAE,SAAS,MAAM;AACrE,qBAAO;AACT,mBAAO;AAAA,UACT;AACA,gBAAM,aAAa,KAAK,OAAO,CAAC,MAAM,cAAc,CAAC,MAAM,OAAO,EAAE;AACpE,gBAAM,eAAe,KAAK,OAAO,CAAC,MAAM,cAAc,CAAC,MAAM,SAAS,EAAE;AACxE,gBAAM,UAAU,eAAe,SAAS,KAAK,CAAC,CAAC,EAAE,UAAU;AAC3D,gBAAM,SAAS,eAAe,SAAS,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE,UAAU;AACxE,cAAI,gBAAgB;AACpB,cAAI,WAAW,QAAQ;AACrB,kBAAM,KAAK,KAAK,IAAI,OAAO,QAAQ,IAAI,QAAQ,QAAQ,CAAC;AACxD,gBAAI,KAAK,KAAM;AACb,8BAAgB,EAAE,iCAAiC,EAAE,OAAO,GAAG,GAAG,WAAW;AAAA,YAC/E,WAAW,KAAK,KAAQ;AACtB,8BAAgB;AAAA,gBACd;AAAA,gBACA,EAAE,QAAQ,KAAK,KAAM,QAAQ,CAAC,EAAE;AAAA,gBAChC;AAAA,cACF;AAAA,YACF,OAAO;AACL,8BAAgB;AAAA,gBACd;AAAA,gBACA,EAAE,QAAQ,KAAK,KAAQ,QAAQ,CAAC,EAAE;AAAA,gBAClC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,iBACE,gBAAAX,MAAC,aAAQ,WAAU,yCACjB;AAAA,4BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAAA,gBACxC,iBAAe;AAAA,gBAEf;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,uBAAuB,eAAe,YAAY,EAAE;AAAA,sBAC/D,SAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,QAAO;AAAA,sBACP,aAAY;AAAA,sBACZ,eAAc;AAAA,sBACd,gBAAe;AAAA,sBAEf,0BAAAA,MAAC,cAAS,QAAO,kBAAiB;AAAA;AAAA,kBACpC;AAAA,kBACA,gBAAAC,MAAC,SAAI,WAAU,8BACb;AAAA,oCAAAA,MAAC,SAAI,WAAU,0BACb;AAAA,sCAAAD,MAAC,QAAG,WAAU,+DACX,YAAE,+BAA+B,QAAW,oBAAoB,GACnE;AAAA,sBACA,gBAAAA,MAAC,UAAK,WAAU,qBACb,eAAK,WAAW,IACb;AAAA,wBACE;AAAA,wBACA,EAAE,OAAO,KAAK,OAAO;AAAA,wBACrB;AAAA,sBACF,IACA;AAAA,wBACE;AAAA,wBACA,EAAE,OAAO,KAAK,OAAO;AAAA,wBACrB;AAAA,sBACF,GACN;AAAA,uBACF;AAAA,oBACC,CAAC,gBACA,gBAAAC,MAAC,SAAI,WAAU,uBACb;AAAA,sCAAAD,MAAC,SAAI,WAAU,oBACZ,eAAK,IAAI,CAAC,IAAI,MACb,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BAEC,WAAW,6CAA6C,cAAc,EAAE,CAAC;AAAA;AAAA,wBADpE;AAAA,sBAEP,CACD,GACH;AAAA,sBACA,gBAAAC,MAAC,SAAI,WAAU,6BACZ;AAAA,qCAAa,KACZ,gBAAAD,MAAC,UAAK,WAAU,2CACb,yBAAe,IACZ;AAAA,0BACE;AAAA,0BACA,EAAE,OAAO,WAAW;AAAA,0BACpB;AAAA,wBACF,IACA;AAAA,0BACE;AAAA,0BACA,EAAE,OAAO,WAAW;AAAA,0BACpB;AAAA,wBACF,GACN;AAAA,wBAED,iBACC,gBAAAA,MAAC,UAAK,WAAU,8CACb,yBACH;AAAA,yBAEJ;AAAA,uBACF;AAAA,qBAEJ;AAAA;AAAA;AAAA,YACF;AAAA,YACC,gBACC,gBAAAA,MAAC,QAAG,WAAU,eACX,qBAAW,OAAO,IAAI,CAAC,IAAI,QAAgB;AAC1C,oBAAM,cAAc,SAAS,EAAE;AAC/B,oBAAM,WACJ,gBAAgB,YAAY,IAAI,KAChC,EAAE,2BAA2B,QAAW,OAAO;AACjD,oBAAM,QAAQ,SAAS,YAAY;AACnC,oBAAM,QACJ,MAAM,SAAS,MAAM,KACrB,MAAM,SAAS,OAAO,KACtB,MAAM,SAAS,WAAW;AAC5B,oBAAM,SAAS,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO;AAC/D,oBAAM,aACJ,MAAM,SAAS,SAAS,KACxB,MAAM,SAAS,SAAS,KACxB,MAAM,SAAS,MAAM;AAEvB,oBAAM,WAAW,QACb,0BACA,SACE,yBACA,aACE,4BACA;AAER,oBAAM,WACJ,OAAO,YAAY,aAAa,WAAW,YAAY,WAAW;AACpE,oBAAM,eACJ,oBAAoB,EAAE,KACtB,oBAAoB,gBAAgB,EAAE,CAAC,KACvC,oBAAoB,YAAY,OAAO;AACzC,oBAAM,mBAAmB,uBAAuB,YAAY;AAC5D,oBAAM,0BACJ,gBAAgB,EAAE,KAAK,YAAY,WAAW;AAChD,oBAAM,qBAAqB;AAAA,gBACzB;AAAA,gBACA;AAAA,kBACE,WAAW,EAAE,oBAAoB,QAAW,WAAW;AAAA,kBACvD,aAAa;AAAA,oBACX;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEA,qBACE,gBAAAC;AAAA,gBAAC;AAAA;AAAA,kBAEC,WAAU;AAAA,kBAEV;AAAA,oCAAAD,MAAC,SAAI,WAAW,mBAAmB,QAAQ,IACxC,kBACC,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBAEd;AAAA,0CAAAD,MAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK;AAAA,0BACpC,gBAAAA,MAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,oBACtC,IACE,aACF,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf,0BAAAA,MAAC,cAAS,QAAO,kBAAiB;AAAA;AAAA,oBACpC,IACE,SACF,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBAEd;AAAA,0CAAAD,MAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK;AAAA,0BACrC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,SAAQ,IAAG,MAAK;AAAA;AAAA;AAAA,oBAC3C,IACE,MACN;AAAA,oBACA,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAW,iBAAiB,QAAQ,wBAAwB,SAAS,uBAAuB,EAAE;AAAA,wBAE9F;AAAA,0CAAAA,MAAC,SAAI,WAAU,iBACb;AAAA,4CAAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAW,iBAAiB,QAAQ,wBAAwB,SAAS,uBAAuB,EAAE;AAAA,gCAE7F;AAAA;AAAA,kCACA,WAAW,YAAY,IAAI,KAC1B,gBAAAD,MAAC,UAAK,WAAU,iBACb,qBAAW,YAAY,IAAI,GAC9B;AAAA;AAAA;AAAA,4BAEJ;AAAA,4BACA,gBAAAC,MAAC,SAAI,WAAU,iBACb;AAAA,8CAAAD,MAAC,SAAI,WAAU,iBACZ,yBAAe,YAAY,UAAU,GACxC;AAAA,8BACC,eAAe,YAAY,UAAU,KACpC,gBAAAA,MAAC,SAAI,WAAU,qBACZ,uBAAa,YAAY,UAAU,GACtC;AAAA,+BAEJ;AAAA,6BACF;AAAA,0BAEC,WAAW,YAAY,OAAO,KAC7B,gBAAAA,MAAC,SAAI,WAAU,oBACZ,qBAAW,YAAY,OAAO,GACjC;AAAA,0BAGD,gBACC,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,4CAAAA,MAAC,SAAI,WAAU,yBACZ;AAAA,2CAAa,aACZ,gBAAAD,MAAC,UAAK,WAAU,YACb;AAAA,gCACC;AAAA,gCACA,EAAE,OAAO,aAAa,UAAU;AAAA,gCAChC;AAAA,8BACF,GACF;AAAA,8BAED,aAAa,WACZ,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,gCACC;AAAA,gCACA,EAAE,OAAO,aAAa,QAAQ;AAAA,gCAC9B;AAAA,8BACF,GACF;AAAA,8BAED,aAAa,WACZ,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,gCACC;AAAA,gCACA,EAAE,OAAO,aAAa,QAAQ;AAAA,gCAC9B;AAAA,8BACF,GACF;AAAA,8BAED,sBACC,gBAAAA,MAAC,UAAK,WAAU,6BACb;AAAA,gCACC;AAAA,gCACA,EAAE,OAAO,mBAAmB;AAAA,gCAC5B;AAAA,8BACF,GACF;AAAA,+BAEJ;AAAA,6BACE,aAAa,UAAU,qBACvB,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA,2CAAa,SACV;AAAA,gCACE;AAAA,gCACA,EAAE,OAAO,aAAa,OAAO;AAAA,gCAC7B;AAAA,8BACF,IACA;AAAA,8BACH,aAAa,UAAU,mBAAmB,WAAQ;AAAA,8BAClD;AAAA,+BACH;AAAA,6BAEJ;AAAA,0BAGD,YAAY,QACX,gBAAAD,MAAC,SAAI,WAAU,2BACb,0BAAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,WAAW,yBAAyB,QAAQ,4BAA4B,2BAA2B;AAAA,8BACnG,OAAO;AAAA,gCACL,OAAO,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,YAAY,IAAI,WAAW,MAAM,QAAQ,CAAC,CAAC;AAAA,8BACjF;AAAA;AAAA,0BACF,GACF;AAAA,0BAGD,mBAAmB,IAAI,GAAG;AAAA;AAAA;AAAA,oBAC7B;AAAA;AAAA;AAAA,gBA9IK,gBAAgB,YAAY,EAAE,KAAK,OAAO,GAAG;AAAA,cA+IpD;AAAA,YAEJ,CAAC,GACH;AAAA,aAEJ;AAAA,QAEJ,GAAG;AAAA,SACP;AAAA,MAEA,gBAAAC,MAAC,WAAM,WAAU,qBACd;AAAA,kBAAU,SAAS,KAClB,gBAAAA,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,4BAA4B,QAAW,WAAW,GACvD;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,oBACZ,oBAAU,IAAI,CAAC,MAAM;AACpB,kBAAM,WAAW,SAAS,CAAC;AAC3B,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,MAAM,gBAAgB,SAAS,GAAG,KAAK;AAAA,gBACvC,QAAO;AAAA,gBACP,KAAI;AAAA,gBACJ,WAAU;AAAA,gBAET,0BAAgB,SAAS,QAAQ,KAChC,EAAE,8BAA8B,QAAW,mBAAmB;AAAA;AAAA,cAP3D,gBAAgB,SAAS,IAAI,SAAS,KAAK,SAAS,QAAQ;AAAA,YAQnE;AAAA,UAEJ,CAAC,GACH;AAAA,WACF;AAAA,QAGD,WAAW,cAAc,eAAe,KACvC,MAAM,QAAQ,WAAW,OAAO,KAChC,WAAW,QAAQ,SAAS,KAC1B,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,kCAAkC,QAAW,iBAAiB,GACnE;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,oBACX,iBAAM,QAAQ,WAAW,OAAO,IAAI,WAAW,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM;AACxE,kBAAM,SAAS,SAAS,CAAC;AACzB,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,SAAS,MAAM;AACb,wBAAM,iBAAiB,gBAAgB,cAAc,eAAe;AACpE,wBAAM,WAAW,gBAAgB,OAAO,EAAE;AAC1C,wBAAM,aACJ,uBAAuB,OAAO,OAAc,MAAM,KAClD,gBAAgB,OAAO,WAAW,KAClC,EAAE,iBAAiB,QAAW,QAAQ;AACxC,sBAAI,CAAC,kBAAkB,CAAC,SAAU;AAElC,sBAAI,KAAK,WAAW;AAClB,6BAAS;AAAA,sBACP,UAAU,aACN,WAAW,mBAAmB,cAAc,CAAC,IAAI,mBAAmB,QAAQ,CAAC,KAC7E,uBAAuB,mBAAmB,cAAc,CAAC,IAAI,mBAAmB,QAAQ,CAAC;AAAA,sBAC7F,QAAQ;AAAA,oBACV,CAAC;AACD;AAAA,kBACF;AAEA,uBAAK,WAAW;AAAA,oBACd;AAAA,oBACA;AAAA,oBACA,QAAQ,WAAW,cAAc,OAAO;AAAA,oBACxC,WAAW;AAAA,oBACX;AAAA,oBACA,UAAU,WAAW,cAAc,SAAS;AAAA,kBAC9C,CAAC;AAAA,gBACH;AAAA,gBAEC;AAAA,kBACC;AAAA,kBACA;AAAA,oBACE,QACE,uBAAuB,OAAO,OAAc,MAAM,KAClD,gBAAgB,OAAO,WAAW,KAClC,EAAE,iBAAiB,QAAW,QAAQ;AAAA,kBAC1C;AAAA,kBACA,QACE,uBAAuB,OAAO,OAAc,MAAM,KAClD,gBAAgB,OAAO,WAAW,KAClC,EAAE,iBAAiB,QAAW,QAAQ,CACxC;AAAA,gBACF;AAAA;AAAA,cA5CK,gBAAgB,OAAO,EAAE;AAAA,YA6ChC;AAAA,UAEJ,CAAC,GACH;AAAA,WACF;AAAA,QAGJ,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,uBAAuB,QAAW,MAAM,GAC7C;AAAA,UACA,gBAAAA,MAAC,OAAE,WAAU,wBACV;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF,GACF;AAAA,UACA,gBAAAA,MAACS,OAAA,EAAK,IAAI,gBAAuB,WAAU,wCACxC,YAAE,6BAA6B,QAAW,kBAAkB,GAC/D;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AKnqCA,SAAS,aAAAI,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,OAAM,eAAAC,oBAAmB;AA+JvB,SAuCD,YAAAC,WAvCC,OAAAC,OAiBD,QAAAC,aAjBC;AA/IX,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAASC,YAA4B;AACnC,QAAM,MAAMD,aAAY;AACxB,SAAOE,SAAQ,MAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC;AACpE;AAEA,SAAS,sBAAsB,SAA0C;AACvE,QAAM,SAAS,SAAS,QAAQ,MAAM;AACtC,QAAM,OAAO,WAAW,OAAO,IAAI;AACnC,MAAI,SAAS,uBAAwB,QAAO;AAC5C,MAAI,SAAS,mBAAoB,QAAO;AACxC,MAAI,SAAS,eAAgB,QAAO;AACpC,MAAI,SAAS,kBAAkB;AAC7B,UAAM,MAAM,WAAW,OAAO,OAAO;AACrC,WAAO,MAAM,mBAAmB,GAAG,MAAM;AAAA,EAC3C;AACA,SAAO,OAAO,WAAW,IAAI,KAAK;AACpC;AAEO,SAAS,eAAe;AAC7B,QAAM,EAAE,QAAQ,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,QAAQH,eAAc;AAC5B,QAAM,QAAQE,UAAS;AAEvB,QAAM,eAAe,MAAM,IAAI,QAAQ,KAAK;AAC5C,QAAM,YAAY,KAAK,IAAI,GAAG,SAAS,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,KAAK,CAAC;AAEzE,QAAM,CAAC,OAAO,QAAQ,IAAIE,UAAoB,CAAC,CAAC;AAChD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAuC,IAAI;AAC/E,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAiB,EAAE;AAErD,iBAAe,QAAQ,OAAe,GAAG;AACvC,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,eAAe;AAAA,QACtC,QAAQ,gBAAgB;AAAA,QACxB;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AACD,eAAS,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC;AAClD;AAAA,QACE,IAAI,aACA;AAAA,UACE,OAAO,OAAO,IAAI,WAAW,SAAS,CAAC;AAAA,UACvC,MAAM,OAAO,IAAI,WAAW,QAAQ,CAAC;AAAA,UACrC,UAAU,OAAO,IAAI,WAAW,YAAY,EAAE;AAAA,UAC9C,YAAY,OAAO,IAAI,WAAW,cAAc,CAAC;AAAA,QACnD,IACA;AAAA,MACN;AAAA,IACF,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,QAAQ,SAAS;AACtB,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,SAAS;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,aAAa;AAAA,IACjC,CAAC;AAAA,EAEH,GAAG,CAAC,cAAc,SAAS,CAAC;AAE5B,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,mBAAa,EAAE;AACf;AAAA,IACF;AAEA,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,eAAe,OAAO,YAAY,CAAC;AAC5D,cAAM,SAAS,SAAS,GAAG;AAC3B,cAAM,OACJ,uBAAuB,SAAS,OAAO,QAAQ,EAAE,OAAc,MAAM,KACrE,gBAAgB,SAAS,OAAO,IAAI,EAAE,IAAI;AAC5C,YAAI,CAAC,MAAO;AACZ,qBAAa,IAAI;AAAA,MACnB,QAAQ;AACN,YAAI,CAAC,MAAO;AACZ,qBAAa,EAAE;AAAA,MACjB;AAAA,IACF,GAAG;AAEH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EAEF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAE/D,QAAM,WAAW,eACZ;AAAA,IACC,UAAU,aACN,UAAU,mBAAmB,OAAO,YAAY,CAAC,CAAC,KAClD,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,CAAC;AAAA,IAClE,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D,IACA;AAEJ,QAAM,gBACJ,gBAAgB,WACZ,WACA;AAAA,IACE,UAAU,aAAa,KAAK;AAAA,IAC5B,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D;AAEN,QAAM,aAAa,UAAU,sBAAsB,UAAU;AAE7D,QAAM,YAAY;AAAA,IAChB,UAAU,aAAa,cAAc;AAAA,IACrC,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA,EAC1D;AAEA,WAASC,aAAY,EAAE,OAAO,GAAuB;AACnD,UAAM,IAAI,OAAO,UAAU,EAAE;AAC7B,UAAM,aAAa,EAAE,KAAK,EAAE,YAAY;AACxC,UAAM,YACJ,MAAM,cACF,qBACA,MAAM,WACJ,oBACA;AACR,UAAM,QACJ,eAAe,oBACX,EAAE,4BAA4B,QAAW,iBAAiB,IAC1D,KAAK;AACX,WAAO,gBAAAR,MAAC,UAAK,WAAW,YAAY,SAAS,IAAK,iBAAM;AAAA,EAC1D;AAEA,MAAI,KAAK,oBAAoB,OAAO;AAClC,WACE,gBAAAA,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE,0BAAAC,MAAC,SAAI,WAAU,qCACb;AAAA,sBAAAD,MAAC,QAAG,WAAU,iCACX,YAAE,uCAAuC,QAAW,0BAA0B,GACjF;AAAA,MACA,gBAAAA,MAAC,OAAE,WAAU,uBACV;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF,GACF;AAAA,MACA,gBAAAC,MAACQ,OAAA,EAAK,IAAI,eAAsB,WAAU,yBAAwB;AAAA;AAAA,QAC7D,EAAE,eAAe,QAAW,MAAM;AAAA,SACvC;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAR,MAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,MAAC,SAAI,WAAU,iBACZ;AAAA,OAAC,KAAK,kBACL,gBAAAD,MAACS,OAAA,EAAK,IAAI,aAAa,MAAM,gBAC1B,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,MAED,KAAK,kBAAkB,CAAC,cACvB,gBAAAT,MAACS,OAAA,EAAK,IAAI,aAAa,MAAM,gBAC1B,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,MAED,gBAAgB,YACf,gBAAAR,MAAAF,WAAA,EACI;AAAA,UAAC,KAAK,kBAAmB,KAAK,kBAAkB,CAAC,eACjD,gBAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QAEvC,gBAAAA,MAACS,OAAA,EAAK,IAAI,UAAkB,uBAAa,cAAa;AAAA,SACxD;AAAA,MAEF,gBAAAT,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAAC,UAAM,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,OAC7D;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,MAAC,QAAG,WAAU,YAAY,YAAE,2BAA2B,QAAW,UAAU,GAAE;AAAA,MAC9E,gBAAAC,MAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,aAAa,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAAA;AAAA,QAC/D;AAAA,QACC,gBACC,gBAAAA,MAACS,OAAA,EAAK,IAAI,WAAkB,WAAU,uBACnC,YAAE,uBAAuB,QAAW,cAAc,GACrD;AAAA,QAEF,gBAAAT;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,YAC5B,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,QAAQ,gBAAgB;AAAA;AAAA,IAC1B;AAAA,IAEC,aACC,gBAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,0BACZ,YAAE,mCAAmC,QAAW,kBAAkB,GACrE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAAG;AAAA,QACH,gBAAAD,MAAC,UAAK,uBAAS;AAAA,QAAO;AAAA,SACxB;AAAA,OACF,IACE,QACF,gBAAAA,MAAC,SAAI,WAAU,8CAA8C,iBAAM,IACjE;AAAA,IAEH,gBACC,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA,QAAE,wCAAwC,QAAW,sBAAsB;AAAA,MAAG;AAAA,MAC9E,WACC,gBAAAD,MAACS,OAAA,EAAK,IAAI,UAAU,WAAU,uBAC3B,uBAAa,OAAO,YAAY,GACnC,IAEA,gBAAAT,MAAC,UAAK,WAAU,yBAAyB,uBAAa,OAAO,YAAY,GAAE;AAAA,OAE/E;AAAA,IAGF,gBAAAA,MAAC,SAAI,WAAU,sBACb,0BAAAC,MAAC,WAAM,WAAU,YAAW,mBAAgB,SAC1C;AAAA,sBAAAD,MAAC,WACC,0BAAAC,MAAC,QACC;AAAA,wBAAAD,MAAC,QAAG,OAAM,OAAO,YAAE,aAAa,QAAW,IAAI,GAAE;AAAA,QACjD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,eAAe,QAAW,MAAM,GAAE;AAAA,QACrD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,QAC3D,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,QACzD,gBAAAA,MAAC,QAAG,OAAM,OAAO,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,SAC7D,GACF;AAAA,MACA,gBAAAA,MAAC,WACE,gBAAM,WAAW,IAChB,gBAAAA,MAAC,QACC,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,cAAY,EAAE,iBAAiB,QAAW,QAAQ;AAAA,UAClD,WAAW,OAAO,0BAA0B;AAAA,UAE3C,iBACC,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,cAAa;AAAA,YAC5B,gBAAAA,MAAC,UACE,YAAE,6BAA6B,QAAW,qBAAqB,GAClE;AAAA,aACF,IAEA,EAAE,wBAAwB,QAAW,kBAAkB;AAAA;AAAA,MAE3D,GACF,IAEA,MAAM,IAAI,CAAC,MAAM;AACf,cAAM,UAAU,SAAS,CAAC;AAC1B,cAAM,WAAW,SAAS,QAAQ,QAAQ;AAC1C,cAAM,OAAO;AAAA,UACX,UAAU,KAAK,mBAAmB,gBAAgB,QAAQ,EAAE,CAAC,CAAC;AAAA,UAC9D,QAAQ,IAAI,IAAI,gBAAgB;AAAA,YAC9B,GAAI,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,YAC/C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,UAC3B,CAAC,EAAE,SAAS,CAAC;AAAA,QACf;AAEA,cAAM,OAAiB,MAAM,QAAQ,SAAS,IAAI,IAC9C,SAAS,KACN,OAAO,CAACU,OAAM,OAAOA,OAAM,YAAYA,GAAE,KAAK,CAAC,EAC/C,IAAI,CAACA,OAAM,OAAOA,EAAC,EAAE,KAAK,CAAC,IAC9B,CAAC;AACL,cAAM,eAAe,SAAS,QAAQ,aAAa;AACnD,cAAM,YACJ,WAAW,aAAa,IAAI,KAAK,WAAW,aAAa,SAAS;AACpE,cAAM,cAAc,WAAW,aAAa,MAAM;AAClD,cAAM,eAAe,WAAW,aAAa,OAAO;AACpD,cAAM,kBAAkB,sBAAsB,YAAY;AAC1D,cAAM,kBAAkB,2BAA2B,cAAc;AAAA,UAC/D,WAAW,EAAE,oBAAoB,QAAW,WAAW;AAAA,UACvD,aAAa,EAAE,uCAAuC,QAAW,aAAa;AAAA,QAChF,CAAC;AACD,cAAM,eACJ,QAAQ,SAAS,KACjB,QAAQ,WAAW,KACnB,QAAQ,eAAe,KACvB,QAAQ,eAAe;AAEzB,eACE,gBAAAT,MAAC,QACC;AAAA,0BAAAD,MAAC,QAAG,WAAU,cAAa,cAAY,EAAE,aAAa,QAAW,IAAI,GACnE,0BAAAC,MAACQ,OAAA,EAAK,IAAI,MAAc;AAAA,4BAAgB,QAAQ,EAAE,EAAE,MAAM,GAAG,CAAC;AAAA,YAAE;AAAA,aAAG,GACrE;AAAA,UACA,gBAAAR,MAAC,QAAG,cAAY,EAAE,eAAe,QAAW,MAAM,GAChD;AAAA,4BAAAD,MAAC,SAAI,WAAU,gBACZ,iCAAuB,QAAQ,YAAmB,MAAM,KACvD,gBAAgB,QAAQ,SAAS,KACjC,UACJ;AAAA,YACC,KAAK,SAAS,KACb,gBAAAA,MAAC,SAAI,WAAU,oCACZ,eAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAACU,OACrB,gBAAAV,MAAC,UAAa,WAAU,yBACrB,UAAAU,MADQA,EAEX,CACD,GACH;AAAA,YAED,gBACC,gBAAAT,MAAC,SAAI,WAAU,oBACb;AAAA,8BAAAA,MAAC,SACE;AAAA,4BAAY,SAAS,SAAS,KAAK;AAAA,gBACnC,aAAa,eAAe,WAAQ;AAAA,gBACpC,eAAe,WAAW,YAAY,KAAK;AAAA,iBAC1C,aAAa,iBAAiB,cAAc,WAAQ;AAAA,gBACrD,cAAc,UAAU,WAAW,KAAK;AAAA,iBAC3C;AAAA,cACC,mBAAmB,gBAAAD,MAAC,SAAK,2BAAgB;AAAA,cACzC,mBACC,gBAAAA,MAAC,SACE;AAAA,gBACC;AAAA,gBACA,EAAE,OAAO,gBAAgB;AAAA,gBACzB;AAAA,cACF,GACF;AAAA,eAEJ;AAAA,aAEJ;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,cAAY,EAAE,kBAAkB,QAAW,SAAS;AAAA,cAEnD,qBAAW,QAAQ,YAAY,IAC5B,IAAI,WAAW,QAAQ,YAAY,CAAC,KACpC;AAAA;AAAA,UACN;AAAA,UACA,gBAAAA,MAAC,QAAG,cAAY,EAAE,iBAAiB,QAAW,QAAQ,GACpD,0BAAAA,MAACQ,cAAA,EAAY,QAAQ,WAAW,QAAQ,MAAM,GAAG,GACnD;AAAA,UACA,gBAAAR;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,cAAY,EAAE,kBAAkB,QAAW,SAAS;AAAA,cAEnD,yBAAe,QAAQ,UAAU,KAAK;AAAA;AAAA,UACzC;AAAA,aAzDO,gBAAgB,QAAQ,EAAE,CA0DnC;AAAA,MAEJ,CAAC,GAEL;AAAA,OACF,GACF;AAAA,IAEC,cAAc,WAAW,aAAa,KACrC,gBAAAC,MAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD;AAAA,QAACS;AAAA,QAAA;AAAA,UACC,IACE;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,IAAI,IAAI,gBAAgB;AAAA,cAC9B,GAAI,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,cAC/C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,cACzB,MAAM,OAAO,KAAK,IAAI,GAAG,YAAY,CAAC,CAAC;AAAA,YACzC,CAAC,EAAE,SAAS,CAAC;AAAA,UACf;AAAA,UAEF,WAAW,yBAAyB,aAAa,KAAK,OAAO,gBAAgB,EAAE;AAAA,UAE9E,YAAE,mBAAmB,QAAW,UAAU;AAAA;AAAA,MAC7C;AAAA,MACA,gBAAAT,MAAC,UAAK,WAAU,sBACb;AAAA,QACC;AAAA,QACA,EAAE,MAAM,WAAW,MAAM,YAAY,WAAW,WAAW;AAAA,QAC3D,QAAQ,WAAW,IAAI,OAAO,WAAW,UAAU;AAAA,MACrD,GACF;AAAA,MACA,gBAAAA;AAAA,QAACS;AAAA,QAAA;AAAA,UACC,IACE;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,IAAI,IAAI,gBAAgB;AAAA,cAC9B,GAAI,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,cAC/C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,cACzB,MAAM,OAAO,KAAK,IAAI,WAAW,YAAY,YAAY,CAAC,CAAC;AAAA,YAC7D,CAAC,EAAE,SAAS,CAAC;AAAA,UACf;AAAA,UAEF,WAAW,yBAAyB,aAAa,WAAW,cAAc,OAAO,gBAAgB,EAAE;AAAA,UAElG,YAAE,eAAe,QAAW,MAAM;AAAA;AAAA,MACrC;AAAA,OACF;AAAA,KAEJ;AAEJ;;;ACvcA,SAAS,aAAAE,YAAW,WAAAC,UAAS,QAAQ,YAAAC,iBAAgB;AACrD,SAAS,QAAAC,OAAM,eAAAC,cAAa,eAAAC,cAAa,aAAAC,kBAAiB;;;ACE1D,SAASC,UAAS,OAAgD;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAyB;AACtD,SAAO,OAAO,UAAU,YAAY,QAAQ;AAC9C;AAEO,SAAS,kCAAkC,UAA4B;AAC5E,QAAM,iBAAiBA,UAAS,QAAQ;AACxC,QAAM,eAAeA,UAAS,gBAAgB,YAAY;AAC1D,MAAI,CAAC,aAAc,QAAO;AAC1B,SAAO,CAAC,YAAY,aAAa,YAAY,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACnE,UAAM,QAAQ,aAAa,GAAG;AAC9B,WAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS;AAAA,EAChD,CAAC;AACH;AAEO,SAAS,4BACd,YACS;AACT,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI,sBAAsB,WAAW,kBAAkB,EAAG,QAAO;AAEjE,QAAM,mBAAmB,WAAW,WAAW,iBAAiB;AAChE,QAAM,eAAe,WAAW,WAAW,aAAa;AACxD,SACE,qBAAqB,YACrB,qBAAqB,kBACrB,iBAAiB;AAErB;AAEO,SAAS,8BAA8B,OAI5B;AAChB,QAAM,mBAAmB,WAAW,MAAM,YAAY,iBAAiB;AACvE,MAAI,oBAAoB,qBAAqB,WAAY,QAAO;AAChE,SAAO,4BAA4B,MAAM,UAAU,IAC/C,MAAM,iBACN,oBAAoB;AAC1B;AAEO,SAAS,qCAAqC,OAInC;AAChB,QAAM,WAAW,8BAA8B,KAAK;AACpD,MAAI,YAAY,aAAa,WAAY,QAAO;AAChD,MAAI,MAAM,cAAc,MAAM,2BAA2B,OAAO;AAC9D,WAAO,MAAM;AAAA,EACf;AACA,SAAO;AACT;;;AD4hBY,SA8BJ,YAAAC,WA1BE,OAAAC,OAJE,QAAAC,cAAA;AAhiBZ,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAAS,iBAAyB;AAChC,QAAM,MAAMA,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,QAAQ,KAAK;AAC7B;AAEA,SAAS,mBAA2B;AAClC,QAAM,MAAMA,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,WAAW,KAAK;AACtD;AAEA,SAAS,kBAAkB,OAAwE;AACjG,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ,MAAM;AAAA,IACd,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EAC9C,CAAC;AACD,QAAM,IAAI,OAAO,SAAS;AAI1B,MAAI,MAAM,WAAY,QAAO,aAAa,CAAC;AAC3C,SAAO,yBAAyB,CAAC;AACnC;AAEA,SAASC,UAAS,OAAgD;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,SAAO;AACT;AAEA,SAASC,YAAW,OAAwB;AAC1C,SAAO,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AACpD;AAEA,SAAS,YAAY,OAAgB,UAA4B;AAC/D,SAAO,OAAO,UAAU,YAAY,QAAQ;AAC9C;AAEA,SAAS,WAAW,OAA+B;AACjD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,SAASC,gBAAe,OAAgB,QAAwB;AAC9D,QAAM,MAAMD,YAAW,KAAK;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,IAAI,KAAK,GAAG;AAC3B,MAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAG,QAAO;AAC3C,MAAI;AACF,WAAO,OAAO,eAAe,UAAU,QAAW;AAAA,MAChD,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,OAAO,YAAY;AAAA,EAC5B;AACF;AAEA,SAAS,4BAA4B,OAA2C;AAC9E,QAAM,UAAUD,UAAS,KAAK;AAC9B,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,iBAAiB,WAAW,QAAQ,eAAe,KAAK;AAC9D,QAAM,8BAA8B,WAAW,QAAQ,8BAA8B,KAAK;AAC1F,QAAM,2BAA2B,WAAW,QAAQ,2BAA2B,KAAK;AACpF,QAAM,gBAAgB,WAAW,QAAQ,cAAc,KAAK;AAC5D,QAAM,sBAAsB,WAAW,QAAQ,qBAAqB,KAAK;AACzE,QAAM,qBAAqB,WAAW,QAAQ,oBAAoB,KAAK;AACvE,QAAM,gBAAgB,WAAW,QAAQ,cAAc,KAAK;AAC5D,QAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,UAAU,CAAC;AACtE,QAAM,SAAS,UACZ,IAAI,CAAC,UAAyC;AAC7C,UAAM,SAASA,UAAS,KAAK;AAC7B,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,WAAWC,YAAW,OAAO,SAAS;AAC5C,QAAI,CAAC,SAAU,QAAO;AACtB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,iBAAiB,WAAW,OAAO,eAAe,KAAK;AAAA,MACvD,gCAAgC,WAAW,OAAO,8BAA8B,KAAK;AAAA,MACrF,6BAA6B,WAAW,OAAO,2BAA2B,KAAK;AAAA,MAC/E,gBAAgB,WAAW,OAAO,cAAc,KAAK;AAAA,MACrD,uBACE,WAAW,OAAO,qBAAqB,KAAK,WAAW,OAAO,cAAc,KAAK;AAAA,MACnF,sBAAsB,WAAW,OAAO,oBAAoB,KAAK;AAAA,MACjE,gBAAgB,WAAW,OAAO,cAAc,KAAK;AAAA,IACvD;AAAA,EACF,CAAC,EACA,OAAO,CAAC,UAA2C,QAAQ,KAAK,CAAC,EACjE;AAAA,IACC,CAAC,UACC,MAAM,kBAAkB,KACxB,MAAM,8BAA8B,KACpC,MAAM,wBAAwB,KAC9B,MAAM,uBAAuB;AAAA,EACjC;AACF,MACE,kBAAkB,KAClB,4BAA4B,KAC5B,iBAAiB,KACjB,iBAAiB,KACjB,OAAO,WAAW,GAClB;AACA,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,gCAAgC;AAAA,IAChC,6BAA6B;AAAA,IAC7B,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,YAAYA,YAAW,QAAQ,UAAU,KAAK;AAAA,IAC9C,SAAS;AAAA,EACX;AACF;AAEA,SAAS,yBAAyB,QAAyB;AACzD,MAAI,WAAW,SAAS,WAAW,MAAO,QAAO;AACjD,QAAM,YAAYD,UAAS,MAAM;AACjC,QAAM,OAAOC,YAAW,WAAW,IAAI;AACvC,SAAO,SAAS,QAAQ,QAAQ;AAClC;AAEA,SAAS,0BAA0B,SAA0B;AAC3D,SAAO,CAAC,QAAQ,WAAW,QAAQ;AACrC;AAEA,SAAS,aAAa,MAAsB;AAC1C,SAAO,OAAO,QAAQ,EAAE,EACrB,KAAK,EACL,QAAQ,UAAU,GAAG,EACrB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,SAAS,CAAC,SAAS,KAAK,YAAY,CAAC;AAClD;AAEA,SAAS,gBAAgB,SAAiB,WAAsC;AAC9E,QAAM,aAAa,OAAO,WAAW,EAAE,EACpC,KAAK,EACL,YAAY;AACf,MAAI,eAAe,mBAAmB;AACpC,WAAO,UAAU,gCAAgC,QAAW,yBAAyB;AAAA,EACvF;AACA,MAAI,eAAe,kBAAkB;AACnC,WAAO,UAAU,+BAA+B,QAAW,yBAAyB;AAAA,EACtF;AACA,MAAI,eAAe,sBAAsB;AACvC,WAAO,UAAU,mCAAmC,QAAW,yBAAyB;AAAA,EAC1F;AACA,MAAI,eAAe,qBAAqB;AACtC,WAAO,UAAU,kCAAkC,QAAW,wBAAwB;AAAA,EACxF;AACA,MAAI,CAAC,WAAY,QAAO,UAAU,wBAAwB,QAAW,WAAW;AAChF,SAAO,aAAa,WAAW,QAAQ,MAAM,GAAG,CAAC;AACnD;AAEA,SAAS,mBAAmB,YAAoB,WAAsC;AACpF,SAAO,eAAe,QAClB,UAAU,mBAAmB,QAAW,mBAAmB,IAC3D,UAAU,mBAAmB,QAAW,iBAAiB;AAC/D;AAEO,SAAS,iBAAiB;AAC/B,QAAM,EAAE,QAAQ,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,EAAE,OAAO,IAAIE,WAAU;AAC7B,QAAM,MAAMJ,aAAY;AACxB,QAAM,QAAQD,eAAc;AAC5B,QAAM,SAAS,eAAe;AAC9B,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AACtD,QAAM,WAAWM,aAAY;AAC7B,QAAM,yBAAyB,OAAe,EAAE;AAEhD,QAAM,YAAY,KAAK,YAAY,KAAK,UAAU,IAAI;AACtD,QAAM,cACJ,KAAK,MAAM,eAAe,EAAE,yBAAyB,QAAW,kBAAkB;AACpF,QAAM,iBACJ,KAAK,MAAM,kBACX,EAAE,8BAA8B,QAAW,uBAAuB;AACpE,QAAM,iBAAiB,KAAK,MAAM,kBAAkB,EAAE,mBAAmB,QAAW,YAAY;AAChG,QAAM,eAAe,KAAK,MAAM,gBAAgB,EAAE,iBAAiB,QAAW,UAAU;AAExF,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAyC,IAAI;AACrE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAkD,IAAI;AAC9F,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,+BAA+B,gCAAgC,IAAIA,UAExE,CAAC,CAAC;AAEJ,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAwC,MAAM;AACpF,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,UAAS,KAAK;AAChE,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,KAAK;AAE9D,QAAM,aAAa,QAAQ,KAAK,SAAS;AACzC,QAAM,wBAAwB,aAAa,KAAK,yBAAyB,IAAI,CAAC;AAC9E,QAAM,eAAe,SAAS,sBAAsB,OAAO,MAAM,CAAC,IAAI;AACtE,QAAM,kBAAkB,QAAQ,cAAc,eAAe;AAC7D,QAAM,iBAAiB,QAAQ,YAAY,KAAK,CAAC,mBAAmB;AAEpE,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAC/D,QAAM,iBAAiB,KAAK;AAE5B,iBAAe,UAAU;AACvB,QAAI,CAAC,OAAQ;AACb,aAAS,IAAI;AACb,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,eAAe,OAAO,MAAM,GAAG;AAAA,QACtD,gBAAgB,cAAc,kBAAkB;AAAA,MAClD,CAAC;AACD,cAAQL,UAAS,GAAG,CAAC;AAAA,IACvB,SAAS,GAAG;AACV,eAASC,YAAWD,UAAS,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IACxD,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAM,WAAU,MAAM;AACd,SAAK,QAAQ;AACb,SAAK,qBAAqB;AAC1B,SAAK,mBAAmB;AAAA,MACtB,MAAM,OAAO,SAAS;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ,EAAE,OAAO;AAAA,IACnB,CAAC;AAAA,EAEH,GAAG,CAAC,QAAQ,cAAc,gBAAgB,MAAM,CAAC;AAEjD,EAAAA,WAAU,MAAM;AACd,UAAM,gBAAgB,OAAO,UAAU,EAAE,EAAE,KAAK;AAChD,QAAI,CAAC,eAAe;AAClB,uCAAiC,CAAC,CAAC;AACnC;AAAA,IACF;AACA,QAAI,YAAY;AAChB,UAAM,YAAY;AAChB,YAAM,aAAa,MAAM,+BAA+B;AAAA,QACtD;AAAA,QACA,QAAQ;AAAA,QACR,gBAAgB,cAAc,kBAAkB;AAAA,MAClD,CAAC;AACD,UAAI,CAAC,WAAW;AACd,yCAAiC,UAAU;AAAA,MAC7C;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,cAAc,gBAAgB,MAAM,CAAC;AAEjD,EAAAA,WAAU,MAAM;AACd,UAAM,gBAAgB,OAAO,UAAU,EAAE,EAAE,KAAK;AAChD,QAAI,CAAC,iBAAiB,CAAC,KAAK,aAAa,OAAO,OAAO,0BAA0B,YAAY;AAC3F,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,QAAI,YAAY;AAChB,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,OAAO,MAAM,OAAO,sBAAuB,aAAa;AAC9D,YAAI,CAAC,WAAW;AACd,0BAAgB,IAAI;AAAA,QACtB;AAAA,MACF,QAAQ;AACN,YAAI,CAAC,WAAW;AACd,0BAAgB,IAAI;AAAA,QACtB;AAAA,MACF;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,WAAW,MAAM,CAAC;AAEnC,QAAM,WAAWN,UAAS,MAAM,QAAQ;AACxC,QAAM,aAAaA,UAAS,MAAM,IAAI;AACtC,QAAM,gBAAgBA,UAAS,MAAM,OAAO;AAC5C,QAAM,kBAAkBA,UAAS,YAAY,SAAS;AACtD,QAAM,QACJ,uBAAuB,UAAU,OAAc,MAAM,KACrDC,YAAW,YAAY,IAAI,KAC3B,EAAE,uBAAuB,QAAW,MAAM;AAC5C,QAAM,cACJ,uBAAuB,UAAU,aAAoB,MAAM,KAC3DA,YAAW,YAAY,WAAW,KAClC;AACF,QAAM,WAAWA,YAAW,UAAU,KAAK,KAAK;AAEhD,QAAM,UAAqC,MAAM,QAAQ,MAAM,OAAO,IAClE,KAAK,QAAQ,OAAO,CAAC,WAA8C,QAAQD,UAAS,MAAM,CAAC,CAAC,IAC5F,CAAC;AACL,QAAM,gBAAgBO,SAAQ,MAAM;AAClC,UAAM,MAAM,QAAQ,KAAK,CAAC,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAC7D,WAAO,OAAO,QAAQ,CAAC,KAAK;AAAA,EAC9B,GAAG,CAAC,OAAO,CAAC;AACZ,QAAM,kBAAkBA,SAAQ,MAAM;AACpC,UAAM,kBAAkBN,YAAW,aAAa;AAChD,QAAI,CAAC,gBAAiB,QAAO;AAC7B,WACE,QAAQ,KAAK,CAAC,WAAWA,YAAW,OAAO,cAAc,MAAM,eAAe,KAC9E;AAAA,EAEJ,GAAG,CAAC,eAAe,eAAe,OAAO,CAAC;AAE1C,QAAM,SAAS;AAAA,IACb,UAAU,aAAa,mBAAmB;AAAA,IAC1C,QAAQ;AAAA,EACV;AAEA,QAAM,QAAQD,UAAS,UAAU,KAAK;AACtC,QAAM,aACJ,uBAAuB,OAAO,OAAc,MAAM,KAClD,EAAE,oBAAoB,QAAW,oBAAoB;AACvD,QAAM,YAAY,uBAAuB,OAAO,MAAa,MAAM,KAAKC,YAAW,OAAO,IAAI;AAC9F,QAAM,WAAWA,YAAW,OAAO,GAAG;AACtC,QAAM,kBAAkB,QAAQ,aAAa,QAAQ;AACrD,QAAM,gBAAgB,QAAQ,SAAS,WAAW,aAAa,WAAW,QAAQ;AAElF,EAAAK,WAAU,MAAM;AACd,QAAI,WAAW,WAAW;AACxB,uBAAiB,KAAK;AACtB,qBAAe,SAAS;AACxB,mBAAa,IAAI;AACjB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,cAAc;AACvC,uBAAiB,KAAK;AACtB,qBAAe,QAAQ;AACvB,mBAAa,IAAI;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,EAAAA,WAAU,MAAM;AACd,QAAI,WAAW,cAAe;AAC9B,QAAI,KAAK,UAAW;AACpB,QAAI,CAAC,gBAAgB,CAAC,eAAgB;AAEtC,UAAM,SAAS;AACf,UAAM,WAAWL,YAAW,QAAQ,EAAE;AACtC,QAAI,CAAC,SAAU;AAEf,UAAM,MAAM;AAAA,MACV,OAAO,UAAU,EAAE;AAAA,MACnB,aAAa;AAAA,MACb;AAAA,MACAA,YAAW,aAAa;AAAA,IAC1B,EAAE,KAAK,GAAG;AACV,QAAI,uBAAuB,YAAY,IAAK;AAC5C,2BAAuB,UAAU;AAEjC,SAAK,WAAW;AAAA,MACd,gBAAgB,aAAa;AAAA,MAC7B;AAAA,MACA,QAAQ,OAAO,UAAU,EAAE;AAAA,MAC3B,WAAW,OAAO,KAAK;AAAA,MACvB,YACE,uBAAuB,QAAQ,OAAc,MAAM,KACnDA,YAAW,QAAQ,WAAW,KAC9BA,YAAW,QAAQ,IAAI,KACvB,EAAE,iBAAiB,QAAW,QAAQ;AAAA,MACxC,UAAUA,YAAW,QAAQ,cAAc;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,aAAa,kBAAkB;AAAA,IACnC,QAAQ,OAAO,UAAU,EAAE;AAAA,IAC3B;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B,CAAC;AACD,QAAM,+BAA+B;AACrC,QAAM,6BAA6BM;AAAA,IACjC,MACE,8BAA8B;AAAA,MAC5B,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,QAAQ,8BAA8B,KAAK,UAAU;AAAA,EACxD;AACA,QAAM,wBAAwB,MAAM;AAAA,IAClC,oBAAI,IAAI,CAAC,GAAG,4BAA4B,GAAG,6BAA6B,CAAC;AAAA,EAC3E,EAAE,OAAO,CAAC,YAAY,YAAY,UAAU;AAC5C,WAAS,oCAAoC,SAAwC;AACnF,QAAI,YAAY,YAAY;AAC1B,aAAO,EAAE,2BAA2B,QAAW,UAAU;AAAA,IAC3D;AACA,QAAI,YAAY,YAAY;AAC1B,aAAO,EAAE,2BAA2B,QAAW,UAAU;AAAA,IAC3D;AACA,QAAI,YAAY,iBAAiB;AAC/B,aAAO,EAAE,gCAAgC,QAAW,eAAe;AAAA,IACrE;AACA,WAAO,EAAE,2BAA2B,QAAW,UAAU;AAAA,EAC3D;AACA,QAAM,gBAAgBN,YAAW,iBAAiB,IAAI;AACtD,QAAM,gBAAgBA,YAAW,iBAAiB,IAAI,KAAK;AAC3D,QAAM,cAAc,gBAChB;AAAA,IACE,UAAU,aACN,eAAe,mBAAmB,aAAa,CAAC,KAChD,2BAA2B,mBAAmB,aAAa,CAAC;AAAA,IAChE,QAAQ;AAAA,EACV,IACA;AACJ,QAAM,eAAeM,SAAQ,MAAM;AACjC,UAAM,YAAY,MAAM,QAAQ,UAAU,MAAM,IAAI,SAAS,SAAS,CAAC;AACvE,UAAM,YAAYP,UAAS,UAAU,aAAa,KAAK,CAAC;AACxD,UAAM,QAAqB,UACxB,IAAI,CAAC,QAA0B;AAC9B,YAAM,QAAQA,UAAS,GAAG;AAC1B,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,UAAUC,YAAW,MAAM,OAAO;AACxC,YAAM,OAAOA,YAAW,MAAM,IAAI;AAClC,UAAI,CAAC,WAAW,CAAC,KAAM,QAAO;AAC9B,YAAM,aAAa,yBAAyB,UAAU,OAAO,CAAC;AAC9D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,YAAY,MAAM,UAAU,IAAI;AAAA,QAC1C,UAAU,YAAY,MAAM,UAAU,0BAA0B,OAAO,CAAC;AAAA,QACxE,OAAO,WAAW,MAAM,KAAK;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAC,EACA,OAAO,CAAC,SAA4B,QAAQ,IAAI,CAAC,EACjD,KAAK,CAAC,GAAG,MAAM;AACd,YAAM,SAAS,EAAE,SAAS,OAAO;AACjC,YAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,UAAI,EAAE,YAAY,EAAE,QAAS,QAAO,EAAE,QAAQ,cAAc,EAAE,OAAO;AACrE,aAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,IACpC,CAAC;AACH,UAAM,YAAY,oBAAI,IAAyB;AAC/C,eAAW,QAAQ,OAAO;AACxB,YAAM,WAAW,UAAU,IAAI,KAAK,OAAO,KAAK,CAAC;AACjD,eAAS,KAAK,IAAI;AAClB,gBAAU,IAAI,KAAK,SAAS,QAAQ;AAAA,IACtC;AACA,WAAO,EAAE,OAAO,UAAU;AAAA,EAC5B,GAAG,CAAC,QAAQ,CAAC;AACb,QAAM,qBAAqBM;AAAA,IACzB,MAAM,4BAA4B,MAAM,oBAAoB;AAAA,IAC5D,CAAC,MAAM,oBAAoB;AAAA,EAC7B;AACA,QAAM,+BACH,cAAc,qBAGG;AACpB,QAAM,yBAAyB,kCAAkC,QAAQ;AACzE,QAAM,qBAAqBP,UAAS,cAAc,iBAAiB;AACnE,QAAM,2BAA2BA,UAAS,cAAc,oBAAoB;AAC5E,QAAM,gBAAgBA,UAAS,0BAA0B,cAAc;AACvE,QAAM,cACJC,YAAW,0BAA0B,IAAI,KAAKA,YAAW,oBAAoB,IAAI;AACnF,QAAM,eAAeA,YAAW,oBAAoB,aAAa;AACjE,QAAM,qBAAqBA,YAAW,0BAA0B,MAAM;AACtE,QAAM,uBACJ,OAAO,eAAe,uBAAuB,YACzC,cAAc,qBACZ,EAAE,qCAAqC,QAAW,eAAe,IACjE,EAAE,uCAAuC,QAAW,aAAa,IACnE;AACN,QAAM,wBAAwBA,YAAW,eAAe,uBAAuB;AAC/E,QAAM,qBACJ,0BAA0B,2BACtB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA,0BAA0B,8BACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA,0BAA0B,2BACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA;AACV,QAAM,eAAeC,gBAAe,eAAe,eAAe,MAAM;AACxE,QAAM,mBAAmBA,gBAAe,eAAe,oBAAoB,MAAM;AACjF,QAAM,WAAWA,gBAAe,0BAA0B,WAAW,MAAM;AAC3E,QAAM,YACJA,gBAAe,0BAA0B,YAAY,MAAM,KAC3DA,gBAAe,0BAA0B,wBAAwB,MAAM;AACzE,QAAM,mBAAmBD,YAAW,oBAAoB,iBAAiB;AACzE,QAAM,cAAc,qCAAqC;AAAA,IACvD,YAAY;AAAA,IACZ;AAAA,IACA,gBAAgB,EAAE,+BAA+B,QAAW,WAAW;AAAA,EACzE,CAAC;AACD,QAAM,uBAAuB;AAAA,IAC3B,eACA,eACA,sBACA,wBACA,sBACA,gBACA,oBACA,YACA,aACA;AAAA,EACF;AACA,QAAM,sBAAsB,MAAM,QAAQ,UAAU,WAAW,IAC3D,SAAS,YAAY,IAAI,CAAC,SAASA,YAAW,IAAI,CAAC,EAAE,OAAO,OAAO,IACnE,CAAC;AACL,QAAM,eAAe,MAAM,QAAQ,UAAU,IAAI,IAC7C,SAAS,KAAK,IAAI,CAAC,QAAQA,YAAW,GAAG,CAAC,EAAE,OAAO,OAAO,IAC1D,CAAC;AACL,SACE,gBAAAJ,OAAC,SAAI,WAAW,uBAAuB,aAAa,gBAAgB,EAAE,IACpE;AAAA,oBAAAA,OAAC,SAAI,WAAU,oBACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,yBACZ;AAAA,SAAC,kBACA,gBAAAA,OAACW,OAAA,EAAK,IAAI,QAAe,UAAS,QAAO,WAAU,uBAAsB;AAAA;AAAA,UACpE,EAAE,eAAe,QAAW,MAAM;AAAA,WACvC;AAAA,QAEF,gBAAAZ,MAAC,SAAI,WAAU,0BAA0B,iBAAM;AAAA,SACjD;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAU,0BACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,UACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,UAC5B,UAAU;AAAA,UACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,UAE/C,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA,cAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,UACrG;AAAA;AAAA,MACF,GACF;AAAA,OACF;AAAA,IAEC,SAAS,gBAAAA,MAAC,SAAI,WAAU,mBAAmB,iBAAM;AAAA,IAEjD,QAAQ,CAAC,OACR,gBAAAC,OAAAF,WAAA,EACE;AAAA,sBAAAE,OAAC,SAAI,WAAU,6BAA4B,aAAU,QACnD;AAAA,wBAAAD,MAAC,SAAI,WAAU,2BAA0B;AAAA,QACzC,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,wCAAuC;AAAA,UACtD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,UAClF,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAA,MAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,WAC7D;AAAA,SACF;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,wBAAAA,OAAC,SAAI,WAAU,+BACb;AAAA,0BAAAA,OAAC,SAAI,WAAU,8BACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,YAClF,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,YACxD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,YACxD,gBAAAA,MAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,aAC7D;AAAA,UACA,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,YAClF,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,YACxD,gBAAAA,MAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,aAC7D;AAAA,WACF;AAAA,QACA,gBAAAA,MAAC,SACC,0BAAAC,OAAC,SAAI,WAAU,mCACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,UAClF,gBAAAA,MAAC,SAAI,WAAU,wCAAuC;AAAA,UACtD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAA,MAAC,SAAI,WAAU,wCAAuC;AAAA,UACtD,gBAAAA,MAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,MAAM,GAAG;AAAA,UAC3D,gBAAAA,MAAC,SAAI,WAAU,wCAAuC;AAAA,UACtD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,WAC3D,GACF;AAAA,SACF;AAAA,OACF,IAEA,gBAAAC,OAAAF,WAAA,EACE;AAAA,sBAAAE,OAAC,YAAO,WAAU,oBAChB;AAAA,wBAAAD,MAAC,SAAI,KAAK,UAAU,KAAK,OAAO,WAAU,kBAAiB;AAAA,QAC3D,gBAAAC,OAAC,SAAI,WAAU,kBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,oBACZ,0BACG;AAAA,YACE;AAAA,YACA,EAAE,WAAW,cAAc;AAAA,YAC3B,cAAc,aAAa;AAAA,UAC7B,IACA,EAAE,uBAAuB,QAAW,MAAM,GAChD;AAAA,UACA,gBAAAA,MAAC,QAAG,WAAU,mBAAmB,iBAAM;AAAA,UACtC,cAAc,gBAAAA,MAAC,OAAE,WAAU,sBAAsB,uBAAY,IAAO;AAAA,UACrE,gBAAAC,OAAC,SAAI,WAAU,sBACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,gBAAgB,kBAAO;AAAA,YACrCK,YAAW,eAAe,OAAO,KAChC,gBAAAJ,OAAC,SAAI,WAAU,0CAAyC;AAAA;AAAA,cACpDI,YAAW,eAAe,OAAO;AAAA,eACrC;AAAA,YAED,kBACC,gBAAAL,MAAC,SAAI,WAAU,yBACZ,YAAE,yBAAyB,QAAW,kBAAkB,GAC3D,IACE;AAAA,aACN;AAAA,WACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,qBACZ,sBACC,gBAAAC,OAAAF,WAAA,EACG;AAAA,0BAAgB,mBAAmB,KAAK,gBACvC,gBAAAC;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU,QAAQ,CAAC,aAAa;AAAA,cAChC,SAAS,MAAM;AACb,oBAAI,eAAe;AACjB,mCAAiB,KAAK;AACtB,iCAAe,QAAQ;AACvB,+BAAa,IAAI;AACjB;AAAA,gBACF;AACA,oBAAI,CAAC,aAAa,eAAgB;AAClC,qBAAK,gBAAgB;AAAA,kBACnB,gBAAgB,aAAa;AAAA,kBAC7B,QAAQ,OAAO,UAAU,EAAE;AAAA,gBAC7B,CAAC;AAAA,cACH;AAAA,cAEC;AAAA;AAAA,UACH,IACE;AAAA,UAEH,CAAC,eACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU;AAAA,cACV,SAAS,MAAM;AACb,oBAAI,eAAe;AACjB,mCAAiB,KAAK;AACtB,iCAAe,SAAS;AACxB,+BAAa,IAAI;AACjB;AAAA,gBACF;AACA,qBAAK,eAAe;AAAA,kBAClB,QAAQ,OAAO,UAAU,EAAE;AAAA,kBAC3B,iBAAiBK,YAAW,eAAe,EAAE,KAAK;AAAA,kBAClD,WAAW,KAAK,aAAa;AAAA,gBAC/B,CAAC;AAAA,cACH;AAAA,cAEC;AAAA;AAAA,UACH,IAEA,gBAAAL;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,gBAAa;AAAA,cACb,UAAU,QAAQ,CAAC,aAAa;AAAA,cAChC,SAAS,MAAM;AACb,oBAAI,CAAC,aAAa,eAAgB;AAClC,qCAAqB,IAAI;AAAA,cAC3B;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,WAEJ,IACE,MACN;AAAA,SACF;AAAA,MAEA,gBAAAC,OAAC,SAAI,WAAU,kBACb;AAAA,wBAAAA,OAAC,UAAK,WAAU,kBACd;AAAA,0BAAAA,OAAC,aAAQ,WAAU,6CACjB;AAAA,4BAAAD,MAAC,QAAG,WAAU,oBAAoB,YAAE,oBAAoB,QAAW,OAAO,GAAE;AAAA,YAC5E,gBAAAA,MAAC,SAAI,WAAU,kBAAkB,uBAAY;AAAA,aAC/C;AAAA,UAEA,gBAAAC,OAAC,aAAQ,WAAU,+CACjB;AAAA,4BAAAD,MAAC,QAAG,WAAU,oBACX,YAAE,8BAA8B,QAAW,iBAAiB,GAC/D;AAAA,YACC,CAAC,iBACA,gBAAAA,MAAC,SAAI,WAAU,mCACZ,WAAC,eACE;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,YACF,IACA,kBACE;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,YACF,IACA,CAAC,aACC;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,YACF,IACA,MACV,IACE,QAAQ,WAAW,IACrB,gBAAAA,MAAC,SAAI,WAAU,mCACZ;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF,GACF,IAEA,gBAAAA,MAAC,SAAI,WAAU,yBACZ,kBAAQ,IAAI,CAAC,GAAG,QAAQ;AACvB,oBAAM,OACJ,uBAAuB,EAAE,OAAc,MAAM,KAC7CK,YAAW,EAAE,WAAW,KACxBA,YAAW,EAAE,IAAI,KACjBA,YAAW,EAAE,EAAE,KACf,EAAE,iBAAiB,QAAW,QAAQ;AACxC,oBAAM,WAAW,CAAC;AAClB,oBAAM,YACJ,YAAY,EAAE,SAAS,KAAK,KAC3B,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,YAAY,GAAG,SAAS,KAAK,CAAC;AACpE,oBAAM,aAAa,OAAO,EAAE,QAAQ,EAAE,EAAE,YAAY;AACpD,qBACE,gBAAAJ;AAAA,gBAAC;AAAA;AAAA,kBAEC;AAAA,kBACA,WAAW,yBAAyB,WAAW,gBAAgB,EAAE,IAAI,YAAY,eAAe,EAAE;AAAA,kBAClG,SAAS,MAAM;AACb,wBAAI,CAAC,gBAAgB,CAAC,eAAgB;AACtC,0BAAM,WAAWI,YAAW,EAAE,EAAE;AAChC,wBAAI,CAAC,SAAU;AAEf,wBAAI,KAAK,aAAa,cAAc;AAClC,+BAAS;AAAA,wBACP,UAAU,aACN,WAAW,mBAAmB,aAAa,cAAc,CAAC,IAAI,mBAAmB,QAAQ,CAAC,KAC1F,uBAAuB,mBAAmB,aAAa,cAAc,CAAC,IAAI,mBAAmB,QAAQ,CAAC;AAAA,wBAC1G,QAAQ;AAAA,sBACV,CAAC;AACD;AAAA,oBACF;AAEA,yBAAK,WAAW;AAAA,sBACd,gBAAgB,aAAa;AAAA,sBAC7B;AAAA,sBACA,QAAQ,OAAO,UAAU,EAAE;AAAA,sBAC3B,WAAW,OAAO,KAAK;AAAA,sBACvB,YAAY;AAAA,sBACZ,UAAUA,YAAW,EAAE,cAAc;AAAA,oBACvC,CAAC;AAAA,kBACH;AAAA,kBAEA;AAAA,oCAAAL,MAAC,SAAI,WAAU,yBACZ,yBAAe,SACd,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf;AAAA,0CAAAD,MAAC,UAAK,GAAE,gDAA+C;AAAA,0BACvD,gBAAAA,MAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI;AAAA;AAAA;AAAA,oBAChC,IAEA,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf;AAAA,0CAAAD,MAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,IAAG,KAAI;AAAA,0BACvD,gBAAAA,MAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA,0BACrC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,oBACxC,GAEJ;AAAA,oBACA,gBAAAC,OAAC,SAAI,WAAU,yBACb;AAAA,sCAAAD,MAAC,SAAI,WAAU,yBAAyB,gBAAK;AAAA,sBAC5CK,YAAW,EAAE,cAAc,KAC1B,gBAAAL,MAAC,SAAI,WAAU,yBACZ,UAAAK,YAAW,EAAE,cAAc,GAC9B;AAAA,sBAEF,gBAAAJ,OAAC,SAAI,WAAU,2BACZ;AAAA,qCACC,gBAAAD,MAAC,UAAK,WAAU,qCACb,YAAE,uBAAuB,QAAW,SAAS,GAChD;AAAA,wBAED,cACC,gBAAAA,MAAC,UAAK,WAAU,0BAA0B,sBAAW;AAAA,yBAEzD;AAAA,uBACF;AAAA,oBACA,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,sCAAAD,MAAC,UAAK,WAAU,iCACb,YAAE,oBAAoB,QAAW,MAAM,GAC1C;AAAA,sBACA,gBAAAC;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,QAAO;AAAA,0BACP,aAAY;AAAA,0BACZ,eAAc;AAAA,0BACd,gBAAe;AAAA,0BAEf;AAAA,4CAAAD,MAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA,4BACrC,gBAAAA,MAAC,cAAS,QAAO,oBAAmB;AAAA;AAAA;AAAA,sBACtC;AAAA,uBACF;AAAA;AAAA;AAAA,gBAzFK,OAAO,EAAE,EAAE;AAAA,cA0FlB;AAAA,YAEJ,CAAC,GACH;AAAA,aAEJ;AAAA,UACA,gBAAAC,OAAC,aAAQ,WAAU,8CACjB;AAAA,4BAAAA,OAAC,SAAI,WAAU,0BACb;AAAA,8BAAAD,MAAC,QAAG,WAAU,2CACX,YAAE,qBAAqB,QAAW,mBAAmB,GACxD;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAAA,kBAE3C,6BACG,EAAE,yBAAyB,QAAW,cAAc,IACpD,EAAE,qBAAqB,QAAW,cAAc;AAAA;AAAA,cACtD;AAAA,eACF;AAAA,YACC,CAAC,mBACA,gBAAAC,OAAC,SAAI,WAAU,yCACb;AAAA,8BAAAD,MAAC,SAAI,WAAU,yBACZ,uBAAa,MAAM,WAAW,IAC7B,gBAAAC,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD;AAAA,gCAAAD,MAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,WAAU,aAAY,OAAM;AAAA,gBACjE,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA;AAAA,gBACjB;AAAA,iBACF,IAEA,gBAAAC,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,gBAAe;AAAA;AAAA,gBACjB;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA;AAAA,gBACjB;AAAA,iBACF,GAEJ;AAAA,cACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ,uBAAa,MAAM,WAAW,IAC3B;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,IACA;AAAA,gBACE;AAAA,gBACA;AAAA,kBACE,WAAW,aAAa,MAAM;AAAA,kBAC9B,YAAY,aAAa,MAAM,WAAW,IAAI,KAAK;AAAA,kBACnD,YAAY,aAAa,UAAU;AAAA,kBACnC,aAAa,aAAa,UAAU,SAAS,IAAI,KAAK;AAAA,gBACxD;AAAA,gBACA,qBAAqB,aAAa,MAAM,MAAM,aAAa,aAAa,MAAM,WAAW,IAAI,KAAK,GAAG,WAAW,aAAa,UAAU,IAAI,SAAS,aAAa,UAAU,SAAS,IAAI,KAAK,GAAG;AAAA,cAClM,GACN;AAAA,eACF,IACE,aAAa,MAAM,WAAW,IAChC,gBAAAC,OAAC,SAAI,WAAU,yCACb;AAAA,8BAAAD,MAAC,SAAI,WAAU,yBACb,0BAAAC,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD;AAAA,gCAAAD,MAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,WAAU,aAAY,OAAM;AAAA,gBACjE,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA;AAAA,gBACjB;AAAA,iBACF,GACF;AAAA,cACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,GACF;AAAA,eACF,IAEA,gBAAAA,MAAC,SAAI,WAAU,qBACZ,gBAAM,KAAK,aAAa,UAAU,QAAQ,CAAC,EAAE;AAAA,cAC5C,CAAC,CAAC,SAAS,KAAK,GAAG,aACjB,gBAAAC,OAAC,SAAkB,WAAU,kBAC3B;AAAA,gCAAAA,OAAC,SAAI,WAAU,yBACb;AAAA,kCAAAD,MAAC,SAAI,WAAU,yBAAyB,qBAAW,GAAE;AAAA,kBACrD,gBAAAA,MAAC,SAAI,WAAU,uBACZ,kBAAQ,WAAW,QAAQ,IAC1B,gBAAAA,MAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,0BAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAE;AAAA,sBACF,QAAO;AAAA,sBACP,aAAY;AAAA,sBACZ,eAAc;AAAA,sBACd,gBAAe;AAAA;AAAA,kBACjB,GACF,IAEA,gBAAAA,MAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,0BAAAA,MAAC,UAAK,GAAE,2BAA0B,MAAK,gBAAe,GACxD,GAEJ;AAAA,kBACA,gBAAAA,MAAC,SAAI,WAAU,wBACZ,0BAAgB,SAAS,CAAC,GAC7B;AAAA,kBACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ,6BAAmB,MAAM,CAAC,GAAG,cAAc,OAAO,CAAC,GACtD;AAAA,mBACF;AAAA,gBACA,gBAAAA,MAAC,SAAI,WAAU,uBACZ,gBAAM,IAAI,CAAC,OAAO,aACjB,gBAAAC;AAAA,kBAAC;AAAA;AAAA,oBAEC,WAAW,gBAAgB,MAAM,WAAW,2BAA2B,oBAAoB;AAAA,oBAE3F;AAAA,sCAAAA,OAAC,SAAI,WAAU,qBACZ;AAAA,8BAAM,UAAU,OACf,gBAAAD,MAAC,UAAK,WAAU,sBAAsB,gBAAM,OAAM,IAElD,gBAAAA,MAAC,UAAK,WAAU,sBAAsB,qBAAW,GAAE;AAAA,wBAErD,gBAAAA,MAAC,UAAK,WAAU,qBAAoB,OAAO,MAAM,MAC9C,uBAAa,MAAM,IAAI,GAC1B;AAAA,yBACF;AAAA,sBACA,gBAAAC,OAAC,SAAI,WAAU,sBACb;AAAA,wCAAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,sBAAsB,MAAM,WAAW,6BAA6B,0BAA0B;AAAA,4BAExG;AAAA,oCAAM,WACL,gBAAAA,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,IAAG;AAAA,oCACH,IAAG;AAAA,oCACH,GAAE;AAAA,oCACF,QAAO;AAAA,oCACP,aAAY;AAAA;AAAA,gCACd;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,GAAE;AAAA,oCACF,QAAO;AAAA,oCACP,aAAY;AAAA,oCACZ,eAAc;AAAA,oCACd,gBAAe;AAAA;AAAA,gCACjB;AAAA,iCACF,IAEA,gBAAAC,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,IAAG;AAAA,oCACH,IAAG;AAAA,oCACH,GAAE;AAAA,oCACF,QAAO;AAAA,oCACP,aAAY;AAAA;AAAA,gCACd;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,GAAE;AAAA,oCACF,QAAO;AAAA,oCACP,aAAY;AAAA,oCACZ,eAAc;AAAA;AAAA,gCAChB;AAAA,iCACF;AAAA,8BAEF,gBAAAA,MAAC,UACE,gBAAM,WACH,EAAE,aAAa,QAAW,MAAM,IAChC,EAAE,kBAAkB,QAAW,WAAW,GAChD;AAAA;AAAA;AAAA,wBACF;AAAA,wBACA,gBAAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,qBAAqB,MAAM,WAAW,gCAAgC,6BAA6B;AAAA,4BAE7G,gBAAM,WACH,EAAE,iBAAiB,QAAW,UAAU,IACxC,EAAE,aAAa,QAAW,MAAM;AAAA;AAAA,wBACtC;AAAA,yBACF;AAAA;AAAA;AAAA,kBAhEK,GAAG,OAAO,IAAI,MAAM,IAAI;AAAA,gBAiE/B,CACD,GACH;AAAA,mBAjGQ,OAkGV;AAAA,YAEJ,GACF;AAAA,aAEJ;AAAA,UAEC,oBAAoB,SAAS,KAC5B,gBAAAC,OAAC,aAAQ,WAAU,mDACjB;AAAA,4BAAAD,MAAC,QAAG,WAAU,oBACX,YAAE,0BAA0B,QAAW,aAAa,GACvD;AAAA,YACA,gBAAAA,MAAC,SAAI,WAAU,kBACZ,8BAAoB,IAAI,CAAC,GAAG,MAC3B,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,KAAK;AAAA,gBACL,KAAK,EAAE,uBAAuB,EAAE,OAAO,IAAI,EAAE,GAAG,cAAc,IAAI,CAAC,EAAE;AAAA,gBACrE,WAAU;AAAA;AAAA,cAHL;AAAA,YAIP,CACD,GACH;AAAA,aACF;AAAA,WAEJ;AAAA,QAEA,gBAAAC,OAAC,WAAM,WAAU,qBACd;AAAA,iCACC,gBAAAA,OAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,6BAA6B,QAAW,gBAAgB,GAC7D;AAAA,YACC,cACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,2BAA2B,QAAW,cAAc,GACzD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,uBAAY;AAAA,eAC/C,IACE;AAAA,YACH,cACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,2BAA2B,QAAW,cAAc,GACzD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,uBAAY;AAAA,eAC/C,IACE;AAAA,YACH,qBACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,kCAAkC,QAAW,qBAAqB,GACvE;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,8BAAmB;AAAA,eACtD,IACE;AAAA,YACH,uBACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,oCAAoC,QAAW,UAAU,GAC9D;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,gCAAqB;AAAA,eACxD,IACE;AAAA,YACH,qBACC,gBAAAC,OAAC,SAAI,WAAU,iCACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,kCAAkC,QAAW,eAAe,GACjE;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,8BAAmB;AAAA,eACtD,IACE;AAAA,YACH,eACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,yCAAyC,QAAW,eAAe,GACxE;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,wBAAa;AAAA,eAChD,IACE;AAAA,YACH,mBACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,2CAA2C,QAAW,iBAAiB,GAC5E;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,4BAAiB;AAAA,eACpD,IACE;AAAA,YACH,WACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,wBAAwB,QAAW,WAAW,GACnD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,oBAAS;AAAA,eAC5C,IACE;AAAA,YACH,YACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,yBAAyB,QAAW,YAAY,GACrD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,qBAAU;AAAA,eAC7C,IACE;AAAA,YACH,mBACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,gCAAgC,QAAW,mBAAmB,GACnE;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,4BAAiB;AAAA,eACpD,IACE;AAAA,aACN,IACE;AAAA,UAEH,qBACC,gBAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,4BAA4B,QAAW,eAAe,GAC3D;AAAA,YACA,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,wBAAwB,QAAW,WAAW,GACnD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBACb;AAAA,gBACC;AAAA,gBACA,EAAE,OAAO,mBAAmB,gBAAgB;AAAA,gBAC5C,GAAG,mBAAmB,eAAe;AAAA,cACvC,GACF;AAAA,eACF;AAAA,YACC,mBAAmB,iCAAiC,IACnD,gBAAAC,OAAC,SAAI,WAAU,iCACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,qBAAqB,QAAW,QAAQ,GAC7C;AAAA,cACA,gBAAAA,MAAC,SAAI,WAAU,kCACb,0BAAAA,MAAC,SACE;AAAA,gBACC;AAAA,gBACA,EAAE,OAAO,mBAAmB,+BAA+B;AAAA,gBAC3D,GAAG,mBAAmB,8BAA8B;AAAA,cACtD,GACF,GACF;AAAA,eACF,IACE;AAAA,YACH,mBAAmB,wBAAwB,IAC1C,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,wBAAwB,QAAW,WAAW,GACnD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBACb,6BAAmB,uBACtB;AAAA,eACF,IACE;AAAA,YACH,mBAAmB,uBAAuB,IACzC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,2BAA2B,QAAW,cAAc,GACzD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,iBACb,6BAAmB,sBACtB;AAAA,eACF,IACE;AAAA,YACH,mBAAmB,8BAA8B,IAChD,gBAAAC,OAAC,SAAI,WAAU,iCACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,sBAAsB,QAAW,SAAS,GAC/C;AAAA,cACA,gBAAAA,MAAC,SAAI,WAAU,kCACb,0BAAAA,MAAC,SACE;AAAA,gBACC;AAAA,gBACA,EAAE,OAAO,mBAAmB,4BAA4B;AAAA,gBACxD,GAAG,mBAAmB,2BAA2B;AAAA,cACnD,GACF,GACF;AAAA,eACF,IACE;AAAA,YACH,mBAAmB,QAAQ,SAAS,IACnC,gBAAAC,OAAC,SAAI,WAAU,iCACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,sBAAsB,QAAW,SAAS,GAC/C;AAAA,cACA,gBAAAA,MAAC,SAAI,WAAU,kCACZ,6BAAmB,QAAQ,IAAI,CAAC,SAC/B,gBAAAC,OAAC,SACC;AAAA,gCAAAD,MAAC,YAAQ,eAAK,iBAAgB;AAAA,gBAAU;AAAA,gBACvC,EAAE,kBAAkB,QAAW,KAAK;AAAA,gBAAE;AAAA,gBAAC,gBAAAA,MAAC,UAAM,eAAK,WAAU;AAAA,gBAC7D,KAAK,8BAA8B,IAChC,SAAM;AAAA,kBACJ;AAAA,kBACA,EAAE,OAAO,KAAK,4BAA4B;AAAA,kBAC1C,GAAG,KAAK,2BAA2B;AAAA,gBACrC,CAAC,KACD;AAAA,gBACH,KAAK,wBAAwB,IAC1B,SAAM;AAAA,kBACJ;AAAA,kBACA,EAAE,OAAO,KAAK,sBAAsB;AAAA,kBACpC,GAAG,KAAK,qBAAqB;AAAA,gBAC/B,CAAC,KACD;AAAA,gBACH,KAAK,uBAAuB,IACzB,SAAM;AAAA,kBACJ;AAAA,kBACA,EAAE,OAAO,KAAK,qBAAqB;AAAA,kBACnC,GAAG,KAAK,oBAAoB;AAAA,gBAC9B,CAAC,KACD;AAAA,mBAvBI,KAAK,SAwBf,CACD,GACH;AAAA,eACF,IACE;AAAA,aACN,IACE;AAAA,UAEH,gBAAgB,iBAAiB,cAChC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MAAM;AACb,oBAAI,KAAK,WAAW;AAClB,2BAAS;AAAA,oBACP,UAAU,aACN,WAAW,mBAAmB,aAAa,cAAc,CAAC,IAAI,mBAAmB,OAAO,cAAc,EAAE,CAAC,CAAC,KAC1G,uBAAuB,mBAAmB,aAAa,cAAc,CAAC,IAAI,mBAAmB,OAAO,cAAc,EAAE,CAAC,CAAC;AAAA,oBAC1H,QAAQ;AAAA,kBACV,CAAC;AACD;AAAA,gBACF;AACA,qBAAK,WAAW;AAAA,kBACd,gBAAgB,aAAa;AAAA,kBAC7B,UAAUK,YAAW,cAAc,EAAE;AAAA,kBACrC,QAAQ,OAAO,UAAU,EAAE;AAAA,kBAC3B,WAAW,OAAO,KAAK;AAAA,kBACvB,YACE,uBAAuB,eAAe,OAAc,MAAM,KAC1DA,YAAW,eAAe,WAAW,KACrCA,YAAW,eAAe,IAAI,KAC9B,EAAE,iBAAiB,QAAW,QAAQ;AAAA,kBACxC,UAAUA,YAAW,eAAe,cAAc;AAAA,gBACpD,CAAC;AAAA,cACH;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,WAGA,KAAK,oBAAoB,SAAS,sBAAsB,SAAS,MACjE,gBAAAJ,OAAC,SAAI,WAAU,oCACb;AAAA,4BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,uBAAuB,QAAW,UAAU,GACjD;AAAA,YACC,KAAK,oBAAoB,SACxB,gBAAAC,OAACW,OAAA,EAAK,IAAI,YAAY,UAAS,QAAO,WAAU,oBAC9C;AAAA,8BAAAZ,MAAC,SAAI,WAAU,wDACb,0BAAAC;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,QAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,eAAc;AAAA,kBACd,gBAAe;AAAA,kBAEf;AAAA,oCAAAD,MAAC,UAAK,GAAE,8DAA6D;AAAA,oBACrE,gBAAAA,MAAC,cAAS,QAAO,kBAAiB;AAAA,oBAClC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK;AAAA,oBACrC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK;AAAA;AAAA;AAAA,cACvC,GACF;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,0BACb,YAAE,2BAA2B,QAAW,UAAU,GACrD;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,0BAAyB,oBAAC;AAAA,eAC5C;AAAA,YAED,sBAAsB,IAAI,CAAC,YAAmC;AAC7D,oBAAM,YACJ,YAAY,aACR,mCACA,YAAY,aACV,mCACA;AACR,qBACE,gBAAAC;AAAA,gBAACW;AAAA,gBAAA;AAAA,kBAEC,IAAI,4BAA4B;AAAA,oBAC9B;AAAA,oBACA,QAAQ,OAAO,UAAU,EAAE;AAAA,oBAC3B;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,kBACD,WAAU;AAAA,kBAEV;AAAA,oCAAAZ,MAAC,SAAI,WAAW,yBAAyB,SAAS,IAC/C,sBAAY,aACX,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,QAAO;AAAA,wBACP,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf;AAAA,0CAAAD,MAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,IAAG,KAAI;AAAA,0BACvD,gBAAAA,MAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,oBACvC,IACE,YAAY,aACd,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,QAAO;AAAA,wBACP,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf;AAAA,0CAAAD,MAAC,UAAK,GAAE,8DAA6D;AAAA,0BACrE,gBAAAA,MAAC,cAAS,QAAO,kBAAiB;AAAA,0BAClC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK;AAAA,0BACrC,gBAAAA,MAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK;AAAA,0BACrC,gBAAAA,MAAC,cAAS,QAAO,gBAAe;AAAA;AAAA;AAAA,oBAClC,IAEA,gBAAAC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,QAAO;AAAA,wBACP,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,eAAc;AAAA,wBACd,gBAAe;AAAA,wBAEf;AAAA,0CAAAD,MAAC,UAAK,GAAE,+CAA8C;AAAA,0BACtD,gBAAAA,MAAC,UAAK,GAAE,8BAA6B;AAAA;AAAA;AAAA,oBACvC,GAEJ;AAAA,oBACA,gBAAAA,MAAC,UAAK,WAAU,0BACb,8CAAoC,OAAO,GAC9C;AAAA,oBACA,gBAAAA,MAAC,UAAK,WAAU,0BAAyB,oBAAC;AAAA;AAAA;AAAA,gBA5DrC;AAAA,cA6DP;AAAA,YAEJ,CAAC;AAAA,aACH;AAAA,UAGF,gBAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,4BAAAD,MAAC,QAAG,WAAU,4CACX,YAAE,sBAAsB,QAAW,SAAS,GAC/C;AAAA,YAEA,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,qBAAqB,QAAW,QAAQ,GAC7C;AAAA,cACA,gBAAAA,MAAC,UAAK,WAAU,8BAA8B,kBAAO;AAAA,eACvD;AAAA,YAEA,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBAAiB,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,cACzE,gBAAAA,MAAC,UAAK,WAAU,iBACb,yBACG,EAAE,qBAAqB,QAAW,OAAO,IACzC,EAAE,yBAAyB,QAAW,WAAW,GACvD;AAAA,eACF;AAAA,YAEC,cACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBACb,YAAE,wBAAwB,QAAW,WAAW,GACnD;AAAA,cACA,gBAAAA,MAACY,OAAA,EAAK,IAAI,aAAoB,WAAU,iBACrC,yBACH;AAAA,eACF,IACE;AAAA,YAEH,aAAa,SAAS,KACrB,gBAAAX,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,iBAAiB,YAAE,mBAAmB,QAAW,MAAM,GAAE;AAAA,cACzE,gBAAAA,MAAC,SAAI,WAAU,eACZ,uBAAa,IAAI,CAACa,OACjB,gBAAAb,MAAC,UAAa,WAAU,UACrB,UAAAa,MADQA,EAEX,CACD,GACH;AAAA,eACF;AAAA,YAGD,iBACC,gBAAAb,MAAC,SAAI,WAAU,6BACb,0BAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM;AACb,iCAAe,MAAM;AACrB,+BAAa,IAAI;AAAA,gBACnB;AAAA,gBAEC;AAAA,oBAAE,mBAAmB,QAAW,yBAAyB;AAAA,kBAAE;AAAA;AAAA;AAAA,YAC9D,GACF;AAAA,aAEJ;AAAA,WACF;AAAA,SACF;AAAA,MAEC,aACC,gBAAAD,MAAC,SAAI,WAAU,4BAA2B,SAAS,MAAM,aAAa,KAAK,GACzE,0BAAAC,OAAC,SAAI,WAAU,mCAAkC,SAAS,CAAC,MAAM,EAAE,gBAAgB,GACjF;AAAA,wBAAAA,OAAC,SAAI,WAAU,wBACb;AAAA,0BAAAD,MAAC,QAAG,WAAU,2CAA2C,sBAAW;AAAA,UACpE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,aAAa,KAAK;AAAA,cACjC,WAAU;AAAA,cACV,cAAY,EAAE,2BAA2B,QAAW,oBAAoB;AAAA,cACzE;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QAEA,gBAAAC,OAAC,SAAI,WAAU,wBACZ;AAAA,uBACC,gBAAAD,MAAC,SAAI,WAAU,uCAAuC,qBAAU;AAAA,UAEjE,YACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM;AAAA,cACN,QAAO;AAAA,cACP,KAAI;AAAA,cACJ,WAAU;AAAA,cAET,YAAE,2BAA2B,QAAW,oBAAoB;AAAA;AAAA,UAC/D;AAAA,WAGA,gBAAgB,aAAa,gBAAgB,aAC7C,gBAAAC,OAAC,WAAM,WAAU,0BACf;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,UAAU,CAAC,MAAM,iBAAiB,EAAE,OAAO,OAAO;AAAA,gBAClD,WAAU;AAAA;AAAA,YACZ;AAAA,YACA,gBAAAA,MAAC,UAAK,WAAU,wBACb;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF,GACF;AAAA,aACF;AAAA,WAEJ;AAAA,QAEA,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD,MAAC,YAAO,WAAU,yBAAwB,SAAS,MAAM,aAAa,KAAK,GACxE,YAAE,iBAAiB,QAAW,QAAQ,GACzC;AAAA,UACC,gBAAgB,YACf,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU,CAAC;AAAA,cACX,SAAS,MAAM;AACb,qBAAK,eAAe;AAAA,kBAClB,QAAQ,OAAO,UAAU,EAAE;AAAA,kBAC3B,iBAAiBK,YAAW,eAAe,EAAE,KAAK;AAAA,kBAClD,WAAW,KAAK,aAAa;AAAA,kBAC7B,eAAe;AAAA,gBACjB,CAAC;AACD,6BAAa,KAAK;AAClB,+BAAe,MAAM;AAAA,cACvB;AAAA,cAEC,YAAE,uBAAuB,QAAW,kBAAkB;AAAA;AAAA,UACzD,IACE,gBAAgB,WAClB,gBAAAL;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU,CAAC,iBAAiB,CAAC;AAAA,cAC7B,SAAS,MAAM;AACb,oBAAI,CAAC,aAAc;AACnB,qBAAK,gBAAgB;AAAA,kBACnB,gBAAgB,aAAa;AAAA,kBAC7B,QAAQ,OAAO,UAAU,EAAE;AAAA,kBAC3B,eAAe;AAAA,gBACjB,CAAC;AACD,6BAAa,KAAK;AAClB,+BAAe,MAAM;AAAA,cACvB;AAAA,cAEC,YAAE,sBAAsB,QAAW,iBAAiB;AAAA;AAAA,UACvD,IACE;AAAA,WACN;AAAA,SACF,GACF;AAAA,MAGF,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,EAAE,4BAA4B,QAAW,aAAa;AAAA,UAC7D,aAAa;AAAA,YACX;AAAA,YACA,EAAE,MAAM;AAAA,YACR,UAAU,KAAK;AAAA,UACjB;AAAA,UACA,cAAc;AAAA,UACd,UAAU,MAAM,qBAAqB,KAAK;AAAA,UAC1C,WAAW,MAAM;AACf,gBAAI,CAAC,KAAK,oBAAoB,CAAC,cAAc,eAAgB;AAC7D,iBAAK,iBAAiB;AAAA,cACpB,gBAAgB,aAAa;AAAA,cAC7B,QAAQ,OAAO,UAAU,EAAE;AAAA,YAC7B,CAAC;AACD,iCAAqB,KAAK;AAAA,UAC5B;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AEvmDA,SAAS,aAAAc,aAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AAC5C,SAAS,QAAAC,QAAM,eAAAC,cAAa,eAAAC,cAAa,aAAAC,kBAAiB;AAgxBhD,SAIE,YAAAC,WAJF,OAAAC,OAIE,QAAAC,cAJF;AA/uBV,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,SAAS,0BAA0B,QAAiC;AAClE,QAAM,MAAM,IAAI,gBAAgB;AAChC,QAAM,KAAK,IAAI,gBAAgB,OAAO,UAAU,EAAE,CAAC;AACnD,aAAW,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,GAAG;AACjC,QAAI,EAAE,WAAW,gBAAgB,EAAG,KAAI,IAAI,GAAG,CAAC;AAAA,EAClD;AACA,MAAI,MAAM,KAAK,IAAI,KAAK,CAAC,EAAE,SAAS,EAAG,QAAO;AAC9C,QAAM,gBAAgB,kBAAkB,MAAM;AAC9C,MAAI,CAAC,cAAe,QAAO;AAC3B,MAAI;AACF,UAAM,OAAO,IAAI,IAAI,aAAa;AAClC,eAAW,CAAC,GAAG,CAAC,KAAK,KAAK,aAAa,QAAQ,GAAG;AAChD,UAAI,EAAE,WAAW,gBAAgB,EAAG,KAAI,IAAI,GAAG,CAAC;AAAA,IAClD;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,mBACP,OACA,GACkB;AAClB,QAAM,OAAO,SAAS,KAAK;AAC3B,QAAM,SAAS,WAAW,KAAK,MAAM,EAAE,YAAY;AACnD,QAAM,UAAU,gBAAgB,KAAK,OAAO;AAE5C,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,MACL,OAAO,EAAE,8BAA8B,QAAW,eAAe;AAAA,MACjE,SACE,WACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACJ;AAAA,EACF;AAEA,MAAI,WAAW,wBAAwB;AACrC,WAAO;AAAA,MACL,OAAO,EAAE,gCAAgC,QAAW,wBAAwB;AAAA,MAC5E,SACE,WACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,EAAE,gCAAgC,QAAW,wBAAwB;AAAA,IAC5E,SACE,WACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AACF;AAEO,SAAS,aAAa;AAC3B,QAAM,EAAE,QAAQ,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,EAAE,GAAG,OAAO,IAAI,mBAAmB;AACzC,QAAM,EAAE,gBAAgB,SAAS,IAAIC,WAAU;AAC/C,QAAM,QAAQF,eAAc;AAC5B,QAAM,YAAYG,QAA0B,IAAI;AAChD,QAAM,WAAWA,QAAuB,IAAI;AAC5C,QAAM,qBAAqBA,QAAO,CAAC;AACnC,QAAM,yBAAyBA,QAAyC,oBAAI,IAAI,CAAC;AACjF,QAAM,CAAC,WAAW,YAAY,IAAIC,UAAiB,EAAE;AACrD,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAiB,EAAE;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAmC,IAAI;AAC3E,QAAM,CAAC,+BAA+B,gCAAgC,IAAIA,UAExE,CAAC,CAAC;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAiB,EAAE;AACzD,QAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAQ9C,IAAI;AACd,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAkC,IAAI;AAClF,QAAM,CAAC,uBAAuB,wBAAwB,IAAIA,UAAsB,QAAQ;AAExF,QAAM,MAAMH,aAAY;AACxB,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAC/D,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AACtD,QAAM,WAAWI,aAAY;AAE7B,QAAM,gBAAgB;AAAA,IACpB,UAAU,aAAa,MAAM;AAAA,IAC7B,QAAQ;AAAA,EACV;AAEA,QAAM,SAAS,SACX;AAAA,IACE,UAAU,aACN,UAAU,mBAAmB,MAAM,CAAC,KACpC,sBAAsB,mBAAmB,MAAM,CAAC;AAAA,IACpD,QAAQ;AAAA,EACV,IACA;AACJ,QAAM,6BAA6B,8BAA8B;AAAA,IAC/D,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,4BAA4B,MAAM;AAAA,IACtC,oBAAI,IAAI,CAAC,GAAG,4BAA4B,GAAG,6BAA6B,CAAC;AAAA,EAC3E;AAEA,QAAM,iBAAiB,MAAM;AAC3B,SAAK,mBAAmB;AAAA,MACtB,MAAM;AAAA,MACN,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,EAAAC,YAAU,MAAM;AACd,QAAI,CAAC,eAAgB;AACrB,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,WAAW,KAAK,yBAAyB;AAC/C,cAAM,OAAO,OAAO,OAAO,YAAY,CAAC,CAAC,EAAE;AAAA,UACzC,CAAC,MAAM,KAAK,OAAO,EAAE,cAAc,MAAM,OAAO,cAAc;AAAA,QAChE;AACA,YAAI,QAAQ,KAAK,QAAQ;AACvB,cAAI,CAAC,MAAO;AACZ,oBAAU,KAAK,MAAM;AACrB,gBAAM,MAAM,MAAM,OAAO,eAAe,KAAK,QAAQ;AAAA,YACnD,gBAAgB,OAAO,kBAAkB,EAAE,EAAE,KAAK,KAAK;AAAA,UACzD,CAAC;AACD,cAAI,CAAC,MAAO;AACZ,wBAAc,GAAG;AACjB,gBAAM,SAAS,SAAS,GAAG;AAC3B;AAAA,YACE,uBAAuB,SAAS,OAAO,QAAQ,EAAE,OAAc,MAAM,KACnE,gBAAgB,SAAS,OAAO,IAAI,EAAE,IAAI,KAC1C;AAAA,UACJ;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAAC;AAAA,IACX,GAAG;AACH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,gBAAgB,QAAQ,MAAM,MAAM,CAAC;AAEzC,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ;AACX,uCAAiC,CAAC,CAAC;AACnC;AAAA,IACF;AACA,QAAI,YAAY;AAChB,UAAM,YAAY;AAChB,YAAM,aAAa,MAAM,+BAA+B;AAAA,QACtD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,CAAC,WAAW;AACd,yCAAiC,UAAU;AAAA,MAC7C;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,QAAQ,gBAAgB,MAAM,CAAC;AAEnC,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,KAAK,iBAAkB;AAC5D,SAAK,iBAAiB;AAAA,MACpB,MAAM,OAAO,SAAS;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ,EAAE,gBAAgB,SAAS;AAAA,IACrC,CAAC;AAAA,EACH,GAAG,CAAC,gBAAgB,UAAU,IAAI,CAAC;AAEnC,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,kBAAkB,CAAC,SAAU;AAClC,QAAI,QAAQ;AACZ,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI,MAAM,OAAO,eAAe,gBAAgB,QAAQ;AACvF,YAAI,CAAC,MAAO;AACZ,0BAAkB,IAAI;AACtB,uBAAe,MAAM;AACrB,gCAAwB,WAAW,IAAI;AAAA,MACzC,SAAS,GAAG;AACV,YAAI,CAAC,MAAO;AACZ,gCAAwB,IAAI;AAC5B,iBAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MAC5D;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,gBAAgB,UAAU,MAAM,CAAC;AAErC,iBAAe,sBAAsB;AACnC,QAAI,CAAC,kBAAkB,CAAC,UAAU;AAChC,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AACA,UAAM,YAAY,MAAM,OAAO,eAAe,gBAAgB,QAAQ;AACtE,UAAM,YAAY,OAAO,WAAW,SAAS,EAAE,EAAE,KAAK;AACtD,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,sBAAkB,IAAI;AACtB,mBAAe,SAAS;AACxB,4BAAwB,WAAW,WAAW,IAAI;AAClD,WAAO;AAAA,MACL,OAAO;AAAA,MACP,YACE,OAAO,SAAS,OAAO,WAAW,UAAU,CAAC,KAAK,OAAO,WAAW,UAAU,IAAI,IAC9E,OAAO,WAAW,UAAU,IAC5B;AAAA,IACR;AAAA,EACF;AAEA,WAAS,2BAA2B;AAClC,UAAM,UAAU;AAChB,QAAI,CAAC,WAAW,CAAC,YAAa,QAAO;AACrC,UAAM,iBAAiB,MAAM,QAAQ,YAAY,OAAO,IACpD,WAAW,QAAQ,KAAK,CAAC,SAAS,OAAO,MAAM,MAAM,EAAE,MAAM,OAAO,YAAY,EAAE,CAAC,IACnF;AACJ,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,OAAO,SAAS;AAAA,MACzB,YAAY,OAAO,SAAS;AAAA,MAC5B,gBAAgB,QAAQ,kBAAkB,OAAO,kBAAkB,EAAE;AAAA,MACrE,UAAU,QAAQ;AAAA,MAClB,QAAQ,QAAQ,UAAU;AAAA,MAC1B,WAAW,QAAQ;AAAA,MACnB,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,cACE;AAAA,QACE,SAAS,cAAc,EAAE;AAAA,QACzB,SAAS,cAAc,EAAE;AAAA,MAC3B,KAAK;AAAA,MACP,OAAO,KAAK,SAAS;AAAA,MACrB,QAAQ,QAAQ,UAAU,KAAK,UAAU,KAAK,UAAU;AAAA,IAC1D;AAAA,EACF;AAEA,EAAAA,YAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,CAAC,EAAE,OAAO,KAAK,uBAAuB,SAAS;AACxD,eAAO,aAAa,QAAQ,SAAS;AACrC,YAAI,QAAQ,UAAW,QAAO,aAAa,QAAQ,SAAS;AAC5D,gBAAQ,QAAQ,IAAI;AAAA,MACtB;AACA,6BAAuB,QAAQ,MAAM;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAAA,YAAU,MAAM;AACd,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAS,OAAO,iBAAiB;AACvC,UAAM,SAAS,SAAS;AACxB,UAAM,SAAS,SAAS;AACxB,UAAM,WAAW,KAAK,aAAa,0BAA0B;AAE7D,QAAI,CAAC,SAAU;AAEf,UAAM,OAAO;AAAA,MACX,WAAW,OAAO,aAAa,OAAO;AAAA,MACtC,WAAW,OAAO,aAAa,OAAO;AAAA,MACtC,WAAW,QAAQ,aAAa,OAAO,KAAK;AAAA,IAC9C;AAEA,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,WAAW;AACxB,WAAO,MAAM,SAAS;AACtB,QAAI,QAAQ;AACV,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,UAAU;AACvB,aAAO,MAAM,gBAAgB;AAC7B,aAAO,MAAM,YAAY;AAAA,IAC3B;AAEA,WAAO,MAAM;AACX,UAAI,KAAK,aAAa,KAAM,QAAO,gBAAgB,OAAO;AAAA,UACrD,QAAO,aAAa,SAAS,KAAK,SAAS;AAChD,UAAI,KAAK,aAAa,KAAM,QAAO,gBAAgB,OAAO;AAAA,UACrD,QAAO,aAAa,SAAS,KAAK,SAAS;AAChD,UAAI,QAAQ;AACV,YAAI,KAAK,aAAa,KAAM,QAAO,gBAAgB,OAAO;AAAA,YACrD,QAAO,aAAa,SAAS,KAAK,SAAS;AAAA,MAClD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,WAAW,qBAAqB,CAAC;AAE1C,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,KAAK,UAAW;AACrB,UAAM,UAAU,CAAC,MAAoB;AACnC,UAAI,EAAE,WAAW,OAAO,OAAQ;AAChC,YAAM,MAAM,SAAS,EAAE,IAAI;AAC3B,YAAM,UAAU,WAAW,IAAI,IAAI;AACnC,UAAI,YAAY,yBAA0B;AAC1C,YAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,YAAM,cAAc,KAAK,gBAAgB;AACzC,YAAM,WAAW,KAAK,aAAa;AACnC,YAAM,QAAQ,qBAAqB,KAAK,OAAO,QAAQ;AACvD,+BAAyB,eAAe,WAAW,QAAQ,QAAQ;AAAA,IACrE;AAEA,WAAO,iBAAiB,WAAW,OAAO;AAC1C,WAAO,MAAM,OAAO,oBAAoB,WAAW,OAAO;AAAA,EAC5D,GAAG,CAAC,KAAK,SAAS,CAAC;AAEnB,EAAAA,YAAU,MAAM;AACd,UAAM,UAAU,CAAC,MAAoB;AACnC,YAAM,MAAM,SAAS,EAAE,IAAI;AAC3B,YAAM,UAAU,WAAW,IAAI,IAAI;AACnC,UAAI,CAAC,QAAQ,WAAW,QAAQ,EAAG;AACnC,YAAM,iBAAiB,EAAE,WAAW,OAAO;AAC3C,YAAM,qBAAqB,EAAE,WAAW,OAAO,SAAS;AACxD,UAAI,CAAC,kBAAkB,CAAC,mBAAoB;AAE5C,UAAI,YAAY,mCAAmC,gBAAgB;AACjE,cAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,cAAM,YAAY,WAAW,KAAK,SAAS;AAC3C,YAAI,CAAC,UAAW;AAChB,cAAM,UAAU,uBAAuB,QAAQ,IAAI,SAAS;AAC5D,YAAI,CAAC,QAAS;AACd,eAAO,aAAa,QAAQ,SAAS;AACrC,YAAI,QAAQ,UAAW,QAAO,aAAa,QAAQ,SAAS;AAC5D,YAAI,QAAQ,SAAS;AACnB,iCAAuB,QAAQ,OAAO,SAAS;AAC/C,kBAAQ,eAAe,GAAG;AAC1B;AAAA,QACF;AACA,gBAAQ,UAAU;AAClB,+BAAuB,QAAQ,OAAO,SAAS;AAC/C,gBAAQ,QAAQ,GAAG;AACnB;AAAA,MACF;AAEA,UAAI;AACF,kBAAU,SAAS,eAAe,YAAY,KAAK,GAAG;AAAA,MACxD,QAAQ;AAAA,MAAC;AAAA,IACX;AAEA,WAAO,iBAAiB,WAAW,OAAO;AAC1C,WAAO,MAAM,OAAO,oBAAoB,WAAW,OAAO;AAAA,EAC5D,GAAG,CAAC,CAAC;AAEL,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,YAAa;AAElB,UAAM,2BAA2B,CAC/B,QACA,WAGG;AACH,UAAI,CAAC,UAAU,OAAO,OAAO,gBAAgB,WAAY;AACzD,UAAI;AACF,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,GAAG;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAAC;AAAA,IACX;AAEA,UAAM,0BAA0B,OAC9B,cACA,OACA,eAAkE,SACtB;AAC5C,UAAI,CAAC,KAAK,aAAa,OAAO,WAAW,OAAQ,QAAO;AACxD,YAAM,YAAY,oBAAoB,KAAK,IAAI,CAAC,IAAI,EAAE,mBAAmB,OAAO;AAChF,YAAM,UAAU;AAAA,QACd;AAAA,QACA,QAAQ;AAAA,QACR,gBAAgB,iBAAiB,OAAO,cAAc,IAAI;AAAA,QAC1D,UAAU,WAAW,OAAO,QAAQ,IAAI;AAAA,QACxC,UAAU,QAAQ,MAAM,QAAQ;AAAA,QAChC,OAAO,qBAAqB,MAAM,OAAO,QAAQ,MAAM,QAAQ,CAAC;AAAA,QAChE,MAAM,MAAM,SAAS,YAAY,MAAM,SAAS,aAAa,OAAO,MAAM,IAAI,IAAI;AAAA,QAClF,MAAM,OAAO,SAAS;AAAA,MACxB;AAEA,YAAM,WAAW,MAAM,IAAI,QAAwC,CAAC,YAAY;AAC9E,cAAM,UAA+B;AAAA,UACnC;AAAA,UACA,WAAW;AAAA,UACX,WAAW;AAAA,UACX,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AACA,gBAAQ,YAAY,OAAO,WAAW,MAAM;AAC1C,kBAAQ,UAAU;AAClB,kBAAQ,YAAY,OAAO,WAAW,MAAM;AAC1C,mCAAuB,QAAQ,OAAO,SAAS;AAAA,UACjD,GAAG,GAAI;AACP,kBAAQ,IAAI;AAAA,QACd,GAAG,IAAI;AACP,+BAAuB,QAAQ,IAAI,WAAW,OAAO;AACrD,YAAI;AACF,iBAAO,OAAO;AAAA,YACZ;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF,QAAQ;AACN,iBAAO,aAAa,QAAQ,SAAS;AACrC,cAAI,QAAQ,UAAW,QAAO,aAAa,QAAQ,SAAS;AAC5D,iCAAuB,QAAQ,OAAO,SAAS;AAC/C,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,CAAC,MAAoB;AACnC,YAAM,MAAM,SAAS,EAAE,IAAI;AAC3B,YAAM,UAAU,WAAW,IAAI,IAAI;AACnC,UAAI,CAAC,QAAQ,WAAW,QAAQ,EAAG;AAQnC,UACE,YAAY,6BACZ,KAAK,aACL,EAAE,WAAW,UAAU,SAAS,eAChC;AACA,cAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,cAAM,YAAY;AAChB,gBAAM,oBAAoB,KAAK,aAAa;AAC5C,gBAAM,iBAAiB,qBAAqB,KAAK,OAAO,iBAAiB;AACzE,gBAAM,0BAA0B,CAACC,gBAAwD;AACvF,gBACE,CAACA,eACDA,YAAW,SAAS,mCACpBA,YAAW,OAAO,QAClB,CAACA,YAAW,QACZ,OAAOA,YAAW,SAAS,UAC3B;AACA,qBAAO;AAAA,YACT;AACA,kBAAM,aAAaA,YAAW;AAC9B,kBAAM,cAAc,WAAW,gBAAgB;AAC/C,kBAAM,WAAW,WAAW,aAAa;AACzC,kBAAM,QAAQ,qBAAqB,WAAW,OAAO,QAAQ;AAC7D,qCAAyB,eAAe,WAAW,QAAQ,QAAQ;AACnE,qCAAyB,EAAE,QAAyB;AAAA,cAClD,IAAI;AAAA,cACJ,MAAM;AAAA,gBACJ;AAAA,gBACA,UAAU,eAAe;AAAA,gBACzB,OAAO,cAAc,QAAQ;AAAA,gBAC7B,GAAI,WAAW,qBAAqB,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAAA,cAC3E;AAAA,YACF,CAAC;AACD,mBAAO;AAAA,UACT;AAGA,mCAAyB,oBAAoB,iBAAiB,QAAQ;AACtE,gBAAM,aAAa,MAAM;AAAA,YACvB,EAAE;AAAA,YACF;AAAA,YACA,CAAC,aAAa;AACZ,kBAAI,wBAAwB,QAAQ,EAAG;AACvC,uCAAyB,QAAQ;AAAA,YACnC;AAAA,UACF;AACA,cAAI,wBAAwB,UAAU,GAAG;AACvC;AAAA,UACF;AAEA,mCAAyB,QAAQ;AAAA,QACnC,GAAG;AACH;AAAA,MACF;AAEA,UAAI,YAAY,4BAA4B;AAC1C,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,gBAAM,YAAY,IAAI;AACtB,gBAAM,SAAS;AAAA,YACb,KAAK,WACH;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACJ;AACA,gBAAM,YAAY,OAAO,OAAO,YAAY,aAAa,OAAO,QAAQ,MAAM,IAAI;AAClF,cAAI;AACF,YAAC,EAAE,QAA0B;AAAA,cAC3B;AAAA,gBACE,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,MAAM,EAAE,UAAU;AAAA,cACpB;AAAA,cACA;AAAA,YACF;AAAA,UACF,QAAQ;AAAA,UAAC;AACT;AAAA,QACF;AACA,YAAI,EAAE,WAAW,OAAQ;AACzB,YAAI;AACF,iBAAO,OAAO,YAAY,KAAK,GAAG;AAAA,QACpC,QAAQ;AAAA,QAAC;AACT;AAAA,MACF;AAEA,UACE,YAAY,iCACZ,EAAE,WAAW,UAAU,SAAS,eAChC;AACA,cAAM,YAAY;AAChB,cAAI;AACF,kBAAM,YAAY,MAAM,oBAAoB;AAC5C,gBAAI;AACF,cAAC,EAAE,QAA0B;AAAA,gBAC3B;AAAA,kBACE,MAAM;AAAA,kBACN,IAAI,WAAW,IAAI,EAAE,KAAK;AAAA,kBAC1B,MAAM;AAAA,oBACJ,OAAO,UAAU;AAAA,oBACjB,GAAI,OAAO,UAAU,eAAe,WAChC,EAAE,YAAY,UAAU,WAAW,IACnC,CAAC;AAAA,kBACP;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF,QAAQ;AAAA,YAAC;AAAA,UACX,SAAS,cAAc;AACrB,kBAAM,mBAAmB;AAAA,cACvB;AAAA,gBACE,QAAQ;AAAA,gBACR,SACE,gBAAgB,SAAS,YAAY,EAAE,OAAO,KAC9C;AAAA,cACJ;AAAA,cACA;AAAA,YACF;AACA,8BAAkB,gBAAgB;AAClC,2BAAe,EAAE;AACjB,gBAAI;AACF,cAAC,EAAE,QAA0B;AAAA,gBAC3B;AAAA,kBACE,MAAM;AAAA,kBACN,IAAI,WAAW,IAAI,EAAE,KAAK;AAAA,kBAC1B,MAAM;AAAA,oBACJ,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,aAAa;AAAA,oBACb,SAAS,iBAAiB;AAAA,kBAC5B;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF,QAAQ;AAAA,YAAC;AAAA,UACX;AAAA,QACF,GAAG;AACH;AAAA,MACF;AAEA,WACG,YAAY,kCAAkC,YAAY,yBAC3D,EAAE,WAAW,UAAU,SAAS,eAChC;AACA,YAAI;AACF,gBAAM,UAAU,yBAAyB;AACzC,UAAC,EAAE,QAA0B;AAAA,YAC3B,WAAW;AAAA,cACT,MAAM;AAAA,cACN,QAAQ,KAAK,UAAU;AAAA,YACzB;AAAA,YACA;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAAC;AACT;AAAA,MACF;AAEA,UAAI,YAAY,yBAAyB;AACvC,0BAAkB,mBAAmB,IAAI,MAAM,CAAC,CAAC;AACjD,uBAAe,EAAE;AACjB;AAAA,MACF;AAEA,UAAI,YAAY,qBAAqB;AACnC,YAAI,EAAE,WAAW,OAAQ;AAEzB,cAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,cAAM,eAAe,gBAAgB,KAAK,gBAAgB,cAAc;AACxE,cAAM,iBAAiB,gBAAgB,KAAK,QAAQ;AAEpD,YAAI,kBAAkB,KAAK,WAAW;AACpC,mBAAS;AAAA,YACP,UAAU,aACN,WAAW,mBAAmB,YAAY,CAAC,IAAI,mBAAmB,cAAc,CAAC,KACjF,uBAAuB,mBAAmB,YAAY,CAAC,IAAI,mBAAmB,cAAc,CAAC;AAAA,YACjG,QAAQ;AAAA,UACV,CAAC;AACD;AAAA,QACF;AAGA,YAAI;AACF,iBAAO,OAAO,YAAY,KAAK,GAAG;AAAA,QACpC,QAAQ;AAAA,QAAC;AACT;AAAA,MACF;AAEA,UAAI,YAAY,kCAAkC;AAChD,YAAI,EAAE,WAAW,OAAQ;AAEzB,cAAM,OAAO,SAAS,IAAI,IAAI;AAC9B,cAAM,UAAU,WAAW,KAAK,OAAO,EAAE,YAAY;AACrD,cAAM,YACJ,KAAK,cAAc,eACnB,KAAK,cAAc,gBACnB,KAAK,cAAc,cACf,KAAK,YACL,mCAAmC;AAAA,UACjC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAEP,YACE,KAAK,aACL,UACA,CAAC,YAAY,YAAY,YAAY,eAAe,EAAE,SAAS,OAAO,KACtE,cAAc,aACd;AACA;AAAA,YACE,4BAA4B;AAAA,cAC1B;AAAA,cACA;AAAA,cACA,gBAAgB,OAAO,KAAK,kBAAkB,kBAAkB,EAAE;AAAA,cAClE,WAAW,OAAO,KAAK,aAAa,EAAE;AAAA,cACtC,kBAAkB,OAAO,KAAK,oBAAoB,EAAE;AAAA,cACpD,WAAW,OAAO,KAAK,aAAa,EAAE;AAAA,cACtC,gBAAgB,OAAO,KAAK,kBAAkB,EAAE;AAAA,cAChD,OAAO,SAAS;AAAA,cAChB;AAAA,YACF,CAAC;AAAA,UACH;AACA;AAAA,QACF;AAEA,YAAI;AACF,iBAAO,OAAO,YAAY,KAAK,GAAG;AAAA,QACpC,QAAQ;AAAA,QAAC;AACT;AAAA,MACF;AAIA,UAAI,EAAE,WAAW,OAAQ;AACzB,UAAI;AACF,eAAO,OAAO,YAAY,KAAK,GAAG;AAAA,MACpC,QAAQ;AAAA,MAAC;AAAA,IACX;AAEA,WAAO,iBAAiB,WAAW,OAAO;AAC1C,WAAO,MAAM,OAAO,oBAAoB,WAAW,OAAO;AAAA,EAC5D,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,EAAAD,YAAU,MAAM;AACd,QAAI,CAAC,eAAe,CAAC,KAAK,OAAQ;AAClC,QAAI;AACF,gBAAU,SAAS,eAAe;AAAA,QAChC;AAAA,UACE,MAAM;AAAA,UACN,QAAQ,IAAI;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX,GAAG,CAAC,KAAK,QAAQ,WAAW,CAAC;AAE7B,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,YAAY,CAAC;AACzD,UAAM,gBAAgB,kBAAkB,IAAI,MAAM;AAClD,QAAI,cAAe,QAAO,IAAI,yBAAyB,aAAa;AACpE,QAAI,KAAK,aAAa,0BAA0B,UAAU;AACxD,aAAO,IAAI,sBAAsB,GAAG;AAAA,IACtC,OAAO;AACL,aAAO,OAAO,oBAAoB;AAAA,IACpC;AACA,UAAM,gBAAgB,0BAA0B,IAAI,MAAM;AAC1D,eAAW,CAAC,GAAG,CAAC,KAAK,cAAc,QAAQ,GAAG;AAC5C,aAAO,IAAI,GAAG,CAAC;AAAA,IACjB;AACA,WAAO,kBAAkB,QAAQ,IAAI,OAAO,SAAS,CAAC;AAAA,EACxD,GAAG;AAEH,MAAI,OAAO;AACT,WACE,gBAAAP,OAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,sBAAAA,OAAC,SAAI,WAAU,iBACb;AAAA,wBAAAD,MAAC,YAAO,WAAU,0BAAyB,SAAS,gBACjD,YAAE,iBAAiB,QAAW,QAAQ,GACzC;AAAA,QACC,CAAC,KAAK,kBACL,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,eACP,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,WACF;AAAA,QAEF,gBAAAV,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,MAAC,UAAM,YAAE,gBAAgB,QAAW,OAAO,GAAE;AAAA,SAC/C;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,yBACZ,YAAE,yBAAyB,QAAW,uBAAuB,GAChE;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,wBAAwB,iBAAM;AAAA,QAC7C,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD,MAACU,QAAA,EAAK,IAAI,eAAsB,WAAU,yBACvC,YAAE,8BAA8B,QAAW,qBAAqB,GACnE;AAAA,UACC,UACC,gBAAAV,MAACU,QAAA,EAAK,IAAI,QAAe,WAAU,uBAChC,YAAE,2BAA2B,QAAW,kBAAkB,GAC7D;AAAA,WAEJ;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,gBAAgB;AAClB,WACE,gBAAAT,OAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,sBAAAA,OAAC,SAAI,WAAU,iBACb;AAAA,wBAAAD,MAAC,YAAO,WAAU,0BAAyB,SAAS,gBACjD,YAAE,iBAAiB,QAAW,QAAQ,GACzC;AAAA,QACC,CAAC,KAAK,kBACL,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,eACP,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,WACF;AAAA,QAEF,gBAAAV,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,MAAC,UAAM,YAAE,kBAAkB,QAAW,SAAS,GAAE;AAAA,SACnD;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,yBAAyB,yBAAe,OAAM;AAAA,QAC7D,gBAAAA,MAAC,SAAI,WAAU,wBAAwB,yBAAe,SAAQ;AAAA,QAC9D,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD,MAACU,QAAA,EAAK,IAAI,eAAsB,WAAU,yBACvC,YAAE,8BAA8B,QAAW,qBAAqB,GACnE;AAAA,UACA,gBAAAV,MAAC,YAAO,WAAU,uBAAsB,SAAS,gBAC9C,YAAE,yBAAyB,QAAW,gBAAgB,GACzD;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,CAAC,aAAa;AAChB,WACE,gBAAAC,OAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,sBAAAA,OAAC,SAAI,WAAU,iBACb;AAAA,wBAAAD,MAAC,YAAO,WAAU,0BAAyB,SAAS,gBACjD,YAAE,iBAAiB,QAAW,QAAQ,GACzC;AAAA,QACC,CAAC,KAAK,kBACL,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,eACP,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,WACF;AAAA,QAEF,gBAAAV,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,QACrC,gBAAAA,MAAC,UAAM,uBAAa,EAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,SAC9D;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,4BAA2B;AAAA,QAC1C,gBAAAA,MAAC,SAAI,WAAU,2BACZ;AAAA,UACC;AAAA,UACA;AAAA,YACE,OAAO,aAAa,EAAE,iBAAiB,QAAW,QAAQ;AAAA,UAC5D;AAAA,UACA;AAAA,QACF,GACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF,GACF;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,6CAA6C,aAAa,gBAAgB,EAAE,IACrF,KAAK,aAAa,0BAA0B,WAAW,qBAAqB,EAC9E;AAAA,MACA,qBAAmB,KAAK,YAAY,wBAAwB;AAAA,MAE3D;AAAA,aAAK,aAAa,0BAA0B,YAC3C,gBAAAA,OAAC,SAAI,WAAU,mCACb;AAAA,0BAAAD,MAAC,YAAO,WAAU,0BAAyB,SAAS,gBACjD,YAAE,iBAAiB,QAAW,QAAQ,GACzC;AAAA,UACC,CAAC,KAAK,kBACL,gBAAAC,OAAAF,WAAA,EACE;AAAA,4BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,YACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,eACP,YAAE,sBAAsB,QAAW,aAAa,GACnD;AAAA,aACF;AAAA,UAED,UACC,gBAAAT,OAAAF,WAAA,EACE;AAAA,4BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,YACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,QAAgB,uBAAa,EAAE,cAAc,QAAW,KAAK,GAAE;AAAA,aAC3E;AAAA,UAEF,gBAAAV,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACrC,gBAAAA,MAAC,UAAM,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,WACjD;AAAA,QAED,CAAC,KAAK,aAAa,0BAA0B,YAC5C,gBAAAC,OAAC,SAAI,WAAU,iBACb;AAAA,0BAAAD,MAACU,QAAA,EAAK,IAAI,eAAuB,YAAE,sBAAsB,QAAW,aAAa,GAAE;AAAA,UAClF,UACC,gBAAAT,OAAAF,WAAA,EACE;AAAA,4BAAAC,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,YACrC,gBAAAA,MAACU,QAAA,EAAK,IAAI,QAAgB,uBAAa,EAAE,cAAc,QAAW,KAAK,GAAE;AAAA,aAC3E;AAAA,UAEF,gBAAAV,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACrC,gBAAAA,MAAC,UAAM,YAAE,iBAAiB,QAAW,QAAQ,GAAE;AAAA,WACjD;AAAA,QAGD,CAAC,cAAc,UAAU,0BAA0B,SAAS,KAC3D,gBAAAA,MAAC,SAAI,WAAU,yBACZ,oCAA0B,IAAI,CAAC,YAC9B,gBAAAA;AAAA,UAACU;AAAA,UAAA;AAAA,YAEC,IAAI,4BAA4B;AAAA,cAC9B;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,YACD,WAAU;AAAA,YAET,qCAA2B,OAAO;AAAA;AAAA,UAT9B;AAAA,QAUP,CACD,GACH;AAAA,QAGF,gBAAAV;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,WAAW,EAAE;AAAA,YAEzE,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,OAAM;AAAA,gBACN,OAAO;AAAA,kBACL,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,WAAW,0BAA0B,WAAW,UAAU;AAAA,kBAC1D,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,YAAY;AAAA,gBACd;AAAA,gBACA,OAAM;AAAA;AAAA,YACR;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACn9BA,SAAS,aAAAW,aAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,QAAAC,QAAM,eAAAC,oBAAmB;AAuH1B,SA+FA,YAAAC,YA/FA,OAAAC,OAGA,QAAAC,cAHA;AAzGR,SAASC,iBAAwB;AAC/B,QAAM,MAAMC,aAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,YAAY,MAAsB;AACzC,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,WAAO,KAAK,WAAW,CAAC,MAAM,QAAQ,KAAK;AAAA,EAC7C;AACA,SAAO,cAAc,KAAK,IAAI,IAAI,IAAI,cAAc,MAAM;AAC5D;AAEO,SAAS,iBAAiB;AAC/B,QAAM,EAAE,QAAQ,IAAI,IAAI,eAAe;AACvC,QAAM,EAAE,EAAE,IAAI,mBAAmB;AACjC,QAAM,MAAMA,aAAY;AACxB,QAAM,QAAQD,eAAc;AAC5B,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AACtD,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAC/D,QAAM,CAAC,GAAG,IAAI,IAAIE,UAAS,EAAE;AAE7B,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,IAAI;AACrC,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAA0B,CAAC,CAAC;AAEtD,iBAAe,iBAAiB;AAC9B,UAAM,MAAM,MAAM,OAAO,iBAAiB;AAC1C,UAAM,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC;AACtD,UAAM,UAAU,oBAAI,IAA2B;AAC/C,eAAW,KAAK,MAAM;AACpB,YAAM,SAAS,OAAO,EAAE,UAAU,QAAQ,EAAE,YAAY;AACxD,UAAI,WAAW,SAAU;AACzB,YAAM,OAAO,OAAO,EAAE,WAAW,QAAQ,EAAE,EAAE,KAAK;AAClD,UAAI,CAAC,KAAM;AACX,YAAM,UAAU,QAAQ,IAAI,IAAI;AAChC,UAAI,SAAS;AACX,gBAAQ,aAAa;AAAA,MACvB,OAAO;AACL,gBAAQ,IAAI,MAAM;AAAA,UAChB;AAAA,UACA,MAAM,OAAO,EAAE,WAAW,QAAQ,IAAI;AAAA,UACtC,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AACA,aAAS,MAAM,KAAK,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,CAAC;AAAA,EACpF;AAEA,EAAAC,YAAU,MAAM;AACd,UAAM,YAAY;AAChB,cAAQ,IAAI;AACZ,eAAS,IAAI;AACb,UAAI;AACF,cAAM,eAAe;AAAA,MACvB,SAAS,GAAG;AACV,iBAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,MAC5D,UAAE;AACA,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,WAAWC,SAAQ,MAAM;AAC7B,QAAI,OAAO;AACX,QAAI,KAAK,cAAc,IAAI,WAAW,SAAS,GAAG;AAChD,YAAM,UAAU,IAAI,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;AAC5D,aAAO,KAAK,OAAO,CAAC,MAAM,QAAQ,IAAI,EAAE,IAAI,CAAC;AAAA,IAC/C;AACA,UAAM,QAAQ,EAAE,KAAK,EAAE,YAAY;AACnC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,KAAK,OAAO,CAAC,MAAM;AACxB,YAAM,MAAM,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,YAAY;AAC9C,aAAO,IAAI,SAAS,KAAK;AAAA,IAC3B,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;AAE9B,QAAM,aAAaA,SAAQ,MAAM;AAC/B,WAAO,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,WAAW,CAAC;AAAA,EACzD,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAUA,SAAQ,MAAM;AAC5B,WAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM;AAClC,UAAI,EAAE,cAAc,EAAE,UAAW,QAAO,EAAE,YAAY,EAAE;AACxD,aAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,IACpC,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,gBAAAL,OAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,OAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,MAAC,QAAG,WAAU,YACX,eAAK,SAAS,EAAE,sBAAsB,QAAW,aAAa,GACjE;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM;AACb,sBAAQ,IAAI;AACZ,oBAAM,YAAY;AAChB,oBAAI;AACF,wBAAM,eAAe;AAAA,gBACvB,SAAS,GAAG;AACV,2BAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,gBAC5D,UAAE;AACA,0BAAQ,KAAK;AAAA,gBACf;AAAA,cACF,GAAG;AAAA,YACL;AAAA,YACA,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEC,SAAS,gBAAAA,MAAC,SAAI,WAAU,2BAA2B,iBAAM;AAAA,IAE1D,gBAAAA,MAAC,SAAI,WAAU,qBACb,0BAAAC,OAAC,SAAI,WAAU,oBACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,sCACb;AAAA,wBAAAD,MAAC,WAAM,WAAU,YACd,YAAE,+BAA+B,QAAW,mBAAmB,GAClE;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,KAAK,EAAE,OAAO,KAAK;AAAA,YACpC,aAAa;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,cAAY,EAAE,+BAA+B,QAAW,mBAAmB;AAAA;AAAA,QAC7E;AAAA,SACF;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,iBACb;AAAA,wBAAAA,OAAC,SAAI,WAAU,gBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,iBACZ,YAAE,8BAA8B,QAAW,YAAY,GAC1D;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,iBAAiB,kBAAQ,QAAO;AAAA,WACjD;AAAA,QACA,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,iBACZ,YAAE,2BAA2B,QAAW,eAAe,GAC1D;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,iBAAiB,sBAAW;AAAA,WAC7C;AAAA,SACF;AAAA,OACF,GACF;AAAA,IAEC,QAAQ,MAAM,WAAW,IACxB,gBAAAA,MAAC,SAAI,WAAU,WAAU,aAAU,QAChC,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,gBAAAA,MAAC,SAAY,WAAU,oBACrB,0BAAAA,MAAC,SAAI,WAAU,4BACb,0BAAAC,OAAC,SAAI,WAAU,6BACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,uCAAsC;AAAA,MACrD,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,wCAAuC;AAAA,QACtD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,QACzD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,SAC3D;AAAA,OACF,GACF,KAVQ,CAWV,CACD,GACH,IAEA,gBAAAC,OAAAF,YAAA,EACG;AAAA,OAAC,QACA,gBAAAC,MAAC,SAAI,WAAU,kBACb,0BAAAA,MAAC,SAAI,WAAU,oBACZ;AAAA,QACC;AAAA,QACA,EAAE,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,IAAI,KAAK,IAAI;AAAA,QACjE,GAAG,QAAQ,MAAM,aAAa,QAAQ,WAAW,IAAI,KAAK,GAAG;AAAA,MAC/D,GACF,GACF;AAAA,MAEF,gBAAAA,MAAC,SAAI,WAAU,WACZ,kBAAQ,WAAW,KAAK,CAAC,OACxB,gBAAAC,OAAC,SAAI,WAAU,oBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,yBACb,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf;AAAA,8BAAAD,MAAC,UAAK,GAAE,6CAA4C;AAAA,cACpD,gBAAAA,MAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI;AAAA,cAC5B,gBAAAA,MAAC,UAAK,GAAE,8BAA6B;AAAA,cACrC,gBAAAA,MAAC,UAAK,GAAE,6BAA4B;AAAA;AAAA;AAAA,QACtC,GACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,0BACZ,YAAE,iCAAiC,QAAW,qBAAqB,GACtE;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ,cACG;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,GACN;AAAA,SACF,IAEA,QAAQ,IAAI,CAAC,MAAM;AACjB,cAAM,WAAW,aACb,eAAe,mBAAmB,EAAE,IAAI,CAAC,GAAG,WAAW,KACvD,2BAA2B,mBAAmB,EAAE,IAAI,CAAC,GAAG,WAAW;AACvE,eACE,gBAAAC,OAAC,SAAiB,WAAU,WAC1B;AAAA,0BAAAA,OAAC,SAAI,WAAU,0BACb;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,YAAY,YAAY,EAAE,IAAI,EAAE;AAAA,gBAEvC,aAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA;AAAA,YAC9B;AAAA,YACA,gBAAAC,OAAC,SAAI,WAAU,0BACb;AAAA,8BAAAD,MAAC,SAAI,WAAU,0BAA0B,YAAE,MAAK;AAAA,cAChD,gBAAAA,MAAC,QAAG,WAAU,0BACZ,0BAAAA,MAACO,QAAA,EAAK,IAAI,UAAW,YAAE,MAAK,GAC9B;AAAA,cACA,gBAAAN,OAAC,SAAI,WAAU,2BACZ;AAAA,kBAAE;AAAA,gBAAU;AAAA,gBAAM,EAAE,cAAc,IAAI,KAAK;AAAA,gBAAI;AAAA,iBAClD;AAAA,eACF;AAAA,aACF;AAAA,UACA,gBAAAA,OAAC,SAAI,WAAU,kBACb;AAAA,4BAAAD;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,gBACJ,WAAU;AAAA,gBAET,YAAE,4BAA4B,QAAW,gBAAgB;AAAA;AAAA,YAC5D;AAAA,YACA,gBAAAP,MAACO,QAAA,EAAK,IAAI,UAAU,WAAU,mCAAkC,0BAEhE;AAAA,aACF;AAAA,aA5BQ,EAAE,IA6BZ;AAAA,MAEJ,CAAC,GAEL;AAAA,OACF;AAAA,KAEJ;AAEJ;;;ACpTA,SAAS,aAAAC,aAAW,WAAAC,WAAS,YAAAC,kBAAgB;AAC7C,SAAS,QAAAC,QAAM,eAAAC,eAAa,aAAAC,kBAAiB;AAmFvC,SAgFE,YAAAC,YA/EA,OAAAC,OADF,QAAAC,cAAA;AA1EN,SAASC,kBAAwB;AAC/B,QAAM,MAAMC,cAAY;AACxB,QAAM,KAAK,IAAI,gBAAgB,IAAI,MAAM;AACzC,SAAO,GAAG,IAAI,OAAO,KAAK;AAC5B;AAEO,SAAS,sBAAsB;AACpC,QAAM,EAAE,gBAAgB,GAAG,IAAIC,WAAU;AACzC,QAAM,EAAE,QAAQ,KAAK,IAAI,eAAe;AACxC,QAAM,EAAE,QAAQ,EAAE,IAAI,mBAAmB;AACzC,QAAM,MAAMD,cAAY;AACxB,QAAM,QAAQD,gBAAc;AAC5B,QAAM,cAAc,iBAAiB,OAAO,IAAI,MAAM;AACtD,QAAM,aAAa,OAAO,SAAS,SAAS,WAAW,QAAQ;AAE/D,QAAM,CAAC,MAAM,OAAO,IAAIG,WAAS,IAAI;AACrC,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,IAAI;AACtD,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,CAAC,CAAC;AACpD,QAAM,CAAC,GAAG,IAAI,IAAIA,WAAS,EAAE;AAE7B,QAAM,wBAAwB,KAAK,yBAAyB;AAE5D,iBAAe,UAAU;AACvB,QAAI,CAAC,cAAe;AACpB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,QAAI;AACF,YAAM,aAAa,MAAM,OAAO,iBAAiB;AACjD,YAAM,OAAO,MAAM,QAAQ,YAAY,KAAK,IAAI,WAAW,QAAQ,CAAC;AACpE;AAAA,QACE,KAAK,OAAO,CAAC,MAAM;AACjB,gBAAM,OAAO,OAAO,EAAE,WAAW,QAAQ,EAAE,EAAE,KAAK;AAClD,gBAAM,SAAS,OAAO,EAAE,UAAU,QAAQ,EAAE,YAAY;AACxD,iBAAO,SAAS,OAAO,aAAa,KAAK,WAAW;AAAA,QACtD,CAAC;AAAA,MACH;AAAA,IACF,SAAS,GAAG;AACV,eAAS,gBAAgB,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;AAAA,IAC5D,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,EAAAC,YAAU,MAAM;AACd,SAAK,QAAQ;AAAA,EAEf,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgBC,UAAQ,MAAM;AAClC,WAAO,OAAO,MAAM,CAAC,GAAG,WAAW,QAAQ,EAAE,EAAE,KAAK,KAAK,OAAO,aAAa;AAAA,EAC/E,GAAG,CAAC,OAAO,aAAa,CAAC;AAEzB,QAAM,mBAAmB,aACrB,cAAc,WAAW,KACzB,0BAA0B,WAAW;AACzC,QAAM,cAAc,aAAa,IAAI,WAAW,KAAK,eAAe,WAAW;AAE/E,QAAM,gBAAgBA,UAAQ,MAAM;AAClC,UAAM,QAAQ,EAAE,KAAK,EAAE,YAAY;AACnC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,OAAO,CAAC,MAAM;AACzB,YAAM,WAAW,SAAS,EAAE,QAAQ;AACpC,YAAM,QACJ,uBAAuB,SAAS,OAAc,MAAM,KAAK,gBAAgB,EAAE,IAAI;AACjF,YAAM,OACJ,uBAAuB,SAAS,aAAoB,MAAM,KAC1D,gBAAgB,EAAE,WAAW;AAC/B,YAAM,MAAM,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,YAAY;AACrD,aAAO,IAAI,SAAS,KAAK;AAAA,IAC3B,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC;AAErB,SACE,gBAAAN,OAAC,SAAI,WAAW,wBAAwB,aAAa,gBAAgB,EAAE,IACrE;AAAA,oBAAAA,OAAC,SAAI,WAAU,iBACb;AAAA,sBAAAD,MAACQ,QAAA,EAAK,IAAI,aAAc,YAAE,sBAAsB,QAAW,aAAa,GAAE;AAAA,MAC1E,gBAAAR,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAACQ,QAAA,EAAK,IAAI,kBACP,YAAE,8BAA8B,QAAW,YAAY,GAC1D;AAAA,MACA,gBAAAR,MAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,MACrC,gBAAAA,MAAC,UAAM,yBAAc;AAAA,OACvB;AAAA,IAEA,gBAAAC,OAAC,YAAO,WAAU,aAChB;AAAA,sBAAAD,MAAC,QAAG,WAAU,YAAY,yBAAc;AAAA,MACxC,gBAAAC,OAAC,SAAI,WAAU,qBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,eAAe,OAAO,gBAAgB,EAAE;AAAA,YACnD,SAAS,MAAM,KAAK,QAAQ;AAAA,YAC5B,UAAU;AAAA,YACV,OAAO,EAAE,kBAAkB,QAAW,SAAS;AAAA,YAE/C,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBAEf,0BAAAA,MAAC,UAAK,GAAE,4FAA2F;AAAA;AAAA,YACrG;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEC,SAAS,gBAAAA,MAAC,SAAI,WAAU,2BAA2B,iBAAM;AAAA,IAE1D,gBAAAA,MAAC,SAAI,WAAU,qBACb,0BAAAA,MAAC,SAAI,WAAU,oBACb,0BAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,sBAAAD,MAAC,WAAM,WAAU,YACd,YAAE,0BAA0B,QAAW,cAAc,GACxD;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,KAAK,EAAE,OAAO,KAAK;AAAA,UACpC,aAAa;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,cAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA;AAAA,MACF;AAAA,OACF,GACF,GACF;AAAA,IAEC,QAAQ,MAAM,WAAW,IACxB,gBAAAA,MAAC,SAAI,WAAU,WAAU,aAAU,QAChC,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,gBAAAC,OAAC,SAAY,WAAU,oBACrB;AAAA,sBAAAD,MAAC,SAAI,WAAU,0BAAyB;AAAA,MACxC,gBAAAC,OAAC,SAAI,WAAU,4BACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,wCAAuC;AAAA,QACtD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,QACzD,gBAAAA,MAAC,SAAI,WAAU,0CAAyC;AAAA,QACxD,gBAAAA,MAAC,SAAI,WAAU,2CAA0C;AAAA,SAC3D;AAAA,SAPQ,CAQV,CACD,GACH,IAEA,gBAAAC,OAAAF,YAAA,EACG;AAAA,OAAC,QACA,gBAAAC,MAAC,SAAI,WAAU,kBACb,0BAAAA,MAAC,SAAI,WAAU,oBACZ,wBAAc,WAAW,MAAM,SAC5B,GAAG,cAAc,MAAM,QAAQ,cAAc,WAAW,IAAI,KAAK,GAAG,KACpE,GAAG,cAAc,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,IACrF,GACF;AAAA,MAEF,gBAAAA,MAAC,SAAI,WAAU,WACZ,wBAAc,WAAW,KAAK,CAAC,OAC9B,gBAAAC,OAAC,SAAI,WAAU,oBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,yBAAwB,oBAAC;AAAA,QACxC,gBAAAA,MAAC,SAAI,WAAU,0BACZ,YAAE,4BAA4B,QAAW,gBAAgB,GAC5D;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,yBACZ,cACG;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA;AAAA,UACE;AAAA,UACA,EAAE,WAAW,cAAc;AAAA,UAC3B,GAAG,aAAa;AAAA,QAClB,GACN;AAAA,SACF,IAEA,cAAc,IAAI,CAAC,MAAM;AACvB,cAAM,WAAW,SAAS,EAAE,QAAQ;AACpC,cAAM,QACJ,uBAAuB,SAAS,OAAc,MAAM,KACpD,gBAAgB,EAAE,MAAM,EAAE,MAAM,KAAK;AACvC,cAAM,OACJ,uBAAuB,SAAS,aAAoB,MAAM,KAC1D,gBAAgB,EAAE,WAAW;AAC/B,cAAM,QACJ,WAAW,SAAS,KAAK,KAAK,gCAAgC,EAAE,OAAO;AACzE,cAAM,OAAO,MAAM,QAAQ,SAAS,IAAI,IACpC,SAAS,KACN,IAAI,CAAC,QAAQ,WAAW,GAAG,CAAC,EAC5B,OAAO,OAAO,EACd,MAAM,GAAG,CAAC,IACb,CAAC;AACL,cAAM,OAAO,sBAAsB,OAAO,EAAE,EAAE,CAAC;AAC/C,cAAM,YAAY,QAAQ,IAAI;AAC9B,cAAM,WAAW;AAAA,UACf,UAAU,aACN,UAAU,mBAAmB,OAAO,EAAE,EAAE,CAAC,CAAC,KAC1C,sBAAsB,mBAAmB,OAAO,EAAE,EAAE,CAAC,CAAC;AAAA,UAC1D,QAAQ;AAAA,QACV;AACA,eACE,gBAAAC,OAAC,SAAe,WAAU,WACxB;AAAA,0BAAAD,MAACQ,QAAA,EAAK,IAAI,UAAU,WAAU,sBAC5B,0BAAAR,MAAC,SAAI,KAAK,OAAO,KAAK,OAAO,WAAU,iBAAgB,GACzD;AAAA,UACA,gBAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,4BAAAA,OAAC,SAAI,WAAU,gBACb;AAAA,8BAAAA,OAAC,SAAI,WAAU,gBACb;AAAA,gCAAAA,OAAC,SAAI,WAAU,qBACZ;AAAA,oBAAE,aAAa,QAAW,IAAI;AAAA,kBAAE;AAAA,kBAAE;AAAA,mBACrC;AAAA,gBACA,gBAAAA,OAAC,SAAI,WAAU,kBACZ;AAAA,+BACC,gBAAAA,OAAC,UAAK,WAAU,2BACd;AAAA,oCAAAD,MAAC,UAAK,WAAU,+BAA8B;AAAA,oBAC7C,EAAE,gBAAgB,QAAW,OAAO;AAAA,qBACvC;AAAA,kBAED,EAAE,gBAAgB,WACjB,gBAAAC,OAAC,SAAI,WAAU,mBAAkB;AAAA;AAAA,oBAAE,EAAE,eAAe;AAAA,qBAAQ;AAAA,mBAEhE;AAAA,iBACF;AAAA,cACA,gBAAAD,MAAC,QAAG,WAAU,iBACZ,0BAAAA,MAACQ,QAAA,EAAK,IAAI,UAAU,WAAU,sBAC3B,iBACH,GACF;AAAA,eACF;AAAA,YACA,gBAAAR,MAAC,OAAE,WAAU,gBAAgB,gBAAK;AAAA,YAClC,gBAAAA,MAAC,SAAI,WAAU,gBACZ,eAAK,IAAI,CAACS,OACT,gBAAAT,MAAC,UAAa,WAAU,yBACrB,UAAAS,MADQA,EAEX,CACD,GACH;AAAA,aACF;AAAA,UACA,gBAAAT,MAAC,SAAI,WAAU,kBACb,0BAAAA;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,WAAU;AAAA,cACX;AAAA;AAAA,UAED,GACF;AAAA,aA5CQ,EAAE,EA6CZ;AAAA,MAEJ,CAAC,GAEL;AAAA,OACF;AAAA,KAEJ;AAEJ;;;ApBrQI,SAK0B,OAAAE,OAL1B,QAAAC,cAAA;AAFG,SAAS,iBAAiB;AAC/B,SACE,gBAAAA,OAAC,UAKC;AAAA,oBAAAD,MAAC,SAAM,MAAK,IAAG,SAAS,gBAAAA,MAAC,eAAY,GAAI;AAAA,IACzC,gBAAAA,MAAC,SAAM,MAAK,cAAa,SAAS,gBAAAA,MAAC,kBAAe,GAAI;AAAA,IACtD,gBAAAA,MAAC,SAAM,MAAK,6BAA4B,SAAS,gBAAAA,MAAC,uBAAoB,GAAI;AAAA,IAC1E,gBAAAA,MAAC,SAAM,MAAK,iBAAgB,SAAS,gBAAAA,MAAC,kBAAe,GAAI;AAAA,IACzD,gBAAAA,MAAC,SAAM,MAAK,YAAW,SAAS,gBAAAA,MAAC,gBAAa,GAAI;AAAA,IAClD,gBAAAA,MAAC,SAAM,MAAK,YAAW,SAAS,gBAAAA,MAAC,gBAAa,GAAI;AAAA,IAClD,gBAAAA,MAAC,SAAM,MAAK,YAAW,SAAS,gBAAAA,MAAC,gBAAa,GAAI;AAAA,IAClD,gBAAAA,MAAC,SAAM,MAAK,iBAAgB,SAAS,gBAAAA,MAAC,qBAAkB,GAAI;AAAA,IAC5D,gBAAAA,MAAC,SAAM,MAAK,gBAAe,SAAS,gBAAAA,MAAC,qBAAkB,GAAI;AAAA,IAC3D,gBAAAA,MAAC,SAAM,MAAK,oCAAmC,SAAS,gBAAAA,MAAC,cAAW,GAAI;AAAA,IACxE,gBAAAA,MAAC,SAAM,MAAK,KAAI,SAAS,gBAAAA,MAAC,eAAY,GAAI;AAAA,KAC5C;AAEJ;",
|
|
6
|
+
"names": ["createContext", "useContext", "value", "jsx", "jsx", "createContext", "useContext", "useEffect", "useMemo", "Link", "useEffect", "jsx", "useEffect", "jsx", "jsxs", "Fragment", "jsx", "jsxs", "useMemo", "t", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Link", "jsx", "Link", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useMemo", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "jsx", "jsxs", "asRecord", "asRecord", "readString", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useNavigate", "useState", "useEffect", "Link", "StatusBadge", "status", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "StatusBadge", "Link", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "useParams", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "asRecord", "readString", "formatDateTime", "useParams", "useNavigate", "useState", "useEffect", "useMemo", "Link", "t", "useEffect", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useRef", "useState", "useNavigate", "useEffect", "nestedResp", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useState", "useEffect", "useMemo", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useState", "useEffect", "useMemo", "Link", "t", "jsx", "jsxs"]
|
|
7
7
|
}
|