@replicated/portal-components 0.0.11 → 0.0.12

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 (51) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/datadog/tracer.d.ts +3 -0
  4. package/datadog/tracer.js +82 -0
  5. package/datadog/tracer.ts +101 -0
  6. package/dist/esm/index.js +91 -64
  7. package/dist/esm/index.js.map +1 -1
  8. package/dist/esm/install-card.js +8 -21
  9. package/dist/esm/install-card.js.map +1 -1
  10. package/dist/esm/license-card.js +8 -12
  11. package/dist/esm/license-card.js.map +1 -1
  12. package/dist/esm/license-details.js +1 -1
  13. package/dist/esm/license-details.js.map +1 -1
  14. package/dist/esm/support-card.js +4 -6
  15. package/dist/esm/support-card.js.map +1 -1
  16. package/dist/esm/team-settings-card.js +8 -13
  17. package/dist/esm/team-settings-card.js.map +1 -1
  18. package/dist/esm/top-nav.js +69 -29
  19. package/dist/esm/top-nav.js.map +1 -1
  20. package/dist/esm/update-layout.js +69 -29
  21. package/dist/esm/update-layout.js.map +1 -1
  22. package/dist/esm/updates-card.js +8 -14
  23. package/dist/esm/updates-card.js.map +1 -1
  24. package/dist/esm/utils/observability/index.js +193 -0
  25. package/dist/esm/utils/observability/index.js.map +1 -0
  26. package/dist/index.js +91 -64
  27. package/dist/index.js.map +1 -1
  28. package/dist/install-card.js +8 -21
  29. package/dist/install-card.js.map +1 -1
  30. package/dist/license-card.js +8 -12
  31. package/dist/license-card.js.map +1 -1
  32. package/dist/license-details.js +1 -1
  33. package/dist/license-details.js.map +1 -1
  34. package/dist/styles.css +2 -2
  35. package/dist/support-card.js +4 -6
  36. package/dist/support-card.js.map +1 -1
  37. package/dist/team-settings-card.js +8 -13
  38. package/dist/team-settings-card.js.map +1 -1
  39. package/dist/top-nav.js +69 -29
  40. package/dist/top-nav.js.map +1 -1
  41. package/dist/update-layout.js +69 -29
  42. package/dist/update-layout.js.map +1 -1
  43. package/dist/updates-card.js +8 -14
  44. package/dist/updates-card.js.map +1 -1
  45. package/dist/utils/observability/index.d.mts +13 -0
  46. package/dist/utils/observability/index.d.ts +13 -0
  47. package/dist/utils/observability/index.js +198 -0
  48. package/dist/utils/observability/index.js.map +1 -0
  49. package/instrumentation.d.ts +8 -0
  50. package/instrumentation.js +22 -0
  51. package/package.json +16 -3
@@ -14,7 +14,7 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
14
14
  * This file is generated by tsup. Do not edit manually.
15
15
  */
16
16
 
17
- var LinuxIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
17
+ var LinuxIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
18
18
  "svg",
19
19
  {
20
20
  xmlns: "http://www.w3.org/2000/svg",
@@ -22,19 +22,14 @@ var LinuxIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
22
22
  fill: "none",
23
23
  stroke: "currentColor",
24
24
  strokeWidth: 1.5,
25
+ strokeLinecap: "round",
26
+ strokeLinejoin: "round",
25
27
  "aria-hidden": "true",
26
28
  ...props,
27
- children: [
28
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 6.5a5 5 0 0 1 10 0c0 1.4-.4 3-1.1 4.5a9 9 0 0 1 2.1 5.8c0 3.3-1.9 5.2-5 5.2s-5-1.9-5-5.2c0-2.1.8-4 2.1-5.6C7.4 9.4 7 7.9 7 6.5Z" }),
29
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.5 10.5c-1.5 1-2.6 2.7-2.6 4.5 0 1.7.7 2.3 1.3 2.6" }),
30
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.5 10.5c1.5 1 2.6 2.7 2.6 4.5 0 1.7-.7 2.3-1.3 2.6" }),
31
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 9.5, cy: 5.5, r: 0.8 }),
32
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 14.5, cy: 5.5, r: 0.8 }),
33
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.2 7.3c.3.2.7.2 1 0" })
34
- ]
29
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21.75 17.25v-.228a4.5 4.5 0 00-.12-1.03l-2.268-9.64a3.375 3.375 0 00-3.285-2.602H7.923a3.375 3.375 0 00-3.285 2.602l-2.268 9.64a4.5 4.5 0 00-.12 1.03v.228m19.5 0a3 3 0 01-3 3H5.25a3 3 0 01-3-3m19.5 0a3 3 0 00-3-3H5.25a3 3 0 00-3 3m16.5 0h.008v.008h-.008v-.008zm-3 0h.008v.008h-.008v-.008z" })
35
30
  }
36
31
  );
37
- var HelmIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
32
+ var HelmIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
38
33
  "svg",
39
34
  {
40
35
  xmlns: "http://www.w3.org/2000/svg",
@@ -42,19 +37,11 @@ var HelmIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
42
37
  fill: "none",
43
38
  stroke: "currentColor",
44
39
  strokeWidth: 1.5,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round",
45
42
  "aria-hidden": "true",
46
43
  ...props,
47
- children: [
48
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 12, cy: 12, r: 4.5 }),
49
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.5 12a5.5 5.5 0 0 1 0-4" }),
50
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.5 12a5.5 5.5 0 0 0 0-4" }),
51
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.5 12a5.5 5.5 0 0 0 0 4" }),
52
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.5 12a5.5 5.5 0 0 1 0 4" }),
53
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 4.5 7.5 2" }),
54
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 4.5 16.5 2" }),
55
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 19.5 7.5 22" }),
56
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 19.5 16.5 22" })
57
- ]
44
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z" })
58
45
  }
59
46
  );
60
47
  var baseCardClass = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/install-card.tsx"],"names":["jsxs","jsx","useState","useEffect","Link"],"mappings":"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","file":"install-card.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { FetchInstallOptionsResult } from \"../actions\";\n\nconst LinuxIcon = (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=\"M7 6.5a5 5 0 0 1 10 0c0 1.4-.4 3-1.1 4.5a9 9 0 0 1 2.1 5.8c0 3.3-1.9 5.2-5 5.2s-5-1.9-5-5.2c0-2.1.8-4 2.1-5.6C7.4 9.4 7 7.9 7 6.5Z\" />\n <path d=\"M9.5 10.5c-1.5 1-2.6 2.7-2.6 4.5 0 1.7.7 2.3 1.3 2.6\" />\n <path d=\"M14.5 10.5c1.5 1 2.6 2.7 2.6 4.5 0 1.7-.7 2.3-1.3 2.6\" />\n <circle cx={9.5} cy={5.5} r={0.8} />\n <circle cx={14.5} cy={5.5} r={0.8} />\n <path d=\"M11.2 7.3c.3.2.7.2 1 0\" />\n </svg>\n);\n\nconst HelmIcon = (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 <circle cx={12} cy={12} r={4.5} />\n <path d=\"M6.5 12a5.5 5.5 0 0 1 0-4\" />\n <path d=\"M17.5 12a5.5 5.5 0 0 0 0-4\" />\n <path d=\"M6.5 12a5.5 5.5 0 0 0 0 4\" />\n <path d=\"M17.5 12a5.5 5.5 0 0 1 0 4\" />\n <path d=\"M9 4.5 7.5 2\" />\n <path d=\"M15 4.5 16.5 2\" />\n <path d=\"M9 19.5 7.5 22\" />\n <path d=\"M15 19.5 16.5 22\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\n\nexport interface InstallCardProps {\n fetchInstallOptionsAction: () => Promise<FetchInstallOptionsResult>;\n initialShowLinux?: boolean;\n initialShowHelm?: boolean;\n pollIntervalMs?: number;\n}\n\nexport const InstallCard = ({ \n fetchInstallOptionsAction,\n initialShowLinux = true, \n initialShowHelm = true,\n pollIntervalMs = 2000\n}: InstallCardProps) => {\n const [showLinux, setShowLinux] = useState(initialShowLinux);\n const [showHelm, setShowHelm] = useState(initialShowHelm);\n\n useEffect(() => {\n const fetchOptions = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const result = await fetchInstallOptionsAction();\n setShowLinux(result.showLinux);\n setShowHelm(result.showHelm);\n } catch (error) {\n console.error(\"[install-card] Failed to fetch install options\", error);\n }\n };\n\n // Fetch immediately\n fetchOptions();\n\n // Set up polling interval\n const intervalId = setInterval(fetchOptions, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchOptions();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchInstallOptionsAction, pollIntervalMs]);\n\n // If neither option is enabled, don't render anything\n if (!showLinux && !showHelm) {\n return null;\n }\n\n return (\n <section className={baseCardClass} aria-labelledby=\"install-card-heading\">\n <header>\n <h2 id=\"install-card-heading\" className={headingClass}>\n Install\n </h2>\n </header>\n <div className={contentClass}>\n {showLinux ? (\n <div className={itemClass}>\n <LinuxIcon className={iconClass} />\n <span>Deploy to Linux</span>\n </div>\n ) : null}\n {showHelm ? (\n <div className={itemClass}>\n <HelmIcon className={iconClass} />\n <span>Deploy via Helm</span>\n </div>\n ) : null}\n </div>\n <footer className={footerClass}>\n <Link href=\"/install\">\n View install guide →\n </Link>\n </footer>\n </section>\n );\n};\n\nInstallCard.displayName = \"InstallCard\";\n"]}
1
+ {"version":3,"sources":["../src/components/install-card.tsx"],"names":["jsx","useState","useEffect","jsxs","Link"],"mappings":"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","file":"install-card.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { FetchInstallOptionsResult } from \"../actions\";\n\nconst LinuxIcon = (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 strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M21.75 17.25v-.228a4.5 4.5 0 00-.12-1.03l-2.268-9.64a3.375 3.375 0 00-3.285-2.602H7.923a3.375 3.375 0 00-3.285 2.602l-2.268 9.64a4.5 4.5 0 00-.12 1.03v.228m19.5 0a3 3 0 01-3 3H5.25a3 3 0 01-3-3m19.5 0a3 3 0 00-3-3H5.25a3 3 0 00-3 3m16.5 0h.008v.008h-.008v-.008zm-3 0h.008v.008h-.008v-.008z\" />\n </svg>\n);\n\nconst HelmIcon = (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 strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\n\nexport interface InstallCardProps {\n fetchInstallOptionsAction: () => Promise<FetchInstallOptionsResult>;\n initialShowLinux?: boolean;\n initialShowHelm?: boolean;\n pollIntervalMs?: number;\n}\n\nexport const InstallCard = ({ \n fetchInstallOptionsAction,\n initialShowLinux = true, \n initialShowHelm = true,\n pollIntervalMs = 2000\n}: InstallCardProps) => {\n const [showLinux, setShowLinux] = useState(initialShowLinux);\n const [showHelm, setShowHelm] = useState(initialShowHelm);\n\n useEffect(() => {\n const fetchOptions = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const result = await fetchInstallOptionsAction();\n setShowLinux(result.showLinux);\n setShowHelm(result.showHelm);\n } catch (error) {\n console.error(\"[install-card] Failed to fetch install options\", error);\n }\n };\n\n // Fetch immediately\n fetchOptions();\n\n // Set up polling interval\n const intervalId = setInterval(fetchOptions, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchOptions();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchInstallOptionsAction, pollIntervalMs]);\n\n // If neither option is enabled, don't render anything\n if (!showLinux && !showHelm) {\n return null;\n }\n\n return (\n <section className={baseCardClass} aria-labelledby=\"install-card-heading\">\n <header>\n <h2 id=\"install-card-heading\" className={headingClass}>\n Install\n </h2>\n </header>\n <div className={contentClass}>\n {showLinux ? (\n <div className={itemClass}>\n <LinuxIcon className={iconClass} />\n <span>Deploy to Linux</span>\n </div>\n ) : null}\n {showHelm ? (\n <div className={itemClass}>\n <HelmIcon className={iconClass} />\n <span>Deploy via Helm</span>\n </div>\n ) : null}\n </div>\n <footer className={footerClass}>\n <Link href=\"/install\">\n View install guide →\n </Link>\n </footer>\n </section>\n );\n};\n\nInstallCard.displayName = \"InstallCard\";\n"]}
@@ -14,7 +14,7 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
14
14
  * This file is generated by tsup. Do not edit manually.
15
15
  */
16
16
 
17
- var FileIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
17
+ var FileIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
18
18
  "svg",
19
19
  {
20
20
  xmlns: "http://www.w3.org/2000/svg",
@@ -22,15 +22,14 @@ var FileIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
22
22
  fill: "none",
23
23
  stroke: "currentColor",
24
24
  strokeWidth: 1.5,
25
+ strokeLinecap: "round",
26
+ strokeLinejoin: "round",
25
27
  "aria-hidden": "true",
26
28
  ...props,
27
- children: [
28
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2h5l5 5v13a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Z" }),
29
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13 2v6h6" })
30
- ]
29
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" })
31
30
  }
32
31
  );
33
- var CalendarIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
32
+ var CalendarIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
34
33
  "svg",
35
34
  {
36
35
  xmlns: "http://www.w3.org/2000/svg",
@@ -38,14 +37,11 @@ var CalendarIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
38
37
  fill: "none",
39
38
  stroke: "currentColor",
40
39
  strokeWidth: 1.5,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round",
41
42
  "aria-hidden": "true",
42
43
  ...props,
43
- children: [
44
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2v2" }),
45
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 2v2" }),
46
- /* @__PURE__ */ jsxRuntime.jsx("rect", { width: 16, height: 16, x: 4, y: 4, rx: 2 }),
47
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 10h16" })
48
- ]
44
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5" })
49
45
  }
50
46
  );
51
47
  var baseCardClass = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/license-card.tsx"],"names":["jsxs","jsx","useState","useEffect","Link"],"mappings":"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","file":"license-card.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { FetchLicenseSummaryResult } from \"../actions\";\n\nconst FileIcon = (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=\"M8 2h5l5 5v13a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Z\" />\n <path d=\"M13 2v6h6\" />\n </svg>\n);\n\nconst CalendarIcon = (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=\"M8 2v2\" />\n <path d=\"M16 2v2\" />\n <rect width={16} height={16} x={4} y={4} rx={2} />\n <path d=\"M4 10h16\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\n\nexport interface LicenseCardProps {\n fetchLicenseSummaryAction: () => Promise<FetchLicenseSummaryResult>;\n initialType?: string;\n initialExpiresAt?: string | null;\n pollIntervalMs?: number;\n}\n\nconst formatDate = (dateString: string | null): string => {\n if (!dateString) {\n return \"Never\";\n }\n \n try {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\"\n });\n } catch {\n return dateString;\n }\n};\n\nconst formatLicenseType = (type: string): string => {\n if (!type || type === \"Unknown\") {\n return \"Unknown\";\n }\n \n // Capitalize first letter and add \" license\"\n const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();\n return `${capitalized} license`;\n};\n\nexport const LicenseCard = ({\n fetchLicenseSummaryAction,\n initialType = \"Unknown\",\n initialExpiresAt = null,\n pollIntervalMs = 2000\n}: LicenseCardProps) => {\n const [type, setType] = useState(initialType);\n const [expiresAt, setExpiresAt] = useState(initialExpiresAt);\n\n useEffect(() => {\n const fetchSummary = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const result = await fetchLicenseSummaryAction();\n setType(result.type);\n setExpiresAt(result.expiresAt);\n } catch (error) {\n console.error(\"[license-card] Failed to fetch license summary\", error);\n }\n };\n\n // Fetch immediately\n fetchSummary();\n\n // Set up polling interval\n const intervalId = setInterval(fetchSummary, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchSummary();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchLicenseSummaryAction, pollIntervalMs]);\n\n return (\n <section className={baseCardClass} aria-labelledby=\"license-card-heading\">\n <header>\n <h2 id=\"license-card-heading\" className={headingClass}>\n License\n </h2>\n </header>\n <div className={contentClass}>\n <div className={itemClass}>\n <FileIcon className={iconClass} />\n <span>Type: {formatLicenseType(type)}</span>\n </div>\n <div className={itemClass}>\n <CalendarIcon className={iconClass} />\n <span>Expiration: {formatDate(expiresAt)}</span>\n </div>\n </div>\n <footer className={footerClass}>\n <Link href=\"/license\">View license →</Link>\n </footer>\n </section>\n );\n};\n\nLicenseCard.displayName = \"LicenseCard\";\n"]}
1
+ {"version":3,"sources":["../src/components/license-card.tsx"],"names":["jsx","useState","useEffect","jsxs","Link"],"mappings":"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","file":"license-card.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { FetchLicenseSummaryResult } from \"../actions\";\n\nconst FileIcon = (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 strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\" />\n </svg>\n);\n\nconst CalendarIcon = (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 strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\n\nexport interface LicenseCardProps {\n fetchLicenseSummaryAction: () => Promise<FetchLicenseSummaryResult>;\n initialType?: string;\n initialExpiresAt?: string | null;\n pollIntervalMs?: number;\n}\n\nconst formatDate = (dateString: string | null): string => {\n if (!dateString) {\n return \"Never\";\n }\n \n try {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\"\n });\n } catch {\n return dateString;\n }\n};\n\nconst formatLicenseType = (type: string): string => {\n if (!type || type === \"Unknown\") {\n return \"Unknown\";\n }\n \n // Capitalize first letter and add \" license\"\n const capitalized = type.charAt(0).toUpperCase() + type.slice(1).toLowerCase();\n return `${capitalized} license`;\n};\n\nexport const LicenseCard = ({\n fetchLicenseSummaryAction,\n initialType = \"Unknown\",\n initialExpiresAt = null,\n pollIntervalMs = 2000\n}: LicenseCardProps) => {\n const [type, setType] = useState(initialType);\n const [expiresAt, setExpiresAt] = useState(initialExpiresAt);\n\n useEffect(() => {\n const fetchSummary = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const result = await fetchLicenseSummaryAction();\n setType(result.type);\n setExpiresAt(result.expiresAt);\n } catch (error) {\n console.error(\"[license-card] Failed to fetch license summary\", error);\n }\n };\n\n // Fetch immediately\n fetchSummary();\n\n // Set up polling interval\n const intervalId = setInterval(fetchSummary, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchSummary();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchLicenseSummaryAction, pollIntervalMs]);\n\n return (\n <section className={baseCardClass} aria-labelledby=\"license-card-heading\">\n <header>\n <h2 id=\"license-card-heading\" className={headingClass}>\n License\n </h2>\n </header>\n <div className={contentClass}>\n <div className={itemClass}>\n <FileIcon className={iconClass} />\n <span>Type: {formatLicenseType(type)}</span>\n </div>\n <div className={itemClass}>\n <CalendarIcon className={iconClass} />\n <span>Expiration: {formatDate(expiresAt)}</span>\n </div>\n </div>\n <footer className={footerClass}>\n <Link href=\"/license\">View license →</Link>\n </footer>\n </section>\n );\n};\n\nLicenseCard.displayName = \"LicenseCard\";\n"]}
@@ -649,7 +649,7 @@ var LicenseDetails = async ({
649
649
  console.debug("[portal-components] license response", response.raw);
650
650
  const { license } = response;
651
651
  const rows = buildPrimaryRows(license);
652
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-3xl border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
652
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
653
653
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-col border-b border-gray-100 pb-6", children: [
654
654
  /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }),
655
655
  description ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-600", children: description }) : null