@loveluthien/carta-frontend 6.0.0-dev

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 (148) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +34 -0
  2. package/.github/pull_request_template.md +23 -0
  3. package/.github/workflows/continuous_integration.yml +139 -0
  4. package/.github/workflows/deploy.yml +30 -0
  5. package/.husky/pre-commit +16 -0
  6. package/.husky/pre-push +42 -0
  7. package/.prettierignore +1 -0
  8. package/.prettierrc.json +18 -0
  9. package/CHANGELOG.md +363 -0
  10. package/COPYING.md +636 -0
  11. package/README.md +112 -0
  12. package/babel.config.json +10 -0
  13. package/build/ast_wrapper.wasm +0 -0
  14. package/build/carta_computation.wasm +0 -0
  15. package/build/carta_icon_128px.png +0 -0
  16. package/build/carta_logo.png +0 -0
  17. package/build/gsl_wrapper.wasm +0 -0
  18. package/build/index.html +147 -0
  19. package/build/manifest.json +15 -0
  20. package/build/robots.txt +3 -0
  21. package/build/static/css/546.aa44a897.css +1 -0
  22. package/build/static/css/async/359.4d8f6ff7.css +1 -0
  23. package/build/static/css/async/403.ea9edfac.css +1 -0
  24. package/build/static/css/async/462.8bde08e0.css +1 -0
  25. package/build/static/css/index.c1f77b92.css +1 -0
  26. package/build/static/font/blueprint-icons-16.5fb1af27.woff2 +0 -0
  27. package/build/static/font/blueprint-icons-16.79f603d1.woff +0 -0
  28. package/build/static/font/blueprint-icons-16.83d51978.eot +0 -0
  29. package/build/static/font/blueprint-icons-16.af0c342f.ttf +0 -0
  30. package/build/static/font/blueprint-icons-20.83fddc09.ttf +0 -0
  31. package/build/static/font/blueprint-icons-20.9a51bc58.woff +0 -0
  32. package/build/static/font/blueprint-icons-20.d61315fe.eot +0 -0
  33. package/build/static/font/blueprint-icons-20.ebf16e9a.woff2 +0 -0
  34. package/build/static/image/allmaps.03f2ba92.png +0 -0
  35. package/build/static/image/gamma.6fca425b.png +0 -0
  36. package/build/static/image/linear.c7941b64.png +0 -0
  37. package/build/static/image/log.7fce6aee.png +0 -0
  38. package/build/static/image/power.5dac9727.png +0 -0
  39. package/build/static/image/sqrt.0ec2b3f1.png +0 -0
  40. package/build/static/image/squared.798b23aa.png +0 -0
  41. package/build/static/js/546.b5841ade.js +489 -0
  42. package/build/static/js/546.b5841ade.js.LICENSE.txt +925 -0
  43. package/build/static/js/async/359.97257512.js +1 -0
  44. package/build/static/js/async/403.b00f768c.js +1 -0
  45. package/build/static/js/async/462.92c07a07.js +1 -0
  46. package/build/static/js/async/905.70044ee8.js +1 -0
  47. package/build/static/js/async/907.dc17f1d2.js +1 -0
  48. package/build/static/js/async/blueprint-icons-16px-paths.e17db832.js +1 -0
  49. package/build/static/js/async/blueprint-icons-20px-paths.6ad43f5f.js +1 -0
  50. package/build/static/js/async/blueprint-icons-all-paths-loader.61cc0f7b.js +1 -0
  51. package/build/static/js/async/blueprint-icons-all-paths.0c699441.js +1 -0
  52. package/build/static/js/async/blueprint-icons-split-paths-by-size-loader.5cff79f5.js +1 -0
  53. package/build/static/js/index.8fc34b4d.js +1344 -0
  54. package/build/static/js/index.9a30d560.worker.js +1 -0
  55. package/build/static/js/zfp_wrapper.wasm +0 -0
  56. package/build/static/svg/blueprint-icons-16.130888ef.svg +2097 -0
  57. package/build/static/svg/blueprint-icons-20.c8456d56.svg +2097 -0
  58. package/build/zfp_wrapper.wasm +0 -0
  59. package/declarations.d.ts +18 -0
  60. package/docs_website/.prettierignore +1 -0
  61. package/docs_website/api/api.md +13 -0
  62. package/docs_website/babel.config.js +3 -0
  63. package/docs_website/docs/assets/enable-code-snippets.png +0 -0
  64. package/docs_website/docs/code-snippet-tutorial/_category_.json +8 -0
  65. package/docs_website/docs/code-snippet-tutorial/basics.md +97 -0
  66. package/docs_website/docs/code-snippet-tutorial/image-blending.mdx +57 -0
  67. package/docs_website/docs/code-snippet-tutorial/image-fitting.mdx +44 -0
  68. package/docs_website/docs/code-snippet-tutorial/image-properties.mdx +84 -0
  69. package/docs_website/docs/code-snippet-tutorial/moment-images.mdx +31 -0
  70. package/docs_website/docs/code-snippet-tutorial/pv-images.mdx +28 -0
  71. package/docs_website/docs/code-snippet-tutorial/quick-start.mdx +82 -0
  72. package/docs_website/docs/code-snippet-tutorial/regions.mdx +49 -0
  73. package/docs_website/docs/contributing/_category_.json +7 -0
  74. package/docs_website/docs/contributing/developer-tips.md +61 -0
  75. package/docs_website/docs/contributing/documentation-guidelines.md +87 -0
  76. package/docs_website/docs/contributing/github-workflow.md +146 -0
  77. package/docs_website/docs/contributing/release-guidelines.md +73 -0
  78. package/docs_website/docs/contributing/unit-test-guidelines.md +79 -0
  79. package/docs_website/docs/documents.mdx +15 -0
  80. package/docs_website/docusaurus.config.js +167 -0
  81. package/docs_website/package-lock.json +16769 -0
  82. package/docs_website/package.json +121 -0
  83. package/docs_website/patches/@docusaurus+core+3.9.2.patch +20 -0
  84. package/docs_website/sidebars.js +33 -0
  85. package/docs_website/static/.nojekyll +0 -0
  86. package/docs_website/static/img/carta_icon_128px.png +0 -0
  87. package/docs_website/versioned_docs/version-4.1.0/api-packages.json +1 -0
  88. package/docs_website/versioned_docs/version-4.1.0/api-typedoc.json +214112 -0
  89. package/docs_website/versioned_docs/version-4.1.0/assets/enable-code-snippets.png +0 -0
  90. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/_category_.json +8 -0
  91. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/basics.md +97 -0
  92. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/image-fitting.mdx +42 -0
  93. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/image-properties.mdx +86 -0
  94. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/moment-images.mdx +31 -0
  95. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/pv-images.mdx +28 -0
  96. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/quick-start.mdx +82 -0
  97. package/docs_website/versioned_docs/version-4.1.0/code-snippet-tutorial/regions.mdx +49 -0
  98. package/docs_website/versioned_docs/version-4.1.0/contributing/_category_.json +7 -0
  99. package/docs_website/versioned_docs/version-4.1.0/contributing/developer-tips.md +36 -0
  100. package/docs_website/versioned_docs/version-4.1.0/contributing/documentation-guidelines.md +87 -0
  101. package/docs_website/versioned_docs/version-4.1.0/contributing/github-workflow.md +141 -0
  102. package/docs_website/versioned_docs/version-4.1.0/contributing/release-guidelines.md +73 -0
  103. package/docs_website/versioned_docs/version-4.1.0/contributing/unit-test-guidelines.md +79 -0
  104. package/docs_website/versioned_docs/version-4.1.0/documents.mdx +15 -0
  105. package/docs_website/versioned_docs/version-5.0.0/api-packages.json +1 -0
  106. package/docs_website/versioned_docs/version-5.0.0/api-typedoc.json +315266 -0
  107. package/docs_website/versioned_docs/version-5.0.0/assets/enable-code-snippets.png +0 -0
  108. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/_category_.json +8 -0
  109. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/basics.md +97 -0
  110. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/image-blending.mdx +57 -0
  111. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/image-fitting.mdx +44 -0
  112. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/image-properties.mdx +86 -0
  113. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/moment-images.mdx +31 -0
  114. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/pv-images.mdx +28 -0
  115. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/quick-start.mdx +82 -0
  116. package/docs_website/versioned_docs/version-5.0.0/code-snippet-tutorial/regions.mdx +49 -0
  117. package/docs_website/versioned_docs/version-5.0.0/contributing/_category_.json +7 -0
  118. package/docs_website/versioned_docs/version-5.0.0/contributing/developer-tips.md +36 -0
  119. package/docs_website/versioned_docs/version-5.0.0/contributing/documentation-guidelines.md +87 -0
  120. package/docs_website/versioned_docs/version-5.0.0/contributing/github-workflow.md +141 -0
  121. package/docs_website/versioned_docs/version-5.0.0/contributing/release-guidelines.md +73 -0
  122. package/docs_website/versioned_docs/version-5.0.0/contributing/unit-test-guidelines.md +79 -0
  123. package/docs_website/versioned_docs/version-5.0.0/documents.mdx +15 -0
  124. package/docs_website/versioned_sidebars/version-4.1.0-sidebars.json +8 -0
  125. package/docs_website/versioned_sidebars/version-5.0.0-sidebars.json +8 -0
  126. package/docs_website/versions.json +4 -0
  127. package/eslint.config.mjs +86 -0
  128. package/jest.config.js +101 -0
  129. package/package.json +186 -0
  130. package/patches/golden-layout+1.5.9.patch +24 -0
  131. package/patches/react-split-pane+0.1.92.patch +20 -0
  132. package/rsbuild.config.ts +75 -0
  133. package/schemas/.github/workflows/AddToCartaVisProject.yml +23 -0
  134. package/schemas/.prettierrc.json +18 -0
  135. package/schemas/CMakeLists.txt +15 -0
  136. package/schemas/README.md +1 -0
  137. package/schemas/_config.yml +7 -0
  138. package/schemas/controller_config_schema_1.json +343 -0
  139. package/schemas/controller_config_schema_2.json +685 -0
  140. package/schemas/layout_schema_2.json +440 -0
  141. package/schemas/preference_backend_schema_1.json +81 -0
  142. package/schemas/preference_backend_schema_2.json +118 -0
  143. package/schemas/preference_schema_1.json +410 -0
  144. package/schemas/preferences_schema_2.json +421 -0
  145. package/schemas/schemacompiler.c +200 -0
  146. package/schemas/snippet_schema_1.json +45 -0
  147. package/schemas/workspace_schema_1.json +573 -0
  148. package/scripts/make_colormaps.py +161 -0
@@ -0,0 +1,343 @@
1
+ {
2
+ "$id": "https://cartavis.org/schemas/controller_config_schema_1.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "CARTA controller configuration schema",
5
+ "description": "Schema defining configuration options for the CARTA controller",
6
+ "type": "object",
7
+ "required": ["authProviders", "database", "serverAddress", "processCommand", "killCommand", "rootFolderTemplate", "baseFolderTemplate"],
8
+ "definitions": {
9
+ "keyAlgorithm": {
10
+ "description": "Algorithm used for public/private keys",
11
+ "type": "string",
12
+ "default": "RS256",
13
+ "enum": ["HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "ES256", "ES384", "ES512", "PS256", "PS384", "PS512"]
14
+ },
15
+ "googleAuthProvider": {
16
+ "type": "object",
17
+ "title": "Google AuthProvider",
18
+ "description": "Authentication configuration when using Google authentication",
19
+ "additionalProperties": false,
20
+ "required": ["clientId", "userLookupTable"],
21
+ "properties": {
22
+ "clientId": {
23
+ "description": "Google application client ID",
24
+ "type": "string",
25
+ "pattern": "^\\S+.apps.googleusercontent.com$",
26
+ "examples": ["my-app-id.apps.googleusercontent.com"]
27
+ },
28
+ "validDomain": {
29
+ "description": "Valid domains to accept. If this is empty or undefined, all domains are accepted. Domain specified by `hd` field in Google authentication configuration.",
30
+ "type": "string",
31
+ "examples": ["gmail.com", "my-google-domain.com", ""]
32
+ },
33
+ "useEmailAsId": {
34
+ "description": "Whether to use the email field as a unique identifier",
35
+ "type": "boolean",
36
+ "default": true,
37
+ "examples": [true, false]
38
+ },
39
+ "userLookupTable": {
40
+ "description": "Path to user lookup table, a text file with one entry per line, in the format <unique user ID> <system user>. System usernames may not contain whitespace.",
41
+ "type": "string",
42
+ "examples": ["/etc/carta/userlookup.txt"]
43
+ }
44
+ }
45
+ },
46
+ "ldapAuthProvider": {
47
+ "type": "object",
48
+ "title": "LDAP AuthProvider",
49
+ "description": "Authentication configuration when using LDAP-based authentication",
50
+ "additionalProperties": false,
51
+ "required": ["publicKeyLocation", "privateKeyLocation", "issuer", "ldapOptions"],
52
+ "properties": {
53
+ "publicKeyLocation": {
54
+ "description": "Path to public key (in PEM format) used for verifying JWTs",
55
+ "type": "string",
56
+ "examples": ["/etc/carta/carta_public.pem"]
57
+ },
58
+ "privateKeyLocation": {
59
+ "description": "Path to private key (in PEM format) used for signing JWTs",
60
+ "type": "string",
61
+ "examples": ["/etc/carta/carta_private.pem"]
62
+ },
63
+ "keyAlgorithm": {
64
+ "$ref": "#/definitions/keyAlgorithm",
65
+ "default": "RS256"
66
+ },
67
+ "issuer": {
68
+ "description": "Issuer field for JWT",
69
+ "type": "string",
70
+ "examples": ["my-carta-server"]
71
+ },
72
+ "refreshTokenAge": {
73
+ "description": "Lifetime of refresh tokens",
74
+ "type": "string",
75
+ "default": "1w",
76
+ "examples": ["1w", "15h", "2d"]
77
+ },
78
+ "accessTokenAge": {
79
+ "description": "Lifetime of access tokens",
80
+ "type": "string",
81
+ "default": "15m",
82
+ "examples": ["90s", "1h", "15m"]
83
+ },
84
+ "ldapOptions": {
85
+ "description": "Options to path through to the LDAP auth instance",
86
+ "additionalProperties": false,
87
+ "required": ["url", "searchBase"],
88
+ "properties": {
89
+ "url": {
90
+ "description": "LDAP connection URI",
91
+ "type": "string",
92
+ "format": "uri",
93
+ "pattern": "^ldaps?://"
94
+ },
95
+ "searchBase": {
96
+ "description": "Search base",
97
+ "type": "string"
98
+ },
99
+ "searchFilter": {
100
+ "description": "Search filter to use",
101
+ "type": "string",
102
+ "default": "uid={{username}}"
103
+ },
104
+ "starttls": {
105
+ "description": "Whether to start TLS when making a connection",
106
+ "type": "boolean",
107
+ "default": true
108
+ },
109
+ "reconnect": {
110
+ "description": "Whether to automatically reconnect to LDAP",
111
+ "type": "boolean",
112
+ "default": true
113
+ }
114
+ }
115
+ }
116
+ }
117
+ },
118
+ "externalAuthProvider": {
119
+ "type": "object",
120
+ "title": "External AuthProvider",
121
+ "description": "OAuth2-compatible authentication configuration",
122
+ "additionalProperties": false,
123
+ "required": ["issuers", "publicKeyLocation", "tokenRefreshAddress", "uniqueField"],
124
+ "properties": {
125
+ "issuers": {
126
+ "description": "List of valid issuers in JWT field",
127
+ "type": "array",
128
+ "examples": [["my-auth-server", "my-other-auth-server"]],
129
+ "minItems": 1,
130
+ "items": {
131
+ "type": "string"
132
+ }
133
+ },
134
+ "publicKeyLocation": {
135
+ "description": "Path to public key (in PEM format) used for verifying JWTs",
136
+ "type": "string",
137
+ "examples": ["/etc/carta/my_auth_server_public_key.pem"]
138
+ },
139
+ "keyAlgorithm": {
140
+ "$ref": "#/definitions/keyAlgorithm",
141
+ "default": "RS256"
142
+ },
143
+ "uniqueField": {
144
+ "description": "Name of unique field to use as user ID",
145
+ "type": "string",
146
+ "examples": ["user", "sub", "user_id"]
147
+ },
148
+ "tokenRefreshAddress": {
149
+ "description": "Route for refreshing access tokens",
150
+ "type": "string",
151
+ "format": "uri",
152
+ "pattern": "^https?://"
153
+ },
154
+ "logoutAddress": {
155
+ "description": "Route for logging out",
156
+ "type": "string",
157
+ "format": "uri",
158
+ "pattern": "^https?://"
159
+ },
160
+ "userLookupTable": {
161
+ "description": "Path to user lookup table, a text file with one entry per line, in the format <unique user ID> <system user>. System usernames may not contain whitespace. If no user lookup is needed, this should be omitted.",
162
+ "type": "string",
163
+ "examples": ["/etc/carta/userlookup.txt"]
164
+ }
165
+ }
166
+ }
167
+ },
168
+ "additionalProperties": false,
169
+ "properties": {
170
+ "$schema": {
171
+ "type": "string",
172
+ "description": "Reference to configuration schema file"
173
+ },
174
+ "authProviders": {
175
+ "type": "object",
176
+ "title": "AuthProviders",
177
+ "description": "Configuration option for authentication providers",
178
+ "properties": {
179
+ "google": {
180
+ "description": "Google AuthProvider",
181
+ "$ref": "#/definitions/googleAuthProvider"
182
+ },
183
+ "ldap": {
184
+ "description": "LDAP AuthProvider",
185
+ "$ref": "#/definitions/ldapAuthProvider"
186
+ },
187
+ "external": {
188
+ "description": "External AuthProvider",
189
+ "$ref": "#/definitions/externalAuthProvider"
190
+ }
191
+ }
192
+ },
193
+ "database": {
194
+ "type": "object",
195
+ "description": "Database configuration",
196
+ "additionalProperties": false,
197
+ "required": ["uri"],
198
+ "properties": {
199
+ "uri": {
200
+ "description": "MongoDB connection URI used to connect to a MongoDB deployment",
201
+ "type": "string",
202
+ "format": "uri",
203
+ "pattern": "^mongodb://",
204
+ "default": "mongodb://localhost:27017"
205
+ },
206
+ "databaseName": {
207
+ "description": "Default database to connect to",
208
+ "type": "string",
209
+ "default": "CARTA"
210
+ }
211
+ }
212
+ },
213
+ "serverPort": {
214
+ "description": "Port to listen on. It is advised to listen on a port other than 80 or 443, behind an SSL proxy",
215
+ "type": "integer",
216
+ "default": 8000,
217
+ "minimum": 0,
218
+ "maximum": 65535
219
+ },
220
+ "serverAddress": {
221
+ "description": "Public-facing server address",
222
+ "type": "string",
223
+ "format": "uri",
224
+ "pattern": "^https?://"
225
+ },
226
+ "dashboardAddress": {
227
+ "description": "Optional parameter for explicitly configuring a custom dashboard address",
228
+ "type": "string",
229
+ "format": "uri",
230
+ "pattern": "^https?://"
231
+ },
232
+ "apiAddress": {
233
+ "description": "Optional parameter for explicitly configuring a custom API base address",
234
+ "type": "string",
235
+ "format": "uri",
236
+ "pattern": "^https?://"
237
+ },
238
+ "frontendPath": {
239
+ "description": "Path to the built frontend folder. If no path is provided, the packaged version will be used",
240
+ "type": "string"
241
+ },
242
+ "backendPorts": {
243
+ "description": "Port range to use for the CARTA backend process",
244
+ "additionalProperties": false,
245
+ "default": {
246
+ "min": 3003,
247
+ "max": 3500
248
+ },
249
+ "required": ["min", "max"],
250
+ "properties": {
251
+ "min": {
252
+ "minimum": 1024,
253
+ "maximum": 65535,
254
+ "type": "integer"
255
+ },
256
+ "max": {
257
+ "minimum": 1024,
258
+ "maximum": 65535,
259
+ "type": "integer"
260
+ }
261
+ }
262
+ },
263
+ "processCommand": {
264
+ "description": "Path to CARTA backend executable",
265
+ "type": "string",
266
+ "examples": ["/usr/local/bin/carta_backend"]
267
+ },
268
+ "killCommand": {
269
+ "description": "Path to CARTA kill script",
270
+ "type": "string",
271
+ "examples": ["/usr/local/bin/carta_kill_script.sh"]
272
+ },
273
+ "rootFolderTemplate": {
274
+ "description": "Top-level path of directories accessible to CARTA. The `{username}` placeholder will be replaced with the username",
275
+ "type": "string",
276
+ "examples": ["/home/{username}", "/"]
277
+ },
278
+ "baseFolderTemplate": {
279
+ "description": "Starting directory of CARTA. Must be a subfolder of rootFolderTemplate. The `{username}` placeholder will be replaced with the username",
280
+ "type": "string",
281
+ "examples": ["/home/{username}/CARTA", "/data", "/"]
282
+ },
283
+ "logFileTemplate": {
284
+ "description": "Location of log file. The `{username}`, `{pid}` and `{datetime}` placeholders will be replaced with the username, process ID. and dat/time formatted as `YYYYMMDD.h_mm_ss` respectively",
285
+ "type": "string",
286
+ "default": "/var/log/carta/{username}_{datetime}_{pid}.log",
287
+ "examples": ["/var/log/carta/{username}_{pid}.log", "/home/{username}/CARTA/log/{datatime}_{pid}.log"]
288
+ },
289
+ "additionalArgs": {
290
+ "description": "Additional arguments to be passed to the backend process, defined as an array of strings. See backend documentation for details.",
291
+ "type": "array",
292
+ "examples": [["-threads", "4", "-omp_threads", "4", "-init_exit_after", "30", "-exit_after", "0"]],
293
+ "items": {
294
+ "type": "string"
295
+ }
296
+ },
297
+ "startDelay": {
298
+ "description": "Wait time before checking whether started process is still running and sending a response to the connecting client",
299
+ "type": "integer",
300
+ "minimum": 0,
301
+ "default": 250
302
+ },
303
+ "dashboard": {
304
+ "description": "Dashboard appearance configuration",
305
+ "properties": {
306
+ "backgroundColor": {
307
+ "type": "string",
308
+ "description": "Background color for the dashboard",
309
+ "default": "#f6f8fa",
310
+ "examples": ["red", "rgb(171 66 66)", "#ff11ee"]
311
+ },
312
+ "bannerColor": {
313
+ "type": "string",
314
+ "description": "Background color for the institutional logo banner",
315
+ "default": "#606f7e",
316
+ "examples": ["red", "rgb(171 66 66)", "#ff11ee"]
317
+ },
318
+ "bannerImage": {
319
+ "type": "string",
320
+ "description": "Path to institutional logo in PNG or SVG format"
321
+ },
322
+ "infoText": {
323
+ "type": "string",
324
+ "description": "Text displayed before and after sign in. Plain text or HTML",
325
+ "examples": ["Welcome to the server", "<span>Welcome to <b>the</b> server</span>"]
326
+ },
327
+ "loginText": {
328
+ "type": "string",
329
+ "description": "Text displayed before sign-in only. Plain text or HTML",
330
+ "examples": ["Please enter your username and password", "<span>Click <b>Sign in</b> to log in via Google</span>"]
331
+ },
332
+ "footerText": {
333
+ "type": "string",
334
+ "description": "Footer text. Plain text or HTML",
335
+ "examples": [
336
+ "Please contact the CARTA helpdesk for more information",
337
+ "<span>If you would like to access the server, or have any problems, comments or suggestions, please <a href='mailto:test@test.com'>contact us.</a></span>"
338
+ ]
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }