@replicated/portal-components 0.0.2 → 0.0.3

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 (216) hide show
  1. package/components/metadata/registry.json +83 -2
  2. package/components/metadata/registry.md +27 -2
  3. package/dist/actions/index.d.mts +566 -3
  4. package/dist/actions/index.d.ts +566 -3
  5. package/dist/actions/index.js +1853 -12
  6. package/dist/actions/index.js.map +1 -1
  7. package/dist/airgap-instances.d.mts +26 -0
  8. package/dist/airgap-instances.d.ts +26 -0
  9. package/dist/airgap-instances.js +354 -0
  10. package/dist/airgap-instances.js.map +1 -0
  11. package/dist/error-page.d.mts +14 -0
  12. package/dist/error-page.d.ts +14 -0
  13. package/dist/error-page.js +153 -0
  14. package/dist/error-page.js.map +1 -0
  15. package/dist/error.d.mts +15 -0
  16. package/dist/error.d.ts +15 -0
  17. package/dist/error.js +144 -0
  18. package/dist/error.js.map +1 -0
  19. package/dist/esm/actions/index.js +1816 -13
  20. package/dist/esm/actions/index.js.map +1 -1
  21. package/dist/esm/airgap-instances.js +352 -0
  22. package/dist/esm/airgap-instances.js.map +1 -0
  23. package/dist/esm/error-page.js +151 -0
  24. package/dist/esm/error-page.js.map +1 -0
  25. package/dist/esm/error.js +142 -0
  26. package/dist/esm/error.js.map +1 -0
  27. package/dist/esm/helm-install-wizard.js +1007 -0
  28. package/dist/esm/helm-install-wizard.js.map +1 -0
  29. package/dist/esm/index.js +2232 -155
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/install-actions.js +746 -0
  32. package/dist/esm/install-actions.js.map +1 -0
  33. package/dist/esm/install-card.js +115 -0
  34. package/dist/esm/install-card.js.map +1 -0
  35. package/dist/esm/install-targets.js +48 -0
  36. package/dist/esm/install-targets.js.map +1 -0
  37. package/dist/esm/instance-card.js +197 -0
  38. package/dist/esm/instance-card.js.map +1 -0
  39. package/dist/esm/join-team.js +218 -0
  40. package/dist/esm/join-team.js.map +1 -0
  41. package/dist/esm/license-card.js +131 -0
  42. package/dist/esm/license-card.js.map +1 -0
  43. package/dist/esm/license-details.js +667 -0
  44. package/dist/esm/license-details.js.map +1 -0
  45. package/dist/esm/linux-install-wizard.js +1083 -0
  46. package/dist/esm/linux-install-wizard.js.map +1 -0
  47. package/dist/esm/login.js +261 -0
  48. package/dist/esm/login.js.map +1 -0
  49. package/dist/esm/online-instance-list.js +287 -0
  50. package/dist/esm/online-instance-list.js.map +1 -0
  51. package/dist/esm/pending-installations.js +235 -0
  52. package/dist/esm/pending-installations.js.map +1 -0
  53. package/dist/esm/release-history-panel.js +100 -0
  54. package/dist/esm/release-history-panel.js.map +1 -0
  55. package/dist/esm/release-notes-card.js +23 -0
  56. package/dist/esm/release-notes-card.js.map +1 -0
  57. package/dist/esm/security-card.js +700 -0
  58. package/dist/esm/security-card.js.map +1 -0
  59. package/dist/esm/support-bundle-collection-card.js +170 -0
  60. package/dist/esm/support-bundle-collection-card.js.map +1 -0
  61. package/dist/esm/support-bundles-card.js +306 -0
  62. package/dist/esm/support-bundles-card.js.map +1 -0
  63. package/dist/esm/support-card.js +305 -0
  64. package/dist/esm/support-card.js.map +1 -0
  65. package/dist/esm/team-selection.js +117 -0
  66. package/dist/esm/team-selection.js.map +1 -0
  67. package/dist/esm/team-settings-card.js +78 -0
  68. package/dist/esm/team-settings-card.js.map +1 -0
  69. package/dist/esm/team-settings.js +136 -0
  70. package/dist/esm/team-settings.js.map +1 -0
  71. package/dist/esm/top-nav-user-menu.js +173 -0
  72. package/dist/esm/top-nav-user-menu.js.map +1 -0
  73. package/dist/esm/top-nav.js +398 -0
  74. package/dist/esm/top-nav.js.map +1 -0
  75. package/dist/esm/update-layout.js +405 -0
  76. package/dist/esm/update-layout.js.map +1 -0
  77. package/dist/esm/updates-card.js +85 -0
  78. package/dist/esm/updates-card.js.map +1 -0
  79. package/dist/esm/upload-support-bundle-modal.js +143 -0
  80. package/dist/esm/upload-support-bundle-modal.js.map +1 -0
  81. package/dist/esm/user-settings-card.js +21 -0
  82. package/dist/esm/user-settings-card.js.map +1 -0
  83. package/dist/esm/user-settings.js +368 -0
  84. package/dist/esm/user-settings.js.map +1 -0
  85. package/dist/esm/utils/index.js +170 -0
  86. package/dist/esm/utils/index.js.map +1 -0
  87. package/dist/helm-install-wizard.d.mts +38 -0
  88. package/dist/helm-install-wizard.d.ts +38 -0
  89. package/dist/helm-install-wizard.js +1011 -0
  90. package/dist/helm-install-wizard.js.map +1 -0
  91. package/dist/index.d.mts +11 -27
  92. package/dist/index.d.ts +11 -27
  93. package/dist/index.js +2258 -154
  94. package/dist/index.js.map +1 -1
  95. package/dist/install-B19AaKF_.d.mts +233 -0
  96. package/dist/install-Bi1qJ8Bu.d.ts +233 -0
  97. package/dist/install-actions.d.mts +141 -0
  98. package/dist/install-actions.d.ts +141 -0
  99. package/dist/install-actions.js +765 -0
  100. package/dist/install-actions.js.map +1 -0
  101. package/dist/install-card.d.mts +15 -0
  102. package/dist/install-card.d.ts +15 -0
  103. package/dist/install-card.js +117 -0
  104. package/dist/install-card.js.map +1 -0
  105. package/dist/install-targets.d.mts +19 -0
  106. package/dist/install-targets.d.ts +19 -0
  107. package/dist/install-targets.js +50 -0
  108. package/dist/install-targets.js.map +1 -0
  109. package/dist/instance-card.d.mts +22 -0
  110. package/dist/instance-card.d.ts +22 -0
  111. package/dist/instance-card.js +199 -0
  112. package/dist/instance-card.js.map +1 -0
  113. package/dist/join-team.d.mts +30 -0
  114. package/dist/join-team.d.ts +30 -0
  115. package/dist/join-team.js +220 -0
  116. package/dist/join-team.js.map +1 -0
  117. package/dist/license-card.d.mts +15 -0
  118. package/dist/license-card.d.ts +15 -0
  119. package/dist/license-card.js +133 -0
  120. package/dist/license-card.js.map +1 -0
  121. package/dist/license-details.d.mts +10 -0
  122. package/dist/license-details.d.ts +10 -0
  123. package/dist/license-details.js +669 -0
  124. package/dist/license-details.js.map +1 -0
  125. package/dist/linux-install-wizard.d.mts +66 -0
  126. package/dist/linux-install-wizard.d.ts +66 -0
  127. package/dist/linux-install-wizard.js +1093 -0
  128. package/dist/linux-install-wizard.js.map +1 -0
  129. package/dist/login.d.mts +37 -0
  130. package/dist/login.d.ts +37 -0
  131. package/dist/login.js +263 -0
  132. package/dist/login.js.map +1 -0
  133. package/dist/online-instance-list.d.mts +22 -0
  134. package/dist/online-instance-list.d.ts +22 -0
  135. package/dist/online-instance-list.js +289 -0
  136. package/dist/online-instance-list.js.map +1 -0
  137. package/dist/pending-installations.d.mts +15 -0
  138. package/dist/pending-installations.d.ts +15 -0
  139. package/dist/pending-installations.js +237 -0
  140. package/dist/pending-installations.js.map +1 -0
  141. package/dist/release-history-panel.d.mts +22 -0
  142. package/dist/release-history-panel.d.ts +22 -0
  143. package/dist/release-history-panel.js +102 -0
  144. package/dist/release-history-panel.js.map +1 -0
  145. package/dist/release-notes-card.d.mts +13 -0
  146. package/dist/release-notes-card.d.ts +13 -0
  147. package/dist/release-notes-card.js +25 -0
  148. package/dist/release-notes-card.js.map +1 -0
  149. package/dist/security-card.d.mts +73 -0
  150. package/dist/security-card.d.ts +73 -0
  151. package/dist/security-card.js +702 -0
  152. package/dist/security-card.js.map +1 -0
  153. package/dist/styles.css +1877 -194
  154. package/dist/support-bundle-collection-card.d.mts +20 -0
  155. package/dist/support-bundle-collection-card.d.ts +20 -0
  156. package/dist/support-bundle-collection-card.js +172 -0
  157. package/dist/support-bundle-collection-card.js.map +1 -0
  158. package/dist/support-bundles-card.d.mts +19 -0
  159. package/dist/support-bundles-card.d.ts +19 -0
  160. package/dist/support-bundles-card.js +308 -0
  161. package/dist/support-bundles-card.js.map +1 -0
  162. package/dist/support-card.d.mts +8 -0
  163. package/dist/support-card.d.ts +8 -0
  164. package/dist/support-card.js +307 -0
  165. package/dist/support-card.js.map +1 -0
  166. package/dist/team-selection.d.mts +23 -0
  167. package/dist/team-selection.d.ts +23 -0
  168. package/dist/team-selection.js +119 -0
  169. package/dist/team-selection.js.map +1 -0
  170. package/dist/team-settings-card-Dq1d9b5c.d.mts +14 -0
  171. package/dist/team-settings-card-Dq1d9b5c.d.ts +14 -0
  172. package/dist/team-settings-card.d.mts +2 -0
  173. package/dist/team-settings-card.d.ts +2 -0
  174. package/dist/team-settings-card.js +80 -0
  175. package/dist/team-settings-card.js.map +1 -0
  176. package/dist/team-settings.d.mts +25 -0
  177. package/dist/team-settings.d.ts +25 -0
  178. package/dist/team-settings.js +138 -0
  179. package/dist/team-settings.js.map +1 -0
  180. package/dist/top-nav-0mb1K_H0.d.mts +32 -0
  181. package/dist/top-nav-0mb1K_H0.d.ts +32 -0
  182. package/dist/top-nav-user-menu.d.mts +18 -0
  183. package/dist/top-nav-user-menu.d.ts +18 -0
  184. package/dist/top-nav-user-menu.js +175 -0
  185. package/dist/top-nav-user-menu.js.map +1 -0
  186. package/dist/top-nav.d.mts +3 -0
  187. package/dist/top-nav.d.ts +3 -0
  188. package/dist/top-nav.js +400 -0
  189. package/dist/top-nav.js.map +1 -0
  190. package/dist/update-layout.d.mts +12 -0
  191. package/dist/update-layout.d.ts +12 -0
  192. package/dist/update-layout.js +407 -0
  193. package/dist/update-layout.js.map +1 -0
  194. package/dist/updates-card-BbubBrVR.d.mts +18 -0
  195. package/dist/updates-card-BbubBrVR.d.ts +18 -0
  196. package/dist/updates-card.d.mts +2 -0
  197. package/dist/updates-card.d.ts +2 -0
  198. package/dist/updates-card.js +87 -0
  199. package/dist/updates-card.js.map +1 -0
  200. package/dist/upload-support-bundle-modal.d.mts +19 -0
  201. package/dist/upload-support-bundle-modal.d.ts +19 -0
  202. package/dist/upload-support-bundle-modal.js +145 -0
  203. package/dist/upload-support-bundle-modal.js.map +1 -0
  204. package/dist/user-settings-card.d.mts +8 -0
  205. package/dist/user-settings-card.d.ts +8 -0
  206. package/dist/user-settings-card.js +23 -0
  207. package/dist/user-settings-card.js.map +1 -0
  208. package/dist/user-settings.d.mts +47 -0
  209. package/dist/user-settings.d.ts +47 -0
  210. package/dist/user-settings.js +370 -0
  211. package/dist/user-settings.js.map +1 -0
  212. package/dist/utils/index.d.mts +70 -0
  213. package/dist/utils/index.d.ts +70 -0
  214. package/dist/utils/index.js +177 -0
  215. package/dist/utils/index.js.map +1 -0
  216. package/package.json +163 -3
@@ -0,0 +1,117 @@
1
+ "use client";
2
+ import { useState } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ /**
6
+ * Enterprise Portal Components
7
+ * This file is generated by tsup. Do not edit manually.
8
+ */
9
+
10
+ var SearchIcon = () => /* @__PURE__ */ jsxs(
11
+ "svg",
12
+ {
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ viewBox: "0 0 24 24",
15
+ fill: "none",
16
+ stroke: "currentColor",
17
+ strokeWidth: "2",
18
+ strokeLinecap: "round",
19
+ strokeLinejoin: "round",
20
+ className: "h-5 w-5 text-gray-400",
21
+ children: [
22
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
23
+ /* @__PURE__ */ jsx("path", { d: "m21 21-4.35-4.35" })
24
+ ]
25
+ }
26
+ );
27
+ var UsersIcon = () => /* @__PURE__ */ jsxs(
28
+ "svg",
29
+ {
30
+ xmlns: "http://www.w3.org/2000/svg",
31
+ viewBox: "0 0 24 24",
32
+ fill: "none",
33
+ stroke: "currentColor",
34
+ strokeWidth: "2",
35
+ strokeLinecap: "round",
36
+ strokeLinejoin: "round",
37
+ className: "h-6 w-6 text-blue-600",
38
+ children: [
39
+ /* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
40
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "7", r: "4" }),
41
+ /* @__PURE__ */ jsx("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
42
+ /* @__PURE__ */ jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
43
+ ]
44
+ }
45
+ );
46
+ var TeamSelection = ({
47
+ teams,
48
+ defaultTeamId,
49
+ onContinue,
50
+ isSubmitting = false,
51
+ logo,
52
+ brandingColors
53
+ }) => {
54
+ const [selectedTeamId, setSelectedTeamId] = useState(
55
+ defaultTeamId || teams[0]?.id || ""
56
+ );
57
+ const [searchQuery, setSearchQuery] = useState("");
58
+ const filteredTeams = teams.filter(
59
+ (team) => team.name.toLowerCase().includes(searchQuery.toLowerCase())
60
+ );
61
+ const handleContinue = async () => {
62
+ if (!selectedTeamId) return;
63
+ await onContinue(selectedTeamId);
64
+ };
65
+ return /* @__PURE__ */ jsxs("div", { className: "min-h-screen bg-gray-50", children: [
66
+ /* @__PURE__ */ jsx("header", { className: "border-b border-gray-200 bg-white px-8 py-6", children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-7xl items-center", children: logo || /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-blue-500 to-violet-500 text-lg font-semibold text-white", children: "EP" }) }) }),
67
+ /* @__PURE__ */ jsx("main", { className: "mx-auto max-w-7xl px-8 py-16", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-2xl", children: [
68
+ /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
69
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl font-semibold text-gray-900", children: "Select Team" }),
70
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-base text-gray-600", children: "Choose which team you'd like to access" })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
73
+ teams.length > 3 && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
74
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4", children: /* @__PURE__ */ jsx(SearchIcon, {}) }),
75
+ /* @__PURE__ */ jsx(
76
+ "input",
77
+ {
78
+ type: "text",
79
+ value: searchQuery,
80
+ onChange: (e) => setSearchQuery(e.target.value),
81
+ placeholder: "Search teams...",
82
+ className: "portal-input w-full py-4 pl-12 pr-4 text-base"
83
+ }
84
+ )
85
+ ] }),
86
+ /* @__PURE__ */ jsx("div", { className: "space-y-3", children: filteredTeams.map((team) => /* @__PURE__ */ jsxs(
87
+ "button",
88
+ {
89
+ type: "button",
90
+ onClick: () => setSelectedTeamId(team.id),
91
+ className: `flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${selectedTeamId === team.id ? "border-blue-500 bg-blue-50" : "border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm"}`,
92
+ children: [
93
+ /* @__PURE__ */ jsx(UsersIcon, {}),
94
+ /* @__PURE__ */ jsx("span", { className: "text-lg font-medium text-gray-900", children: team.name })
95
+ ]
96
+ },
97
+ team.id
98
+ )) }),
99
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center pt-6", children: /* @__PURE__ */ jsx(
100
+ "button",
101
+ {
102
+ type: "button",
103
+ onClick: handleContinue,
104
+ disabled: !selectedTeamId || isSubmitting,
105
+ className: "rounded-xl bg-indigo-600 px-12 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50",
106
+ children: isSubmitting ? "Loading..." : "Continue"
107
+ }
108
+ ) })
109
+ ] })
110
+ ] }) })
111
+ ] });
112
+ };
113
+ TeamSelection.displayName = "TeamSelection";
114
+
115
+ export { TeamSelection };
116
+ //# sourceMappingURL=team-selection.js.map
117
+ //# sourceMappingURL=team-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/team-selection.tsx"],"names":[],"mappings":"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","file":"team-selection.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nexport interface Team {\n id: string;\n name: string;\n}\n\nexport interface TeamSelectionProps {\n teams: Team[];\n defaultTeamId?: string;\n onContinue: (teamId: string) => void | Promise<void>;\n isSubmitting?: boolean;\n logo?: React.ReactNode;\n brandingColors?: {\n primary?: string;\n secondary?: string;\n };\n}\n\nconst SearchIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-5 w-5 text-gray-400\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n);\n\nconst UsersIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-6 w-6 text-blue-600\"\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n);\n\nexport const TeamSelection = ({\n teams,\n defaultTeamId,\n onContinue,\n isSubmitting = false,\n logo,\n brandingColors\n}: TeamSelectionProps) => {\n const [selectedTeamId, setSelectedTeamId] = useState<string>(\n defaultTeamId || teams[0]?.id || \"\"\n );\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const filteredTeams = teams.filter((team) =>\n team.name.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const handleContinue = async () => {\n if (!selectedTeamId) return;\n await onContinue(selectedTeamId);\n };\n\n return (\n <div className=\"min-h-screen bg-gray-50\">\n {/* Header */}\n <header className=\"border-b border-gray-200 bg-white px-8 py-6\">\n <div className=\"mx-auto flex max-w-7xl items-center\">\n {logo || (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-blue-500 to-violet-500 text-lg font-semibold text-white\">\n EP\n </div>\n )}\n </div>\n </header>\n\n {/* Main Content */}\n <main className=\"mx-auto max-w-7xl px-8 py-16\">\n <div className=\"mx-auto max-w-2xl\">\n <div className=\"mb-12 text-center\">\n <h1 className=\"text-4xl font-semibold text-gray-900\">Select Team</h1>\n <p className=\"mt-2 text-base text-gray-600\">\n Choose which team you'd like to access\n </p>\n </div>\n\n <div className=\"space-y-6\">\n {/* Search Input */}\n {teams.length > 3 && (\n <div className=\"relative\">\n <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4\">\n <SearchIcon />\n </div>\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search teams...\"\n className=\"portal-input w-full py-4 pl-12 pr-4 text-base\"\n />\n </div>\n )}\n\n {/* Team List */}\n <div className=\"space-y-3\">\n {filteredTeams.map((team) => (\n <button\n key={team.id}\n type=\"button\"\n onClick={() => setSelectedTeamId(team.id)}\n className={`flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${\n selectedTeamId === team.id\n ? \"border-blue-500 bg-blue-50\"\n : \"border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm\"\n }`}\n >\n <UsersIcon />\n <span className=\"text-lg font-medium text-gray-900\">{team.name}</span>\n </button>\n ))}\n </div>\n\n {/* Continue Button */}\n <div className=\"flex justify-center pt-6\">\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={!selectedTeamId || isSubmitting}\n className=\"rounded-xl bg-indigo-600 px-12 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isSubmitting ? \"Loading...\" : \"Continue\"}\n </button>\n </div>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nTeamSelection.displayName = \"TeamSelection\";\n"]}
@@ -0,0 +1,78 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+
3
+ /**
4
+ * Enterprise Portal Components
5
+ * This file is generated by tsup. Do not edit manually.
6
+ */
7
+
8
+ var UsersIcon = (props) => /* @__PURE__ */ jsxs(
9
+ "svg",
10
+ {
11
+ xmlns: "http://www.w3.org/2000/svg",
12
+ viewBox: "0 0 24 24",
13
+ fill: "none",
14
+ stroke: "currentColor",
15
+ strokeWidth: 1.5,
16
+ "aria-hidden": "true",
17
+ ...props,
18
+ children: [
19
+ /* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
20
+ /* @__PURE__ */ jsx("circle", { cx: 10, cy: 8, r: 4 }),
21
+ /* @__PURE__ */ jsx("path", { d: "M20 21v-2a4 4 0 0 0-3-3.87" }),
22
+ /* @__PURE__ */ jsx("path", { d: "M17 3a4 4 0 0 1 0 8" })
23
+ ]
24
+ }
25
+ );
26
+ var KeyIcon = (props) => /* @__PURE__ */ jsxs(
27
+ "svg",
28
+ {
29
+ xmlns: "http://www.w3.org/2000/svg",
30
+ viewBox: "0 0 24 24",
31
+ fill: "none",
32
+ stroke: "currentColor",
33
+ strokeWidth: 1.5,
34
+ "aria-hidden": "true",
35
+ ...props,
36
+ children: [
37
+ /* @__PURE__ */ jsx("circle", { cx: 7, cy: 15, r: 4 }),
38
+ /* @__PURE__ */ jsx("path", { d: "m10.85 12.15 4.3-4.3a2 2 0 0 1 2.83 0l.47.47a2 2 0 0 1 0 2.83l-4.3 4.3" }),
39
+ /* @__PURE__ */ jsx("path", { d: "M16 11l1.5 1.5" })
40
+ ]
41
+ }
42
+ );
43
+ 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)]";
44
+ var headingClass = "text-lg font-semibold text-gray-900";
45
+ var contentClass = "mt-4 flex-1 space-y-3";
46
+ var itemClass = "flex items-center gap-3 text-sm text-gray-600";
47
+ var iconClass = "h-5 w-5 text-gray-500";
48
+ var footerClass = "mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80";
49
+ var TeamSettingsCard = ({
50
+ userCount = 0,
51
+ serviceAccountCount = 0
52
+ }) => /* @__PURE__ */ jsxs("section", { className: baseCardClass, "aria-labelledby": "team-settings-card-heading", children: [
53
+ /* @__PURE__ */ jsx("header", { children: /* @__PURE__ */ jsx("h2", { id: "team-settings-card-heading", className: headingClass, children: "Team Settings" }) }),
54
+ /* @__PURE__ */ jsxs("div", { className: contentClass, children: [
55
+ /* @__PURE__ */ jsxs("div", { className: itemClass, children: [
56
+ /* @__PURE__ */ jsx(UsersIcon, { className: iconClass }),
57
+ /* @__PURE__ */ jsxs("span", { children: [
58
+ userCount,
59
+ " Team ",
60
+ userCount === 1 ? "Member" : "Members"
61
+ ] })
62
+ ] }),
63
+ /* @__PURE__ */ jsxs("div", { className: itemClass, children: [
64
+ /* @__PURE__ */ jsx(KeyIcon, { className: iconClass }),
65
+ /* @__PURE__ */ jsxs("span", { children: [
66
+ serviceAccountCount,
67
+ " Service ",
68
+ serviceAccountCount === 1 ? "Account" : "Accounts"
69
+ ] })
70
+ ] })
71
+ ] }),
72
+ /* @__PURE__ */ jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsx("a", { href: "/team-settings", children: "View team settings \u2192" }) })
73
+ ] });
74
+ TeamSettingsCard.displayName = "TeamSettingsCard";
75
+
76
+ export { TeamSettingsCard };
77
+ //# sourceMappingURL=team-settings-card.js.map
78
+ //# sourceMappingURL=team-settings-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/team-settings-card.tsx"],"names":[],"mappings":"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","file":"team-settings-card.js","sourcesContent":["import type { SVGProps } from \"react\";\n\nconst UsersIcon = (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=\"M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\n <circle cx={10} cy={8} r={4} />\n <path d=\"M20 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M17 3a4 4 0 0 1 0 8\" />\n </svg>\n);\n\nconst KeyIcon = (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={7} cy={15} r={4} />\n <path d=\"m10.85 12.15 4.3-4.3a2 2 0 0 1 2.83 0l.47.47a2 2 0 0 1 0 2.83l-4.3 4.3\" />\n <path d=\"M16 11l1.5 1.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 TeamSettingsCardProps {\n /** Number of team members */\n userCount?: number;\n /** Number of service accounts */\n serviceAccountCount?: number;\n}\n\nexport const TeamSettingsCard = ({\n userCount = 0,\n serviceAccountCount = 0\n}: TeamSettingsCardProps) => (\n <section className={baseCardClass} aria-labelledby=\"team-settings-card-heading\">\n <header>\n <h2 id=\"team-settings-card-heading\" className={headingClass}>\n Team Settings\n </h2>\n </header>\n <div className={contentClass}>\n <div className={itemClass}>\n <UsersIcon className={iconClass} />\n <span>\n {userCount} Team {userCount === 1 ? \"Member\" : \"Members\"}\n </span>\n </div>\n <div className={itemClass}>\n <KeyIcon className={iconClass} />\n <span>\n {serviceAccountCount} Service {serviceAccountCount === 1 ? \"Account\" : \"Accounts\"}\n </span>\n </div>\n </div>\n <footer className={footerClass}>\n <a href=\"/team-settings\">View team settings →</a>\n </footer>\n </section>\n);\n\nTeamSettingsCard.displayName = \"TeamSettingsCard\";\n"]}
@@ -0,0 +1,136 @@
1
+ "use client";
2
+ import { useState } from 'react';
3
+ import { useRouter, usePathname } from 'next/navigation';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ /**
7
+ * Enterprise Portal Components
8
+ * This file is generated by tsup. Do not edit manually.
9
+ */
10
+
11
+ var mockUsers = [
12
+ {
13
+ email: "marc.e.campbell@gmail.com",
14
+ isCurrentUser: true,
15
+ firstAccessed: "Dec 2, 2025 8:44 PM",
16
+ lastAccessed: "Nov 17, 2025 10:23 PM",
17
+ views: 1266
18
+ }
19
+ ];
20
+ var mockServiceAccounts = [
21
+ {
22
+ name: "CI/CD Pipeline",
23
+ createdAt: "Nov 15, 2025 3:20 PM",
24
+ lastUsed: "Dec 2, 2025 5:30 AM",
25
+ status: "active"
26
+ },
27
+ {
28
+ name: "Monitoring Service",
29
+ createdAt: "Oct 10, 2025 9:15 AM",
30
+ lastUsed: null,
31
+ status: "revoked"
32
+ }
33
+ ];
34
+ var TeamSettings = ({
35
+ users = mockUsers,
36
+ serviceAccounts = mockServiceAccounts
37
+ }) => {
38
+ const router = useRouter();
39
+ const pathname = usePathname();
40
+ const isUsersTab = !pathname.includes("/service-accounts");
41
+ const [activeTab, setActiveTab] = useState(
42
+ isUsersTab ? "users" : "service-accounts"
43
+ );
44
+ const handleTabChange = (tab) => {
45
+ setActiveTab(tab);
46
+ const basePath = pathname.split("/team-settings")[0];
47
+ const newPath = tab === "users" ? `${basePath}/team-settings/users` : `${basePath}/team-settings/service-accounts`;
48
+ router.push(newPath);
49
+ };
50
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-8", children: [
51
+ /* @__PURE__ */ jsx("header", { children: /* @__PURE__ */ jsx("h1", { className: "text-4xl font-semibold text-gray-900", children: "Team Settings" }) }),
52
+ /* @__PURE__ */ jsx("div", { className: "border-b border-gray-200", children: /* @__PURE__ */ jsxs("nav", { className: "flex gap-8", children: [
53
+ /* @__PURE__ */ jsx(
54
+ "button",
55
+ {
56
+ type: "button",
57
+ onClick: () => handleTabChange("users"),
58
+ className: `pb-4 text-base font-medium transition ${activeTab === "users" ? "border-b-2 border-gray-900 text-gray-900" : "text-gray-500 hover:text-gray-700"}`,
59
+ children: "Users"
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsx(
63
+ "button",
64
+ {
65
+ type: "button",
66
+ onClick: () => handleTabChange("service-accounts"),
67
+ className: `pb-4 text-base font-medium transition ${activeTab === "service-accounts" ? "border-b-2 border-gray-900 text-gray-900" : "text-gray-500 hover:text-gray-700"}`,
68
+ children: "Service Accounts"
69
+ }
70
+ )
71
+ ] }) }),
72
+ activeTab === "users" ? /* @__PURE__ */ jsx(TeamUsers, { users }) : /* @__PURE__ */ jsx(TeamServiceAccounts, { serviceAccounts })
73
+ ] });
74
+ };
75
+ TeamSettings.displayName = "TeamSettings";
76
+ var TeamUsers = ({ users }) => /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
77
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
78
+ /* @__PURE__ */ jsx("p", { className: "text-base text-gray-600", children: "Manage users with access to your Enterprise Portal" }),
79
+ /* @__PURE__ */ jsx(
80
+ "button",
81
+ {
82
+ type: "button",
83
+ className: "rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700",
84
+ children: "Invite user"
85
+ }
86
+ )
87
+ ] }),
88
+ /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg border border-gray-200 bg-white", children: /* @__PURE__ */ jsxs("table", { className: "w-full", children: [
89
+ /* @__PURE__ */ jsx("thead", { className: "bg-gray-50", children: /* @__PURE__ */ jsxs("tr", { children: [
90
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Email" }),
91
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "First Accessed" }),
92
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Last Accessed" }),
93
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Views" })
94
+ ] }) }),
95
+ /* @__PURE__ */ jsx("tbody", { className: "divide-y divide-gray-200", children: users.map((user) => /* @__PURE__ */ jsxs("tr", { className: "hover:bg-gray-50", children: [
96
+ /* @__PURE__ */ jsxs("td", { className: "px-6 py-4 text-sm text-gray-900", children: [
97
+ user.email,
98
+ user.isCurrentUser && /* @__PURE__ */ jsx("span", { className: "ml-2 text-gray-500", children: "(You)" })
99
+ ] }),
100
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.firstAccessed }),
101
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.lastAccessed }),
102
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.views })
103
+ ] }, user.email)) })
104
+ ] }) })
105
+ ] });
106
+ var TeamServiceAccounts = ({ serviceAccounts }) => /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
107
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
108
+ /* @__PURE__ */ jsx("p", { className: "text-base text-gray-600", children: "Manage service accounts for automated access to your Enterprise Portal" }),
109
+ /* @__PURE__ */ jsx(
110
+ "button",
111
+ {
112
+ type: "button",
113
+ className: "rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700",
114
+ children: "Create service account"
115
+ }
116
+ )
117
+ ] }),
118
+ /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg border border-gray-200 bg-white", children: /* @__PURE__ */ jsxs("table", { className: "w-full", children: [
119
+ /* @__PURE__ */ jsx("thead", { className: "bg-gray-50", children: /* @__PURE__ */ jsxs("tr", { children: [
120
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Name" }),
121
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Created" }),
122
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Last Used" }),
123
+ /* @__PURE__ */ jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Status" })
124
+ ] }) }),
125
+ /* @__PURE__ */ jsx("tbody", { className: "divide-y divide-gray-200", children: serviceAccounts.map((account) => /* @__PURE__ */ jsxs("tr", { className: "hover:bg-gray-50", children: [
126
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm font-medium text-gray-900", children: account.name }),
127
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: account.createdAt }),
128
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: account.lastUsed || "Never" }),
129
+ /* @__PURE__ */ jsx("td", { className: "px-6 py-4 text-sm", children: account.status === "active" ? /* @__PURE__ */ jsx("span", { className: "inline-flex rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-800", children: "Active" }) : /* @__PURE__ */ jsx("span", { className: "inline-flex rounded-full bg-gray-100 px-2 py-1 text-xs font-medium text-gray-800", children: "Revoked" }) })
130
+ ] }, account.name)) })
131
+ ] }) })
132
+ ] });
133
+
134
+ export { TeamSettings };
135
+ //# sourceMappingURL=team-settings.js.map
136
+ //# sourceMappingURL=team-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/team-settings.tsx"],"names":[],"mappings":"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","file":"team-settings.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { useRouter, usePathname } from \"next/navigation\";\n\ninterface TeamUser {\n email: string;\n isCurrentUser: boolean;\n firstAccessed: string;\n lastAccessed: string;\n views: number;\n}\n\ninterface ServiceAccount {\n name: string;\n createdAt: string;\n lastUsed: string | null;\n status: \"active\" | \"revoked\";\n}\n\nexport interface TeamSettingsProps {\n users?: TeamUser[];\n serviceAccounts?: ServiceAccount[];\n}\n\nconst mockUsers: TeamUser[] = [\n {\n email: \"marc.e.campbell@gmail.com\",\n isCurrentUser: true,\n firstAccessed: \"Dec 2, 2025 8:44 PM\",\n lastAccessed: \"Nov 17, 2025 10:23 PM\",\n views: 1266\n }\n];\n\nconst mockServiceAccounts: ServiceAccount[] = [\n {\n name: \"CI/CD Pipeline\",\n createdAt: \"Nov 15, 2025 3:20 PM\",\n lastUsed: \"Dec 2, 2025 5:30 AM\",\n status: \"active\"\n },\n {\n name: \"Monitoring Service\",\n createdAt: \"Oct 10, 2025 9:15 AM\",\n lastUsed: null,\n status: \"revoked\"\n }\n];\n\nexport const TeamSettings = ({ \n users = mockUsers, \n serviceAccounts = mockServiceAccounts \n}: TeamSettingsProps) => {\n const router = useRouter();\n const pathname = usePathname();\n \n // Determine active tab from URL\n const isUsersTab = !pathname.includes(\"/service-accounts\");\n const [activeTab, setActiveTab] = useState<\"users\" | \"service-accounts\">(\n isUsersTab ? \"users\" : \"service-accounts\"\n );\n\n const handleTabChange = (tab: \"users\" | \"service-accounts\") => {\n setActiveTab(tab);\n const basePath = pathname.split(\"/team-settings\")[0];\n const newPath = tab === \"users\" \n ? `${basePath}/team-settings/users`\n : `${basePath}/team-settings/service-accounts`;\n router.push(newPath);\n };\n\n return (\n <div className=\"space-y-8\">\n <header>\n <h1 className=\"text-4xl font-semibold text-gray-900\">Team Settings</h1>\n </header>\n\n {/* Tabs */}\n <div className=\"border-b border-gray-200\">\n <nav className=\"flex gap-8\">\n <button\n type=\"button\"\n onClick={() => handleTabChange(\"users\")}\n className={`pb-4 text-base font-medium transition ${\n activeTab === \"users\"\n ? \"border-b-2 border-gray-900 text-gray-900\"\n : \"text-gray-500 hover:text-gray-700\"\n }`}\n >\n Users\n </button>\n <button\n type=\"button\"\n onClick={() => handleTabChange(\"service-accounts\")}\n className={`pb-4 text-base font-medium transition ${\n activeTab === \"service-accounts\"\n ? \"border-b-2 border-gray-900 text-gray-900\"\n : \"text-gray-500 hover:text-gray-700\"\n }`}\n >\n Service Accounts\n </button>\n </nav>\n </div>\n\n {/* Content */}\n {activeTab === \"users\" ? (\n <TeamUsers users={users} />\n ) : (\n <TeamServiceAccounts serviceAccounts={serviceAccounts} />\n )}\n </div>\n );\n};\n\nTeamSettings.displayName = \"TeamSettings\";\n\nconst TeamUsers = ({ users }: { users: TeamUser[] }) => (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-base text-gray-600\">\n Manage users with access to your Enterprise Portal\n </p>\n <button\n type=\"button\"\n className=\"rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700\"\n >\n Invite user\n </button>\n </div>\n\n <div className=\"overflow-hidden rounded-lg border border-gray-200 bg-white\">\n <table className=\"w-full\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Email\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n First Accessed\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Last Accessed\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Views\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200\">\n {users.map((user) => (\n <tr key={user.email} className=\"hover:bg-gray-50\">\n <td className=\"px-6 py-4 text-sm text-gray-900\">\n {user.email}\n {user.isCurrentUser && (\n <span className=\"ml-2 text-gray-500\">(You)</span>\n )}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.firstAccessed}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.lastAccessed}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.views}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n);\n\nconst TeamServiceAccounts = ({ serviceAccounts }: { serviceAccounts: ServiceAccount[] }) => (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-base text-gray-600\">\n Manage service accounts for automated access to your Enterprise Portal\n </p>\n <button\n type=\"button\"\n className=\"rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700\"\n >\n Create service account\n </button>\n </div>\n\n <div className=\"overflow-hidden rounded-lg border border-gray-200 bg-white\">\n <table className=\"w-full\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Name\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Created\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Last Used\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Status\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200\">\n {serviceAccounts.map((account) => (\n <tr key={account.name} className=\"hover:bg-gray-50\">\n <td className=\"px-6 py-4 text-sm font-medium text-gray-900\">\n {account.name}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {account.createdAt}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {account.lastUsed || \"Never\"}\n </td>\n <td className=\"px-6 py-4 text-sm\">\n {account.status === \"active\" ? (\n <span className=\"inline-flex rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-800\">\n Active\n </span>\n ) : (\n <span className=\"inline-flex rounded-full bg-gray-100 px-2 py-1 text-xs font-medium text-gray-800\">\n Revoked\n </span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n);\n"]}
@@ -0,0 +1,173 @@
1
+ "use client";
2
+ import { useState } from 'react';
3
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
4
+
5
+ /**
6
+ * Enterprise Portal Components
7
+ * This file is generated by tsup. Do not edit manually.
8
+ */
9
+
10
+ var TopNavChangeTeamButton = ({
11
+ displayLabel,
12
+ customers = [],
13
+ currentCustomerId,
14
+ onChangeTeam
15
+ }) => {
16
+ const [showChangeTeamModal, setShowChangeTeamModal] = useState(false);
17
+ const [selectedTeamId, setSelectedTeamId] = useState(currentCustomerId || "");
18
+ const [searchQuery, setSearchQuery] = useState("");
19
+ const [isChanging, setIsChanging] = useState(false);
20
+ const filteredCustomers = customers.filter(
21
+ (customer) => customer.name.toLowerCase().includes(searchQuery.toLowerCase())
22
+ );
23
+ const handleChangeTeam = async () => {
24
+ if (!selectedTeamId || !onChangeTeam) return;
25
+ setIsChanging(true);
26
+ try {
27
+ await onChangeTeam(selectedTeamId);
28
+ setShowChangeTeamModal(false);
29
+ window.location.href = "/";
30
+ } catch (error) {
31
+ console.error("[top-nav-user-menu] Failed to change team:", error);
32
+ setIsChanging(false);
33
+ }
34
+ };
35
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ /* @__PURE__ */ jsx(
37
+ "button",
38
+ {
39
+ type: "button",
40
+ onClick: () => setShowChangeTeamModal(true),
41
+ className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
42
+ children: "Change team"
43
+ }
44
+ ),
45
+ showChangeTeamModal && /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-2xl rounded-3xl bg-white p-8 shadow-xl", children: [
46
+ /* @__PURE__ */ jsxs("div", { className: "mb-6 flex items-center justify-between", children: [
47
+ /* @__PURE__ */ jsx("h2", { className: "text-3xl font-semibold text-gray-900", children: "Change team" }),
48
+ /* @__PURE__ */ jsx(
49
+ "button",
50
+ {
51
+ type: "button",
52
+ onClick: () => setShowChangeTeamModal(false),
53
+ className: "text-gray-400 hover:text-gray-600",
54
+ children: /* @__PURE__ */ jsxs(
55
+ "svg",
56
+ {
57
+ xmlns: "http://www.w3.org/2000/svg",
58
+ width: "24",
59
+ height: "24",
60
+ viewBox: "0 0 24 24",
61
+ fill: "none",
62
+ stroke: "currentColor",
63
+ strokeWidth: "2",
64
+ strokeLinecap: "round",
65
+ strokeLinejoin: "round",
66
+ children: [
67
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
68
+ /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
69
+ ]
70
+ }
71
+ )
72
+ }
73
+ )
74
+ ] }),
75
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
76
+ customers.length > 3 && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
77
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4", children: /* @__PURE__ */ jsxs(
78
+ "svg",
79
+ {
80
+ xmlns: "http://www.w3.org/2000/svg",
81
+ width: "20",
82
+ height: "20",
83
+ viewBox: "0 0 24 24",
84
+ fill: "none",
85
+ stroke: "currentColor",
86
+ strokeWidth: "2",
87
+ strokeLinecap: "round",
88
+ strokeLinejoin: "round",
89
+ className: "text-gray-400",
90
+ children: [
91
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
92
+ /* @__PURE__ */ jsx("path", { d: "m21 21-4.35-4.35" })
93
+ ]
94
+ }
95
+ ) }),
96
+ /* @__PURE__ */ jsx(
97
+ "input",
98
+ {
99
+ type: "text",
100
+ value: searchQuery,
101
+ onChange: (e) => setSearchQuery(e.target.value),
102
+ placeholder: "Search teams...",
103
+ className: "portal-input w-full py-4 pl-12 pr-4 text-base"
104
+ }
105
+ )
106
+ ] }),
107
+ /* @__PURE__ */ jsxs("div", { children: [
108
+ /* @__PURE__ */ jsx("p", { className: "mb-4 text-sm text-gray-600", children: "autoci stable" }),
109
+ /* @__PURE__ */ jsx("div", { className: "space-y-3", children: filteredCustomers.map((customer) => /* @__PURE__ */ jsxs(
110
+ "button",
111
+ {
112
+ type: "button",
113
+ onClick: () => setSelectedTeamId(customer.id),
114
+ className: `flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${selectedTeamId === customer.id ? "border-blue-500 bg-blue-50" : "border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm"}`,
115
+ children: [
116
+ /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-blue-100", children: /* @__PURE__ */ jsxs(
117
+ "svg",
118
+ {
119
+ xmlns: "http://www.w3.org/2000/svg",
120
+ width: "24",
121
+ height: "24",
122
+ viewBox: "0 0 24 24",
123
+ fill: "none",
124
+ stroke: "currentColor",
125
+ strokeWidth: "2",
126
+ strokeLinecap: "round",
127
+ strokeLinejoin: "round",
128
+ className: "text-blue-600",
129
+ children: [
130
+ /* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
131
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "7", r: "4" }),
132
+ /* @__PURE__ */ jsx("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
133
+ /* @__PURE__ */ jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
134
+ ]
135
+ }
136
+ ) }),
137
+ /* @__PURE__ */ jsx("span", { className: "text-lg font-medium text-gray-900", children: customer.name })
138
+ ]
139
+ },
140
+ customer.id
141
+ )) })
142
+ ] }),
143
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-3 pt-4", children: [
144
+ /* @__PURE__ */ jsx(
145
+ "button",
146
+ {
147
+ type: "button",
148
+ onClick: () => setShowChangeTeamModal(false),
149
+ className: "rounded-xl border border-gray-300 px-6 py-3 text-base font-semibold text-gray-700 transition hover:bg-gray-50",
150
+ disabled: isChanging,
151
+ children: "Cancel"
152
+ }
153
+ ),
154
+ /* @__PURE__ */ jsx(
155
+ "button",
156
+ {
157
+ type: "button",
158
+ onClick: handleChangeTeam,
159
+ disabled: !selectedTeamId || isChanging || selectedTeamId === currentCustomerId,
160
+ className: "rounded-xl bg-indigo-600 px-6 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50",
161
+ children: isChanging ? "Changing..." : "Change team"
162
+ }
163
+ )
164
+ ] })
165
+ ] })
166
+ ] }) })
167
+ ] });
168
+ };
169
+ TopNavChangeTeamButton.displayName = "TopNavChangeTeamButton";
170
+
171
+ export { TopNavChangeTeamButton };
172
+ //# sourceMappingURL=top-nav-user-menu.js.map
173
+ //# sourceMappingURL=top-nav-user-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/top-nav-user-menu.tsx"],"names":[],"mappings":"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","file":"top-nav-user-menu.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nexport interface Customer {\n id: string;\n name: string;\n}\n\nexport interface TopNavChangeTeamButtonProps {\n displayLabel: string;\n customers?: Customer[];\n currentCustomerId?: string;\n onChangeTeam?: (customerId: string) => Promise<void>;\n}\n\nexport const TopNavChangeTeamButton = ({\n displayLabel,\n customers = [],\n currentCustomerId,\n onChangeTeam\n}: TopNavChangeTeamButtonProps) => {\n const [showChangeTeamModal, setShowChangeTeamModal] = useState(false);\n const [selectedTeamId, setSelectedTeamId] = useState(currentCustomerId || \"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isChanging, setIsChanging] = useState(false);\n\n const filteredCustomers = customers.filter((customer) =>\n customer.name.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const handleChangeTeam = async () => {\n if (!selectedTeamId || !onChangeTeam) return;\n \n setIsChanging(true);\n try {\n await onChangeTeam(selectedTeamId);\n setShowChangeTeamModal(false);\n // Force a full page reload to ensure new JWT is used everywhere\n window.location.href = \"/\";\n } catch (error) {\n console.error(\"[top-nav-user-menu] Failed to change team:\", error);\n setIsChanging(false);\n }\n };\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(true)}\n className=\"block w-full px-4 py-2 text-left hover:bg-gray-100\"\n >\n Change team\n </button>\n\n {/* Change Team Modal */}\n {showChangeTeamModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\">\n <div className=\"w-full max-w-2xl rounded-3xl bg-white p-8 shadow-xl\">\n <div className=\"mb-6 flex items-center justify-between\">\n <h2 className=\"text-3xl font-semibold text-gray-900\">Change team</h2>\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(false)}\n className=\"text-gray-400 hover:text-gray-600\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div className=\"space-y-6\">\n {customers.length > 3 && (\n <div className=\"relative\">\n <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-gray-400\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n </div>\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search teams...\"\n className=\"portal-input w-full py-4 pl-12 pr-4 text-base\"\n />\n </div>\n )}\n\n <div>\n <p className=\"mb-4 text-sm text-gray-600\">autoci stable</p>\n <div className=\"space-y-3\">\n {filteredCustomers.map((customer) => (\n <button\n key={customer.id}\n type=\"button\"\n onClick={() => setSelectedTeamId(customer.id)}\n className={`flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${\n selectedTeamId === customer.id\n ? \"border-blue-500 bg-blue-50\"\n : \"border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm\"\n }`}\n >\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-blue-100\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-blue-600\"\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"9\" cy=\"7\" r=\"4\"></circle>\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\"></path>\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>\n </svg>\n </div>\n <span className=\"text-lg font-medium text-gray-900\">{customer.name}</span>\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 pt-4\">\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(false)}\n className=\"rounded-xl border border-gray-300 px-6 py-3 text-base font-semibold text-gray-700 transition hover:bg-gray-50\"\n disabled={isChanging}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleChangeTeam}\n disabled={!selectedTeamId || isChanging || selectedTeamId === currentCustomerId}\n className=\"rounded-xl bg-indigo-600 px-6 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isChanging ? \"Changing...\" : \"Change team\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nTopNavChangeTeamButton.displayName = \"TopNavChangeTeamButton\";\n"]}