@replicated/portal-components 0.0.24 → 0.0.26

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 (180) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/dist/actions/branding-actions.js +6 -4
  4. package/dist/actions/branding-actions.js.map +1 -1
  5. package/dist/actions/change-team.js +1 -0
  6. package/dist/actions/change-team.js.map +1 -1
  7. package/dist/actions/index.d.mts +1 -1
  8. package/dist/actions/index.d.ts +1 -1
  9. package/dist/actions/index.js +1 -53
  10. package/dist/actions/index.js.map +1 -1
  11. package/dist/actions/install-actions.d.mts +1 -1
  12. package/dist/actions/install-actions.d.ts +1 -1
  13. package/dist/actions/install-actions.js +1 -0
  14. package/dist/actions/install-actions.js.map +1 -1
  15. package/dist/actions/invite-actions.js +6 -5
  16. package/dist/actions/invite-actions.js.map +1 -1
  17. package/dist/actions/magic-link-actions.js +6 -5
  18. package/dist/actions/magic-link-actions.js.map +1 -1
  19. package/dist/actions/service-account.d.mts +1 -1
  20. package/dist/actions/service-account.d.ts +1 -1
  21. package/dist/actions/service-account.js +1 -0
  22. package/dist/actions/service-account.js.map +1 -1
  23. package/dist/actions/support-bundles.d.mts +1 -1
  24. package/dist/actions/support-bundles.d.ts +1 -1
  25. package/dist/actions/support-bundles.js +1 -50
  26. package/dist/actions/support-bundles.js.map +1 -1
  27. package/dist/actions/team-settings.d.mts +1 -1
  28. package/dist/actions/team-settings.d.ts +1 -1
  29. package/dist/actions/team-settings.js +1 -0
  30. package/dist/actions/team-settings.js.map +1 -1
  31. package/dist/actions/trial-signup-actions.js +6 -5
  32. package/dist/actions/trial-signup-actions.js.map +1 -1
  33. package/dist/actions/trial-signup.js +6 -5
  34. package/dist/actions/trial-signup.js.map +1 -1
  35. package/dist/actions/user-settings.d.mts +1 -1
  36. package/dist/actions/user-settings.d.ts +1 -1
  37. package/dist/actions/user-settings.js +1 -0
  38. package/dist/actions/user-settings.js.map +1 -1
  39. package/dist/airgap-instances.d.mts +1 -1
  40. package/dist/airgap-instances.d.ts +1 -1
  41. package/dist/airgap-instances.js +25 -25
  42. package/dist/airgap-instances.js.map +1 -1
  43. package/dist/{saml-handlers.d.mts → api/saml.d.mts} +2 -2
  44. package/dist/{saml-handlers.d.ts → api/saml.d.ts} +2 -2
  45. package/dist/{saml-handlers.js → api/saml.js} +4 -3
  46. package/dist/api/saml.js.map +1 -0
  47. package/dist/api/support-bundles.d.mts +22 -0
  48. package/dist/api/support-bundles.d.ts +22 -0
  49. package/dist/api/support-bundles.js +245 -0
  50. package/dist/api/support-bundles.js.map +1 -0
  51. package/dist/{branding-BsMSywts.d.mts → branding-DmsrDTNE.d.mts} +2 -1
  52. package/dist/{branding-BsMSywts.d.ts → branding-DmsrDTNE.d.ts} +2 -1
  53. package/dist/esm/actions/branding-actions.js +6 -4
  54. package/dist/esm/actions/branding-actions.js.map +1 -1
  55. package/dist/esm/actions/change-team.js +1 -0
  56. package/dist/esm/actions/change-team.js.map +1 -1
  57. package/dist/esm/actions/index.js +2 -53
  58. package/dist/esm/actions/index.js.map +1 -1
  59. package/dist/esm/actions/install-actions.js +1 -0
  60. package/dist/esm/actions/install-actions.js.map +1 -1
  61. package/dist/esm/actions/invite-actions.js +6 -5
  62. package/dist/esm/actions/invite-actions.js.map +1 -1
  63. package/dist/esm/actions/magic-link-actions.js +6 -5
  64. package/dist/esm/actions/magic-link-actions.js.map +1 -1
  65. package/dist/esm/actions/service-account.js +1 -0
  66. package/dist/esm/actions/service-account.js.map +1 -1
  67. package/dist/esm/actions/support-bundles.js +2 -50
  68. package/dist/esm/actions/support-bundles.js.map +1 -1
  69. package/dist/esm/actions/team-settings.js +1 -0
  70. package/dist/esm/actions/team-settings.js.map +1 -1
  71. package/dist/esm/actions/trial-signup-actions.js +6 -5
  72. package/dist/esm/actions/trial-signup-actions.js.map +1 -1
  73. package/dist/esm/actions/trial-signup.js +6 -5
  74. package/dist/esm/actions/trial-signup.js.map +1 -1
  75. package/dist/esm/actions/user-settings.js +1 -0
  76. package/dist/esm/actions/user-settings.js.map +1 -1
  77. package/dist/esm/airgap-instances.js +25 -25
  78. package/dist/esm/airgap-instances.js.map +1 -1
  79. package/dist/esm/{saml-handlers.js → api/saml.js} +4 -3
  80. package/dist/esm/api/saml.js.map +1 -0
  81. package/dist/esm/api/support-bundles.js +243 -0
  82. package/dist/esm/api/support-bundles.js.map +1 -0
  83. package/dist/esm/helm-install-wizard.js +1 -0
  84. package/dist/esm/helm-install-wizard.js.map +1 -1
  85. package/dist/esm/index.js +262 -220
  86. package/dist/esm/index.js.map +1 -1
  87. package/dist/esm/install-actions.js +1 -0
  88. package/dist/esm/install-actions.js.map +1 -1
  89. package/dist/esm/instance-card.js +25 -25
  90. package/dist/esm/instance-card.js.map +1 -1
  91. package/dist/esm/license-details.js +1 -0
  92. package/dist/esm/license-details.js.map +1 -1
  93. package/dist/esm/linux-install-wizard.js +1 -0
  94. package/dist/esm/linux-install-wizard.js.map +1 -1
  95. package/dist/esm/logout-action.js +1 -1
  96. package/dist/esm/logout-action.js.map +1 -1
  97. package/dist/esm/logout-button.js +5 -7
  98. package/dist/esm/logout-button.js.map +1 -1
  99. package/dist/esm/online-instance-list.js +25 -25
  100. package/dist/esm/online-instance-list.js.map +1 -1
  101. package/dist/esm/saml-callback-client.js.map +1 -1
  102. package/dist/esm/support-card.js +1 -0
  103. package/dist/esm/support-card.js.map +1 -1
  104. package/dist/esm/top-nav.js +82 -79
  105. package/dist/esm/top-nav.js.map +1 -1
  106. package/dist/esm/update-layout.js +82 -79
  107. package/dist/esm/update-layout.js.map +1 -1
  108. package/dist/esm/upload-support-bundle-modal.js +46 -16
  109. package/dist/esm/upload-support-bundle-modal.js.map +1 -1
  110. package/dist/esm/utils/index.js +48 -6
  111. package/dist/esm/utils/index.js.map +1 -1
  112. package/dist/helm-install-wizard.d.mts +2 -2
  113. package/dist/helm-install-wizard.d.ts +2 -2
  114. package/dist/helm-install-wizard.js +1 -0
  115. package/dist/helm-install-wizard.js.map +1 -1
  116. package/dist/{index-DXy7RxOX.d.ts → index-Bcp17Mf3.d.ts} +1 -16
  117. package/dist/{index-JX9-CIMA.d.mts → index-DaH1bSuO.d.mts} +1 -16
  118. package/dist/index.d.mts +6 -5
  119. package/dist/index.d.ts +6 -5
  120. package/dist/index.js +262 -220
  121. package/dist/index.js.map +1 -1
  122. package/dist/install-actions.d.mts +2 -2
  123. package/dist/install-actions.d.ts +2 -2
  124. package/dist/install-actions.js +1 -0
  125. package/dist/install-actions.js.map +1 -1
  126. package/dist/instance-card.d.mts +1 -1
  127. package/dist/instance-card.d.ts +1 -1
  128. package/dist/instance-card.js +25 -25
  129. package/dist/instance-card.js.map +1 -1
  130. package/dist/license-details.js +1 -0
  131. package/dist/license-details.js.map +1 -1
  132. package/dist/linux-install-wizard.d.mts +2 -2
  133. package/dist/linux-install-wizard.d.ts +2 -2
  134. package/dist/linux-install-wizard.js +1 -0
  135. package/dist/linux-install-wizard.js.map +1 -1
  136. package/dist/logout-action.d.mts +1 -1
  137. package/dist/logout-action.d.ts +1 -1
  138. package/dist/logout-action.js +1 -1
  139. package/dist/logout-action.js.map +1 -1
  140. package/dist/logout-button.d.mts +1 -1
  141. package/dist/logout-button.d.ts +1 -1
  142. package/dist/logout-button.js +5 -7
  143. package/dist/logout-button.js.map +1 -1
  144. package/dist/online-instance-list.d.mts +1 -1
  145. package/dist/online-instance-list.d.ts +1 -1
  146. package/dist/online-instance-list.js +25 -25
  147. package/dist/online-instance-list.js.map +1 -1
  148. package/dist/pending-installations.d.mts +1 -1
  149. package/dist/pending-installations.d.ts +1 -1
  150. package/dist/saml-callback-client.d.mts +1 -1
  151. package/dist/saml-callback-client.d.ts +1 -1
  152. package/dist/saml-callback-client.js.map +1 -1
  153. package/dist/security-card.d.mts +1 -1
  154. package/dist/security-card.d.ts +1 -1
  155. package/dist/styles.css +4 -0
  156. package/dist/support-bundles-card.d.mts +1 -1
  157. package/dist/support-bundles-card.d.ts +1 -1
  158. package/dist/support-card.js +1 -0
  159. package/dist/support-card.js.map +1 -1
  160. package/dist/{top-nav-CEqw0KpO.d.ts → top-nav-8f2U69MF.d.ts} +1 -1
  161. package/dist/{top-nav-BUQAGoG1.d.mts → top-nav-B2yA3PC7.d.mts} +1 -1
  162. package/dist/top-nav.d.mts +2 -2
  163. package/dist/top-nav.d.ts +2 -2
  164. package/dist/top-nav.js +82 -79
  165. package/dist/top-nav.js.map +1 -1
  166. package/dist/update-layout.js +82 -79
  167. package/dist/update-layout.js.map +1 -1
  168. package/dist/upload-support-bundle-modal.d.mts +9 -9
  169. package/dist/upload-support-bundle-modal.d.ts +9 -9
  170. package/dist/upload-support-bundle-modal.js +46 -16
  171. package/dist/upload-support-bundle-modal.js.map +1 -1
  172. package/dist/upload-with-progress-D760HthX.d.mts +35 -0
  173. package/dist/upload-with-progress-D760HthX.d.ts +35 -0
  174. package/dist/utils/index.d.mts +4 -18
  175. package/dist/utils/index.d.ts +4 -18
  176. package/dist/utils/index.js +48 -6
  177. package/dist/utils/index.js.map +1 -1
  178. package/package.json +16 -6
  179. package/dist/esm/saml-handlers.js.map +0 -1
  180. package/dist/saml-handlers.js.map +0 -1
@@ -86,85 +86,6 @@ async function handleServerError(statusCode) {
86
86
  return redirect(`/error?${params.toString()}`);
87
87
  }
88
88
 
89
- // src/utils/constants.ts
90
- var DEFAULT_PRIMARY_COLOR = "#4f46e5";
91
- var DEFAULT_SECONDARY_COLOR = "#6366f1";
92
-
93
- // src/utils/branding.ts
94
- var normalizeColor = (color) => {
95
- if (!color || typeof color !== "string") {
96
- return void 0;
97
- }
98
- const trimmed = color.trim();
99
- if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(trimmed)) {
100
- return trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
101
- }
102
- console.debug("[portal-components] Invalid color format rejected (only hex supported):", trimmed);
103
- return void 0;
104
- };
105
- var sanitizeUrlForCss = (url) => {
106
- if (!url || typeof url !== "string") {
107
- return void 0;
108
- }
109
- const trimmed = url.trim();
110
- try {
111
- const urlObj = new URL(trimmed);
112
- if (!["http:", "https:", "data:"].includes(urlObj.protocol)) {
113
- console.debug("[portal-components] Invalid URL protocol for background image:", urlObj.protocol);
114
- return void 0;
115
- }
116
- } catch {
117
- console.debug("[portal-components] Invalid URL format for background image:", trimmed);
118
- return void 0;
119
- }
120
- const escaped = trimmed.replace(/\\/g, "\\\\").replace(/\)/g, "\\)").replace(/"/g, '\\"').replace(/'/g, "\\'").replace(/[\x00-\x1F\x7F]/g, "");
121
- return escaped;
122
- };
123
- var decodeBranding = ({ brandingData }) => {
124
- if (!brandingData || typeof brandingData !== "string") {
125
- return {
126
- primaryColor: DEFAULT_PRIMARY_COLOR,
127
- secondaryColor: DEFAULT_SECONDARY_COLOR
128
- };
129
- }
130
- try {
131
- const decoded = Buffer.from(brandingData, "base64").toString("utf-8");
132
- const parsed = JSON.parse(decoded);
133
- const logo = typeof parsed.logo === "string" ? parsed.logo : void 0;
134
- const titleRaw = typeof parsed.title === "string" ? parsed.title.trim() : "";
135
- const title = titleRaw ? titleRaw : void 0;
136
- const favicon = typeof parsed.favicon === "string" ? parsed.favicon : void 0;
137
- const primaryColorRaw = parsed.primaryColor ?? parsed.primary_color;
138
- const secondaryColorRaw = parsed.secondaryColor ?? parsed.secondary_color;
139
- const primaryColor = normalizeColor(primaryColorRaw);
140
- const secondaryColor = normalizeColor(secondaryColorRaw);
141
- const supportPortalLink = typeof parsed.supportPortalLink === "string" ? parsed.supportPortalLink : void 0;
142
- const backgroundRaw = parsed.background;
143
- const background = backgroundRaw === "minimal" || backgroundRaw === "custom" || backgroundRaw === "image" ? backgroundRaw : void 0;
144
- const backgroundImage = sanitizeUrlForCss(parsed.backgroundImage);
145
- const backgroundGradientStart = normalizeColor(parsed.customColor1);
146
- const backgroundGradientEnd = normalizeColor(parsed.customColor2);
147
- return {
148
- logo,
149
- title,
150
- favicon,
151
- primaryColor: primaryColor || DEFAULT_PRIMARY_COLOR,
152
- secondaryColor: secondaryColor || DEFAULT_SECONDARY_COLOR,
153
- supportPortalLink,
154
- background,
155
- backgroundImage,
156
- backgroundGradientStart,
157
- backgroundGradientEnd
158
- };
159
- } catch (error) {
160
- console.debug("[portal-components] unable to parse branding JSON", error);
161
- return {
162
- primaryColor: DEFAULT_PRIMARY_COLOR,
163
- secondaryColor: DEFAULT_SECONDARY_COLOR
164
- };
165
- }
166
- };
167
-
168
89
  // src/actions/index.ts
169
90
  var getApiOrigin = () => {
170
91
  return (process.env.REPLICATED_APP_ORIGIN || "https://replicated.app").replace(/\/+$/, "");
@@ -199,6 +120,7 @@ var fetchCustomBrandingImpl = async () => {
199
120
  title: payload.title,
200
121
  primaryColor: payload.primaryColor,
201
122
  secondaryColor: payload.secondaryColor,
123
+ contact: payload.contact,
202
124
  favicon: payload.faviconUrl,
203
125
  supportPortalLink: payload.supportPortalLink || "",
204
126
  background: payload.background,
@@ -253,6 +175,87 @@ var fetchDocumentationImpl = async () => {
253
175
  };
254
176
  };
255
177
  cache(fetchDocumentationImpl);
178
+
179
+ // src/utils/constants.ts
180
+ var DEFAULT_PRIMARY_COLOR = "#4f46e5";
181
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
182
+
183
+ // src/utils/branding.ts
184
+ var normalizeColor = (color) => {
185
+ if (!color || typeof color !== "string") {
186
+ return void 0;
187
+ }
188
+ const trimmed = color.trim();
189
+ if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(trimmed)) {
190
+ return trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
191
+ }
192
+ console.debug("[portal-components] Invalid color format rejected (only hex supported):", trimmed);
193
+ return void 0;
194
+ };
195
+ var sanitizeUrlForCss = (url) => {
196
+ if (!url || typeof url !== "string") {
197
+ return void 0;
198
+ }
199
+ const trimmed = url.trim();
200
+ try {
201
+ const urlObj = new URL(trimmed);
202
+ if (!["http:", "https:", "data:"].includes(urlObj.protocol)) {
203
+ console.debug("[portal-components] Invalid URL protocol for background image:", urlObj.protocol);
204
+ return void 0;
205
+ }
206
+ } catch {
207
+ console.debug("[portal-components] Invalid URL format for background image:", trimmed);
208
+ return void 0;
209
+ }
210
+ const escaped = trimmed.replace(/\\/g, "\\\\").replace(/\)/g, "\\)").replace(/"/g, '\\"').replace(/'/g, "\\'").replace(/[\x00-\x1F\x7F]/g, "");
211
+ return escaped;
212
+ };
213
+ var decodeBranding = ({ brandingData }) => {
214
+ if (!brandingData || typeof brandingData !== "string") {
215
+ return {
216
+ primaryColor: DEFAULT_PRIMARY_COLOR,
217
+ secondaryColor: DEFAULT_SECONDARY_COLOR
218
+ };
219
+ }
220
+ try {
221
+ const decoded = Buffer.from(brandingData, "base64").toString("utf-8");
222
+ const parsed = JSON.parse(decoded);
223
+ const logo = typeof parsed.logo === "string" ? parsed.logo : void 0;
224
+ const titleRaw = typeof parsed.title === "string" ? parsed.title.trim() : "";
225
+ const title = titleRaw ? titleRaw : void 0;
226
+ const favicon = typeof parsed.favicon === "string" ? parsed.favicon : void 0;
227
+ const primaryColorRaw = parsed.primaryColor ?? parsed.primary_color;
228
+ const secondaryColorRaw = parsed.secondaryColor ?? parsed.secondary_color;
229
+ const primaryColor = normalizeColor(primaryColorRaw);
230
+ const secondaryColor = normalizeColor(secondaryColorRaw);
231
+ const contact = typeof parsed.contact === "string" ? parsed.contact : void 0;
232
+ const supportPortalLink = typeof parsed.supportPortalLink === "string" ? parsed.supportPortalLink : void 0;
233
+ const backgroundRaw = parsed.background;
234
+ const background = backgroundRaw === "minimal" || backgroundRaw === "custom" || backgroundRaw === "image" ? backgroundRaw : void 0;
235
+ const backgroundImage = sanitizeUrlForCss(parsed.backgroundImage);
236
+ const backgroundGradientStart = normalizeColor(parsed.customColor1);
237
+ const backgroundGradientEnd = normalizeColor(parsed.customColor2);
238
+ return {
239
+ logo,
240
+ title,
241
+ favicon,
242
+ primaryColor: primaryColor || DEFAULT_PRIMARY_COLOR,
243
+ secondaryColor: secondaryColor || DEFAULT_SECONDARY_COLOR,
244
+ contact,
245
+ supportPortalLink,
246
+ background,
247
+ backgroundImage,
248
+ backgroundGradientStart,
249
+ backgroundGradientEnd
250
+ };
251
+ } catch (error) {
252
+ console.debug("[portal-components] unable to parse branding JSON", error);
253
+ return {
254
+ primaryColor: DEFAULT_PRIMARY_COLOR,
255
+ secondaryColor: DEFAULT_SECONDARY_COLOR
256
+ };
257
+ }
258
+ };
256
259
  function UserMenuDropdown({
257
260
  displayLabel,
258
261
  children,