@replicated/portal-components 0.0.19 → 0.0.21
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/components/metadata/registry.json +2 -2
- package/components/metadata/registry.md +2 -2
- package/dist/actions/change-team.js +66 -7
- package/dist/actions/change-team.js.map +1 -1
- package/dist/actions/index.d.mts +3 -1
- package/dist/actions/index.d.ts +3 -1
- package/dist/actions/index.js +182 -465
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/install-actions.d.mts +3 -1
- package/dist/actions/install-actions.d.ts +3 -1
- package/dist/actions/install-actions.js +58 -5
- package/dist/actions/install-actions.js.map +1 -1
- package/dist/actions/service-account.d.mts +3 -1
- package/dist/actions/service-account.d.ts +3 -1
- package/dist/actions/service-account.js +58 -5
- package/dist/actions/service-account.js.map +1 -1
- package/dist/actions/support-bundles.d.mts +3 -1
- package/dist/actions/support-bundles.d.ts +3 -1
- package/dist/actions/support-bundles.js +58 -5
- package/dist/actions/support-bundles.js.map +1 -1
- package/dist/actions/team-settings.d.mts +3 -1
- package/dist/actions/team-settings.d.ts +3 -1
- package/dist/actions/team-settings.js +91 -27
- package/dist/actions/team-settings.js.map +1 -1
- package/dist/actions/trial-signup.d.mts +24 -0
- package/dist/actions/trial-signup.d.ts +24 -0
- package/dist/actions/trial-signup.js +482 -0
- package/dist/actions/trial-signup.js.map +1 -0
- package/dist/actions/user-settings.d.mts +3 -1
- package/dist/actions/user-settings.d.ts +3 -1
- package/dist/actions/user-settings.js +58 -5
- package/dist/actions/user-settings.js.map +1 -1
- package/dist/airgap-instances.d.mts +3 -1
- package/dist/airgap-instances.d.ts +3 -1
- package/dist/airgap-instances.js +41 -112
- package/dist/airgap-instances.js.map +1 -1
- package/dist/branding-BsMSywts.d.mts +36 -0
- package/dist/branding-BsMSywts.d.ts +36 -0
- package/dist/error-page.js +10 -2
- package/dist/error-page.js.map +1 -1
- package/dist/error.js +10 -2
- package/dist/error.js.map +1 -1
- package/dist/esm/actions/change-team.js +66 -7
- package/dist/esm/actions/change-team.js.map +1 -1
- package/dist/esm/actions/index.js +181 -462
- package/dist/esm/actions/index.js.map +1 -1
- package/dist/esm/actions/install-actions.js +58 -5
- package/dist/esm/actions/install-actions.js.map +1 -1
- package/dist/esm/actions/service-account.js +58 -5
- package/dist/esm/actions/service-account.js.map +1 -1
- package/dist/esm/actions/support-bundles.js +58 -5
- package/dist/esm/actions/support-bundles.js.map +1 -1
- package/dist/esm/actions/team-settings.js +91 -27
- package/dist/esm/actions/team-settings.js.map +1 -1
- package/dist/esm/actions/trial-signup.js +478 -0
- package/dist/esm/actions/trial-signup.js.map +1 -0
- package/dist/esm/actions/user-settings.js +58 -5
- package/dist/esm/actions/user-settings.js.map +1 -1
- package/dist/esm/airgap-instances.js +40 -112
- package/dist/esm/airgap-instances.js.map +1 -1
- package/dist/esm/error-page.js +10 -2
- package/dist/esm/error-page.js.map +1 -1
- package/dist/esm/error.js +10 -2
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/helm-install-wizard.js +118 -79
- package/dist/esm/helm-install-wizard.js.map +1 -1
- package/dist/esm/index.js +706 -438
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-actions.js +40 -5
- package/dist/esm/install-actions.js.map +1 -1
- package/dist/esm/install-card.js +9 -6
- package/dist/esm/install-card.js.map +1 -1
- package/dist/esm/install-targets.js +9 -2
- package/dist/esm/install-targets.js.map +1 -1
- package/dist/esm/instance-card.js +39 -111
- package/dist/esm/instance-card.js.map +1 -1
- package/dist/esm/join-team.js +9 -3
- package/dist/esm/join-team.js.map +1 -1
- package/dist/esm/license-card.js +24 -22
- package/dist/esm/license-card.js.map +1 -1
- package/dist/esm/license-details.js +128 -334
- package/dist/esm/license-details.js.map +1 -1
- package/dist/esm/linux-install-wizard.js +95 -41
- package/dist/esm/linux-install-wizard.js.map +1 -1
- package/dist/esm/login.js +20 -4
- package/dist/esm/login.js.map +1 -1
- package/dist/esm/middleware.js +33 -0
- package/dist/esm/middleware.js.map +1 -0
- package/dist/esm/online-instance-list.js +40 -112
- package/dist/esm/online-instance-list.js.map +1 -1
- package/dist/esm/release-history-panel.js +27 -14
- package/dist/esm/release-history-panel.js.map +1 -1
- package/dist/esm/saml-callback-client.js +82 -0
- package/dist/esm/saml-callback-client.js.map +1 -0
- package/dist/esm/saml-handlers.js +138 -0
- package/dist/esm/saml-handlers.js.map +1 -0
- package/dist/esm/security-card.js +53 -38
- package/dist/esm/security-card.js.map +1 -1
- package/dist/esm/service-accounts-tab.js +800 -0
- package/dist/esm/service-accounts-tab.js.map +1 -0
- package/dist/esm/support-bundle-collection-card.js +48 -24
- package/dist/esm/support-bundle-collection-card.js.map +1 -1
- package/dist/esm/support-bundles-card.js +10 -5
- package/dist/esm/support-bundles-card.js.map +1 -1
- package/dist/esm/support-card.js +37 -5
- package/dist/esm/support-card.js.map +1 -1
- package/dist/esm/team-selection.js +5 -1
- package/dist/esm/team-selection.js.map +1 -1
- package/dist/esm/team-settings-card.js +5 -2
- package/dist/esm/team-settings-card.js.map +1 -1
- package/dist/esm/team-settings.js +7 -2
- package/dist/esm/team-settings.js.map +1 -1
- package/dist/esm/top-nav-user-menu.js +5 -1
- package/dist/esm/top-nav-user-menu.js.map +1 -1
- package/dist/esm/top-nav.js +175 -62
- package/dist/esm/top-nav.js.map +1 -1
- package/dist/esm/trial-signup.js +256 -0
- package/dist/esm/trial-signup.js.map +1 -0
- package/dist/esm/update-layout.js +175 -62
- package/dist/esm/update-layout.js.map +1 -1
- package/dist/esm/updates-card.js +15 -4
- package/dist/esm/updates-card.js.map +1 -1
- package/dist/esm/upload-support-bundle-modal.js +9 -4
- package/dist/esm/upload-support-bundle-modal.js.map +1 -1
- package/dist/esm/user-settings-card.js +5 -2
- package/dist/esm/user-settings-card.js.map +1 -1
- package/dist/esm/user-settings.js +12 -6
- package/dist/esm/user-settings.js.map +1 -1
- package/dist/esm/utils/index.js +204 -13
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/fetch-license-iTyF7_GY.d.mts +81 -0
- package/dist/fetch-license-iTyF7_GY.d.ts +81 -0
- package/dist/helm-install-wizard.d.mts +11 -3
- package/dist/helm-install-wizard.d.ts +11 -3
- package/dist/helm-install-wizard.js +118 -79
- package/dist/helm-install-wizard.js.map +1 -1
- package/dist/{index-BAiVrSSR.d.mts → index-DyzJ0yKD.d.mts} +48 -50
- package/dist/{index-DWt-N5od.d.ts → index-sMbq94M7.d.ts} +48 -50
- package/dist/index.d.mts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +726 -438
- package/dist/index.js.map +1 -1
- package/dist/install-actions.d.mts +4 -2
- package/dist/install-actions.d.ts +4 -2
- package/dist/install-actions.js +40 -5
- package/dist/install-actions.js.map +1 -1
- package/dist/install-card.d.mts +2 -3
- package/dist/install-card.d.ts +2 -3
- package/dist/install-card.js +9 -6
- package/dist/install-card.js.map +1 -1
- package/dist/install-targets.js +9 -2
- package/dist/install-targets.js.map +1 -1
- package/dist/instance-card.d.mts +3 -1
- package/dist/instance-card.d.ts +3 -1
- package/dist/instance-card.js +40 -111
- package/dist/instance-card.js.map +1 -1
- package/dist/join-team.js +9 -3
- package/dist/join-team.js.map +1 -1
- package/dist/license-card.d.mts +2 -3
- package/dist/license-card.d.ts +2 -3
- package/dist/license-card.js +24 -22
- package/dist/license-card.js.map +1 -1
- package/dist/license-details.js +128 -334
- package/dist/license-details.js.map +1 -1
- package/dist/linux-install-wizard.d.mts +9 -3
- package/dist/linux-install-wizard.d.ts +9 -3
- package/dist/linux-install-wizard.js +95 -41
- package/dist/linux-install-wizard.js.map +1 -1
- package/dist/login.d.mts +4 -0
- package/dist/login.d.ts +4 -0
- package/dist/login.js +20 -4
- package/dist/login.js.map +1 -1
- package/dist/middleware.d.mts +13 -0
- package/dist/middleware.d.ts +13 -0
- package/dist/middleware.js +35 -0
- package/dist/middleware.js.map +1 -0
- package/dist/online-instance-list.d.mts +3 -1
- package/dist/online-instance-list.d.ts +3 -1
- package/dist/online-instance-list.js +41 -112
- package/dist/online-instance-list.js.map +1 -1
- package/dist/pending-installations.d.mts +3 -1
- package/dist/pending-installations.d.ts +3 -1
- package/dist/release-history-panel.js +27 -14
- package/dist/release-history-panel.js.map +1 -1
- package/dist/saml-callback-client.d.mts +36 -0
- package/dist/saml-callback-client.d.ts +36 -0
- package/dist/saml-callback-client.js +88 -0
- package/dist/saml-callback-client.js.map +1 -0
- package/dist/saml-handlers.d.mts +50 -0
- package/dist/saml-handlers.d.ts +50 -0
- package/dist/saml-handlers.js +141 -0
- package/dist/saml-handlers.js.map +1 -0
- package/dist/security-card.d.mts +3 -1
- package/dist/security-card.d.ts +3 -1
- package/dist/security-card.js +53 -38
- package/dist/security-card.js.map +1 -1
- package/dist/service-accounts-tab.d.mts +51 -0
- package/dist/service-accounts-tab.d.ts +51 -0
- package/dist/service-accounts-tab.js +802 -0
- package/dist/service-accounts-tab.js.map +1 -0
- package/dist/styles.css +375 -127
- package/dist/support-bundle-collection-card.d.mts +1 -1
- package/dist/support-bundle-collection-card.d.ts +1 -1
- package/dist/support-bundle-collection-card.js +47 -23
- package/dist/support-bundle-collection-card.js.map +1 -1
- package/dist/support-bundles-card.d.mts +4 -2
- package/dist/support-bundles-card.d.ts +4 -2
- package/dist/support-bundles-card.js +10 -5
- package/dist/support-bundles-card.js.map +1 -1
- package/dist/support-card.js +37 -5
- package/dist/support-card.js.map +1 -1
- package/dist/team-selection.js +5 -1
- package/dist/team-selection.js.map +1 -1
- package/dist/team-settings-card.js +5 -2
- package/dist/team-settings-card.js.map +1 -1
- package/dist/team-settings.js +7 -2
- package/dist/team-settings.js.map +1 -1
- package/dist/{top-nav-IRIn66wS.d.ts → top-nav-BUQAGoG1.d.mts} +14 -2
- package/dist/{top-nav-IRIn66wS.d.mts → top-nav-CEqw0KpO.d.ts} +14 -2
- package/dist/top-nav-user-menu.js +5 -1
- package/dist/top-nav-user-menu.js.map +1 -1
- package/dist/top-nav.d.mts +2 -1
- package/dist/top-nav.d.ts +2 -1
- package/dist/top-nav.js +175 -62
- package/dist/top-nav.js.map +1 -1
- package/dist/trial-signup.d.mts +31 -0
- package/dist/trial-signup.d.ts +31 -0
- package/dist/trial-signup.js +258 -0
- package/dist/trial-signup.js.map +1 -0
- package/dist/update-layout.js +175 -62
- package/dist/update-layout.js.map +1 -1
- package/dist/updates-card.js +15 -4
- package/dist/updates-card.js.map +1 -1
- package/dist/upload-support-bundle-modal.js +9 -4
- package/dist/upload-support-bundle-modal.js.map +1 -1
- package/dist/user-settings-card.js +5 -2
- package/dist/user-settings-card.js.map +1 -1
- package/dist/user-settings.js +12 -6
- package/dist/user-settings.js.map +1 -1
- package/dist/utils/index.d.mts +74 -16
- package/dist/utils/index.d.ts +74 -16
- package/dist/utils/index.js +215 -12
- package/dist/utils/index.js.map +1 -1
- package/package.json +37 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/error.tsx","../../src/components/error-page.tsx"],"names":["jsx"],"mappings":"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","file":"error-page.js","sourcesContent":["\"use client\";\n\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\n\nconst AlertTriangleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nconst ServerIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </svg>\n);\n\nexport interface ErrorProps {\n code?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n onRetry?: () => void;\n}\n\nconst getErrorContent = (code?: number) => {\n switch (code) {\n case 502:\n return {\n title: \"Service Unavailable\",\n description: \"The service is temporarily unavailable. Please try again in a few moments.\",\n icon: ServerIcon,\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n description: \"The service is currently undergoing maintenance. Please try again later.\",\n icon: ServerIcon,\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n description: \"The request took too long to process. Please try again.\",\n icon: ServerIcon,\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n description: \"Something went wrong on our end. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n case 404:\n return {\n title: \"Page Not Found\",\n description: \"The page you're looking for doesn't exist or has been moved.\",\n icon: AlertTriangleIcon,\n };\n case 403:\n return {\n title: \"Access Denied\",\n description: \"You don't have permission to access this resource.\",\n icon: AlertTriangleIcon,\n };\n default:\n return {\n title: \"Something Went Wrong\",\n description: \"An unexpected error occurred. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n }\n};\n\nexport const Error = ({ \n code, \n message,\n homeUrl = \"/\",\n sourceUrl,\n onRetry\n}: ErrorProps) => {\n const errorContent = getErrorContent(code);\n const Icon = errorContent.icon;\n\n const handleRetry = () => {\n if (onRetry) {\n onRetry();\n } else if (sourceUrl) {\n window.location.href = sourceUrl;\n } else {\n window.location.reload();\n }\n };\n\n return (\n <div className=\"w-full max-w-md\">\n <div className=\"rounded-3xl border border-gray-200 bg-white p-8 shadow-[0_12px_30px_rgba(17,24,39,0.12)] text-center\">\n <div className=\"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n \n {code && (\n <div className=\"mt-6 text-sm font-semibold text-gray-500\">\n Error {code}\n </div>\n )}\n \n <h1 className=\"mt-2 text-2xl font-bold text-gray-900\">\n {errorContent.title}\n </h1>\n \n <p className=\"mt-4 text-sm text-gray-600\">\n {message || errorContent.description}\n </p>\n \n <div className=\"mt-8 flex flex-col gap-3 sm:flex-row sm:justify-center\">\n <Link\n href={homeUrl}\n className=\"inline-flex items-center justify-center rounded-lg bg-indigo-600 px-6 py-3 text-sm font-semibold text-white shadow-sm transition hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n Go to Home\n </Link>\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-6 py-3 text-sm font-semibold text-gray-700 shadow-sm transition hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n >\n Try Again\n </button>\n </div>\n \n {code && code >= 500 && (\n <p className=\"mt-6 text-xs text-gray-500\">\n If this problem persists, please contact support.\n </p>\n )}\n </div>\n </div>\n );\n};\n\nError.displayName = \"Error\";\n","\"use client\";\n\nimport { Error } from \"./error\";\n\ninterface ErrorPageProps {\n statusCode?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n}\n\nexport const ErrorPage = ({ \n statusCode, \n message,\n homeUrl = \"/\",\n sourceUrl\n}: ErrorPageProps) => {\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12\">\n <Error code={statusCode} message={message} homeUrl={homeUrl} sourceUrl={sourceUrl} />\n </div>\n );\n};\n\nErrorPage.displayName = \"ErrorPage\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/constants.ts","../../src/components/error.tsx","../../src/components/error-page.tsx"],"names":["jsx"],"mappings":"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","file":"error-page.js","sourcesContent":["/**\n * Default globe favicon matching the CiGlobe icon (Circum Icons)\n * Used as fallback when custom branding doesn't provide a favicon\n */\nexport const DEFAULT_FAVICON = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='10'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\";\n\n/**\n * Default primary brand color\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#4f46e5\";\n\n/**\n * Default secondary brand color\n */\nexport const DEFAULT_SECONDARY_COLOR = \"#6366f1\";\n\n/**\n * Check if the API origin is HTTP (used for repldev environments)\n * This determines cookie security settings for cross-origin iframes\n * @returns true if the API origin starts with http:// (not https://)\n */\nexport const isHttpApiOrigin = (): boolean => {\n return process.env.REPLICATED_APP_ORIGIN?.startsWith('http://') || false;\n};\n","\"use client\";\n\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport { DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\n\nconst AlertTriangleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nconst ServerIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </svg>\n);\n\nexport interface ErrorProps {\n code?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n onRetry?: () => void;\n}\n\nconst getErrorContent = (code?: number) => {\n switch (code) {\n case 502:\n return {\n title: \"Service Unavailable\",\n description: \"The service is temporarily unavailable. Please try again in a few moments.\",\n icon: ServerIcon,\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n description: \"The service is currently undergoing maintenance. Please try again later.\",\n icon: ServerIcon,\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n description: \"The request took too long to process. Please try again.\",\n icon: ServerIcon,\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n description: \"Something went wrong on our end. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n case 404:\n return {\n title: \"Page Not Found\",\n description: \"The page you're looking for doesn't exist or has been moved.\",\n icon: AlertTriangleIcon,\n };\n case 403:\n return {\n title: \"Access Denied\",\n description: \"You don't have permission to access this resource.\",\n icon: AlertTriangleIcon,\n };\n default:\n return {\n title: \"Something Went Wrong\",\n description: \"An unexpected error occurred. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n }\n};\n\nexport const Error = ({ \n code, \n message,\n homeUrl = \"/\",\n sourceUrl,\n onRetry\n}: ErrorProps) => {\n const errorContent = getErrorContent(code);\n const Icon = errorContent.icon;\n\n const handleRetry = () => {\n if (onRetry) {\n onRetry();\n } else if (sourceUrl) {\n // Preserve source URL in a cookie so server-side can read it on retry\n // Cookie expires in 5 minutes (enough time for retry)\n try {\n document.cookie = `portal_error_source=${encodeURIComponent(sourceUrl)}; path=/; max-age=300; samesite=lax`;\n } catch (e) {\n // Ignore cookie errors\n }\n window.location.href = sourceUrl;\n } else {\n window.location.reload();\n }\n };\n\n return (\n <div className=\"w-full max-w-md\">\n <div className=\"rounded-3xl border border-gray-200 bg-white p-8 shadow-[0_12px_30px_rgba(17,24,39,0.12)] text-center\">\n <div className=\"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n \n {code && (\n <div className=\"mt-6 text-sm font-semibold text-gray-500\">\n Error {code}\n </div>\n )}\n \n <h1 className=\"mt-2 text-2xl font-bold text-gray-900\">\n {errorContent.title}\n </h1>\n \n <p className=\"mt-4 text-sm text-gray-600\">\n {message || errorContent.description}\n </p>\n \n <div className=\"mt-8 flex flex-col gap-3 sm:flex-row sm:justify-center\">\n <Link\n href={homeUrl}\n className=\"inline-flex items-center justify-center rounded-lg px-6 py-3 text-sm font-semibold text-white shadow-sm transition-opacity duration-200 hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n style={{ backgroundColor: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})` }}\n >\n Go to Home\n </Link>\n {(sourceUrl || onRetry) && (\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-6 py-3 text-sm font-semibold text-gray-700 shadow-sm transition hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n >\n Try Again\n </button>\n )}\n </div>\n \n {code && code >= 500 && (\n <p className=\"mt-6 text-xs text-gray-500\">\n If this problem persists, please contact support.\n </p>\n )}\n </div>\n </div>\n );\n};\n\nError.displayName = \"Error\";\n","\"use client\";\n\nimport { Error } from \"./error\";\n\ninterface ErrorPageProps {\n statusCode?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n}\n\nexport const ErrorPage = ({ \n statusCode, \n message,\n homeUrl = \"/\",\n sourceUrl\n}: ErrorPageProps) => {\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12\">\n <Error code={statusCode} message={message} homeUrl={homeUrl} sourceUrl={sourceUrl} />\n </div>\n );\n};\n\nErrorPage.displayName = \"ErrorPage\";\n"]}
|
package/dist/esm/error.js
CHANGED
|
@@ -7,6 +7,9 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
7
7
|
* This file is generated by tsup. Do not edit manually.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
|
|
11
|
+
// src/utils/constants.ts
|
|
12
|
+
var DEFAULT_SECONDARY_COLOR = "#6366f1";
|
|
10
13
|
var AlertTriangleIcon = (props) => /* @__PURE__ */ jsxs(
|
|
11
14
|
"svg",
|
|
12
15
|
{
|
|
@@ -101,6 +104,10 @@ var Error = ({
|
|
|
101
104
|
if (onRetry) {
|
|
102
105
|
onRetry();
|
|
103
106
|
} else if (sourceUrl) {
|
|
107
|
+
try {
|
|
108
|
+
document.cookie = `portal_error_source=${encodeURIComponent(sourceUrl)}; path=/; max-age=300; samesite=lax`;
|
|
109
|
+
} catch (e) {
|
|
110
|
+
}
|
|
104
111
|
window.location.href = sourceUrl;
|
|
105
112
|
} else {
|
|
106
113
|
window.location.reload();
|
|
@@ -119,11 +126,12 @@ var Error = ({
|
|
|
119
126
|
Link,
|
|
120
127
|
{
|
|
121
128
|
href: homeUrl,
|
|
122
|
-
className: "inline-flex items-center justify-center rounded-lg
|
|
129
|
+
className: "inline-flex items-center justify-center rounded-lg px-6 py-3 text-sm font-semibold text-white shadow-sm transition-opacity duration-200 hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
|
|
130
|
+
style: { backgroundColor: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})` },
|
|
123
131
|
children: "Go to Home"
|
|
124
132
|
}
|
|
125
133
|
),
|
|
126
|
-
/* @__PURE__ */ jsx(
|
|
134
|
+
(sourceUrl || onRetry) && /* @__PURE__ */ jsx(
|
|
127
135
|
"button",
|
|
128
136
|
{
|
|
129
137
|
type: "button",
|
package/dist/esm/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/error.tsx"],"names":[],"mappings":"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","file":"error.js","sourcesContent":["\"use client\";\n\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\n\nconst AlertTriangleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nconst ServerIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </svg>\n);\n\nexport interface ErrorProps {\n code?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n onRetry?: () => void;\n}\n\nconst getErrorContent = (code?: number) => {\n switch (code) {\n case 502:\n return {\n title: \"Service Unavailable\",\n description: \"The service is temporarily unavailable. Please try again in a few moments.\",\n icon: ServerIcon,\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n description: \"The service is currently undergoing maintenance. Please try again later.\",\n icon: ServerIcon,\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n description: \"The request took too long to process. Please try again.\",\n icon: ServerIcon,\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n description: \"Something went wrong on our end. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n case 404:\n return {\n title: \"Page Not Found\",\n description: \"The page you're looking for doesn't exist or has been moved.\",\n icon: AlertTriangleIcon,\n };\n case 403:\n return {\n title: \"Access Denied\",\n description: \"You don't have permission to access this resource.\",\n icon: AlertTriangleIcon,\n };\n default:\n return {\n title: \"Something Went Wrong\",\n description: \"An unexpected error occurred. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n }\n};\n\nexport const Error = ({ \n code, \n message,\n homeUrl = \"/\",\n sourceUrl,\n onRetry\n}: ErrorProps) => {\n const errorContent = getErrorContent(code);\n const Icon = errorContent.icon;\n\n const handleRetry = () => {\n if (onRetry) {\n onRetry();\n } else if (sourceUrl) {\n window.location.href = sourceUrl;\n } else {\n window.location.reload();\n }\n };\n\n return (\n <div className=\"w-full max-w-md\">\n <div className=\"rounded-3xl border border-gray-200 bg-white p-8 shadow-[0_12px_30px_rgba(17,24,39,0.12)] text-center\">\n <div className=\"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n \n {code && (\n <div className=\"mt-6 text-sm font-semibold text-gray-500\">\n Error {code}\n </div>\n )}\n \n <h1 className=\"mt-2 text-2xl font-bold text-gray-900\">\n {errorContent.title}\n </h1>\n \n <p className=\"mt-4 text-sm text-gray-600\">\n {message || errorContent.description}\n </p>\n \n <div className=\"mt-8 flex flex-col gap-3 sm:flex-row sm:justify-center\">\n <Link\n href={homeUrl}\n className=\"inline-flex items-center justify-center rounded-lg bg-indigo-600 px-6 py-3 text-sm font-semibold text-white shadow-sm transition hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n Go to Home\n </Link>\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-6 py-3 text-sm font-semibold text-gray-700 shadow-sm transition hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n >\n Try Again\n </button>\n </div>\n \n {code && code >= 500 && (\n <p className=\"mt-6 text-xs text-gray-500\">\n If this problem persists, please contact support.\n </p>\n )}\n </div>\n </div>\n );\n};\n\nError.displayName = \"Error\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/constants.ts","../../src/components/error.tsx"],"names":[],"mappings":";;;;;;;;;;AAcO,IAAM,uBAAA,GAA0B,SAAA;ACRvC,IAAM,iBAAA,GAAoB,CAAC,KAAA,qBACzB,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,GAAA;AAAA,IACb,aAAA,EAAY,MAAA;AAAA,IACX,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0FAAA,EAA2F,CAAA;AAAA,sBACnG,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBACrC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAC3C,CAAA;AAGF,IAAM,UAAA,GAAa,CAAC,KAAA,qBAClB,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,GAAA;AAAA,IACb,aAAA,EAAY,MAAA;AAAA,IACX,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,sBACtD,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,IAAA,EAAK,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA;AAAA,sBACvD,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,sBACrC,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AACzC,CAAA;AAWF,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAkB;AACzC,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,qBAAA;AAAA,QACP,WAAA,EAAa,4EAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,qBAAA;AAAA,QACP,WAAA,EAAa,0EAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,iBAAA;AAAA,QACP,WAAA,EAAa,yDAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,uBAAA;AAAA,QACP,WAAA,EAAa,0DAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,gBAAA;AAAA,QACP,WAAA,EAAa,8DAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,GAAA;AACH,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,eAAA;AAAA,QACP,WAAA,EAAa,oDAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AACE,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,sBAAA;AAAA,QACP,WAAA,EAAa,uDAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA;AAEN,CAAA;AAEO,IAAM,QAAQ,CAAC;AAAA,EACpB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,GAAA;AAAA,EACV,SAAA;AAAA,EACA;AACF,CAAA,KAAkB;AAChB,EAAA,MAAM,YAAA,GAAe,gBAAgB,IAAI,CAAA;AACzC,EAAA,MAAM,OAAO,YAAA,CAAa,IAAA;AAE1B,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,EAAQ;AAAA,IACV,WAAW,SAAA,EAAW;AAGpB,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,MAAA,GAAS,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,SAAS,CAAC,CAAA,mCAAA,CAAA;AAAA,MACxE,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA,MAAA,CAAO,SAAS,IAAA,GAAO,SAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sGAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,4EAAA,EACb,8BAAC,IAAA,EAAA,EAAK,SAAA,EAAU,wBAAuB,CAAA,EACzC,CAAA;AAAA,IAEC,IAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACjD;AAAA,KAAA,EACT,CAAA;AAAA,oBAGF,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EACX,uBAAa,KAAA,EAChB,CAAA;AAAA,wBAEC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EACV,QAAA,EAAA,OAAA,IAAW,aAAa,WAAA,EAC3B,CAAA;AAAA,oBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAU,uOAAA;AAAA,UACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,+BAAA,EAAkC,uBAAuB,CAAA,CAAA,CAAA,EAAI;AAAA,UACxF,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,MAAA,CACE,aAAa,OAAA,qBACb,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,oRAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAEJ,CAAA;AAAA,IAEC,QAAQ,IAAA,IAAQ,GAAA,wBACd,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,mDAAA,EAE1C;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"error.js","sourcesContent":["/**\n * Default globe favicon matching the CiGlobe icon (Circum Icons)\n * Used as fallback when custom branding doesn't provide a favicon\n */\nexport const DEFAULT_FAVICON = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='10'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\";\n\n/**\n * Default primary brand color\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#4f46e5\";\n\n/**\n * Default secondary brand color\n */\nexport const DEFAULT_SECONDARY_COLOR = \"#6366f1\";\n\n/**\n * Check if the API origin is HTTP (used for repldev environments)\n * This determines cookie security settings for cross-origin iframes\n * @returns true if the API origin starts with http:// (not https://)\n */\nexport const isHttpApiOrigin = (): boolean => {\n return process.env.REPLICATED_APP_ORIGIN?.startsWith('http://') || false;\n};\n","\"use client\";\n\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport { DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\n\nconst AlertTriangleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nconst ServerIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </svg>\n);\n\nexport interface ErrorProps {\n code?: number;\n message?: string;\n homeUrl?: string;\n sourceUrl?: string;\n onRetry?: () => void;\n}\n\nconst getErrorContent = (code?: number) => {\n switch (code) {\n case 502:\n return {\n title: \"Service Unavailable\",\n description: \"The service is temporarily unavailable. Please try again in a few moments.\",\n icon: ServerIcon,\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n description: \"The service is currently undergoing maintenance. Please try again later.\",\n icon: ServerIcon,\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n description: \"The request took too long to process. Please try again.\",\n icon: ServerIcon,\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n description: \"Something went wrong on our end. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n case 404:\n return {\n title: \"Page Not Found\",\n description: \"The page you're looking for doesn't exist or has been moved.\",\n icon: AlertTriangleIcon,\n };\n case 403:\n return {\n title: \"Access Denied\",\n description: \"You don't have permission to access this resource.\",\n icon: AlertTriangleIcon,\n };\n default:\n return {\n title: \"Something Went Wrong\",\n description: \"An unexpected error occurred. Please try again later.\",\n icon: AlertTriangleIcon,\n };\n }\n};\n\nexport const Error = ({ \n code, \n message,\n homeUrl = \"/\",\n sourceUrl,\n onRetry\n}: ErrorProps) => {\n const errorContent = getErrorContent(code);\n const Icon = errorContent.icon;\n\n const handleRetry = () => {\n if (onRetry) {\n onRetry();\n } else if (sourceUrl) {\n // Preserve source URL in a cookie so server-side can read it on retry\n // Cookie expires in 5 minutes (enough time for retry)\n try {\n document.cookie = `portal_error_source=${encodeURIComponent(sourceUrl)}; path=/; max-age=300; samesite=lax`;\n } catch (e) {\n // Ignore cookie errors\n }\n window.location.href = sourceUrl;\n } else {\n window.location.reload();\n }\n };\n\n return (\n <div className=\"w-full max-w-md\">\n <div className=\"rounded-3xl border border-gray-200 bg-white p-8 shadow-[0_12px_30px_rgba(17,24,39,0.12)] text-center\">\n <div className=\"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n \n {code && (\n <div className=\"mt-6 text-sm font-semibold text-gray-500\">\n Error {code}\n </div>\n )}\n \n <h1 className=\"mt-2 text-2xl font-bold text-gray-900\">\n {errorContent.title}\n </h1>\n \n <p className=\"mt-4 text-sm text-gray-600\">\n {message || errorContent.description}\n </p>\n \n <div className=\"mt-8 flex flex-col gap-3 sm:flex-row sm:justify-center\">\n <Link\n href={homeUrl}\n className=\"inline-flex items-center justify-center rounded-lg px-6 py-3 text-sm font-semibold text-white shadow-sm transition-opacity duration-200 hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n style={{ backgroundColor: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})` }}\n >\n Go to Home\n </Link>\n {(sourceUrl || onRetry) && (\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-6 py-3 text-sm font-semibold text-gray-700 shadow-sm transition hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n >\n Try Again\n </button>\n )}\n </div>\n \n {code && code >= 500 && (\n <p className=\"mt-6 text-xs text-gray-500\">\n If this problem persists, please contact support.\n </p>\n )}\n </div>\n </div>\n );\n};\n\nError.displayName = \"Error\";\n"]}
|
|
@@ -6,7 +6,40 @@ import { Buffer } from 'buffer';
|
|
|
6
6
|
* Enterprise Portal Components
|
|
7
7
|
* This file is generated by tsup. Do not edit manually.
|
|
8
8
|
*/
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// datadog/tracer.ts
|
|
16
|
+
var tracer_exports = {};
|
|
17
|
+
__export(tracer_exports, {
|
|
18
|
+
default: () => tracer_default
|
|
19
|
+
});
|
|
20
|
+
var tracer_default;
|
|
9
21
|
|
|
22
|
+
// src/utils/constants.ts
|
|
23
|
+
var DEFAULT_SECONDARY_COLOR = "#6366f1";
|
|
24
|
+
function useCopyToClipboard(resetDelay = 2e3) {
|
|
25
|
+
const [copied, setCopied] = useState(false);
|
|
26
|
+
const copy = useCallback(async (text) => {
|
|
27
|
+
if (!navigator.clipboard) {
|
|
28
|
+
console.warn("[useCopyToClipboard] Clipboard API not available");
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await navigator.clipboard.writeText(text);
|
|
33
|
+
setCopied(true);
|
|
34
|
+
setTimeout(() => setCopied(false), resetDelay);
|
|
35
|
+
return true;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.error("[useCopyToClipboard] Failed to copy:", error);
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}, [resetDelay]);
|
|
41
|
+
return { copy, copied };
|
|
42
|
+
}
|
|
10
43
|
var navigateTo = (href) => {
|
|
11
44
|
if (typeof window !== "undefined") {
|
|
12
45
|
window.location.assign(href);
|
|
@@ -22,26 +55,12 @@ var K8S_DISTRIBUTIONS = [
|
|
|
22
55
|
{ value: "eks", label: "Amazon EKS" },
|
|
23
56
|
{ value: "gke", label: "Google GKE" }
|
|
24
57
|
];
|
|
25
|
-
var copyToClipboard = async (text) => {
|
|
26
|
-
try {
|
|
27
|
-
await navigator.clipboard.writeText(text);
|
|
28
|
-
return true;
|
|
29
|
-
} catch {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
58
|
var CodeBlock = ({
|
|
34
59
|
command,
|
|
35
60
|
className = ""
|
|
36
61
|
}) => {
|
|
37
|
-
const
|
|
38
|
-
const handleCopy =
|
|
39
|
-
const success = await copyToClipboard(command);
|
|
40
|
-
if (success) {
|
|
41
|
-
setCopied(true);
|
|
42
|
-
setTimeout(() => setCopied(false), 2e3);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
62
|
+
const { copy, copied } = useCopyToClipboard();
|
|
63
|
+
const handleCopy = () => copy(command);
|
|
45
64
|
return /* @__PURE__ */ jsxs("div", { className: `group relative min-w-0 ${className}`, children: [
|
|
46
65
|
/* @__PURE__ */ jsx("pre", { className: "overflow-x-auto rounded-lg bg-gray-900 p-4 text-sm text-gray-100", children: /* @__PURE__ */ jsx("code", { className: "block", children: command }) }),
|
|
47
66
|
/* @__PURE__ */ jsx(
|
|
@@ -56,11 +75,12 @@ var CodeBlock = ({
|
|
|
56
75
|
)
|
|
57
76
|
] });
|
|
58
77
|
};
|
|
59
|
-
var StepIndicator = ({ step }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-3", children: [
|
|
78
|
+
var StepIndicator = ({ step, primaryColor = DEFAULT_SECONDARY_COLOR }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-3", children: [
|
|
60
79
|
/* @__PURE__ */ jsx(
|
|
61
80
|
"div",
|
|
62
81
|
{
|
|
63
|
-
className: `flex h-10 w-10 items-center justify-center rounded-full border-2 ${step > 1 ? "border-gray-900 bg-gray-900 text-white" : "
|
|
82
|
+
className: `flex h-10 w-10 items-center justify-center rounded-full border-2 ${step > 1 ? "border-gray-900 bg-gray-900 text-white" : ""}`,
|
|
83
|
+
style: step === 1 ? { borderColor: primaryColor } : void 0,
|
|
64
84
|
children: step > 1 ? /* @__PURE__ */ jsx(
|
|
65
85
|
"svg",
|
|
66
86
|
{
|
|
@@ -72,7 +92,7 @@ var StepIndicator = ({ step }) => /* @__PURE__ */ jsxs("div", { className: "flex
|
|
|
72
92
|
strokeWidth: "2",
|
|
73
93
|
children: /* @__PURE__ */ jsx("path", { d: "m3.5 8 3 3 6-6" })
|
|
74
94
|
}
|
|
75
|
-
) : /* @__PURE__ */ jsx("span", { className: "h-2.5 w-2.5 rounded-full
|
|
95
|
+
) : /* @__PURE__ */ jsx("span", { className: "h-2.5 w-2.5 rounded-full", style: { backgroundColor: primaryColor } })
|
|
76
96
|
}
|
|
77
97
|
),
|
|
78
98
|
/* @__PURE__ */ jsx("div", { className: `h-0.5 w-12 ${step > 1 ? "bg-gray-900" : "bg-gray-200"}` }),
|
|
@@ -90,11 +110,12 @@ var VersionDropdown = ({
|
|
|
90
110
|
onSelect,
|
|
91
111
|
isLoading,
|
|
92
112
|
isLoadingInstructions,
|
|
93
|
-
error
|
|
113
|
+
error,
|
|
114
|
+
primaryColor = DEFAULT_SECONDARY_COLOR
|
|
94
115
|
}) => {
|
|
95
116
|
if (isLoading) {
|
|
96
117
|
return /* @__PURE__ */ jsxs("div", { className: "ml-8 flex items-center gap-2 text-sm text-gray-500", children: [
|
|
97
|
-
/* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300
|
|
118
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } }),
|
|
98
119
|
"Loading versions..."
|
|
99
120
|
] });
|
|
100
121
|
}
|
|
@@ -110,7 +131,7 @@ var VersionDropdown = ({
|
|
|
110
131
|
return /* @__PURE__ */ jsxs("div", { className: "ml-8 space-y-2", children: [
|
|
111
132
|
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm text-gray-600", children: [
|
|
112
133
|
"App Version",
|
|
113
|
-
isLoadingInstructions && /* @__PURE__ */ jsx("span", { className: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300
|
|
134
|
+
isLoadingInstructions && /* @__PURE__ */ jsx("span", { className: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } })
|
|
114
135
|
] }),
|
|
115
136
|
/* @__PURE__ */ jsx(
|
|
116
137
|
"select",
|
|
@@ -163,11 +184,12 @@ var InstallationInstructions = ({
|
|
|
163
184
|
isLoading,
|
|
164
185
|
completedSteps = {},
|
|
165
186
|
registryAccess = "online",
|
|
166
|
-
networkAvailability = "online"
|
|
187
|
+
networkAvailability = "online",
|
|
188
|
+
primaryColor = DEFAULT_SECONDARY_COLOR
|
|
167
189
|
}) => {
|
|
168
190
|
if (isLoading && !instructions?.steps?.length) {
|
|
169
191
|
return /* @__PURE__ */ jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-gray-500", children: [
|
|
170
|
-
/* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300
|
|
192
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } }),
|
|
171
193
|
"Loading instructions..."
|
|
172
194
|
] }) });
|
|
173
195
|
}
|
|
@@ -176,13 +198,13 @@ var InstallationInstructions = ({
|
|
|
176
198
|
}
|
|
177
199
|
const completableStepNames = ["export_credentials", "install_chart"];
|
|
178
200
|
const stepOffset = networkAvailability === "airgap" ? 3 : 2;
|
|
179
|
-
return /* @__PURE__ */ jsx("div", { className: `min-w-0 space-y-4 transition-opacity duration-
|
|
201
|
+
return /* @__PURE__ */ jsx("div", { className: `min-w-0 space-y-4 transition-opacity duration-200 ${isLoading ? "opacity-60" : ""}`, children: /* @__PURE__ */ jsx("ol", { className: "min-w-0 space-y-6 text-sm text-gray-700", children: instructions.steps.map((step, index) => {
|
|
180
202
|
const canComplete = step.maybe_completed || completableStepNames.includes(step.step_name);
|
|
181
203
|
const isCompleted = canComplete && completedSteps[step.step_name];
|
|
182
204
|
const isPartialInstallChart = registryAccess === "partial" && step.step_name === "install_chart";
|
|
183
205
|
return /* @__PURE__ */ jsxs("li", { className: "space-y-2", children: [
|
|
184
206
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
185
|
-
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full
|
|
207
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20`, color: primaryColor }, children: index + stepOffset }),
|
|
186
208
|
/* @__PURE__ */ jsx("span", { className: "font-medium text-gray-900", children: step.title }),
|
|
187
209
|
canComplete && /* @__PURE__ */ jsx(
|
|
188
210
|
"span",
|
|
@@ -216,6 +238,8 @@ var InstallationInstructions = ({
|
|
|
216
238
|
};
|
|
217
239
|
var HelmInstallWizard = ({
|
|
218
240
|
token,
|
|
241
|
+
primaryColor = DEFAULT_SECONDARY_COLOR,
|
|
242
|
+
secondaryColor = DEFAULT_SECONDARY_COLOR,
|
|
219
243
|
createServiceAccountAction,
|
|
220
244
|
fetchChannelReleasesAction,
|
|
221
245
|
createInstallOptionsAction,
|
|
@@ -227,7 +251,8 @@ var HelmInstallWizard = ({
|
|
|
227
251
|
initialInstallOptionsId,
|
|
228
252
|
initialInstallOptionsData,
|
|
229
253
|
initialChannelReleases,
|
|
230
|
-
supportPortalLink
|
|
254
|
+
supportPortalLink,
|
|
255
|
+
isHelmAirgapEnabled = false
|
|
231
256
|
}) => {
|
|
232
257
|
const [step, setStep] = useState(initialStep ?? 1);
|
|
233
258
|
const [instanceName, setInstanceName] = useState(initialInstallOptionsData?.instance_name ?? "");
|
|
@@ -261,7 +286,6 @@ var HelmInstallWizard = ({
|
|
|
261
286
|
const [isLoadingInstructions, setIsLoadingInstructions] = useState(false);
|
|
262
287
|
const [inputRegistryHostname, setInputRegistryHostname] = useState("");
|
|
263
288
|
const [privateRegistryHostname, setPrivateRegistryHostname] = useState("");
|
|
264
|
-
const registryDebounceRef = useRef(null);
|
|
265
289
|
const [completedSteps, setCompletedSteps] = useState({});
|
|
266
290
|
const hasInitializedFromProps = useRef(!!initialInstallOptionsData);
|
|
267
291
|
useEffect(() => {
|
|
@@ -291,6 +315,7 @@ var HelmInstallWizard = ({
|
|
|
291
315
|
}, [initialInstallOptionsData]);
|
|
292
316
|
const hasLoadedReleases = useRef(!!initialChannelReleases?.length);
|
|
293
317
|
const hasResumedInstallation = useRef(!!initialInstallOptionsData);
|
|
318
|
+
const selectedReleaseRef = useRef(selectedRelease);
|
|
294
319
|
const helmReleases = useMemo(() => {
|
|
295
320
|
return releases.filter((r) => r.helmCharts && r.helmCharts.length > 0);
|
|
296
321
|
}, [releases]);
|
|
@@ -316,6 +341,9 @@ var HelmInstallWizard = ({
|
|
|
316
341
|
prevInstallOptionsIdRef.current = installOptionsId;
|
|
317
342
|
}
|
|
318
343
|
}, [installOptionsId, onInstallOptionsIdChange]);
|
|
344
|
+
useEffect(() => {
|
|
345
|
+
selectedReleaseRef.current = selectedRelease;
|
|
346
|
+
}, [selectedRelease]);
|
|
319
347
|
useEffect(() => {
|
|
320
348
|
if (step !== 2 || !fetchChannelReleasesAction || hasLoadedReleases.current) {
|
|
321
349
|
return;
|
|
@@ -392,37 +420,35 @@ var HelmInstallWizard = ({
|
|
|
392
420
|
}
|
|
393
421
|
};
|
|
394
422
|
updateOptions();
|
|
395
|
-
}, [selectedRelease, installOptionsId, token, updateInstallOptionsAction, networkAvailability, registryAccess
|
|
396
|
-
const lastPrivateRegistryRef = useRef("");
|
|
423
|
+
}, [selectedRelease, installOptionsId, token, updateInstallOptionsAction, networkAvailability, registryAccess]);
|
|
397
424
|
useEffect(() => {
|
|
398
|
-
if (networkAvailability !== "airgap" || !installOptionsId || !
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
const currentValue = privateRegistryHostname || "";
|
|
402
|
-
if (lastPrivateRegistryRef.current === currentValue) {
|
|
425
|
+
if (networkAvailability !== "airgap" || !installOptionsId || !updateInstallOptionsAction || !selectedRelease) {
|
|
403
426
|
return;
|
|
404
427
|
}
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
428
|
+
const timeoutId = setTimeout(async () => {
|
|
429
|
+
const currentRelease = selectedReleaseRef.current;
|
|
430
|
+
if (!currentRelease) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
408
433
|
try {
|
|
409
|
-
const result = await
|
|
434
|
+
const result = await updateInstallOptionsAction({
|
|
410
435
|
token,
|
|
411
436
|
installOptionsId,
|
|
437
|
+
channelId: currentRelease.channelId,
|
|
438
|
+
channelReleaseSequence: currentRelease.channelSequence,
|
|
439
|
+
registryAvailability: registryAccess,
|
|
412
440
|
includeInstructions: true,
|
|
413
|
-
privateRegistryHostname:
|
|
441
|
+
privateRegistryHostname: privateRegistryHostname || void 0
|
|
414
442
|
});
|
|
415
443
|
if (result.instructions) {
|
|
416
444
|
setInstructions(result.instructions);
|
|
417
445
|
}
|
|
418
446
|
} catch (error) {
|
|
419
|
-
console.error("[helm-install-wizard] Failed to
|
|
420
|
-
} finally {
|
|
421
|
-
setIsLoadingInstructions(false);
|
|
447
|
+
console.error("[helm-install-wizard] Failed to update private registry hostname", error);
|
|
422
448
|
}
|
|
423
|
-
};
|
|
424
|
-
|
|
425
|
-
}, [privateRegistryHostname, networkAvailability, installOptionsId, token,
|
|
449
|
+
}, 500);
|
|
450
|
+
return () => clearTimeout(timeoutId);
|
|
451
|
+
}, [privateRegistryHostname, networkAvailability, installOptionsId, updateInstallOptionsAction, token, registryAccess]);
|
|
426
452
|
useEffect(() => {
|
|
427
453
|
if (hasResumedInstallation.current) {
|
|
428
454
|
return;
|
|
@@ -525,7 +551,6 @@ var HelmInstallWizard = ({
|
|
|
525
551
|
if (networkAvailability !== "airgap") {
|
|
526
552
|
setInputRegistryHostname("");
|
|
527
553
|
setPrivateRegistryHostname("");
|
|
528
|
-
lastPrivateRegistryRef.current = "";
|
|
529
554
|
}
|
|
530
555
|
setInstructions(null);
|
|
531
556
|
await updateInstallOptionsAction({
|
|
@@ -633,7 +658,7 @@ var HelmInstallWizard = ({
|
|
|
633
658
|
onStepChange?.(1);
|
|
634
659
|
};
|
|
635
660
|
const handleFinish = useCallback(async () => {
|
|
636
|
-
navigateTo("/
|
|
661
|
+
navigateTo("/updates/checking");
|
|
637
662
|
}, []);
|
|
638
663
|
const handleReleaseSelect = useCallback((release) => {
|
|
639
664
|
setSelectedRelease(release);
|
|
@@ -641,30 +666,18 @@ var HelmInstallWizard = ({
|
|
|
641
666
|
const handlePrivateRegistryHostnameChange = useCallback((e) => {
|
|
642
667
|
const value = e.target.value;
|
|
643
668
|
setInputRegistryHostname(value);
|
|
644
|
-
|
|
645
|
-
clearTimeout(registryDebounceRef.current);
|
|
646
|
-
}
|
|
647
|
-
registryDebounceRef.current = setTimeout(() => {
|
|
648
|
-
setPrivateRegistryHostname(value);
|
|
649
|
-
}, 1e3);
|
|
650
|
-
}, []);
|
|
651
|
-
useEffect(() => {
|
|
652
|
-
return () => {
|
|
653
|
-
if (registryDebounceRef.current) {
|
|
654
|
-
clearTimeout(registryDebounceRef.current);
|
|
655
|
-
}
|
|
656
|
-
};
|
|
669
|
+
setPrivateRegistryHostname(value);
|
|
657
670
|
}, []);
|
|
658
671
|
if (step === 2) {
|
|
659
672
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
660
|
-
/* @__PURE__ */ jsx(StepIndicator, { step: 2 }),
|
|
673
|
+
/* @__PURE__ */ jsx(StepIndicator, { step: 2, primaryColor }),
|
|
661
674
|
/* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-2xl border border-gray-100 bg-gray-50 p-6", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-6", children: [
|
|
662
675
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
663
676
|
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold text-gray-900", children: networkAvailability === "proxy" ? "Helm Proxy Install" : networkAvailability === "airgap" ? "Helm Air Gap Install" : "Helm Online Install" }),
|
|
664
677
|
/* @__PURE__ */ jsxs("div", { className: "mt-6 space-y-6", children: [
|
|
665
678
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
666
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2
|
|
667
|
-
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full
|
|
679
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", style: { color: primaryColor }, children: [
|
|
680
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20`, color: primaryColor }, children: "1" }),
|
|
668
681
|
/* @__PURE__ */ jsx("span", { className: "font-medium text-gray-900", children: "Select a version" })
|
|
669
682
|
] }),
|
|
670
683
|
/* @__PURE__ */ jsx(
|
|
@@ -675,13 +688,14 @@ var HelmInstallWizard = ({
|
|
|
675
688
|
onSelect: handleReleaseSelect,
|
|
676
689
|
isLoading: isLoadingReleases,
|
|
677
690
|
isLoadingInstructions,
|
|
678
|
-
error: releasesError
|
|
691
|
+
error: releasesError,
|
|
692
|
+
primaryColor
|
|
679
693
|
}
|
|
680
694
|
)
|
|
681
695
|
] }),
|
|
682
696
|
networkAvailability === "airgap" && selectedRelease && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
683
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2
|
|
684
|
-
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full
|
|
697
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", style: { color: primaryColor }, children: [
|
|
698
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20`, color: primaryColor }, children: "2" }),
|
|
685
699
|
/* @__PURE__ */ jsx("span", { className: "font-medium text-gray-900", children: "(Optional) Specify registry URI" })
|
|
686
700
|
] }),
|
|
687
701
|
/* @__PURE__ */ jsxs("div", { className: "ml-8", children: [
|
|
@@ -709,7 +723,8 @@ var HelmInstallWizard = ({
|
|
|
709
723
|
isLoading: isLoadingInstructions,
|
|
710
724
|
completedSteps,
|
|
711
725
|
registryAccess,
|
|
712
|
-
networkAvailability
|
|
726
|
+
networkAvailability,
|
|
727
|
+
primaryColor
|
|
713
728
|
}
|
|
714
729
|
)
|
|
715
730
|
] })
|
|
@@ -730,7 +745,8 @@ var HelmInstallWizard = ({
|
|
|
730
745
|
{
|
|
731
746
|
type: "button",
|
|
732
747
|
onClick: handleFinish,
|
|
733
|
-
className: "rounded-xl
|
|
748
|
+
className: "rounded-xl px-4 py-2 font-medium text-white transition-opacity duration-200 hover:opacity-90",
|
|
749
|
+
style: { backgroundColor: primaryColor },
|
|
734
750
|
children: "Finish"
|
|
735
751
|
}
|
|
736
752
|
)
|
|
@@ -741,7 +757,8 @@ var HelmInstallWizard = ({
|
|
|
741
757
|
/* @__PURE__ */ jsx(
|
|
742
758
|
"a",
|
|
743
759
|
{
|
|
744
|
-
className: "
|
|
760
|
+
className: "hover:opacity-80",
|
|
761
|
+
style: { color: secondaryColor },
|
|
745
762
|
href: supportPortalLink,
|
|
746
763
|
target: "_blank",
|
|
747
764
|
rel: "noopener noreferrer",
|
|
@@ -753,7 +770,7 @@ var HelmInstallWizard = ({
|
|
|
753
770
|
] });
|
|
754
771
|
}
|
|
755
772
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
756
|
-
/* @__PURE__ */ jsx(StepIndicator, { step }),
|
|
773
|
+
/* @__PURE__ */ jsx(StepIndicator, { step, primaryColor }),
|
|
757
774
|
/* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-gray-100 bg-gray-50 p-6", children: [
|
|
758
775
|
/* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
759
776
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -821,7 +838,7 @@ var HelmInstallWizard = ({
|
|
|
821
838
|
),
|
|
822
839
|
"Outbound requests require HTTPS Proxy"
|
|
823
840
|
] }),
|
|
824
|
-
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-3 text-sm text-gray-600", hidden:
|
|
841
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-3 text-sm text-gray-600", hidden: !isHelmAirgapEnabled, children: [
|
|
825
842
|
/* @__PURE__ */ jsx(
|
|
826
843
|
"input",
|
|
827
844
|
{
|
|
@@ -863,7 +880,7 @@ var HelmInstallWizard = ({
|
|
|
863
880
|
),
|
|
864
881
|
"My workstation can only access the internet AND the registry (NOT the cluster)"
|
|
865
882
|
] }),
|
|
866
|
-
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-3 text-sm text-gray-600", hidden:
|
|
883
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-3 text-sm text-gray-600", hidden: !isHelmAirgapEnabled, children: [
|
|
867
884
|
/* @__PURE__ */ jsx(
|
|
868
885
|
"input",
|
|
869
886
|
{
|
|
@@ -886,7 +903,8 @@ var HelmInstallWizard = ({
|
|
|
886
903
|
type: "button",
|
|
887
904
|
onClick: handleContinue,
|
|
888
905
|
disabled: isCreatingServiceAccount,
|
|
889
|
-
className: "rounded-xl
|
|
906
|
+
className: "rounded-xl px-4 py-2 font-medium text-white transition-opacity duration-200 hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50",
|
|
907
|
+
style: { backgroundColor: primaryColor },
|
|
890
908
|
children: isCreatingServiceAccount ? "Creating..." : "Continue"
|
|
891
909
|
}
|
|
892
910
|
)
|
|
@@ -919,8 +937,17 @@ async function handle401() {
|
|
|
919
937
|
const { redirect } = await import('next/navigation');
|
|
920
938
|
return redirect("/?expired=1");
|
|
921
939
|
}
|
|
940
|
+
function isErrorPage(url) {
|
|
941
|
+
try {
|
|
942
|
+
const urlObj = new URL(url);
|
|
943
|
+
return urlObj.pathname === "/error";
|
|
944
|
+
} catch {
|
|
945
|
+
return url === "/error" || url.startsWith("/error?");
|
|
946
|
+
}
|
|
947
|
+
}
|
|
922
948
|
async function handleServerError(statusCode) {
|
|
923
949
|
const { redirect } = await import('next/navigation');
|
|
950
|
+
const { cookies } = await import('next/headers');
|
|
924
951
|
let sourceUrl;
|
|
925
952
|
try {
|
|
926
953
|
const { headers } = await import('next/headers');
|
|
@@ -928,12 +955,20 @@ async function handleServerError(statusCode) {
|
|
|
928
955
|
const referer = headersList.get("referer");
|
|
929
956
|
const host = headersList.get("host");
|
|
930
957
|
const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
|
|
931
|
-
if (referer) {
|
|
958
|
+
if (referer && !isErrorPage(referer)) {
|
|
932
959
|
sourceUrl = referer;
|
|
933
960
|
} else if (host && pathname) {
|
|
934
961
|
const protocol = headersList.get("x-forwarded-proto") || "https";
|
|
935
962
|
sourceUrl = `${protocol}://${host}${pathname}`;
|
|
936
963
|
}
|
|
964
|
+
if (!sourceUrl || isErrorPage(sourceUrl)) {
|
|
965
|
+
const cookieStore = await cookies();
|
|
966
|
+
const preservedSource = cookieStore.get("portal_error_source");
|
|
967
|
+
if (preservedSource?.value) {
|
|
968
|
+
sourceUrl = decodeURIComponent(preservedSource.value);
|
|
969
|
+
cookieStore.delete("portal_error_source");
|
|
970
|
+
}
|
|
971
|
+
}
|
|
937
972
|
} catch (error) {
|
|
938
973
|
console.debug("[portal-components] Could not determine source URL", error);
|
|
939
974
|
}
|
|
@@ -1013,11 +1048,15 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
1013
1048
|
const payload = await response.json();
|
|
1014
1049
|
const brandingObject = {
|
|
1015
1050
|
logo: payload.logoUrl,
|
|
1016
|
-
title: payload.
|
|
1017
|
-
|
|
1018
|
-
|
|
1051
|
+
title: payload.title,
|
|
1052
|
+
primaryColor: payload.primaryColor,
|
|
1053
|
+
secondaryColor: payload.secondaryColor,
|
|
1019
1054
|
favicon: payload.faviconUrl,
|
|
1020
|
-
supportPortalLink: payload.supportPortalLink || ""
|
|
1055
|
+
supportPortalLink: payload.supportPortalLink || "",
|
|
1056
|
+
background: payload.background,
|
|
1057
|
+
backgroundImage: payload.backgroundImage,
|
|
1058
|
+
customColor1: payload.customColor1,
|
|
1059
|
+
customColor2: payload.customColor2
|
|
1021
1060
|
};
|
|
1022
1061
|
const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
|
|
1023
1062
|
return {
|