@semiont/cli 0.4.14 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/cli.mjs +15470 -4962
  2. package/dist/frontend/dist/assets/{ArrowsRightLeftIcon-CMDe963r.js → ArrowsRightLeftIcon-BzLgl5o9.js} +2 -2
  3. package/dist/frontend/dist/assets/{ArrowsRightLeftIcon-CMDe963r.js.map → ArrowsRightLeftIcon-BzLgl5o9.js.map} +1 -1
  4. package/dist/frontend/dist/assets/{ChevronLeftIcon-CMXd_XZQ.js → ChevronLeftIcon-BLyRNZuL.js} +2 -2
  5. package/dist/frontend/dist/assets/{ChevronLeftIcon-CMXd_XZQ.js.map → ChevronLeftIcon-BLyRNZuL.js.map} +1 -1
  6. package/dist/frontend/dist/assets/{CommandLineIcon-BBerq9Nd.js → CommandLineIcon-Ba4gpk8e.js} +2 -2
  7. package/dist/frontend/dist/assets/{CommandLineIcon-BBerq9Nd.js.map → CommandLineIcon-Ba4gpk8e.js.map} +1 -1
  8. package/dist/frontend/dist/assets/{CookiePreferences-Cbur0STI.js → CookiePreferences-CO_BNHwm.js} +2 -2
  9. package/dist/frontend/dist/assets/{CookiePreferences-Cbur0STI.js.map → CookiePreferences-CO_BNHwm.js.map} +1 -1
  10. package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-CHDCGQBR-BLaEAPe0.js +2 -0
  11. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CW6SKH2U-DIkAGn7X.js.map → PdfAnnotationCanvas.client-CHDCGQBR-BLaEAPe0.js.map} +1 -1
  12. package/dist/frontend/dist/assets/StreamStatusContext-BNiTXRfJ.js +2 -0
  13. package/dist/frontend/dist/assets/{StreamStatusContext-BuPATpTz.js.map → StreamStatusContext-BNiTXRfJ.js.map} +1 -1
  14. package/dist/frontend/dist/assets/ToolbarPanels-DRHyLUHl.js +2 -0
  15. package/dist/frontend/dist/assets/ToolbarPanels-DRHyLUHl.js.map +1 -0
  16. package/dist/frontend/dist/assets/{XMarkIcon-6m9KVFaj.js → XMarkIcon-KMKD47CF.js} +2 -2
  17. package/dist/frontend/dist/assets/{XMarkIcon-6m9KVFaj.js.map → XMarkIcon-KMKD47CF.js.map} +1 -1
  18. package/dist/frontend/dist/assets/{browser-ponyfill-DkbQZCyF.js → browser-ponyfill-D2ngVqWO.js} +2 -2
  19. package/dist/frontend/dist/assets/{browser-ponyfill-DkbQZCyF.js.map → browser-ponyfill-D2ngVqWO.js.map} +1 -1
  20. package/dist/frontend/dist/assets/client-RpFyflU_.js +2 -0
  21. package/dist/frontend/dist/assets/{client-BiL3eI7d.js.map → client-RpFyflU_.js.map} +1 -1
  22. package/dist/frontend/dist/assets/{client-BnL1es01.js → client-bqO7W1Xj.js} +2 -2
  23. package/dist/frontend/dist/assets/{client-BnL1es01.js.map → client-bqO7W1Xj.js.map} +1 -1
  24. package/dist/frontend/dist/assets/{client-DrQUcCJy.js → client-ekxuarKC.js} +2 -2
  25. package/dist/frontend/dist/assets/{client-DrQUcCJy.js.map → client-ekxuarKC.js.map} +1 -1
  26. package/dist/frontend/dist/assets/{client-BPbsU2tc.js → client-xJTgSko3.js} +2 -2
  27. package/dist/frontend/dist/assets/{client-BPbsU2tc.js.map → client-xJTgSko3.js.map} +1 -1
  28. package/dist/frontend/dist/assets/{i18n-BYxb14hm.js → i18n-BbpF47i1.js} +2 -2
  29. package/dist/frontend/dist/assets/{i18n-BYxb14hm.js.map → i18n-BbpF47i1.js.map} +1 -1
  30. package/dist/frontend/dist/assets/{index-CNb3PHS7.css → index-BUe9tsov.css} +1 -1
  31. package/dist/frontend/dist/assets/index-XWcEpo5a.js +159 -0
  32. package/dist/frontend/dist/assets/index-XWcEpo5a.js.map +1 -0
  33. package/dist/frontend/dist/assets/layout-BFanPfv_.js +2 -0
  34. package/dist/frontend/dist/assets/layout-BFanPfv_.js.map +1 -0
  35. package/dist/frontend/dist/assets/layout-BN0UEIdX.js +2 -0
  36. package/dist/frontend/dist/assets/layout-BN0UEIdX.js.map +1 -0
  37. package/dist/frontend/dist/assets/layout-ChyKFPPP.js +2 -0
  38. package/dist/frontend/dist/assets/layout-ChyKFPPP.js.map +1 -0
  39. package/dist/frontend/dist/assets/layout-DmjP6diV.js +2 -0
  40. package/dist/frontend/dist/assets/layout-DmjP6diV.js.map +1 -0
  41. package/dist/frontend/dist/assets/{not-found-CwWw1pZc.js → not-found-BboGygIW.js} +2 -2
  42. package/dist/frontend/dist/assets/{not-found-CwWw1pZc.js.map → not-found-BboGygIW.js.map} +1 -1
  43. package/dist/frontend/dist/assets/page-8F47gNEm.js +2 -0
  44. package/dist/frontend/dist/assets/page-8F47gNEm.js.map +1 -0
  45. package/dist/frontend/dist/assets/page-8x98ZAYe.js +2 -0
  46. package/dist/frontend/dist/assets/{page-iSL5E639.js.map → page-8x98ZAYe.js.map} +1 -1
  47. package/dist/frontend/dist/assets/page-BaqIbrus.js +2 -0
  48. package/dist/frontend/dist/assets/{page-Deep7E5d.js.map → page-BaqIbrus.js.map} +1 -1
  49. package/dist/frontend/dist/assets/page-BfhPRgzq.js +2 -0
  50. package/dist/frontend/dist/assets/{page-ZBwMTeR-.js.map → page-BfhPRgzq.js.map} +1 -1
  51. package/dist/frontend/dist/assets/page-Bht4dePL.js +5 -0
  52. package/dist/frontend/dist/assets/{page-CelRTchO.js.map → page-Bht4dePL.js.map} +1 -1
  53. package/dist/frontend/dist/assets/page-BtqPeWyh.js +2 -0
  54. package/dist/frontend/dist/assets/page-BtqPeWyh.js.map +1 -0
  55. package/dist/frontend/dist/assets/{page-Dv386AZD.js → page-CG7C0ib3.js} +3 -3
  56. package/dist/frontend/dist/assets/{page-Dv386AZD.js.map → page-CG7C0ib3.js.map} +1 -1
  57. package/dist/frontend/dist/assets/page-CJnfSnRg.js +2 -0
  58. package/dist/frontend/dist/assets/page-CJnfSnRg.js.map +1 -0
  59. package/dist/frontend/dist/assets/page-Cct5hwIU.js +8 -0
  60. package/dist/frontend/dist/assets/{page-E99MPOn5.js.map → page-Cct5hwIU.js.map} +1 -1
  61. package/dist/frontend/dist/assets/page-CnJVZMgv.js +2 -0
  62. package/dist/frontend/dist/assets/page-CnJVZMgv.js.map +1 -0
  63. package/dist/frontend/dist/assets/page-CpbZG7nR.js +2 -0
  64. package/dist/frontend/dist/assets/{page-C5bIvv1V.js.map → page-CpbZG7nR.js.map} +1 -1
  65. package/dist/frontend/dist/assets/{page-D_nHe9FT.js → page-CzvERJKF.js} +2 -2
  66. package/dist/frontend/dist/assets/{page-D_nHe9FT.js.map → page-CzvERJKF.js.map} +1 -1
  67. package/dist/frontend/dist/assets/page-DB8grXzl.js +2 -0
  68. package/dist/frontend/dist/assets/{page-Zq6ARIvg.js.map → page-DB8grXzl.js.map} +1 -1
  69. package/dist/frontend/dist/assets/page-DI1MUp4X.js +2 -0
  70. package/dist/frontend/dist/assets/{page-xdXYx3nl.js.map → page-DI1MUp4X.js.map} +1 -1
  71. package/dist/frontend/dist/assets/{page-CslYhbgz.js → page-Dhi8hP-S.js} +2 -2
  72. package/dist/frontend/dist/assets/{page-CslYhbgz.js.map → page-Dhi8hP-S.js.map} +1 -1
  73. package/dist/frontend/dist/assets/{page-BmHLf-7O.js → page-FovvpNWp.js} +2 -2
  74. package/dist/frontend/dist/assets/{page-BmHLf-7O.js.map → page-FovvpNWp.js.map} +1 -1
  75. package/dist/frontend/dist/assets/{page-KtkB4tEv.js → page-T424mvNp.js} +2 -2
  76. package/dist/frontend/dist/assets/{page-KtkB4tEv.js.map → page-T424mvNp.js.map} +1 -1
  77. package/dist/frontend/dist/assets/{page-1BwlyTUj.js → page-knhbwxzQ.js} +2 -2
  78. package/dist/frontend/dist/assets/{page-1BwlyTUj.js.map → page-knhbwxzQ.js.map} +1 -1
  79. package/dist/frontend/dist/assets/privacy-B5TeXaed.js +2 -0
  80. package/dist/frontend/dist/assets/{privacy-DO1oxJpM.js.map → privacy-B5TeXaed.js.map} +1 -1
  81. package/dist/frontend/dist/assets/{query-ATBhtd3K.js → query-B6BuIB0M.js} +3 -3
  82. package/dist/frontend/dist/assets/{query-ATBhtd3K.js.map → query-B6BuIB0M.js.map} +1 -1
  83. package/dist/frontend/dist/assets/{routing-DMdXWYXo.js → routing-By_4TZHr.js} +2 -2
  84. package/dist/frontend/dist/assets/{routing-DMdXWYXo.js.map → routing-By_4TZHr.js.map} +1 -1
  85. package/dist/frontend/dist/assets/{routing-tJ_HbFRP.js → routing-vcvYfuPO.js} +2 -2
  86. package/dist/frontend/dist/assets/{routing-tJ_HbFRP.js.map → routing-vcvYfuPO.js.map} +1 -1
  87. package/dist/frontend/dist/assets/{vendor-EnoIVk-c.js → vendor-DJo4KD8w.js} +2 -2
  88. package/dist/frontend/dist/assets/{vendor-EnoIVk-c.js.map → vendor-DJo4KD8w.js.map} +1 -1
  89. package/dist/frontend/dist/index.html +5 -5
  90. package/dist/frontend/package.json +1 -1
  91. package/package.json +9 -9
  92. package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-CW6SKH2U-DIkAGn7X.js +0 -2
  93. package/dist/frontend/dist/assets/StreamStatusContext-BuPATpTz.js +0 -2
  94. package/dist/frontend/dist/assets/ToolbarPanels-rN1MIRTV.js +0 -2
  95. package/dist/frontend/dist/assets/ToolbarPanels-rN1MIRTV.js.map +0 -1
  96. package/dist/frontend/dist/assets/client-BiL3eI7d.js +0 -2
  97. package/dist/frontend/dist/assets/en-IUV4ZXKH-BY1RKeLS.js +0 -135
  98. package/dist/frontend/dist/assets/en-IUV4ZXKH-BY1RKeLS.js.map +0 -1
  99. package/dist/frontend/dist/assets/index-DA31r_0s.js +0 -27
  100. package/dist/frontend/dist/assets/index-DA31r_0s.js.map +0 -1
  101. package/dist/frontend/dist/assets/layout-B8IinUdt.js +0 -2
  102. package/dist/frontend/dist/assets/layout-B8IinUdt.js.map +0 -1
  103. package/dist/frontend/dist/assets/layout-BjpW078f.js +0 -2
  104. package/dist/frontend/dist/assets/layout-BjpW078f.js.map +0 -1
  105. package/dist/frontend/dist/assets/layout-CDIjxs5a.js +0 -6
  106. package/dist/frontend/dist/assets/layout-CDIjxs5a.js.map +0 -1
  107. package/dist/frontend/dist/assets/layout-DKm9XdRr.js +0 -2
  108. package/dist/frontend/dist/assets/layout-DKm9XdRr.js.map +0 -1
  109. package/dist/frontend/dist/assets/page-BQ00VxR5.js +0 -2
  110. package/dist/frontend/dist/assets/page-BQ00VxR5.js.map +0 -1
  111. package/dist/frontend/dist/assets/page-C5bIvv1V.js +0 -2
  112. package/dist/frontend/dist/assets/page-CelRTchO.js +0 -5
  113. package/dist/frontend/dist/assets/page-Cf9cnqhC.js +0 -2
  114. package/dist/frontend/dist/assets/page-Cf9cnqhC.js.map +0 -1
  115. package/dist/frontend/dist/assets/page-DEjlNEY0.js +0 -2
  116. package/dist/frontend/dist/assets/page-DEjlNEY0.js.map +0 -1
  117. package/dist/frontend/dist/assets/page-DLtwpo78.js +0 -2
  118. package/dist/frontend/dist/assets/page-DLtwpo78.js.map +0 -1
  119. package/dist/frontend/dist/assets/page-Deep7E5d.js +0 -2
  120. package/dist/frontend/dist/assets/page-E99MPOn5.js +0 -8
  121. package/dist/frontend/dist/assets/page-ZBwMTeR-.js +0 -2
  122. package/dist/frontend/dist/assets/page-Zq6ARIvg.js +0 -2
  123. package/dist/frontend/dist/assets/page-iSL5E639.js +0 -2
  124. package/dist/frontend/dist/assets/page-xdXYx3nl.js +0 -2
  125. package/dist/frontend/dist/assets/privacy-DO1oxJpM.js +0 -2
  126. package/dist/frontend/dist/assets/useAuth-yUx5lBP5.js +0 -2
  127. package/dist/frontend/dist/assets/useAuth-yUx5lBP5.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-Cf9cnqhC.js","sources":["../../src/app/[locale]/know/compose/page.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Resource Compose Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (routing, auth, data loading, hooks)\n * and delegates rendering to the pure React ResourceComposePage component.\n */\n\nimport React, { useState, useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { useSearchParams } from 'react-router-dom';\nimport { useAuth } from '@/hooks/useAuth';\nimport { useResources, useAnnotations, useEntityTypes, useApiClient, useAuthToken } from '@semiont/react-ui';\nimport { useToast } from '@semiont/react-ui';\nimport { useTheme } from '@semiont/react-ui';\nimport { usePanelBrowse } from '@semiont/react-ui';\nimport { useLineNumbers } from '@semiont/react-ui';\nimport { useHoverDelay } from '@semiont/react-ui';\nimport { useEventSubscriptions } from '@semiont/react-ui';\nimport { Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { resourceId as toResourceId, annotationId as toAnnotationId, ContentFormat, AccessToken, type GatheredContext } from '@semiont/core';\nimport { getPrimaryMediaType } from '@semiont/api-client';\nimport { decodeWithCharset } from '@semiont/api-client';\nimport { ComposeLoadingState } from '@semiont/react-ui';\nimport { ResourceComposePage } from '@semiont/react-ui';\nimport type { SaveResourceParams } from '@semiont/react-ui';\n\nfunction ComposeResourceContent() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n const locale = useLocale();\n const router = useRouter();\n const [searchParams] = useSearchParams();\n const { isAuthenticated, isLoading: authLoading, token: authToken } = useAuth();\n const { showError, showSuccess } = useToast();\n const mode = searchParams?.get('mode');\n const tokenFromUrl = searchParams?.get('token');\n\n // Authentication guard - redirect to home if not authenticated\n useEffect(() => {\n if (authLoading) return;\n if (!isAuthenticated) {\n router.push('/');\n }\n }, [authLoading, isAuthenticated, router]);\n\n // Reference completion parameters\n const annotationUriParam = searchParams?.get('annotationUri');\n const sourceDocumentId = searchParams?.get('sourceDocumentId');\n const nameFromUrl = searchParams?.get('name');\n const entityTypesFromUrl = searchParams?.get('entityTypes');\n\n const [isLoading, setIsLoading] = useState(true);\n const [cloneData, setCloneData] = useState<any>(null);\n const [referenceData, setReferenceData] = useState<any>(null);\n const [gatheredContext, setGatheredContext] = useState<GatheredContext | null>(null);\n\n // Toolbar and settings state\n const { activePanel } = usePanelBrowse();\n const { theme, setTheme, resolvedTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n const { hoverDelayMs } = useHoverDelay();\n\n // Subscribe to settings events\n useEventSubscriptions({\n 'settings:theme-changed': ({ theme }: { theme: 'light' | 'dark' | 'system' }) => setTheme(theme),\n 'settings:line-numbers-toggled': () => toggleLineNumbers(),\n });\n\n // API hooks\n const resources = useResources();\n const annotations = useAnnotations();\n const entityTypesAPI = useEntityTypes();\n const client = useApiClient();\n const token = useAuthToken();\n\n // Fetch available entity types\n const { data: entityTypesData } = entityTypesAPI.list.useQuery();\n const availableEntityTypes = (entityTypesData as { entityTypes: string[] } | undefined)?.entityTypes || [];\n\n // Set up mutation hooks\n const createResourceMutation = resources.create.useMutation();\n const updateAnnotationBodyMutation = annotations.updateBody.useMutation();\n\n // Fetch cloned resource data if in clone mode\n const { data: cloneDataResponse } = resources.getByToken.useQuery(tokenFromUrl || '');\n const createFromTokenMutation = resources.createFromToken.useMutation();\n\n // Determine mode\n const isReferenceMode = Boolean(annotationUriParam && sourceDocumentId && nameFromUrl);\n const isCloneMode = mode === 'clone' && Boolean(tokenFromUrl);\n const pageMode = isCloneMode ? 'clone' : isReferenceMode ? 'reference' : 'new';\n\n // Load cloned resource data or reference completion data\n useEffect(() => {\n const loadInitialData = async () => {\n // Handle reference completion mode\n if (isReferenceMode) {\n const entityTypes = entityTypesFromUrl ? entityTypesFromUrl.split(',') : [];\n setReferenceData({\n annotationUri: annotationUriParam!,\n sourceDocumentId: sourceDocumentId!,\n name: nameFromUrl!,\n entityTypes,\n });\n\n // Read gathered context from sessionStorage (stored by wizard)\n const contextKey = `gather-context:${annotationUriParam}`;\n const stored = sessionStorage.getItem(contextKey);\n if (stored) {\n try {\n setGatheredContext(JSON.parse(stored));\n } catch {\n // Ignore malformed context\n }\n sessionStorage.removeItem(contextKey);\n }\n\n setIsLoading(false);\n return;\n }\n\n // Handle clone mode\n if (isCloneMode && cloneDataResponse) {\n if (cloneDataResponse.sourceResource && client && token) {\n try {\n const rId = toResourceId(cloneDataResponse.sourceResource['@id']);\n const mediaType = getPrimaryMediaType(cloneDataResponse.sourceResource) || 'text/plain';\n const { data } = await client.getResourceRepresentation(rId, {\n accept: mediaType as ContentFormat,\n auth: token as AccessToken,\n });\n const content = decodeWithCharset(data, mediaType);\n\n setCloneData({\n sourceResource: cloneDataResponse.sourceResource,\n sourceContent: content,\n });\n } catch (error) {\n console.error('Failed to fetch representation:', error);\n showError('Failed to load resource representation');\n }\n } else {\n showError('Invalid or expired clone token');\n router.push('/know/discover');\n }\n setIsLoading(false);\n } else if (isCloneMode && !tokenFromUrl) {\n showError('Clone token not found. Please try cloning again.');\n router.push('/know/discover');\n } else {\n setIsLoading(false);\n }\n };\n\n loadInitialData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, tokenFromUrl, cloneDataResponse, annotationUriParam, sourceDocumentId, nameFromUrl, entityTypesFromUrl, authToken]);\n\n // Handle save resource\n const handleSaveResource = async (params: SaveResourceParams) => {\n try {\n let newResourceId: string;\n\n if (params.mode === 'clone') {\n // Create resource from clone token with edited content\n const response = await createFromTokenMutation.mutateAsync({\n token: tokenFromUrl!,\n name: params.name,\n content: params.content!,\n archiveOriginal: params.archiveOriginal ?? true,\n });\n\n newResourceId = response.resourceId;\n } else {\n // Create a new resource with entity types\n let fileToUpload: File;\n let mimeType: string;\n\n if (params.file) {\n fileToUpload = params.file;\n mimeType = params.format ?? 'application/octet-stream';\n } else {\n const blob = new Blob([params.content || ''], { type: params.format ?? 'application/octet-stream' });\n const extension = params.format === 'text/plain' ? '.txt' : params.format === 'text/html' ? '.html' : '.md';\n fileToUpload = new File([blob], params.name + extension, { type: params.format ?? 'application/octet-stream' });\n mimeType = params.format ?? 'application/octet-stream';\n }\n\n const format = params.charset && !params.file ? `${mimeType}; charset=${params.charset}` : mimeType;\n\n const response = await createResourceMutation.mutateAsync({\n name: params.name,\n file: fileToUpload,\n format,\n entityTypes: params.entityTypes || [],\n language: params.language,\n creationMethod: 'ui',\n storageUri: params.storageUri,\n });\n\n newResourceId = response.resourceId;\n\n // If this is a reference completion, update the reference\n if (params.mode === 'reference' && params.annotationUri && params.sourceDocumentId) {\n try {\n await updateAnnotationBodyMutation.mutateAsync({\n resourceId: toResourceId(params.sourceDocumentId),\n annotationId: toAnnotationId(params.annotationUri),\n data: {\n resourceId: params.sourceDocumentId,\n operations: [{\n op: 'add',\n item: {\n type: 'SpecificResource',\n source: newResourceId,\n purpose: 'linking',\n },\n }],\n },\n });\n showSuccess('Reference successfully linked to the new resource');\n } catch (error) {\n console.error('Failed to update reference:', error);\n showError('Resource created but failed to update reference. You may need to manually link it.');\n }\n }\n }\n\n // Navigate to the new resource\n router.push(`/know/resource/${encodeURIComponent(newResourceId)}`);\n } catch (error) {\n console.error('Failed to save resource:', error);\n const errorMessage = error instanceof Error ? error.message : 'Failed to save resource. Please try again.';\n showError(errorMessage);\n throw error;\n }\n };\n\n // Show loading state\n if (authLoading || isLoading) {\n return (\n <ComposeLoadingState\n message={authLoading ? 'Checking authentication...' : 'Loading cloned resource...'}\n />\n );\n }\n\n // Don't render if not authenticated\n if (!isAuthenticated) {\n return null;\n }\n\n // Render the pure component\n return (\n <ResourceComposePage\n mode={pageMode}\n cloneData={cloneData}\n referenceData={referenceData}\n gatheredContext={gatheredContext}\n availableEntityTypes={availableEntityTypes}\n initialLocale={locale}\n theme={resolvedTheme}\n showLineNumbers={showLineNumbers}\n hoverDelayMs={hoverDelayMs}\n activePanel={activePanel}\n onSaveResource={handleSaveResource}\n onCancel={() => router.push('/know/discover')}\n translations={{\n title: t('title'),\n titleEditClone: t('titleEditClone'),\n titleCompleteReference: t('titleCompleteReference'),\n subtitleClone: t('subtitleClone'),\n subtitleReference: t('subtitleReference'),\n linkedNoticePrefix: t('linkedNoticePrefix'),\n resourceName: t('resourceName'),\n resourceNamePlaceholder: t('resourceNamePlaceholder'),\n entityTypes: t('entityTypes'),\n language: t('language'),\n contentSource: t('contentSource'),\n uploadFile: t('uploadFile'),\n uploadFileDescription: t('uploadFileDescription'),\n writeContent: t('writeContent'),\n writeContentDescription: t('writeContentDescription'),\n dropFileOrClick: t('dropFileOrClick'),\n supportedFormats: t('supportedFormats'),\n mediaType: t('mediaType'),\n autoDetected: t('autoDetected'),\n format: t('format'),\n content: t('content'),\n resourceContent: t('resourceContent'),\n encoding: t('encoding'),\n archiveOriginal: t('archiveOriginal'),\n cancel: t('cancel'),\n saving: t('saving'),\n creating: t('creating'),\n creatingAndLinking: t('creatingAndLinking'),\n saveClonedResource: t('saveClonedResource'),\n createAndLinkResource: t('createAndLinkResource'),\n createResource: t('createResource'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n\nexport default function ComposeResourcePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n\n return (\n <Suspense fallback={<ComposeLoadingState message={t('loading')} />}>\n <ComposeResourceContent />\n </Suspense>\n );\n}\n"],"names":["ComposeResourceContent","_t","useTranslation","t","k","p","locale","useLocale","router","useRouter","searchParams","useSearchParams","isAuthenticated","authLoading","authToken","useAuth","showError","showSuccess","useToast","mode","tokenFromUrl","useEffect","annotationUriParam","sourceDocumentId","nameFromUrl","entityTypesFromUrl","isLoading","setIsLoading","useState","cloneData","setCloneData","referenceData","setReferenceData","gatheredContext","setGatheredContext","activePanel","usePanelBrowse","theme","setTheme","resolvedTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","hoverDelayMs","useHoverDelay","useEventSubscriptions","resources","useResources","annotations","useAnnotations","entityTypesAPI","useEntityTypes","client","useApiClient","token","useAuthToken","entityTypesData","availableEntityTypes","createResourceMutation","updateAnnotationBodyMutation","cloneDataResponse","createFromTokenMutation","isReferenceMode","isCloneMode","pageMode","entityTypes","contextKey","stored","rId","toResourceId","mediaType","getPrimaryMediaType","data","content","decodeWithCharset","error","handleSaveResource","params","newResourceId","fileToUpload","mimeType","blob","extension","format","toAnnotationId","errorMessage","jsx","ComposeLoadingState","ResourceComposePage","ToolbarPanels","Toolbar","ComposeResourcePage","Suspense"],"mappings":"ggBA+BA,SAASA,IAAyB,CAChC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAC3EC,EAASC,GAAA,EACTC,EAASC,GAAA,EACT,CAACC,CAAY,EAAIC,GAAA,EACjB,CAAE,gBAAAC,EAAiB,UAAWC,EAAa,MAAOC,CAAA,EAAcC,GAAA,EAChE,CAAE,UAAAC,EAAW,YAAAC,CAAA,EAAgBC,GAAA,EAC7BC,EAAOT,GAAA,YAAAA,EAAc,IAAI,QACzBU,EAAeV,GAAA,YAAAA,EAAc,IAAI,SAGvCW,EAAAA,UAAU,IAAM,CACVR,GACCD,GACHJ,EAAO,KAAK,GAAG,CAEnB,EAAG,CAACK,EAAaD,EAAiBJ,CAAM,CAAC,EAGzC,MAAMc,EAAqBZ,GAAA,YAAAA,EAAc,IAAI,iBACvCa,EAAmBb,GAAA,YAAAA,EAAc,IAAI,oBACrCc,EAAcd,GAAA,YAAAA,EAAc,IAAI,QAChCe,EAAqBf,GAAA,YAAAA,EAAc,IAAI,eAEvC,CAACgB,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAI,EACzC,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAc,IAAI,EAC9C,CAACG,EAAeC,CAAgB,EAAIJ,EAAAA,SAAc,IAAI,EACtD,CAACK,EAAiBC,CAAkB,EAAIN,EAAAA,SAAiC,IAAI,EAG7E,CAAE,YAAAO,CAAA,EAAgBC,GAAA,EAClB,CAAE,MAAAC,GAAO,SAAAC,EAAU,cAAAC,CAAA,EAAkBC,GAAA,EACrC,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,GAAA,EACzC,CAAE,aAAAC,CAAA,EAAiBC,GAAA,EAGzBC,GAAsB,CACpB,yBAA0B,CAAC,CAAE,MAAAT,CAAAA,IAAoDC,EAASD,CAAK,EAC/F,gCAAiC,IAAMK,EAAA,CAAkB,CAC1D,EAGD,MAAMK,EAAYC,GAAA,EACZC,EAAcC,GAAA,EACdC,EAAiBC,GAAA,EACjBC,EAASC,GAAA,EACTC,EAAQC,GAAA,EAGR,CAAE,KAAMC,CAAA,EAAoBN,EAAe,KAAK,SAAA,EAChDO,GAAwBD,GAAA,YAAAA,EAA2D,cAAe,CAAA,EAGlGE,EAAyBZ,EAAU,OAAO,YAAA,EAC1Ca,EAA+BX,EAAY,WAAW,YAAA,EAGtD,CAAE,KAAMY,GAAsBd,EAAU,WAAW,SAAS3B,GAAgB,EAAE,EAC9E0C,EAA0Bf,EAAU,gBAAgB,YAAA,EAGpDgB,EAAkB,GAAQzC,GAAsBC,GAAoBC,GACpEwC,EAAc7C,IAAS,SAAW,EAAQC,EAC1C6C,GAAWD,EAAc,QAAUD,EAAkB,YAAc,MAGzE1C,EAAAA,UAAU,IAAM,EACU,SAAY,CAElC,GAAI0C,EAAiB,CACnB,MAAMG,EAAczC,EAAqBA,EAAmB,MAAM,GAAG,EAAI,CAAA,EACzEO,EAAiB,CACf,cAAeV,EACf,iBAAAC,EACA,KAAMC,EACN,YAAA0C,CAAA,CACD,EAGD,MAAMC,EAAa,kBAAkB7C,CAAkB,GACjD8C,EAAS,eAAe,QAAQD,CAAU,EAChD,GAAIC,EAAQ,CACV,GAAI,CACFlC,EAAmB,KAAK,MAAMkC,CAAM,CAAC,CACvC,MAAQ,CAER,CACA,eAAe,WAAWD,CAAU,CACtC,CAEAxC,EAAa,EAAK,EAClB,MACF,CAGA,GAAIqC,GAAeH,EAAmB,CACpC,GAAIA,EAAkB,gBAAkBR,GAAUE,EAChD,GAAI,CACF,MAAMc,EAAMC,EAAaT,EAAkB,eAAe,KAAK,CAAC,EAC1DU,EAAYC,GAAoBX,EAAkB,cAAc,GAAK,aACrE,CAAE,KAAAY,CAAA,EAAS,MAAMpB,EAAO,0BAA0BgB,EAAK,CAC3D,OAAQE,EACR,KAAMhB,CAAA,CACP,EACKmB,EAAUC,GAAkBF,EAAMF,CAAS,EAEjDzC,EAAa,CACX,eAAgB+B,EAAkB,eAClC,cAAea,CAAA,CAChB,CACH,OAASE,EAAO,CACd,QAAQ,MAAM,kCAAmCA,CAAK,EACtD5D,EAAU,wCAAwC,CACpD,MAEAA,EAAU,gCAAgC,EAC1CR,EAAO,KAAK,gBAAgB,EAE9BmB,EAAa,EAAK,CACpB,MAAWqC,GAAe,CAAC5C,GACzBJ,EAAU,kDAAkD,EAC5DR,EAAO,KAAK,gBAAgB,GAE5BmB,EAAa,EAAK,CAEtB,GAEA,CAEF,EAAG,CAACR,EAAMC,EAAcyC,EAAmBvC,EAAoBC,EAAkBC,EAAaC,EAAoBX,CAAS,CAAC,EAG5H,MAAM+D,GAAqB,MAAOC,GAA+B,CAC/D,GAAI,CACF,IAAIC,EAEJ,GAAID,EAAO,OAAS,QASlBC,GAPiB,MAAMjB,EAAwB,YAAY,CACzD,MAAO1C,EACP,KAAM0D,EAAO,KACb,QAASA,EAAO,QAChB,gBAAiBA,EAAO,iBAAmB,EAAA,CAC5C,GAEwB,eACpB,CAEL,IAAIE,EACAC,EAEJ,GAAIH,EAAO,KACTE,EAAeF,EAAO,KACtBG,EAAWH,EAAO,QAAU,+BACvB,CACL,MAAMI,EAAO,IAAI,KAAK,CAACJ,EAAO,SAAW,EAAE,EAAG,CAAE,KAAMA,EAAO,QAAU,2BAA4B,EAC7FK,GAAYL,EAAO,SAAW,aAAe,OAASA,EAAO,SAAW,YAAc,QAAU,MACtGE,EAAe,IAAI,KAAK,CAACE,CAAI,EAAGJ,EAAO,KAAOK,GAAW,CAAE,KAAML,EAAO,QAAU,2BAA4B,EAC9GG,EAAWH,EAAO,QAAU,0BAC9B,CAEA,MAAMM,EAASN,EAAO,SAAW,CAACA,EAAO,KAAO,GAAGG,CAAQ,aAAaH,EAAO,OAAO,GAAKG,EAe3F,GAHAF,GAViB,MAAMpB,EAAuB,YAAY,CACxD,KAAMmB,EAAO,KACb,KAAME,EACN,OAAAI,EACA,YAAaN,EAAO,aAAe,CAAA,EACnC,SAAUA,EAAO,SACjB,eAAgB,KAChB,WAAYA,EAAO,UAAA,CACpB,GAEwB,WAGrBA,EAAO,OAAS,aAAeA,EAAO,eAAiBA,EAAO,iBAChE,GAAI,CACF,MAAMlB,EAA6B,YAAY,CAC7C,WAAYU,EAAaQ,EAAO,gBAAgB,EAChD,aAAcO,GAAeP,EAAO,aAAa,EACjD,KAAM,CACJ,WAAYA,EAAO,iBACnB,WAAY,CAAC,CACX,GAAI,MACJ,KAAM,CACJ,KAAM,mBACN,OAAQC,EACR,QAAS,SAAA,CACX,CACD,CAAA,CACH,CACD,EACD9D,EAAY,mDAAmD,CACjE,OAAS2D,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD5D,EAAU,oFAAoF,CAChG,CAEJ,CAGAR,EAAO,KAAK,kBAAkB,mBAAmBuE,CAAa,CAAC,EAAE,CACnE,OAASH,EAAO,CACd,QAAQ,MAAM,2BAA4BA,CAAK,EAC/C,MAAMU,EAAeV,aAAiB,MAAQA,EAAM,QAAU,6CAC9D,MAAA5D,EAAUsE,CAAY,EAChBV,CACR,CACF,EAGA,OAAI/D,GAAea,EAEf6D,EAAAA,IAACC,EAAA,CACC,QAAS3E,EAAc,6BAA+B,4BAAA,CAAA,EAMvDD,EAMH2E,EAAAA,IAACE,GAAA,CACC,KAAMxB,GACN,UAAApC,EACA,cAAAE,EACA,gBAAAE,EACA,qBAAAyB,EACA,cAAepD,EACf,MAAOiC,EACP,gBAAAE,EACA,aAAAG,EACA,YAAAT,EACA,eAAgB0C,GAChB,SAAU,IAAMrE,EAAO,KAAK,gBAAgB,EAC5C,aAAc,CACZ,MAAOL,EAAE,OAAO,EAChB,eAAgBA,EAAE,gBAAgB,EAClC,uBAAwBA,EAAE,wBAAwB,EAClD,cAAeA,EAAE,eAAe,EAChC,kBAAmBA,EAAE,mBAAmB,EACxC,mBAAoBA,EAAE,oBAAoB,EAC1C,aAAcA,EAAE,cAAc,EAC9B,wBAAyBA,EAAE,yBAAyB,EACpD,YAAaA,EAAE,aAAa,EAC5B,SAAUA,EAAE,UAAU,EACtB,cAAeA,EAAE,eAAe,EAChC,WAAYA,EAAE,YAAY,EAC1B,sBAAuBA,EAAE,uBAAuB,EAChD,aAAcA,EAAE,cAAc,EAC9B,wBAAyBA,EAAE,yBAAyB,EACpD,gBAAiBA,EAAE,iBAAiB,EACpC,iBAAkBA,EAAE,kBAAkB,EACtC,UAAWA,EAAE,WAAW,EACxB,aAAcA,EAAE,cAAc,EAC9B,OAAQA,EAAE,QAAQ,EAClB,QAASA,EAAE,SAAS,EACpB,gBAAiBA,EAAE,iBAAiB,EACpC,SAAUA,EAAE,UAAU,EACtB,gBAAiBA,EAAE,iBAAiB,EACpC,OAAQA,EAAE,QAAQ,EAClB,OAAQA,EAAE,QAAQ,EAClB,SAAUA,EAAE,UAAU,EACtB,mBAAoBA,EAAE,oBAAoB,EAC1C,mBAAoBA,EAAE,oBAAoB,EAC1C,sBAAuBA,EAAE,uBAAuB,EAChD,eAAgBA,EAAE,gBAAgB,CAAA,EAEpC,cAAAuF,GACA,QAAAC,EAAA,CAAA,EApDK,IAuDX,CAEA,SAAwBC,IAAsB,CAC5C,KAAM,CAAE,EAAG3F,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAEjF,OACEkF,EAAAA,IAACM,EAAAA,SAAA,CAAS,SAAUN,EAAAA,IAACC,EAAA,CAAoB,QAASrF,EAAE,SAAS,CAAA,CAAG,EAC9D,SAAAoF,EAAAA,IAACvF,GAAA,CAAA,CAAuB,EAC1B,CAEJ"}
@@ -1,2 +0,0 @@
1
- import{j as l}from"./query-ATBhtd3K.js";import{r as t}from"./vendor-EnoIVk-c.js";import{d as h,e as g,f as v,g as f,O as b,T as w,Q as C}from"./en-IUV4ZXKH-BY1RKeLS.js";import{T as y}from"./ToolbarPanels-rN1MIRTV.js";import{u as D}from"./useAuth-yUx5lBP5.js";import{u as k}from"./i18n-BYxb14hm.js";import{F as T}from"./CommandLineIcon-BBerq9Nd.js";import"./index-DA31r_0s.js";import"./routing-DMdXWYXo.js";import"./XMarkIcon-6m9KVFaj.js";function L({title:s,titleId:e,...n},i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:i,"aria-labelledby":e},n),s?t.createElement("title",{id:e},s):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"}))}const x=t.forwardRef(L);function M({title:s,titleId:e,...n},i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:i,"aria-labelledby":e},n),s?t.createElement("title",{id:e},s):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z"}))}const O=t.forwardRef(M);function E(){const{isFullyAuthenticated:s,isAuthenticated:e,hasValidBackendToken:n}=D();return l.jsx(C,{isFullyAuthenticated:s,isAuthenticated:e,hasValidBackendToken:n})}function I(){const{t:s}=k(),e=(o,d)=>s(`AdminDevOps.${o}`,d),{activePanel:n}=h(),{theme:i,setTheme:r}=g(),{showLineNumbers:c,toggleLineNumbers:a}=v(),m=t.useCallback(({theme:o})=>{r(o)},[r]),u=t.useCallback(()=>{a()},[a]);f({"settings:theme-changed":m,"settings:line-numbers-toggled":u});const p=[{title:e("systemMonitoring"),description:e("systemMonitoringDescription"),icon:x,available:e("systemMonitoringCLI")},{title:e("serviceManagement"),description:e("serviceManagementDescription"),icon:O,available:e("serviceManagementCLI")},{title:e("deploymentControl"),description:e("deploymentControlDescription"),icon:T,available:e("deploymentControlCLI")}];return l.jsx(b,{suggestedFeatures:p,theme:i,showLineNumbers:c,activePanel:n,translations:{title:e("title"),subtitle:e("subtitle"),systemStatus:e("systemStatus"),cliOperations:e("cliOperations"),cliOperationsDescription:e("cliOperationsDescription"),cliTitle:e("cliTitle"),cliDescription:e("cliDescription")},StatusDisplay:E,ToolbarPanels:y,Toolbar:w})}export{I as default};
2
- //# sourceMappingURL=page-DEjlNEY0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-DEjlNEY0.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/ChartBarIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ServerIcon.js","../../src/app/[locale]/admin/devops/page.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ChartBarIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChartBarIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ServerIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ServerIcon);\nexport default ForwardRef;","/**\n * DevOps Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (translations, hooks)\n * and delegates rendering to the pure React AdminDevOpsPage component.\n */\n\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useCallback } from 'react';\nimport {\n ChartBarIcon,\n ServerIcon,\n CommandLineIcon\n} from '@heroicons/react/24/outline';\nimport { StatusDisplay, Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, usePanelBrowse, useLineNumbers, useEventSubscriptions } from '@semiont/react-ui';\nimport { AdminDevOpsPage } from '@semiont/react-ui';\nimport { useAuth } from '@/hooks/useAuth';\n\n// Wrapper component that provides auth props to StatusDisplay\nfunction StatusDisplayWithAuth() {\n const { isFullyAuthenticated, isAuthenticated, hasValidBackendToken } = useAuth();\n return (\n <StatusDisplay\n isFullyAuthenticated={isFullyAuthenticated}\n isAuthenticated={isAuthenticated}\n hasValidBackendToken={hasValidBackendToken}\n />\n );\n}\n\nexport default function DevOpsPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AdminDevOps.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const { activePanel } = usePanelBrowse();\n const { theme, setTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n // Handle theme change events\n const handleThemeChanged = useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => {\n setTheme(theme);\n }, [setTheme]);\n\n // Handle line numbers toggle events\n const handleLineNumbersToggled = useCallback(() => {\n toggleLineNumbers();\n }, [toggleLineNumbers]);\n\n useEventSubscriptions({\n 'settings:theme-changed': handleThemeChanged,\n 'settings:line-numbers-toggled': handleLineNumbersToggled,\n });\n\n const suggestedFeatures = [\n {\n title: t('systemMonitoring'),\n description: t('systemMonitoringDescription'),\n icon: ChartBarIcon,\n available: t('systemMonitoringCLI')\n },\n {\n title: t('serviceManagement'),\n description: t('serviceManagementDescription'),\n icon: ServerIcon,\n available: t('serviceManagementCLI')\n },\n {\n title: t('deploymentControl'),\n description: t('deploymentControlDescription'),\n icon: CommandLineIcon,\n available: t('deploymentControlCLI')\n },\n ];\n\n return (\n <AdminDevOpsPage\n suggestedFeatures={suggestedFeatures}\n theme={theme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n systemStatus: t('systemStatus'),\n cliOperations: t('cliOperations'),\n cliOperationsDescription: t('cliOperationsDescription'),\n cliTitle: t('cliTitle'),\n cliDescription: t('cliDescription'),\n }}\n StatusDisplay={StatusDisplayWithAuth}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"names":["ChartBarIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ServerIcon","StatusDisplayWithAuth","isFullyAuthenticated","isAuthenticated","hasValidBackendToken","useAuth","jsx","StatusDisplay","DevOpsPage","_t","useTranslation","t","k","p","activePanel","usePanelBrowse","theme","setTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","handleThemeChanged","useCallback","handleLineNumbersToggled","useEventSubscriptions","suggestedFeatures","CommandLineIcon","AdminDevOpsPage","ToolbarPanels","Toolbar"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,2 +0,0 @@
1
- import{j as y}from"./query-ATBhtd3K.js";import{r as d}from"./vendor-EnoIVk-c.js";import{u as S,a as P}from"./useAuth-yUx5lBP5.js";import{u as C,L as v}from"./routing-DMdXWYXo.js";import{u as w,c as U,W as R,P as I}from"./en-IUV4ZXKH-BY1RKeLS.js";import{u as x}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";function j(){var m;const{t:b}=x(),e=(c,n)=>b(`AuthWelcome.${c}`,n),{isAuthenticated:o,isLoading:r,user:s}=S(),{clearSession:h}=P(),i=C(),[A,T]=d.useState(!1),g=w(),p=U(),{data:t}=p.me.useQuery(),a=p.acceptTerms.useMutation();d.useEffect(()=>{if(!r){if(!o){i.push("/auth/connect");return}if(t!=null&&t.termsAcceptedAt){i.push("/");return}if(o&&t!==void 0&&(t!=null&&t.termsAcceptedAt)){i.push("/");return}}},[r,o,i,t]);const l=async c=>{if(!c){h(),i.push("/");return}try{await a.mutateAsync(),T(!0),setTimeout(()=>{i.push("/")},1e3)}catch(n){console.error("Terms acceptance error:",n),g.showError(e("errorAcceptingTerms"))}},f=r?"loading":A?"accepted":"form",u=((m=s==null?void 0:s.name)==null?void 0:m.split(" ")[0])??"";return y.jsx(R,{userName:u,termsAcceptedAt:(t==null?void 0:t.termsAcceptedAt)??null,isNewUser:!(t!=null&&t.termsAcceptedAt),status:f,isProcessing:a.isPending,onAccept:()=>l(!0),onDecline:()=>l(!1),translations:{loading:e("loading"),welcomeTitle:e("welcomeTitle"),thanksForAccepting:e("thanksForAccepting"),welcomeUser:e("welcomeUser",{firstName:u}),reviewTermsPrompt:e("reviewTermsPrompt"),termsSummaryTitle:e("termsSummaryTitle"),termsSummaryIntro:e("termsSummaryIntro"),acceptableUseTitle:e("acceptableUseTitle"),acceptableUseResponsible:e("acceptableUseResponsible"),acceptableUseRespect:e("acceptableUseRespect"),acceptableUseConduct:e("acceptableUseConduct"),prohibitedContentTitle:e("prohibitedContentTitle"),prohibitedContentIntro:e("prohibitedContentIntro"),prohibitedIllegal:e("prohibitedIllegal"),prohibitedAdult:e("prohibitedAdult"),prohibitedHate:e("prohibitedHate"),prohibitedViolence:e("prohibitedViolence"),prohibitedMisinformation:e("prohibitedMisinformation"),prohibitedPrivacy:e("prohibitedPrivacy"),prohibitedCopyright:e("prohibitedCopyright"),prohibitedMalware:e("prohibitedMalware"),prohibitedSpam:e("prohibitedSpam"),conductTitle:e("conductTitle"),conductDescription:e("conductDescription"),conductLink:e("conductLink"),conductPromotion:e("conductPromotion"),responsibilitiesTitle:e("responsibilitiesTitle"),responsibilitiesSecure:e("responsibilitiesSecure"),responsibilitiesReport:e("responsibilitiesReport"),responsibilitiesAccurate:e("responsibilitiesAccurate"),responsibilitiesComply:e("responsibilitiesComply"),violationsWarning:e("violationsWarning"),readFullTerms:e("readFullTerms"),termsOfService:e("termsOfService"),and:e("and"),privacyPolicy:e("privacyPolicy"),declineAndSignOut:e("declineAndSignOut"),acceptAndContinue:e("acceptAndContinue"),processing:e("processing"),legallyBound:e("legallyBound")},PageLayout:I,Link:v})}export{j as default};
2
- //# sourceMappingURL=page-DLtwpo78.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-DLtwpo78.js","sources":["../../src/app/[locale]/auth/welcome/page.tsx"],"sourcesContent":["/**\n * Welcome Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (routing, auth, API calls)\n * and delegates rendering to the pure React WelcomePage component.\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { useAuth } from '@/hooks/useAuth';\nimport { useAuthContext } from '@/contexts/AuthContext';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { PageLayout, useToast, useAuthApi } from '@semiont/react-ui';\nimport { WelcomePage } from '@semiont/react-ui';\n\nexport default function Welcome() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthWelcome.${k}`, p as any) as string;\n const { isAuthenticated, isLoading, user } = useAuth();\n const { clearSession } = useAuthContext();\n const router = useRouter();\n const [termsAccepted, setTermsAccepted] = useState(false);\n const toast = useToast();\n\n // API hooks\n const authAPI = useAuthApi();\n\n // Query user data to check if terms already accepted\n const { data: userData } = authAPI.me.useQuery();\n\n // Mutation for accepting terms\n const acceptTermsMutation = authAPI.acceptTerms.useMutation();\n\n // Redirect if not authenticated or if terms already accepted\n useEffect(() => {\n if (isLoading) return;\n if (!isAuthenticated) {\n router.push('/auth/connect');\n return;\n }\n\n // Check if user has accepted terms\n if (userData?.termsAcceptedAt) {\n router.push('/');\n return;\n }\n\n // If terms already accepted, redirect to main app\n if (isAuthenticated && userData !== undefined && userData?.termsAcceptedAt) {\n router.push('/');\n return;\n }\n }, [isLoading, isAuthenticated, router, userData]);\n\n const handleTermsAcceptance = async (accepted: boolean) => {\n if (!accepted) {\n // User declined terms - clear session and redirect to home\n clearSession();\n router.push('/');\n return;\n }\n\n try {\n await acceptTermsMutation.mutateAsync();\n setTermsAccepted(true);\n\n // Small delay to show the acceptance state\n setTimeout(() => {\n router.push('/');\n }, 1000);\n } catch (error) {\n console.error('Terms acceptance error:', error);\n toast.showError(t('errorAcceptingTerms'));\n }\n };\n\n // Determine status\n const pageStatus = isLoading ? 'loading' : termsAccepted ? 'accepted' : 'form';\n const firstName = user?.name?.split(' ')[0] ?? '';\n\n return (\n <WelcomePage\n userName={firstName}\n termsAcceptedAt={userData?.termsAcceptedAt ?? null}\n isNewUser={!userData?.termsAcceptedAt}\n status={pageStatus}\n isProcessing={acceptTermsMutation.isPending}\n onAccept={() => handleTermsAcceptance(true)}\n onDecline={() => handleTermsAcceptance(false)}\n translations={{\n loading: t('loading'),\n welcomeTitle: t('welcomeTitle'),\n thanksForAccepting: t('thanksForAccepting'),\n welcomeUser: t('welcomeUser', { firstName }),\n reviewTermsPrompt: t('reviewTermsPrompt'),\n termsSummaryTitle: t('termsSummaryTitle'),\n termsSummaryIntro: t('termsSummaryIntro'),\n acceptableUseTitle: t('acceptableUseTitle'),\n acceptableUseResponsible: t('acceptableUseResponsible'),\n acceptableUseRespect: t('acceptableUseRespect'),\n acceptableUseConduct: t('acceptableUseConduct'),\n prohibitedContentTitle: t('prohibitedContentTitle'),\n prohibitedContentIntro: t('prohibitedContentIntro'),\n prohibitedIllegal: t('prohibitedIllegal'),\n prohibitedAdult: t('prohibitedAdult'),\n prohibitedHate: t('prohibitedHate'),\n prohibitedViolence: t('prohibitedViolence'),\n prohibitedMisinformation: t('prohibitedMisinformation'),\n prohibitedPrivacy: t('prohibitedPrivacy'),\n prohibitedCopyright: t('prohibitedCopyright'),\n prohibitedMalware: t('prohibitedMalware'),\n prohibitedSpam: t('prohibitedSpam'),\n conductTitle: t('conductTitle'),\n conductDescription: t('conductDescription'),\n conductLink: t('conductLink'),\n conductPromotion: t('conductPromotion'),\n responsibilitiesTitle: t('responsibilitiesTitle'),\n responsibilitiesSecure: t('responsibilitiesSecure'),\n responsibilitiesReport: t('responsibilitiesReport'),\n responsibilitiesAccurate: t('responsibilitiesAccurate'),\n responsibilitiesComply: t('responsibilitiesComply'),\n violationsWarning: t('violationsWarning'),\n readFullTerms: t('readFullTerms'),\n termsOfService: t('termsOfService'),\n and: t('and'),\n privacyPolicy: t('privacyPolicy'),\n declineAndSignOut: t('declineAndSignOut'),\n acceptAndContinue: t('acceptAndContinue'),\n processing: t('processing'),\n legallyBound: t('legallyBound'),\n }}\n PageLayout={PageLayout}\n Link={Link}\n />\n );\n}\n"],"names":["Welcome","_t","useTranslation","t","k","p","isAuthenticated","isLoading","user","useAuth","clearSession","useAuthContext","router","useRouter","termsAccepted","setTermsAccepted","useState","toast","useToast","authAPI","useAuthApi","userData","acceptTermsMutation","useEffect","handleTermsAcceptance","accepted","error","pageStatus","firstName","_a","jsx","WelcomePage","PageLayout","Link"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{j as s}from"./query-ATBhtd3K.js";import{u as f,r as g}from"./vendor-EnoIVk-c.js";import{P as l,A as y}from"./en-IUV4ZXKH-BY1RKeLS.js";import{C as d}from"./CookiePreferences-Cbur0STI.js";import{K as A}from"./privacy-DO1oxJpM.js";import{r as h,L as x}from"./routing-tJ_HbFRP.js";import{L}from"./routing-DMdXWYXo.js";import{u as b}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";import"./XMarkIcon-6m9KVFaj.js";function N(){const{t}=b(),e=(r,o)=>t(`AuthError.${r}`,o),n=(r,o)=>t(`Footer.${r}`,o),i=(r,o)=>t(`Navigation.${r}`,o),c=(r,o)=>t(`Home.${r}`,o),[m]=f(),a=g.useContext(A),p=m.get("error")??null,u={pageTitle:e("pageTitle"),tryAgain:e("tryAgain"),errorConfiguration:e("errorConfiguration"),errorAccessDenied:e("errorAccessDenied"),errorVerification:e("errorVerification"),errorGeneric:e("errorGeneric")};return s.jsx(l,{Link:x,routes:h,t:n,tNav:i,tHome:c,CookiePreferences:d,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"bg-gray-50 dark:bg-gray-900",children:s.jsx(y,{errorType:p,Link:L,translations:u})})}export{N as default};
2
- //# sourceMappingURL=page-Deep7E5d.js.map
@@ -1,8 +0,0 @@
1
- import{j as s}from"./query-ATBhtd3K.js";import{r as u}from"./vendor-EnoIVk-c.js";import{P as j,b as c}from"./en-IUV4ZXKH-BY1RKeLS.js";import{C as b}from"./CookiePreferences-Cbur0STI.js";import{K as N}from"./privacy-DO1oxJpM.js";import{r as f,L as g}from"./routing-tJ_HbFRP.js";import{L as o}from"./routing-DMdXWYXo.js";import{u as n}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";import"./XMarkIcon-6m9KVFaj.js";function _(){const{t:r}=n(),e=(t,i)=>r(`About.${t}`,i),{t:l}=n(),m=(t,i)=>l(`Footer.${t}`,i),{t:d}=n(),h=(t,i)=>d(`Navigation.${t}`,i),{t:p}=n(),x=(t,i)=>p(`Home.${t}`,i),a=u.useContext(N);return s.jsx(j,{Link:g,routes:f,t:m,tNav:h,tHome:x,showAuthLinks:!1,CookiePreferences:b,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"semiont-static-page",children:s.jsx("div",{className:"semiont-static-container",children:s.jsxs("div",{className:"semiont-static-content",children:[s.jsxs("header",{className:"semiont-static-header",children:[s.jsx("h1",{className:"semiont-static-title",children:e("pageTitle")}),s.jsx("p",{className:"semiont-static-subtitle",children:e("tagline")})]}),s.jsxs("div",{className:"semiont-static-action-buttons",children:[s.jsx(o,{to:"/auth/signup",className:c.primary.base,children:e("signUp")}),s.jsx(o,{to:"/auth/connect?callbackUrl=/know",className:c.primary.base,children:e("signIn")})]}),s.jsxs("article",{className:"semiont-static-article",children:[s.jsxs("section",{children:[s.jsx("h2",{children:e("missionTitle")}),s.jsx("p",{children:e("mission")})]}),s.jsxs("section",{children:[s.jsx("h2",{children:e("coreFeaturesTitle")}),s.jsxs("div",{className:"semiont-static-feature-grid",children:[s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"📊"}),s.jsx("h3",{children:e("semanticContentTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("semanticContentSubtitle")}),e("semanticContent").split(`
2
-
3
- `).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]}),s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"🤝"}),s.jsx("h3",{children:e("collaborationTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("collaborationSubtitle")}),e("collaboration").split(`
4
-
5
- `).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]}),s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"🔐"}),s.jsx("h3",{children:e("rbacTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("rbacSubtitle")}),e("rbac").split(`
6
-
7
- `).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]})]})]}),s.jsxs("section",{className:"semiont-static-highlight",children:[s.jsx("h2",{children:e("openSourceTitle")}),s.jsx("p",{children:e("openSource")}),s.jsx("div",{className:"semiont-static-action-buttons",children:s.jsx("a",{href:"https://github.com/The-AI-Alliance/semiont",target:"_blank",rel:"noopener noreferrer",className:c.secondary.base,children:e("viewOnGitHub")})})]}),s.jsxs("section",{children:[s.jsx("h2",{children:e("futureVisionTitle")}),s.jsx("p",{children:e("futureVision")})]})]})]})})})}export{_ as default};
8
- //# sourceMappingURL=page-E99MPOn5.js.map
@@ -1,2 +0,0 @@
1
- import{j as t}from"./query-ATBhtd3K.js";import{r as n}from"./vendor-EnoIVk-c.js";import{S as u,b as a}from"./en-IUV4ZXKH-BY1RKeLS.js";import{u as c}from"./routing-DMdXWYXo.js";import{u as l}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";const f=5e3;function b(){const{t:s}=l(),r=m=>s(`Home.${m}`),i=c(),e=n.useRef(null),o=()=>{e.current&&clearTimeout(e.current),i.push("/know/discover")};return n.useEffect(()=>(e.current=setTimeout(o,f),()=>{e.current&&clearTimeout(e.current)}),[]),t.jsxs("main",{role:"main",style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:"100vh",gap:"2rem"},children:[t.jsx(u,{t:r,size:"xl",animated:!0}),t.jsx("button",{onClick:o,className:a.primary.base,children:r("begin")})]})}export{b as default};
2
- //# sourceMappingURL=page-ZBwMTeR-.js.map
@@ -1,2 +0,0 @@
1
- import{j as r}from"./query-ATBhtd3K.js";import{u as f,r as h}from"./vendor-EnoIVk-c.js";import{u as U,L as d}from"./routing-DMdXWYXo.js";import{P as k,a as H}from"./en-IUV4ZXKH-BY1RKeLS.js";import{C as b}from"./CookiePreferences-Cbur0STI.js";import{K as x}from"./privacy-DO1oxJpM.js";import{r as y,L as A}from"./routing-tJ_HbFRP.js";import{u as L}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";import"./XMarkIcon-6m9KVFaj.js";function S(){const{t:n}=L(),o=(t,e)=>n(`AuthSignUp.${t}`,e),i=(t,e)=>n(`Footer.${t}`,e),c=(t,e)=>n(`Navigation.${t}`,e),s=(t,e)=>n(`Home.${t}`,e),[p]=f(),m=U(),a=h.useContext(x),l=p.get("callbackUrl")??"/auth/welcome",u=async()=>{m.push(`/auth/connect?callbackUrl=${encodeURIComponent(l)}`)},g={pageTitle:o("pageTitle"),signUpPrompt:o("signUpPrompt"),signUpWithGoogle:o("signUpWithGoogle"),creatingAccount:o("creatingAccount"),approvedDomainsInfo:o("approvedDomainsInfo"),termsAgreement:o("termsAgreement"),alreadyHaveAccount:o("alreadyHaveAccount"),tagline:s("tagline"),backToHome:o("backToHome")};return r.jsx(k,{Link:A,routes:y,t:i,tNav:c,tHome:s,CookiePreferences:b,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"semiont-page-layout--auth",showAuthLinks:!1,children:r.jsx(H,{onSignUp:u,Link:d,translations:g})})}function R(){return r.jsx(S,{})}export{R as default};
2
- //# sourceMappingURL=page-Zq6ARIvg.js.map
@@ -1,2 +0,0 @@
1
- import{r as o}from"./vendor-EnoIVk-c.js";import{u as t}from"./routing-DMdXWYXo.js";import"./query-ATBhtd3K.js";import"./index-DA31r_0s.js";import"./i18n-BYxb14hm.js";function a(){const r=t();return o.useEffect(()=>{r.replace("/know/discover")},[r]),null}export{a as default};
2
- //# sourceMappingURL=page-iSL5E639.js.map
@@ -1,2 +0,0 @@
1
- import{j as u}from"./query-ATBhtd3K.js";import{r as n}from"./vendor-EnoIVk-c.js";import{d as g,e as T,f as d,g as h,B as b,T as f}from"./en-IUV4ZXKH-BY1RKeLS.js";import{T as D}from"./ToolbarPanels-rN1MIRTV.js";import{u as x}from"./i18n-BYxb14hm.js";import"./index-DA31r_0s.js";import"./useAuth-yUx5lBP5.js";import"./routing-DMdXWYXo.js";import"./XMarkIcon-6m9KVFaj.js";function k(){const{t:a}=x(),e=(t,p)=>a(`ModerateRecent.${t}`,p),{activePanel:i}=g(),{theme:r,setTheme:s}=T(),{showLineNumbers:c,toggleLineNumbers:o}=d(),m=n.useCallback(({theme:t})=>{s(t)},[s]),l=n.useCallback(()=>{o()},[o]);return h({"settings:theme-changed":m,"settings:line-numbers-toggled":l}),u.jsx(b,{hasDocuments:!1,isLoading:!1,theme:r,showLineNumbers:c,activePanel:i,translations:{pageTitle:e("pageTitle"),pageDescription:e("pageDescription"),sectionTitle:e("sectionTitle"),sectionDescription:e("sectionDescription"),noDocuments:e("noDocuments"),activityWillAppear:e("activityWillAppear"),loading:e("loading")},ToolbarPanels:D,Toolbar:f})}export{k as default};
2
- //# sourceMappingURL=page-xdXYx3nl.js.map
@@ -1,2 +0,0 @@
1
- import{j as l}from"./query-ATBhtd3K.js";import{r as c}from"./vendor-EnoIVk-c.js";import{u as m}from"./routing-DMdXWYXo.js";import{a7 as C,a8 as S,a9 as b,aa as O}from"./en-IUV4ZXKH-BY1RKeLS.js";import{u as v}from"./i18n-BYxb14hm.js";function E({isOpen:e,onClose:t}){const o=m(),{t:n}=v(),s=(r,a)=>n(`Search.${r}`,a),i=(r,a)=>{r==="resource"?o.push(`/know/resource/${encodeURIComponent(a)}`):o.push(`/know/entity/${a}`)};return l.jsx(C,{isOpen:e,onClose:t,onNavigate:i,translations:{placeholder:s("placeholder"),searching:s("searching"),noResults:s("noResults"),startTyping:s("startTyping"),navigate:s("navigate"),select:s("select"),close:s("close"),enter:s("enter"),esc:s("esc")}})}const T=c.createContext(null);function U({children:e}){const t=m(),[o,n]=c.useState(!1),[s,i]=c.useState(!1),[r,a]=c.useState([]),u=c.useCallback(()=>{n(!0)},[]),f=c.useCallback(()=>{i(!0)},[]),h=c.useCallback(()=>{n(!1),i(!1),r.forEach(w=>w()),a([])},[r]);S([{key:"k",ctrlOrCmd:!0,handler:()=>{u()},description:"Open global search"},{key:"n",ctrlOrCmd:!0,handler:()=>{t.push("/know/compose")},description:"Create new resource"},{key:"/",handler:()=>{u()},description:"Open global search (alternative)"},{key:"?",shift:!0,handler:()=>{f()},description:"Show keyboard shortcuts help"}]),b("Escape",h,300);const k={openGlobalSearch:u,openKeyboardHelp:f,closeAllOverlays:h};return l.jsxs(T.Provider,{value:k,children:[e,o&&l.jsx(E,{isOpen:o,onClose:()=>n(!1)}),s&&l.jsx(O,{isOpen:s,onClose:()=>i(!1)})]})}const x=[{id:"necessary",name:"Strictly Necessary",description:"These cookies are essential for the website to function properly. They enable core functionality such as security, network management, and accessibility.",required:!0,cookies:["semiont-token","consent-preferences"]},{id:"analytics",name:"Analytics",description:"These cookies help us understand how visitors interact with our website by collecting and reporting information anonymously.",required:!1,cookies:["_ga","_ga_*","_gid","_gat","lighthouse-*"]},{id:"marketing",name:"Marketing",description:"These cookies are used to track visitors across websites to display relevant advertisements and measure campaign effectiveness.",required:!1,cookies:["_fbp","_fbc","fr","ads-*"]},{id:"preferences",name:"Preferences",description:"These cookies remember your choices and preferences to provide a more personalized experience.",required:!1,cookies:["theme-preference","language-preference","ui-settings"]}],p="1.0",g="semiont-cookie-consent",_={necessary:!0,analytics:!1,marketing:!1,preferences:!1,timestamp:new Date().toISOString(),version:p},A=e=>{typeof window>"u"||x.forEach(t=>{if(t.required)return;e[t.id]||t.cookies.forEach(n=>{if(n.includes("*")){const s=n.replace("*","");document.cookie.split(";").forEach(i=>{var a;const r=(a=i.split("=")[0])==null?void 0:a.trim();r&&r.startsWith(s)&&d(r)})}else d(n)})})},d=e=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`,document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`;const t=window.location.hostname.split(".").slice(-2).join(".");document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${t}`},I=()=>{if(typeof window>"u")return null;try{const e=localStorage.getItem(g);if(!e)return null;const t=JSON.parse(e);return t.version!==p?null:t}catch(e){return console.warn("Failed to parse cookie consent:",e),null}},j=e=>{if(typeof window>"u")return;const t={..._,...e,necessary:!0,timestamp:new Date().toISOString(),version:p};try{localStorage.setItem(g,JSON.stringify(t)),A(t),window.dispatchEvent(new CustomEvent("cookieConsentChanged",{detail:t}))}catch(o){console.error("Failed to save cookie consent:",o)}},D=()=>{const e=I();if(!e)return!1;const t=new Date(e.timestamp),o=new Date;return o.setMonth(o.getMonth()-13),t>o},G=()=>typeof window>"u"?!1:!D(),y=async()=>{try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone;return e.includes("Europe/")?"EU":e.includes("America/Los_Angeles")||e.includes("America/Vancouver")?"CA":e.includes("America/")?"US":"OTHER"}catch{return"OTHER"}},H=async()=>await y()==="CA",P=async()=>await y()==="EU",q=()=>{if(typeof window>"u")return{};const e={};document.cookie.split(";").forEach(t=>{const[o,n]=t.trim().split("=");o&&n&&(e[`cookie_${o}`]=decodeURIComponent(n))});for(let t=0;t<localStorage.length;t++){const o=localStorage.key(t);o&&(e[`localStorage_${o}`]=localStorage.getItem(o)||"")}for(let t=0;t<sessionStorage.length;t++){const o=sessionStorage.key(t);o&&(e[`sessionStorage_${o}`]=sessionStorage.getItem(o)||"")}return e},J=()=>{typeof window>"u"||(localStorage.clear(),sessionStorage.clear(),document.cookie.split(";").forEach(e=>{var o;const t=(o=e.split("=")[0])==null?void 0:o.trim();t&&d(t)}),window.location.reload())};export{x as C,T as K,U as a,G as b,H as c,J as d,q as e,I as g,P as i,j as s};
2
- //# sourceMappingURL=privacy-DO1oxJpM.js.map
@@ -1,2 +0,0 @@
1
- import{r as o}from"./vendor-EnoIVk-c.js";import{j as b}from"./query-ATBhtd3K.js";import{U as E,V as U,X as T,Y as $}from"./en-IUV4ZXKH-BY1RKeLS.js";function P(e){return`${e.protocol}://${e.host}:${e.port}`}function J(e){return e==="localhost"||e==="127.0.0.1"?"http":"https"}const k="semiont.token.";function w(e){return localStorage.getItem(`${k}${e}`)}function V(e,n){localStorage.setItem(`${k}${e}`,n)}function v(e){localStorage.removeItem(`${k}${e}`)}function S(e){try{const n=e.split(".")[1];return n?JSON.parse(atob(n)).exp*1e3<Date.now():!0}catch{return!0}}function Y(e){const n=w(e);return n?S(n)?"expired":"authenticated":"signed-out"}const x="semiont.knowledgeBases",h="semiont.activeKnowledgeBaseId";function M(e){if(e.host!==void 0)return e;try{const n=new URL(e.backendUrl);return{id:e.id,label:e.label,host:n.hostname,port:parseInt(n.port,10)||(n.protocol==="https:"?443:80),protocol:n.protocol==="https:"?"https":"http",email:""}}catch{return{id:e.id,label:e.label||"Unknown",host:"localhost",port:4e3,protocol:"http",email:""}}}function B(){try{const e=localStorage.getItem(x);return e?JSON.parse(e).map(M):[]}catch{return[]}}function O(e){localStorage.setItem(x,JSON.stringify(e))}const C=o.createContext(void 0);function D({children:e}){const[n,i]=o.useState(()=>B()),[t,l]=o.useState(()=>{var f;const s=localStorage.getItem(h),a=B();return s&&a.some(u=>u.id===s)?s:((f=a[0])==null?void 0:f.id)??null});o.useEffect(()=>{O(n)},[n]),o.useEffect(()=>{t?localStorage.setItem(h,t):localStorage.removeItem(h)},[t]);const c=o.useCallback(s=>{i(a=>[...a,s]),l(s.id)},[]),d=o.useCallback(s=>{v(s),i(a=>a.filter(f=>f.id!==s)),l(a=>{var u;return a!==s?a:((u=n.filter(A=>A.id!==s)[0])==null?void 0:u.id)??null})},[n]),m=o.useCallback(s=>{l(s)},[]),g=o.useCallback((s,a)=>{i(f=>f.map(u=>u.id===s?{...u,...a}:u))},[]),p=o.useCallback(s=>{v(s),i(a=>[...a])},[]),r=o.useMemo(()=>n.find(s=>s.id===t)??null,[n,t]),K=o.useMemo(()=>({knowledgeBases:n,activeKnowledgeBaseId:t,activeKnowledgeBase:r,addKnowledgeBase:c,removeKnowledgeBase:d,setActiveKnowledgeBase:m,updateKnowledgeBase:g,signOut:p}),[n,t,r,c,d,m,g,p]);return b.jsx(C.Provider,{value:K,children:e})}function y(){const e=o.useContext(C);if(!e)throw new Error("useKnowledgeBaseContext must be used within KnowledgeBaseProvider");return e}const I=o.createContext(void 0);function F({children:e}){const{activeKnowledgeBase:n}=y(),[i,t]=o.useState(null),l=(n==null?void 0:n.id)??null,[c,d]=o.useState(()=>{if(!l)return!1;const r=w(l);return!!r&&!S(r)});o.useEffect(()=>{if(!l||!n){t(null),d(!1);return}const r=w(l);if(!r||S(r)){t(null),d(!1);return}d(!0),new E({baseUrl:T(P(n)),eventBus:new U}).getMe({auth:$(r)}).then(s=>{t({token:r,user:s})}).catch(()=>{t(null)}).finally(()=>{d(!1)})},[l,n]);const m=o.useCallback(r=>{t(r)},[]),g=o.useCallback(()=>{t(null)},[]),p=o.useMemo(()=>({session:i,isLoading:c,setSession:m,clearSession:g}),[i,c,m,g]);return b.jsx(I.Provider,{value:p,children:e})}const L={session:null,isLoading:!1,setSession:()=>{},clearSession:()=>{}};function N(){return o.useContext(I)??L}function X(){const{session:e,isLoading:n}=N();return o.useMemo(()=>{var l,c;const i=!!e,t=(e==null?void 0:e.user)??null;return{session:e,user:t,backendUser:t,token:(e==null?void 0:e.token)??null,isLoading:n,isAuthenticated:i,hasValidBackendToken:!!(e!=null&&e.token),isFullyAuthenticated:i,userDomain:(t==null?void 0:t.domain)||((l=t==null?void 0:t.email)==null?void 0:l.split("@")[1]),displayName:(t==null?void 0:t.name)??((c=t==null?void 0:t.email)==null?void 0:c.split("@")[0])??"User",avatarUrl:(t==null?void 0:t.image)??null,isAdmin:(t==null?void 0:t.isAdmin)??!1,isModerator:(t==null?void 0:t.isModerator)??!1}},[e,n])}export{F as A,D as K,N as a,y as b,J as d,Y as g,P as k,V as s,X as u};
2
- //# sourceMappingURL=useAuth-yUx5lBP5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuth-yUx5lBP5.js","sources":["../../src/contexts/KnowledgeBaseContext.tsx","../../src/contexts/AuthContext.tsx","../../src/hooks/useAuth.ts"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from 'react';\n\nexport interface KnowledgeBase {\n id: string;\n label: string;\n host: string;\n port: number;\n protocol: 'http' | 'https';\n email: string;\n}\n\nexport function kbBackendUrl(kb: KnowledgeBase): string {\n return `${kb.protocol}://${kb.host}:${kb.port}`;\n}\n\nexport function defaultProtocol(host: string): 'http' | 'https' {\n return host === 'localhost' || host === '127.0.0.1' ? 'http' : 'https';\n}\n\n// Per-KB JWT token storage\nconst TOKEN_PREFIX = 'semiont.token.';\n\nexport function getKbToken(kbId: string): string | null {\n return localStorage.getItem(`${TOKEN_PREFIX}${kbId}`);\n}\n\nexport function setKbToken(kbId: string, token: string): void {\n localStorage.setItem(`${TOKEN_PREFIX}${kbId}`, token);\n}\n\nexport function clearKbToken(kbId: string): void {\n localStorage.removeItem(`${TOKEN_PREFIX}${kbId}`);\n}\n\nexport function isTokenExpired(token: string): boolean {\n try {\n const payloadPart = token.split('.')[1];\n if (!payloadPart) return true;\n const payload = JSON.parse(atob(payloadPart));\n return payload.exp * 1000 < Date.now();\n } catch {\n return true;\n }\n}\n\nexport type KbSessionStatus = 'authenticated' | 'expired' | 'signed-out' | 'unreachable';\n\nexport function getKbSessionStatus(kbId: string): KbSessionStatus {\n const token = getKbToken(kbId);\n if (!token) return 'signed-out';\n return isTokenExpired(token) ? 'expired' : 'authenticated';\n}\n\ninterface KnowledgeBaseContextValue {\n knowledgeBases: KnowledgeBase[];\n activeKnowledgeBaseId: string | null;\n activeKnowledgeBase: KnowledgeBase | null;\n addKnowledgeBase: (kb: KnowledgeBase) => void;\n removeKnowledgeBase: (id: string) => void;\n setActiveKnowledgeBase: (id: string) => void;\n updateKnowledgeBase: (id: string, updates: Partial<Pick<KnowledgeBase, 'label'>>) => void;\n signOut: (id: string) => void;\n}\n\nconst STORAGE_KEY = 'semiont.knowledgeBases';\nconst ACTIVE_KEY = 'semiont.activeKnowledgeBaseId';\n\n// Migrate legacy entries that have backendUrl instead of host/port/protocol\nfunction migrateLegacyEntry(entry: any): KnowledgeBase {\n if (entry.host !== undefined) return entry as KnowledgeBase;\n // Legacy format: { id, label, backendUrl }\n try {\n const url = new URL(entry.backendUrl);\n return {\n id: entry.id,\n label: entry.label,\n host: url.hostname,\n port: parseInt(url.port, 10) || (url.protocol === 'https:' ? 443 : 80),\n protocol: url.protocol === 'https:' ? 'https' : 'http',\n email: '',\n };\n } catch {\n return {\n id: entry.id,\n label: entry.label || 'Unknown',\n host: 'localhost',\n port: 4000,\n protocol: 'http',\n email: '',\n };\n }\n}\n\nfunction loadKnowledgeBases(): KnowledgeBase[] {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return [];\n const entries = JSON.parse(raw) as any[];\n return entries.map(migrateLegacyEntry);\n } catch {\n return [];\n }\n}\n\nfunction saveKnowledgeBases(knowledgeBases: KnowledgeBase[]): void {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(knowledgeBases));\n}\n\nconst KnowledgeBaseContext = createContext<KnowledgeBaseContextValue | undefined>(undefined);\n\nexport function KnowledgeBaseProvider({ children }: { children: React.ReactNode }) {\n const [knowledgeBases, setKnowledgeBases] = useState<KnowledgeBase[]>(() => loadKnowledgeBases());\n const [activeKnowledgeBaseId, setActiveKnowledgeBaseId] = useState<string | null>(() => {\n const saved = localStorage.getItem(ACTIVE_KEY);\n const loaded = loadKnowledgeBases();\n if (saved && loaded.some(kb => kb.id === saved)) return saved;\n return loaded[0]?.id ?? null;\n });\n\n useEffect(() => {\n saveKnowledgeBases(knowledgeBases);\n }, [knowledgeBases]);\n\n useEffect(() => {\n if (activeKnowledgeBaseId) {\n localStorage.setItem(ACTIVE_KEY, activeKnowledgeBaseId);\n } else {\n localStorage.removeItem(ACTIVE_KEY);\n }\n }, [activeKnowledgeBaseId]);\n\n const addKnowledgeBase = useCallback((kb: KnowledgeBase) => {\n setKnowledgeBases(prev => [...prev, kb]);\n setActiveKnowledgeBaseId(kb.id);\n }, []);\n\n const removeKnowledgeBase = useCallback((id: string) => {\n clearKbToken(id);\n setKnowledgeBases(prev => prev.filter(kb => kb.id !== id));\n setActiveKnowledgeBaseId(prev => {\n if (prev !== id) return prev;\n const remaining = knowledgeBases.filter(kb => kb.id !== id);\n return remaining[0]?.id ?? null;\n });\n }, [knowledgeBases]);\n\n const setActiveKnowledgeBase = useCallback((id: string) => {\n setActiveKnowledgeBaseId(id);\n }, []);\n\n const updateKnowledgeBase = useCallback((id: string, updates: Partial<Pick<KnowledgeBase, 'label'>>) => {\n setKnowledgeBases(prev => prev.map(kb => kb.id === id ? { ...kb, ...updates } : kb));\n }, []);\n\n const signOut = useCallback((id: string) => {\n clearKbToken(id);\n // Force re-render by updating the KB list (same entries, new reference)\n setKnowledgeBases(prev => [...prev]);\n }, []);\n\n const activeKnowledgeBase = useMemo(\n () => knowledgeBases.find(kb => kb.id === activeKnowledgeBaseId) ?? null,\n [knowledgeBases, activeKnowledgeBaseId]\n );\n\n const value = useMemo(\n () => ({ knowledgeBases, activeKnowledgeBaseId, activeKnowledgeBase, addKnowledgeBase, removeKnowledgeBase, setActiveKnowledgeBase, updateKnowledgeBase, signOut }),\n [knowledgeBases, activeKnowledgeBaseId, activeKnowledgeBase, addKnowledgeBase, removeKnowledgeBase, setActiveKnowledgeBase, updateKnowledgeBase, signOut]\n );\n\n return <KnowledgeBaseContext.Provider value={value}>{children}</KnowledgeBaseContext.Provider>;\n}\n\nexport function useKnowledgeBaseContext(): KnowledgeBaseContextValue {\n const ctx = useContext(KnowledgeBaseContext);\n if (!ctx) throw new Error('useKnowledgeBaseContext must be used within KnowledgeBaseProvider');\n return ctx;\n}\n","import React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react';\nimport { SemiontApiClient } from '@semiont/api-client';\nimport type { components } from '@semiont/core';\nimport { baseUrl, EventBus, accessToken } from '@semiont/core';\nimport { useKnowledgeBaseContext, kbBackendUrl, getKbToken, isTokenExpired } from './KnowledgeBaseContext';\n\ntype UserInfo = components['schemas']['UserResponse'];\n\nexport interface AuthSession {\n token: string;\n user: UserInfo;\n}\n\ninterface AuthContextValue {\n session: AuthSession | null;\n isLoading: boolean;\n setSession: (session: AuthSession) => void;\n clearSession: () => void;\n}\n\nconst AuthContext = createContext<AuthContextValue | undefined>(undefined);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n const { activeKnowledgeBase } = useKnowledgeBaseContext();\n const [session, setSessionState] = useState<AuthSession | null>(null);\n // Start loading if there's a stored token to validate\n const activeKbId = activeKnowledgeBase?.id ?? null;\n const [isLoading, setIsLoading] = useState(() => {\n if (!activeKbId) return false;\n const token = getKbToken(activeKbId);\n return !!token && !isTokenExpired(token);\n });\n\n // When active KB changes, try to restore session from stored token\n useEffect(() => {\n if (!activeKbId || !activeKnowledgeBase) {\n setSessionState(null);\n setIsLoading(false);\n return;\n }\n\n const token = getKbToken(activeKbId);\n if (!token || isTokenExpired(token)) {\n setSessionState(null);\n setIsLoading(false);\n return;\n }\n\n // Validate the token by calling getMe via the API client\n setIsLoading(true);\n const client = new SemiontApiClient({\n baseUrl: baseUrl(kbBackendUrl(activeKnowledgeBase)),\n eventBus: new EventBus(),\n });\n client.getMe({ auth: accessToken(token) })\n .then((data) => {\n setSessionState({ token, user: data as UserInfo });\n })\n .catch(() => {\n setSessionState(null);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, [activeKbId, activeKnowledgeBase]);\n\n const setSession = useCallback((s: AuthSession) => {\n setSessionState(s);\n }, []);\n\n const clearSession = useCallback(() => {\n setSessionState(null);\n }, []);\n\n const value = useMemo(\n () => ({ session, isLoading, setSession, clearSession }),\n [session, isLoading, setSession, clearSession]\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nconst NO_AUTH: AuthContextValue = {\n session: null,\n isLoading: false,\n setSession: () => {},\n clearSession: () => {},\n};\n\nexport function useAuthContext(): AuthContextValue {\n return useContext(AuthContext) ?? NO_AUTH;\n}\n","import { useMemo } from 'react';\nimport { useAuthContext } from '@/contexts/AuthContext';\n\n/**\n * Enhanced authentication hook\n */\nexport function useAuth() {\n const { session, isLoading } = useAuthContext();\n\n return useMemo(() => {\n const isAuthenticated = !!session;\n const user = session?.user ?? null;\n\n return {\n session,\n user,\n backendUser: user,\n token: session?.token ?? null,\n\n isLoading,\n isAuthenticated,\n hasValidBackendToken: !!session?.token,\n isFullyAuthenticated: isAuthenticated,\n\n userDomain: user?.domain || user?.email?.split('@')[1],\n displayName: user?.name ?? user?.email?.split('@')[0] ?? 'User',\n avatarUrl: user?.image ?? null,\n isAdmin: user?.isAdmin ?? false,\n isModerator: user?.isModerator ?? false,\n };\n }, [session, isLoading]);\n}\n\n/**\n * Hook for getting user preferences and settings\n */\nexport function useUserPreferences() {\n return useMemo(() => ({\n theme: 'system' as 'light' | 'dark' | 'system',\n language: 'en',\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n emailNotifications: true,\n }), []);\n}\n\n/**\n * Hook for checking user permissions\n */\nexport function usePermissions() {\n const { isFullyAuthenticated, backendUser } = useAuth();\n\n return useMemo(() => {\n if (!isFullyAuthenticated || !backendUser) {\n return { canRead: false, canWrite: false, canAdmin: false, canManageUsers: false };\n }\n return { canRead: true, canWrite: true, canAdmin: false, canManageUsers: false };\n }, [backendUser, isFullyAuthenticated]);\n}\n"],"names":["kbBackendUrl","kb","defaultProtocol","host","TOKEN_PREFIX","getKbToken","kbId","setKbToken","token","clearKbToken","isTokenExpired","payloadPart","getKbSessionStatus","STORAGE_KEY","ACTIVE_KEY","migrateLegacyEntry","entry","url","loadKnowledgeBases","raw","saveKnowledgeBases","knowledgeBases","KnowledgeBaseContext","createContext","KnowledgeBaseProvider","children","setKnowledgeBases","useState","activeKnowledgeBaseId","setActiveKnowledgeBaseId","saved","loaded","_a","useEffect","addKnowledgeBase","useCallback","prev","removeKnowledgeBase","id","setActiveKnowledgeBase","updateKnowledgeBase","updates","signOut","activeKnowledgeBase","useMemo","value","jsx","useKnowledgeBaseContext","ctx","useContext","AuthContext","AuthProvider","session","setSessionState","activeKbId","isLoading","setIsLoading","SemiontApiClient","baseUrl","EventBus","accessToken","data","setSession","s","clearSession","NO_AUTH","useAuthContext","useAuth","isAuthenticated","user","_b"],"mappings":"oJAWO,SAASA,EAAaC,EAA2B,CACtD,MAAO,GAAGA,EAAG,QAAQ,MAAMA,EAAG,IAAI,IAAIA,EAAG,IAAI,EAC/C,CAEO,SAASC,EAAgBC,EAAgC,CAC9D,OAAOA,IAAS,aAAeA,IAAS,YAAc,OAAS,OACjE,CAGA,MAAMC,EAAe,iBAEd,SAASC,EAAWC,EAA6B,CACtD,OAAO,aAAa,QAAQ,GAAGF,CAAY,GAAGE,CAAI,EAAE,CACtD,CAEO,SAASC,EAAWD,EAAcE,EAAqB,CAC5D,aAAa,QAAQ,GAAGJ,CAAY,GAAGE,CAAI,GAAIE,CAAK,CACtD,CAEO,SAASC,EAAaH,EAAoB,CAC/C,aAAa,WAAW,GAAGF,CAAY,GAAGE,CAAI,EAAE,CAClD,CAEO,SAASI,EAAeF,EAAwB,CACrD,GAAI,CACF,MAAMG,EAAcH,EAAM,MAAM,GAAG,EAAE,CAAC,EACtC,OAAKG,EACW,KAAK,MAAM,KAAKA,CAAW,CAAC,EAC7B,IAAM,IAAO,KAAK,IAAA,EAFR,EAG3B,MAAQ,CACN,MAAO,EACT,CACF,CAIO,SAASC,EAAmBN,EAA+B,CAChE,MAAME,EAAQH,EAAWC,CAAI,EAC7B,OAAKE,EACEE,EAAeF,CAAK,EAAI,UAAY,gBADxB,YAErB,CAaA,MAAMK,EAAc,yBACdC,EAAa,gCAGnB,SAASC,EAAmBC,EAA2B,CACrD,GAAIA,EAAM,OAAS,OAAW,OAAOA,EAErC,GAAI,CACF,MAAMC,EAAM,IAAI,IAAID,EAAM,UAAU,EACpC,MAAO,CACL,GAAIA,EAAM,GACV,MAAOA,EAAM,MACb,KAAMC,EAAI,SACV,KAAM,SAASA,EAAI,KAAM,EAAE,IAAMA,EAAI,WAAa,SAAW,IAAM,IACnE,SAAUA,EAAI,WAAa,SAAW,QAAU,OAChD,MAAO,EAAA,CAEX,MAAQ,CACN,MAAO,CACL,GAAID,EAAM,GACV,MAAOA,EAAM,OAAS,UACtB,KAAM,YACN,KAAM,IACN,SAAU,OACV,MAAO,EAAA,CAEX,CACF,CAEA,SAASE,GAAsC,CAC7C,GAAI,CACF,MAAMC,EAAM,aAAa,QAAQN,CAAW,EAC5C,OAAKM,EACW,KAAK,MAAMA,CAAG,EACf,IAAIJ,CAAkB,EAFpB,CAAA,CAGnB,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAEA,SAASK,EAAmBC,EAAuC,CACjE,aAAa,QAAQR,EAAa,KAAK,UAAUQ,CAAc,CAAC,CAClE,CAEA,MAAMC,EAAuBC,EAAAA,cAAqD,MAAS,EAEpF,SAASC,EAAsB,CAAE,SAAAC,GAA2C,CACjF,KAAM,CAACJ,EAAgBK,CAAiB,EAAIC,EAAAA,SAA0B,IAAMT,GAAoB,EAC1F,CAACU,EAAuBC,CAAwB,EAAIF,EAAAA,SAAwB,IAAM,OACtF,MAAMG,EAAQ,aAAa,QAAQhB,CAAU,EACvCiB,EAASb,EAAA,EACf,OAAIY,GAASC,EAAO,KAAK9B,GAAMA,EAAG,KAAO6B,CAAK,EAAUA,IACjDE,EAAAD,EAAO,CAAC,IAAR,YAAAC,EAAW,KAAM,IAC1B,CAAC,EAEDC,EAAAA,UAAU,IAAM,CACdb,EAAmBC,CAAc,CACnC,EAAG,CAACA,CAAc,CAAC,EAEnBY,EAAAA,UAAU,IAAM,CACVL,EACF,aAAa,QAAQd,EAAYc,CAAqB,EAEtD,aAAa,WAAWd,CAAU,CAEtC,EAAG,CAACc,CAAqB,CAAC,EAE1B,MAAMM,EAAmBC,cAAalC,GAAsB,CAC1DyB,EAAkBU,GAAQ,CAAC,GAAGA,EAAMnC,CAAE,CAAC,EACvC4B,EAAyB5B,EAAG,EAAE,CAChC,EAAG,CAAA,CAAE,EAECoC,EAAsBF,cAAaG,GAAe,CACtD7B,EAAa6B,CAAE,EACfZ,KAA0BU,EAAK,UAAanC,EAAG,KAAOqC,CAAE,CAAC,EACzDT,EAAyBO,GAAQ,OAC/B,OAAIA,IAASE,EAAWF,IAEjBJ,EADWX,EAAe,OAAOpB,GAAMA,EAAG,KAAOqC,CAAE,EACzC,CAAC,IAAX,YAAAN,EAAc,KAAM,IAC7B,CAAC,CACH,EAAG,CAACX,CAAc,CAAC,EAEbkB,EAAyBJ,cAAaG,GAAe,CACzDT,EAAyBS,CAAE,CAC7B,EAAG,CAAA,CAAE,EAECE,EAAsBL,EAAAA,YAAY,CAACG,EAAYG,IAAmD,CACtGf,EAAkBU,GAAQA,EAAK,IAAInC,GAAMA,EAAG,KAAOqC,EAAK,CAAE,GAAGrC,EAAI,GAAGwC,CAAA,EAAYxC,CAAE,CAAC,CACrF,EAAG,CAAA,CAAE,EAECyC,EAAUP,cAAaG,GAAe,CAC1C7B,EAAa6B,CAAE,EAEfZ,EAAkBU,GAAQ,CAAC,GAAGA,CAAI,CAAC,CACrC,EAAG,CAAA,CAAE,EAECO,EAAsBC,EAAAA,QAC1B,IAAMvB,EAAe,QAAWpB,EAAG,KAAO2B,CAAqB,GAAK,KACpE,CAACP,EAAgBO,CAAqB,CAAA,EAGlCiB,EAAQD,EAAAA,QACZ,KAAO,CAAE,eAAAvB,EAAgB,sBAAAO,EAAuB,oBAAAe,EAAqB,iBAAAT,EAAkB,oBAAAG,EAAqB,uBAAAE,EAAwB,oBAAAC,EAAqB,QAAAE,IACzJ,CAACrB,EAAgBO,EAAuBe,EAAqBT,EAAkBG,EAAqBE,EAAwBC,EAAqBE,CAAO,CAAA,EAG1J,OAAOI,EAAAA,IAACxB,EAAqB,SAArB,CAA8B,MAAAuB,EAAe,SAAApB,CAAA,CAAS,CAChE,CAEO,SAASsB,GAAqD,CACnE,MAAMC,EAAMC,EAAAA,WAAW3B,CAAoB,EAC3C,GAAI,CAAC0B,EAAK,MAAM,IAAI,MAAM,mEAAmE,EAC7F,OAAOA,CACT,CC7JA,MAAME,EAAc3B,EAAAA,cAA4C,MAAS,EAElE,SAAS4B,EAAa,CAAE,SAAA1B,GAA2C,CACxE,KAAM,CAAE,oBAAAkB,CAAA,EAAwBI,EAAA,EAC1B,CAACK,EAASC,CAAe,EAAI1B,EAAAA,SAA6B,IAAI,EAE9D2B,GAAaX,GAAA,YAAAA,EAAqB,KAAM,KACxC,CAACY,EAAWC,CAAY,EAAI7B,EAAAA,SAAS,IAAM,CAC/C,GAAI,CAAC2B,EAAY,MAAO,GACxB,MAAM9C,EAAQH,EAAWiD,CAAU,EACnC,MAAO,CAAC,CAAC9C,GAAS,CAACE,EAAeF,CAAK,CACzC,CAAC,EAGDyB,EAAAA,UAAU,IAAM,CACd,GAAI,CAACqB,GAAc,CAACX,EAAqB,CACvCU,EAAgB,IAAI,EACpBG,EAAa,EAAK,EAClB,MACF,CAEA,MAAMhD,EAAQH,EAAWiD,CAAU,EACnC,GAAI,CAAC9C,GAASE,EAAeF,CAAK,EAAG,CACnC6C,EAAgB,IAAI,EACpBG,EAAa,EAAK,EAClB,MACF,CAGAA,EAAa,EAAI,EACF,IAAIC,EAAiB,CAClC,QAASC,EAAQ1D,EAAa2C,CAAmB,CAAC,EAClD,SAAU,IAAIgB,CAAS,CACxB,EACM,MAAM,CAAE,KAAMC,EAAYpD,CAAK,EAAG,EACtC,KAAMqD,GAAS,CACdR,EAAgB,CAAE,MAAA7C,EAAO,KAAMqD,CAAA,CAAkB,CACnD,CAAC,EACA,MAAM,IAAM,CACXR,EAAgB,IAAI,CACtB,CAAC,EACA,QAAQ,IAAM,CACbG,EAAa,EAAK,CACpB,CAAC,CACL,EAAG,CAACF,EAAYX,CAAmB,CAAC,EAEpC,MAAMmB,EAAa3B,cAAa4B,GAAmB,CACjDV,EAAgBU,CAAC,CACnB,EAAG,CAAA,CAAE,EAECC,EAAe7B,EAAAA,YAAY,IAAM,CACrCkB,EAAgB,IAAI,CACtB,EAAG,CAAA,CAAE,EAECR,EAAQD,EAAAA,QACZ,KAAO,CAAE,QAAAQ,EAAS,UAAAG,EAAW,WAAAO,EAAY,aAAAE,CAAA,GACzC,CAACZ,EAASG,EAAWO,EAAYE,CAAY,CAAA,EAG/C,OAAOlB,EAAAA,IAACI,EAAY,SAAZ,CAAqB,MAAAL,EAAe,SAAApB,CAAA,CAAS,CACvD,CAEA,MAAMwC,EAA4B,CAChC,QAAS,KACT,UAAW,GACX,WAAY,IAAM,CAAC,EACnB,aAAc,IAAM,CAAC,CACvB,EAEO,SAASC,GAAmC,CACjD,OAAOjB,EAAAA,WAAWC,CAAW,GAAKe,CACpC,CCrFO,SAASE,GAAU,CACxB,KAAM,CAAE,QAAAf,EAAS,UAAAG,CAAA,EAAcW,EAAA,EAE/B,OAAOtB,EAAAA,QAAQ,IAAM,SACnB,MAAMwB,EAAkB,CAAC,CAAChB,EACpBiB,GAAOjB,GAAA,YAAAA,EAAS,OAAQ,KAE9B,MAAO,CACL,QAAAA,EACA,KAAAiB,EACA,YAAaA,EACb,OAAOjB,GAAA,YAAAA,EAAS,QAAS,KAEzB,UAAAG,EACA,gBAAAa,EACA,qBAAsB,CAAC,EAAChB,GAAA,MAAAA,EAAS,OACjC,qBAAsBgB,EAEtB,YAAYC,GAAA,YAAAA,EAAM,WAAUrC,EAAAqC,GAAA,YAAAA,EAAM,QAAN,YAAArC,EAAa,MAAM,KAAK,IACpD,aAAaqC,GAAA,YAAAA,EAAM,SAAQC,EAAAD,GAAA,YAAAA,EAAM,QAAN,YAAAC,EAAa,MAAM,KAAK,KAAM,OACzD,WAAWD,GAAA,YAAAA,EAAM,QAAS,KAC1B,SAASA,GAAA,YAAAA,EAAM,UAAW,GAC1B,aAAaA,GAAA,YAAAA,EAAM,cAAe,EAAA,CAEtC,EAAG,CAACjB,EAASG,CAAS,CAAC,CACzB"}