diff --git a/app/assets/css/index.js b/app/assets/css/index.js index 9cd17ecec..237167ee6 100644 --- a/app/assets/css/index.js +++ b/app/assets/css/index.js @@ -20,3 +20,4 @@ import './app.css'; import './theme.css'; import './vendor-override.css'; +import '../fonts/nomad-icon.css'; diff --git a/app/assets/fonts/nomad-icon.css b/app/assets/fonts/nomad-icon.css new file mode 100644 index 000000000..e266b5819 --- /dev/null +++ b/app/assets/fonts/nomad-icon.css @@ -0,0 +1,32 @@ +/* created using https://icomoon.io/app */ +/* https://stackoverflow.com/a/35092005/681629 */ +/* for additional icons, we should create a new set that includes the existing icons */ + +@font-face { + font-family: 'nomad-icon'; + src: url('nomad-icon/nomad-icon.eot?6tre2n'); + src: url('nomad-icon/nomad-icon.eot?6tre2n#iefix') format('embedded-opentype'), url('nomad-icon/nomad-icon.ttf?6tre2n') format('truetype'), + url('nomad-icon/nomad-icon.woff?6tre2n') format('woff'), url('nomad-icon/nomad-icon.svg?6tre2n#nomad-icon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +.nomad-icon { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'nomad-icon' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.nomad-icon:before { + content: '\e900'; +} diff --git a/app/assets/fonts/nomad-icon/nomad-icon.eot b/app/assets/fonts/nomad-icon/nomad-icon.eot new file mode 100644 index 000000000..81eb68d0e Binary files /dev/null and b/app/assets/fonts/nomad-icon/nomad-icon.eot differ diff --git a/app/assets/fonts/nomad-icon/nomad-icon.svg b/app/assets/fonts/nomad-icon/nomad-icon.svg new file mode 100644 index 000000000..f3b017d53 --- /dev/null +++ b/app/assets/fonts/nomad-icon/nomad-icon.svg @@ -0,0 +1,11 @@ + + + +Generated by IcoMoon + + + + + + + \ No newline at end of file diff --git a/app/assets/fonts/nomad-icon/nomad-icon.ttf b/app/assets/fonts/nomad-icon/nomad-icon.ttf new file mode 100644 index 000000000..c88998ea6 Binary files /dev/null and b/app/assets/fonts/nomad-icon/nomad-icon.ttf differ diff --git a/app/assets/fonts/nomad-icon/nomad-icon.woff b/app/assets/fonts/nomad-icon/nomad-icon.woff new file mode 100644 index 000000000..ffc04f12a Binary files /dev/null and b/app/assets/fonts/nomad-icon/nomad-icon.woff differ diff --git a/app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.tsx b/app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.tsx index b5dffd773..ad88a16ef 100644 --- a/app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.tsx +++ b/app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.tsx @@ -1,4 +1,5 @@ import { PropsWithChildren } from 'react'; +import clsx from 'clsx'; import { FeatureId } from '@/portainer/feature-flags/enums'; @@ -6,11 +7,15 @@ import { getFeatureDetails } from './utils'; export interface Props { featureId?: FeatureId; + showIcon?: boolean; + className?: string; } export function BEFeatureIndicator({ featureId, children, + showIcon = true, + className = '', }: PropsWithChildren) { const { url, limitedToBE } = getFeatureDetails(featureId); @@ -20,14 +25,18 @@ export function BEFeatureIndicator({ return ( {children} - - Business Edition Feature + {showIcon && ( + + )} + + Business Edition Feature + ); } diff --git a/app/portainer/environments/types.ts b/app/portainer/environments/types.ts index 98f123bed..878b34a6a 100644 --- a/app/portainer/environments/types.ts +++ b/app/portainer/environments/types.ts @@ -83,6 +83,7 @@ export enum EnvironmentCreationTypes { AzureEnvironment, EdgeAgentEnvironment, LocalKubernetesEnvironment, + KubeConfigEnvironment, } export enum PlatformType { diff --git a/app/portainer/feature-flags/enums.ts b/app/portainer/feature-flags/enums.ts index 73b61b7f3..ea3a4e03d 100644 --- a/app/portainer/feature-flags/enums.ts +++ b/app/portainer/feature-flags/enums.ts @@ -12,6 +12,9 @@ export enum FeatureState { export enum FeatureId { K8S_RESOURCE_POOL_LB_QUOTA = 'k8s-resourcepool-Ibquota', K8S_RESOURCE_POOL_STORAGE_QUOTA = 'k8s-resourcepool-storagequota', + K8S_CREATE_FROM_KUBECONFIG = 'k8s-create-from-kubeconfig', + KAAS_PROVISIONING = 'kaas-provisioning', + NOMAD = 'nomad', RBAC_ROLES = 'rbac-roles', REGISTRY_MANAGEMENT = 'registry-management', K8S_SETUP_DEFAULT = 'k8s-setup-default', diff --git a/app/portainer/feature-flags/feature-flags.service.ts b/app/portainer/feature-flags/feature-flags.service.ts index 388c53310..95264ce48 100644 --- a/app/portainer/feature-flags/feature-flags.service.ts +++ b/app/portainer/feature-flags/feature-flags.service.ts @@ -16,6 +16,9 @@ export async function init(edition: Edition) { const features = { [FeatureId.K8S_RESOURCE_POOL_LB_QUOTA]: Edition.BE, [FeatureId.K8S_RESOURCE_POOL_STORAGE_QUOTA]: Edition.BE, + [FeatureId.K8S_CREATE_FROM_KUBECONFIG]: Edition.BE, + [FeatureId.KAAS_PROVISIONING]: Edition.BE, + [FeatureId.NOMAD]: Edition.BE, [FeatureId.ACTIVITY_AUDIT]: Edition.BE, [FeatureId.EXTERNAL_AUTH_LDAP]: Edition.BE, [FeatureId.HIDE_INTERNAL_AUTH]: Edition.BE, diff --git a/app/react/portainer/environments/wizard/EnvironmentTypeSelectView/EnvironmentSelector.tsx b/app/react/portainer/environments/wizard/EnvironmentTypeSelectView/EnvironmentSelector.tsx index 366fab32b..504b8ad86 100644 --- a/app/react/portainer/environments/wizard/EnvironmentTypeSelectView/EnvironmentSelector.tsx +++ b/app/react/portainer/environments/wizard/EnvironmentTypeSelectView/EnvironmentSelector.tsx @@ -23,6 +23,7 @@ export function EnvironmentSelector({ value, onChange }: Props) { {environmentTypes.map((eType) => (