@rancher/shell 1.2.3 → 2.0.1

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 (699) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -0
  7. package/assets/styles/global/_layout.scss +99 -0
  8. package/assets/styles/themes/_csp.scss +2 -2
  9. package/assets/styles/themes/_dark.scss +8 -2
  10. package/assets/styles/themes/_light.scss +2 -1
  11. package/assets/styles/themes/_suse.scss +1 -1
  12. package/assets/styles/vendor/vue-select.scss +5 -0
  13. package/assets/translations/en-us.yaml +315 -64
  14. package/assets/translations/zh-hans.yaml +7 -31
  15. package/babel.config.js +8 -2
  16. package/chart/__tests__/S3.test.ts +9 -2
  17. package/chart/gatekeeper.vue +2 -11
  18. package/chart/istio.vue +1 -10
  19. package/chart/logging/index.vue +2 -11
  20. package/chart/monitoring/alerting/index.vue +7 -21
  21. package/chart/monitoring/grafana/index.vue +61 -2
  22. package/chart/monitoring/index.vue +52 -26
  23. package/chart/monitoring/prometheus/index.vue +39 -45
  24. package/chart/rancher-backup/S3.vue +11 -9
  25. package/chart/rancher-backup/index.vue +18 -15
  26. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  27. package/cloud-credential/azure.vue +4 -17
  28. package/cloud-credential/generic.vue +18 -9
  29. package/cloud-credential/harvester.vue +11 -3
  30. package/components/AlertTable.vue +17 -7
  31. package/components/AppModal.vue +167 -0
  32. package/components/AssignTo.vue +7 -4
  33. package/components/AsyncButton.vue +27 -5
  34. package/components/BackLink.vue +4 -4
  35. package/components/BannerGraphic.vue +1 -0
  36. package/components/BrandImage.vue +47 -1
  37. package/components/Carousel.vue +15 -8
  38. package/components/Certificates.vue +161 -0
  39. package/components/ClusterBadge.vue +12 -3
  40. package/components/ClusterIconMenu.vue +55 -12
  41. package/components/ClusterProviderIcon.vue +14 -3
  42. package/components/CodeMirror.vue +111 -17
  43. package/components/CommunityLinks.vue +12 -8
  44. package/components/CopyCode.vue +6 -2
  45. package/components/CopyToClipboard.vue +2 -1
  46. package/components/CopyToClipboardText.vue +14 -9
  47. package/components/CreateDriver.vue +81 -0
  48. package/components/CruResource.vue +52 -27
  49. package/components/DetailTop.vue +2 -2
  50. package/components/Dialog.vue +6 -5
  51. package/components/DisableAuthProviderModal.vue +14 -8
  52. package/components/DraggableZone.vue +2 -2
  53. package/components/EtcdInfoBanner.vue +5 -5
  54. package/components/ExplorerMembers.vue +3 -3
  55. package/components/ExplorerProjectsNamespaces.vue +31 -7
  56. package/components/FixedBanner.vue +48 -36
  57. package/components/GlobalRoleBindings.vue +26 -0
  58. package/components/GrafanaDashboard.vue +6 -4
  59. package/components/IconOrSvg.vue +1 -1
  60. package/components/Import.vue +10 -6
  61. package/components/Inactivity.vue +1 -5
  62. package/components/KeyValueView.vue +14 -10
  63. package/components/Markdown.vue +16 -12
  64. package/components/MessageLink.vue +2 -2
  65. package/components/ModalWithCard.vue +5 -8
  66. package/components/MoveModal.vue +35 -33
  67. package/components/PodSecurityAdmission.vue +3 -3
  68. package/components/PromptChangePassword.vue +33 -33
  69. package/components/PromptModal.vue +11 -21
  70. package/components/PromptRemove.vue +12 -17
  71. package/components/PromptRestore.vue +18 -16
  72. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  73. package/components/Questions/__tests__/Float.test.ts +9 -19
  74. package/components/Questions/__tests__/Int.test.ts +9 -19
  75. package/components/Questions/__tests__/String.test.ts +9 -19
  76. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  77. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  78. package/components/Questions/index.vue +19 -3
  79. package/components/ResourceCancelModal.vue +34 -29
  80. package/components/ResourceDetail/Masthead.vue +48 -16
  81. package/components/ResourceDetail/index.vue +6 -4
  82. package/components/ResourceList/Masthead.vue +10 -9
  83. package/components/ResourceList/index.vue +65 -14
  84. package/components/ResourceTable.vue +87 -21
  85. package/components/ResourceYaml.vue +35 -5
  86. package/components/SelectIconGrid.vue +3 -3
  87. package/components/SideNav.vue +50 -94
  88. package/components/SingleClusterInfo.vue +4 -4
  89. package/components/SortableTable/THead.vue +33 -21
  90. package/components/SortableTable/filtering.js +9 -1
  91. package/components/SortableTable/grouping.js +8 -1
  92. package/components/SortableTable/index.vue +143 -44
  93. package/components/SortableTable/paging.js +36 -7
  94. package/components/SortableTable/selection.js +2 -1
  95. package/components/SortableTable/sorting.js +24 -7
  96. package/components/StatusTable.vue +5 -1
  97. package/components/Tabbed/index.vue +18 -1
  98. package/components/TableDataUserIcon.vue +47 -0
  99. package/components/TypeDescription.vue +1 -0
  100. package/components/Wizard.vue +1 -0
  101. package/components/YamlEditor.vue +1 -0
  102. package/components/__tests__/AppModal.test.ts +98 -0
  103. package/components/__tests__/AsyncButton.test.ts +1 -3
  104. package/components/__tests__/BackLink.test.ts +1 -1
  105. package/components/__tests__/ButtonGroup.test.ts +3 -6
  106. package/components/__tests__/Carousel.test.ts +43 -0
  107. package/components/__tests__/Certificates.test.ts +29 -0
  108. package/components/__tests__/CodeMirror.test.ts +87 -0
  109. package/components/__tests__/CopyCode.test.ts +5 -4
  110. package/components/__tests__/CruResource.test.ts +10 -9
  111. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  112. package/components/__tests__/FixedBanner.test.ts +5 -20
  113. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  114. package/components/__tests__/TabTitle.test.ts +129 -0
  115. package/components/auth/AzureWarning.vue +2 -2
  116. package/components/auth/RoleDetailEdit.vue +10 -0
  117. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  118. package/components/auth/login/oidc.vue +7 -1
  119. package/components/fleet/FleetBundles.vue +5 -11
  120. package/components/fleet/FleetClusters.vue +9 -9
  121. package/components/fleet/FleetIntro.vue +11 -17
  122. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  123. package/components/fleet/FleetRepos.vue +63 -27
  124. package/components/fleet/FleetResources.vue +6 -1
  125. package/components/fleet/FleetStatus.vue +3 -3
  126. package/components/fleet/FleetSummary.vue +35 -30
  127. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  128. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  129. package/components/form/ArrayList.vue +22 -18
  130. package/components/form/ArrayListSelect.vue +5 -0
  131. package/components/form/BannerSettings.vue +3 -0
  132. package/components/form/ClusterAppearance.vue +132 -0
  133. package/components/form/ColorInput.vue +1 -0
  134. package/components/form/Error.vue +3 -3
  135. package/components/form/FileSelector.vue +1 -0
  136. package/components/form/Footer.vue +2 -2
  137. package/components/form/GitPicker.vue +83 -38
  138. package/components/form/KeyValue.vue +70 -48
  139. package/components/form/LabeledSelect.vue +145 -41
  140. package/components/form/Labels.vue +3 -1
  141. package/components/form/NameNsDescription.vue +26 -9
  142. package/components/form/Password.vue +3 -1
  143. package/components/form/ResourceLabeledSelect.vue +187 -0
  144. package/components/form/ResourceTabs/index.vue +31 -15
  145. package/components/form/SecretSelector.vue +93 -18
  146. package/components/form/SelectOrCreateAuthSecret.vue +132 -59
  147. package/components/form/SimpleSecretSelector.vue +88 -28
  148. package/components/form/Taints.vue +13 -7
  149. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  150. package/components/form/__tests__/KeyValue.test.ts +120 -11
  151. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  152. package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
  153. package/components/form/__tests__/Taints.test.ts +70 -0
  154. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  155. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  156. package/components/formatter/AppSummaryGraph.vue +2 -2
  157. package/components/formatter/Checked.vue +11 -3
  158. package/components/formatter/CloudCredPublicData.vue +30 -0
  159. package/components/formatter/ClusterLink.vue +2 -2
  160. package/components/formatter/ClusterProvider.vue +1 -18
  161. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  162. package/components/formatter/FleetSummaryGraph.vue +25 -12
  163. package/components/formatter/ImagePercentageBar.vue +0 -4
  164. package/components/formatter/IngressTarget.vue +18 -7
  165. package/components/formatter/Link.vue +2 -2
  166. package/components/formatter/LinkDetail.vue +2 -2
  167. package/components/formatter/LinkDetailImage.vue +2 -2
  168. package/components/formatter/LinkName.vue +2 -2
  169. package/components/formatter/LiveDuration.vue +1 -1
  170. package/components/formatter/PercentageBar.vue +1 -1
  171. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  172. package/components/formatter/SecretType.vue +2 -2
  173. package/components/formatter/VirtualServiceGateways.vue +2 -2
  174. package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
  175. package/components/formatter/__tests__/Checked.test.ts +19 -0
  176. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  177. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
  178. package/components/nav/Group.vue +9 -7
  179. package/components/nav/Header.vue +85 -46
  180. package/components/nav/Jump.vue +19 -9
  181. package/components/nav/NamespaceFilter.vue +8 -1
  182. package/components/nav/TopLevelMenu.vue +392 -136
  183. package/components/nav/Type.vue +71 -106
  184. package/components/nav/WindowManager/ContainerLogs.vue +120 -19
  185. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  186. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  187. package/components/nav/WindowManager/index.vue +11 -10
  188. package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
  189. package/components/nav/__tests__/Type.test.ts +322 -97
  190. package/components/nuxt/nuxt-child.js +9 -78
  191. package/components/nuxt/nuxt-error.vue +1 -1
  192. package/components/nuxt/nuxt-link.client.js +13 -95
  193. package/{layouts → components/templates}/blank.vue +1 -1
  194. package/{layouts → components/templates}/default.vue +11 -101
  195. package/{layouts → components/templates}/error.vue +13 -26
  196. package/{layouts → components/templates}/home.vue +4 -1
  197. package/{layouts → components/templates}/plain.vue +4 -1
  198. package/{layouts → components/templates}/standalone.vue +1 -5
  199. package/{layouts → components/templates}/unauthenticated.vue +2 -3
  200. package/composables/useCompactInput.test.ts +36 -0
  201. package/composables/useCompactInput.ts +20 -0
  202. package/composables/useLabeledFormElement.test.ts +135 -0
  203. package/composables/useLabeledFormElement.ts +138 -0
  204. package/config/harvester-manager-types.js +2 -0
  205. package/config/home-links.js +2 -1
  206. package/config/labels-annotations.js +2 -1
  207. package/config/middleware.js +0 -6
  208. package/config/pagination-table-headers.js +57 -0
  209. package/config/pod-security-admission.ts +1 -1
  210. package/config/private-label.js +21 -1
  211. package/config/product/auth.js +1 -0
  212. package/config/product/explorer.js +166 -45
  213. package/config/product/fleet.js +6 -1
  214. package/config/product/legacy.js +2 -11
  215. package/config/product/manager.js +51 -25
  216. package/config/query-params.js +2 -0
  217. package/config/roles.ts +23 -0
  218. package/config/router/index.js +23 -0
  219. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  220. package/config/router/navigation-guards/authentication.js +63 -0
  221. package/config/router/navigation-guards/i18n.js +13 -0
  222. package/config/router/navigation-guards/index.js +16 -0
  223. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  224. package/config/router/routes.js +487 -0
  225. package/config/settings.ts +31 -2
  226. package/config/store.js +8 -4
  227. package/config/system-namespaces.js +3 -0
  228. package/config/table-headers.js +66 -1
  229. package/config/types.js +35 -20
  230. package/config/uiplugins.js +10 -5
  231. package/core/plugin-helpers.js +4 -6
  232. package/core/plugin-routes.ts +56 -114
  233. package/core/plugin.ts +18 -11
  234. package/core/plugins-loader.js +7 -9
  235. package/core/plugins.js +289 -285
  236. package/core/types-provisioning.ts +7 -0
  237. package/creators/app/app.package.json +2 -1
  238. package/creators/app/files/.eslintignore +0 -2
  239. package/creators/app/files/.gitlab-ci.yml +14 -0
  240. package/creators/app/files/.vscode/settings.json +0 -1
  241. package/creators/app/init +19 -0
  242. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  243. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  244. package/creators/pkg/init +32 -0
  245. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
  246. package/detail/__tests__/service.test.ts +62 -0
  247. package/detail/catalog.cattle.io.app.vue +1 -1
  248. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  249. package/detail/fleet.cattle.io.bundle.vue +1 -1
  250. package/detail/fleet.cattle.io.cluster.vue +11 -1
  251. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  252. package/detail/namespace.vue +2 -2
  253. package/detail/networking.k8s.io.ingress.vue +52 -19
  254. package/detail/node.vue +22 -3
  255. package/detail/provisioning.cattle.io.cluster.vue +31 -13
  256. package/detail/service.vue +1 -1
  257. package/detail/workload/index.vue +1 -0
  258. package/dialog/AddCustomBadgeDialog.vue +318 -161
  259. package/dialog/DeactivateDriverDialog.vue +137 -0
  260. package/dialog/RollbackWorkloadDialog.vue +2 -2
  261. package/dialog/RotateCertificatesDialog.vue +0 -21
  262. package/dialog/ScaleMachineDownDialog.vue +34 -17
  263. package/directives/clean-html.js +15 -0
  264. package/directives/clean-tooltip.js +32 -0
  265. package/directives/focus.js +41 -0
  266. package/directives/int-number.js +21 -0
  267. package/directives/positive-int-number.js +19 -0
  268. package/directives/trim-whitespace.js +19 -0
  269. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  270. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  271. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  272. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  273. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  274. package/edit/__tests__/nodeDriver.test.ts +107 -0
  275. package/edit/__tests__/service.test.ts +85 -0
  276. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  277. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  278. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  279. package/edit/auth/__tests__/azuread.test.ts +241 -0
  280. package/edit/auth/__tests__/oidc.test.ts +137 -0
  281. package/edit/auth/azuread.vue +133 -31
  282. package/edit/auth/github.vue +5 -17
  283. package/edit/auth/googleoauth.vue +6 -23
  284. package/edit/auth/ldap/index.vue +5 -17
  285. package/edit/auth/oidc.vue +143 -42
  286. package/edit/auth/saml.vue +5 -14
  287. package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
  288. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  289. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  290. package/edit/cloudcredential.vue +28 -4
  291. package/edit/configmap.vue +10 -4
  292. package/edit/fleet.cattle.io.gitrepo.vue +3 -1
  293. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  294. package/edit/kontainerDriver.vue +65 -0
  295. package/edit/logging-flow/Match.vue +10 -9
  296. package/edit/logging-flow/index.vue +4 -19
  297. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  298. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  299. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  300. package/edit/management.cattle.io.project.vue +3 -53
  301. package/edit/management.cattle.io.setting.vue +52 -2
  302. package/edit/management.cattle.io.user.vue +2 -1
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  308. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
  309. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
  310. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  311. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  312. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  313. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  314. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  315. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  316. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
  317. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
  318. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  319. package/edit/nodeDriver.vue +65 -0
  320. package/edit/persistentvolume/index.vue +2 -2
  321. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
  322. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
  323. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  324. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
  325. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  326. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  327. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  328. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
  329. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
  330. package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
  331. package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
  332. package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
  333. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  334. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
  335. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
  336. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  337. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  338. package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
  339. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  340. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
  341. package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
  342. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
  343. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  344. package/edit/resources.cattle.io.backup.vue +139 -124
  345. package/edit/resources.cattle.io.restore.vue +146 -126
  346. package/edit/service.vue +13 -0
  347. package/edit/serviceaccount.vue +46 -4
  348. package/edit/token.vue +3 -1
  349. package/edit/workload/Upgrading.vue +3 -2
  350. package/edit/workload/__tests__/Job.test.ts +1 -3
  351. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  352. package/edit/workload/index.vue +2 -1
  353. package/edit/workload/mixins/workload.js +35 -2
  354. package/edit/workload/storage/emptyDir.vue +2 -2
  355. package/initialize/App.vue +75 -0
  356. package/initialize/app-extended.js +128 -0
  357. package/initialize/entry-helpers.js +546 -0
  358. package/initialize/entry.js +32 -0
  359. package/initialize/install-components.js +23 -0
  360. package/initialize/install-directives.js +59 -0
  361. package/initialize/install-plugins.js +123 -0
  362. package/list/__tests__/workload.test.ts +1 -1
  363. package/list/catalog.cattle.io.app.vue +1 -0
  364. package/list/cis.cattle.io.clusterscan.vue +16 -10
  365. package/list/group.principal.vue +2 -2
  366. package/list/management.cattle.io.feature.vue +16 -16
  367. package/list/management.cattle.io.setting.vue +1 -0
  368. package/list/management.cattle.io.user.vue +13 -4
  369. package/list/networking.k8s.io.ingress.vue +36 -0
  370. package/list/node.vue +212 -73
  371. package/list/provisioning.cattle.io.cluster.vue +17 -4
  372. package/list/ui.cattle.io.navlink.vue +2 -2
  373. package/list/workload.vue +22 -0
  374. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  375. package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
  376. package/machine-config/amazonec2.vue +1 -1
  377. package/machine-config/azure.vue +2 -1
  378. package/machine-config/generic.vue +11 -15
  379. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  380. package/machine-config/vmwarevsphere.vue +31 -27
  381. package/middleware/authenticated.js +23 -399
  382. package/mixins/__tests__/chart.test.ts +48 -6
  383. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  384. package/mixins/auth-config.js +5 -9
  385. package/mixins/brand.js +102 -96
  386. package/mixins/chart.js +27 -13
  387. package/mixins/create-edit-view/index.js +2 -2
  388. package/mixins/fetch.client.js +42 -48
  389. package/mixins/labeled-form-element.ts +27 -2
  390. package/mixins/page-actions.js +7 -5
  391. package/mixins/resource-fetch-api-pagination.js +304 -0
  392. package/mixins/resource-fetch-namespaced.js +1 -1
  393. package/mixins/resource-fetch.js +46 -5
  394. package/models/__tests__/cluster.test.ts +44 -0
  395. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  396. package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
  397. package/models/__tests__/management.cattle.io.node.ts +85 -0
  398. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  399. package/models/__tests__/namespace.test.ts +49 -9
  400. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
  401. package/models/__tests__/schema.tests.ts +24 -0
  402. package/models/__tests__/secret.test.ts +37 -0
  403. package/models/__tests__/steve-schema.test.ts +73 -0
  404. package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
  405. package/models/__tests__/workload.test.ts +91 -0
  406. package/models/catalog.cattle.io.app.js +8 -0
  407. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  408. package/models/catalog.cattle.io.uiplugin.js +7 -8
  409. package/models/cis.cattle.io.clusterscan.js +29 -8
  410. package/models/cloudcredential.js +9 -1
  411. package/models/cluster/node.js +8 -4
  412. package/models/cluster/schema.js +6 -0
  413. package/models/cluster.js +33 -0
  414. package/models/cluster.x-k8s.io.machine.js +1 -1
  415. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  416. package/models/driver.js +63 -0
  417. package/models/fleet.cattle.io.cluster.js +27 -11
  418. package/models/fleet.cattle.io.gitrepo.js +66 -13
  419. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  420. package/models/kontainerdriver.js +85 -0
  421. package/models/management/schema.js +6 -0
  422. package/models/management.cattle.io.authconfig.js +3 -2
  423. package/models/management.cattle.io.cluster.js +16 -7
  424. package/models/management.cattle.io.globalrole.js +2 -0
  425. package/models/management.cattle.io.kontainerdriver.js +1 -0
  426. package/models/management.cattle.io.node.js +18 -14
  427. package/models/management.cattle.io.nodepool.js +17 -0
  428. package/models/management.cattle.io.project.js +0 -36
  429. package/models/management.cattle.io.setting.js +11 -7
  430. package/models/management.cattle.io.user.js +2 -2
  431. package/models/monitoring.coreos.com.receiver.js +3 -1
  432. package/models/monitoring.coreos.com.route.js +1 -1
  433. package/models/namespace.js +1 -1
  434. package/models/networking.k8s.io.ingress.js +2 -1
  435. package/models/nodedriver.js +85 -0
  436. package/models/pod.js +20 -0
  437. package/models/provisioning.cattle.io.cluster.js +125 -10
  438. package/models/schema.js +28 -7
  439. package/models/secret.js +126 -18
  440. package/models/service.js +2 -0
  441. package/models/steve-schema.ts +254 -0
  442. package/models/storage.k8s.io.storageclass.js +1 -1
  443. package/models/workload.js +17 -0
  444. package/models/workload.service.js +18 -0
  445. package/package.json +18 -14
  446. package/pages/about.vue +12 -6
  447. package/pages/account/create-key.vue +0 -1
  448. package/pages/account/index.vue +7 -3
  449. package/pages/auth/login.vue +106 -103
  450. package/pages/auth/logout.vue +2 -4
  451. package/pages/auth/setup.vue +92 -66
  452. package/pages/auth/verify.vue +30 -24
  453. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  454. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  455. package/pages/c/_cluster/apps/charts/index.vue +99 -69
  456. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  457. package/pages/c/_cluster/apps/charts/install.vue +12 -11
  458. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  459. package/pages/c/_cluster/auth/config/index.vue +15 -9
  460. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  461. package/pages/c/_cluster/ecm/index.vue +0 -2
  462. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  463. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  464. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  465. package/pages/c/_cluster/explorer/index.vue +253 -91
  466. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  467. package/pages/c/_cluster/explorer/tools/index.vue +10 -6
  468. package/pages/c/_cluster/fleet/index.vue +89 -94
  469. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  470. package/pages/c/_cluster/longhorn/index.vue +52 -17
  471. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  472. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  473. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  474. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
  475. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  476. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  477. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
  478. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  479. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  480. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  481. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  482. package/pages/c/_cluster/neuvector/index.vue +1 -0
  483. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  484. package/pages/c/_cluster/settings/banners.vue +86 -10
  485. package/pages/c/_cluster/settings/brand.vue +261 -38
  486. package/pages/c/_cluster/settings/index.vue +4 -6
  487. package/pages/c/_cluster/settings/links.vue +3 -2
  488. package/pages/c/_cluster/settings/performance.vue +71 -3
  489. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  490. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
  491. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  492. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  493. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  494. package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
  495. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  496. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  497. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  498. package/pages/c/_cluster/uiplugins/index.vue +38 -54
  499. package/pages/diagnostic.vue +2 -2
  500. package/pages/fail-whale.vue +103 -42
  501. package/pages/home.vue +81 -24
  502. package/pages/prefs.vue +8 -4
  503. package/pages/support/index.vue +14 -10
  504. package/pkg/auto-import.js +1 -1
  505. package/plugins/axios.js +0 -36
  506. package/plugins/back-button.js +3 -5
  507. package/plugins/clean-html-directive.js +5 -30
  508. package/plugins/clean-html.js +53 -0
  509. package/plugins/clean-tooltip-directive.js +6 -31
  510. package/plugins/codemirror-loader.js +1 -1
  511. package/plugins/codemirror.js +41 -9
  512. package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
  513. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  514. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  515. package/plugins/dashboard-store/actions.js +132 -25
  516. package/plugins/dashboard-store/classify.js +1 -18
  517. package/plugins/dashboard-store/getters.js +154 -44
  518. package/plugins/dashboard-store/index.js +0 -111
  519. package/plugins/dashboard-store/mutations.js +150 -52
  520. package/plugins/dashboard-store/resource-class.js +77 -127
  521. package/plugins/directives.js +6 -39
  522. package/plugins/ember-cookie.js +13 -0
  523. package/plugins/global-formatters.js +26 -5
  524. package/plugins/i18n.js +89 -55
  525. package/plugins/int-number.js +6 -20
  526. package/plugins/plugin.js +3 -3
  527. package/plugins/positive-int-number.js +6 -17
  528. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
  529. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  530. package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
  531. package/plugins/steve/__tests__/steve-class.test.ts +59 -0
  532. package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
  533. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  534. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  535. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  536. package/plugins/steve/actions.js +3 -38
  537. package/plugins/steve/getters.js +164 -61
  538. package/plugins/steve/hybrid-class.js +5 -1
  539. package/plugins/steve/mutations.js +24 -3
  540. package/plugins/steve/norman-class.js +142 -2
  541. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  542. package/plugins/steve/resource-utils.ts +38 -0
  543. package/plugins/steve/schema.d.ts +22 -0
  544. package/plugins/steve/steve-class.js +22 -0
  545. package/plugins/steve/steve-pagination-utils.ts +368 -0
  546. package/plugins/steve/subscribe.js +17 -76
  547. package/plugins/trim-whitespace.js +6 -34
  548. package/plugins/vue-js-modal.js +1 -1
  549. package/promptRemove/pod.vue +15 -7
  550. package/public/index.html +1 -0
  551. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  552. package/rancher-components/Accordion/Accordion.vue +86 -0
  553. package/rancher-components/Accordion/index.ts +1 -0
  554. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  555. package/rancher-components/Banner/Banner.test.ts +1 -5
  556. package/rancher-components/Banner/Banner.vue +2 -2
  557. package/rancher-components/Card/Card.vue +4 -4
  558. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  559. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  560. package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
  561. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  562. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  563. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  564. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  565. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  566. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  567. package/rancher-components/StringList/StringList.test.ts +270 -0
  568. package/rancher-components/StringList/StringList.vue +65 -26
  569. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
  570. package/scripts/clean +1 -1
  571. package/scripts/extension/bundle +19 -7
  572. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  573. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  574. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  575. package/scripts/extension/helm/package/Dockerfile +1 -1
  576. package/scripts/extension/helm/scripts/package +11 -3
  577. package/scripts/extension/helm/scripts/patch +27 -0
  578. package/scripts/extension/parse-tag-name +4 -4
  579. package/scripts/extension/publish +25 -14
  580. package/scripts/publish-shell.sh +11 -1
  581. package/scripts/serve-pkgs +0 -2
  582. package/scripts/test-plugins-build.sh +87 -11
  583. package/scripts/vue-migrate.js +683 -0
  584. package/server/har-file.js +183 -0
  585. package/store/__tests__/catalog.test.ts +224 -0
  586. package/store/__tests__/type-map.test.ts +1122 -0
  587. package/store/auth.js +23 -4
  588. package/store/aws.js +53 -6
  589. package/store/catalog.js +22 -6
  590. package/store/cru-resource.ts +26 -0
  591. package/store/customisation.js +35 -0
  592. package/store/features.js +7 -4
  593. package/store/i18n.js +11 -0
  594. package/store/index.js +140 -49
  595. package/store/plugins.js +8 -4
  596. package/store/prefs.js +33 -38
  597. package/store/type-map.js +288 -213
  598. package/store/type-map.utils.ts +226 -0
  599. package/tsconfig.json +34 -9
  600. package/tsconfig.paths.json +21 -0
  601. package/types/components/labeledSelect.ts +50 -0
  602. package/types/resources/settings.d.ts +32 -0
  603. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  604. package/types/shell/index.d.ts +1045 -770
  605. package/types/store/dashboard-store.types.ts +42 -0
  606. package/types/store/pagination.types.ts +457 -0
  607. package/types/store/type-map.ts +30 -0
  608. package/types/store/vuex.d.ts +9 -0
  609. package/types/vue-shim.d.ts +51 -0
  610. package/utils/__tests__/cluster.test.ts +20 -18
  611. package/utils/__tests__/create-yaml.test.ts +359 -2
  612. package/utils/__tests__/kontainer.test.ts +180 -0
  613. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  614. package/utils/alertmanagerconfig.js +19 -0
  615. package/utils/array.ts +40 -1
  616. package/utils/async.ts +2 -0
  617. package/utils/auth.js +152 -4
  618. package/utils/axios.js +2 -21
  619. package/utils/azure.js +24 -0
  620. package/utils/banners.js +103 -0
  621. package/utils/clipboard.js +5 -0
  622. package/utils/cluster.js +1 -1
  623. package/utils/config.js +4 -0
  624. package/utils/create-yaml.js +59 -28
  625. package/utils/custom-validators.js +0 -2
  626. package/utils/error.js +41 -1
  627. package/utils/formatter.js +5 -3
  628. package/utils/git.ts +1 -1
  629. package/utils/install-redirect.js +1 -1
  630. package/utils/kontainer.ts +190 -0
  631. package/utils/object.js +24 -0
  632. package/utils/pagination-utils.ts +154 -0
  633. package/utils/pod-security-admission.ts +1 -1
  634. package/utils/router.js +86 -0
  635. package/utils/settings.ts +46 -0
  636. package/utils/time.js +2 -1
  637. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  638. package/utils/url.ts +1 -1
  639. package/utils/validators/formRules/__tests__/index.test.ts +70 -4
  640. package/utils/validators/formRules/index.ts +15 -9
  641. package/utils/validators/index.js +1 -0
  642. package/utils/validators/setting.js +6 -10
  643. package/utils/version.js +2 -1
  644. package/vue.config.js +377 -401
  645. package/.DS_Store +0 -0
  646. package/assets/images/providers/aks-black.svg +0 -28
  647. package/assets/images/providers/aks.svg +0 -31
  648. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  649. package/components/ChartPsp.vue +0 -76
  650. package/components/EventsTable.vue +0 -67
  651. package/components/TabbedLinks/index.vue +0 -94
  652. package/components/__tests__/ChartPsp.test.ts +0 -75
  653. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
  654. package/components/nuxt/nuxt-link.server.js +0 -16
  655. package/components/nuxt/nuxt.js +0 -101
  656. package/config/router.js +0 -408
  657. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
  658. package/initialize/App.js +0 -198
  659. package/initialize/client.js +0 -875
  660. package/initialize/index.js +0 -364
  661. package/initialize/layouts.ts +0 -26
  662. package/middleware/i18n.js +0 -10
  663. package/middleware/unauthenticated.js +0 -22
  664. package/mixins/fetch.server.js +0 -73
  665. package/pages/c/_cluster/apps/index.vue +0 -17
  666. package/pages/c/_cluster/auth/index.vue +0 -19
  667. package/pages/c/_cluster/index.vue +0 -17
  668. package/pages/c/_cluster/legacy/index.vue +0 -22
  669. package/pages/c/_cluster/manager/index.vue +0 -22
  670. package/pages/c/_cluster/mcapps/index.vue +0 -21
  671. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  672. package/pages/c/index.vue +0 -9
  673. package/pages/rio/mesh.vue +0 -508
  674. package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
  675. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  676. package/plugins/portal-vue.js +0 -4
  677. package/plugins/portal.js +0 -4
  678. package/plugins/resize.js +0 -5
  679. package/plugins/shortkey.js +0 -4
  680. package/plugins/tooltip.js +0 -4
  681. package/plugins/transitions.js +0 -4
  682. package/plugins/v-select.js +0 -4
  683. package/plugins/vue-clipboard2.js +0 -4
  684. package/tsconfig.default.json +0 -46
  685. package/utils/group.js +0 -70
  686. package/utils/nuxt.js +0 -659
  687. package/utils/router.scrollBehavior.js +0 -80
  688. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  689. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  690. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  691. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  692. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  693. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  694. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  695. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  696. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  697. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  698. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  699. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
2
2
  import { NODE as NODE_TYPE } from '@shell/config/types';
3
- import { COLUMN_BREAKPOINTS } from '@shell/components/SortableTable/index.vue';
3
+ import { COLUMN_BREAKPOINTS } from '@shell/types/store/type-map';
4
4
 
5
5
  // Note: 'id' is always the last sort, so you don't have to specify it here.
6
6
 
@@ -15,6 +15,17 @@ export const STATE = {
15
15
  formatter: 'BadgeStateFormatter',
16
16
  };
17
17
 
18
+ export const USER_STATE = {
19
+ name: 'user-state',
20
+ labelKey: 'tableHeaders.userState',
21
+ sort: ['stateSort', 'nameSort'],
22
+ value: 'stateDisplay',
23
+ getValue: (row) => row.stateDisplay,
24
+ width: 72,
25
+ default: 'unknown',
26
+ formatter: 'BadgeStateFormatter',
27
+ };
28
+
18
29
  export const DOWNLOAD = {
19
30
  name: 'download',
20
31
  labelKey: 'tableHeaders.download',
@@ -361,6 +372,13 @@ export const KEYS = {
361
372
  value: 'keysDisplay',
362
373
  };
363
374
 
375
+ export const SECRET_DATA = {
376
+ name: 'data',
377
+ labelKey: 'tableHeaders.data',
378
+ value: 'dataPreview',
379
+ formatter: 'SecretData'
380
+ };
381
+
364
382
  export const TARGET_KIND = {
365
383
  name: 'target-kind',
366
384
  labelKey: 'tableHeaders.targetKind',
@@ -733,6 +751,29 @@ export const FLEET_SUMMARY = {
733
751
  width: 100,
734
752
  };
735
753
 
754
+ export const FLEET_REPO_CLUSTER_SUMMARY = {
755
+ name: 'clusterSummary',
756
+ labelKey: 'tableHeaders.clusterResources',
757
+ value: 'status.resourceCounts',
758
+ sort: false,
759
+ search: false,
760
+ formatter: 'FleetClusterSummaryGraph',
761
+ align: 'center',
762
+ width: 100,
763
+ };
764
+
765
+ export const FLEET_REPO_PER_CLUSTER_STATE = {
766
+ name: 'perClusterState',
767
+ labelKey: 'tableHeaders.repoPerClusterState',
768
+ tooltip: 'tableHeaders.repoPerClusterStateTooltip',
769
+ sort: ['stateSort', 'nameSort'],
770
+ width: 100,
771
+ default: 'unknown',
772
+ formatter: 'BadgeStateFormatter',
773
+ formatterOpts: { arbitrary: true }
774
+
775
+ };
776
+
736
777
  export const APP_SUMMARY = {
737
778
  name: 'summary',
738
779
  labelKey: 'tableHeaders.resources',
@@ -998,6 +1039,30 @@ export const FLEET_BUNDLE_TYPE = {
998
1039
  width: 100,
999
1040
  };
1000
1041
 
1042
+ export const FLEET_REPO_CLUSTERS_READY = {
1043
+ name: 'clustersReady',
1044
+ labelKey: 'tableHeaders.clustersReady',
1045
+ value: 'status.readyClusters',
1046
+ sort: 'status.readyClusters',
1047
+ search: false,
1048
+ };
1049
+
1050
+ export const FLEET_REPO_TARGET = {
1051
+ name: 'target',
1052
+ labelKey: 'tableHeaders.target',
1053
+ value: 'targetInfo.modeDisplay',
1054
+ sort: ['targetInfo.modeDisplay', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
1055
+
1056
+ };
1057
+
1058
+ export const FLEET_REPO = {
1059
+ name: 'repo',
1060
+ labelKey: 'tableHeaders.repo',
1061
+ value: 'repoDisplay',
1062
+ sort: 'repoDisplay',
1063
+ search: ['spec.repo', 'status.commit'],
1064
+ };
1065
+
1001
1066
  export const UI_PLUGIN_CATALOG = [
1002
1067
  {
1003
1068
  name: 'state',
package/config/types.js CHANGED
@@ -4,7 +4,10 @@
4
4
 
5
5
  // Steve-specific virtual types
6
6
  // Base: /v1
7
- export const STEVE = { PREFERENCE: 'userpreference' };
7
+ export const STEVE = {
8
+ PREFERENCE: 'userpreference',
9
+ SCHEMA_DEFINITION: 'schemaDefinition'
10
+ };
8
11
 
9
12
  // Old APIs via Norman
10
13
  // Base: /v3
@@ -14,7 +17,7 @@ export const NORMAN = {
14
17
  ETCD_BACKUP: 'etcdbackup',
15
18
  CLUSTER: 'cluster',
16
19
  CLUSTER_TOKEN: 'clusterregistrationtoken',
17
- CLUSTER_ROLE_TEMPLATE_BINDING: 'clusterRoleTemplateBinding',
20
+ CLUSTER_ROLE_TEMPLATE_BINDING: 'clusterroletemplatebinding',
18
21
  CLOUD_CREDENTIAL: 'cloudcredential',
19
22
  FLEET_WORKSPACES: 'fleetworkspace',
20
23
  GLOBAL_ROLE: 'globalRole',
@@ -26,10 +29,13 @@ export const NORMAN = {
26
29
  PRINCIPAL: 'principal',
27
30
  PROJECT: 'project',
28
31
  PROJECT_ROLE_TEMPLATE_BINDING: 'projectroletemplatebinding',
32
+ SETTING: 'setting',
29
33
  SPOOFED: { GROUP_PRINCIPAL: 'group.principal' },
30
34
  ROLE_TEMPLATE: 'roleTemplate',
31
35
  TOKEN: 'token',
32
36
  USER: 'user',
37
+ KONTAINER_DRIVER: 'kontainerDriver',
38
+ NODE_DRIVER: 'nodeDriver'
33
39
  };
34
40
 
35
41
  // Public (via Norman)
@@ -53,8 +59,6 @@ export const NODE = 'node';
53
59
  export const NETWORK_POLICY = 'networking.k8s.io.networkpolicy';
54
60
  export const POD = 'pod';
55
61
  export const POD_DISRUPTION_BUDGET = 'policy.poddisruptionbudget';
56
- export const PSP = 'policy.podsecuritypolicy';
57
- export const PSPS = 'policy.podsecuritypolicies';
58
62
  export const PV = 'persistentvolume';
59
63
  export const PVC = 'persistentvolumeclaim';
60
64
  export const RESOURCE_QUOTA = 'resourcequota';
@@ -126,19 +130,17 @@ export const MONITORING = {
126
130
  SERVICEMONITOR: 'monitoring.coreos.com.servicemonitor',
127
131
  THANOSRULER: 'monitoring.coreos.com.thanosruler',
128
132
  SPOOFED: {
129
- RECEIVER: 'monitoring.coreos.com.receiver',
130
- RECEIVER_SPEC: 'monitoring.coreos.com.receiver.spec',
131
- RECEIVER_EMAIL: 'monitoring.coreos.com.receiver.email',
132
- RECEIVER_SLACK: 'monitoring.coreos.com.receiver.slack',
133
- RECEIVER_WEBHOOK: 'monitoring.coreos.com.receiver.webhook',
134
- RECEIVER_PAGERDUTY: 'monitoring.coreos.com.receiver.pagerduty',
135
- RECEIVER_OPSGENIE: 'monitoring.coreos.com.receiver.opsgenie',
136
- RECEIVER_HTTP_CONFIG: 'monitoring.coreos.com.receiver.httpconfig',
137
- RESPONDER: 'monitoring.coreos.com.receiver.responder',
138
- ROUTE: 'monitoring.coreos.com.route',
139
- ROUTE_SPEC: 'monitoring.coreos.com.route.spec',
140
- ALERTMANAGERCONFIG_RECEIVER_SPEC: 'monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.receivers',
141
- ALERTMANAGERCONFIG_ROUTE_SPEC: 'monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.route'
133
+ RECEIVER: 'monitoring.coreos.com.receiver',
134
+ RECEIVER_SPEC: 'monitoring.coreos.com.receiver.spec',
135
+ RECEIVER_EMAIL: 'monitoring.coreos.com.receiver.email',
136
+ RECEIVER_SLACK: 'monitoring.coreos.com.receiver.slack',
137
+ RECEIVER_WEBHOOK: 'monitoring.coreos.com.receiver.webhook',
138
+ RECEIVER_PAGERDUTY: 'monitoring.coreos.com.receiver.pagerduty',
139
+ RECEIVER_OPSGENIE: 'monitoring.coreos.com.receiver.opsgenie',
140
+ RECEIVER_HTTP_CONFIG: 'monitoring.coreos.com.receiver.httpconfig',
141
+ RESPONDER: 'monitoring.coreos.com.receiver.responder',
142
+ ROUTE: 'monitoring.coreos.com.route',
143
+ ROUTE_SPEC: 'monitoring.coreos.com.route.spec',
142
144
  }
143
145
  };
144
146
 
@@ -183,14 +185,13 @@ export const MANAGEMENT = {
183
185
  TOKEN: 'management.cattle.io.token',
184
186
  GLOBAL_ROLE: 'management.cattle.io.globalrole',
185
187
  GLOBAL_ROLE_BINDING: 'management.cattle.io.globalrolebinding',
186
- POD_SECURITY_POLICY_TEMPLATE: 'management.cattle.io.podsecuritypolicytemplate',
187
- PSP_TEMPLATE_BINDING: 'management.cattle.io.podsecuritypolicytemplateprojectbinding',
188
188
  PSA: 'management.cattle.io.podsecurityadmissionconfigurationtemplate',
189
189
  MANAGED_CHART: 'management.cattle.io.managedchart',
190
190
  USER_NOTIFICATION: 'management.cattle.io.rancherusernotification',
191
191
  GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
192
192
  RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
193
193
  RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
194
+ CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig'
194
195
  };
195
196
 
196
197
  export const CAPI = {
@@ -283,7 +284,8 @@ export const UI = { NAV_LINK: 'ui.cattle.io.navlink' };
283
284
  export const VIRTUAL_TYPES = {
284
285
  CLUSTER_MEMBERS: 'cluster-members',
285
286
  PROJECT_NAMESPACES: 'projects-namespaces',
286
- NAMESPACES: 'namespaces'
287
+ NAMESPACES: 'namespaces',
288
+ JWT_AUTHENTICATION: 'jwt.authentication'
287
289
  };
288
290
 
289
291
  // harvester
@@ -314,3 +316,16 @@ export const AUTH_TYPE = {
314
316
  };
315
317
 
316
318
  export const LOCAL_CLUSTER = 'local';
319
+
320
+ export const CLUSTER_REPO_TYPES = {
321
+ HELM_URL: 'helm-url',
322
+ GIT_REPO: 'git-repo',
323
+ OCI_URL: 'oci-url'
324
+ };
325
+
326
+ export const ZERO_TIME = '0001-01-01T00:00:00Z';
327
+
328
+ export const DEFAULT_GRAFANA_STORAGE_SIZE = '10Gi';
329
+
330
+ export const DEPRECATED = 'Deprecated';
331
+ export const EXPERIMENTAL = 'Experimental';
@@ -1,10 +1,11 @@
1
1
  import semver from 'semver';
2
2
 
3
3
  // Version of the plugin API supported
4
- export const UI_PLUGIN_API_VERSION = '1.2.0';
4
+ // here we inject the current shell version that we read in vue.config
5
+ export const UI_EXTENSIONS_API_VERSION = process.env.UI_EXTENSIONS_API_VERSION;
5
6
  export const UI_PLUGIN_HOST_APP = 'rancher-manager';
6
7
 
7
- export const UI_PLUGIN_BASE_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy';
8
+ export const UI_PLUGIN_BASE_URL = '/v1/uiplugins';
8
9
 
9
10
  export const UI_PLUGIN_NAMESPACE = 'cattle-ui-plugin-system';
10
11
 
@@ -90,6 +91,8 @@ export function uiPluginAnnotation(chart, name) {
90
91
  return undefined;
91
92
  }
92
93
 
94
+ // i18n-uses plugins.error.generic, plugins.error.api, plugins.error.host
95
+
93
96
  // Should we load a plugin, based on the metadata returned by the backend?
94
97
  // Returns error key string or false
95
98
  export function shouldNotLoadPlugin(plugin, rancherVersion, loadedPlugins) {
@@ -98,9 +101,11 @@ export function shouldNotLoadPlugin(plugin, rancherVersion, loadedPlugins) {
98
101
  }
99
102
 
100
103
  // Plugin specified a required extension API version
101
- const requiredAPI = plugin.metadata?.[UI_PLUGIN_METADATA.EXTENSION_VERSION];
104
+ // we are propagating the annotations in pkg/package.json for any extension
105
+ // inside the "spec.plugin.metadata" property of UIPlugin resource
106
+ const requiredAPI = plugin.spec?.plugin?.metadata?.[UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION];
102
107
 
103
- if (requiredAPI && !semver.satisfies(UI_PLUGIN_API_VERSION, requiredAPI)) {
108
+ if (requiredAPI && !semver.satisfies(UI_EXTENSIONS_API_VERSION, requiredAPI)) {
104
109
  return 'plugins.error.api';
105
110
  }
106
111
 
@@ -141,7 +146,7 @@ export function isSupportedChartVersion(versionsData) {
141
146
  // Plugin specified a required extension API version
142
147
  const requiredAPI = version.annotations?.[UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION];
143
148
 
144
- if (requiredAPI && !semver.satisfies(UI_PLUGIN_API_VERSION, requiredAPI)) {
149
+ if (requiredAPI && !semver.satisfies(UI_EXTENSIONS_API_VERSION, requiredAPI)) {
145
150
  return false;
146
151
  }
147
152
 
@@ -4,16 +4,14 @@ import { ucFirst, randomStr } from '@shell/utils/string';
4
4
  import {
5
5
  _EDIT, _CONFIG, _DETAIL, _LIST, _CREATE
6
6
  } from '@shell/config/query-params';
7
- import { getProductFromRoute } from '@shell/middleware/authenticated';
7
+ import { getProductFromRoute } from '@shell/utils/router';
8
8
  import { isEqual } from '@shell/utils/object';
9
9
 
10
- function checkRouteProduct({ name, params, query }, locationConfigParam) {
11
- const product = getProductFromRoute({
12
- name, params, query
13
- });
10
+ function checkRouteProduct($route, locationConfigParam) {
11
+ const product = getProductFromRoute($route);
14
12
 
15
13
  // alias for the homepage
16
- if (locationConfigParam === 'home' && name === 'home') {
14
+ if (locationConfigParam === 'home' && $route.name === 'home') {
17
15
  return true;
18
16
  } else if (locationConfigParam === product) {
19
17
  return true;
@@ -6,20 +6,8 @@ interface RouteInfo {
6
6
  route: RouteConfig;
7
7
  }
8
8
 
9
- interface RouteInstallInfo {
10
- plugin: string;
11
- route: RouteConfig;
12
- }
13
-
14
- type RouteInstallHistory = {
15
- [route: string]: RouteInstallInfo[]
16
- }
17
-
18
9
  export class PluginRoutes {
19
10
  router: Router;
20
- pluginRoutes: RouteConfig[] = [];
21
-
22
- replacedRoutes: RouteInstallHistory = {};
23
11
 
24
12
  constructor(router: Router) {
25
13
  this.router = router;
@@ -34,70 +22,25 @@ export class PluginRoutes {
34
22
  });
35
23
  }
36
24
 
37
- // Ensure we put back any routes that the plugin that is being uninstalled added
38
- public uninstall(plugin: any) {
39
- // List of routes we need to restore
40
- const restore: RouteInfo[] = [];
41
-
42
- Object.keys(this.replacedRoutes).forEach((routeName) => {
43
- const info = this.replacedRoutes[routeName];
44
-
45
- for (let index = 0; index < info.length; index++) {
46
- const savedRoute = info[index];
47
-
48
- if (savedRoute.plugin === plugin.id) {
49
- // The plugin that is being uninstalled replaced an existing route that we will restore
50
- if (index === 0) {
51
- // Need to restore the previous route, since the plugin owned the active route
52
- info.shift();
53
-
54
- restore.push({ route: savedRoute.route });
55
-
56
- break;
57
- } else {
58
- // Need to update the previous item so that when it is removed, it restores the correct route
59
- const previous = info[index - 1];
60
-
61
- previous.route = savedRoute.route;
62
- info.splice(index, 1);
63
-
64
- break;
65
- }
66
- }
67
- }
68
- });
69
-
70
- // Remove routes from pluginRoutes, update matcher (to avoid dupes when re-adding plugin routes)
71
- this.pluginRoutes = this.pluginRoutes.filter((pR) => !plugin.routes.find((r: any) => pR === r.route));
72
- this.updateMatcher([], [
73
- ...this.pluginRoutes,
74
- ...(this.router.options.routes || [])
75
- ]);
76
-
77
- // Restore appropriate routes
78
- if (restore.length > 0) {
79
- this.addRoutes(null, restore);
80
- }
81
- }
82
-
83
- public addRoutes(plugin: any, routes: RouteInfo[]) {
25
+ public addRoutes(plugin: any, newRouteInfos: RouteInfo[]) {
84
26
  const allRoutes = [
85
- ...this.pluginRoutes,
86
27
  ...(this.router.options.routes || [])
87
28
  ];
88
29
 
89
30
  // Need to take into account if routes are being replaced
90
31
  // Despite what the docs say, routes are not replaced, so we use a workaround
91
32
  // Remove all routes that are being replaced
92
- routes.forEach((r: RouteInfo) => {
33
+ const newRoutes = newRouteInfos.map((ri) => ri.route);
34
+
35
+ this.forEachNestedRoutes(newRoutes, (r: RouteConfig) => {
93
36
  // Patch colliding legacy routes that start /:product
94
- if (r.route.path?.startsWith('/:product')) {
37
+ if (r.path?.startsWith('/:product')) {
95
38
  // Legacy pattern used by extensions - routes may collide, so modify them not to
96
39
  let productName;
97
40
 
98
41
  // If the route has a name (which is always the case for the extensions we have written), use it to get the product name
99
- if (r.route.name) {
100
- const nameParts = r.route.name.split('-');
42
+ if (r.name) {
43
+ const nameParts = r.name.split('-');
101
44
 
102
45
  // First part of the route name is the product name
103
46
  productName = nameParts[0];
@@ -107,74 +50,40 @@ export class PluginRoutes {
107
50
  productName = productName || plugin.name;
108
51
 
109
52
  // Replace the path - removing :product and using the actual product name instead - this avoids route collisions
110
- r.route.path = `/${ productName }${ r.route.path.substr(9) }`;
111
- r.route.meta = r.route.meta || {};
112
-
113
- r.route.meta.product = r.route.meta.product || productName;
114
- }
115
-
116
- // See if the route exists
117
- let existing: any;
118
-
119
- if (r.parent) {
120
- const pExisting = allRoutes.findIndex((route: any) => route.name === r.parent) as any;
121
- const path = `${ pExisting.path }${ r.route.path }`;
122
-
123
- // TODO: Validate
124
- existing = allRoutes.findIndex((route: any) => route.path === path);
125
- } else {
126
- // no parent route
127
- existing = allRoutes.findIndex((route: any) => route.name === r.route.name);
128
- }
129
-
130
- if (existing >= 0) {
131
- const existingRoute = allRoutes[existing];
132
-
133
- // Store the route so we can restore it on uninstall
134
- if (plugin && existingRoute?.name) {
135
- if (!this.replacedRoutes[existingRoute.name]) {
136
- this.replacedRoutes[existingRoute.name] = [];
137
- }
138
-
139
- this.replacedRoutes[existingRoute.name].unshift({
140
- plugin: plugin.id,
141
- route: existingRoute
142
- });
143
- }
53
+ r.path = `/${ productName }${ r.path.substr(9) }`;
54
+ r.meta = r.meta || {};
144
55
 
145
- allRoutes.splice(existing, 1);
56
+ r.meta.product = r.meta.product || productName;
146
57
  }
147
58
  });
148
59
 
149
- this.updateMatcher(routes, allRoutes);
60
+ this.updateMatcher(newRouteInfos, allRoutes);
150
61
  }
151
62
 
152
63
  private updateMatcher(newRoutes: RouteInfo[], allRoutes: RouteConfig[]) {
153
64
  // Note - Always use a new router and replace the existing router's matching
154
- // Using the existing router and adding routes to it will force nuxt middleware (specifically authenticated on default layout) to
65
+ // Using the existing router and adding routes to it will force nuxt middleware to
155
66
  // execute many times (nuxt middleware boils down to router.beforeEach). This issue was seen refreshing in a harvester cluster with a
156
67
  // dynamically loaded cluster
157
68
 
158
- const pluginRoutesWithParents: any[] = [];
159
69
  const orderedPluginRoutes: any[] = [];
160
70
 
161
- // separate plugin routes that have parent and not
162
- newRoutes.forEach((r: any) => {
71
+ // separate plugin routes that have parent and not, you want to push the new routes in REVERSE order to the front of the existing list so that the order of routes specified by the extension is preserved
72
+ newRoutes.reverse().forEach((r: any) => {
163
73
  let foundParentRoute;
164
74
 
165
75
  if (r.parent) {
166
- foundParentRoute = allRoutes.find((route) => route.name === r.parent);
76
+ foundParentRoute = this.findInNestedRoutes(allRoutes, (route: RouteConfig) => route.name === r.parent);
167
77
 
168
78
  if (foundParentRoute) {
169
- pluginRoutesWithParents.push(r);
79
+ foundParentRoute.children = foundParentRoute?.children || [];
80
+ foundParentRoute.children.unshift(r.route);
170
81
  }
171
82
  }
172
83
 
173
84
  if (!foundParentRoute) {
174
- orderedPluginRoutes.push(r.route);
85
+ orderedPluginRoutes.unshift(r.route);
175
86
  }
176
-
177
- this.pluginRoutes.push(r.route);
178
87
  });
179
88
 
180
89
  const newRouter: Router = new Router({
@@ -182,12 +91,45 @@ export class PluginRoutes {
182
91
  routes: [...orderedPluginRoutes, ...allRoutes]
183
92
  });
184
93
 
185
- // handle plugin routes with parent
186
- pluginRoutesWithParents.forEach((r: any) => {
187
- newRouter.addRoute(r.parent, r.route);
94
+ (this.router as any).matcher = (newRouter as any).matcher;
95
+ }
96
+
97
+ /**
98
+ * Traverse the entire tree of nested routes
99
+ *
100
+ * @param routes The routes we wish to traverse through
101
+ * @param fn -> Return true if you'd like to break the loop early (small)
102
+ * @returns {@boolean} -> Returns true if breaking early
103
+ */
104
+ private forEachNestedRoutes(routes: RouteConfig[] = [], fn: (route: RouteConfig) => boolean | undefined | void) {
105
+ for (let i = 0; i < routes.length; ++i) {
106
+ const route = routes[i];
107
+ const result = fn(route);
108
+
109
+ if (result || this.forEachNestedRoutes(route.children, fn)) {
110
+ return true;
111
+ }
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Find a route that matches the criteria defined by fn.
117
+ *
118
+ * @param routes The routes we wish to search through
119
+ * @param fn -> Returns true if the passed in route matches the expected criteria
120
+ * @returns The found route or undefined
121
+ */
122
+ private findInNestedRoutes(routes: RouteConfig[] = [], fn: (route: RouteConfig) => boolean): RouteConfig | undefined {
123
+ let found: any;
124
+
125
+ this.forEachNestedRoutes(routes, (route) => {
126
+ if (fn(route)) {
127
+ found = route;
128
+
129
+ return true;
130
+ }
188
131
  });
189
132
 
190
- // Typing is incorrect
191
- (this.router as any).matcher = (newRouter as any).matcher;
133
+ return found;
192
134
  }
193
135
  }
package/core/plugin.ts CHANGED
@@ -15,7 +15,6 @@ import {
15
15
  PluginRouteConfig, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig, OnNavToPackage, OnNavAwayFromPackage, OnLogOut
16
16
  } from './types';
17
17
  import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
18
- import { registerLayout } from '@shell/initialize/layouts';
19
18
 
20
19
  export type ProductFunction = (plugin: IPlugin, store: any) => void;
21
20
 
@@ -120,12 +119,27 @@ export class Plugin implements IPlugin {
120
119
  const parent: string | undefined = hasParent ? parentOrRoute as string : undefined;
121
120
  const route: RouteConfig = hasParent ? optionalRoute as RouteConfig : parentOrRoute as RouteConfig;
122
121
 
122
+ let parentOverride;
123
+
124
+ if (!parent) {
125
+ // TODO: Inspecting the route object in the browser clearly indicates it's not a RouteConfig. The type needs to be changed or at least extended.
126
+ const typelessRoute: any = route;
127
+
128
+ if (typelessRoute.component?.layout) {
129
+ console.warn(`Layouts have been deprecated. We still have parent routes which use the same name and styling as the previous layouts. \n\nFound a component ${ typelessRoute.component.name } with the '${ typelessRoute.component.layout }' layout specified `); // eslint-disable-line no-console
130
+ parentOverride = typelessRoute.component.layout.toLowerCase();
131
+ } else {
132
+ console.warn(`Layouts have been deprecated. We still have parent routes which use the same name and styling as the previous layouts. You should specify a parent, we're currently setting the parent to 'default'`); // eslint-disable-line no-console
133
+ parentOverride = 'default';
134
+ }
135
+ }
136
+
123
137
  route.meta = {
124
138
  ...route?.meta,
125
139
  pkg: this.name,
126
140
  };
127
141
 
128
- this.routes.push({ parent, route });
142
+ this.routes.push({ parent: parentOverride || parent, route });
129
143
  }
130
144
 
131
145
  private _addUIConfig(type: string, where: string, when: LocationConfig | string, config: any) {
@@ -250,11 +264,12 @@ export class Plugin implements IPlugin {
250
264
  }
251
265
 
252
266
  public register(type: string, name: string, fn: Function) {
267
+ const allowPaths = ['models', 'image'];
253
268
  const nparts = name.split('/');
254
269
 
255
270
  // Support components in a sub-folder - component_name/index.vue (and ignore other componnets in that folder)
256
271
  // Allow store-scoped models via sub-folder - pkgname/models/storename/type will be registered as storename/type to avoid overwriting shell/models/type
257
- if (nparts.length === 2 && type !== 'models') {
272
+ if (nparts.length === 2 && !allowPaths.includes(type)) {
258
273
  if (nparts[1] !== 'index') {
259
274
  return;
260
275
  }
@@ -268,14 +283,6 @@ export class Plugin implements IPlugin {
268
283
  }
269
284
 
270
285
  this.l10n[name].push(fn);
271
- } else if (type === 'layouts') {
272
- fn().then((component: any) => {
273
- if (component.default) {
274
- registerLayout(name, component.default);
275
- } else {
276
- console.error(`Failed to load layout ${ name } because the file didn't export a default component.`); // eslint-disable-line no-console
277
- }
278
- });
279
286
  } else {
280
287
  if (!this.types[type]) {
281
288
  this.types[type] = {};
@@ -20,14 +20,12 @@ export default function({
20
20
  dynamicLoader.default($plugin);
21
21
  }
22
22
 
23
- if (process.client) {
24
- // The libraries we build have Vue externalised, so we need to expose Vue as a global for
25
- // them to pick up - see: https://cli.vuejs.org/guide/build-targets.html#library
26
- window.Vue = Vue;
23
+ // The libraries we build have Vue externalised, so we need to expose Vue as a global for
24
+ // them to pick up - see: https://cli.vuejs.org/guide/build-targets.html#library
25
+ window.Vue = Vue;
27
26
 
28
- // Global libraries - allows us to externalise these to reduce package bundle size
29
- window.$ = $;
30
- window.__jszip = JSZip;
31
- window.__jsyaml = jsyaml;
32
- }
27
+ // Global libraries - allows us to externalise these to reduce package bundle size
28
+ window.$ = $;
29
+ window.__jszip = JSZip;
30
+ window.__jsyaml = jsyaml;
33
31
  }