@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/images/providers/entraid-black.svg +4 -0
  54. package/assets/images/providers/entraid.svg +9 -0
  55. package/assets/images/vendor/entraid.svg +9 -0
  56. package/assets/styles/app.scss +0 -1
  57. package/assets/styles/base/_variables.scss +2 -0
  58. package/assets/styles/fonts/_fontstack.scss +132 -8
  59. package/assets/translations/en-us.yaml +41 -22
  60. package/assets/translations/zh-hans.yaml +4 -8
  61. package/chart/__tests__/S3.test.ts +10 -3
  62. package/chart/monitoring/index.vue +10 -1
  63. package/components/ActionDropdownShell.vue +2 -1
  64. package/components/CountBox.vue +20 -0
  65. package/components/CreateDriver.vue +0 -12
  66. package/components/CruResourceFooter.vue +9 -5
  67. package/components/DetailText.vue +12 -3
  68. package/components/ExplorerProjectsNamespaces.vue +1 -1
  69. package/components/InstallHelmCharts.vue +2 -2
  70. package/components/LandingPagePreference.vue +14 -5
  71. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  72. package/components/Resource/Detail/Metadata/index.vue +6 -0
  73. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  74. package/components/Resource/Detail/SpacedRow.vue +3 -1
  75. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  76. package/components/ResourceList/Masthead.vue +12 -8
  77. package/components/SelectIconGrid.vue +5 -10
  78. package/components/SingleClusterInfo.vue +1 -0
  79. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  80. package/components/SortableTable/index.vue +6 -9
  81. package/components/SortableTable/selection.js +23 -5
  82. package/components/SortableTable/sorting.js +6 -3
  83. package/components/Wizard.vue +14 -13
  84. package/components/__tests__/CountBox.test.ts +72 -0
  85. package/components/__tests__/DetailText.test.ts +113 -0
  86. package/components/fleet/FleetBundles.vue +100 -12
  87. package/components/fleet/FleetClusterTargets/index.vue +54 -15
  88. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  89. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  90. package/components/form/InputWithSelect.vue +18 -10
  91. package/components/form/KeyValue.vue +17 -1
  92. package/components/form/LabeledSelect.vue +101 -26
  93. package/components/form/NameNsDescription.vue +11 -0
  94. package/components/form/Security.vue +6 -2
  95. package/components/form/Select.vue +73 -56
  96. package/components/form/ServiceNameSelect.vue +13 -11
  97. package/components/form/WorkloadPorts.vue +2 -7
  98. package/components/form/__tests__/KeyValue.test.ts +66 -0
  99. package/components/form/__tests__/NodeScheduling.test.ts +9 -0
  100. package/components/form/__tests__/Security.test.ts +76 -0
  101. package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
  102. package/components/formatter/Autoscaler.vue +4 -4
  103. package/components/formatter/ClusterKubeVersion.vue +27 -0
  104. package/components/formatter/ClusterLink.vue +1 -7
  105. package/components/formatter/ClusterProvider.vue +6 -10
  106. package/components/formatter/FleetSummaryGraph.vue +0 -3
  107. package/components/formatter/MachineSummaryGraph.vue +1 -1
  108. package/components/formatter/PodsUsage.vue +2 -2
  109. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  110. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  111. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  112. package/components/nav/Group.vue +7 -6
  113. package/components/nav/Header.vue +24 -3
  114. package/components/nav/NamespaceFilter.vue +2 -2
  115. package/components/nav/NotificationCenter/Notification.vue +4 -1
  116. package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
  117. package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
  118. package/components/nav/TopLevelMenu.helper.ts +15 -3
  119. package/components/nav/TopLevelMenu.vue +16 -5
  120. package/components/nav/Type.vue +8 -7
  121. package/components/nav/WindowManager/index.vue +2 -1
  122. package/components/nav/WorkspaceSwitcher.vue +13 -0
  123. package/components/nav/__tests__/Group.test.ts +67 -0
  124. package/components/nav/__tests__/Header.test.ts +235 -0
  125. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  126. package/components/nav/__tests__/Type.test.ts +20 -3
  127. package/components/templates/default.vue +34 -4
  128. package/components/templates/home.vue +30 -25
  129. package/components/templates/plain.vue +31 -26
  130. package/components/templates/standalone.vue +17 -0
  131. package/composables/useFormValidation.ts +93 -0
  132. package/composables/useLabeledFormElement.ts +10 -2
  133. package/composables/useLabeledSelect.ts +60 -0
  134. package/composables/useUserRetentionValidation.ts +1 -49
  135. package/composables/useVeeValidateField.test.ts +159 -0
  136. package/composables/useVeeValidateField.ts +67 -0
  137. package/config/cookies.js +0 -1
  138. package/config/labels-annotations.js +1 -0
  139. package/config/pagination-table-headers.js +18 -1
  140. package/config/product/manager.js +82 -21
  141. package/config/query-params.js +1 -0
  142. package/config/router/routes.js +6 -8
  143. package/config/table-headers.js +20 -1
  144. package/config/types.js +2 -1
  145. package/core/__tests__/plugin-products.test.ts +1505 -30
  146. package/core/plugin-products-base.ts +137 -20
  147. package/core/plugin-products-helpers.ts +5 -4
  148. package/core/plugin-products.ts +4 -0
  149. package/core/plugin-types.ts +129 -4
  150. package/core/plugin.ts +15 -7
  151. package/core/productDebugger.js +9 -4
  152. package/core/types-provisioning.ts +43 -30
  153. package/core/types.ts +58 -19
  154. package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
  155. package/detail/__tests__/pod.test.ts +41 -0
  156. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  157. package/detail/management.cattle.io.fleetworkspace.vue +49 -0
  158. package/detail/pod.vue +1 -1
  159. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  160. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
  161. package/edit/__tests__/kontainerDriver.test.ts +0 -13
  162. package/edit/__tests__/nodeDriver.test.ts +5 -11
  163. package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
  164. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  165. package/edit/auth/__tests__/azuread.test.ts +217 -34
  166. package/edit/auth/__tests__/oidc.test.ts +54 -0
  167. package/edit/auth/azuread.vue +123 -15
  168. package/edit/auth/oidc.vue +10 -2
  169. package/edit/kontainerDriver.vue +1 -2
  170. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  171. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  172. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  173. package/edit/nodeDriver.vue +0 -2
  174. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
  175. package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
  176. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  177. package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
  178. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  179. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  180. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  181. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  182. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  183. package/edit/secret/__tests__/ssh.test.ts +5 -6
  184. package/edit/secret/basic.vue +31 -0
  185. package/edit/secret/index.vue +68 -17
  186. package/edit/secret/registry.vue +38 -0
  187. package/edit/secret/ssh.vue +29 -0
  188. package/edit/secret/tls.vue +30 -0
  189. package/edit/service.vue +4 -4
  190. package/edit/workload/Upgrading.vue +3 -3
  191. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  192. package/edit/workload/mixins/workload.js +2 -1
  193. package/initialize/App.vue +29 -2
  194. package/initialize/install-plugins.js +0 -2
  195. package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
  196. package/list/catalog.cattle.io.app.vue +25 -5
  197. package/list/fleet.cattle.io.bundle.vue +7 -104
  198. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  199. package/list/management.cattle.io.feature.vue +1 -1
  200. package/list/management.cattle.io.fleetworkspace.vue +8 -0
  201. package/list/provisioning.cattle.io.cluster.vue +262 -180
  202. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  203. package/machine-config/amazonec2.vue +1 -0
  204. package/mixins/__tests__/chart.test.ts +112 -0
  205. package/mixins/brand.js +2 -1
  206. package/mixins/chart.js +50 -15
  207. package/mixins/resource-fetch-api-pagination.js +41 -5
  208. package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
  209. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
  210. package/models/__tests__/chart.test.ts +99 -6
  211. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  212. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  213. package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
  214. package/models/__tests__/management.cattle.io.node.ts +6 -5
  215. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  216. package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
  217. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  218. package/models/base-cluster.x-k8s.io.js +26 -0
  219. package/models/catalog.cattle.io.app.js +21 -17
  220. package/models/catalog.cattle.io.clusterrepo.js +39 -11
  221. package/models/chart.js +33 -19
  222. package/models/cluster.js +1 -1
  223. package/models/cluster.x-k8s.io.machine.js +4 -22
  224. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  225. package/models/cluster.x-k8s.io.machineset.js +2 -20
  226. package/models/compliance.cattle.io.clusterscan.js +130 -2
  227. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  228. package/models/fleet-application.js +4 -2
  229. package/models/fleet.cattle.io.bundle.js +1 -1
  230. package/models/kontainerdriver.js +11 -0
  231. package/models/management.cattle.io.authconfig.js +5 -1
  232. package/models/management.cattle.io.cluster.js +402 -78
  233. package/models/management.cattle.io.feature.js +3 -3
  234. package/models/management.cattle.io.kontainerdriver.js +1 -26
  235. package/models/management.cattle.io.node.js +6 -4
  236. package/models/management.cattle.io.nodepool.js +1 -1
  237. package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
  238. package/models/networking.k8s.io.ingress.js +12 -4
  239. package/models/nodedriver.js +7 -0
  240. package/models/provisioning.cattle.io.cluster.js +47 -330
  241. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  242. package/package.json +20 -37
  243. package/pages/__tests__/readme.test.ts +49 -0
  244. package/pages/auth/setup.vue +2 -3
  245. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
  246. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
  247. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
  248. package/pages/c/_cluster/apps/charts/chart.vue +275 -39
  249. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  250. package/pages/c/_cluster/apps/charts/install.vue +18 -10
  251. package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
  252. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  253. package/pages/c/_cluster/explorer/index.vue +5 -49
  254. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  255. package/pages/c/_cluster/istio/index.vue +21 -6
  256. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
  257. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
  258. package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
  259. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
  260. package/pages/c/_cluster/uiplugins/index.vue +226 -222
  261. package/pages/diagnostic.vue +13 -17
  262. package/pages/fail-whale.vue +18 -0
  263. package/pages/home.vue +77 -260
  264. package/pages/readme.vue +88 -0
  265. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  266. package/plugins/dashboard-store/actions.js +40 -18
  267. package/plugins/dashboard-store/resource-class.js +5 -2
  268. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  269. package/plugins/steve/steve-pagination-utils.ts +11 -3
  270. package/plugins/steve/subscribe.js +35 -5
  271. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
  272. package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
  273. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
  274. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  275. package/rancher-components/RcButton/RcButton.vue +38 -8
  276. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  277. package/scripts/test-plugins-build.sh +5 -2
  278. package/server/server-middleware.js +2 -2
  279. package/static/humans.txt +1 -0
  280. package/static/robots.txt +34 -0
  281. package/static/welcome-cow.svg +18 -0
  282. package/store/__tests__/catalog.test.ts +276 -12
  283. package/store/__tests__/type-map.test.ts +556 -1
  284. package/store/action-menu.js +8 -3
  285. package/store/auth.js +1 -4
  286. package/store/aws.js +27 -16
  287. package/store/catalog.js +87 -11
  288. package/store/digitalocean.js +20 -38
  289. package/store/index.js +2 -0
  290. package/store/linode.js +25 -40
  291. package/store/pnap.js +1 -0
  292. package/store/type-map.js +111 -29
  293. package/tsconfig.paths.json +8 -8
  294. package/types/kube/kube-api.ts +14 -1
  295. package/types/rancher/steve.api.ts +12 -12
  296. package/types/resources/settings.d.ts +2 -1
  297. package/types/shell/index.d.ts +128 -24
  298. package/types/store/dashboard-store.types.ts +108 -11
  299. package/types/store/pagination.types.ts +6 -3
  300. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  301. package/utils/__tests__/async.test.ts +87 -0
  302. package/utils/__tests__/aws.test.ts +140 -0
  303. package/utils/__tests__/banners.test.ts +176 -0
  304. package/utils/__tests__/chart.test.ts +64 -1
  305. package/utils/__tests__/color.test.ts +226 -0
  306. package/utils/__tests__/duration.test.ts +140 -0
  307. package/utils/__tests__/fleet.test.ts +340 -0
  308. package/utils/__tests__/git.test.ts +270 -0
  309. package/utils/__tests__/inactivity.test.ts +316 -0
  310. package/utils/__tests__/ingress.test.ts +553 -0
  311. package/utils/__tests__/kube.test.ts +68 -0
  312. package/utils/__tests__/namespace-filter.test.ts +109 -0
  313. package/utils/__tests__/object.test.ts +77 -0
  314. package/utils/__tests__/pagination-utils.test.ts +361 -0
  315. package/utils/__tests__/parse-externalid.test.ts +137 -0
  316. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  317. package/utils/__tests__/poller-sequential.test.ts +177 -0
  318. package/utils/__tests__/poller.test.ts +170 -0
  319. package/utils/__tests__/promise.test.ts +346 -0
  320. package/utils/__tests__/settings.test.ts +140 -0
  321. package/utils/__tests__/sort-utils.test.ts +301 -0
  322. package/utils/__tests__/string-utils.test.ts +798 -0
  323. package/utils/__tests__/string.test.ts +23 -1
  324. package/utils/__tests__/style.test.ts +154 -0
  325. package/utils/__tests__/svg-filter.test.ts +184 -0
  326. package/utils/__tests__/time.test.ts +14 -1
  327. package/utils/__tests__/units.test.ts +417 -0
  328. package/utils/__tests__/url.test.ts +246 -0
  329. package/utils/__tests__/versions.test.ts +128 -0
  330. package/utils/__tests__/xccdf.test.ts +391 -0
  331. package/utils/chart.js +36 -0
  332. package/utils/fleet.ts +13 -3
  333. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  334. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  335. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  336. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  337. package/utils/gc/__tests__/gc.test.ts +487 -0
  338. package/utils/ingress.ts +9 -1
  339. package/utils/object.js +33 -2
  340. package/utils/pagination-utils.ts +2 -1
  341. package/utils/string.js +25 -2
  342. package/utils/time.ts +5 -0
  343. package/utils/uiplugins.ts +5 -5
  344. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  345. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  346. package/utils/validators/__tests__/index.test.ts +481 -0
  347. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  348. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  349. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  350. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  351. package/utils/validators/__tests__/role-template.test.ts +149 -0
  352. package/utils/validators/__tests__/service.test.ts +283 -0
  353. package/utils/validators/__tests__/setting.test.js +32 -0
  354. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  355. package/utils/validators/formRules/index.ts +5 -5
  356. package/utils/validators/machine-pool.ts +1 -1
  357. package/utils/validators/setting.js +18 -3
  358. package/utils/xccdf.ts +418 -0
  359. package/vue.config.js +0 -9
  360. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  361. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  362. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  363. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  364. package/assets/images/providers/azuread-black.svg +0 -22
  365. package/assets/images/providers/azuread.svg +0 -25
  366. package/assets/images/vendor/azuread.svg +0 -18
  367. package/assets/styles/fonts/_dots.scss +0 -18
  368. package/components/EmberPage.vue +0 -622
  369. package/components/EmberPageView.vue +0 -39
  370. package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
  371. package/mixins/labeled-form-element.ts +0 -225
  372. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
  373. package/pages/c/_cluster/manager/pages/_page.vue +0 -22
  374. package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
  375. package/plugins/ember-cookie.js +0 -17
  376. package/utils/ember-page.js +0 -30
@@ -9,7 +9,6 @@ import ActionMenu from '@shell/components/ActionMenu';
9
9
  import GrowlManager from '@shell/components/GrowlManager';
10
10
  import ModalManager from '@shell/components/ModalManager';
11
11
  import SlideInPanelManager from '@shell/components/SlideInPanelManager';
12
- import WindowManager from '@shell/components/nav/WindowManager';
13
12
  import PromptRemove from '@shell/components/PromptRemove';
14
13
  import PromptRestore from '@shell/components/PromptRestore';
15
14
  import PromptModal from '@shell/components/PromptModal';
@@ -39,7 +38,6 @@ export default {
39
38
  GrowlManager,
40
39
  ModalManager,
41
40
  SlideInPanelManager,
42
- WindowManager,
43
41
  FixedBanner,
44
42
  AwsComplianceBanner,
45
43
  Inactivity,
@@ -48,10 +46,11 @@ export default {
48
46
 
49
47
  mixins: [PageHeaderActions, Brand, BrowserTabVisibility],
50
48
 
49
+ inject: ['notifyWmContainerReady'],
50
+
51
51
  // Note - This will not run on route change
52
52
  data() {
53
53
  return {
54
- layout: Layout.default,
55
54
  noLocaleShortcut: process.env.dev || false,
56
55
  wantNavSync: false,
57
56
  };
@@ -104,6 +103,10 @@ export default {
104
103
  },
105
104
  },
106
105
 
106
+ mounted() {
107
+ this.notifyWmContainerReady(Layout.default);
108
+ },
109
+
107
110
  methods: {
108
111
 
109
112
  handlePageAction(action) {
@@ -159,6 +162,10 @@ export default {
159
162
 
160
163
  <template>
161
164
  <div class="dashboard-root">
165
+ <a
166
+ href="#main-content"
167
+ class="skip-to-content btn role-primary"
168
+ >{{ t('nav.skipToContent') }}</a>
162
169
  <FixedBanner :header="true" />
163
170
  <AwsComplianceBanner v-if="managementReady" />
164
171
  <div
@@ -173,8 +180,10 @@ export default {
173
180
  />
174
181
  <main
175
182
  v-if="clusterAndRouteReady"
183
+ id="main-content"
176
184
  class="main-layout"
177
185
  :aria-label="t('layouts.default')"
186
+ tabindex="-1"
178
187
  >
179
188
  <router-view
180
189
  :key="$route.path"
@@ -211,15 +220,22 @@ export default {
211
220
  <!-- Ensure there's an outlet to show the error (404) page -->
212
221
  <main
213
222
  v-else-if="unmatchedRoute"
223
+ id="main-content"
214
224
  class="main-layout"
215
225
  :aria-label="t('layouts.default')"
226
+ tabindex="-1"
216
227
  >
217
228
  <router-view
218
229
  :key="$route.path"
219
230
  class="outlet"
220
231
  />
221
232
  </main>
222
- <WindowManager :layout="layout" />
233
+ <!-- Teleport target for WindowManager (unique per layout) -->
234
+ <!-- display: contents makes child panels become grid items of the parent grid -->
235
+ <div
236
+ id="wm-container-default"
237
+ style="display: contents;"
238
+ />
223
239
  </div>
224
240
  <FixedBanner :footer="true" />
225
241
  <GrowlManager />
@@ -227,3 +243,17 @@ export default {
227
243
  <Inactivity />
228
244
  </div>
229
245
  </template>
246
+
247
+ <style lang="scss" scoped>
248
+ .skip-to-content {
249
+ position: fixed;
250
+ top: 0;
251
+ left: 0;
252
+ z-index: 9999;
253
+ transform: translateY(-100%);
254
+
255
+ &:focus {
256
+ transform: translate(1rem, 1rem);
257
+ }
258
+ }
259
+ </style>
@@ -11,7 +11,6 @@ import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
11
11
  import Inactivity from '@shell/components/Inactivity';
12
12
  import { mapState, mapGetters } from 'vuex';
13
13
  import PromptModal from '@shell/components/PromptModal';
14
- import WindowManager from '@shell/components/nav/WindowManager';
15
14
  import { Layout } from '@shell/types/window-manager';
16
15
 
17
16
  export default {
@@ -25,14 +24,14 @@ export default {
25
24
  AwsComplianceBanner,
26
25
  Inactivity,
27
26
  PromptModal,
28
- WindowManager
29
27
  },
30
28
 
31
29
  mixins: [Brand, BrowserTabVisibility],
32
30
 
31
+ inject: ['notifyWmContainerReady'],
32
+
33
33
  data() {
34
34
  return {
35
- layout: Layout.home,
36
35
  // Assume home pages have routes where the name is the key to use for string lookup
37
36
  name: this.$route.name,
38
37
  noLocaleShortcut: process.env.dev || false,
@@ -45,6 +44,10 @@ export default {
45
44
  ...mapGetters(['showTopLevelMenu']),
46
45
  },
47
46
 
47
+ mounted() {
48
+ this.notifyWmContainerReady(Layout.home);
49
+ },
50
+
48
51
  methods: {
49
52
  toggleTheme() {
50
53
  this.$store.dispatch('prefs/toggleTheme');
@@ -59,6 +62,10 @@ export default {
59
62
 
60
63
  <template>
61
64
  <div class="dashboard-root">
65
+ <a
66
+ href="#main-content"
67
+ class="skip-to-content btn role-primary"
68
+ >{{ t('nav.skipToContent') }}</a>
62
69
  <FixedBanner :header="true" />
63
70
  <Inactivity />
64
71
  <AwsComplianceBanner />
@@ -74,15 +81,22 @@ export default {
74
81
  />
75
82
 
76
83
  <main
84
+ id="main-content"
77
85
  class="main-layout"
78
86
  :aria-label="t('layouts.home')"
87
+ tabindex="-1"
79
88
  >
80
89
  <router-view
81
90
  :key="$route.path"
82
91
  class="outlet"
83
92
  />
84
93
  </main>
85
- <WindowManager :layout="layout" />
94
+ <!-- Teleport target for WindowManager (unique per layout) -->
95
+ <!-- display: contents makes child panels become grid items of the parent grid -->
96
+ <div
97
+ id="wm-container-home"
98
+ style="display: contents;"
99
+ />
86
100
  </div>
87
101
  <FixedBanner :footer="true" />
88
102
  <GrowlManager />
@@ -125,27 +139,6 @@ export default {
125
139
  }
126
140
  }
127
141
 
128
- .wm {
129
- grid-area: wm;
130
- overflow-y: hidden;
131
- z-index: z-index('windowsManager');
132
- position: relative;
133
- }
134
-
135
- .wm-vr {
136
- grid-area: wm-vr;
137
- overflow-y: hidden;
138
- z-index: z-index('windowsManager');
139
- position: relative;
140
- }
141
-
142
- .wm-vl {
143
- grid-area: wm-vl;
144
- overflow-y: hidden;
145
- z-index: z-index('windowsManager');
146
- position: relative;
147
- }
148
-
149
142
  MAIN {
150
143
  grid-area: main;
151
144
  overflow: auto;
@@ -155,4 +148,16 @@ export default {
155
148
  padding: 0;
156
149
  }
157
150
  }
151
+
152
+ .skip-to-content {
153
+ position: fixed;
154
+ top: 0;
155
+ left: 0;
156
+ z-index: 9999;
157
+ transform: translateY(-100%);
158
+
159
+ &:focus {
160
+ transform: translate(1rem, 1rem);
161
+ }
162
+ }
158
163
  </style>
@@ -14,7 +14,6 @@ import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
14
14
  import Inactivity from '@shell/components/Inactivity';
15
15
  import { mapGetters } from 'vuex';
16
16
  import PromptModal from '@shell/components/PromptModal';
17
- import WindowManager from '@shell/components/nav/WindowManager';
18
17
  import { Layout } from '@shell/types/window-manager';
19
18
 
20
19
  export default {
@@ -31,17 +30,17 @@ export default {
31
30
  SlideInPanelManager,
32
31
  AwsComplianceBanner,
33
32
  Inactivity,
34
- WindowManager
35
33
  },
36
34
 
37
35
  mixins: [Brand, BrowserTabVisibility],
38
36
 
37
+ inject: ['notifyWmContainerReady'],
38
+
39
39
  data() {
40
40
  return {
41
41
  // Assume home pages have routes where the name is the key to use for string lookup
42
42
  name: this.$route.name,
43
- noLocaleShortcut: process.env.dev || false,
44
- layout: Layout.plain,
43
+ noLocaleShortcut: process.env.dev || false
45
44
  };
46
45
  },
47
46
 
@@ -50,6 +49,10 @@ export default {
50
49
  ...mapGetters(['showTopLevelMenu']),
51
50
  },
52
51
 
52
+ mounted() {
53
+ this.notifyWmContainerReady(Layout.plain);
54
+ },
55
+
53
56
  methods: {
54
57
  toggleTheme() {
55
58
  this.$store.dispatch('prefs/toggleTheme');
@@ -63,6 +66,10 @@ export default {
63
66
 
64
67
  <template>
65
68
  <div class="dashboard-root">
69
+ <a
70
+ href="#main-content"
71
+ class="skip-to-content btn role-primary"
72
+ >{{ t('nav.skipToContent') }}</a>
66
73
  <FixedBanner :header="true" />
67
74
  <AwsComplianceBanner />
68
75
 
@@ -72,8 +79,10 @@ export default {
72
79
  >
73
80
  <Header :simple="true" />
74
81
  <main
82
+ id="main-content"
75
83
  class="main-layout"
76
84
  :aria-label="t('layouts.plain')"
85
+ tabindex="-1"
77
86
  >
78
87
  <IndentedPanel class="pt-20">
79
88
  <router-view
@@ -98,7 +107,12 @@ export default {
98
107
  @shortkey="toggleNoneLocale()"
99
108
  />
100
109
  </main>
101
- <WindowManager :layout="layout" />
110
+ <!-- Teleport target for WindowManager (unique per layout) -->
111
+ <!-- display: contents makes child panels become grid items of the parent grid -->
112
+ <div
113
+ id="wm-container-plain"
114
+ style="display: contents;"
115
+ />
102
116
  </div>
103
117
 
104
118
  <FixedBanner :footer="true" />
@@ -130,27 +144,6 @@ export default {
130
144
  }
131
145
  }
132
146
 
133
- .wm {
134
- grid-area: wm;
135
- overflow-y: hidden;
136
- z-index: z-index('windowsManager');
137
- position: relative;
138
- }
139
-
140
- .wm-vr {
141
- grid-area: wm-vr;
142
- overflow-y: hidden;
143
- z-index: z-index('windowsManager');
144
- position: relative;
145
- }
146
-
147
- .wm-vl {
148
- grid-area: wm-vl;
149
- overflow-y: hidden;
150
- z-index: z-index('windowsManager');
151
- position: relative;
152
- }
153
-
154
147
  MAIN {
155
148
  grid-area: main;
156
149
  overflow: auto;
@@ -160,4 +153,16 @@ export default {
160
153
  padding: 0;
161
154
  }
162
155
  }
156
+
157
+ .skip-to-content {
158
+ position: fixed;
159
+ top: 0;
160
+ left: 0;
161
+ z-index: 9999;
162
+ transform: translateY(-100%);
163
+
164
+ &:focus {
165
+ transform: translate(1rem, 1rem);
166
+ }
167
+ }
163
168
  </style>
@@ -1,3 +1,9 @@
1
+ <script>
2
+ import Brand from '@shell/mixins/brand';
3
+
4
+ export default { mixins: [Brand] };
5
+ </script>
6
+
1
7
  <template>
2
8
  <router-view :key="$route.path" />
3
9
  </template>
@@ -5,5 +11,16 @@
5
11
  <style lang="scss">
6
12
  body, #__root, #__layout {
7
13
  height: 100%;
14
+ background: var(--body-bg);
15
+ color: var(--body-text);
16
+ }
17
+
18
+ // Standalone pages should not reserve dashboard layout areas (e.g. side nav and header).
19
+ #__layout {
20
+ --header-height: 0px;
21
+ --nav-width: 0px;
22
+ --wm-vl-width: 0px;
23
+ --wm-vr-width: 0px;
24
+ --wm-height: 0px;
8
25
  }
9
26
  </style>
@@ -0,0 +1,93 @@
1
+ import { computed, provide, ref } from 'vue';
2
+ import { useForm } from 'vee-validate';
3
+ import formRulesGenerator from '@shell/utils/validators/formRules/index';
4
+ import type { Validator } from '@shell/utils/validators/formRules/index';
5
+ import type { Translation } from '@shell/types/t';
6
+
7
+ export interface RuleSet {
8
+ path: string;
9
+ rules: string[];
10
+ translationKey?: string;
11
+ }
12
+
13
+ const nullValidator: Validator = () => undefined;
14
+
15
+ function createRuleResolver(
16
+ t: Translation,
17
+ ruleSets: RuleSet[],
18
+ extraRules: Record<string, Validator>
19
+ ) {
20
+ return (path: string): Validator[] => {
21
+ const set = ruleSets.find((s) => s.path === path);
22
+
23
+ if (!set) return [];
24
+
25
+ const key = set.translationKey ? t(set.translationKey) : 'Value';
26
+ const allRules = {
27
+ ...formRulesGenerator(t, { key }),
28
+ ...extraRules,
29
+ };
30
+
31
+ return set.rules.map((r) => {
32
+ const rule = allRules[r] as Validator | undefined;
33
+
34
+ if (rule) {
35
+ return rule;
36
+ }
37
+
38
+ if (process.env.NODE_ENV !== 'production') {
39
+ throw new Error(`[useFormValidation] Unknown validation rule: "${ r }". Check for a typo in your ruleSets.`);
40
+ }
41
+
42
+ return nullValidator;
43
+ });
44
+ };
45
+ }
46
+
47
+ /**
48
+ * For root/parent form components. Creates a vee-validate form context and
49
+ * resolves fvFormRuleSets-style rule string arrays into validator functions.
50
+ * Child components rendered within this form should use useFormRules instead.
51
+ */
52
+ export function useFormValidation(
53
+ t: Translation,
54
+ ruleSets: RuleSet[],
55
+ extraRules: Record<string, Validator> = {}
56
+ ) {
57
+ const { errors, validate } = useForm();
58
+ const showAllErrors = ref(false);
59
+
60
+ provide('vee-show-all-errors', showAllErrors);
61
+
62
+ const getRules = createRuleResolver(t, ruleSets, extraRules);
63
+ const isFormValid = computed(() => Object.keys(errors.value).length === 0);
64
+
65
+ const validateForm: typeof validate = async(...args) => {
66
+ const result = await validate(...args);
67
+
68
+ showAllErrors.value = true;
69
+
70
+ return result;
71
+ };
72
+
73
+ return {
74
+ getRules,
75
+ isFormValid,
76
+ validateForm,
77
+ veeErrors: errors,
78
+ showAllErrors,
79
+ };
80
+ }
81
+
82
+ /**
83
+ * For child components that render inside a parent useFormValidation() form.
84
+ * Resolves rule strings into validator functions without creating a new form
85
+ * context — fields register with the nearest ancestor's useFormValidation() context.
86
+ */
87
+ export function useFormRules(
88
+ t: Translation,
89
+ ruleSets: RuleSet[],
90
+ extraRules: Record<string, Validator> = {}
91
+ ) {
92
+ return { getRules: createRuleResolver(t, ruleSets, extraRules) };
93
+ }
@@ -6,7 +6,7 @@ import { _VIEW, _EDIT } from '@shell/config/query-params';
6
6
 
7
7
  interface LabeledFormElementProps {
8
8
  mode: string;
9
- value: string | number | Record<string, any>
9
+ value: string | number | Record<string, any> | null
10
10
  required: boolean;
11
11
  disabled: boolean;
12
12
  rules: Array<any>;
@@ -18,6 +18,8 @@ interface UseLabeledFormElement {
18
18
  focused: Ref<boolean>;
19
19
  blurred: Ref<number | null>;
20
20
  requiredField: ComputedRef<any>;
21
+ empty: ComputedRef<boolean>;
22
+ isView: ComputedRef<boolean>;
21
23
  isDisabled: ComputedRef<any>;
22
24
  validationMessage: ComputedRef<any>;
23
25
  onFocusLabeled: () => void;
@@ -46,7 +48,7 @@ export const labeledFormElementProps = {
46
48
  default: null
47
49
  },
48
50
  value: {
49
- type: [String, Number, Object],
51
+ type: [String, Number, Object, null],
50
52
  default: ''
51
53
  },
52
54
  mode: {
@@ -82,6 +84,10 @@ export const useLabeledFormElement = (props: LabeledFormElementProps, emit: Emit
82
84
  return props.required || props.rules?.some((rule: any) => rule?.name === 'required');
83
85
  });
84
86
 
87
+ const empty = computed(() => {
88
+ return !!`${ props.value }`;
89
+ });
90
+
85
91
  const isView = computed(() => {
86
92
  return props.mode === _VIEW;
87
93
  });
@@ -143,6 +149,8 @@ export const useLabeledFormElement = (props: LabeledFormElementProps, emit: Emit
143
149
  raised,
144
150
  focused,
145
151
  blurred,
152
+ empty,
153
+ isView,
146
154
  onFocusLabeled,
147
155
  onBlurLabeled,
148
156
  isDisabled,
@@ -0,0 +1,60 @@
1
+ import { computed, ComputedRef, Ref, nextTick } from 'vue';
2
+ import { getWidth, setWidth } from '@shell/utils/width';
3
+
4
+ interface LabeledSelectProps {
5
+ options?: Array<any>;
6
+ searchable?: boolean;
7
+ filterable?: boolean;
8
+ }
9
+
10
+ interface UseLabeledSelect {
11
+ isSearchable: ComputedRef<boolean>;
12
+ isFilterable: ComputedRef<boolean>;
13
+ resizeHandler: (selectRef: Ref<HTMLElement | null>) => void;
14
+ }
15
+
16
+ export const useLabeledSelect = (props: LabeledSelectProps, canPaginate?: ComputedRef<boolean>): UseLabeledSelect => {
17
+ const isSearchable = computed(() => {
18
+ if (canPaginate?.value) {
19
+ return true;
20
+ }
21
+ const options = props.options || [];
22
+
23
+ if (props.searchable || options.length >= 10) {
24
+ return true;
25
+ }
26
+
27
+ return false;
28
+ });
29
+
30
+ const isFilterable = computed(() => {
31
+ if (canPaginate?.value) {
32
+ return false;
33
+ }
34
+
35
+ return props.filterable ?? true;
36
+ });
37
+
38
+ const resizeHandler = (selectRef: Ref<HTMLElement | null>) => {
39
+ // since the DD is positioned there is no way to 'inherit' the size of the input, this calcs the size of the parent and set the dd width if it is smaller. If not let it grow with the regular styles
40
+ nextTick(() => {
41
+ if (!selectRef.value) {
42
+ return;
43
+ }
44
+
45
+ const DD = selectRef.value.querySelector('ul.vs__dropdown-menu');
46
+ const selectWidth = getWidth(selectRef.value) || 0;
47
+ const dropWidth = getWidth(DD as Element) || 0;
48
+
49
+ if (dropWidth < selectWidth) {
50
+ setWidth(DD as Element, selectWidth);
51
+ }
52
+ });
53
+ };
54
+
55
+ return {
56
+ isSearchable,
57
+ isFilterable,
58
+ resizeHandler
59
+ };
60
+ };
@@ -1,4 +1,4 @@
1
- import { Ref, ComputedRef, ref, computed } from 'vue';
1
+ import { Ref } from 'vue';
2
2
  import { useStore } from 'vuex';
3
3
 
4
4
  import { SETTING } from '@shell/config/settings';
@@ -10,24 +10,12 @@ import dayjs from 'dayjs';
10
10
  import duration from 'dayjs/plugin/duration';
11
11
  dayjs.extend(duration);
12
12
 
13
- type SettingValidation = 'user-retention-cron' | 'disable-inactive-user-after' | 'delete-inactive-user-after';
14
-
15
- type Validation = {
16
- [SETTING.DISABLE_INACTIVE_USER_AFTER]?: boolean;
17
- [SETTING.DELETE_INACTIVE_USER_AFTER]?: boolean;
18
- [SETTING.USER_RETENTION_CRON]?: boolean;
19
- }
20
-
21
13
  interface UseUserRetentionValidation {
22
14
  validateUserRetentionCron: (cronSetting: string | null) => string | undefined;
23
15
  validateDisableInactiveUserAfterDuration: (duration: string) => string | undefined;
24
16
  validateDeleteInactiveUserAfterDuration: (duration: string) => string | undefined;
25
17
  validateDeleteInactiveUserAfter: (duration: string) => string | undefined;
26
18
  validateDurationAgainstAuthUserSession: (duration: string) => string | undefined;
27
- setValidation: (formField: SettingValidation, isValid: boolean) => void;
28
- removeValidation : (setting: SettingValidation) => void;
29
- addValidation: (setting: SettingValidation) => void;
30
- isFormValid: ComputedRef<boolean>;
31
19
  }
32
20
 
33
21
  class ExpectedValidationError extends Error {
@@ -42,38 +30,6 @@ export const useUserRetentionValidation = (disableAfterPeriod: Ref<boolean>, del
42
30
  const store = useStore();
43
31
  const { t } = useI18n(store);
44
32
 
45
- /**
46
- * Tracks the validation state for user retention fields
47
- */
48
- const validation = ref<Validation>({
49
- [SETTING.DISABLE_INACTIVE_USER_AFTER]: true,
50
- [SETTING.DELETE_INACTIVE_USER_AFTER]: true,
51
- [SETTING.USER_RETENTION_CRON]: true,
52
- });
53
-
54
- const isFormValid = computed(() => {
55
- const validations = validation.value;
56
-
57
- return !Object.values(validations).includes(false);
58
- });
59
-
60
- const setValidation = (formField: SettingValidation, isValid: boolean) => {
61
- validation.value[formField] = isValid;
62
- };
63
-
64
- const removeValidation = (setting: SettingValidation) => {
65
- const { [setting]: _, ...rest } = validation.value;
66
-
67
- validation.value = rest;
68
- };
69
-
70
- const addValidation = (setting: SettingValidation) => {
71
- validation.value = {
72
- ...validation.value,
73
- [setting]: true,
74
- };
75
- };
76
-
77
33
  /**
78
34
  * Takes a duration string and produces a dayjs duration object.
79
35
  * @param duration Duration string in {h|m|s} (e.g. 6h3m2s)
@@ -193,9 +149,5 @@ export const useUserRetentionValidation = (disableAfterPeriod: Ref<boolean>, del
193
149
  validateDeleteInactiveUserAfterDuration,
194
150
  validateDeleteInactiveUserAfter,
195
151
  validateDurationAgainstAuthUserSession,
196
- setValidation,
197
- removeValidation,
198
- addValidation,
199
- isFormValid,
200
152
  };
201
153
  };