@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
@@ -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
  ]
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="uuid-224e3580-d59f-48a8-9bb3-c822840f911d" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
3
+ <path d="m17.558,9.638L10.436,1.632c-.358-.402-.881-.632-1.435-.632h0c-.554,0-1.078.231-1.435.632L.442,9.638c-.346.389-.5.9-.423,1.403.077.503.379.952.827,1.231l7.123,4.436c.313.195.672.293,1.031.293s.718-.098,1.031-.293l7.123-4.436c.448-.279.75-.728.827-1.231.077-.503-.077-1.014-.423-1.403Zm-8.557,2.564l-3.47-2.161,3.47-3.9,3.47,3.9-3.47,2.161Zm-4.821-1.975l3.995,2.489-1.137.708-.016.01c-.394.25-.854.382-1.33.382-.528,0-1.059-.214-1.38-.413l-2.969-1.849c-.235-.147-.387-.373-.428-.637-.04-.264.037-.521.219-.725L8.257,2.186c.185-.208.456-.327.743-.328.287,0,.558.119.743.328l1.576,1.771c-.009,0-.018,0-.028,0-.856,0-1.668.313-2.278.866l-4.833,5.404Zm12.905.69c-.041.264-.192.49-.428.637l-7.123,4.436c-.325.202-.744.202-1.068,0l-2.192-1.365c.451-.076.88-.238,1.264-.484l6.259-3.898-4.197-4.759c.448-.425,1.053-.667,1.692-.667.335,0,.661.07.97.201l4.605,5.175c.181.204.259.461.219.725Z"/>
4
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="uuid-f8d4d392-7c12-4bd9-baff-66fbf7814b91" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
3
+ <path d="m3.802,14.032c.388.242,1.033.511,1.715.511.621,0,1.198-.18,1.676-.487,0,0,.001,0,.002-.001l1.805-1.128v4.073c-.286,0-.574-.078-.824-.234l-4.374-2.734Z" fill="#225086"/>
4
+ <path d="m7.853,1.507L.353,9.967c-.579.654-.428,1.642.323,2.111,0,0,2.776,1.735,3.126,1.954.388.242,1.033.511,1.715.511.621,0,1.198-.18,1.676-.487,0,0,.001,0,.002-.001l1.805-1.128-4.364-2.728,4.365-4.924V1s0,0,0,0c-.424,0-.847.169-1.147.507Z" fill="#6df"/>
5
+ <polygon points="4.636 10.199 4.688 10.231 9 12.927 9.001 12.927 9.001 12.927 9.001 5.276 9 5.275 4.636 10.199" fill="#cbf8ff"/>
6
+ <path d="m17.324,12.078c.751-.469.902-1.457.323-2.111l-4.921-5.551c-.397-.185-.842-.291-1.313-.291-.925,0-1.752.399-2.302,1.026l-.109.123h0s4.364,4.924,4.364,4.924h0s0,0,0,0l-4.365,2.728v4.073c.287,0,.573-.078.823-.234l7.5-4.688Z" fill="#074793"/>
7
+ <path d="m9.001,1v4.275s.109-.123.109-.123c.55-.627,1.377-1.026,2.302-1.026.472,0,.916.107,1.313.291l-2.579-2.909c-.299-.338-.723-.507-1.146-.507Z" fill="#0294e4"/>
8
+ <polygon points="13.365 10.199 13.365 10.199 13.365 10.199 9.001 5.276 9.001 12.926 13.365 10.199" fill="#96bcc2"/>
9
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="uuid-f8d4d392-7c12-4bd9-baff-66fbf7814b91" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
3
+ <path d="m3.802,14.032c.388.242,1.033.511,1.715.511.621,0,1.198-.18,1.676-.487,0,0,.001,0,.002-.001l1.805-1.128v4.073c-.286,0-.574-.078-.824-.234l-4.374-2.734Z" fill="#225086"/>
4
+ <path d="m7.853,1.507L.353,9.967c-.579.654-.428,1.642.323,2.111,0,0,2.776,1.735,3.126,1.954.388.242,1.033.511,1.715.511.621,0,1.198-.18,1.676-.487,0,0,.001,0,.002-.001l1.805-1.128-4.364-2.728,4.365-4.924V1s0,0,0,0c-.424,0-.847.169-1.147.507Z" fill="#6df"/>
5
+ <polygon points="4.636 10.199 4.688 10.231 9 12.927 9.001 12.927 9.001 12.927 9.001 5.276 9 5.275 4.636 10.199" fill="#cbf8ff"/>
6
+ <path d="m17.324,12.078c.751-.469.902-1.457.323-2.111l-4.921-5.551c-.397-.185-.842-.291-1.313-.291-.925,0-1.752.399-2.302,1.026l-.109.123h0s4.364,4.924,4.364,4.924h0s0,0,0,0l-4.365,2.728v4.073c.287,0,.573-.078.823-.234l7.5-4.688Z" fill="#074793"/>
7
+ <path d="m9.001,1v4.275s.109-.123.109-.123c.55-.627,1.377-1.026,2.302-1.026.472,0,.916.107,1.313.291l-2.579-2.909c-.299-.338-.723-.507-1.146-.507Z" fill="#0294e4"/>
8
+ <polygon points="13.365 10.199 13.365 10.199 13.365 10.199 9.001 5.276 9.001 12.926 13.365 10.199" fill="#96bcc2"/>
9
+ </svg>
@@ -10,7 +10,6 @@
10
10
  @import "./base/spacing";
11
11
 
12
12
  @import "./fonts/fontstack";
13
- @import "./fonts/dots";
14
13
  @import "./fonts/zerowidthspace";
15
14
  @import "./fonts/icons";
16
15
 
@@ -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 */