@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.
- package/apis/impl/apis.ts +6 -0
- package/apis/index.ts +26 -0
- package/apis/intf/resources-api/cluster-api.ts +18 -0
- package/apis/intf/resources-api/mgmt-api.ts +15 -0
- package/apis/intf/resources-api/resource-base.ts +107 -0
- package/apis/intf/resources-api/resource-constants.ts +147 -0
- package/apis/intf/resources-api/resources-api.ts +143 -0
- package/apis/intf/resources.ts +49 -0
- package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
- package/apis/intf/shell-api/proxy.ts +216 -0
- package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
- package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
- package/apis/intf/shell.ts +12 -6
- package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
- package/apis/resources/index.ts +22 -0
- package/apis/resources/resources-api-class.ts +187 -0
- package/apis/shell/__tests__/proxy.test.ts +369 -0
- package/apis/shell/index.ts +8 -1
- package/apis/shell/modal.ts +4 -1
- package/apis/shell/notifications.ts +9 -6
- package/apis/shell/proxy.ts +256 -0
- package/apis/shell/slide-in.ts +4 -1
- package/apis/vue-shim.d.ts +2 -1
- package/assets/data/aws-regions.json +4 -0
- package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
- package/assets/images/providers/entraid-black.svg +4 -0
- package/assets/images/providers/entraid.svg +9 -0
- package/assets/images/vendor/entraid.svg +9 -0
- package/assets/styles/app.scss +0 -1
- package/assets/styles/base/_variables.scss +2 -0
- package/assets/styles/fonts/_fontstack.scss +132 -8
- package/assets/translations/en-us.yaml +41 -22
- package/assets/translations/zh-hans.yaml +4 -8
- package/chart/__tests__/S3.test.ts +10 -3
- package/chart/monitoring/index.vue +10 -1
- package/components/ActionDropdownShell.vue +2 -1
- package/components/CountBox.vue +20 -0
- package/components/CreateDriver.vue +0 -12
- package/components/CruResourceFooter.vue +9 -5
- package/components/DetailText.vue +12 -3
- package/components/ExplorerProjectsNamespaces.vue +1 -1
- package/components/InstallHelmCharts.vue +2 -2
- package/components/LandingPagePreference.vue +14 -5
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
- package/components/Resource/Detail/Metadata/index.vue +6 -0
- package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
- package/components/Resource/Detail/SpacedRow.vue +3 -1
- package/components/Resource/Detail/TitleBar/index.vue +10 -11
- package/components/ResourceList/Masthead.vue +12 -8
- package/components/SelectIconGrid.vue +5 -10
- package/components/SingleClusterInfo.vue +1 -0
- package/components/SortableTable/__tests__/sorting.test.ts +126 -0
- package/components/SortableTable/index.vue +6 -9
- package/components/SortableTable/selection.js +23 -5
- package/components/SortableTable/sorting.js +6 -3
- package/components/Wizard.vue +14 -13
- package/components/__tests__/CountBox.test.ts +72 -0
- package/components/__tests__/DetailText.test.ts +113 -0
- package/components/fleet/FleetBundles.vue +100 -12
- package/components/fleet/FleetClusterTargets/index.vue +54 -15
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
- package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
- package/components/form/InputWithSelect.vue +18 -10
- package/components/form/KeyValue.vue +17 -1
- package/components/form/LabeledSelect.vue +101 -26
- package/components/form/NameNsDescription.vue +11 -0
- package/components/form/Security.vue +6 -2
- package/components/form/Select.vue +73 -56
- package/components/form/ServiceNameSelect.vue +13 -11
- package/components/form/WorkloadPorts.vue +2 -7
- package/components/form/__tests__/KeyValue.test.ts +66 -0
- package/components/form/__tests__/NodeScheduling.test.ts +9 -0
- package/components/form/__tests__/Security.test.ts +76 -0
- package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
- package/components/formatter/Autoscaler.vue +4 -4
- package/components/formatter/ClusterKubeVersion.vue +27 -0
- package/components/formatter/ClusterLink.vue +1 -7
- package/components/formatter/ClusterProvider.vue +6 -10
- package/components/formatter/FleetSummaryGraph.vue +0 -3
- package/components/formatter/MachineSummaryGraph.vue +1 -1
- package/components/formatter/PodsUsage.vue +2 -2
- package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
- package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
- package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
- package/components/nav/Group.vue +7 -6
- package/components/nav/Header.vue +24 -3
- package/components/nav/NamespaceFilter.vue +2 -2
- package/components/nav/NotificationCenter/Notification.vue +4 -1
- package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
- package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
- package/components/nav/TopLevelMenu.helper.ts +15 -3
- package/components/nav/TopLevelMenu.vue +16 -5
- package/components/nav/Type.vue +8 -7
- package/components/nav/WindowManager/index.vue +2 -1
- package/components/nav/WorkspaceSwitcher.vue +13 -0
- package/components/nav/__tests__/Group.test.ts +67 -0
- package/components/nav/__tests__/Header.test.ts +235 -0
- package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
- package/components/nav/__tests__/Type.test.ts +20 -3
- package/components/templates/default.vue +34 -4
- package/components/templates/home.vue +30 -25
- package/components/templates/plain.vue +31 -26
- package/components/templates/standalone.vue +17 -0
- package/composables/useFormValidation.ts +93 -0
- package/composables/useLabeledFormElement.ts +10 -2
- package/composables/useLabeledSelect.ts +60 -0
- package/composables/useUserRetentionValidation.ts +1 -49
- package/composables/useVeeValidateField.test.ts +159 -0
- package/composables/useVeeValidateField.ts +67 -0
- package/config/cookies.js +0 -1
- package/config/labels-annotations.js +1 -0
- package/config/pagination-table-headers.js +18 -1
- package/config/product/manager.js +82 -21
- package/config/query-params.js +1 -0
- package/config/router/routes.js +6 -8
- package/config/table-headers.js +20 -1
- package/config/types.js +2 -1
- package/core/__tests__/plugin-products.test.ts +1505 -30
- package/core/plugin-products-base.ts +137 -20
- package/core/plugin-products-helpers.ts +5 -4
- package/core/plugin-products.ts +4 -0
- package/core/plugin-types.ts +129 -4
- package/core/plugin.ts +15 -7
- package/core/productDebugger.js +9 -4
- package/core/types-provisioning.ts +43 -30
- package/core/types.ts +58 -19
- package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
- package/detail/__tests__/pod.test.ts +41 -0
- package/detail/harvesterhci.io.management.cluster.vue +6 -2
- package/detail/management.cattle.io.fleetworkspace.vue +49 -0
- package/detail/pod.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +4 -10
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
- package/edit/__tests__/kontainerDriver.test.ts +0 -13
- package/edit/__tests__/nodeDriver.test.ts +5 -11
- package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
- package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
- package/edit/auth/__tests__/azuread.test.ts +217 -34
- package/edit/auth/__tests__/oidc.test.ts +54 -0
- package/edit/auth/azuread.vue +123 -15
- package/edit/auth/oidc.vue +10 -2
- package/edit/kontainerDriver.vue +1 -2
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
- package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
- package/edit/networking.k8s.io.ingress/index.vue +75 -20
- package/edit/nodeDriver.vue +0 -2
- package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
- package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
- package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
- package/edit/secret/__tests__/ssh.test.ts +5 -6
- package/edit/secret/basic.vue +31 -0
- package/edit/secret/index.vue +68 -17
- package/edit/secret/registry.vue +38 -0
- package/edit/secret/ssh.vue +29 -0
- package/edit/secret/tls.vue +30 -0
- package/edit/service.vue +4 -4
- package/edit/workload/Upgrading.vue +3 -3
- package/edit/workload/__tests__/Upgrading.test.ts +6 -9
- package/edit/workload/mixins/workload.js +2 -1
- package/initialize/App.vue +29 -2
- package/initialize/install-plugins.js +0 -2
- package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
- package/list/catalog.cattle.io.app.vue +25 -5
- package/list/fleet.cattle.io.bundle.vue +7 -104
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
- package/list/management.cattle.io.feature.vue +1 -1
- package/list/management.cattle.io.fleetworkspace.vue +8 -0
- package/list/provisioning.cattle.io.cluster.vue +262 -180
- package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
- package/machine-config/amazonec2.vue +1 -0
- package/mixins/__tests__/chart.test.ts +112 -0
- package/mixins/brand.js +2 -1
- package/mixins/chart.js +50 -15
- package/mixins/resource-fetch-api-pagination.js +41 -5
- package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
- package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
- package/models/__tests__/chart.test.ts +99 -6
- package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
- package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
- package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
- package/models/__tests__/management.cattle.io.node.ts +6 -5
- package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
- package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
- package/models/base-cluster.x-k8s.io.js +26 -0
- package/models/catalog.cattle.io.app.js +21 -17
- package/models/catalog.cattle.io.clusterrepo.js +39 -11
- package/models/chart.js +33 -19
- package/models/cluster.js +1 -1
- package/models/cluster.x-k8s.io.machine.js +4 -22
- package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
- package/models/cluster.x-k8s.io.machineset.js +2 -20
- package/models/compliance.cattle.io.clusterscan.js +130 -2
- package/models/ext.cattle.io.kubeconfig.ts +4 -7
- package/models/fleet-application.js +4 -2
- package/models/fleet.cattle.io.bundle.js +1 -1
- package/models/kontainerdriver.js +11 -0
- package/models/management.cattle.io.authconfig.js +5 -1
- package/models/management.cattle.io.cluster.js +402 -78
- package/models/management.cattle.io.feature.js +3 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -26
- package/models/management.cattle.io.node.js +6 -4
- package/models/management.cattle.io.nodepool.js +1 -1
- package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
- package/models/networking.k8s.io.ingress.js +12 -4
- package/models/nodedriver.js +7 -0
- package/models/provisioning.cattle.io.cluster.js +47 -330
- package/models/rke.cattle.io.etcdsnapshot.js +1 -2
- package/package.json +20 -37
- package/pages/__tests__/readme.test.ts +49 -0
- package/pages/auth/setup.vue +2 -3
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
- package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
- package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
- package/pages/c/_cluster/apps/charts/chart.vue +275 -39
- package/pages/c/_cluster/apps/charts/index.vue +2 -2
- package/pages/c/_cluster/apps/charts/install.vue +18 -10
- package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
- package/pages/c/_cluster/explorer/index.vue +5 -49
- package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
- package/pages/c/_cluster/istio/index.vue +21 -6
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
- package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
- package/pages/c/_cluster/uiplugins/index.vue +226 -222
- package/pages/diagnostic.vue +13 -17
- package/pages/fail-whale.vue +18 -0
- package/pages/home.vue +77 -260
- package/pages/readme.vue +88 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
- package/plugins/dashboard-store/actions.js +40 -18
- package/plugins/dashboard-store/resource-class.js +5 -2
- package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
- package/plugins/steve/steve-pagination-utils.ts +11 -3
- package/plugins/steve/subscribe.js +35 -5
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
- package/rancher-components/RcButton/RcButton.test.ts +37 -1
- package/rancher-components/RcButton/RcButton.vue +38 -8
- package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
- package/scripts/test-plugins-build.sh +5 -2
- package/server/server-middleware.js +2 -2
- package/static/humans.txt +1 -0
- package/static/robots.txt +34 -0
- package/static/welcome-cow.svg +18 -0
- package/store/__tests__/catalog.test.ts +276 -12
- package/store/__tests__/type-map.test.ts +556 -1
- package/store/action-menu.js +8 -3
- package/store/auth.js +1 -4
- package/store/aws.js +27 -16
- package/store/catalog.js +87 -11
- package/store/digitalocean.js +20 -38
- package/store/index.js +2 -0
- package/store/linode.js +25 -40
- package/store/pnap.js +1 -0
- package/store/type-map.js +111 -29
- package/tsconfig.paths.json +8 -8
- package/types/kube/kube-api.ts +14 -1
- package/types/rancher/steve.api.ts +12 -12
- package/types/resources/settings.d.ts +2 -1
- package/types/shell/index.d.ts +128 -24
- package/types/store/dashboard-store.types.ts +108 -11
- package/types/store/pagination.types.ts +6 -3
- package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
- package/utils/__tests__/async.test.ts +87 -0
- package/utils/__tests__/aws.test.ts +140 -0
- package/utils/__tests__/banners.test.ts +176 -0
- package/utils/__tests__/chart.test.ts +64 -1
- package/utils/__tests__/color.test.ts +226 -0
- package/utils/__tests__/duration.test.ts +140 -0
- package/utils/__tests__/fleet.test.ts +340 -0
- package/utils/__tests__/git.test.ts +270 -0
- package/utils/__tests__/inactivity.test.ts +316 -0
- package/utils/__tests__/ingress.test.ts +553 -0
- package/utils/__tests__/kube.test.ts +68 -0
- package/utils/__tests__/namespace-filter.test.ts +109 -0
- package/utils/__tests__/object.test.ts +77 -0
- package/utils/__tests__/pagination-utils.test.ts +361 -0
- package/utils/__tests__/parse-externalid.test.ts +137 -0
- package/utils/__tests__/perf-setting.utils.test.ts +98 -0
- package/utils/__tests__/poller-sequential.test.ts +177 -0
- package/utils/__tests__/poller.test.ts +170 -0
- package/utils/__tests__/promise.test.ts +346 -0
- package/utils/__tests__/settings.test.ts +140 -0
- package/utils/__tests__/sort-utils.test.ts +301 -0
- package/utils/__tests__/string-utils.test.ts +798 -0
- package/utils/__tests__/string.test.ts +23 -1
- package/utils/__tests__/style.test.ts +154 -0
- package/utils/__tests__/svg-filter.test.ts +184 -0
- package/utils/__tests__/time.test.ts +14 -1
- package/utils/__tests__/units.test.ts +417 -0
- package/utils/__tests__/url.test.ts +246 -0
- package/utils/__tests__/versions.test.ts +128 -0
- package/utils/__tests__/xccdf.test.ts +391 -0
- package/utils/chart.js +36 -0
- package/utils/fleet.ts +13 -3
- package/utils/gatekeeper/__tests__/util.test.ts +174 -0
- package/utils/gc/__tests__/gc-interval.test.ts +119 -0
- package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
- package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
- package/utils/gc/__tests__/gc.test.ts +487 -0
- package/utils/ingress.ts +9 -1
- package/utils/object.js +33 -2
- package/utils/pagination-utils.ts +2 -1
- package/utils/string.js +25 -2
- package/utils/time.ts +5 -0
- package/utils/uiplugins.ts +5 -5
- package/utils/validators/__tests__/cluster-name.test.ts +110 -0
- package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
- package/utils/validators/__tests__/index.test.ts +481 -0
- package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
- package/utils/validators/__tests__/misc-validators.test.ts +246 -0
- package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
- package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
- package/utils/validators/__tests__/role-template.test.ts +149 -0
- package/utils/validators/__tests__/service.test.ts +283 -0
- package/utils/validators/__tests__/setting.test.js +32 -0
- package/utils/validators/formRules/__tests__/index.test.ts +50 -0
- package/utils/validators/formRules/index.ts +5 -5
- package/utils/validators/machine-pool.ts +1 -1
- package/utils/validators/setting.js +18 -3
- package/utils/xccdf.ts +418 -0
- package/vue.config.js +0 -9
- package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
- package/assets/images/providers/azuread-black.svg +0 -22
- package/assets/images/providers/azuread.svg +0 -25
- package/assets/images/vendor/azuread.svg +0 -18
- package/assets/styles/fonts/_dots.scss +0 -18
- package/components/EmberPage.vue +0 -622
- package/components/EmberPageView.vue +0 -39
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
- package/mixins/labeled-form-element.ts +0 -225
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
- package/pages/c/_cluster/manager/pages/_page.vue +0 -22
- package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
- package/plugins/ember-cookie.js +0 -17
- 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
|
+
}
|
package/apis/shell/slide-in.ts
CHANGED
|
@@ -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
|
-
*
|
|
20
|
+
* const shell = useShell();
|
|
21
|
+
*
|
|
22
|
+
* shell.slideIn.open(MyCustomSlideIn, {
|
|
20
23
|
* title: 'Hello from SlideIn panel!'
|
|
21
24
|
* });
|
|
22
25
|
* ```
|
package/apis/vue-shim.d.ts
CHANGED
|
@@ -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
|
]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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>
|
package/assets/styles/app.scss
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
/*
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 */
|