@rancher/shell 0.1.0 → 0.1.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 (595) hide show
  1. package/assets/styles/base/_basic.scss +0 -1
  2. package/assets/styles/base/_variables.scss +2 -0
  3. package/assets/styles/global/_labeled-input.scss +6 -1
  4. package/assets/styles/global/_select.scss +9 -0
  5. package/assets/styles/vendor/vue-js-modal.scss +4 -0
  6. package/assets/translations/en-us.yaml +240 -16
  7. package/assets/translations/zh-hans.yaml +335 -111
  8. package/chart/example.vue +1 -1
  9. package/chart/istio.vue +2 -2
  10. package/chart/logging/index.vue +2 -2
  11. package/chart/monitoring/alerting/index.vue +2 -2
  12. package/chart/monitoring/grafana/index.vue +2 -2
  13. package/chart/monitoring/index.vue +2 -2
  14. package/chart/monitoring/prometheus/index.vue +4 -4
  15. package/chart/rancher-alerting-drivers.vue +17 -3
  16. package/chart/rancher-backup/S3.vue +37 -4
  17. package/chart/rancher-backup/index.vue +3 -3
  18. package/cloud-credential/aws.vue +1 -1
  19. package/cloud-credential/azure.vue +1 -1
  20. package/cloud-credential/digitalocean.vue +1 -1
  21. package/cloud-credential/gcp.vue +1 -1
  22. package/cloud-credential/generic.vue +1 -1
  23. package/cloud-credential/harvester.vue +2 -2
  24. package/cloud-credential/linode.vue +1 -1
  25. package/cloud-credential/s3.vue +2 -2
  26. package/cloud-credential/vmwarevsphere.vue +1 -1
  27. package/components/ActionMenu.vue +11 -1
  28. package/components/Alert.vue +1 -1
  29. package/components/AssignTo.vue +2 -2
  30. package/components/AsyncButton.vue +25 -12
  31. package/components/AwsComplianceBanner.vue +44 -0
  32. package/components/BannerGraphic.vue +11 -2
  33. package/components/ChartReadme.vue +10 -2
  34. package/components/CompoundStatusBadge.vue +50 -0
  35. package/components/CopyToClipboardText.vue +25 -4
  36. package/components/CruResource.vue +185 -16
  37. package/components/CruResourceFooter.vue +17 -1
  38. package/components/EtcdInfoBanner.vue +1 -1
  39. package/components/FilterLabel.vue +254 -0
  40. package/components/GlobalRoleBindings.vue +2 -2
  41. package/components/GrafanaDashboard.vue +1 -1
  42. package/components/GrowlManager.vue +20 -9
  43. package/components/HarvesterServiceAddOnConfig.vue +2 -2
  44. package/components/Import.vue +2 -2
  45. package/components/LandingPagePreference.vue +2 -2
  46. package/components/Markdown.vue +44 -12
  47. package/components/ModalWithCard.vue +2 -2
  48. package/components/MoveModal.vue +1 -1
  49. package/components/PercentageBar.vue +1 -1
  50. package/components/PromptChangePassword.vue +1 -1
  51. package/components/PromptModal.vue +13 -2
  52. package/components/PromptRemove.vue +64 -33
  53. package/components/PromptRestore.vue +3 -3
  54. package/components/Questions/Boolean.vue +1 -1
  55. package/components/Questions/Float.vue +1 -1
  56. package/components/Questions/Int.vue +1 -1
  57. package/components/Questions/Reference.vue +1 -1
  58. package/components/Questions/String.vue +1 -1
  59. package/components/RelatedResources.vue +1 -1
  60. package/components/RelatedWorkloadsTable.vue +3 -1
  61. package/components/ResourceDetail/Masthead.vue +27 -9
  62. package/components/ResourceDetail/index.vue +72 -7
  63. package/components/ResourceList/Masthead.vue +22 -0
  64. package/components/ResourceList/ResourceLoadingIndicator.vue +137 -0
  65. package/components/ResourceList/index.vue +42 -7
  66. package/components/ResourceTable.vue +11 -2
  67. package/components/ResourceYaml.vue +7 -1
  68. package/components/SelectIconGrid.vue +14 -1
  69. package/components/SortableTable/THead.vue +1 -1
  70. package/components/SortableTable/debug.js +117 -0
  71. package/components/SortableTable/index.vue +200 -43
  72. package/components/SortableTable/paging.js +2 -12
  73. package/components/SortableTable/selection.js +3 -0
  74. package/components/SortableTable/sorting.js +3 -1
  75. package/components/Tabbed/Tab.vue +25 -4
  76. package/components/Tabbed/index.vue +133 -119
  77. package/components/TypeDescription.vue +1 -1
  78. package/components/VMConsoleBar.vue +1 -1
  79. package/components/Wizard.vue +53 -14
  80. package/components/YamlEditor.vue +10 -0
  81. package/components/__tests__/CopyCode.test.ts +1 -7
  82. package/components/__tests__/CruResource.test.ts +1 -8
  83. package/components/auth/AllowedPrincipals.vue +1 -1
  84. package/components/auth/AuthBanner.vue +2 -1
  85. package/components/auth/AzureWarning.vue +69 -0
  86. package/components/auth/RoleDetailEdit.vue +4 -4
  87. package/components/auth/login/ldap.vue +1 -1
  88. package/components/cards/ApplicationCard.vue +140 -0
  89. package/components/dialog/AddClusterMemberDialog.vue +1 -1
  90. package/components/dialog/AddCustomBadgeDialog.vue +4 -4
  91. package/components/dialog/AddProjectMemberDialog.vue +2 -2
  92. package/components/dialog/AddonConfigConfirmationDialog.vue +1 -1
  93. package/components/dialog/DrainNode.vue +3 -3
  94. package/components/dialog/ForceMachineRemoveDialog.vue +2 -2
  95. package/components/dialog/GenericPrompt.vue +2 -2
  96. package/components/dialog/RollbackWorkloadDialog.vue +2 -2
  97. package/components/dialog/RotateCertificatesDialog.vue +3 -3
  98. package/components/dialog/RotateEncryptionKeyDialog.vue +11 -6
  99. package/components/dialog/SaveAsRKETemplateDialog.vue +3 -3
  100. package/components/dialog/harvester/AddHotplugModal.vue +3 -3
  101. package/components/dialog/harvester/BackupModal.vue +3 -3
  102. package/components/dialog/harvester/CloneTemplate.vue +3 -3
  103. package/components/dialog/harvester/EjectCDROMDialog.vue +3 -3
  104. package/components/dialog/harvester/ExportImageDialog.vue +3 -3
  105. package/components/dialog/harvester/MaintenanceDialog.vue +2 -2
  106. package/components/dialog/harvester/MigrationDialog.vue +2 -2
  107. package/components/dialog/harvester/RestoreDialog.vue +2 -2
  108. package/components/dialog/harvester/SupportBundle.vue +2 -2
  109. package/components/dialog/harvester/UnplugVolume.vue +2 -2
  110. package/components/fleet/FleetBundleResources.vue +1 -1
  111. package/components/fleet/FleetBundles.vue +1 -1
  112. package/components/fleet/FleetResources.vue +5 -3
  113. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +17 -0
  114. package/components/fleet/ForceDirectedTreeChart/index.vue +553 -0
  115. package/components/form/ArrayList.vue +22 -3
  116. package/components/form/BannerSettings.vue +3 -3
  117. package/components/form/ChangePassword.vue +2 -2
  118. package/components/form/Command.vue +28 -9
  119. package/components/form/Error.vue +50 -0
  120. package/components/form/Footer.vue +2 -5
  121. package/components/form/HealthCheck.vue +2 -2
  122. package/components/form/HookOption.vue +2 -2
  123. package/components/form/InputWithSelect.vue +12 -2
  124. package/components/form/KeyValue.vue +5 -2
  125. package/components/form/LabeledSelect.vue +27 -14
  126. package/components/form/Labels.vue +12 -0
  127. package/components/form/MatchExpressions.vue +44 -10
  128. package/components/form/Members/ClusterPermissionsEditor.vue +3 -3
  129. package/components/form/Members/MembershipEditor.vue +10 -1
  130. package/components/form/Members/ProjectMembershipEditor.vue +1 -0
  131. package/components/form/NameNsDescription.vue +202 -79
  132. package/components/form/Networking.vue +1 -1
  133. package/components/form/NodeAffinity.vue +41 -26
  134. package/components/form/NodeScheduling.vue +29 -3
  135. package/components/form/NotificationSettings.vue +2 -2
  136. package/components/form/Password.vue +1 -1
  137. package/components/form/PodAffinity.vue +64 -6
  138. package/components/form/PodSecurity.vue +2 -2
  139. package/components/form/Ports.vue +1 -1
  140. package/components/form/Probe.vue +60 -17
  141. package/components/form/ProjectMemberEditor.vue +3 -3
  142. package/components/form/ResourceQuota/NamespaceRow.vue +46 -2
  143. package/components/form/ResourceQuota/Project.vue +4 -0
  144. package/components/form/ResourceTabs/index.vue +19 -7
  145. package/components/form/RuleSelector.vue +1 -1
  146. package/components/form/Security.vue +56 -14
  147. package/components/form/Select.vue +52 -10
  148. package/components/form/SelectOrCreateAuthSecret.vue +70 -31
  149. package/components/form/ServiceNameSelect.vue +1 -1
  150. package/components/form/ServicePorts.vue +10 -2
  151. package/components/form/ShellInput.vue +1 -1
  152. package/components/form/SimpleSecretSelector.vue +2 -2
  153. package/components/form/Tolerations.vue +1 -1
  154. package/components/form/UnitInput.vue +12 -3
  155. package/components/form/ValueFromResource.vue +1 -1
  156. package/components/form/WorkloadPorts.vue +1 -1
  157. package/components/form/__tests__/Command.test.ts +63 -0
  158. package/components/form/__tests__/Error.test.ts +56 -0
  159. package/components/form/__tests__/MatchExpressions.test.ts +79 -0
  160. package/components/form/__tests__/Probe.test.ts +62 -0
  161. package/components/form/__tests__/Security.test.ts +55 -0
  162. package/components/form/__tests__/UnitInput.test.ts +31 -23
  163. package/components/formatter/BadgeStateFormatter.vue +1 -1
  164. package/components/formatter/Capitalize.vue +7 -0
  165. package/components/formatter/ClusterLink.vue +6 -2
  166. package/components/formatter/ClusterProvider.vue +36 -0
  167. package/components/formatter/DelayedValue.vue +43 -0
  168. package/components/formatter/Endpoints.vue +2 -2
  169. package/components/formatter/HarvesterDiskState.vue +1 -1
  170. package/components/formatter/HarvesterIpAddress.vue +37 -18
  171. package/components/formatter/HarvesterMigrationState.vue +1 -1
  172. package/components/formatter/HarvesterVmState.vue +1 -1
  173. package/components/formatter/LinkDetail.vue +11 -2
  174. package/components/formatter/LinkName.vue +2 -2
  175. package/components/formatter/LiveExpiryBadgeState.vue +1 -1
  176. package/components/formatter/LivePodRestarts.vue +47 -0
  177. package/components/formatter/MachineSummaryGraph.vue +51 -5
  178. package/components/formatter/PodsUsage.vue +5 -3
  179. package/components/formatter/Weight.vue +1 -1
  180. package/components/formatter/WorkloadHealthScale.vue +17 -6
  181. package/components/nav/HarvesterUpgrade.vue +15 -5
  182. package/components/nav/Header.vue +15 -6
  183. package/components/nav/Jump.vue +1 -1
  184. package/components/nav/NamespaceFilter.vue +30 -10
  185. package/components/nav/TopLevelMenu.vue +52 -14
  186. package/components/nav/WindowManager/ContainerLogs.vue +14 -2
  187. package/components/nav/WorkspaceSwitcher.vue +1 -1
  188. package/components/{NovncConsole.vue → novnc/NovncConsole.vue} +0 -0
  189. package/components/novnc/NovncConsoleItem.vue +89 -0
  190. package/components/novnc/NovncConsoleWrapper.vue +243 -0
  191. package/config/labels-annotations.js +6 -2
  192. package/config/product/explorer.js +7 -3
  193. package/config/product/fleet.js +4 -1
  194. package/config/product/manager.js +5 -6
  195. package/config/product/settings.js +12 -1
  196. package/config/query-params.js +2 -0
  197. package/config/roles.ts +5 -0
  198. package/config/settings.js +60 -63
  199. package/config/table-headers.js +47 -18
  200. package/config/types.js +24 -8
  201. package/content/docs/en-us/whats-new.md +25 -0
  202. package/core/plugin.ts +12 -2
  203. package/creators/app/init +7 -1
  204. package/creators/pkg/tsconfig.json +2 -3
  205. package/detail/catalog.cattle.io.app.vue +1 -1
  206. package/detail/cis.cattle.io.clusterscan.vue +1 -1
  207. package/detail/fleet.cattle.io.bundle.vue +73 -21
  208. package/detail/fleet.cattle.io.gitrepo.vue +5 -4
  209. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +25 -4
  210. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +2 -2
  211. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +1 -1
  212. package/detail/helm.cattle.io.projecthelmchart.vue +1 -1
  213. package/detail/networking.k8s.io.ingress.vue +10 -2
  214. package/detail/pod.vue +37 -1
  215. package/detail/provisioning.cattle.io.cluster.vue +102 -15
  216. package/detail/workload/index.vue +163 -15
  217. package/edit/auth/azuread.vue +146 -34
  218. package/edit/auth/github.vue +3 -3
  219. package/edit/auth/googleoauth.vue +3 -3
  220. package/edit/auth/ldap/config.vue +15 -7
  221. package/edit/auth/ldap/index.vue +2 -2
  222. package/edit/auth/oidc.vue +3 -3
  223. package/edit/auth/saml.vue +3 -3
  224. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  225. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +1 -1
  226. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +1 -1
  227. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +1 -1
  228. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +1 -1
  229. package/edit/catalog.cattle.io.clusterrepo.vue +2 -2
  230. package/edit/cis.cattle.io.clusterscan.vue +4 -4
  231. package/edit/cis.cattle.io.clusterscanbenchmark.vue +1 -1
  232. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -1
  233. package/edit/fleet.cattle.io.cluster.vue +1 -0
  234. package/edit/fleet.cattle.io.clustergroup.vue +1 -1
  235. package/edit/fleet.cattle.io.gitrepo.vue +290 -157
  236. package/edit/harvesterhci.io.host/HarvesterDisk.vue +4 -5
  237. package/edit/harvesterhci.io.host/index.vue +28 -19
  238. package/edit/harvesterhci.io.keypair.vue +1 -1
  239. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +1 -1
  240. package/edit/harvesterhci.io.management.cluster.vue +1 -1
  241. package/edit/harvesterhci.io.networkattachmentdefinition.vue +2 -2
  242. package/edit/harvesterhci.io.setting/additional-ca.vue +1 -1
  243. package/edit/harvesterhci.io.setting/backup-target.vue +1 -1
  244. package/edit/harvesterhci.io.setting/http-proxy.vue +1 -1
  245. package/edit/harvesterhci.io.setting/index.vue +3 -3
  246. package/edit/harvesterhci.io.setting/overcommit-config.vue +4 -1
  247. package/edit/harvesterhci.io.setting/ssl-parameters.vue +1 -1
  248. package/edit/harvesterhci.io.setting/support-bundle-image.vue +1 -1
  249. package/edit/harvesterhci.io.setting/vip-pools.vue +1 -1
  250. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +2 -2
  251. package/edit/harvesterhci.io.virtualmachinebackup.vue +2 -2
  252. package/edit/harvesterhci.io.virtualmachineimage.vue +2 -2
  253. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +26 -18
  254. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  255. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +2 -2
  256. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +1 -1
  257. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +1 -1
  258. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +1 -0
  259. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +2 -1
  260. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +3 -1
  261. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +41 -0
  262. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +79 -36
  263. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +54 -0
  264. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +1 -1
  265. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +2 -3
  266. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +40 -0
  267. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +102 -0
  268. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +117 -0
  269. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +74 -0
  270. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +59 -13
  271. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +72 -16
  272. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +74 -14
  273. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +35 -9
  274. package/edit/kubevirt.io.virtualmachine/index.vue +33 -24
  275. package/edit/logging-flow/index.vue +1 -1
  276. package/edit/logging.banzaicloud.io.output/index.vue +1 -1
  277. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +1 -1
  278. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +1 -1
  279. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +1 -1
  280. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +2 -2
  281. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +2 -2
  282. package/edit/logging.banzaicloud.io.output/providers/file.vue +1 -1
  283. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  284. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +2 -2
  285. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +2 -2
  286. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +2 -2
  287. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +1 -1
  288. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +1 -1
  289. package/edit/logging.banzaicloud.io.output/providers/logz.vue +2 -2
  290. package/edit/logging.banzaicloud.io.output/providers/loki.vue +2 -2
  291. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +1 -1
  292. package/edit/logging.banzaicloud.io.output/providers/s3.vue +2 -2
  293. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +2 -2
  294. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +1 -1
  295. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +2 -2
  296. package/edit/management.cattle.io.clusterroletemplatebinding.vue +2 -0
  297. package/edit/management.cattle.io.node.vue +71 -0
  298. package/edit/management.cattle.io.project.vue +28 -23
  299. package/edit/management.cattle.io.setting.vue +14 -3
  300. package/edit/management.cattle.io.user.vue +1 -1
  301. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -4
  302. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +13 -13
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +18 -10
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +2 -2
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +12 -7
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +12 -7
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +20 -11
  308. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +13 -8
  309. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +25 -7
  310. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +2 -2
  311. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +20 -7
  312. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +1 -1
  313. package/edit/monitoring.coreos.com.prometheusrule/index.vue +19 -8
  314. package/edit/monitoring.coreos.com.receiver/auth.vue +1 -1
  315. package/edit/monitoring.coreos.com.receiver/index.vue +2 -2
  316. package/edit/monitoring.coreos.com.receiver/tls.vue +2 -2
  317. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -2
  318. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +2 -2
  319. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +2 -2
  320. package/edit/monitoring.coreos.com.receiver/types/slack.vue +2 -2
  321. package/edit/monitoring.coreos.com.receiver/types/webhook.banner.vue +1 -1
  322. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +3 -3
  323. package/edit/monitoring.coreos.com.route.vue +2 -2
  324. package/edit/namespace.vue +0 -8
  325. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +1 -1
  326. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +2 -2
  327. package/edit/networking.istio.io.destinationrule/index.vue +1 -1
  328. package/edit/networking.k8s.io.ingress/Certificate.vue +5 -1
  329. package/edit/networking.k8s.io.ingress/Certificates.vue +5 -0
  330. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +17 -2
  331. package/edit/networking.k8s.io.ingress/IngressClass.vue +63 -0
  332. package/edit/networking.k8s.io.ingress/Rule.vue +42 -6
  333. package/edit/networking.k8s.io.ingress/RulePath.vue +29 -5
  334. package/edit/networking.k8s.io.ingress/Rules.vue +11 -0
  335. package/edit/networking.k8s.io.ingress/index.vue +104 -15
  336. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +1 -1
  337. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +2 -2
  338. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -2
  339. package/edit/persistentvolume/index.vue +1 -1
  340. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +2 -2
  341. package/edit/persistentvolume/plugins/azureDisk.vue +2 -2
  342. package/edit/persistentvolume/plugins/azureFile.vue +2 -2
  343. package/edit/persistentvolume/plugins/cephfs.vue +4 -4
  344. package/edit/persistentvolume/plugins/cinder.vue +2 -2
  345. package/edit/persistentvolume/plugins/csi.vue +2 -2
  346. package/edit/persistentvolume/plugins/fc.vue +4 -4
  347. package/edit/persistentvolume/plugins/flexVolume.vue +2 -2
  348. package/edit/persistentvolume/plugins/flocker.vue +1 -1
  349. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +2 -2
  350. package/edit/persistentvolume/plugins/glusterfs.vue +2 -2
  351. package/edit/persistentvolume/plugins/hostPath.vue +1 -1
  352. package/edit/persistentvolume/plugins/iscsi.vue +4 -4
  353. package/edit/persistentvolume/plugins/local.vue +1 -1
  354. package/edit/persistentvolume/plugins/longhorn.vue +2 -2
  355. package/edit/persistentvolume/plugins/nfs.vue +2 -2
  356. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -1
  357. package/edit/persistentvolume/plugins/portworxVolume.vue +2 -2
  358. package/edit/persistentvolume/plugins/quobyte.vue +2 -2
  359. package/edit/persistentvolume/plugins/rbd.vue +4 -4
  360. package/edit/persistentvolume/plugins/scaleIO.vue +2 -2
  361. package/edit/persistentvolume/plugins/storageos.vue +2 -2
  362. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -1
  363. package/edit/persistentvolumeclaim.vue +24 -8
  364. package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -2
  365. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +8 -3
  366. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +2 -2
  367. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +15 -3
  368. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +16 -3
  369. package/edit/provisioning.cattle.io.cluster/S3Config.vue +2 -2
  370. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +1 -1
  371. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.tests.ts +1 -7
  372. package/edit/provisioning.cattle.io.cluster/import.vue +2 -1
  373. package/edit/provisioning.cattle.io.cluster/index.vue +26 -7
  374. package/edit/provisioning.cattle.io.cluster/rke2.vue +136 -48
  375. package/edit/resources.cattle.io.backup.vue +26 -8
  376. package/edit/resources.cattle.io.restore.vue +3 -3
  377. package/edit/secret/basic.vue +1 -1
  378. package/edit/secret/index.vue +80 -2
  379. package/edit/secret/registry.vue +2 -2
  380. package/edit/secret/ssh.vue +1 -1
  381. package/edit/secret/tls.vue +1 -1
  382. package/edit/service.vue +47 -11
  383. package/edit/serviceaccount.vue +1 -1
  384. package/edit/storage.k8s.io.storageclass/index.vue +1 -1
  385. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +7 -3
  386. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-disk.vue +1 -1
  387. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-file.vue +1 -1
  388. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/cinder.vue +2 -2
  389. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +2 -2
  390. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/glusterfs.vue +1 -1
  391. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/portworx-volume.vue +1 -1
  392. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/quobyte.vue +1 -1
  393. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/rbd.vue +1 -1
  394. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/scaleio.vue +1 -1
  395. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/storageos.vue +1 -1
  396. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +1 -1
  397. package/edit/token.vue +3 -3
  398. package/edit/ui.cattle.io.navlink.vue +2 -2
  399. package/edit/workload/Job.vue +111 -23
  400. package/edit/workload/Upgrading.vue +77 -22
  401. package/edit/workload/__tests__/Job.test.ts +72 -0
  402. package/edit/workload/__tests__/Upgrading.test.ts +60 -0
  403. package/edit/workload/index.vue +13 -1085
  404. package/edit/workload/mixins/workload.js +900 -0
  405. package/edit/workload/storage/Mount.vue +2 -2
  406. package/edit/workload/storage/awsElasticBlockStore.vue +1 -1
  407. package/edit/workload/storage/azureDisk.vue +2 -2
  408. package/edit/workload/storage/azureFile.vue +1 -1
  409. package/edit/workload/storage/ephemeralVolume/index.vue +2 -2
  410. package/edit/workload/storage/gcePersistentDisk.vue +1 -1
  411. package/edit/workload/storage/hostPath.vue +1 -1
  412. package/edit/workload/storage/nfs.vue +2 -2
  413. package/edit/workload/storage/persistentVolumeClaim/index.vue +2 -2
  414. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +3 -3
  415. package/edit/workload/storage/secret.vue +2 -2
  416. package/edit/workload/storage/vsphereVolume.vue +1 -1
  417. package/edit/workload/types/Deployment.vue +377 -0
  418. package/edit/workload/types/Generic.vue +295 -0
  419. package/layouts/default.vue +26 -7
  420. package/layouts/error.vue +3 -2
  421. package/layouts/home.vue +12 -2
  422. package/layouts/plain.vue +18 -2
  423. package/layouts/unauthenticated.vue +2 -1
  424. package/list/catalog.cattle.io.clusterrepo.vue +1 -1
  425. package/list/fleet.cattle.io.bundle.vue +1 -1
  426. package/list/fleet.cattle.io.cluster.vue +1 -1
  427. package/list/fleet.cattle.io.clusterregistrationtoken.vue +1 -1
  428. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +9 -8
  429. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +40 -0
  430. package/list/harvesterhci.io.dashboard/index.vue +14 -36
  431. package/list/harvesterhci.io.host/index.vue +24 -12
  432. package/list/harvesterhci.io.networkattachmentdefinition.vue +1 -1
  433. package/list/harvesterhci.io.setting.vue +1 -1
  434. package/list/harvesterhci.io.virtualmachinebackup.vue +1 -1
  435. package/list/harvesterhci.io.virtualmachineimage.vue +36 -3
  436. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +1 -5
  437. package/list/helm.cattle.io.projecthelmchart.vue +1 -1
  438. package/list/kubevirt.io.virtualmachine.vue +4 -2
  439. package/list/management.cattle.io.feature.vue +3 -3
  440. package/list/management.cattle.io.setting.vue +2 -2
  441. package/list/monitoring.coreos.com.alertmanagerconfig.vue +1 -1
  442. package/list/namespace.vue +3 -1
  443. package/list/node.vue +10 -3
  444. package/list/persistentvolumeclaim.vue +42 -0
  445. package/list/provisioning.cattle.io.cluster.vue +22 -20
  446. package/list/workload.vue +31 -6
  447. package/machine-config/amazonec2.vue +37 -12
  448. package/machine-config/azure.vue +3 -3
  449. package/machine-config/digitalocean.vue +2 -2
  450. package/machine-config/generic.vue +1 -1
  451. package/machine-config/harvester.vue +124 -25
  452. package/machine-config/linode.vue +2 -2
  453. package/machine-config/vmwarevsphere.vue +5 -5
  454. package/middleware/authenticated.js +36 -6
  455. package/middleware/unauthenticated.js +22 -0
  456. package/mixins/brand.js +50 -3
  457. package/mixins/browser-tab-visibility.js +37 -0
  458. package/mixins/chart.js +36 -4
  459. package/mixins/{compact-input.js → compact-input.ts} +5 -3
  460. package/mixins/form-validation.js +122 -0
  461. package/mixins/harvester-vm/index.js +134 -90
  462. package/mixins/labeled-form-element.ts +193 -0
  463. package/mixins/resource-fetch.js +173 -0
  464. package/models/cluster.x-k8s.io.machine.js +6 -2
  465. package/models/etcdbackup.js +4 -0
  466. package/models/event.js +4 -0
  467. package/models/fleet.cattle.io.bundle.js +1 -1
  468. package/models/fleet.cattle.io.gitrepo.js +10 -0
  469. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +5 -2
  470. package/models/harvester/harvesterhci.io.virtualmachineimage.js +11 -8
  471. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +11 -2
  472. package/models/harvester/kubevirt.io.virtualmachine.js +2 -2
  473. package/models/harvester/kubevirt.io.virtualmachineinstance.js +1 -1
  474. package/models/harvester/node.js +27 -32
  475. package/models/harvester/persistentvolumeclaim.js +1 -1
  476. package/models/management.cattle.io.cluster.js +17 -11
  477. package/models/management.cattle.io.clusterroletemplatebinding.js +2 -2
  478. package/models/management.cattle.io.globalrole.js +19 -0
  479. package/models/management.cattle.io.node.js +10 -11
  480. package/models/management.cattle.io.project.js +60 -26
  481. package/models/management.cattle.io.roletemplate.js +19 -0
  482. package/models/monitoring.coreos.com.alertmanagerconfig.js +3 -2
  483. package/models/monitoring.coreos.com.prometheusrule.js +9 -0
  484. package/models/namespace.js +9 -1
  485. package/models/networking.k8s.io.ingress.js +17 -5
  486. package/models/persistentvolumeclaim.js +47 -1
  487. package/models/projectroletemplatebinding.js +2 -2
  488. package/models/provisioning.cattle.io.cluster.js +92 -13
  489. package/models/rke.cattle.io.etcdsnapshot.js +4 -0
  490. package/models/service.js +11 -5
  491. package/models/storage.k8s.io.storageclass.js +14 -1
  492. package/models/workload.js +7 -2
  493. package/nuxt.config.js +27 -7
  494. package/package.json +10 -14
  495. package/pages/about.vue +15 -1
  496. package/pages/account/index.vue +1 -1
  497. package/pages/auth/login.vue +17 -5
  498. package/pages/auth/setup.vue +47 -9
  499. package/pages/c/_cluster/_product/_resource/create.vue +1 -1
  500. package/pages/c/_cluster/_product/members/index.vue +6 -1
  501. package/pages/c/_cluster/_product/projectsnamespaces.vue +113 -11
  502. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  503. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  504. package/pages/c/_cluster/apps/charts/install.vue +197 -19
  505. package/pages/c/_cluster/auth/config/index.vue +1 -1
  506. package/pages/c/_cluster/explorer/EventsTable.vue +1 -15
  507. package/pages/c/_cluster/explorer/index.vue +64 -35
  508. package/pages/c/_cluster/explorer/tools/index.vue +1 -1
  509. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +249 -0
  510. package/pages/c/_cluster/fleet/index.vue +47 -65
  511. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +7 -4
  512. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +7 -1
  513. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +8 -14
  514. package/pages/c/_cluster/monitoring/index.vue +1 -1
  515. package/pages/c/_cluster/monitoring/route-receiver/index.vue +1 -1
  516. package/pages/c/_cluster/settings/banners.vue +2 -2
  517. package/pages/c/_cluster/settings/brand.vue +62 -7
  518. package/pages/c/_cluster/settings/performance.vue +167 -0
  519. package/pages/diagnostic.vue +468 -0
  520. package/pages/fail-whale.vue +17 -5
  521. package/pages/home.vue +36 -22
  522. package/pages/plugins.vue +1 -1
  523. package/pages/prefs.vue +20 -7
  524. package/pages/support/index.vue +51 -9
  525. package/pkg/auto-import.js +1 -1
  526. package/pkg/dynamic-importer.lib.js +8 -0
  527. package/pkg/tsconfig.json +26 -9
  528. package/pkg/vue.config.js +8 -0
  529. package/plugins/console.js +29 -0
  530. package/plugins/dashboard-store/actions.js +171 -28
  531. package/plugins/dashboard-store/getters.js +13 -1
  532. package/plugins/dashboard-store/index.js +5 -1
  533. package/plugins/dashboard-store/mutations.js +72 -22
  534. package/plugins/dashboard-store/resource-class.js +259 -184
  535. package/plugins/i18n.js +9 -3
  536. package/plugins/steve/actions.js +16 -1
  537. package/plugins/steve/getters.js +9 -1
  538. package/plugins/steve/index.js +6 -2
  539. package/plugins/steve/mutations.js +100 -5
  540. package/plugins/steve/norman-class.js +8 -0
  541. package/plugins/steve/performanceTesting.js +5 -0
  542. package/plugins/steve/subscribe.js +144 -12
  543. package/plugins/steve/web-worker.steve-sub-worker.js +129 -0
  544. package/promptRemove/kubevirt.io.virtualmachine.vue +3 -17
  545. package/promptRemove/management.cattle.io.project.vue +128 -0
  546. package/promptRemove/pod.vue +131 -0
  547. package/rancher-components/BadgeState/BadgeState.spec.ts +12 -0
  548. package/{components → rancher-components/BadgeState}/BadgeState.vue +18 -10
  549. package/rancher-components/BadgeState/index.ts +1 -0
  550. package/{components/__tests__ → rancher-components/Banner}/Banner.test.ts +1 -1
  551. package/{components → rancher-components/Banner}/Banner.vue +22 -7
  552. package/rancher-components/Banner/index.ts +1 -0
  553. package/{components → rancher-components/Card}/Card.vue +58 -12
  554. package/rancher-components/Card/index.ts +1 -0
  555. package/{components/form → rancher-components/Form/Checkbox}/Checkbox.vue +118 -25
  556. package/rancher-components/Form/Checkbox/index.ts +1 -0
  557. package/{components/form/__tests__ → rancher-components/Form/LabeledInput}/LabeledInput.test.ts +13 -2
  558. package/rancher-components/Form/LabeledInput/LabeledInput.vue +341 -0
  559. package/rancher-components/Form/LabeledInput/index.ts +1 -0
  560. package/{components/form → rancher-components/Form/Radio}/RadioButton.vue +50 -22
  561. package/{components/form → rancher-components/Form/Radio}/RadioGroup.vue +76 -28
  562. package/rancher-components/Form/Radio/index.ts +2 -0
  563. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +169 -0
  564. package/rancher-components/Form/TextArea/index.ts +1 -0
  565. package/rancher-components/Form/index.ts +4 -0
  566. package/{components/form → rancher-components/LabeledTooltip}/LabeledTooltip.vue +32 -11
  567. package/rancher-components/LabeledTooltip/index.ts +1 -0
  568. package/scripts/build-pkg.sh +4 -0
  569. package/scripts/publish-shell.sh +37 -18
  570. package/scripts/test-plugins-build.sh +115 -0
  571. package/store/catalog.js +4 -0
  572. package/store/growl.js +6 -0
  573. package/store/i18n.js +18 -9
  574. package/store/index.js +190 -107
  575. package/store/prefs.js +8 -2
  576. package/store/resource-fetch.js +44 -0
  577. package/store/type-map.js +43 -7
  578. package/store/uiplugins.ts +1 -1
  579. package/utils/favicon.js +40 -0
  580. package/utils/object.js +26 -9
  581. package/utils/promise.js +20 -0
  582. package/utils/socket.js +10 -1
  583. package/utils/string.js +16 -0
  584. package/utils/validators/formRules/__tests__/index.test.ts +928 -0
  585. package/utils/validators/formRules/index.ts +447 -0
  586. package/utils/validators/prometheusrule.js +1 -1
  587. package/utils/validators/vm.js +12 -5
  588. package/utils/width.js +39 -0
  589. package/yarn-error.log +196 -0
  590. package/components/NovncConsoleWrapper.vue +0 -150
  591. package/components/form/Container.vue +0 -143
  592. package/components/form/LabeledInput.vue +0 -245
  593. package/components/form/Scheduling.vue +0 -115
  594. package/components/form/TextAreaAutoGrow.vue +0 -127
  595. package/mixins/labeled-form-element.js +0 -137
@@ -1,96 +1,99 @@
1
1
  // Settings
2
2
  import { MANAGEMENT } from './types';
3
-
4
3
  // Adapted from: https://github.com/rancher/ui/blob/08c379a9529f740666a704b52522a468986c3520/lib/shared/addon/utils/constants.js#L564
5
-
6
4
  // Setting IDs
7
5
  export const SETTING = {
8
6
  VERSION_RANCHER: 'server-version',
9
7
  VERSION_CLI: 'cli-version',
10
8
  VERSION_MACHINE: 'machine-version',
11
9
  VERSION_HELM: 'helm-version',
12
-
13
10
  CLI_URL: {
14
11
  DARWIN: 'cli-url-darwin',
15
12
  WINDOWS: 'cli-url-windows',
16
13
  LINUX: 'cli-url-linux',
17
14
  },
18
-
19
15
  API_HOST: 'api-host',
20
16
  CA_CERTS: 'cacerts',
21
17
 
22
18
  // Allow the local cluste to be hidden
23
- HIDE_LOCAL_CLUSTER: 'hide-local-cluster',
24
- AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
25
- KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
26
- KUBECONFIG_TOKEN_TTL_MINUTES: 'kubeconfig-token-ttl-minutes',
27
- ENGINE_URL: 'engine-install-url',
28
- ENGINE_ISO_URL: 'engine-iso-url',
29
- FIRST_LOGIN: 'first-login',
30
- INGRESS_IP_DOMAIN: 'ingress-ip-domain',
31
- SERVER_URL: 'server-url',
32
- RKE_METADATA_CONFIG: 'rke-metadata-config',
33
- TELEMETRY: 'telemetry-opt',
34
- EULA_AGREED: 'eula-agreed',
35
- AUTH_USER_INFO_MAX_AGE_SECONDS: 'auth-user-info-max-age-seconds',
36
- AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
37
- AUTH_USER_INFO_RESYNC_CRON: 'auth-user-info-resync-cron',
38
- AUTH_LOCAL_VALIDATE_DESC: 'auth-password-requirements-description',
39
- CLUSTER_TEMPLATE_ENFORCEMENT: 'cluster-template-enforcement',
40
- UI_INDEX: 'ui-index',
41
- UI_DASHBOARD_INDEX: 'ui-dashboard-index',
42
- UI_OFFLINE_PREFERRED: 'ui-offline-preferred',
43
- SYSTEM_DEFAULT_REGISTRY: 'system-default-registry',
44
- UI_ISSUES: 'ui-issues',
45
- PL: 'ui-pl',
46
- PL_RANCHER_VALUE: 'rancher',
47
- SUPPORTED: 'has-support',
48
- BANNERS: 'ui-banners',
49
- ISSUES: 'ui-issues',
50
- BRAND: 'ui-brand',
51
- LOGO_LIGHT: 'ui-logo-light',
52
- LOGO_DARK: 'ui-logo-dark',
53
- PRIMARY_COLOR: 'ui-primary-color',
54
- LINK_COLOR: 'ui-link-color',
55
- COMMUNITY_LINKS: 'ui-community-links',
56
- SYSTEM_NAMESPACES: 'system-namespaces'
19
+ HIDE_LOCAL_CLUSTER: 'hide-local-cluster',
20
+ AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
21
+ KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
22
+ KUBECONFIG_TOKEN_TTL_MINUTES: 'kubeconfig-token-ttl-minutes',
23
+ KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
24
+ ENGINE_URL: 'engine-install-url',
25
+ ENGINE_ISO_URL: 'engine-iso-url',
26
+ FIRST_LOGIN: 'first-login',
27
+ INGRESS_IP_DOMAIN: 'ingress-ip-domain',
28
+ SERVER_URL: 'server-url',
29
+ RKE_METADATA_CONFIG: 'rke-metadata-config',
30
+ TELEMETRY: 'telemetry-opt',
31
+ EULA_AGREED: 'eula-agreed',
32
+ AUTH_USER_INFO_MAX_AGE_SECONDS: 'auth-user-info-max-age-seconds',
33
+ AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
34
+ AUTH_USER_INFO_RESYNC_CRON: 'auth-user-info-resync-cron',
35
+ AUTH_LOCAL_VALIDATE_DESC: 'auth-password-requirements-description',
36
+ CLUSTER_TEMPLATE_ENFORCEMENT: 'cluster-template-enforcement',
37
+ UI_INDEX: 'ui-index',
38
+ UI_DASHBOARD_INDEX: 'ui-dashboard-index',
39
+ UI_OFFLINE_PREFERRED: 'ui-offline-preferred',
40
+ SYSTEM_DEFAULT_REGISTRY: 'system-default-registry',
41
+ UI_ISSUES: 'ui-issues',
42
+ PL: 'ui-pl',
43
+ PL_RANCHER_VALUE: 'rancher',
44
+ SUPPORTED: 'has-support',
45
+ BANNERS: 'ui-banners',
46
+ ISSUES: 'ui-issues',
47
+ BRAND: 'ui-brand',
48
+ LOGO_LIGHT: 'ui-logo-light',
49
+ LOGO_DARK: 'ui-logo-dark',
50
+ PRIMARY_COLOR: 'ui-primary-color',
51
+ LINK_COLOR: 'ui-link-color',
52
+ COMMUNITY_LINKS: 'ui-community-links',
53
+ FAVICON: 'ui-favicon',
54
+ UI_PERFORMANCE: 'ui-performance',
55
+ /**
56
+ * Allow the backend to force a light/dark theme. Used in non-rancher world and results in the theme used
57
+ * both pre and post log in. If not present defaults to the usual process
58
+ */
59
+ THEME: 'ui-theme',
60
+ SYSTEM_NAMESPACES: 'system-namespaces'
57
61
  };
58
62
 
59
63
  // These are the settings that are allowed to be edited via the UI
60
64
  export const ALLOWED_SETTINGS = {
61
- [SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
65
+ [SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
62
66
  // [SETTING.CLUSTER_DEFAULTS]: { kind: 'json' },
63
- [SETTING.ENGINE_URL]: {},
64
- [SETTING.ENGINE_ISO_URL]: {},
67
+ [SETTING.ENGINE_URL]: {},
68
+ [SETTING.ENGINE_ISO_URL]: {},
65
69
  // [SETTING.PL]: {},
66
70
  // [SETTING.ISSUES]: {},
67
- [SETTING.INGRESS_IP_DOMAIN]: {},
68
- [SETTING.AUTH_USER_INFO_MAX_AGE_SECONDS]: {},
69
- [SETTING.AUTH_USER_SESSION_TTL_MINUTES]: {},
70
- [SETTING.AUTH_TOKEN_MAX_TTL_MINUTES]: {},
71
- [SETTING.KUBECONFIG_GENERATE_TOKEN]: { kind: 'boolean' },
72
- [SETTING.KUBECONFIG_TOKEN_TTL_MINUTES]: {},
73
- [SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
74
- [SETTING.SERVER_URL]: { kind: 'url', canReset: true },
75
- [SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
71
+ [SETTING.INGRESS_IP_DOMAIN]: {},
72
+ [SETTING.AUTH_USER_INFO_MAX_AGE_SECONDS]: {},
73
+ [SETTING.AUTH_USER_SESSION_TTL_MINUTES]: {},
74
+ [SETTING.AUTH_TOKEN_MAX_TTL_MINUTES]: {},
75
+ [SETTING.KUBECONFIG_GENERATE_TOKEN]: { kind: 'boolean' },
76
+ [SETTING.KUBECONFIG_TOKEN_TTL_MINUTES]: {},
77
+ [SETTING.KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES]: { kind: 'integer' },
78
+ [SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
79
+ [SETTING.SERVER_URL]: { kind: 'url', canReset: true },
80
+ [SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
76
81
  // [SETTING.BANNERS]: { kind: 'json' },
77
- [SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
78
- [SETTING.UI_INDEX]: {},
79
- [SETTING.UI_DASHBOARD_INDEX]: {},
80
- [SETTING.UI_OFFLINE_PREFERRED]: {
82
+ [SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
83
+ [SETTING.UI_INDEX]: {},
84
+ [SETTING.UI_DASHBOARD_INDEX]: {},
85
+ [SETTING.UI_OFFLINE_PREFERRED]: {
81
86
  kind: 'enum',
82
87
  options: ['dynamic', 'true', 'false']
83
88
  },
84
89
  [SETTING.BRAND]: {},
85
90
  [SETTING.CLUSTER_TEMPLATE_ENFORCEMENT]: { kind: 'boolean' },
86
-
87
- [SETTING.TELEMETRY]: {
91
+ [SETTING.TELEMETRY]: {
88
92
  kind: 'enum',
89
93
  options: ['prompt', 'in', 'out']
90
94
  },
91
95
  [SETTING.HIDE_LOCAL_CLUSTER]: { kind: 'boolean' },
92
96
  };
93
-
94
97
  // harvester Settings ID
95
98
  export const HCI_SETTING = {
96
99
  BACKUP_TARGET: 'backup-target',
@@ -117,7 +120,6 @@ export const HCI_SETTING = {
117
120
  RANCHER_MONITORING: 'fleet-local/rancher-monitoring',
118
121
  RELEASE_DOWNLOAD_URL: 'release-download-url'
119
122
  };
120
-
121
123
  export const HCI_ALLOWED_SETTINGS = {
122
124
  [HCI_SETTING.BACKUP_TARGET]: { kind: 'json', from: 'import' },
123
125
  [HCI_SETTING.LOG_LEVEL]: {
@@ -152,7 +154,6 @@ export const HCI_ALLOWED_SETTINGS = {
152
154
  },
153
155
  [HCI_SETTING.RELEASE_DOWNLOAD_URL]: { kind: 'url' },
154
156
  };
155
-
156
157
  export const HCI_SINGLE_CLUSTER_ALLOWED_SETTING = {
157
158
  [HCI_SETTING.UI_SOURCE]: {
158
159
  kind: 'enum',
@@ -161,7 +162,6 @@ export const HCI_SINGLE_CLUSTER_ALLOWED_SETTING = {
161
162
  [HCI_SETTING.UI_INDEX]: { kind: 'url' },
162
163
  [HCI_SETTING.CLUSTER_REGISTRATION_URL]: { kind: 'url' },
163
164
  };
164
-
165
165
  export const fetchOrCreateSetting = async(store, id, val, save = true) => {
166
166
  let setting;
167
167
 
@@ -174,7 +174,6 @@ export const fetchOrCreateSetting = async(store, id, val, save = true) => {
174
174
  setting = await store.dispatch('management/create', {
175
175
  type: MANAGEMENT.SETTING, metadata: { name: id }, value: val, default: val || ''
176
176
  });
177
-
178
177
  if ( save ) {
179
178
  await setting.save({ url });
180
179
  }
@@ -182,12 +181,10 @@ export const fetchOrCreateSetting = async(store, id, val, save = true) => {
182
181
 
183
182
  return setting;
184
183
  };
185
-
186
184
  export const setSetting = async(store, id, val) => {
187
185
  const setting = await fetchOrCreateSetting(store, id, val, false);
188
186
 
189
187
  setting.value = val;
190
-
191
188
  await setting.save();
192
189
 
193
190
  return setting;
@@ -151,6 +151,7 @@ export const NODE = {
151
151
  name: 'node',
152
152
  labelKey: 'tableHeaders.node',
153
153
  value: 'spec.nodeName',
154
+ getValue: row => row.spec?.nodeName,
154
155
  sort: 'spec.nodeName',
155
156
  formatter: 'LinkName',
156
157
  formatterOpts: { type: NODE_TYPE },
@@ -161,6 +162,7 @@ export const NODE_NAME = {
161
162
  labelKey: 'tableHeaders.nodeName',
162
163
  sort: 'name',
163
164
  value: 'name',
165
+ getValue: row => row.name,
164
166
  formatter: 'LinkDetail',
165
167
  };
166
168
 
@@ -212,7 +214,7 @@ export const PODS = {
212
214
  labelKey: 'tableHeaders.pods',
213
215
  sort: 'podConsumed',
214
216
  search: false,
215
- value: 'podConsumedUsage',
217
+ value: row => row.podConsumedUsage,
216
218
  formatter: 'PercentageBar',
217
219
  width: 120,
218
220
  };
@@ -220,9 +222,9 @@ export const PODS = {
220
222
  export const AGE = {
221
223
  name: 'age',
222
224
  labelKey: 'tableHeaders.age',
223
- value: 'metadata.creationTimestamp',
224
- getValue: row => row.metadata?.creationTimestamp,
225
- sort: 'metadata.creationTimestamp:desc',
225
+ value: 'creationTimestamp',
226
+ getValue: row => row.creationTimestamp,
227
+ sort: 'creationTimestamp:desc',
226
228
  search: false,
227
229
  formatter: 'LiveDate',
228
230
  width: 100,
@@ -231,6 +233,7 @@ export const AGE = {
231
233
 
232
234
  export const AGE_NORMAN = {
233
235
  ...AGE,
236
+ getValue: row => row.created,
234
237
  value: 'created',
235
238
  sort: 'created:desc',
236
239
  };
@@ -264,14 +267,20 @@ export const POD_IMAGES = {
264
267
  value: 'imageNames',
265
268
  getValue: row => row.imageNames,
266
269
  sort: 'imageNames',
267
- search: 'imageNames',
270
+ // search: 'imageNames',
268
271
  formatter: 'PodImages'
269
272
  };
270
273
 
271
274
  export const POD_RESTARTS = {
272
- name: 'pod_restarts',
273
- labelKey: 'tableHeaders.podRestarts',
274
- value: 'restartCount'
275
+ name: 'pod_restarts',
276
+ labelKey: 'tableHeaders.podRestarts',
277
+ formatter: 'LivePodRestarts',
278
+ delayLoading: true,
279
+ value: 'restartCount',
280
+ getValue: row => row.restartCount,
281
+ // This column is expensive to compute, so don't make it searchable
282
+ search: false,
283
+ liveUpdates: true
275
284
  };
276
285
 
277
286
  export const ENDPOINTS = {
@@ -414,6 +423,7 @@ export const TYPE = {
414
423
  name: 'type',
415
424
  labelKey: 'tableHeaders.type',
416
425
  value: 'typeDisplay',
426
+ getValue: row => row.typeDisplay,
417
427
  sort: ['typeDisplay'],
418
428
  width: 100,
419
429
  };
@@ -527,6 +537,13 @@ export const API_GROUP = {
527
537
  sort: ['apiGroups']
528
538
  };
529
539
 
540
+ export const INGRESS_CLASS = {
541
+ name: 'ingressClassName',
542
+ labelKey: 'tableHeaders.ingressClass',
543
+ value: `$['spec']['ingressClassName']`,
544
+ sort: `$['spec']['ingressClassName']`,
545
+ };
546
+
530
547
  export const INGRESS_DEFAULT_BACKEND = {
531
548
  name: 'ingressDefaultBackend',
532
549
  labelKey: 'tableHeaders.ingressDefaultBackend',
@@ -636,9 +653,13 @@ export const WORKLOAD_HEALTH_SCALE = {
636
653
  name: 'workloadHealthScale',
637
654
  labelKey: 'tableHeaders.health',
638
655
  formatter: 'WorkloadHealthScale',
656
+ getValue: () => undefined,
639
657
  width: 150,
640
658
  skipSelect: true,
641
659
  delayLoading: true,
660
+ // This column is expensive to compute, so don't make it searchable
661
+ search: false,
662
+ liveUpdates: true,
642
663
  };
643
664
 
644
665
  export const FLEET_SUMMARY = {
@@ -873,19 +894,21 @@ export const KUBE_NODE_OS = {
873
894
  };
874
895
 
875
896
  export const MACHINE_NODE_OS = {
876
- name: 'operating-system',
877
- labelKey: 'tableHeaders.operatingSystem',
878
- value: 'operatingSystem',
879
- sort: ['operatingSystem'],
880
- formatter: 'Capitalize'
897
+ name: 'operating-system',
898
+ labelKey: 'tableHeaders.operatingSystem',
899
+ value: 'operatingSystem',
900
+ sort: ['operatingSystem'],
901
+ formatter: 'Capitalize',
902
+ dashIfEmpty: true,
881
903
  };
882
904
 
883
905
  export const MANAGEMENT_NODE_OS = {
884
- name: 'operating-system',
885
- labelKey: 'tableHeaders.operatingSystem',
886
- value: 'status.internalNodeStatus.nodeInfo.operatingSystem',
887
- sort: ['status.internalNodeStatus.nodeInfo.operatingSystem'],
888
- formatter: 'Capitalize'
906
+ name: 'operating-system',
907
+ labelKey: 'tableHeaders.operatingSystem',
908
+ value: 'status.internalNodeStatus.nodeInfo.operatingSystem',
909
+ sort: ['status.internalNodeStatus.nodeInfo.operatingSystem'],
910
+ formatter: 'Capitalize',
911
+ dashIfEmpty: true,
889
912
  };
890
913
 
891
914
  // FLEET
@@ -906,3 +929,9 @@ export const FLEET_BUNDLE_TYPE = {
906
929
  sort: ['bundleType'],
907
930
  width: 100,
908
931
  };
932
+
933
+ export const IP_ADDRESS = {
934
+ name: 'ipaddress',
935
+ value: 'ipaddress',
936
+ labelKey: 'tableHeaders.ipaddress',
937
+ };
package/config/types.js CHANGED
@@ -46,6 +46,7 @@ export const EVENT = 'event';
46
46
  export const ENDPOINTS = 'endpoints';
47
47
  export const HPA = 'autoscaling.horizontalpodautoscaler';
48
48
  export const INGRESS = 'networking.k8s.io.ingress';
49
+ export const INGRESS_CLASS = 'networking.k8s.io.ingressclass';
49
50
  export const NAMESPACE = 'namespace';
50
51
  export const NODE = 'node';
51
52
  export const NETWORK_POLICY = 'networking.k8s.io.networkpolicy';
@@ -166,7 +167,9 @@ export const MANAGEMENT = {
166
167
  GLOBAL_ROLE: 'management.cattle.io.globalrole',
167
168
  GLOBAL_ROLE_BINDING: 'management.cattle.io.globalrolebinding',
168
169
  POD_SECURITY_POLICY_TEMPLATE: 'management.cattle.io.podsecuritypolicytemplate',
169
- MANAGED_CHART: 'management.cattle.io.managedchart'
170
+ MANAGED_CHART: 'management.cattle.io.managedchart',
171
+ USER_NOTIFICATION: 'management.cattle.io.rancherusernotification',
172
+ GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider'
170
173
  };
171
174
 
172
175
  export const CAPI = {
@@ -184,13 +187,14 @@ export const CAPI = {
184
187
  // Base: /k8s/clusters/<id>/v1/
185
188
 
186
189
  export const FLEET = {
187
- BUNDLE: 'fleet.cattle.io.bundle',
188
- CLUSTER: 'fleet.cattle.io.cluster',
189
- CLUSTER_GROUP: 'fleet.cattle.io.clustergroup',
190
- DASHBOARD: 'fleet.cattle.io.dashboard',
191
- GIT_REPO: 'fleet.cattle.io.gitrepo',
192
- WORKSPACE: 'management.cattle.io.fleetworkspace',
193
- TOKEN: 'fleet.cattle.io.clusterregistrationtoken',
190
+ BUNDLE: 'fleet.cattle.io.bundle',
191
+ BUNDLE_DEPLOYMENT: 'fleet.cattle.io.bundledeployment',
192
+ CLUSTER: 'fleet.cattle.io.cluster',
193
+ CLUSTER_GROUP: 'fleet.cattle.io.clustergroup',
194
+ DASHBOARD: 'fleet.cattle.io.dashboard',
195
+ GIT_REPO: 'fleet.cattle.io.gitrepo',
196
+ WORKSPACE: 'management.cattle.io.fleetworkspace',
197
+ TOKEN: 'fleet.cattle.io.clusterregistrationtoken',
194
198
  };
195
199
 
196
200
  export const GATEKEEPER = {
@@ -289,4 +293,16 @@ export const HCI = {
289
293
 
290
294
  export const VIRTUAL_HARVESTER_PROVIDER = 'harvester';
291
295
 
296
+ export const ADDRESSES = {
297
+ HOSTNAME: 'Hostname',
298
+ INTERNAL_IP: 'InternalIP'
299
+ };
300
+
292
301
  export const DEFAULT_WORKSPACE = 'fleet-default';
302
+
303
+ export const AUTH_TYPE = {
304
+ _NONE: '_none',
305
+ _BASIC: '_basic',
306
+ _SSH: '_ssh',
307
+ _S3: '_S3'
308
+ };
@@ -2,6 +2,31 @@
2
2
  title: What's New in 2.6
3
3
  ---
4
4
 
5
+
6
+ ## New in 2.6.7
7
+
8
+ ### Amazon Billing in the Marketplace
9
+
10
+ - You can now purchase support for Rancher directly through the AWS Marketplace: https://rancher.com/docs/rancher/v2.6/en/installation/cloud-marketplace/aws/
11
+
12
+ ### Ability to configure Azure AD with MSAL
13
+
14
+ - Microsoft has deprecated the Azure AD Graph API that Rancher had been using for authentication via Azure AD. A configuration update is necessary to make sure users can still use Rancher with Azure AD. For more details, see: https://rancher.com/docs/rancher/v2.6/en/admin-settings/authentication/azure-ad/#migrating-from-azure-ad-graph-api-to-microsoft-graph-api
15
+
16
+ ### Kubernetes 1.24
17
+
18
+ - Kubernetes 1.24 is now a supported Kubernetes version for running Rancher as well as for provisioned and imported RKE1/RKE2/k3s clusters.
19
+
20
+ ### RKE2 Encryption Key Rotation
21
+
22
+ - RKE2 encrypts secret data at rest by default. You can now rotate the key used for this encryption for Rancher-provisioned RKE2 clusters with supported k8s versions.
23
+
24
+
25
+ ## New in 2.6.6
26
+
27
+ - 2.6.6 was released to account for a major performance issue. The issue occurred when Rancher was attempting to control large volumes of traffic from downstream clusters. This mechanism was not handling disconnects properly and would result in indefinite locks but this is now fixed in this version.
28
+
29
+
5
30
  ## New in 2.6.5
6
31
 
7
32
  ### NeuVector Integration
package/core/plugin.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { RouteConfig } from 'vue-router';
2
2
  import { DSL as STORE_DSL } from '@shell/store/type-map';
3
3
  import { IPlugin } from './types';
4
- import coreStore, { coreStoreModule, coreStoreState } from '@/shell/plugins/dashboard-store';
4
+ import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
5
5
  import {
6
6
  PluginRouteConfig, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig, OnNavToPackage, OnNavAwayFromPackage, OnLogOut
7
- } from '@/shell/core/types';
7
+ } from '@shell/core/types';
8
8
 
9
9
  export class Plugin implements IPlugin {
10
10
  public id: string;
@@ -164,6 +164,16 @@ export class Plugin implements IPlugin {
164
164
  }
165
165
 
166
166
  public register(type: string, name: string, fn: Function) {
167
+ const nparts = name.split('/');
168
+
169
+ // Support components in a sub-folder - component_name/index.vue (and ignore other componnets in that folder)
170
+ if (nparts.length === 2) {
171
+ if (nparts[1] !== 'index') {
172
+ return;
173
+ }
174
+ name = nparts[0];
175
+ }
176
+
167
177
  // Accumulate l10n resources rather than replace
168
178
  if (type === 'l10n') {
169
179
  if (!this.l10n[name]) {
package/creators/app/init CHANGED
@@ -7,6 +7,7 @@ const exec = require('child_process').exec;
7
7
  const targets = {
8
8
  'dev': './node_modules/.bin/nuxt dev',
9
9
  'nuxt': './node_modules/.bin/nuxt',
10
+ 'build': './node_modules/.bin/nuxt build'
10
11
  };
11
12
 
12
13
  const files = [
@@ -64,7 +65,12 @@ Object.keys(targets).forEach((target) => {
64
65
  });
65
66
 
66
67
  // Add dependencies
67
- pkg.dependencies['@rancher/shell'] = '^0.6.16';
68
+ // Use the same shell version as this app creator
69
+
70
+ const creatorPkgData = fs.readFileSync(path.join(__dirname, 'package.json'));
71
+ const creatorPkg = JSON.parse(creatorPkgData);
72
+
73
+ pkg.dependencies['@rancher/shell'] = `^${ creatorPkg.version }`;
68
74
  pkg.dependencies['core-js'] = '^3.20.3';
69
75
  pkg.dependencies['css-loader'] = '4.3.0';
70
76
 
@@ -32,7 +32,7 @@
32
32
  ],
33
33
  "@shell/store/*": [
34
34
  "../../node_modules/@rancher/shell/store/*"
35
- ],
35
+ ]
36
36
  }
37
37
  },
38
38
  "include": [
@@ -40,8 +40,7 @@
40
40
  "**/*.tsx",
41
41
  "**/*.vue",
42
42
  "../../node_modules/@rancher/shell/types/*.d.ts",
43
- "../../node_modules/@rancher/shell/core/*.ts",
44
- "../../node_modules/@rancher/shell/config/**/*.js"
43
+ "../../node_modules/@rancher/shell/core/types.ts"
45
44
  ],
46
45
  "exclude": [
47
46
  "node_modules"
@@ -4,7 +4,7 @@ import Loading from '@shell/components/Loading';
4
4
  import Markdown from '@shell/components/Markdown';
5
5
  import Tabbed from '@shell/components/Tabbed';
6
6
  import Tab from '@shell/components/Tabbed/Tab';
7
- import Banner from '@shell/components/Banner';
7
+ import { Banner } from '@components/Banner';
8
8
  import RelatedResources from '@shell/components/RelatedResources';
9
9
  import jsyaml from 'js-yaml';
10
10
  import merge from 'lodash/merge';
@@ -1,7 +1,7 @@
1
1
  <script>
2
2
  import Date from '@shell/components/formatter/Date';
3
3
  import SortableTable from '@shell/components/SortableTable';
4
- import Banner from '@shell/components/Banner';
4
+ import { Banner } from '@components/Banner';
5
5
  import LabeledSelect from '@shell/components/form/LabeledSelect';
6
6
  import Loading from '@shell/components/Loading';
7
7
  import day from 'dayjs';
@@ -1,16 +1,14 @@
1
1
  <script>
2
2
  import { FLEET } from '@shell/config/types';
3
3
  import FleetBundleResources from '@shell/components/fleet/FleetBundleResources.vue';
4
- import Tabbed from '@shell/components/Tabbed';
5
- import Tab from '@shell/components/Tabbed/Tab';
4
+ import SortableTable from '@shell/components/SortableTable';
6
5
 
7
6
  export default {
8
7
  name: 'FleetBundleDetail',
9
8
 
10
9
  components: {
11
- Tabbed,
12
- Tab,
13
10
  FleetBundleResources,
11
+ SortableTable,
14
12
  },
15
13
  props: {
16
14
  value: {
@@ -27,30 +25,53 @@ export default {
27
25
  const { namespace, labels } = this.value.metadata;
28
26
  const repoName = `${ namespace }/${ labels['fleet.cattle.io/repo-name'] }`;
29
27
 
30
- this.repo = await this.$store.dispatch('management/find', { type: FLEET.GIT_REPO, id: repoName });
28
+ if (this.hasRepoLabel) {
29
+ this.repo = await this.$store.dispatch('management/find', { type: FLEET.GIT_REPO, id: repoName });
30
+ }
31
31
  },
32
32
 
33
33
  computed: {
34
-
34
+ hasRepoLabel() {
35
+ return !!(this.value?.metadata?.labels && this.value?.metadata?.labels['fleet.cattle.io/repo-name']);
36
+ },
35
37
  bundleResources() {
36
- const bundleResourceIds = this.bundleResourceIds;
38
+ if (this.hasRepoLabel) {
39
+ const bundleResourceIds = this.bundleResourceIds;
37
40
 
38
- return this.repo?.status?.resources.filter((resource) => {
39
- return bundleResourceIds.includes(resource.name);
40
- });
41
- },
41
+ return this.repo?.status?.resources.filter((resource) => {
42
+ return bundleResourceIds.includes(resource.name);
43
+ });
44
+ } else if (this.value?.spec?.resources?.length) {
45
+ return this.value?.spec?.resources.map((item) => {
46
+ return {
47
+ content: item.content,
48
+ name: item.name.includes('.') ? item.name.split('.')[0] : item.name
49
+ };
50
+ });
51
+ }
42
52
 
53
+ return [];
54
+ },
55
+ resourceHeaders() {
56
+ return [
57
+ {
58
+ name: 'name',
59
+ value: 'name',
60
+ sort: ['name'],
61
+ labelKey: 'tableHeaders.name',
62
+ },
63
+ ];
64
+ },
65
+ resourceCount() {
66
+ return (this.bundleResources && this.bundleResources.length) || this.value?.spec?.resources?.length;
67
+ },
43
68
  bundleResourceIds() {
44
69
  if (this.value.status?.resourceKey) {
45
70
  return this.value?.status?.resourceKey.map(item => item.name);
46
71
  }
47
72
 
48
73
  return [];
49
- },
50
-
51
- repoSchema() {
52
- return this.$store.getters['management/schemaFor'](FLEET.GIT_REPO);
53
- },
74
+ }
54
75
  }
55
76
  };
56
77
 
@@ -58,10 +79,41 @@ export default {
58
79
 
59
80
  <template>
60
81
  <div>
61
- <Tabbed>
62
- <Tab label="Resources" name="resources" :weight="30">
63
- <FleetBundleResources :value="bundleResources" />
64
- </Tab>
65
- </Tabbed>
82
+ <div class="bundle-title mt-20 mb-20">
83
+ <h2>{{ t('fleet.bundles.resources') }}</h2>
84
+ <span>{{ resourceCount }}</span>
85
+ </div>
86
+ <FleetBundleResources
87
+ v-if="hasRepoLabel"
88
+ :value="bundleResources"
89
+ />
90
+ <SortableTable
91
+ v-else
92
+ :rows="bundleResources"
93
+ :headers="resourceHeaders"
94
+ :table-actions="false"
95
+ :row-actions="false"
96
+ key-field="tableKey"
97
+ default-sort-by="state"
98
+ :paged="true"
99
+ />
66
100
  </div>
67
101
  </template>
102
+
103
+ <style lang="scss" scoped>
104
+ .bundle-title {
105
+ display: flex;
106
+ align-items: center;
107
+
108
+ h2 {
109
+ margin: 0 10px 0 0;
110
+ }
111
+
112
+ span {
113
+ background-color: var(--darker);
114
+ color: var(--default);
115
+ padding: 5px 10px;
116
+ border-radius: 15px;
117
+ }
118
+ }
119
+ </style>