@rancher/shell 3.0.12-rc.2 → 3.0.12-rc.4

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 (473) 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/styles/base/_variables.scss +2 -0
  54. package/assets/styles/fonts/_fontstack.scss +132 -8
  55. package/assets/styles/global/_layout.scss +4 -0
  56. package/assets/translations/en-us.yaml +165 -45
  57. package/assets/translations/zh-hans.yaml +1 -7
  58. package/chart/monitoring/ClusterSelector.vue +0 -21
  59. package/chart/monitoring/index.vue +10 -1
  60. package/chart/monitoring/prometheus/index.vue +6 -3
  61. package/components/ActionDropdownShell.vue +2 -1
  62. package/components/CruResource.vue +161 -14
  63. package/components/CruResourceFooter.vue +9 -5
  64. package/components/ExplorerMembers.vue +8 -4
  65. package/components/ExplorerProjectsNamespaces.vue +11 -7
  66. package/components/GrowlManager.vue +4 -0
  67. package/components/InstallHelmCharts.vue +2 -2
  68. package/components/LandingPagePreference.vue +14 -5
  69. package/components/MgmtNodeList.vue +184 -0
  70. package/components/Resource/Detail/Card/StateCard/__tests__/composables.test.ts +90 -1
  71. package/components/Resource/Detail/Card/StateCard/composables.ts +57 -87
  72. package/components/Resource/Detail/Card/StatusCard/__tests__/StatusCard.test.ts +61 -0
  73. package/components/Resource/Detail/Card/StatusCard/index.vue +61 -15
  74. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +17 -1
  75. package/components/Resource/Detail/Metadata/KeyValue.vue +5 -2
  76. package/components/Resource/Detail/Metadata/KeyValueRow.vue +2 -6
  77. package/components/Resource/Detail/Metadata/index.vue +6 -0
  78. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  79. package/components/Resource/Detail/SpacedRow.vue +3 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  81. package/components/ResourceDetail/index.vue +1 -1
  82. package/components/ResourceList/Masthead.vue +19 -9
  83. package/components/ResourceList/index.vue +82 -1
  84. package/components/RichTranslation.vue +5 -2
  85. package/components/SelectIconGrid.vue +0 -10
  86. package/components/Setting.vue +1 -0
  87. package/components/SingleClusterInfo.vue +1 -0
  88. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  89. package/components/SortableTable/index.vue +6 -9
  90. package/components/SortableTable/selection.js +23 -5
  91. package/components/SortableTable/sorting.js +6 -3
  92. package/components/SubtleLink.vue +31 -6
  93. package/components/Tabbed/Tab.vue +29 -3
  94. package/components/Tabbed/index.vue +25 -3
  95. package/components/TableOfContents/TableOfContents.vue +109 -0
  96. package/components/TableOfContents/composables.ts +258 -0
  97. package/components/Window/ContainerShell.vue +21 -11
  98. package/components/Window/__tests__/ContainerShell.test.ts +107 -37
  99. package/components/Wizard.vue +23 -17
  100. package/components/fleet/AppCoChartGrid.vue +401 -0
  101. package/components/fleet/AppCoEmptyState.vue +127 -0
  102. package/components/fleet/AppCoPageHeader.vue +119 -0
  103. package/components/fleet/AppCoVersionSelect.vue +70 -0
  104. package/components/fleet/FleetBundles.vue +100 -12
  105. package/components/fleet/FleetClusterTargets/ClusterSelectionFields.vue +217 -0
  106. package/components/fleet/FleetClusterTargets/TargetsList.vue +123 -35
  107. package/components/fleet/FleetClusterTargets/index.vue +226 -161
  108. package/components/fleet/FleetIntro.vue +7 -3
  109. package/components/fleet/FleetNoWorkspaces.vue +7 -3
  110. package/components/fleet/FleetSecretSelector.vue +5 -3
  111. package/components/fleet/FleetValuesFrom.vue +8 -2
  112. package/components/fleet/GitRepoTargetTab.vue +0 -2
  113. package/components/fleet/HelmOpAdvancedTab.vue +19 -53
  114. package/components/fleet/HelmOpAppCoConfigTab.vue +593 -0
  115. package/components/fleet/HelmOpAppCoResourcesSection.vue +162 -0
  116. package/components/fleet/HelmOpResourcesSection.vue +82 -0
  117. package/components/fleet/HelmOpTargetOptionsSection.vue +89 -0
  118. package/components/fleet/HelmOpTargetTab.vue +64 -60
  119. package/components/fleet/HelmOpValuesTab.vue +129 -105
  120. package/components/fleet/__tests__/AppCoEmptyState.test.ts +71 -0
  121. package/components/fleet/__tests__/AppCoVersionSelect.test.ts +36 -0
  122. package/components/fleet/__tests__/ClusterSelectionFields.test.ts +62 -0
  123. package/components/fleet/__tests__/FleetClusterTargets.test.ts +402 -115
  124. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  125. package/components/fleet/__tests__/FleetSecretSelector.test.ts +16 -0
  126. package/components/fleet/__tests__/FleetValuesFrom.test.ts +44 -0
  127. package/components/fleet/__tests__/HelmOpAppCoConfigTab.test.ts +59 -0
  128. package/components/fleet/__tests__/HelmOpAppCoResourcesSection.test.ts +62 -0
  129. package/components/fleet/__tests__/HelmOpResourcesSection.test.ts +43 -0
  130. package/components/fleet/__tests__/HelmOpTargetOptionsSection.test.ts +34 -0
  131. package/components/fleet/__tests__/HelmOpValuesTab.test.ts +39 -0
  132. package/components/fleet/__tests__/__snapshots__/AppCoEmptyState.test.ts.snap +97 -0
  133. package/components/fleet/__tests__/__snapshots__/AppCoVersionSelect.test.ts.snap +30 -0
  134. package/components/fleet/__tests__/__snapshots__/ClusterSelectionFields.test.ts.snap +209 -0
  135. package/components/fleet/__tests__/__snapshots__/HelmOpTargetOptionsSection.test.ts.snap +140 -0
  136. package/components/fleet/dashboard/Empty.vue +8 -4
  137. package/components/fleet/dashboard/ResourceCard.vue +28 -0
  138. package/components/fleet/dashboard/ResourceDetails.vue +28 -0
  139. package/components/fleet/dashboard/__tests__/ResourceCard.test.ts +87 -0
  140. package/components/form/ArrayList.vue +61 -4
  141. package/components/form/KeyValue.vue +23 -2
  142. package/components/form/LabeledSelect.vue +59 -4
  143. package/components/form/Labels.vue +22 -3
  144. package/components/form/NameNsDescription.vue +24 -5
  145. package/components/form/ResourceTabs/index.vue +1 -0
  146. package/components/form/Security.vue +6 -2
  147. package/components/form/WorkloadPorts.vue +2 -7
  148. package/components/form/__tests__/NameNsDescription.test.ts +75 -0
  149. package/components/form/__tests__/Security.test.ts +76 -0
  150. package/components/formatter/Autoscaler.vue +4 -4
  151. package/components/formatter/ClusterKubeVersion.vue +27 -0
  152. package/components/formatter/ClusterLink.vue +1 -7
  153. package/components/formatter/ClusterProvider.vue +6 -10
  154. package/components/formatter/FleetSummaryGraph.vue +0 -3
  155. package/components/formatter/InternalExternalIP.vue +10 -4
  156. package/components/formatter/MachineSummaryGraph.vue +1 -1
  157. package/components/formatter/PodsUsage.vue +2 -2
  158. package/components/formatter/ServiceTargets.vue +26 -7
  159. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  160. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  161. package/components/formatter/__tests__/InternalExternalIP.test.ts +132 -0
  162. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  163. package/components/formatter/__tests__/ServiceTargets.test.ts +412 -0
  164. package/components/nav/Header.vue +4 -0
  165. package/components/nav/NamespaceFilter.vue +2 -2
  166. package/components/nav/TopLevelMenu.helper.ts +15 -3
  167. package/components/nav/TopLevelMenu.vue +22 -6
  168. package/components/nav/__tests__/Header.test.ts +15 -0
  169. package/components/nav/__tests__/TopLevelMenu.test.ts +263 -21
  170. package/components/templates/default.vue +9 -4
  171. package/components/templates/home.vue +23 -0
  172. package/components/templates/plain.vue +23 -0
  173. package/components/templates/standalone.vue +17 -0
  174. package/composables/useFormValidation.ts +93 -0
  175. package/composables/useHelmOpResources.test.ts +56 -0
  176. package/composables/useHelmOpResources.ts +32 -0
  177. package/composables/useStateColor.test.ts +325 -0
  178. package/composables/useStateColor.ts +128 -0
  179. package/composables/useVeeValidateField.test.ts +159 -0
  180. package/composables/useVeeValidateField.ts +67 -0
  181. package/config/home-links.js +1 -1
  182. package/config/labels-annotations.js +1 -0
  183. package/config/pagination-table-headers.js +18 -1
  184. package/config/product/explorer.js +17 -4
  185. package/config/product/manager.js +84 -21
  186. package/config/router/index.js +16 -0
  187. package/config/router/navigation-guards/__tests__/authentication.test.ts +130 -0
  188. package/config/router/navigation-guards/authentication.js +10 -4
  189. package/config/router/routes.js +26 -6
  190. package/config/settings.ts +0 -2
  191. package/config/table-headers.js +23 -5
  192. package/config/types.js +11 -1
  193. package/core/__tests__/plugin-products.test.ts +904 -20
  194. package/core/plugin-products-base.ts +110 -10
  195. package/core/plugin-products.ts +4 -0
  196. package/core/plugin-types.ts +194 -31
  197. package/core/plugin.ts +18 -7
  198. package/core/productDebugger.js +9 -4
  199. package/core/types-provisioning.ts +77 -31
  200. package/core/types.ts +72 -22
  201. package/detail/__tests__/pod.test.ts +41 -0
  202. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +114 -0
  203. package/detail/__tests__/workload.test.ts +3 -152
  204. package/detail/catalog.cattle.io.clusterrepo.vue +1 -1
  205. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  206. package/detail/pod.vue +1 -1
  207. package/detail/provisioning.cattle.io.cluster.vue +34 -14
  208. package/detail/workload/index.vue +12 -55
  209. package/edit/__tests__/catalog.cattle.io.clusterrepo.test.ts +248 -0
  210. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +105 -0
  211. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  212. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/index.test.ts.snap +1 -0
  213. package/edit/auth/__tests__/azuread.test.ts +247 -39
  214. package/edit/auth/__tests__/github.test.ts +234 -0
  215. package/edit/auth/__tests__/oidc.test.ts +26 -6
  216. package/edit/auth/__tests__/saml.test.ts +196 -0
  217. package/edit/auth/azuread.vue +197 -56
  218. package/edit/auth/github.vue +72 -13
  219. package/edit/auth/ldap/__tests__/index.test.ts +206 -0
  220. package/edit/auth/ldap/config.vue +8 -0
  221. package/edit/auth/ldap/index.vue +75 -1
  222. package/edit/auth/oidc.vue +119 -73
  223. package/edit/auth/saml.vue +76 -12
  224. package/edit/catalog.cattle.io.clusterrepo.vue +140 -32
  225. package/edit/fleet.cattle.io.helmop.vue +491 -136
  226. package/edit/management.cattle.io.user.vue +5 -2
  227. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  228. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  229. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  230. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  231. package/edit/provisioning.cattle.io.cluster/index.vue +11 -7
  232. package/edit/provisioning.cattle.io.cluster/rke2.vue +92 -14
  233. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +22 -0
  234. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  235. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  236. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  237. package/edit/secret/__tests__/ssh.test.ts +5 -6
  238. package/edit/secret/basic.vue +31 -0
  239. package/edit/secret/index.vue +68 -17
  240. package/edit/secret/registry.vue +38 -0
  241. package/edit/secret/ssh.vue +29 -0
  242. package/edit/secret/tls.vue +30 -0
  243. package/edit/service.vue +4 -4
  244. package/edit/workload/Upgrading.vue +3 -3
  245. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  246. package/edit/workload/mixins/workload.js +2 -1
  247. package/list/fleet.cattle.io.bundle.vue +7 -104
  248. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  249. package/list/group.principal.vue +5 -4
  250. package/list/harvesterhci.io.management.cluster.vue +8 -9
  251. package/list/management.cattle.io.user.vue +12 -9
  252. package/list/provisioning.cattle.io.cluster.vue +268 -180
  253. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  254. package/mixins/__tests__/auth-config.test.ts +90 -0
  255. package/mixins/__tests__/chart.test.ts +206 -0
  256. package/mixins/__tests__/resource-fetch-api-pagination.test.ts +48 -0
  257. package/mixins/auth-config.js +7 -0
  258. package/mixins/brand.js +2 -1
  259. package/mixins/chart.js +22 -9
  260. package/mixins/child-hook.js +12 -6
  261. package/mixins/create-edit-view/impl.js +5 -3
  262. package/mixins/resource-fetch-api-pagination.js +62 -6
  263. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +57 -0
  264. package/models/__tests__/compliance.cattle.io.clusterscan.test.ts +144 -0
  265. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  266. package/models/__tests__/fleet-application.test.ts +175 -0
  267. package/models/__tests__/fleet.cattle.io.bundle.test.ts +169 -0
  268. package/models/__tests__/fleet.cattle.io.helmop.test.ts +84 -0
  269. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  270. package/models/__tests__/management.cattle.io.node.ts +28 -5
  271. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  272. package/models/__tests__/namespace.test.ts +36 -0
  273. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +81 -11
  274. package/models/__tests__/workload.test.ts +401 -26
  275. package/models/base-cluster.x-k8s.io.js +26 -0
  276. package/models/catalog.cattle.io.clusterrepo.js +28 -4
  277. package/models/cluster.js +1 -1
  278. package/models/cluster.x-k8s.io.machine.js +4 -22
  279. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  280. package/models/cluster.x-k8s.io.machineset.js +2 -20
  281. package/models/compliance.cattle.io.clusterscan.js +165 -2
  282. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  283. package/models/fleet-application.js +7 -1
  284. package/models/fleet.cattle.io.helmop.js +20 -1
  285. package/models/management.cattle.io.cluster.js +434 -41
  286. package/models/management.cattle.io.node.js +50 -7
  287. package/models/management.cattle.io.nodepool.js +1 -1
  288. package/models/namespace.js +1 -1
  289. package/models/networking.k8s.io.ingress.js +12 -4
  290. package/models/pod.js +33 -1
  291. package/models/provisioning.cattle.io.cluster.js +51 -334
  292. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  293. package/models/workload.js +108 -13
  294. package/models/workload.service.js +5 -0
  295. package/package.json +22 -39
  296. package/pages/__tests__/readme.test.ts +49 -0
  297. package/pages/about.vue +5 -6
  298. package/pages/auth/login.vue +0 -35
  299. package/pages/auth/setup.vue +13 -3
  300. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +2 -2
  301. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +10 -1
  302. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +76 -0
  303. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +93 -0
  304. package/pages/c/_cluster/apps/charts/chart.vue +62 -9
  305. package/pages/c/_cluster/apps/charts/index.vue +48 -10
  306. package/pages/c/_cluster/apps/charts/install.vue +122 -113
  307. package/pages/c/_cluster/auth/roles/index.vue +5 -4
  308. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  309. package/pages/c/_cluster/explorer/index.vue +5 -49
  310. package/pages/c/_cluster/explorer/workload-dashboard/ByNamespaceSection.vue +31 -0
  311. package/pages/c/_cluster/explorer/workload-dashboard/ByStateSection.vue +138 -0
  312. package/pages/c/_cluster/explorer/workload-dashboard/ByTypeSection.vue +30 -0
  313. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadCard.vue +155 -0
  314. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadNamespaceCard.vue +142 -0
  315. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadTypeCard.vue +159 -0
  316. package/pages/c/_cluster/explorer/workload-dashboard/__tests__/composable.test.ts +561 -0
  317. package/pages/c/_cluster/explorer/workload-dashboard/composable.ts +440 -0
  318. package/pages/c/_cluster/explorer/workload-dashboard/index.vue +187 -0
  319. package/pages/c/_cluster/explorer/workload-dashboard/types.ts +80 -0
  320. package/pages/c/_cluster/fleet/application/create.vue +187 -136
  321. package/pages/c/_cluster/fleet/application/index.vue +5 -3
  322. package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailBody.vue +338 -0
  323. package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailHeader.vue +121 -0
  324. package/pages/c/_cluster/fleet/application/suse-app-collection/chart.vue +369 -0
  325. package/pages/c/_cluster/fleet/application/suse-app-collection/charts.vue +248 -0
  326. package/pages/c/_cluster/fleet/application/suse-app-collection/credentials.vue +310 -0
  327. package/pages/c/_cluster/fleet/index.vue +2 -2
  328. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  329. package/pages/c/_cluster/istio/index.vue +21 -6
  330. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -0
  331. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +815 -2
  332. package/pages/c/_cluster/uiplugins/index.vue +218 -197
  333. package/pages/diagnostic.vue +13 -17
  334. package/pages/fail-whale.vue +30 -7
  335. package/pages/home.vue +93 -306
  336. package/pages/readme.vue +88 -0
  337. package/plugins/clean-html.d.ts +9 -0
  338. package/plugins/dashboard-store/__tests__/resource-class.test.ts +181 -0
  339. package/plugins/dashboard-store/actions.js +40 -18
  340. package/plugins/dashboard-store/resource-class.js +67 -9
  341. package/plugins/steve/__tests__/actions.test.ts +212 -0
  342. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  343. package/plugins/steve/actions.js +96 -0
  344. package/plugins/steve/steve-pagination-utils.ts +12 -4
  345. package/plugins/steve/subscribe.js +35 -5
  346. package/rancher-components/Accordion/Accordion.vue +53 -9
  347. package/rancher-components/Form/Checkbox/Checkbox.vue +14 -0
  348. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +10 -4
  349. package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -52
  350. package/rancher-components/Form/Radio/RadioButton.vue +17 -1
  351. package/rancher-components/Form/Radio/RadioGroup.vue +10 -0
  352. package/rancher-components/Pill/RcTag/RcTag.vue +3 -2
  353. package/rancher-components/RcButton/RcButton.test.ts +140 -1
  354. package/rancher-components/RcButton/RcButton.vue +126 -17
  355. package/rancher-components/RcButton/types.ts +3 -0
  356. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  357. package/rancher-components/RcItemCard/RcItemCard.test.ts +18 -0
  358. package/rancher-components/RcItemCard/RcItemCard.vue +2 -2
  359. package/rancher-components/RcSection/RcSection.vue +28 -3
  360. package/scripts/extension/helm/package/Dockerfile +1 -1
  361. package/scripts/test-plugins-build.sh +2 -1
  362. package/store/__tests__/catalog.test.ts +115 -1
  363. package/store/__tests__/notifications.test.ts +434 -0
  364. package/store/__tests__/type-map.test.ts +556 -1
  365. package/store/action-menu.js +8 -3
  366. package/store/auth.js +1 -1
  367. package/store/aws.js +27 -16
  368. package/store/catalog.js +84 -3
  369. package/store/digitalocean.js +20 -38
  370. package/store/index.js +2 -0
  371. package/store/linode.js +25 -40
  372. package/store/plugins.js +7 -4
  373. package/store/pnap.js +1 -0
  374. package/store/type-map.js +111 -29
  375. package/tsconfig.paths.json +8 -8
  376. package/types/components/buttonGroup.ts +5 -0
  377. package/types/kube/kube-api.ts +14 -1
  378. package/types/rancher/steve.api.ts +12 -12
  379. package/types/resources/settings.d.ts +2 -1
  380. package/types/shell/index.d.ts +206 -72
  381. package/types/store/dashboard-store.types.ts +108 -11
  382. package/types/store/pagination.types.ts +6 -3
  383. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  384. package/utils/__tests__/async.test.ts +87 -0
  385. package/utils/__tests__/auth.test.ts +273 -0
  386. package/utils/__tests__/aws.test.ts +140 -0
  387. package/utils/__tests__/banners.test.ts +176 -0
  388. package/utils/__tests__/chart.test.ts +64 -1
  389. package/utils/__tests__/color.test.ts +226 -0
  390. package/utils/__tests__/computed.test.ts +193 -0
  391. package/utils/__tests__/cspAdaptor.test.ts +163 -0
  392. package/utils/__tests__/dom.test.ts +81 -0
  393. package/utils/__tests__/duration.test.ts +176 -0
  394. package/utils/__tests__/dynamic-importer.test.ts +102 -0
  395. package/utils/__tests__/fleet-appco.test.ts +312 -0
  396. package/utils/__tests__/fleet.test.ts +340 -0
  397. package/utils/__tests__/ingress.test.ts +553 -0
  398. package/utils/__tests__/kube.test.ts +68 -0
  399. package/utils/__tests__/monitoring.test.ts +130 -0
  400. package/utils/__tests__/namespace-filter.test.ts +109 -0
  401. package/utils/__tests__/object.test.ts +22 -0
  402. package/utils/__tests__/pagination-utils.test.ts +361 -0
  403. package/utils/__tests__/parse-externalid.test.ts +137 -0
  404. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  405. package/utils/__tests__/platform.test.ts +91 -0
  406. package/utils/__tests__/poller-sequential.test.ts +177 -0
  407. package/utils/__tests__/poller.test.ts +170 -0
  408. package/utils/__tests__/position.test.ts +237 -0
  409. package/utils/__tests__/promise.test.ts +346 -0
  410. package/utils/__tests__/provider.test.ts +51 -1
  411. package/utils/__tests__/queue.test.ts +232 -0
  412. package/utils/__tests__/release-notes.test.ts +221 -0
  413. package/utils/__tests__/router.test.js +254 -1
  414. package/utils/__tests__/select.test.ts +208 -0
  415. package/utils/__tests__/settings.test.ts +140 -0
  416. package/utils/__tests__/sort-utils.test.ts +301 -0
  417. package/utils/__tests__/string-utils.test.ts +798 -0
  418. package/utils/__tests__/string.test.ts +23 -1
  419. package/utils/__tests__/style.test.ts +154 -0
  420. package/utils/__tests__/svg-filter.test.ts +184 -0
  421. package/utils/__tests__/time.test.ts +265 -1
  422. package/utils/__tests__/title.test.ts +47 -0
  423. package/utils/__tests__/units.test.ts +417 -0
  424. package/utils/__tests__/versions.test.ts +128 -0
  425. package/utils/__tests__/width.test.ts +53 -0
  426. package/utils/__tests__/window.test.ts +158 -0
  427. package/utils/__tests__/xccdf.test.ts +511 -0
  428. package/utils/chart.js +36 -0
  429. package/utils/crypto/__tests__/browserHashUtils.test.ts +98 -0
  430. package/utils/crypto/__tests__/index.test.ts +144 -0
  431. package/utils/duration.ts +104 -0
  432. package/utils/dynamic-content/__tests__/notification-handler.test.ts +196 -0
  433. package/utils/dynamic-content/info.ts +2 -1
  434. package/utils/error.js +13 -0
  435. package/utils/fleet-appco.ts +323 -0
  436. package/utils/fleet.ts +13 -3
  437. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  438. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  439. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  440. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  441. package/utils/gc/__tests__/gc.test.ts +487 -0
  442. package/utils/ingress.ts +9 -1
  443. package/utils/object.js +22 -2
  444. package/utils/pagination-utils.ts +2 -1
  445. package/utils/provider.ts +12 -0
  446. package/utils/string.js +25 -2
  447. package/utils/uiplugins.ts +5 -5
  448. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  449. package/utils/validators/__tests__/container-images.test.ts +104 -0
  450. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  451. package/utils/validators/__tests__/flow-output.test.ts +91 -0
  452. package/utils/validators/__tests__/index.test.ts +481 -0
  453. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  454. package/utils/validators/__tests__/logging-outputs.test.ts +58 -0
  455. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  456. package/utils/validators/__tests__/monitoring-route.test.ts +119 -0
  457. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  458. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  459. package/utils/validators/__tests__/role-template.test.ts +149 -0
  460. package/utils/validators/__tests__/service.test.ts +283 -0
  461. package/utils/validators/__tests__/setting.test.js +32 -0
  462. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  463. package/utils/validators/formRules/index.ts +5 -5
  464. package/utils/validators/machine-pool.ts +1 -1
  465. package/utils/validators/setting.js +18 -3
  466. package/utils/xccdf.ts +415 -0
  467. package/vue.config.js +1 -1
  468. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  469. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  470. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  471. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  472. package/pages/support/index.vue +0 -264
  473. package/utils/duration.js +0 -43
@@ -0,0 +1,256 @@
1
+ import { Store } from 'vuex';
2
+ import { ProxyApi, ProxyAuthCloudCredential, ProxyAuthToken, ProxyRequestOptions } from '@shell/apis/intf/shell';
3
+ import { Metadata } from '@shell/types/resources/settings';
4
+ import { MANAGEMENT } from '@shell/config/types';
5
+ import { get } from '@shell/utils/object';
6
+
7
+ /**
8
+ * Shell implementation of the `ProxyApi`.
9
+ *
10
+ * This API centralizes proxy request behavior used across providers:
11
+ * - building `/meta/proxy` URLs
12
+ * - applying credential or token auth headers
13
+ * - dispatching requests via `management/request`
14
+ * - optional de-pagination for list endpoints
15
+ */
16
+ export class ProxyApiImpl implements ProxyApi {
17
+ private store: Store<any>;
18
+
19
+ /**
20
+ * Creates a new Proxy API instance.
21
+ *
22
+ * @param store - Root Vuex store used to dispatch `management/request`.
23
+ */
24
+ constructor(store: Store<any>) {
25
+ this.store = store;
26
+ }
27
+
28
+ /**
29
+ * Executes a generic proxy request.
30
+ *
31
+ * Behavior:
32
+ * - Builds a proxied URL and dispatches `management/request`.
33
+ * - When `dePaginate` is enabled, follows the configured `next` URL and
34
+ * merges results recursively.
35
+ *
36
+ * @param options - Proxy request options.
37
+ * @returns The response payload or accumulated de-paginated output.
38
+ */
39
+ public async request(options: ProxyRequestOptions): Promise<any> {
40
+ const url = this.buildProxyUrl(options);
41
+ const headers = this.buildHeaders(options);
42
+ const req = {
43
+ url,
44
+ method: options.method,
45
+ headers,
46
+ redirectUnauthorized: false,
47
+ } as any;
48
+
49
+ if (options.data) {
50
+ req.body = options.data;
51
+ }
52
+
53
+ const res = await this.store.dispatch('management/request', req, { root: true });
54
+
55
+ if (options.postProcess) {
56
+ return options.postProcess(res);
57
+ }
58
+
59
+ return res;
60
+ }
61
+
62
+ /**
63
+ * Builds a `/meta/proxy` URL by stripping the scheme from `options.url`.
64
+ */
65
+ private buildProxyUrl(options: ProxyRequestOptions): string {
66
+ const raw = options.url.toString();
67
+
68
+ return `/meta/proxy/${ raw.replace(/^https:\/\//, '').replace(/^http:\/\//, 'http:/') }`;
69
+ }
70
+
71
+ /**
72
+ * Builds request headers, including auth headers derived from `options.authentication`.
73
+ */
74
+ private buildHeaders(options: ProxyRequestOptions): Record<string, string> {
75
+ const headers: Record<string, string> = {
76
+ Accept: options.accept || 'application/json',
77
+ ...(options.headers || {})
78
+ };
79
+
80
+ const auth = options.authentication;
81
+
82
+ if (!auth) {
83
+ return headers;
84
+ }
85
+
86
+ if ('id' in auth) {
87
+ // Cloud credential — instruct Rancher to sign the request server-side
88
+ const {
89
+ id, authSigner, usernameField, passwordField
90
+ } = auth as ProxyAuthCloudCredential;
91
+ let value = authSigner ? `${ authSigner } ` : '';
92
+
93
+ value += `credID=${ id } `;
94
+ if (usernameField) {
95
+ value += `usernameField=${ usernameField } `;
96
+ }
97
+ if (passwordField) {
98
+ value += `passwordField=${ passwordField } `;
99
+ }
100
+ headers['x-api-cattleauth-header'] = value.trimEnd();
101
+ } else {
102
+ // Plain token — forwarded verbatim as Authorization by the proxy
103
+ const { token, authSigner } = auth as ProxyAuthToken;
104
+ const scheme = authSigner ?? 'Bearer';
105
+
106
+ headers['x-api-auth-header'] = `${ scheme } ${ token }`;
107
+ }
108
+
109
+ return headers;
110
+ }
111
+
112
+ /**
113
+ * Builds the proxy URL and auth headers for a request without dispatching it.
114
+ *
115
+ * Useful for integrating with lower-level HTTP handlers (e.g. the AWS SDK
116
+ * request handler) that need to apply proxy routing and auth themselves
117
+ * rather than going through the Vuex `management/request` action.
118
+ *
119
+ * @param options - Proxy request options.
120
+ * @returns An object containing the resolved proxy `url` and the `headers`
121
+ * to merge into the outbound request.
122
+ */
123
+ public prepareRequest(options: ProxyRequestOptions): { url: string; headers: Record<string, string> } {
124
+ return {
125
+ url: this.buildProxyUrl(options),
126
+ headers: this.buildHeaders(options),
127
+ };
128
+ }
129
+
130
+ /**
131
+ * Creates a `ProxyEndpoint` CR that registers the given domain patterns
132
+ * with the Rancher `/meta/proxy` allow-list.
133
+ *
134
+ * The CR is cluster-scoped (`management.cattle.io/v3`, kind `ProxyEndpoint`).
135
+ * Each entry in `urls` maps to a `spec.routes[].domain` entry on the CR.
136
+ *
137
+ * @param domains - Bare hostnames or wildcard patterns accepted by the proxy
138
+ * backend (e.g. `api.example.com`, `%.amazonaws.com`).
139
+ * @param name - Optional metadata name for the CR. When omitted a name is
140
+ * auto-generated by the API server.
141
+ * @returns The created `ProxyEndpoint` resource.
142
+ */
143
+ public async allowDomains(domains: string[], name?: string): Promise<any> {
144
+ const metadata = {} as Metadata;
145
+
146
+ if (name) {
147
+ metadata.name = name;
148
+ } else {
149
+ metadata.generateName = 'endpoints-';
150
+ }
151
+ const resource = await this.store.dispatch('management/create', {
152
+ type: MANAGEMENT.PROXY_ENDPOINT,
153
+ metadata,
154
+ spec: { routes: domains.map((domain) => ({ domain })) },
155
+ });
156
+
157
+ return resource.save();
158
+ }
159
+
160
+ /**
161
+ * Checks whether a domain pattern is already present in any existing
162
+ * `ProxyEndpoint` CR.
163
+ *
164
+ * The comparison is a case-insensitive exact match against each
165
+ * `spec.routes[].domain` entry across all CRs — the same format accepted
166
+ * by `allowDomains` (e.g. `api.example.com`, `%.amazonaws.com`).
167
+ *
168
+ * @param domain - The hostname or wildcard pattern to look up.
169
+ * @returns `true` if the pattern is found in at least one `ProxyEndpoint` CR,
170
+ * `false` otherwise.
171
+ */
172
+ public async isDomainAllowed(domain: string): Promise<boolean> {
173
+ const endpoints: any[] = await this.store.dispatch('management/findAll', { type: MANAGEMENT.PROXY_ENDPOINT });
174
+
175
+ const needle = domain.toLowerCase();
176
+
177
+ return endpoints.some((endpoint) => (endpoint?.spec?.routes ?? []).some(
178
+ (route: { domain: string }) => route.domain?.toLowerCase() === needle
179
+ )
180
+ );
181
+ }
182
+
183
+ /**
184
+ * Checks whether a `ProxyEndpoint` CR with the given name exists.
185
+ *
186
+ * Uses `management/find` and treats a 404 response as `false` rather than
187
+ * an error. Any other error is re-thrown.
188
+ *
189
+ * @param name - The metadata name of the `ProxyEndpoint` CR to look up.
190
+ * @returns `true` if the CR exists, `false` if it is not found.
191
+ */
192
+ public async hasProxyEndpoint(name: string): Promise<boolean> {
193
+ try {
194
+ await this.store.dispatch('management/find', {
195
+ type: MANAGEMENT.PROXY_ENDPOINT,
196
+ id: name,
197
+ opt: { force: false },
198
+ });
199
+
200
+ return true;
201
+ } catch (e: any) {
202
+ if (e?.status === 404) {
203
+ return false;
204
+ }
205
+ throw e;
206
+ }
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Creates a `postProcess` callback for use with `ProxyApi.request()` that
212
+ * automatically follows pagination links and merges array results across pages.
213
+ *
214
+ * @param proxyApi - The `ProxyApi` instance used to fetch subsequent pages.
215
+ * @param requestOptions - Base request options (without `postProcess`) reused for each page.
216
+ * @param opts.nextUrlPath - Dot-path or jsonpath to the next-page URL in the response.
217
+ * Defaults to `links.pages.next`.
218
+ * @param opts.mergeKey - Response key whose array value is merged across pages.
219
+ * When omitted the first top-level array key is used.
220
+ *
221
+ * @example
222
+ * ```ts
223
+ * const baseOptions = { url: 'api.example.com/v1/items', authentication };
224
+ * const result = await proxy.request({
225
+ * ...baseOptions,
226
+ * postProcess: createDepaginator(proxy, baseOptions, { mergeKey: 'items' }),
227
+ * });
228
+ * ```
229
+ */
230
+ export function createDepaginator(
231
+ proxyApi: ProxyApi,
232
+ requestOptions: Omit<ProxyRequestOptions, 'postProcess'>,
233
+ opts: { nextUrlPath?: string; mergeKey?: string } = {}
234
+ ): (res: any) => Promise<any> {
235
+ const nextPath = opts.nextUrlPath ?? 'links.pages.next';
236
+ const mergeKey = opts.mergeKey;
237
+
238
+ const paginate = async(res: any, accumulated?: any): Promise<any> => {
239
+ const key = mergeKey ?? Object.keys(res ?? {}).find((k) => Array.isArray(res[k]));
240
+
241
+ // If we have a prior page's data, concatenate this page's array into it; otherwise use this page as-is
242
+ const merged = (accumulated !== undefined && key && Array.isArray(accumulated[key]) && Array.isArray(res?.[key])) ? { ...res, [key]: [...accumulated[key], ...res[key]] } : res;
243
+
244
+ const nextUrl = get(merged, nextPath);
245
+
246
+ if (!nextUrl) {
247
+ return merged;
248
+ }
249
+
250
+ const nextRes = await proxyApi.request({ ...requestOptions, url: new URL(nextUrl) });
251
+
252
+ return paginate(nextRes, merged);
253
+ };
254
+
255
+ return (res: any) => paginate(res);
256
+ }
@@ -14,9 +14,12 @@ export class SlideInApiImpl implements SlideInApi {
14
14
  *
15
15
  * Example:
16
16
  * ```ts
17
+ * import { useShell } from '@shell/apis';
17
18
  * import MyCustomSlideIn from '@/components/MyCustomSlideIn.vue';
18
19
  *
19
- * this.$shell.slideIn.open(MyCustomSlideIn, {
20
+ * const shell = useShell();
21
+ *
22
+ * shell.slideIn.open(MyCustomSlideIn, {
20
23
  * title: 'Hello from SlideIn panel!'
21
24
  * });
22
25
  * ```
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
- import { ShellApi, ExtensionManagerApi } from '@shell/apis';
2
+ import { ShellApi, ExtensionManagerApi, ResourcesApiProvider } from '@shell/apis';
3
3
 
4
4
  export {};
5
5
 
@@ -7,5 +7,6 @@ declare module 'vue' {
7
7
  interface ComponentCustomProperties {
8
8
  $shell: ShellApi,
9
9
  $extension: ExtensionManagerApi,
10
+ $resources: ResourcesApiProvider,
10
11
  }
11
12
  }
@@ -12,6 +12,7 @@
12
12
  "ap-southeast-3",
13
13
  "ap-southeast-4",
14
14
  "ap-southeast-5",
15
+ "ap-southeast-6",
15
16
  "ap-southeast-7",
16
17
  "ca-central-1",
17
18
  "ca-west-1",
@@ -37,6 +38,9 @@
37
38
  "us-iso-east-1",
38
39
  "us-iso-west-1",
39
40
  "us-isob-east-1",
41
+ "us-isob-west-1",
42
+ "us-isof-east-1",
43
+ "us-isof-south-1",
40
44
  "us-west-1",
41
45
  "us-west-2"
42
46
  ]
@@ -10,6 +10,8 @@ $unlabeled-input-height: 40px;
10
10
  $unlabaled-select-padding: 3px 0;
11
11
  $footer-height: 60px;
12
12
 
13
+ $resource-detail-min-width: 740px;
14
+
13
15
  $input-padding-lg: 18px;
14
16
  $input-padding-sm: 10px;
15
17
  $input-line-height: 18px;
@@ -18,24 +18,148 @@
18
18
  url('~@shell/assets/fonts/poppins/poppins-v15-latin-500.woff') format('woff'), /* Modern Browsers */
19
19
  }
20
20
 
21
- /* lato-regular - latin */
21
+ /**
22
+ * Lato Font (Latin) (see: https://www.latofonts.com/)
23
+ **/
24
+
25
+ /* Webfont: Lato-Light (300) */
26
+ @font-face {
27
+ font-family: 'Lato';
28
+ font-style: normal;
29
+ font-weight: 300;
30
+ text-rendering: optimizeLegibility;
31
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Light.woff2') format('woff2'), /* Modern Browsers */
32
+ url('~@shell/assets/fonts/lato/LatoLatin-Light.woff') format('woff'); /* Modern Browsers */
33
+ }
34
+
35
+ /* Webfont: Lato-LightItalic (300) */
36
+ @font-face {
37
+ font-family: 'Lato';
38
+ font-style: italic;
39
+ font-weight: 300;
40
+ text-rendering: optimizeLegibility;
41
+ src: url('~@shell/assets/fonts/lato/LatoLatin-LightItalic.woff2') format('woff2'), /* Modern Browsers */
42
+ url('~@shell/assets/fonts/lato/LatoLatin-LightItalic.woff') format('woff'); /* Modern Browsers */
43
+ }
44
+
45
+ /* Webfont: Lato-Regular (400) */
22
46
  @font-face {
23
47
  font-family: 'Lato';
24
48
  font-style: normal;
25
49
  font-weight: normal;
26
- src: local(''),
27
- url('~@shell/assets/fonts/lato/lato-v17-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
28
- url('~@shell/assets/fonts/lato/lato-v17-latin-regular.woff') format('woff'), /* Modern Browsers */
50
+ text-rendering: optimizeLegibility;
51
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Regular.woff2') format('woff2'), /* Modern Browsers */
52
+ url('~@shell/assets/fonts/lato/LatoLatin-Regular.woff') format('woff'); /* Modern Browsers */
53
+ }
54
+
55
+ /* Webfont: Lato-Italic (400) */
56
+ @font-face {
57
+ font-family: 'Lato';
58
+ font-style: italic;
59
+ font-weight: normal;
60
+ text-rendering: optimizeLegibility;
61
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Italic.woff2') format('woff2'), /* Modern Browsers */
62
+ url('~@shell/assets/fonts/lato/LatoLatin-Italic.woff') format('woff'); /* Modern Browsers */
63
+ }
64
+
65
+ /* Webfont: Lato-Medium (500) */
66
+ @font-face {
67
+ font-family: 'Lato';
68
+ font-style: normal;
69
+ font-weight: 500;
70
+ text-rendering: optimizeLegibility;
71
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Medium.woff2') format('woff2'), /* Modern Browsers */
72
+ url('~@shell/assets/fonts/lato/LatoLatin-Medium.woff') format('woff'); /* Modern Browsers */
73
+ }
74
+
75
+ /* Webfont: Lato-MediumItalic (500) */
76
+ @font-face {
77
+ font-family: 'Lato';
78
+ font-style: italic;
79
+ font-weight: 500;
80
+ text-rendering: optimizeLegibility;
81
+ src: url('~@shell/assets/fonts/lato/LatoLatin-MediumItalic.woff2') format('woff2'), /* Modern Browsers */
82
+ url('~@shell/assets/fonts/lato/LatoLatin-MediumItalic.woff') format('woff'); /* Modern Browsers */
83
+ }
84
+
85
+ /* Webfont: LatoLatin-Semibold (600) */
86
+ @font-face {
87
+ font-family: 'Lato';
88
+ font-style: normal;
89
+ font-weight: 600;
90
+ text-rendering: optimizeLegibility;
91
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Semibold.woff2') format('woff2'), /* Modern Browsers */
92
+ url('~@shell/assets/fonts/lato/LatoLatin-Semibold.woff') format('woff'); /* Modern Browsers */
93
+ }
94
+
95
+ /* Webfont: LatoLatin-SemiboldItalic (600) */
96
+ @font-face {
97
+ font-family: 'Lato';
98
+ font-style: italic;
99
+ font-weight: 600;
100
+ text-rendering: optimizeLegibility;
101
+ src: url('~@shell/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2') format('woff2'), /* Modern Browsers */
102
+ url('~@shell/assets/fonts/lato/LatoLatin-SemiboldItalic.woff') format('woff'); /* Modern Browsers */
29
103
  }
30
104
 
31
- /* lato-700 - latin */
105
+ /* Webfont: LatoLatin-Bold (700) */
32
106
  @font-face {
33
107
  font-family: 'Lato';
34
108
  font-style: normal;
35
109
  font-weight: bold;
36
- src: local(''),
37
- url('~@shell/assets/fonts/lato/lato-v17-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
38
- url('~@shell/assets/fonts/lato/lato-v17-latin-700.woff') format('woff'), /* Modern Browsers */
110
+ text-rendering: optimizeLegibility;
111
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Bold.woff2') format('woff2'), /* Modern Browsers */
112
+ url('~@shell/assets/fonts/lato/LatoLatin-Bold.woff') format('woff'); /* Modern Browsers */
113
+ }
114
+
115
+ /* Webfont: LatoLatin-BoldItalic (700) */
116
+ @font-face {
117
+ font-family: 'Lato';
118
+ font-style: italic;
119
+ font-weight: bold;
120
+ text-rendering: optimizeLegibility;
121
+ src: url('~@shell/assets/fonts/lato/LatoLatin-BoldItalic.woff2') format('woff2'), /* Modern Browsers */
122
+ url('~@shell/assets/fonts/lato/LatoLatin-BoldItalic.woff') format('woff'); /* Modern Browsers */
123
+ }
124
+
125
+ /* Webfont: Lato-Heavy (800) */
126
+ @font-face {
127
+ font-family: 'Lato';
128
+ font-style: normal;
129
+ font-weight: 800;
130
+ text-rendering: optimizeLegibility;
131
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Heavy.woff2') format('woff2'), /* Modern Browsers */
132
+ url('~@shell/assets/fonts/lato/LatoLatin-Heavy.woff') format('woff'); /* Modern Browsers */
133
+ }
134
+
135
+ /* Webfont: Lato-HeavyItalic (800) */
136
+ @font-face {
137
+ font-family: 'Lato';
138
+ font-style: italic;
139
+ font-weight: 800;
140
+ text-rendering: optimizeLegibility;
141
+ src: url('~@shell/assets/fonts/lato/LatoLatin-HeavyItalic.woff2') format('woff2'), /* Modern Browsers */
142
+ url('~@shell/assets/fonts/lato/LatoLatin-HeavyItalic.woff') format('woff'); /* Modern Browsers */
143
+ }
144
+
145
+ /* Webfont: Lato-Black (900) */
146
+ @font-face {
147
+ font-family: 'Lato';
148
+ font-style: normal;
149
+ font-weight: 900;
150
+ text-rendering: optimizeLegibility;
151
+ src: url('~@shell/assets/fonts/lato/LatoLatin-Black.woff2') format('woff2'), /* Modern Browsers */
152
+ url('~@shell/assets/fonts/lato/LatoLatin-Black.woff') format('woff'); /* Modern Browsers */
153
+ }
154
+
155
+ /* Webfont: Lato-BlackItalic (900) */
156
+ @font-face {
157
+ font-family: 'Lato';
158
+ font-style: italic;
159
+ font-weight: 900;
160
+ text-rendering: optimizeLegibility;
161
+ src: url('~@shell/assets/fonts/lato/LatoLatin-BlackItalic.woff2') format('woff2'), /* Modern Browsers */
162
+ url('~@shell/assets/fonts/lato/LatoLatin-BlackItalic.woff') format('woff'); /* Modern Browsers */
39
163
  }
40
164
 
41
165
  /* roboto-mono-regular - latin */
@@ -3,6 +3,10 @@
3
3
  grid-area: main;
4
4
  overflow: auto;
5
5
 
6
+ @media (prefers-reduced-motion: no-preference) {
7
+ scroll-behavior: smooth;
8
+ }
9
+
6
10
  .outlet {
7
11
  display: flex;
8
12
  flex-direction: column;