From 794feea91d1c32794dba17049ba3587a66eb5039 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 7 Dec 2020 10:53:54 +0000 Subject: [PATCH] Deployed d3026d4dd to master with MkDocs 1.1.2 and mike 0.5.5 --- .../index.html | 24 +- .../_core_api_stores_.cluster/index.html | 122 ++++---- .../index.html | 54 ++-- .../_core_api_stores_.workspace/index.html | 24 +- .../_core_api_utils_.singleton/index.html | 4 +- .../index.html | 2 +- .../index.html | 2 +- .../index.html | 6 +- .../index.html | 30 +- .../index.html | 2 +- .../index.html | 50 ++-- .../index.html | 20 +- .../index.html | 2 +- .../index.html | 6 +- .../index.html | 2 +- .../_renderer_api_components_.icon/index.html | 12 +- .../index.html | 52 ++-- .../index.html | 4 +- .../index.html | 14 +- .../index.html | 6 +- .../index.html | 14 +- .../index.html | 6 +- .../index.html | 12 +- .../_renderer_api_components_.menu/index.html | 44 +-- .../index.html | 16 +- .../index.html | 18 +- .../index.html | 16 +- .../index.html | 14 +- .../index.html | 12 +- .../index.html | 6 +- .../index.html | 2 +- .../index.html | 22 +- .../index.html | 4 +- .../index.html | 8 +- .../index.html | 2 +- .../index.html | 2 +- .../_renderer_api_components_.tab/index.html | 24 +- .../index.html | 28 +- .../index.html | 10 +- .../index.html | 6 +- .../index.html | 2 +- .../_renderer_api_components_.tabs/index.html | 6 +- .../index.html | 30 +- .../index.html | 2 +- .../index.html | 58 ++-- .../index.html | 62 ++-- .../index.html | 58 ++-- .../index.html | 88 +++--- .../index.html | 88 +++--- .../index.html | 94 +++--- .../_renderer_api_k8s_api_.cronjob/index.html | 64 ++-- .../index.html | 90 +++--- .../index.html | 86 +++--- .../index.html | 70 ++--- .../index.html | 94 +++--- .../index.html | 74 ++--- .../index.html | 68 ++--- .../index.html | 94 +++--- .../index.html | 60 ++-- .../index.html | 88 +++--- .../index.html | 94 +++--- .../index.html | 72 ++--- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.ingress/index.html | 66 ++--- .../index.html | 62 ++-- .../index.html | 92 +++--- .../_renderer_api_k8s_api_.job/index.html | 78 ++--- .../index.html | 92 +++--- .../_renderer_api_k8s_api_.kubeapi/index.html | 60 ++-- .../index.html | 84 +++--- .../index.html | 52 ++-- .../index.html | 88 +++--- .../index.html | 56 ++-- .../index.html | 106 +++---- .../index.html | 60 ++-- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.node/index.html | 78 ++--- .../index.html | 62 ++-- .../index.html | 106 +++---- .../index.html | 62 ++-- .../index.html | 66 ++--- .../index.html | 62 ++-- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.pod/index.html | 110 +++---- .../index.html | 66 ++--- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.podsapi/index.html | 64 ++-- .../index.html | 104 +++---- .../index.html | 70 ++--- .../index.html | 96 +++--- .../index.html | 58 ++-- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.role/index.html | 58 ++-- .../index.html | 62 ++-- .../index.html | 90 +++--- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.secret/index.html | 62 ++-- .../index.html | 88 +++--- .../_renderer_api_k8s_api_.service/index.html | 72 ++--- .../index.html | 62 ++-- .../index.html | 88 +++--- .../index.html | 88 +++--- .../index.html | 72 ++--- .../index.html | 94 +++--- .../index.html | 70 ++--- .../index.html | 88 +++--- .../index.html | 92 +++--- .../api/classes/lensmainextension/index.html | 34 +-- .../classes/lensrendererextension/index.html | 54 ++-- .../index.html | 6 +- .../index.html | 16 +- .../index.html | 6 +- .../index.html | 8 +- .../_core_api_stores_.clustermodel/index.html | 18 +- .../index.html | 10 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 2 +- .../index.html | 6 +- .../index.html | 2 +- .../index.html | 8 +- .../index.html | 2 +- .../index.html | 6 +- .../index.html | 6 +- .../index.html | 2 +- .../index.html | 2 +- .../index.html | 6 +- .../index.html | 6 +- .../index.html | 2 +- .../index.html | 8 +- .../index.html | 28 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 4 +- .../index.html | 18 +- .../index.html | 14 +- .../index.html | 12 +- .../index.html | 2 +- .../index.html | 20 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 30 +- .../index.html | 8 +- .../index.html | 2 +- .../index.html | 4 +- .../index.html | 56 ++-- .../index.html | 18 +- .../index.html | 4 +- .../index.html | 14 +- .../index.html | 12 +- .../index.html | 10 +- .../index.html | 8 +- .../index.html | 26 +- .../index.html | 8 +- .../index.html | 16 +- .../index.html | 10 +- .../index.html | 4 +- .../index.html | 12 +- .../index.html | 4 +- .../index.html | 6 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 8 +- .../index.html | 12 +- .../index.html | 18 +- .../index.html | 8 +- .../index.html | 34 +-- .../index.html | 14 +- .../index.html | 12 +- .../index.html | 16 +- .../index.html | 10 +- .../index.html | 4 +- .../index.html | 20 +- .../index.html | 14 +- .../index.html | 2 +- .../index.html | 24 +- .../index.html | 16 +- .../index.html | 4 +- .../index.html | 4 +- .../api/modules/_core_api_app_/index.html | 18 +- .../modules/_core_api_event_bus_/index.html | 4 +- .../api/modules/_core_api_stores_/index.html | 8 +- .../api/modules/_core_api_utils_/index.html | 8 +- .../_renderer_api_components_/index.html | 44 +-- .../modules/_renderer_api_k8s_api_/index.html | 64 ++-- .../_renderer_api_navigation_/index.html | 8 +- .../modules/_renderer_api_theming_/index.html | 2 +- .../guides/images/certificates-crd-list.png | Bin 0 -> 811453 bytes .../guides/kube-object-list-layout/index.html | 279 +++++++++++++++++- master/search/search_index.json | 2 +- master/sitemap.xml.gz | Bin 480 -> 480 bytes 191 files changed, 3595 insertions(+), 3334 deletions(-) create mode 100644 master/extensions/guides/images/certificates-crd-list.png diff --git a/master/extensions/api/classes/_core_api_cluster_feature_.clusterfeature/index.html b/master/extensions/api/classes/_core_api_cluster_feature_.clusterfeature/index.html index 3d556a3586..3cb695c4e0 100644 --- a/master/extensions/api/classes/_core_api_cluster_feature_.clusterfeature/index.html +++ b/master/extensions/api/classes/_core_api_cluster_feature_.clusterfeature/index.html @@ -1012,13 +1012,13 @@

Properties#

templateContext#

templateContext: any

-

Defined in src/extensions/cluster-feature.ts:29

+

Defined in src/extensions/cluster-feature.ts:29

this field sets the template parameters that are to be applied to any templated kubernetes resources that are to be installed for the feature. See the renderTemplates() method for more details

Methods#

Protected applyResources#

applyResources(cluster: Cluster, resourceSpec: string | string[]): Promise‹void›

-

Defined in src/extensions/cluster-feature.ts:85

+

Defined in src/extensions/cluster-feature.ts:85

this is a helper method that conveniently applies kubernetes resources to the cluster.

Parameters:

@@ -1046,7 +1046,7 @@ See the renderTemplates() method for more details


Abstract install#

install(cluster: Cluster): Promise‹void›

-

Defined in src/extensions/cluster-feature.ts:47

+

Defined in src/extensions/cluster-feature.ts:47

to be implemented in the derived class, this method is typically called by Lens when a user has indicated that this feature is to be installed. The implementation of this method should install kubernetes resources using the applyResources() method, or by directly accessing the kubernetes api (K8sApi)

Parameters:

@@ -1070,7 +1070,7 @@ of this method should install kubernetes resources using the applyResources() me

Protected renderTemplates#

renderTemplates(folderPath: string): string[]

-

Defined in src/extensions/cluster-feature.ts:109

+

Defined in src/extensions/cluster-feature.ts:109

this is a helper method that conveniently reads kubernetes resource files into a string array. It also fills templated resource files with the template parameter values specified by the templateContext field. Templated files must end with the extension '.hb' and the template syntax must be compatible with handlebars.js

Parameters:

@@ -1095,7 +1095,7 @@ specified by the templateContext field. Templated files must end with the extens

Abstract uninstall#

uninstall(cluster: Cluster): Promise‹void›

-

Defined in src/extensions/cluster-feature.ts:63

+

Defined in src/extensions/cluster-feature.ts:63

to be implemented in the derived class, this method is typically called by Lens when a user has indicated that this feature is to be uninstalled. The implementation of this method should uninstall kubernetes resources using the kubernetes api (K8sApi)

Parameters:

@@ -1119,7 +1119,7 @@ of this method should uninstall kubernetes resources using the kubernetes api (K

Abstract updateStatus#

updateStatus(cluster: Cluster): Promise‹ClusterFeatureStatus

-

Defined in src/extensions/cluster-feature.ts:75

+

Defined in src/extensions/cluster-feature.ts:75

to be implemented in the derived class, this method is called periodically by Lens to determine details about the feature's current status. The implementation of this method should provide the current status information. The currentVersion and latestVersion fields may be displayed by Lens in describing the feature. The installed field should be set to true if the feature has been installed, otherwise false. Also, Lens relies on the canUpgrade field to determine if the feature @@ -1146,7 +1146,7 @@ can be upgraded so the implementation should set the canUpgrade field according


Abstract upgrade#

upgrade(cluster: Cluster): Promise‹void›

-

Defined in src/extensions/cluster-feature.ts:55

+

Defined in src/extensions/cluster-feature.ts:55

to be implemented in the derived class, this method is typically called by Lens when a user has indicated that this feature is to be upgraded. The implementation of this method should upgrade the kubernetes resources already installed, if relevant to the feature

Parameters:

@@ -1170,20 +1170,20 @@ of this method should upgrade the kubernetes resources already installed, if rel

Object literals#

status#

status: object#

-

Defined in src/extensions/cluster-feature.ts:34

+

Defined in src/extensions/cluster-feature.ts:34

this field holds the current feature status, is accessed directly by Lens

canUpgrade#

canUpgrade: false = false

-

Defined in src/extensions/cluster-feature.ts:38

+

Defined in src/extensions/cluster-feature.ts:38

currentVersion#

currentVersion: null = null

-

Defined in src/extensions/cluster-feature.ts:35

+

Defined in src/extensions/cluster-feature.ts:35

installed#

installed: false = false

-

Defined in src/extensions/cluster-feature.ts:36

+

Defined in src/extensions/cluster-feature.ts:36

latestVersion#

latestVersion: null = null

-

Defined in src/extensions/cluster-feature.ts:37

+

Defined in src/extensions/cluster-feature.ts:37

diff --git a/master/extensions/api/classes/_core_api_stores_.cluster/index.html b/master/extensions/api/classes/_core_api_stores_.cluster/index.html index bffffa656d..048fb97203 100644 --- a/master/extensions/api/classes/_core_api_stores_.cluster/index.html +++ b/master/extensions/api/classes/_core_api_stores_.cluster/index.html @@ -1436,7 +1436,7 @@

Constructors#

constructor#

+ new Cluster(model: ClusterModel): Cluster

-

Defined in src/main/cluster.ts:102

+

Defined in src/main/cluster.ts:102

Parameters:

@@ -1456,152 +1456,152 @@

Properties#

accessible#

accessible: boolean = false

-

Defined in src/main/cluster.ts:72

+

Defined in src/main/cluster.ts:72


accessibleNamespaces#

accessibleNamespaces: string[] = []

Implementation of ClusterModel.accessibleNamespaces

-

Defined in src/main/cluster.ts:82

+

Defined in src/main/cluster.ts:82


Protected activated#

activated: boolean = false

-

Defined in src/main/cluster.ts:59

+

Defined in src/main/cluster.ts:59


allowedNamespaces#

allowedNamespaces: string[] = []

-

Defined in src/main/cluster.ts:80

+

Defined in src/main/cluster.ts:80


allowedResources#

allowedResources: string[] = []

-

Defined in src/main/cluster.ts:81

+

Defined in src/main/cluster.ts:81


apiUrl#

apiUrl: string

-

Defined in src/main/cluster.ts:68

+

Defined in src/main/cluster.ts:68


contextHandler#

contextHandler: ContextHandler

-

Defined in src/main/cluster.ts:55

+

Defined in src/main/cluster.ts:55


contextName#

contextName: string

Implementation of ClusterModel.contextName

-

Defined in src/main/cluster.ts:65

+

Defined in src/main/cluster.ts:65


disconnected#

disconnected: boolean = true

-

Defined in src/main/cluster.ts:75

+

Defined in src/main/cluster.ts:75


enabled#

enabled: boolean = false

-

Defined in src/main/cluster.ts:70

+

Defined in src/main/cluster.ts:70


Protected eventDisposers#

eventDisposers: Function[] = []

-

Defined in src/main/cluster.ts:58

+

Defined in src/main/cluster.ts:58


failureReason#

failureReason: string

-

Defined in src/main/cluster.ts:76

+

Defined in src/main/cluster.ts:76


id#

id: ClusterId

Implementation of ClusterModel.id

-

Defined in src/main/cluster.ts:53

+

Defined in src/main/cluster.ts:53


initialized#

initialized: boolean = false

-

Defined in src/main/cluster.ts:64

+

Defined in src/main/cluster.ts:64


isAdmin#

isAdmin: boolean = false

-

Defined in src/main/cluster.ts:77

+

Defined in src/main/cluster.ts:77


kubeConfigPath#

kubeConfigPath: string

Implementation of ClusterModel.kubeConfigPath

-

Defined in src/main/cluster.ts:67

+

Defined in src/main/cluster.ts:67


kubeCtl#

kubeCtl: Kubectl

-

Defined in src/main/cluster.ts:54

+

Defined in src/main/cluster.ts:54


kubeProxyUrl#

kubeProxyUrl: string

-

Defined in src/main/cluster.ts:69

+

Defined in src/main/cluster.ts:69


Protected kubeconfigManager#

kubeconfigManager: KubeconfigManager

-

Defined in src/main/cluster.ts:57

+

Defined in src/main/cluster.ts:57


metadata#

metadata: ClusterMetadata

Implementation of ClusterModel.metadata

-

Defined in src/main/cluster.ts:79

+

Defined in src/main/cluster.ts:79


online#

online: boolean = false

-

Defined in src/main/cluster.ts:71

+

Defined in src/main/cluster.ts:71


ownerRef#

ownerRef: string

Implementation of ClusterModel.ownerRef

-

Defined in src/main/cluster.ts:56

+

Defined in src/main/cluster.ts:56


preferences#

preferences: ClusterPreferences

Implementation of ClusterModel.preferences

-

Defined in src/main/cluster.ts:78

+

Defined in src/main/cluster.ts:78


ready#

ready: boolean = false

-

Defined in src/main/cluster.ts:73

+

Defined in src/main/cluster.ts:73


reconnecting#

reconnecting: boolean = false

-

Defined in src/main/cluster.ts:74

+

Defined in src/main/cluster.ts:74


whenInitialized#

whenInitialized: Promise‹void› & object = when(() => this.initialized)

-

Defined in src/main/cluster.ts:61

+

Defined in src/main/cluster.ts:61


whenReady#

whenReady: Promise‹void› & object = when(() => this.ready)

-

Defined in src/main/cluster.ts:62

+

Defined in src/main/cluster.ts:62


workspace#

workspace: WorkspaceId

Implementation of ClusterModel.workspace

-

Defined in src/main/cluster.ts:66

+

Defined in src/main/cluster.ts:66

Accessors#

available#

get available(): boolean

-

Defined in src/main/cluster.ts:84

+

Defined in src/main/cluster.ts:84

Returns: boolean


isManaged#

get isManaged(): boolean

-

Defined in src/main/cluster.ts:113

+

Defined in src/main/cluster.ts:113

Returns: boolean


name#

get name(): string

-

Defined in src/main/cluster.ts:88

+

Defined in src/main/cluster.ts:88

Returns: string


prometheusPreferences#

get prometheusPreferences(): ClusterPrometheusPreferences

-

Defined in src/main/cluster.ts:92

+

Defined in src/main/cluster.ts:92

Returns: ClusterPrometheusPreferences


version#

get version(): string

-

Defined in src/main/cluster.ts:100

+

Defined in src/main/cluster.ts:100

Returns: string

Methods#

activate#

activate(force: boolean): Promise‹void›

-

Defined in src/main/cluster.ts:166

+

Defined in src/main/cluster.ts:166

Parameters:

@@ -1623,12 +1623,12 @@

Protected bindEvents#

bindEvents(): void

-

Defined in src/main/cluster.ts:142

+

Defined in src/main/cluster.ts:142

Returns: void


canI#

canI(resourceAttributes: V1ResourceAttributes): Promise‹boolean›

-

Defined in src/main/cluster.ts:332

+

Defined in src/main/cluster.ts:332

Parameters:

@@ -1648,37 +1648,37 @@

disconnect#

disconnect(): void

-

Defined in src/main/cluster.ts:208

+

Defined in src/main/cluster.ts:208

Returns: void


Protected ensureKubectl#

ensureKubectl(): Promise‹boolean›

-

Defined in src/main/cluster.ts:193

+

Defined in src/main/cluster.ts:193

Returns: Promise‹boolean›


Protected getAllowedNamespaces#

getAllowedNamespaces(): Promise‹string[]›

-

Defined in src/main/cluster.ts:419

+

Defined in src/main/cluster.ts:419

Returns: Promise‹string[]›


Protected getAllowedResources#

getAllowedResources(): Promise‹("namespaces" | "nodes" | "events" | "resourcequotas" | "services" | "secrets" | "configmaps" | "ingresses" | "networkpolicies" | "persistentvolumes" | "storageclasses" | "pods" | "daemonsets" | "deployments" | "statefulsets" | "replicasets" | "jobs" | "cronjobs" | "endpoints" | "customresourcedefinitions" | "horizontalpodautoscalers" | "podsecuritypolicies" | "poddisruptionbudgets")[]›

-

Defined in src/main/cluster.ts:439

+

Defined in src/main/cluster.ts:439

Returns: Promise‹("namespaces" | "nodes" | "events" | "resourcequotas" | "services" | "secrets" | "configmaps" | "ingresses" | "networkpolicies" | "persistentvolumes" | "storageclasses" | "pods" | "daemonsets" | "deployments" | "statefulsets" | "replicasets" | "jobs" | "cronjobs" | "endpoints" | "customresourcedefinitions" | "horizontalpodautoscalers" | "podsecuritypolicies" | "poddisruptionbudgets")[]›


Protected getConnectionStatus#

getConnectionStatus(): Promise‹ClusterStatus›

-

Defined in src/main/cluster.ts:294

+

Defined in src/main/cluster.ts:294

Returns: Promise‹ClusterStatus›


Protected getKubeconfig#

getKubeconfig(): KubeConfig

-

Defined in src/main/cluster.ts:261

+

Defined in src/main/cluster.ts:261

Returns: KubeConfig


getMeta#

getMeta(): object

-

Defined in src/main/cluster.ts:407

+

Defined in src/main/cluster.ts:407

Returns: object

@@ -1730,22 +1730,22 @@

getProxyKubeconfig#

getProxyKubeconfig(): KubeConfig

-

Defined in src/main/cluster.ts:265

+

Defined in src/main/cluster.ts:265

Returns: KubeConfig


getProxyKubeconfigPath#

getProxyKubeconfigPath(): string

-

Defined in src/main/cluster.ts:269

+

Defined in src/main/cluster.ts:269

Returns: string


getState#

getState(): ClusterState

-

Defined in src/main/cluster.ts:376

+

Defined in src/main/cluster.ts:376

Returns: ClusterState


init#

init(port: number): Promise‹void›

-

Defined in src/main/cluster.ts:123

+

Defined in src/main/cluster.ts:123

Parameters:

@@ -1765,12 +1765,12 @@

isClusterAdmin#

isClusterAdmin(): Promise‹boolean›

-

Defined in src/main/cluster.ts:350

+

Defined in src/main/cluster.ts:350

Returns: Promise‹boolean›


Protected k8sRequest#

k8sRequestT›(path: string, options: RequestPromiseOptions): Promise‹T›

-

Defined in src/main/cluster.ts:273

+

Defined in src/main/cluster.ts:273

Type parameters:

T

Parameters:

@@ -1799,7 +1799,7 @@

pushState#

pushState(state: ClusterState): void

-

Defined in src/main/cluster.ts:401

+

Defined in src/main/cluster.ts:401

Parameters:

@@ -1821,12 +1821,12 @@

reconnect#

reconnect(): Promise‹void›

-

Defined in src/main/cluster.ts:200

+

Defined in src/main/cluster.ts:200

Returns: Promise‹void›


refresh#

refresh(opts: ClusterRefreshOptions): Promise‹void›

-

Defined in src/main/cluster.ts:221

+

Defined in src/main/cluster.ts:221

Parameters:

@@ -1848,22 +1848,22 @@

refreshAllowedResources#

refreshAllowedResources(): Promise‹void›

-

Defined in src/main/cluster.ts:256

+

Defined in src/main/cluster.ts:256

Returns: Promise‹void›


refreshConnectionStatus#

refreshConnectionStatus(): Promise‹void›

-

Defined in src/main/cluster.ts:248

+

Defined in src/main/cluster.ts:248

Returns: Promise‹void›


refreshMetadata#

refreshMetadata(): Promise‹void›

-

Defined in src/main/cluster.ts:239

+

Defined in src/main/cluster.ts:239

Returns: Promise‹void›


setState#

setState(state: ClusterState): void

-

Defined in src/main/cluster.ts:397

+

Defined in src/main/cluster.ts:397

Parameters:

@@ -1883,17 +1883,17 @@

toJSON#

toJSON(): ClusterModel

-

Defined in src/main/cluster.ts:358

+

Defined in src/main/cluster.ts:358

Returns: ClusterModel


Protected unbindEvents#

unbindEvents(): void

-

Defined in src/main/cluster.ts:159

+

Defined in src/main/cluster.ts:159

Returns: void


updateModel#

updateModel(model: ClusterModel): void

-

Defined in src/main/cluster.ts:118

+

Defined in src/main/cluster.ts:118

Parameters:

diff --git a/master/extensions/api/classes/_core_api_stores_.extensionstore/index.html b/master/extensions/api/classes/_core_api_stores_.extensionstore/index.html index c3dc1f5b0c..54b18ef1b2 100644 --- a/master/extensions/api/classes/_core_api_stores_.extensionstore/index.html +++ b/master/extensions/api/classes/_core_api_stores_.extensionstore/index.html @@ -1163,7 +1163,7 @@

Protected constructor#

+ new ExtensionStore(params: BaseStoreParams): ExtensionStore

Inherited from ExtensionStore.constructor

-

Defined in src/common/base-store.ts:26

+

Defined in src/common/base-store.ts:26

Parameters:

@@ -1183,61 +1183,61 @@

Properties#

Protected extension#

extension: LensExtension

-

Defined in src/extensions/extension-store.ts:6

+

Defined in src/extensions/extension-store.ts:6


isLoaded#

isLoaded: boolean = false

Inherited from ExtensionStore.isLoaded

-

Defined in src/common/base-store.ts:26

+

Defined in src/common/base-store.ts:26


Protected params#

params: BaseStoreParams

Inherited from ExtensionStore.params

-

Defined in src/common/base-store.ts:28

+

Defined in src/common/base-store.ts:28


Protected storeConfig#

storeConfig: Config‹T›

Inherited from ExtensionStore.storeConfig

-

Defined in src/common/base-store.ts:22

+

Defined in src/common/base-store.ts:22


Protected syncDisposers#

syncDisposers: Function[] = []

Inherited from ExtensionStore.syncDisposers

-

Defined in src/common/base-store.ts:23

+

Defined in src/common/base-store.ts:23


whenLoaded#

whenLoaded: Promise‹void› & object = when(() => this.isLoaded)

Inherited from ExtensionStore.whenLoaded

-

Defined in src/common/base-store.ts:25

+

Defined in src/common/base-store.ts:25

Accessors#

name#

get name(): string

Inherited from ExtensionStore.name

-

Defined in src/common/base-store.ts:38

+

Defined in src/common/base-store.ts:38

Returns: string


path#

get path(): string

Inherited from ExtensionStore.path

-

Defined in src/common/base-store.ts:50

+

Defined in src/common/base-store.ts:50

Returns: string


Protected syncMainChannel#

get syncMainChannel(): string

Inherited from ExtensionStore.syncMainChannel

-

Defined in src/common/base-store.ts:46

+

Defined in src/common/base-store.ts:46

Returns: string


Protected syncRendererChannel#

get syncRendererChannel(): string

Inherited from ExtensionStore.syncRendererChannel

-

Defined in src/common/base-store.ts:42

+

Defined in src/common/base-store.ts:42

Returns: string

Methods#

Protected applyWithoutSync#

applyWithoutSync(callback: function): void

Inherited from ExtensionStore.applyWithoutSync

-

Defined in src/common/base-store.ts:133

+

Defined in src/common/base-store.ts:133

Parameters:

callback: function

▸ (): void

@@ -1246,25 +1246,25 @@

Protected cwd#

cwd(): string

Overrides void

-

Defined in src/extensions/extension-store.ts:20

+

Defined in src/extensions/extension-store.ts:20

Returns: string


disableSync#

disableSync(): void

Inherited from ExtensionStore.disableSync

-

Defined in src/common/base-store.ts:128

+

Defined in src/common/base-store.ts:128

Returns: void


enableSync#

enableSync(): void

Inherited from ExtensionStore.enableSync

-

Defined in src/common/base-store.ts:91

+

Defined in src/common/base-store.ts:91

Returns: void


Protected Abstract fromStore#

fromStore(data: T): void

Inherited from ExtensionStore.fromStore

-

Defined in src/common/base-store.ts:163

+

Defined in src/common/base-store.ts:163

fromStore is called internally when a child class syncs with the file system.

Parameters:

@@ -1289,18 +1289,18 @@ system.

Protected init#

init(): Promise‹void›

Inherited from ExtensionStore.init

-

Defined in src/common/base-store.ts:54

+

Defined in src/common/base-store.ts:54

Returns: Promise‹void›


load#

load(): Promise‹void›

Overrides void

-

Defined in src/extensions/extension-store.ts:14

+

Defined in src/extensions/extension-store.ts:14

Returns: Promise‹void›


loadExtension#

loadExtension(extension: LensExtension): Promise‹void›

-

Defined in src/extensions/extension-store.ts:8

+

Defined in src/extensions/extension-store.ts:8

Parameters:

@@ -1321,7 +1321,7 @@ system.

Protected onModelChange#

onModelChange(model: T): Promise‹void›

Inherited from ExtensionStore.onModelChange

-

Defined in src/common/base-store.ts:149

+

Defined in src/common/base-store.ts:149

Parameters:

@@ -1342,7 +1342,7 @@ system.

Protected onSync#

onSync(model: T): void

Inherited from ExtensionStore.onSync

-

Defined in src/common/base-store.ts:142

+

Defined in src/common/base-store.ts:142

Parameters:

@@ -1363,7 +1363,7 @@ system.

Protected onSyncFromMain#

onSyncFromMain(model: T): void

Inherited from ExtensionStore.onSyncFromMain

-

Defined in src/common/base-store.ts:117

+

Defined in src/common/base-store.ts:117

Parameters:

@@ -1384,7 +1384,7 @@ system.

Protected saveToFile#

saveToFile(model: T): Promise‹void›

Inherited from ExtensionStore.saveToFile

-

Defined in src/common/base-store.ts:83

+

Defined in src/common/base-store.ts:83

Parameters:

@@ -1405,7 +1405,7 @@ system.

Abstract toJSON#

toJSON(): T

Inherited from ExtensionStore.toJSON

-

Defined in src/common/base-store.ts:172

+

Defined in src/common/base-store.ts:172

toJSON is called when syncing the store to the filesystem. It should produce a JSON serializable object representaion of the current state.

It is recommended that a round trip is valid. Namely, calling @@ -1415,13 +1415,13 @@ produce a JSON serializable object representaion of the current state.

unregisterIpcListener#

unregisterIpcListener(): void

Inherited from ExtensionStore.unregisterIpcListener

-

Defined in src/common/base-store.ts:123

+

Defined in src/common/base-store.ts:123

Returns: void


Static getInstance#

getInstanceT›(...args: ConstructorParameters‹Constructor‹T››): T

Inherited from ExtensionStore.getInstance

-

Defined in src/common/utils/singleton.ts:15

+

Defined in src/common/utils/singleton.ts:15

Type parameters:

T

Parameters:

@@ -1444,7 +1444,7 @@ produce a JSON serializable object representaion of the current state.

Static resetInstance#

resetInstance(): void

Inherited from ExtensionStore.resetInstance

-

Defined in src/common/utils/singleton.ts:23

+

Defined in src/common/utils/singleton.ts:23

Returns: void

diff --git a/master/extensions/api/classes/_core_api_stores_.workspace/index.html b/master/extensions/api/classes/_core_api_stores_.workspace/index.html index dc22853648..be6455d8d7 100644 --- a/master/extensions/api/classes/_core_api_stores_.workspace/index.html +++ b/master/extensions/api/classes/_core_api_stores_.workspace/index.html @@ -1044,7 +1044,7 @@

Constructors#

constructor#

+ new Workspace(data: WorkspaceModel): Workspace

-

Defined in src/common/workspace-store.ts:69

+

Defined in src/common/workspace-store.ts:69

Parameters:

@@ -1065,13 +1065,13 @@

Optional description#

description? : string

Implementation of WorkspaceModel.description

-

Defined in src/common/workspace-store.ts:47

+

Defined in src/common/workspace-store.ts:47

Workspace description

observable


enabled#

enabled: boolean

-

Defined in src/common/workspace-store.ts:63

+

Defined in src/common/workspace-store.ts:63

Is workspace enabled

Workspaces that don't have ownerRef will be enabled by default. Workspaces with ownerRef need to explicitly enable a workspace.

observable

@@ -1079,45 +1079,45 @@

id#

id: WorkspaceId

Implementation of WorkspaceModel.id

-

Defined in src/common/workspace-store.ts:35

+

Defined in src/common/workspace-store.ts:35

Unique id for workspace

observable


Optional lastActiveClusterId#

lastActiveClusterId? : ClusterId

Implementation of WorkspaceModel.lastActiveClusterId

-

Defined in src/common/workspace-store.ts:69

+

Defined in src/common/workspace-store.ts:69

Last active cluster id

observable


name#

name: string

Implementation of WorkspaceModel.name

-

Defined in src/common/workspace-store.ts:41

+

Defined in src/common/workspace-store.ts:41

Workspace name

observable


Optional ownerRef#

ownerRef? : string

Implementation of WorkspaceModel.ownerRef

-

Defined in src/common/workspace-store.ts:55

+

Defined in src/common/workspace-store.ts:55

Workspace owner reference

If extension sets ownerRef then it needs to explicitly mark workspace as enabled onActivate (or when workspace is saved)

observable

Accessors#

isManaged#

get isManaged(): boolean

-

Defined in src/common/workspace-store.ts:81

+

Defined in src/common/workspace-store.ts:81

Returns: boolean

Methods#

getState#

getState(): WorkspaceState

-

Defined in src/common/workspace-store.ts:85

+

Defined in src/common/workspace-store.ts:85

Returns: WorkspaceState


pushState#

pushState(state: WorkspaceState): void

-

Defined in src/common/workspace-store.ts:91

+

Defined in src/common/workspace-store.ts:91

Parameters:

@@ -1139,7 +1139,7 @@

setState#

setState(state: WorkspaceState): void

-

Defined in src/common/workspace-store.ts:97

+

Defined in src/common/workspace-store.ts:97

Parameters:

@@ -1159,7 +1159,7 @@

toJSON#

toJSON(): WorkspaceModel

-

Defined in src/common/workspace-store.ts:101

+

Defined in src/common/workspace-store.ts:101

Returns: WorkspaceModel

diff --git a/master/extensions/api/classes/_core_api_utils_.singleton/index.html b/master/extensions/api/classes/_core_api_utils_.singleton/index.html index 4c6c6f9f8b..f65cdfe3db 100644 --- a/master/extensions/api/classes/_core_api_utils_.singleton/index.html +++ b/master/extensions/api/classes/_core_api_utils_.singleton/index.html @@ -883,7 +883,7 @@

Methods#

Static getInstance#

getInstanceT›(...args: ConstructorParameters‹Constructor‹T››): T

-

Defined in src/common/utils/singleton.ts:15

+

Defined in src/common/utils/singleton.ts:15

Type parameters:

T

Parameters:

@@ -905,7 +905,7 @@

Static resetInstance#

resetInstance(): void

-

Defined in src/common/utils/singleton.ts:23

+

Defined in src/common/utils/singleton.ts:23

Returns: void

diff --git a/master/extensions/api/classes/_renderer_api_components_.badge/index.html b/master/extensions/api/classes/_renderer_api_components_.badge/index.html index be8b2843d9..463d7ea10e 100644 --- a/master/extensions/api/classes/_renderer_api_components_.badge/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.badge/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/badge/badge.tsx:14

+

Defined in src/renderer/components/badge/badge.tsx:14

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.button/index.html b/master/extensions/api/classes/_renderer_api_components_.button/index.html index 29c637d0fc..e369b2a941 100644 --- a/master/extensions/api/classes/_renderer_api_components_.button/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.button/index.html @@ -1253,7 +1253,7 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/button/button.tsx:26

+

Defined in src/renderer/components/button/button.tsx:26

Returns: Element‹›


Optional shouldComponentUpdate#

diff --git a/master/extensions/api/classes/_renderer_api_components_.checkbox/index.html b/master/extensions/api/classes/_renderer_api_components_.checkbox/index.html index b29ea39aad..190552b5f3 100644 --- a/master/extensions/api/classes/_renderer_api_components_.checkbox/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.checkbox/index.html @@ -1270,12 +1270,12 @@ lifecycle events from running.


getValue#

getValue(): boolean

-

Defined in src/renderer/components/checkbox/checkbox.tsx:25

+

Defined in src/renderer/components/checkbox/checkbox.tsx:25

Returns: boolean


onChange#

onChange(evt: ChangeEvent‹HTMLInputElement›): void

-

Defined in src/renderer/components/checkbox/checkbox.tsx:19

+

Defined in src/renderer/components/checkbox/checkbox.tsx:19

Parameters:

@@ -1295,7 +1295,7 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/checkbox/checkbox.tsx:31

+

Defined in src/renderer/components/checkbox/checkbox.tsx:31

Returns: Element‹›


Optional shouldComponentUpdate#

diff --git a/master/extensions/api/classes/_renderer_api_components_.confirmdialog/index.html b/master/extensions/api/classes/_renderer_api_components_.confirmdialog/index.html index 55ef4c65bd..22c420743c 100644 --- a/master/extensions/api/classes/_renderer_api_components_.confirmdialog/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.confirmdialog/index.html @@ -1315,7 +1315,7 @@ Should be used with type annotation or static contextType.


isSaving#

isSaving: boolean = false

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:30

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:30


props#

props: Readonly‹ConfirmDialogProps› & Readonly‹object›

@@ -1359,15 +1359,15 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static isOpen#

isOpen: boolean = false

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:27

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:27


Static params#

params: ConfirmDialogParams

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:28

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:28

Accessors#

params#

get params(): ConfirmDialogParams

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:48

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:48

Returns: ConfirmDialogParams

Methods#

Optional UNSAFE_componentWillMount#

@@ -1458,7 +1458,7 @@ prevents this from being invoked.


close#

close(): void

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:66

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:66

Returns: void


Optional componentDidCatch#

@@ -1658,18 +1658,18 @@ lifecycle events from running.


ok#

ok(): Promise‹void›

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:52

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:52

Returns: Promise‹void›


onClose#

onClose(): void

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:62

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:62

Returns: void


render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:70

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:70

Returns: Element‹›


setState#

@@ -1721,12 +1721,12 @@ and componentDidUpdate will not be called.


Static close#

close(): void

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:37

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:37

Returns: void


Static open#

open(params: ConfirmDialogParams): void

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:32

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:32

Parameters:

@@ -1746,19 +1746,19 @@ and componentDidUpdate will not be called.

Object literals#

defaultParams#

defaultParams: object#

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:41

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:41

icon#

icon: Element‹› =

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:45

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:45

labelCancel#

labelCancel: Element‹› = Cancel

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:44

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:44

labelOk#

labelOk: Element‹› = Ok

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:43

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:43

ok#

ok: any = noop

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:42

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:42

diff --git a/master/extensions/api/classes/_renderer_api_components_.cubespinner/index.html b/master/extensions/api/classes/_renderer_api_components_.cubespinner/index.html index 7cdd2e9ed0..05a1c01540 100644 --- a/master/extensions/api/classes/_renderer_api_components_.cubespinner/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.cubespinner/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/spinner/cube-spinner.tsx:11

+

Defined in src/renderer/components/spinner/cube-spinner.tsx:11

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.dialog/index.html b/master/extensions/api/classes/_renderer_api_components_.dialog/index.html index dcbb870923..ad29400bd3 100644 --- a/master/extensions/api/classes/_renderer_api_components_.dialog/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.dialog/index.html @@ -1223,16 +1223,16 @@

Properties#

closeOnNavigate#

closeOnNavigate: IReactionDisposer = reaction(() => navigation.getPath(), () => this.close())

-

Defined in src/renderer/components/dialog/dialog.tsx:45

+

Defined in src/renderer/components/dialog/dialog.tsx:45

Accessors#

elem#

get elem(): HTMLElement

-

Defined in src/renderer/components/dialog/dialog.tsx:51

+

Defined in src/renderer/components/dialog/dialog.tsx:51

Returns: HTMLElement


isOpen#

get isOpen(): boolean

-

Defined in src/renderer/components/dialog/dialog.tsx:56

+

Defined in src/renderer/components/dialog/dialog.tsx:56

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1323,7 +1323,7 @@ prevents this from being invoked.


close#

close(): void

-

Defined in src/renderer/components/dialog/dialog.tsx:87

+

Defined in src/renderer/components/dialog/dialog.tsx:87

Returns: void


Optional componentDidCatch#

@@ -1356,13 +1356,13 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/dialog/dialog.tsx:60

+

Defined in src/renderer/components/dialog/dialog.tsx:60

Returns: void


componentDidUpdate#

componentDidUpdate(prevProps: DialogProps): void

Overrides PageLayout.componentDidUpdate

-

Defined in src/renderer/components/dialog/dialog.tsx:64

+

Defined in src/renderer/components/dialog/dialog.tsx:64

Parameters:

@@ -1430,7 +1430,7 @@ prevents this from being invoked.

componentWillUnmount#

componentWillUnmount(): void

Overrides WizardLayout.componentWillUnmount

-

Defined in src/renderer/components/dialog/dialog.tsx:72

+

Defined in src/renderer/components/dialog/dialog.tsx:72

Returns: void


Optional componentWillUpdate#

@@ -1501,7 +1501,7 @@ lifecycle events from running.


onClickOutside#

onClickOutside(evt: MouseEvent): void

-

Defined in src/renderer/components/dialog/dialog.tsx:121

+

Defined in src/renderer/components/dialog/dialog.tsx:121

Parameters:

@@ -1521,12 +1521,12 @@ lifecycle events from running.


onClose#

onClose(): void

-

Defined in src/renderer/components/dialog/dialog.tsx:103

+

Defined in src/renderer/components/dialog/dialog.tsx:103

Returns: void


onEscapeKey#

onEscapeKey(evt: KeyboardEvent): void

-

Defined in src/renderer/components/dialog/dialog.tsx:112

+

Defined in src/renderer/components/dialog/dialog.tsx:112

Parameters:

@@ -1546,17 +1546,17 @@ lifecycle events from running.


onOpen#

onOpen(): void

-

Defined in src/renderer/components/dialog/dialog.tsx:93

+

Defined in src/renderer/components/dialog/dialog.tsx:93

Returns: void


open#

open(): void

-

Defined in src/renderer/components/dialog/dialog.tsx:81

+

Defined in src/renderer/components/dialog/dialog.tsx:81

Returns: void


render#

render(): ReactPortal‹›

-

Defined in src/renderer/components/dialog/dialog.tsx:130

+

Defined in src/renderer/components/dialog/dialog.tsx:130

Returns: ReactPortal‹›


Optional shouldComponentUpdate#

@@ -1596,7 +1596,7 @@ and componentDidUpdate will not be called.


toggle#

toggle(isOpen: boolean): void

-

Defined in src/renderer/components/dialog/dialog.tsx:76

+

Defined in src/renderer/components/dialog/dialog.tsx:76

Parameters:

@@ -1616,38 +1616,38 @@ and componentDidUpdate will not be called.

Object literals#

state#

state: object#

-

Defined in src/renderer/components/dialog/dialog.tsx:47

+

Defined in src/renderer/components/dialog/dialog.tsx:47

isOpen#

isOpen: boolean = this.props.isOpen

-

Defined in src/renderer/components/dialog/dialog.tsx:48

+

Defined in src/renderer/components/dialog/dialog.tsx:48


Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/dialog/dialog.tsx:33

+

Defined in src/renderer/components/dialog/dialog.tsx:33

animated#

animated: true = true

-

Defined in src/renderer/components/dialog/dialog.tsx:40

+

Defined in src/renderer/components/dialog/dialog.tsx:40

close#

close: any = noop

-

Defined in src/renderer/components/dialog/dialog.tsx:36

+

Defined in src/renderer/components/dialog/dialog.tsx:36

isOpen#

isOpen: false = false

-

Defined in src/renderer/components/dialog/dialog.tsx:34

+

Defined in src/renderer/components/dialog/dialog.tsx:34

modal: true = true

-

Defined in src/renderer/components/dialog/dialog.tsx:39

+

Defined in src/renderer/components/dialog/dialog.tsx:39

onClose#

onClose: any = noop

-

Defined in src/renderer/components/dialog/dialog.tsx:38

+

Defined in src/renderer/components/dialog/dialog.tsx:38

onOpen#

onOpen: any = noop

-

Defined in src/renderer/components/dialog/dialog.tsx:37

+

Defined in src/renderer/components/dialog/dialog.tsx:37

open#

open: any = noop

-

Defined in src/renderer/components/dialog/dialog.tsx:35

+

Defined in src/renderer/components/dialog/dialog.tsx:35

pinned#

pinned: false = false

-

Defined in src/renderer/components/dialog/dialog.tsx:41

+

Defined in src/renderer/components/dialog/dialog.tsx:41

diff --git a/master/extensions/api/classes/_renderer_api_components_.drawer/index.html b/master/extensions/api/classes/_renderer_api_components_.drawer/index.html index 62f3fa267b..781e331805 100644 --- a/master/extensions/api/classes/_renderer_api_components_.drawer/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.drawer/index.html @@ -1250,7 +1250,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static defaultProps#

defaultProps: object = defaultProps as object

-

Defined in src/renderer/components/drawer/drawer.tsx:31

+

Defined in src/renderer/components/drawer/drawer.tsx:31

Methods#

Optional UNSAFE_componentWillMount#

UNSAFE_componentWillMount(): void

@@ -1340,7 +1340,7 @@ prevents this from being invoked.


close#

close(): void

-

Defined in src/renderer/components/drawer/drawer.tsx:101

+

Defined in src/renderer/components/drawer/drawer.tsx:101

Returns: void


Optional componentDidCatch#

@@ -1373,7 +1373,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/drawer/drawer.tsx:42

+

Defined in src/renderer/components/drawer/drawer.tsx:42

Returns: void


Optional componentDidUpdate#

@@ -1457,7 +1457,7 @@ prevents this from being invoked.

componentWillUnmount#

componentWillUnmount(): void

Overrides WizardLayout.componentWillUnmount

-

Defined in src/renderer/components/drawer/drawer.tsx:49

+

Defined in src/renderer/components/drawer/drawer.tsx:49

Returns: void


Optional componentWillUpdate#

@@ -1537,7 +1537,7 @@ lifecycle events from running.


onClickOutside#

onClickOutside(evt: MouseEvent): void

-

Defined in src/renderer/components/drawer/drawer.tsx:80

+

Defined in src/renderer/components/drawer/drawer.tsx:80

Parameters:

@@ -1557,7 +1557,7 @@ lifecycle events from running.


onEscapeKey#

onEscapeKey(evt: KeyboardEvent): void

-

Defined in src/renderer/components/drawer/drawer.tsx:70

+

Defined in src/renderer/components/drawer/drawer.tsx:70

Parameters:

@@ -1577,7 +1577,7 @@ lifecycle events from running.


onMouseDown#

onMouseDown(evt: MouseEvent): void

-

Defined in src/renderer/components/drawer/drawer.tsx:95

+

Defined in src/renderer/components/drawer/drawer.tsx:95

Parameters:

@@ -1598,17 +1598,17 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/drawer/drawer.tsx:107

+

Defined in src/renderer/components/drawer/drawer.tsx:107

Returns: Element‹›


restoreScrollPos#

restoreScrollPos(): void

-

Defined in src/renderer/components/drawer/drawer.tsx:63

+

Defined in src/renderer/components/drawer/drawer.tsx:63

Returns: void


saveScrollPos#

saveScrollPos(): void

-

Defined in src/renderer/components/drawer/drawer.tsx:56

+

Defined in src/renderer/components/drawer/drawer.tsx:56

Returns: void


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.draweritem/index.html b/master/extensions/api/classes/_renderer_api_components_.draweritem/index.html index 8704d8acdf..472f4f86a3 100644 --- a/master/extensions/api/classes/_renderer_api_components_.draweritem/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.draweritem/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/drawer/drawer-item.tsx:15

+

Defined in src/renderer/components/drawer/drawer-item.tsx:15

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.drawerparamtoggler/index.html b/master/extensions/api/classes/_renderer_api_components_.drawerparamtoggler/index.html index 2be44120d2..636ab80458 100644 --- a/master/extensions/api/classes/_renderer_api_components_.drawerparamtoggler/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.drawerparamtoggler/index.html @@ -1177,7 +1177,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

state#

state: State

Overrides PageLayout.state

-

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:16

+

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:16


Static Optional contextType#

contextType? : Context‹any›

@@ -1482,7 +1482,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:22

+

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:22

Returns: Element‹›


setState#

@@ -1534,7 +1534,7 @@ and componentDidUpdate will not be called.


toggle#

toggle(): void

-

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:18

+

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:18

Returns: void

diff --git a/master/extensions/api/classes/_renderer_api_components_.drawertitle/index.html b/master/extensions/api/classes/_renderer_api_components_.drawertitle/index.html index bfad300223..e63c579015 100644 --- a/master/extensions/api/classes/_renderer_api_components_.drawertitle/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.drawertitle/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/drawer/drawer-title.tsx:11

+

Defined in src/renderer/components/drawer/drawer-title.tsx:11

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.icon/index.html b/master/extensions/api/classes/_renderer_api_components_.icon/index.html index 15a6cc60e1..252d6cdea2 100644 --- a/master/extensions/api/classes/_renderer_api_components_.icon/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.icon/index.html @@ -1074,7 +1074,7 @@

Accessors#

isInteractive#

get isInteractive(): boolean

-

Defined in src/renderer/components/icon/icon.tsx:33

+

Defined in src/renderer/components/icon/icon.tsx:33

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1351,7 +1351,7 @@ lifecycle events from running.


onClick#

onClick(evt: MouseEvent): void

-

Defined in src/renderer/components/icon/icon.tsx:40

+

Defined in src/renderer/components/icon/icon.tsx:40

Parameters:

@@ -1371,7 +1371,7 @@ lifecycle events from running.


onKeyDown#

onKeyDown(evt: KeyboardEvent‹any›): void

-

Defined in src/renderer/components/icon/icon.tsx:51

+

Defined in src/renderer/components/icon/icon.tsx:51

Parameters:

@@ -1391,7 +1391,7 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/icon/icon.tsx:70

+

Defined in src/renderer/components/icon/icon.tsx:70

Returns: Element‹›


Optional shouldComponentUpdate#

@@ -1431,10 +1431,10 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/icon/icon.tsx:29

+

Defined in src/renderer/components/icon/icon.tsx:29

focusable#

focusable: true = true

-

Defined in src/renderer/components/icon/icon.tsx:30

+

Defined in src/renderer/components/icon/icon.tsx:30

diff --git a/master/extensions/api/classes/_renderer_api_components_.input/index.html b/master/extensions/api/classes/_renderer_api_components_.input/index.html index 883074c43e..38b164564b 100644 --- a/master/extensions/api/classes/_renderer_api_components_.input/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.input/index.html @@ -1378,7 +1378,7 @@ Should be used with type annotation or static contextType.


input#

input: InputElement

-

Defined in src/renderer/components/input/input.tsx:58

+

Defined in src/renderer/components/input/input.tsx:58


props#

props: Readonly‹InputProps› & Readonly‹object›

@@ -1398,7 +1398,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


validators#

validators: InputValidator[] = []

-

Defined in src/renderer/components/input/input.tsx:59

+

Defined in src/renderer/components/input/input.tsx:59


Static Optional contextType#

contextType? : Context‹any›

@@ -1421,16 +1421,16 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static defaultProps#

defaultProps: object = defaultProps as object

-

Defined in src/renderer/components/input/input.tsx:56

+

Defined in src/renderer/components/input/input.tsx:56

Accessors#

isUncontrolled#

get isUncontrolled(): boolean

-

Defined in src/renderer/components/input/input.tsx:258

+

Defined in src/renderer/components/input/input.tsx:258

Returns: boolean


showMaxLenIndicator#

get showMaxLenIndicator(): boolean

-

Defined in src/renderer/components/input/input.tsx:252

+

Defined in src/renderer/components/input/input.tsx:252

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1521,7 +1521,7 @@ prevents this from being invoked.


bindRef#

bindRef(elem: InputElement): void

-

Defined in src/renderer/components/input/input.tsx:285

+

Defined in src/renderer/components/input/input.tsx:285

Parameters:

@@ -1541,7 +1541,7 @@ prevents this from being invoked.


blur#

blur(): void

-

Defined in src/renderer/components/input/input.tsx:95

+

Defined in src/renderer/components/input/input.tsx:95

Returns: void


Optional componentDidCatch#

@@ -1574,13 +1574,13 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/input/input.tsx:262

+

Defined in src/renderer/components/input/input.tsx:262

Returns: void


componentDidUpdate#

componentDidUpdate(prevProps: InputProps): void

Overrides PageLayout.componentDidUpdate

-

Defined in src/renderer/components/input/input.tsx:267

+

Defined in src/renderer/components/input/input.tsx:267

Parameters:

@@ -1691,7 +1691,7 @@ prevents this from being invoked.


focus#

focus(): void

-

Defined in src/renderer/components/input/input.tsx:91

+

Defined in src/renderer/components/input/input.tsx:91

Returns: void


forceUpdate#

@@ -1735,17 +1735,17 @@ lifecycle events from running.


getValue#

getValue(): string

-

Defined in src/renderer/components/input/input.tsx:82

+

Defined in src/renderer/components/input/input.tsx:82

Returns: string


isValid#

isValid(): boolean

-

Defined in src/renderer/components/input/input.tsx:67

+

Defined in src/renderer/components/input/input.tsx:67

Returns: boolean


onBlur#

onBlur(evt: FocusEvent‹InputElement›): void

-

Defined in src/renderer/components/input/input.tsx:208

+

Defined in src/renderer/components/input/input.tsx:208

Parameters:

@@ -1765,7 +1765,7 @@ lifecycle events from running.


onChange#

onChange(evt: ChangeEvent‹any›): void

-

Defined in src/renderer/components/input/input.tsx:217

+

Defined in src/renderer/components/input/input.tsx:217

Parameters:

@@ -1785,7 +1785,7 @@ lifecycle events from running.


onFocus#

onFocus(evt: FocusEvent‹InputElement›): void

-

Defined in src/renderer/components/input/input.tsx:199

+

Defined in src/renderer/components/input/input.tsx:199

Parameters:

@@ -1805,7 +1805,7 @@ lifecycle events from running.


onKeyDown#

onKeyDown(evt: KeyboardEvent‹any›): void

-

Defined in src/renderer/components/input/input.tsx:236

+

Defined in src/renderer/components/input/input.tsx:236

Parameters:

@@ -1826,17 +1826,17 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/input/input.tsx:289

+

Defined in src/renderer/components/input/input.tsx:289

Returns: Element‹›


select#

select(): void

-

Defined in src/renderer/components/input/input.tsx:99

+

Defined in src/renderer/components/input/input.tsx:99

Returns: void


setDirty#

setDirty(dirty: boolean): void

-

Defined in src/renderer/components/input/input.tsx:193

+

Defined in src/renderer/components/input/input.tsx:193

Parameters:

@@ -1870,7 +1870,7 @@ lifecycle events from running.


setValidation#

setValidation(errors: React.ReactNode[]): void

-

Defined in src/renderer/components/input/input.tsx:163

+

Defined in src/renderer/components/input/input.tsx:163

Parameters:

@@ -1890,7 +1890,7 @@ lifecycle events from running.


setValue#

setValue(value: string): void

-

Defined in src/renderer/components/input/input.tsx:71

+

Defined in src/renderer/components/input/input.tsx:71

Parameters:

@@ -1945,7 +1945,7 @@ and componentDidUpdate will not be called.


validate#

validate(value: string): Promise‹void›

-

Defined in src/renderer/components/input/input.tsx:119

+

Defined in src/renderer/components/input/input.tsx:119

Parameters:

@@ -1968,16 +1968,16 @@ and componentDidUpdate will not be called.

state#

state: object#

Overrides PageLayout.state

-

Defined in src/renderer/components/input/input.tsx:61

+

Defined in src/renderer/components/input/input.tsx:61

dirty#

dirty: boolean = !!this.props.dirty

-

Defined in src/renderer/components/input/input.tsx:62

+

Defined in src/renderer/components/input/input.tsx:62

errors#

errors: undefined[] = []

-

Defined in src/renderer/components/input/input.tsx:64

+

Defined in src/renderer/components/input/input.tsx:64

valid#

valid: true = true

-

Defined in src/renderer/components/input/input.tsx:63

+

Defined in src/renderer/components/input/input.tsx:63

diff --git a/master/extensions/api/classes/_renderer_api_components_.kubeeventdetails/index.html b/master/extensions/api/classes/_renderer_api_components_.kubeeventdetails/index.html index fe7c493479..f6a9a7b17b 100644 --- a/master/extensions/api/classes/_renderer_api_components_.kubeeventdetails/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.kubeeventdetails/index.html @@ -1308,7 +1308,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): Promise‹void›

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/+events/kube-event-details.tsx:17

+

Defined in src/renderer/components/+events/kube-event-details.tsx:17

Returns: Promise‹void›


Optional componentDidUpdate#

@@ -1475,7 +1475,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/+events/kube-event-details.tsx:21

+

Defined in src/renderer/components/+events/kube-event-details.tsx:21

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.kubeobjectdetails/index.html b/master/extensions/api/classes/_renderer_api_components_.kubeobjectdetails/index.html index cb767368b7..6011e82cb1 100644 --- a/master/extensions/api/classes/_renderer_api_components_.kubeobjectdetails/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.kubeobjectdetails/index.html @@ -1227,7 +1227,7 @@ Should be used with type annotation or static contextType.


isLoading#

isLoading: boolean = false

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:24

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:24


loader#

loader: IReactionDisposer = reaction(() => [ @@ -1254,11 +1254,11 @@ Should be used with type annotation or static contextType.

}

})

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:44

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:44


loadingError#

loadingError: React.ReactNode

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:25

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:25


props#

props: Readonly‹P› & Readonly‹object›

@@ -1302,17 +1302,17 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

isCrdInstance#

get isCrdInstance(): boolean

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:39

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:39

Returns: boolean


object#

get object(): any

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:31

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:31

Returns: any


path#

get path(): string

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:27

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:27

Returns: string

Methods#

Optional UNSAFE_componentWillMount#

@@ -1599,7 +1599,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:69

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:69

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.kubeobjectlistlayout/index.html b/master/extensions/api/classes/_renderer_api_components_.kubeobjectlistlayout/index.html index 773c291f03..7ac576358b 100644 --- a/master/extensions/api/classes/_renderer_api_components_.kubeobjectlistlayout/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.kubeobjectlistlayout/index.html @@ -1233,7 +1233,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

selectedItem#

get selectedItem(): any

-

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:17

+

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:17

Returns: any

Methods#

Optional UNSAFE_componentWillMount#

@@ -1519,7 +1519,7 @@ lifecycle events from running.


onDetails#

onDetails(item: KubeObject): void

-

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:21

+

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:21

Parameters:

@@ -1540,7 +1540,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:30

+

Defined in src/renderer/components/kube-object/kube-object-list-layout.tsx:30

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.kubeobjectmenu/index.html b/master/extensions/api/classes/_renderer_api_components_.kubeobjectmenu/index.html index 0ef05e72ec..8d7906c287 100644 --- a/master/extensions/api/classes/_renderer_api_components_.kubeobjectmenu/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.kubeobjectmenu/index.html @@ -1265,17 +1265,17 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

isEditable#

get isEditable(): boolean

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:26

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:26

Returns: boolean


isRemovable#

get isRemovable(): boolean

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:32

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:32

Returns: boolean


store#

get store(): KubeObjectStore‹any›

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:18

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:18

Returns: KubeObjectStore‹any›

Methods#

Optional UNSAFE_componentWillMount#

@@ -1561,18 +1561,18 @@ lifecycle events from running.


remove#

remove(): Promise‹void›

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:45

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:45

Returns: Promise‹void›


render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:64

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:64

Returns: Element‹›


renderRemoveMessage#

renderRemoveMessage(): Element‹›

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:54

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:54

Returns: Element‹›


setState#

@@ -1624,7 +1624,7 @@ and componentDidUpdate will not be called.


update#

update(): Promise‹void›

-

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:39

+

Defined in src/renderer/components/kube-object/kube-object-menu.tsx:39

Returns: Promise‹void›

diff --git a/master/extensions/api/classes/_renderer_api_components_.kubeobjectmeta/index.html b/master/extensions/api/classes/_renderer_api_components_.kubeobjectmeta/index.html index b4e9e701c7..aa6ac205f5 100644 --- a/master/extensions/api/classes/_renderer_api_components_.kubeobjectmeta/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.kubeobjectmeta/index.html @@ -1212,7 +1212,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

defaultHiddenFields: IKubeMetaField[] = [ "uid", "resourceVersion", "selfLink" ]

-

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:16

+

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:16

Methods#

Optional UNSAFE_componentWillMount#

UNSAFE_componentWillMount(): void

@@ -1497,7 +1497,7 @@ lifecycle events from running.


isHidden#

isHidden(field: IKubeMetaField): boolean

-

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:20

+

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:20

Parameters:

@@ -1518,7 +1518,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:26

+

Defined in src/renderer/components/kube-object/kube-object-meta.tsx:26

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.lineprogress/index.html b/master/extensions/api/classes/_renderer_api_components_.lineprogress/index.html index f574469e1a..e5f536d852 100644 --- a/master/extensions/api/classes/_renderer_api_components_.lineprogress/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.lineprogress/index.html @@ -1320,7 +1320,7 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/line-progress/line-progress.tsx:23

+

Defined in src/renderer/components/line-progress/line-progress.tsx:23

Returns: Element‹›


Optional shouldComponentUpdate#

@@ -1360,19 +1360,19 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/line-progress/line-progress.tsx:16

+

Defined in src/renderer/components/line-progress/line-progress.tsx:16

max#

max: number = 100

-

Defined in src/renderer/components/line-progress/line-progress.tsx:19

+

Defined in src/renderer/components/line-progress/line-progress.tsx:19

min#

min: number = 0

-

Defined in src/renderer/components/line-progress/line-progress.tsx:18

+

Defined in src/renderer/components/line-progress/line-progress.tsx:18

precise#

precise: number = 2

-

Defined in src/renderer/components/line-progress/line-progress.tsx:20

+

Defined in src/renderer/components/line-progress/line-progress.tsx:20

value#

value: number = 0

-

Defined in src/renderer/components/line-progress/line-progress.tsx:17

+

Defined in src/renderer/components/line-progress/line-progress.tsx:17

diff --git a/master/extensions/api/classes/_renderer_api_components_.menu/index.html b/master/extensions/api/classes/_renderer_api_components_.menu/index.html index 673daecf61..0475eda632 100644 --- a/master/extensions/api/classes/_renderer_api_components_.menu/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.menu/index.html @@ -1319,11 +1319,11 @@ Should be used with type annotation or static contextType.


elem#

elem: HTMLUListElement

-

Defined in src/renderer/components/menu/menu.tsx:54

+

Defined in src/renderer/components/menu/menu.tsx:54


Protected items#

items: object

-

Defined in src/renderer/components/menu/menu.tsx:55

+

Defined in src/renderer/components/menu/menu.tsx:55

Type declaration:

@@ -1543,7 +1543,7 @@ prevents this from being invoked.


Protected bindRef#

bindRef(elem: HTMLUListElement): void

-

Defined in src/renderer/components/menu/menu.tsx:228

+

Defined in src/renderer/components/menu/menu.tsx:228

Parameters:

@@ -1563,7 +1563,7 @@ prevents this from being invoked.


close#

close(): void

-

Defined in src/renderer/components/menu/menu.tsx:165

+

Defined in src/renderer/components/menu/menu.tsx:165

Returns: void


Optional componentDidCatch#

@@ -1596,7 +1596,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/menu/menu.tsx:63

+

Defined in src/renderer/components/menu/menu.tsx:63

Returns: void


Optional componentDidUpdate#

@@ -1680,7 +1680,7 @@ prevents this from being invoked.

componentWillUnmount#

componentWillUnmount(): void

Overrides WizardLayout.componentWillUnmount

-

Defined in src/renderer/components/menu/menu.tsx:84

+

Defined in src/renderer/components/menu/menu.tsx:84

Returns: void


Optional componentWillUpdate#

@@ -1721,7 +1721,7 @@ prevents this from being invoked.


Protected focusNextItem#

focusNextItem(reverse: boolean): void

-

Defined in src/renderer/components/menu/menu.tsx:103

+

Defined in src/renderer/components/menu/menu.tsx:103

Parameters:

@@ -1782,7 +1782,7 @@ lifecycle events from running.


onClickOutside#

onClickOutside(evt: MouseEvent): void

-

Defined in src/renderer/components/menu/menu.tsx:216

+

Defined in src/renderer/components/menu/menu.tsx:216

Parameters:

@@ -1802,7 +1802,7 @@ lifecycle events from running.


onKeyDown#

onKeyDown(evt: KeyboardEvent): void

-

Defined in src/renderer/components/menu/menu.tsx:174

+

Defined in src/renderer/components/menu/menu.tsx:174

Parameters:

@@ -1822,7 +1822,7 @@ lifecycle events from running.


onScrollOutside#

onScrollOutside(evt: UIEvent): void

-

Defined in src/renderer/components/menu/menu.tsx:206

+

Defined in src/renderer/components/menu/menu.tsx:206

Parameters:

@@ -1842,18 +1842,18 @@ lifecycle events from running.


onWindowResize#

onWindowResize(): void

-

Defined in src/renderer/components/menu/menu.tsx:201

+

Defined in src/renderer/components/menu/menu.tsx:201

Returns: void


open#

open(): void

-

Defined in src/renderer/components/menu/menu.tsx:158

+

Defined in src/renderer/components/menu/menu.tsx:158

Returns: void


render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/menu/menu.tsx:236

+

Defined in src/renderer/components/menu/menu.tsx:236

Returns: Element‹›


setState#

@@ -1905,7 +1905,7 @@ and componentDidUpdate will not be called.


toggle#

toggle(): void

-

Defined in src/renderer/components/menu/menu.tsx:170

+

Defined in src/renderer/components/menu/menu.tsx:170

Returns: void

diff --git a/master/extensions/api/classes/_renderer_api_components_.menuactions/index.html b/master/extensions/api/classes/_renderer_api_components_.menuactions/index.html index cba2370efa..12e1f3c64c 100644 --- a/master/extensions/api/classes/_renderer_api_components_.menuactions/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.menuactions/index.html @@ -1239,11 +1239,11 @@ Should be used with type annotation or static contextType.


id#

id: string = uniqueId("menu_actions_")

-

Defined in src/renderer/components/menu/menu-actions.tsx:32

+

Defined in src/renderer/components/menu/menu-actions.tsx:32


isOpen#

isOpen: boolean = !!this.props.toolbar

-

Defined in src/renderer/components/menu/menu-actions.tsx:34

+

Defined in src/renderer/components/menu/menu-actions.tsx:34


props#

props: Readonly‹MenuActionsProps› & Readonly‹object›

@@ -1568,18 +1568,18 @@ lifecycle events from running.


remove#

remove(): void

-

Defined in src/renderer/components/menu/menu-actions.tsx:42

+

Defined in src/renderer/components/menu/menu-actions.tsx:42

Returns: void


render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/menu/menu-actions.tsx:83

+

Defined in src/renderer/components/menu/menu-actions.tsx:83

Returns: Element‹›


renderTriggerIcon#

renderTriggerIcon(): Element‹›

-

Defined in src/renderer/components/menu/menu-actions.tsx:56

+

Defined in src/renderer/components/menu/menu-actions.tsx:56

Returns: Element‹›


setState#

@@ -1631,15 +1631,15 @@ and componentDidUpdate will not be called.


toggle#

toggle(): void

-

Defined in src/renderer/components/menu/menu-actions.tsx:36

+

Defined in src/renderer/components/menu/menu-actions.tsx:36

Returns: void

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/menu/menu-actions.tsx:26

+

Defined in src/renderer/components/menu/menu-actions.tsx:26

removeConfirmationMessage#

removeConfirmationMessage:

-

Defined in src/renderer/components/menu/menu-actions.tsx:27

+

Defined in src/renderer/components/menu/menu-actions.tsx:27

diff --git a/master/extensions/api/classes/_renderer_api_components_.menuitem/index.html b/master/extensions/api/classes/_renderer_api_components_.menuitem/index.html index 0703da1c69..61e1d32d43 100644 --- a/master/extensions/api/classes/_renderer_api_components_.menuitem/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.menuitem/index.html @@ -1211,11 +1211,11 @@

context#

context: MenuContextValue

Overrides PageLayout.context

-

Defined in src/renderer/components/menu/menu.tsx:307

+

Defined in src/renderer/components/menu/menu.tsx:307


elem#

elem: HTMLElement

-

Defined in src/renderer/components/menu/menu.tsx:308

+

Defined in src/renderer/components/menu/menu.tsx:308


props#

props: Readonly‹MenuItemProps› & Readonly‹object›

@@ -1241,20 +1241,20 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Static contextType#

contextType: Context‹Menu‹›› = MenuContext

Overrides PageLayout.contextType

-

Defined in src/renderer/components/menu/menu.tsx:305

+

Defined in src/renderer/components/menu/menu.tsx:305


Static defaultProps#

defaultProps: object = defaultPropsMenuItem as object

-

Defined in src/renderer/components/menu/menu.tsx:304

+

Defined in src/renderer/components/menu/menu.tsx:304

Accessors#

isFocusable#

get isFocusable(): boolean

-

Defined in src/renderer/components/menu/menu.tsx:310

+

Defined in src/renderer/components/menu/menu.tsx:310

Returns: boolean


get isLink(): boolean

-

Defined in src/renderer/components/menu/menu.tsx:316

+

Defined in src/renderer/components/menu/menu.tsx:316

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1345,7 +1345,7 @@ prevents this from being invoked.


Protected bindRef#

bindRef(elem: HTMLElement): void

-

Defined in src/renderer/components/menu/menu.tsx:332

+

Defined in src/renderer/components/menu/menu.tsx:332

Parameters:

@@ -1560,7 +1560,7 @@ lifecycle events from running.


onClick#

onClick(evt: MouseEvent): void

-

Defined in src/renderer/components/menu/menu.tsx:320

+

Defined in src/renderer/components/menu/menu.tsx:320

Parameters:

@@ -1581,7 +1581,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/menu/menu.tsx:336

+

Defined in src/renderer/components/menu/menu.tsx:336

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.notifications/index.html b/master/extensions/api/classes/_renderer_api_components_.notifications/index.html index 5e6d8ad559..48554a8f9a 100644 --- a/master/extensions/api/classes/_renderer_api_components_.notifications/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.notifications/index.html @@ -1204,7 +1204,7 @@ Should be used with type annotation or static contextType.


elem#

elem: HTMLElement

-

Defined in src/renderer/components/notifications/notifications.tsx:14

+

Defined in src/renderer/components/notifications/notifications.tsx:14


props#

props: Readonly‹P› & Readonly‹object›

@@ -1362,7 +1362,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/notifications/notifications.tsx:41

+

Defined in src/renderer/components/notifications/notifications.tsx:41

Returns: void


Optional componentDidUpdate#

@@ -1498,7 +1498,7 @@ prevents this from being invoked.


getMessage#

getMessage(notification: Notification): (string | number | object | ReactElement‹any, string | function | object› | ReactNodeArray‹› | ReactPortal‹›)[]

-

Defined in src/renderer/components/notifications/notifications.tsx:59

+

Defined in src/renderer/components/notifications/notifications.tsx:59

Parameters:

@@ -1549,12 +1549,12 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/notifications/notifications.tsx:69

+

Defined in src/renderer/components/notifications/notifications.tsx:69

Returns: Element‹›


scrollToLastNotification#

scrollToLastNotification(): void

-

Defined in src/renderer/components/notifications/notifications.tsx:49

+

Defined in src/renderer/components/notifications/notifications.tsx:49

Returns: void


setState#

@@ -1606,7 +1606,7 @@ and componentDidUpdate will not be called.


Static error#

error(message: NotificationMessage): void

-

Defined in src/renderer/components/notifications/notifications.tsx:24

+

Defined in src/renderer/components/notifications/notifications.tsx:24

Parameters:

@@ -1626,7 +1626,7 @@ and componentDidUpdate will not be called.


Static info#

info(message: NotificationMessage, customOpts: Partial‹Notification›): function

-

Defined in src/renderer/components/notifications/notifications.tsx:32

+

Defined in src/renderer/components/notifications/notifications.tsx:32

Parameters:

@@ -1654,7 +1654,7 @@ and componentDidUpdate will not be called.


Static ok#

ok(message: NotificationMessage): void

-

Defined in src/renderer/components/notifications/notifications.tsx:16

+

Defined in src/renderer/components/notifications/notifications.tsx:16

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_components_.notificationsstore/index.html b/master/extensions/api/classes/_renderer_api_components_.notificationsstore/index.html index c8da67387a..dff2966cd8 100644 --- a/master/extensions/api/classes/_renderer_api_components_.notificationsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.notificationsstore/index.html @@ -946,15 +946,15 @@

Properties#

Protected autoHideTimers#

autoHideTimers: Map‹string | number, number› = new Map()

-

Defined in src/renderer/components/notifications/notifications.store.ts:27

+

Defined in src/renderer/components/notifications/notifications.store.ts:27


notifications#

notifications: IObservableArray‹Notification = observable.array([], { deep: false })

-

Defined in src/renderer/components/notifications/notifications.store.ts:25

+

Defined in src/renderer/components/notifications/notifications.store.ts:25

Methods#

add#

add(notification: Notification): function

-

Defined in src/renderer/components/notifications/notifications.store.ts:54

+

Defined in src/renderer/components/notifications/notifications.store.ts:54

Parameters:

@@ -975,7 +975,7 @@

addAutoHideTimer#

addAutoHideTimer(id: NotificationId): void

-

Defined in src/renderer/components/notifications/notifications.store.ts:33

+

Defined in src/renderer/components/notifications/notifications.store.ts:33

Parameters:

@@ -995,7 +995,7 @@

getById#

getById(id: NotificationId): Notification | null

-

Defined in src/renderer/components/notifications/notifications.store.ts:29

+

Defined in src/renderer/components/notifications/notifications.store.ts:29

Parameters:

@@ -1015,7 +1015,7 @@

remove#

remove(id: NotificationId): void

-

Defined in src/renderer/components/notifications/notifications.store.ts:71

+

Defined in src/renderer/components/notifications/notifications.store.ts:71

Parameters:

@@ -1035,7 +1035,7 @@

removeAutoHideTimer#

removeAutoHideTimer(id: NotificationId): void

-

Defined in src/renderer/components/notifications/notifications.store.ts:46

+

Defined in src/renderer/components/notifications/notifications.store.ts:46

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_components_.pagelayout/index.html b/master/extensions/api/classes/_renderer_api_components_.pagelayout/index.html index d45b557c67..1bd70ec93d 100644 --- a/master/extensions/api/classes/_renderer_api_components_.pagelayout/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.pagelayout/index.html @@ -1218,7 +1218,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static defaultProps#

defaultProps: object = defaultProps as object

-

Defined in src/renderer/components/layout/page-layout.tsx:27

+

Defined in src/renderer/components/layout/page-layout.tsx:27

Methods#

Optional UNSAFE_componentWillMount#

UNSAFE_componentWillMount(): void

@@ -1308,7 +1308,7 @@ prevents this from being invoked.


back#

back(evt?: MouseEvent | KeyboardEvent): void

-

Defined in src/renderer/components/layout/page-layout.tsx:30

+

Defined in src/renderer/components/layout/page-layout.tsx:30

Parameters:

@@ -1356,7 +1356,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): Promise‹void›

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/layout/page-layout.tsx:38

+

Defined in src/renderer/components/layout/page-layout.tsx:38

Returns: Promise‹void›


Optional componentDidUpdate#

@@ -1440,7 +1440,7 @@ prevents this from being invoked.

componentWillUnmount#

componentWillUnmount(): void

Overrides WizardLayout.componentWillUnmount

-

Defined in src/renderer/components/layout/page-layout.tsx:42

+

Defined in src/renderer/components/layout/page-layout.tsx:42

Returns: void


Optional componentWillUpdate#

@@ -1520,7 +1520,7 @@ lifecycle events from running.


onEscapeKey#

onEscapeKey(evt: KeyboardEvent): void

-

Defined in src/renderer/components/layout/page-layout.tsx:46

+

Defined in src/renderer/components/layout/page-layout.tsx:46

Parameters:

@@ -1541,7 +1541,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/layout/page-layout.tsx:57

+

Defined in src/renderer/components/layout/page-layout.tsx:57

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.radio/index.html b/master/extensions/api/classes/_renderer_api_components_.radio/index.html index 6f86909be5..d2af6a5b7a 100644 --- a/master/extensions/api/classes/_renderer_api_components_.radio/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.radio/index.html @@ -1491,12 +1491,12 @@ lifecycle events from running.


onChange#

onChange(): void

-

Defined in src/renderer/components/radio/radio.tsx:52

+

Defined in src/renderer/components/radio/radio.tsx:52

Returns: void


onKeyDown#

onKeyDown(e: KeyboardEvent‹any›): void

-

Defined in src/renderer/components/radio/radio.tsx:60

+

Defined in src/renderer/components/radio/radio.tsx:60

Parameters:

@@ -1517,7 +1517,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/radio/radio.tsx:70

+

Defined in src/renderer/components/radio/radio.tsx:70

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.radiogroup/index.html b/master/extensions/api/classes/_renderer_api_components_.radiogroup/index.html index 53e64d8188..b180e0e133 100644 --- a/master/extensions/api/classes/_renderer_api_components_.radiogroup/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.radiogroup/index.html @@ -1474,7 +1474,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/radio/radio.tsx:17

+

Defined in src/renderer/components/radio/radio.tsx:17

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.select/index.html b/master/extensions/api/classes/_renderer_api_components_.select/index.html index d6229cfacf..c5c5b24133 100644 --- a/master/extensions/api/classes/_renderer_api_components_.select/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.select/index.html @@ -1324,17 +1324,17 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

options#

get options(): SelectOption[]

-

Defined in src/renderer/components/select/select.tsx:71

+

Defined in src/renderer/components/select/select.tsx:71

Returns: SelectOption[]


selectedOption#

get selectedOption(): SelectOption‹any› | SelectOption‹any›[]

-

Defined in src/renderer/components/select/select.tsx:57

+

Defined in src/renderer/components/select/select.tsx:57

Returns: SelectOption‹any› | SelectOption‹any›[]


theme#

get theme(): "dark" | "light" | "outlined"

-

Defined in src/renderer/components/select/select.tsx:42

+

Defined in src/renderer/components/select/select.tsx:42

Returns: "dark" | "light" | "outlined"

Methods#

Optional UNSAFE_componentWillMount#

@@ -1620,7 +1620,7 @@ lifecycle events from running.


Protected isValidOption#

isValidOption(opt: SelectOption | any): boolean

-

Defined in src/renderer/components/select/select.tsx:53

+

Defined in src/renderer/components/select/select.tsx:53

Parameters:

@@ -1640,7 +1640,7 @@ lifecycle events from running.


onChange#

onChange(value: SelectOption, meta: ActionMeta‹any›): void

-

Defined in src/renderer/components/select/select.tsx:84

+

Defined in src/renderer/components/select/select.tsx:84

Parameters:

@@ -1664,7 +1664,7 @@ lifecycle events from running.


onKeyDown#

onKeyDown(evt: KeyboardEvent‹HTMLElement›): void

-

Defined in src/renderer/components/select/select.tsx:91

+

Defined in src/renderer/components/select/select.tsx:91

Parameters:

@@ -1685,7 +1685,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/select/select.tsx:100

+

Defined in src/renderer/components/select/select.tsx:100

Returns: Element‹›


setState#

@@ -1737,16 +1737,16 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/select/select.tsx:36

+

Defined in src/renderer/components/select/select.tsx:36

autoConvertOptions#

autoConvertOptions: true = true

-

Defined in src/renderer/components/select/select.tsx:37

+

Defined in src/renderer/components/select/select.tsx:37

menuPlacement: "auto" = "auto"

-

Defined in src/renderer/components/select/select.tsx:39

+

Defined in src/renderer/components/select/select.tsx:39

menuPortalTarget: HTMLElement = document.body

-

Defined in src/renderer/components/select/select.tsx:38

+

Defined in src/renderer/components/select/select.tsx:38

diff --git a/master/extensions/api/classes/_renderer_api_components_.slider/index.html b/master/extensions/api/classes/_renderer_api_components_.slider/index.html index 4a65b363a8..52102418ab 100644 --- a/master/extensions/api/classes/_renderer_api_components_.slider/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.slider/index.html @@ -1202,7 +1202,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static defaultProps#

defaultProps: object = defaultProps as object

-

Defined in src/renderer/components/slider/slider.tsx:21

+

Defined in src/renderer/components/slider/slider.tsx:21

Methods#

Optional UNSAFE_componentWillMount#

UNSAFE_componentWillMount(): void

@@ -1488,7 +1488,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/slider/slider.tsx:30

+

Defined in src/renderer/components/slider/slider.tsx:30

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.spinner/index.html b/master/extensions/api/classes/_renderer_api_components_.spinner/index.html index d6e36cdeb6..789bf866a2 100644 --- a/master/extensions/api/classes/_renderer_api_components_.spinner/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.spinner/index.html @@ -1526,7 +1526,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/spinner/spinner.tsx:18

+

Defined in src/renderer/components/spinner/spinner.tsx:18

Returns: Element‹›


setState#

@@ -1578,13 +1578,13 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/spinner/spinner.tsx:13

+

Defined in src/renderer/components/spinner/spinner.tsx:13

center#

center: boolean = false

-

Defined in src/renderer/components/spinner/spinner.tsx:15

+

Defined in src/renderer/components/spinner/spinner.tsx:15

singleColor#

singleColor: boolean = true

-

Defined in src/renderer/components/spinner/spinner.tsx:14

+

Defined in src/renderer/components/spinner/spinner.tsx:14

diff --git a/master/extensions/api/classes/_renderer_api_components_.statusbrick/index.html b/master/extensions/api/classes/_renderer_api_components_.statusbrick/index.html index 75c2e01614..acc2102309 100644 --- a/master/extensions/api/classes/_renderer_api_components_.statusbrick/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.statusbrick/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/status-brick/status-brick.tsx:12

+

Defined in src/renderer/components/status-brick/status-brick.tsx:12

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.stepper/index.html b/master/extensions/api/classes/_renderer_api_components_.stepper/index.html index 736225c5f8..230f9a7172 100644 --- a/master/extensions/api/classes/_renderer_api_components_.stepper/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.stepper/index.html @@ -1474,7 +1474,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/stepper/stepper.tsx:15

+

Defined in src/renderer/components/stepper/stepper.tsx:15

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.tab/index.html b/master/extensions/api/classes/_renderer_api_components_.tab/index.html index f86c1de6e1..22c7801711 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tab/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tab/index.html @@ -1108,19 +1108,19 @@

Properties#

context#

context: TabsContextValue

-

Defined in src/renderer/components/tabs/tabs.tsx:64

+

Defined in src/renderer/components/tabs/tabs.tsx:64


elem#

elem: HTMLElement

-

Defined in src/renderer/components/tabs/tabs.tsx:65

+

Defined in src/renderer/components/tabs/tabs.tsx:65


Static contextType#

contextType: Context‹TabsContextValue‹any›› = TabsContext

-

Defined in src/renderer/components/tabs/tabs.tsx:63

+

Defined in src/renderer/components/tabs/tabs.tsx:63

Accessors#

isActive#

get isActive(): boolean

-

Defined in src/renderer/components/tabs/tabs.tsx:67

+

Defined in src/renderer/components/tabs/tabs.tsx:67

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1211,7 +1211,7 @@ prevents this from being invoked.


Protected bindRef#

bindRef(elem: HTMLElement): void

-

Defined in src/renderer/components/tabs/tabs.tsx:120

+

Defined in src/renderer/components/tabs/tabs.tsx:120

Parameters:

@@ -1259,7 +1259,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/tabs/tabs.tsx:113

+

Defined in src/renderer/components/tabs/tabs.tsx:113

Returns: void


Optional componentDidUpdate#

@@ -1386,7 +1386,7 @@ prevents this from being invoked.


focus#

focus(): void

-

Defined in src/renderer/components/tabs/tabs.tsx:73

+

Defined in src/renderer/components/tabs/tabs.tsx:73

Returns: void


Optional getSnapshotBeforeUpdate#

@@ -1421,7 +1421,7 @@ lifecycle events from running.


onClick#

onClick(evt: MouseEvent‹HTMLElement›): void

-

Defined in src/renderer/components/tabs/tabs.tsx:85

+

Defined in src/renderer/components/tabs/tabs.tsx:85

Parameters:

@@ -1441,7 +1441,7 @@ lifecycle events from running.


onFocus#

onFocus(evt: FocusEvent‹HTMLElement›): void

-

Defined in src/renderer/components/tabs/tabs.tsx:95

+

Defined in src/renderer/components/tabs/tabs.tsx:95

Parameters:

@@ -1461,7 +1461,7 @@ lifecycle events from running.


onKeyDown#

onKeyDown(evt: KeyboardEvent‹HTMLElement›): void

-

Defined in src/renderer/components/tabs/tabs.tsx:103

+

Defined in src/renderer/components/tabs/tabs.tsx:103

Parameters:

@@ -1481,12 +1481,12 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/tabs/tabs.tsx:124

+

Defined in src/renderer/components/tabs/tabs.tsx:124

Returns: Element‹›


scrollIntoView#

scrollIntoView(): void

-

Defined in src/renderer/components/tabs/tabs.tsx:77

+

Defined in src/renderer/components/tabs/tabs.tsx:77

Returns: void


Optional shouldComponentUpdate#

diff --git a/master/extensions/api/classes/_renderer_api_components_.table/index.html b/master/extensions/api/classes/_renderer_api_components_.table/index.html index 2427c42cdd..b859e8edf9 100644 --- a/master/extensions/api/classes/_renderer_api_components_.table/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.table/index.html @@ -1322,7 +1322,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


sortParamsLocal#

sortParamsLocal: object = this.props.sortByDefault

-

Defined in src/renderer/components/table/table.tsx:56

+

Defined in src/renderer/components/table/table.tsx:56

Type declaration:


state#

@@ -1351,7 +1351,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

sortParams#

get sortParams(): Partial‹TableSortParams

-

Defined in src/renderer/components/table/table.tsx:58

+

Defined in src/renderer/components/table/table.tsx:58

Returns: Partial‹TableSortParams

Methods#

Optional UNSAFE_componentWillMount#

@@ -1637,7 +1637,7 @@ lifecycle events from running.


getSorted#

getSorted(items: any[]): any[]

-

Defined in src/renderer/components/table/table.tsx:103

+

Defined in src/renderer/components/table/table.tsx:103

Parameters:

@@ -1657,7 +1657,7 @@ lifecycle events from running.


Protected onSort#

onSort(params: TableSortParams): void

-

Defined in src/renderer/components/table/table.tsx:115

+

Defined in src/renderer/components/table/table.tsx:115

Parameters:

@@ -1678,17 +1678,17 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/table/table.tsx:188

+

Defined in src/renderer/components/table/table.tsx:188

Returns: Element‹›


renderHead#

renderHead(): ReactElement‹TableHeadProps‹›, string | function | object›

-

Defined in src/renderer/components/table/table.tsx:69

+

Defined in src/renderer/components/table/table.tsx:69

Returns: ReactElement‹TableHeadProps‹›, string | function | object›


renderRows#

renderRows(): object

-

Defined in src/renderer/components/table/table.tsx:143

+

Defined in src/renderer/components/table/table.tsx:143

Returns: object


setState#

@@ -1740,7 +1740,7 @@ and componentDidUpdate will not be called.


sort#

sort(colName: TableSortBy): void

-

Defined in src/renderer/components/table/table.tsx:131

+

Defined in src/renderer/components/table/table.tsx:131

Parameters:

@@ -1760,22 +1760,22 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/table/table.tsx:48

+

Defined in src/renderer/components/table/table.tsx:48

autoSize#

autoSize: true = true

-

Defined in src/renderer/components/table/table.tsx:50

+

Defined in src/renderer/components/table/table.tsx:50

rowLineHeight#

rowLineHeight: string = "17px"

-

Defined in src/renderer/components/table/table.tsx:52

+

Defined in src/renderer/components/table/table.tsx:52

rowPadding#

rowPadding: string = "8px"

-

Defined in src/renderer/components/table/table.tsx:51

+

Defined in src/renderer/components/table/table.tsx:51

scrollable#

scrollable: true = true

-

Defined in src/renderer/components/table/table.tsx:49

+

Defined in src/renderer/components/table/table.tsx:49

sortSyncWithUrl#

sortSyncWithUrl: true = true

-

Defined in src/renderer/components/table/table.tsx:53

+

Defined in src/renderer/components/table/table.tsx:53

diff --git a/master/extensions/api/classes/_renderer_api_components_.tablecell/index.html b/master/extensions/api/classes/_renderer_api_components_.tablecell/index.html index f60cc9b7f5..489114b221 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tablecell/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tablecell/index.html @@ -1249,7 +1249,7 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

Accessors#

isSortable#

get isSortable(): boolean

-

Defined in src/renderer/components/table/table-cell.tsx:35

+

Defined in src/renderer/components/table/table-cell.tsx:35

Returns: boolean

Methods#

Optional UNSAFE_componentWillMount#

@@ -1535,7 +1535,7 @@ lifecycle events from running.


onClick#

onClick(evt: MouseEvent‹HTMLDivElement›): void

-

Defined in src/renderer/components/table/table-cell.tsx:25

+

Defined in src/renderer/components/table/table-cell.tsx:25

Parameters:

@@ -1556,17 +1556,17 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/table/table-cell.tsx:65

+

Defined in src/renderer/components/table/table-cell.tsx:65

Returns: Element‹›


renderCheckbox#

renderCheckbox(): Element‹›

-

Defined in src/renderer/components/table/table-cell.tsx:56

+

Defined in src/renderer/components/table/table-cell.tsx:56

Returns: Element‹›


renderSortIcon#

renderSortIcon(): Element‹›

-

Defined in src/renderer/components/table/table-cell.tsx:41

+

Defined in src/renderer/components/table/table-cell.tsx:41

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.tablehead/index.html b/master/extensions/api/classes/_renderer_api_components_.tablehead/index.html index 390ebc8ae8..bb110f7304 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tablehead/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tablehead/index.html @@ -1521,7 +1521,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/table/table-head.tsx:20

+

Defined in src/renderer/components/table/table-head.tsx:20

Returns: Element‹›


setState#

@@ -1573,10 +1573,10 @@ and componentDidUpdate will not be called.

Object literals#

Static defaultProps#

defaultProps: object#

-

Defined in src/renderer/components/table/table-head.tsx:16

+

Defined in src/renderer/components/table/table-head.tsx:16

sticky#

sticky: true = true

-

Defined in src/renderer/components/table/table-head.tsx:17

+

Defined in src/renderer/components/table/table-head.tsx:17

diff --git a/master/extensions/api/classes/_renderer_api_components_.tablerow/index.html b/master/extensions/api/classes/_renderer_api_components_.tablerow/index.html index 3c118d1144..c974039ba8 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tablerow/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tablerow/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/table/table-row.tsx:20

+

Defined in src/renderer/components/table/table-row.tsx:20

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_components_.tabs/index.html b/master/extensions/api/classes/_renderer_api_components_.tabs/index.html index bbac9d6eb1..b060f70e51 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tabs/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tabs/index.html @@ -1021,7 +1021,7 @@

Properties#

elem#

elem: HTMLElement

-

Defined in src/renderer/components/tabs/tabs.tsx:25

+

Defined in src/renderer/components/tabs/tabs.tsx:25

Methods#

Optional UNSAFE_componentWillMount#

UNSAFE_componentWillMount(): void

@@ -1111,7 +1111,7 @@ prevents this from being invoked.


Protected bindRef#

bindRef(elem: HTMLElement): void

-

Defined in src/renderer/components/tabs/tabs.tsx:28

+

Defined in src/renderer/components/tabs/tabs.tsx:28

Parameters:

@@ -1317,7 +1317,7 @@ lifecycle events from running.


render#

render(): Element‹›

-

Defined in src/renderer/components/tabs/tabs.tsx:32

+

Defined in src/renderer/components/tabs/tabs.tsx:32

Returns: Element‹›


Optional shouldComponentUpdate#

diff --git a/master/extensions/api/classes/_renderer_api_components_.tooltip/index.html b/master/extensions/api/classes/_renderer_api_components_.tooltip/index.html index 9dceaa6b8a..b37f4cfc95 100644 --- a/master/extensions/api/classes/_renderer_api_components_.tooltip/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.tooltip/index.html @@ -1258,7 +1258,7 @@

Properties#

activePosition#

activePosition: TooltipPosition

-

Defined in src/renderer/components/tooltip/tooltip.tsx:51

+

Defined in src/renderer/components/tooltip/tooltip.tsx:51


context#

context: any

@@ -1277,11 +1277,11 @@ Should be used with type annotation or static contextType.


elem#

elem: HTMLElement

-

Defined in src/renderer/components/tooltip/tooltip.tsx:50

+

Defined in src/renderer/components/tooltip/tooltip.tsx:50


isVisible#

isVisible: boolean = !!this.props.visible

-

Defined in src/renderer/components/tooltip/tooltip.tsx:52

+

Defined in src/renderer/components/tooltip/tooltip.tsx:52


props#

props: Readonly‹TooltipProps› & Readonly‹object›

@@ -1325,16 +1325,16 @@ https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs


Static defaultProps#

defaultProps: object = defaultProps as object

-

Defined in src/renderer/components/tooltip/tooltip.tsx:48

+

Defined in src/renderer/components/tooltip/tooltip.tsx:48

Accessors#

hoverTarget#

get hoverTarget(): HTMLElement

-

Defined in src/renderer/components/tooltip/tooltip.tsx:58

+

Defined in src/renderer/components/tooltip/tooltip.tsx:58

Returns: HTMLElement


targetElem#

get targetElem(): HTMLElement

-

Defined in src/renderer/components/tooltip/tooltip.tsx:54

+

Defined in src/renderer/components/tooltip/tooltip.tsx:54

Returns: HTMLElement

Methods#

Optional UNSAFE_componentWillMount#

@@ -1425,7 +1425,7 @@ prevents this from being invoked.


bindRef#

bindRef(elem: HTMLElement): void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:198

+

Defined in src/renderer/components/tooltip/tooltip.tsx:198

Parameters:

@@ -1473,7 +1473,7 @@ the entire component tree to unmount.

componentDidMount#

componentDidMount(): void

Overrides WizardLayout.componentDidMount

-

Defined in src/renderer/components/tooltip/tooltip.tsx:66

+

Defined in src/renderer/components/tooltip/tooltip.tsx:66

Returns: void


Optional componentDidUpdate#

@@ -1557,7 +1557,7 @@ prevents this from being invoked.

componentWillUnmount#

componentWillUnmount(): void

Overrides WizardLayout.componentWillUnmount

-

Defined in src/renderer/components/tooltip/tooltip.tsx:71

+

Defined in src/renderer/components/tooltip/tooltip.tsx:71

Returns: void


Optional componentWillUpdate#

@@ -1607,7 +1607,7 @@ prevents this from being invoked.


Protected getPosition#

getPosition(position: TooltipPosition, tooltipBounds: DOMRect, targetBounds: DOMRect): object

-

Defined in src/renderer/components/tooltip/tooltip.tsx:145

+

Defined in src/renderer/components/tooltip/tooltip.tsx:145

Parameters:

@@ -1679,28 +1679,28 @@ lifecycle events from running.


Protected onEnterTarget#

onEnterTarget(): void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:77

+

Defined in src/renderer/components/tooltip/tooltip.tsx:77

Returns: void


Protected onLeaveTarget#

onLeaveTarget(): void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:83

+

Defined in src/renderer/components/tooltip/tooltip.tsx:83

Returns: void


refreshPosition#

refreshPosition(): void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:88

+

Defined in src/renderer/components/tooltip/tooltip.tsx:88

Returns: void


render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:202

+

Defined in src/renderer/components/tooltip/tooltip.tsx:202

Returns: Element‹›


Protected setPosition#

setPosition(pos: object): void

-

Defined in src/renderer/components/tooltip/tooltip.tsx:138

+

Defined in src/renderer/components/tooltip/tooltip.tsx:138

Parameters:

pos: object

diff --git a/master/extensions/api/classes/_renderer_api_components_.wizardlayout/index.html b/master/extensions/api/classes/_renderer_api_components_.wizardlayout/index.html index f975deac13..71859f7f88 100644 --- a/master/extensions/api/classes/_renderer_api_components_.wizardlayout/index.html +++ b/master/extensions/api/classes/_renderer_api_components_.wizardlayout/index.html @@ -1476,7 +1476,7 @@ lifecycle events from running.

render#

render(): Element‹›

Overrides void

-

Defined in src/renderer/components/layout/wizard-layout.tsx:18

+

Defined in src/renderer/components/layout/wizard-layout.tsx:18

Returns: Element‹›


setState#

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrole/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrole/index.html index f115ddc626..4c1af9df27 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrole/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrole/index.html @@ -1179,7 +1179,7 @@

constructor#

+ new ClusterRole(data: KubeJsonApiData): ClusterRole

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1200,53 +1200,53 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


rules#

rules: object[]

Inherited from Role.rules

-

Defined in src/renderer/api/endpoints/role.api.ts:9

+

Defined in src/renderer/api/endpoints/role.api.ts:9


Optional status#

status? : any

Inherited from KubeObject.status

-

Defined in src/renderer/api/kube-object.ts:79

+

Defined in src/renderer/api/kube-object.ts:79


Static apiBase#

apiBase: string = "/apis/rbac.authorization.k8s.io/v1/clusterroles"

Overrides Role.apiBase

-

Defined in src/renderer/api/endpoints/cluster-role.api.ts:9

+

Defined in src/renderer/api/endpoints/cluster-role.api.ts:9


Static kind#

kind: string = "ClusterRole"

Overrides Role.kind

-

Defined in src/renderer/api/endpoints/cluster-role.api.ts:7

+

Defined in src/renderer/api/endpoints/cluster-role.api.ts:7


Static namespaced#

namespaced: boolean = false

Overrides Role.namespaced

-

Defined in src/renderer/api/endpoints/cluster-role.api.ts:8

+

Defined in src/renderer/api/endpoints/cluster-role.api.ts:8

Accessors#

get selfLink(): string

Inherited from KubeObject.selfLink

-

Defined in src/renderer/api/kube-object.ts:81

+

Defined in src/renderer/api/kube-object.ts:81

Returns: string

Methods#

delete#

delete(params?: JsonApiParams): CancelablePromise‹KubeJsonApiData›

Inherited from KubeObject.delete

-

Defined in src/renderer/api/kube-object.ts:167

+

Defined in src/renderer/api/kube-object.ts:167

Parameters:

@@ -1267,7 +1267,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1300,7 +1300,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1323,67 +1323,67 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getRules#

getRules(): object[]

Inherited from Role.getRules

-

Defined in src/renderer/api/endpoints/role.api.ts:16

+

Defined in src/renderer/api/endpoints/role.api.ts:16

Returns: object[]


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1406,7 +1406,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1427,7 +1427,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1448,7 +1448,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1469,7 +1469,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1490,7 +1490,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrolebinding/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrolebinding/index.html index bc658d7684..5e7b3e76ea 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrolebinding/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.clusterrolebinding/index.html @@ -1195,7 +1195,7 @@

constructor#

+ new ClusterRoleBinding(data: KubeJsonApiData): ClusterRoleBinding

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1216,22 +1216,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


roleRef#

roleRef: object

Inherited from RoleBinding.roleRef

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:19

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:19

Type declaration:

@@ -1300,7 +1300,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1333,7 +1333,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1356,73 +1356,73 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSubjectNames#

getSubjectNames(): string

Inherited from RoleBinding.getSubjectNames

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:29

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:29

Returns: string


getSubjects#

getSubjects(): IRoleBindingSubject[]

Inherited from RoleBinding.getSubjects

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:25

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:25

Returns: IRoleBindingSubject[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1445,7 +1445,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1466,7 +1466,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1487,7 +1487,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1508,7 +1508,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1529,7 +1529,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.configmap/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.configmap/index.html index 2f018fb332..5c96cfad55 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.configmap/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.configmap/index.html @@ -1181,7 +1181,7 @@

constructor#

+ new ConfigMap(data: KubeJsonApiData): ConfigMap

Overrides KubeObject.constructor

-

Defined in src/renderer/api/endpoints/configmap.api.ts:10

+

Defined in src/renderer/api/endpoints/configmap.api.ts:10

Parameters:

@@ -1202,11 +1202,11 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


data#

data: object

-

Defined in src/renderer/api/endpoints/configmap.api.ts:17

+

Defined in src/renderer/api/endpoints/configmap.api.ts:17

Type declaration:

@@ -1271,7 +1271,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1304,7 +1304,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1327,66 +1327,66 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getKeys#

getKeys(): string[]

-

Defined in src/renderer/api/endpoints/configmap.api.ts:21

+

Defined in src/renderer/api/endpoints/configmap.api.ts:21

Returns: string[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1409,7 +1409,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1430,7 +1430,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1451,7 +1451,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1472,7 +1472,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1493,7 +1493,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.configmapsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.configmapsstore/index.html index 56e4117323..125dcec30f 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.configmapsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.configmapsstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new ConfigMapsStore(): ConfigMapsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: ConfigMapsStore

Properties#

api#

api: KubeApiConfigMap‹›› = configMapApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+config-maps/config-maps.store.ts:8

+

Defined in src/renderer/components/+config-maps/config-maps.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): ConfigMap[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: ConfigMap[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹ConfigMap›): Promise‹ConfigMap

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹ConfigMap›): Promise‹ConfigMap

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: ConfigMap): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: ConfigMap[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): ConfigMap[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): ConfigMap[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): ConfigMap

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): ConfigMap

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: ConfigMap[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: ConfigMap): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: ConfigMap[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹ConfigMap

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹ConfigMap

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹ConfigMap[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: ConfigMap): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: ConfigMap, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: ConfigMap

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: ConfigMap): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: ConfigMap[], sorting?: function[], order?: "asc" | "desc"): ConfigMap[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: ConfigMap): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: ConfigMap[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: ConfigMap): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: ConfigMap, data: Partial‹ConfigMap›): Promise‹ConfigMap

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: ConfigMap, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: ConfigMap

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.crdresourcestore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.crdresourcestore/index.html index 920b730d11..e918c08938 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.crdresourcestore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.crdresourcestore/index.html @@ -1297,7 +1297,7 @@

constructor#

+ new CRDResourceStore(api: KubeApi‹T›): CRDResourceStore

Overrides KubeObjectStore.constructor

-

Defined in src/renderer/components/+custom-resources/crd-resource.store.ts:8

+

Defined in src/renderer/components/+custom-resources/crd-resource.store.ts:8

Parameters:

@@ -1318,65 +1318,65 @@

api#

api: KubeApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+custom-resources/crd-resource.store.ts:8

+

Defined in src/renderer/components/+custom-resources/crd-resource.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): T[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: T[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1399,7 +1399,7 @@

create#

create(params: object, data?: Partial‹T›): Promise‹T›

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1427,7 +1427,7 @@

createItem(params: object, data?: Partial‹T›): Promise‹T›

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1454,7 +1454,7 @@

Protected defaultSorting#

defaultSorting(item: T): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1475,7 +1475,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: T[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1496,7 +1496,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): T[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1524,7 +1524,7 @@

getByLabel#

getByLabel(labels: string[] | object): T[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1546,7 +1546,7 @@

getByName(name: string, namespace?: string): T

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1571,7 +1571,7 @@

getByPath#

getByPath(path: string): T

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1592,7 +1592,7 @@

Optional getStatuses#

getStatuses(items: T[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1613,7 +1613,7 @@

isSelected#

isSelected(item: T): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1634,7 +1634,7 @@

isSelectedAll#

isSelectedAll(visibleItems: T[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1657,7 +1657,7 @@

load#

load(params: object): Promise‹T›

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1684,13 +1684,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1712,7 +1712,7 @@

loadItem(params: object): Promise‹T›

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1739,7 +1739,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹T[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1760,7 +1760,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1781,7 +1781,7 @@

remove#

remove(item: T): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1802,7 +1802,7 @@

Protected removeItem#

removeItem(item: T, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: T

request: function

@@ -1813,25 +1813,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: T): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1852,7 +1852,7 @@

Protected sortItems#

sortItems(items: T[], sorting?: function[], order?: "asc" | "desc"): T[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1886,7 +1886,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1909,7 +1909,7 @@

toggleSelection#

toggleSelection(item: T): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1930,7 +1930,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: T[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1953,7 +1953,7 @@

unselect#

unselect(item: T): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1974,7 +1974,7 @@

update#

update(item: T, data: Partial‹T›): Promise‹T›

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1999,13 +1999,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: T, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: T

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.crdstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.crdstore/index.html index 6da9278050..9c598182aa 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.crdstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.crdstore/index.html @@ -1312,76 +1312,76 @@

constructor#

+ new CRDStore(): CRDStore

Overrides KubeObjectStore.constructor

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:23

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:23

Returns: CRDStore

Properties#

api#

api: KubeApiCustomResourceDefinition‹›› = crdApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:23

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:23


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

groups#

get groups(): object

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:39

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:39

Returns: object


query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): CustomResourceDefinition[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: CustomResourceDefinition[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1404,7 +1404,7 @@

create#

create(params: object, data?: Partial‹CustomResourceDefinition›): Promise‹CustomResourceDefinition

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1432,7 +1432,7 @@

createItem(params: object, data?: Partial‹CustomResourceDefinition›): Promise‹CustomResourceDefinition

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1459,7 +1459,7 @@

Protected defaultSorting#

defaultSorting(item: CustomResourceDefinition): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1480,7 +1480,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: CustomResourceDefinition[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1501,7 +1501,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): CustomResourceDefinition[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1528,7 +1528,7 @@

getByGroup#

getByGroup(group: string, pluralName: string): CustomResourceDefinition‹›

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:52

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:52

Parameters:

@@ -1553,7 +1553,7 @@

getByLabel#

getByLabel(labels: string[] | object): CustomResourceDefinition[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1575,7 +1575,7 @@

getByName(name: string, namespace?: string): CustomResourceDefinition

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1599,7 +1599,7 @@

getByObject#

getByObject(obj: KubeObject): CustomResourceDefinition‹›

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:60

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:60

Parameters:

@@ -1620,7 +1620,7 @@

getByPath#

getByPath(path: string): CustomResourceDefinition

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1641,7 +1641,7 @@

Optional getStatuses#

getStatuses(items: CustomResourceDefinition[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1662,7 +1662,7 @@

isSelected#

isSelected(item: CustomResourceDefinition): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1683,7 +1683,7 @@

isSelectedAll#

isSelectedAll(visibleItems: CustomResourceDefinition[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1706,7 +1706,7 @@

load#

load(params: object): Promise‹CustomResourceDefinition

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1733,13 +1733,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1761,7 +1761,7 @@

loadItem(params: object): Promise‹CustomResourceDefinition

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1788,7 +1788,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹CustomResourceDefinition[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1809,7 +1809,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1830,7 +1830,7 @@

remove#

remove(item: CustomResourceDefinition): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1851,7 +1851,7 @@

Protected removeItem#

removeItem(item: CustomResourceDefinition, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: CustomResourceDefinition

request: function

@@ -1862,25 +1862,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: CustomResourceDefinition): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1901,7 +1901,7 @@

Protected sortItems#

sortItems(items: CustomResourceDefinition[]): CustomResourceDefinition‹›[]

Overrides KubeObjectStore.sortItems

-

Defined in src/renderer/components/+custom-resources/crd.store.ts:32

+

Defined in src/renderer/components/+custom-resources/crd.store.ts:32

Parameters:

@@ -1923,7 +1923,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1946,7 +1946,7 @@

toggleSelection#

toggleSelection(item: CustomResourceDefinition): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1967,7 +1967,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: CustomResourceDefinition[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1990,7 +1990,7 @@

unselect#

unselect(item: CustomResourceDefinition): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2011,7 +2011,7 @@

update#

update(item: CustomResourceDefinition, data: Partial‹CustomResourceDefinition›): Promise‹CustomResourceDefinition

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2036,13 +2036,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: CustomResourceDefinition, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: CustomResourceDefinition

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.cronjob/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.cronjob/index.html index 62bc361316..9ac8323209 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.cronjob/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.cronjob/index.html @@ -1205,7 +1205,7 @@

constructor#

+ new CronJob(data: KubeJsonApiData): CronJob

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1226,17 +1226,17 @@

apiVersion#

apiVersion: string

Overrides KubeObject.apiVersion

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:15

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:15


kind#

kind: string

Overrides KubeObject.kind

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:14

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:14


metadata#

metadata: object

Overrides KubeObject.metadata

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:16

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:16

Type declaration:

@@ -1394,7 +1394,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1427,7 +1427,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1450,81 +1450,81 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getLastScheduleTime#

getLastScheduleTime(): string

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:71

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:71

Returns: string


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSchedule#

getSchedule(): string

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:78

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:78

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSuspendFlag#

getSuspendFlag(): string

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:67

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:67

Returns: string


isNeverRun#

isNeverRun(): boolean

-

Defined in src/renderer/api/endpoints/cron-job.api.ts:82

+

Defined in src/renderer/api/endpoints/cron-job.api.ts:82

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1547,7 +1547,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1568,7 +1568,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1589,7 +1589,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1610,7 +1610,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1631,7 +1631,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.cronjobstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.cronjobstore/index.html index a065a58950..12b91b903f 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.cronjobstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.cronjobstore/index.html @@ -1296,71 +1296,71 @@

constructor#

+ new CronJobStore(): CronJobStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: CronJobStore

Properties#

api#

api: KubeApiCronJob‹›› = cronJobApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:9

+

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:9


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): CronJob[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: CronJob[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1383,7 +1383,7 @@

create#

create(params: object, data?: Partial‹CronJob›): Promise‹CronJob

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1411,7 +1411,7 @@

createItem(params: object, data?: Partial‹CronJob›): Promise‹CronJob

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1438,7 +1438,7 @@

Protected defaultSorting#

defaultSorting(item: CronJob): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1459,7 +1459,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: CronJob[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1479,7 +1479,7 @@

getActiveJobsNum#

getActiveJobsNum(cronJob: CronJob): number

-

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:26

+

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:26

Parameters:

@@ -1500,7 +1500,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): CronJob[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1528,7 +1528,7 @@

getByLabel#

getByLabel(labels: string[] | object): CronJob[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1550,7 +1550,7 @@

getByName(name: string, namespace?: string): CronJob

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1575,7 +1575,7 @@

getByPath#

getByPath(path: string): CronJob

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1596,7 +1596,7 @@

getStatuses#

getStatuses(cronJobs?: CronJob[]): object

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:11

+

Defined in src/renderer/components/+workloads-cronjobs/cronjob.store.ts:11

Parameters:

@@ -1625,7 +1625,7 @@

isSelected#

isSelected(item: CronJob): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1646,7 +1646,7 @@

isSelectedAll#

isSelectedAll(visibleItems: CronJob[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1669,7 +1669,7 @@

load#

load(params: object): Promise‹CronJob

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1696,13 +1696,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1724,7 +1724,7 @@

loadItem(params: object): Promise‹CronJob

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1751,7 +1751,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹CronJob[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1772,7 +1772,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1793,7 +1793,7 @@

remove#

remove(item: CronJob): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1814,7 +1814,7 @@

Protected removeItem#

removeItem(item: CronJob, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: CronJob

request: function

@@ -1825,25 +1825,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: CronJob): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1864,7 +1864,7 @@

Protected sortItems#

sortItems(items: CronJob[], sorting?: function[], order?: "asc" | "desc"): CronJob[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1898,7 +1898,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1921,7 +1921,7 @@

toggleSelection#

toggleSelection(item: CronJob): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1942,7 +1942,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: CronJob[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1965,7 +1965,7 @@

unselect#

unselect(item: CronJob): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1986,7 +1986,7 @@

update#

update(item: CronJob, data: Partial‹CronJob›): Promise‹CronJob

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2011,13 +2011,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: CronJob, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: CronJob

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.customresourcedefinition/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.customresourcedefinition/index.html index 6cede32be2..2c3ac57c05 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.customresourcedefinition/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.customresourcedefinition/index.html @@ -1293,7 +1293,7 @@

constructor#

+ new CustomResourceDefinition(data: KubeJsonApiData): CustomResourceDefinition

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1314,21 +1314,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/crd.api.ts:25

+

Defined in src/renderer/api/endpoints/crd.api.ts:25

Type declaration:

@@ -1451,7 +1451,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1484,7 +1484,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1506,46 +1506,46 @@

getConditions#

getConditions(): object[]

-

Defined in src/renderer/api/endpoints/crd.api.ts:139

+

Defined in src/renderer/api/endpoints/crd.api.ts:139

Returns: object[]


getConversion#

getConversion(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:121

+

Defined in src/renderer/api/endpoints/crd.api.ts:121

Returns: string


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getGroup#

getGroup(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:96

+

Defined in src/renderer/api/endpoints/crd.api.ts:96

Returns: string


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNames#

getNames(): object

-

Defined in src/renderer/api/endpoints/crd.api.ts:117

+

Defined in src/renderer/api/endpoints/crd.api.ts:117

Returns: object

@@ -1603,71 +1603,71 @@

getResourceApiBase#

getResourceApiBase(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:76

+

Defined in src/renderer/api/endpoints/crd.api.ts:76

Returns: string


getResourceKind#

getResourceKind(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:86

+

Defined in src/renderer/api/endpoints/crd.api.ts:86

Returns: string


getResourceTitle#

getResourceTitle(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:90

+

Defined in src/renderer/api/endpoints/crd.api.ts:90

Returns: string


getResourceUrl#

getResourceUrl(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:67

+

Defined in src/renderer/api/endpoints/crd.api.ts:67

Returns: string


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getScope#

getScope(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:100

+

Defined in src/renderer/api/endpoints/crd.api.ts:100

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getStoredVersions#

getStoredVersions(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:113

+

Defined in src/renderer/api/endpoints/crd.api.ts:113

Returns: string


getValidation#

getValidation(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:135

+

Defined in src/renderer/api/endpoints/crd.api.ts:135

Returns: string


getVersion#

getVersion(): string

-

Defined in src/renderer/api/endpoints/crd.api.ts:104

+

Defined in src/renderer/api/endpoints/crd.api.ts:104

Returns: string


isNamespaced#

isNamespaced(): boolean

-

Defined in src/renderer/api/endpoints/crd.api.ts:109

+

Defined in src/renderer/api/endpoints/crd.api.ts:109

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1690,7 +1690,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1711,7 +1711,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1732,7 +1732,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1753,7 +1753,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1774,7 +1774,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.daemonset/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.daemonset/index.html index a6c2212bfd..d13017bc23 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.daemonset/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.daemonset/index.html @@ -1229,7 +1229,7 @@

constructor#

+ new DaemonSet(data: KubeJsonApiData): DaemonSet

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1250,22 +1250,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/daemon-set.api.ts:13

+

Defined in src/renderer/api/endpoints/daemon-set.api.ts:13

Type declaration:

@@ -1422,19 +1422,19 @@

getAffinity#

getAffinity(): IAffinity

Inherited from Deployment.getAffinity

-

Defined in src/renderer/api/workload-kube-object.ts:74

+

Defined in src/renderer/api/workload-kube-object.ts:74

Returns: IAffinity


getAffinityNumber#

getAffinityNumber(): number

Inherited from Pod.getAffinityNumber

-

Defined in src/renderer/api/workload-kube-object.ts:78

+

Defined in src/renderer/api/workload-kube-object.ts:78

Returns: number


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1467,7 +1467,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1490,90 +1490,90 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getImages#

getImages(): string[]

-

Defined in src/renderer/api/endpoints/daemon-set.api.ts:66

+

Defined in src/renderer/api/endpoints/daemon-set.api.ts:66

Returns: string[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeSelectors#

getNodeSelectors(): string[]

Inherited from Deployment.getNodeSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:58

+

Defined in src/renderer/api/workload-kube-object.ts:58

Returns: string[]


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSelectors#

getSelectors(): string[]

Inherited from Pod.getSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:52

+

Defined in src/renderer/api/workload-kube-object.ts:52

Returns: string[]


getTemplateLabels#

getTemplateLabels(): string[]

Inherited from Pod.getTemplateLabels

-

Defined in src/renderer/api/workload-kube-object.ts:64

+

Defined in src/renderer/api/workload-kube-object.ts:64

Returns: string[]


getTolerations#

getTolerations(): IToleration[]

Inherited from Deployment.getTolerations

-

Defined in src/renderer/api/workload-kube-object.ts:70

+

Defined in src/renderer/api/workload-kube-object.ts:70

Returns: IToleration[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1596,7 +1596,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1617,7 +1617,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1638,7 +1638,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1659,7 +1659,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1680,7 +1680,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.daemonsetstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.daemonsetstore/index.html index 6a1dbb615e..f09ad7749f 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.daemonsetstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.daemonsetstore/index.html @@ -1312,75 +1312,75 @@

constructor#

+ new DaemonSetStore(): DaemonSetStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: DaemonSetStore

Properties#

api#

api: KubeApiDaemonSet‹›› = daemonSetApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:10

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPodMetrics = null

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:12

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:12


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): DaemonSet[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: DaemonSet[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1403,7 +1403,7 @@

create#

create(params: object, data?: Partial‹DaemonSet›): Promise‹DaemonSet

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1431,7 +1431,7 @@

createItem(params: object, data?: Partial‹DaemonSet›): Promise‹DaemonSet

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1458,7 +1458,7 @@

Protected defaultSorting#

defaultSorting(item: DaemonSet): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1479,7 +1479,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: DaemonSet[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1500,7 +1500,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): DaemonSet[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1528,7 +1528,7 @@

getByLabel#

getByLabel(labels: string[] | object): DaemonSet[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1550,7 +1550,7 @@

getByName(name: string, namespace?: string): DaemonSet

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1575,7 +1575,7 @@

getByPath#

getByPath(path: string): DaemonSet

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1595,7 +1595,7 @@

getChildPods#

getChildPods(daemonSet: DaemonSet): Pod[]

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:20

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:20

Parameters:

@@ -1616,7 +1616,7 @@

getStatuses#

getStatuses(daemonSets?: DaemonSet[]): object

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:24

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:24

Parameters:

@@ -1648,7 +1648,7 @@

isSelected#

isSelected(item: DaemonSet): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1669,7 +1669,7 @@

isSelectedAll#

isSelectedAll(visibleItems: DaemonSet[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1692,7 +1692,7 @@

load#

load(params: object): Promise‹DaemonSet

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1719,13 +1719,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1747,7 +1747,7 @@

loadItem(params: object): Promise‹DaemonSet

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1774,7 +1774,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹DaemonSet[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1794,7 +1794,7 @@

loadMetrics#

loadMetrics(daemonSet: DaemonSet): Promise‹void›

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:14

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:14

Parameters:

@@ -1815,7 +1815,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1836,7 +1836,7 @@

remove#

remove(item: DaemonSet): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1857,7 +1857,7 @@

Protected removeItem#

removeItem(item: DaemonSet, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: DaemonSet

request: function

@@ -1868,25 +1868,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:44

+

Defined in src/renderer/components/+workloads-daemonsets/daemonsets.store.ts:44

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: DaemonSet): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1907,7 +1907,7 @@

Protected sortItems#

sortItems(items: DaemonSet[], sorting?: function[], order?: "asc" | "desc"): DaemonSet[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1941,7 +1941,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1964,7 +1964,7 @@

toggleSelection#

toggleSelection(item: DaemonSet): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1985,7 +1985,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: DaemonSet[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2008,7 +2008,7 @@

unselect#

unselect(item: DaemonSet): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2029,7 +2029,7 @@

update#

update(item: DaemonSet, data: Partial‹DaemonSet›): Promise‹DaemonSet

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2054,13 +2054,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: DaemonSet, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: DaemonSet

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.deployment/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.deployment/index.html index fa4ad97e2d..f173012abe 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.deployment/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.deployment/index.html @@ -1245,7 +1245,7 @@

constructor#

+ new Deployment(data: KubeJsonApiData): Deployment

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1266,22 +1266,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/deployment.api.ts:55

+

Defined in src/renderer/api/endpoints/deployment.api.ts:55

Type declaration:

@@ -1443,19 +1443,19 @@

getAffinity#

getAffinity(): IAffinity

Inherited from Deployment.getAffinity

-

Defined in src/renderer/api/workload-kube-object.ts:74

+

Defined in src/renderer/api/workload-kube-object.ts:74

Returns: IAffinity


getAffinityNumber#

getAffinityNumber(): number

Inherited from Pod.getAffinityNumber

-

Defined in src/renderer/api/workload-kube-object.ts:78

+

Defined in src/renderer/api/workload-kube-object.ts:78

Returns: number


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1488,7 +1488,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1510,7 +1510,7 @@

getConditions#

getConditions(activeOnly: boolean): object[]

-

Defined in src/renderer/api/endpoints/deployment.api.ts:172

+

Defined in src/renderer/api/endpoints/deployment.api.ts:172

Parameters:

@@ -1532,7 +1532,7 @@

getConditionsText#

getConditionsText(activeOnly: boolean): string

-

Defined in src/renderer/api/endpoints/deployment.api.ts:184

+

Defined in src/renderer/api/endpoints/deployment.api.ts:184

Parameters:

@@ -1555,90 +1555,90 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeSelectors#

getNodeSelectors(): string[]

Inherited from Deployment.getNodeSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:58

+

Defined in src/renderer/api/workload-kube-object.ts:58

Returns: string[]


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getReplicas#

getReplicas(): number

-

Defined in src/renderer/api/endpoints/deployment.api.ts:188

+

Defined in src/renderer/api/endpoints/deployment.api.ts:188

Returns: number


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSelectors#

getSelectors(): string[]

Inherited from Pod.getSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:52

+

Defined in src/renderer/api/workload-kube-object.ts:52

Returns: string[]


getTemplateLabels#

getTemplateLabels(): string[]

Inherited from Pod.getTemplateLabels

-

Defined in src/renderer/api/workload-kube-object.ts:64

+

Defined in src/renderer/api/workload-kube-object.ts:64

Returns: string[]


getTolerations#

getTolerations(): IToleration[]

Inherited from Deployment.getTolerations

-

Defined in src/renderer/api/workload-kube-object.ts:70

+

Defined in src/renderer/api/workload-kube-object.ts:70

Returns: IToleration[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1661,7 +1661,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1682,7 +1682,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1703,7 +1703,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1724,7 +1724,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1745,7 +1745,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentapi/index.html index c5c642b271..accec97c6c 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentapi/index.html @@ -1210,7 +1210,7 @@

constructor#

+ new DeploymentApi(options: IKubeApiOptions‹Deployment›): DeploymentApi

Inherited from KubeApi.constructor

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1231,84 +1231,84 @@

apiBase#

apiBase: string

Inherited from KubeApi.apiBase

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

Inherited from KubeApi.apiGroup

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

Inherited from KubeApi.apiPrefix

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

Inherited from KubeApi.apiResource

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

Inherited from KubeApi.apiVersion

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

Inherited from KubeApi.apiVersionPreferred

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

Inherited from KubeApi.isNamespaced

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

Inherited from KubeApi.kind

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹Deployment

Inherited from KubeApi.objectConstructor

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹Deployment

Inherited from KubeApi.options

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

Inherited from KubeApi.request

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

Inherited from KubeApi.resourceVersions

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

Inherited from KubeApi.parseApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

Inherited from KubeApi.apiVersionWithGroup

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

Inherited from KubeApi.checkPreferredVersion

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹Deployment›): Promise‹Deployment

Inherited from KubeApi.create

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1338,7 +1338,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

Inherited from KubeApi.delete

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1367,7 +1367,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Deployment

Inherited from KubeApi.get

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1396,7 +1396,7 @@

getReplicas#

getReplicas(params: object): Promise‹number›

-

Defined in src/renderer/api/endpoints/deployment.api.ts:12

+

Defined in src/renderer/api/endpoints/deployment.api.ts:12

Parameters:

params: object

@@ -1422,7 +1422,7 @@

getResourceVersion#

getResourceVersion(namespace: string): string

Inherited from KubeApi.getResourceVersion

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1444,7 +1444,7 @@

Protected getScaleApiUrl#

getScaleApiUrl(params: object): string

-

Defined in src/renderer/api/endpoints/deployment.api.ts:8

+

Defined in src/renderer/api/endpoints/deployment.api.ts:8

Parameters:

params: object

@@ -1470,7 +1470,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

Inherited from KubeApi.getUrl

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1500,7 +1500,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

Inherited from KubeApi.getWatchUrl

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1528,7 +1528,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Deployment[]›

Inherited from KubeApi.list

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1553,7 +1553,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

Inherited from KubeApi.normalizeQuery

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1576,7 +1576,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

Inherited from KubeApi.parseResponse

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1601,7 +1601,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

Inherited from KubeApi.refreshResourceVersion

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1622,7 +1622,7 @@

restart#

restart(params: object): CancelablePromise‹KubeJsonApiData›

-

Defined in src/renderer/api/endpoints/deployment.api.ts:29

+

Defined in src/renderer/api/endpoints/deployment.api.ts:29

Parameters:

params: object

@@ -1647,7 +1647,7 @@

scale#

scale(params: object, replicas: number): CancelablePromise‹KubeJsonApiData›

-

Defined in src/renderer/api/endpoints/deployment.api.ts:18

+

Defined in src/renderer/api/endpoints/deployment.api.ts:18

Parameters:

params: object

@@ -1674,7 +1674,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

Inherited from KubeApi.setResourceVersion

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1702,7 +1702,7 @@

update#

update(__namedParameters: object, data?: Partial‹Deployment›): Promise‹Deployment

Inherited from KubeApi.update

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1732,14 +1732,14 @@

watch#

watch(): function

Inherited from KubeApi.watch

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

Inherited from KubeApi.watchAll

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentstore/index.html index ce49ac1f3d..bc0dd7c893 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.deploymentstore/index.html @@ -1312,75 +1312,75 @@

constructor#

+ new DeploymentStore(): DeploymentStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: DeploymentStore

Properties#

api#

api: DeploymentApi‹› = deploymentApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:10

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPodMetrics = null

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:11

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:11


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Deployment[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Deployment[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1403,7 +1403,7 @@

create#

create(params: object, data?: Partial‹Deployment›): Promise‹Deployment

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1431,7 +1431,7 @@

createItem(params: object, data?: Partial‹Deployment›): Promise‹Deployment

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1458,7 +1458,7 @@

Protected defaultSorting#

defaultSorting(item: Deployment): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1479,7 +1479,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Deployment[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1500,7 +1500,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Deployment[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1528,7 +1528,7 @@

getByLabel#

getByLabel(labels: string[] | object): Deployment[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1550,7 +1550,7 @@

getByName(name: string, namespace?: string): Deployment

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1575,7 +1575,7 @@

getByPath#

getByPath(path: string): Deployment

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1595,7 +1595,7 @@

getChildPods#

getChildPods(deployment: Deployment): Pod‹›[]

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:45

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:45

Parameters:

@@ -1616,7 +1616,7 @@

getStatuses#

getStatuses(deployments?: Deployment[]): object

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:25

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:25

Parameters:

@@ -1648,7 +1648,7 @@

isSelected#

isSelected(item: Deployment): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1669,7 +1669,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Deployment[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1692,7 +1692,7 @@

load#

load(params: object): Promise‹Deployment

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1719,13 +1719,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1747,7 +1747,7 @@

loadItem(params: object): Promise‹Deployment

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1774,7 +1774,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Deployment[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1794,7 +1794,7 @@

loadMetrics#

loadMetrics(deployment: Deployment): Promise‹void›

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:19

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:19

Parameters:

@@ -1815,7 +1815,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1836,7 +1836,7 @@

remove#

remove(item: Deployment): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1857,7 +1857,7 @@

Protected removeItem#

removeItem(item: Deployment, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Deployment

request: function

@@ -1868,25 +1868,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:51

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:51

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Deployment): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1907,7 +1907,7 @@

Protected sortItems#

sortItems(items: Deployment[]): Deployment‹›[]

Overrides KubeObjectStore.sortItems

-

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:13

+

Defined in src/renderer/components/+workloads-deployments/deployments.store.ts:13

Parameters:

@@ -1929,7 +1929,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1952,7 +1952,7 @@

toggleSelection#

toggleSelection(item: Deployment): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1973,7 +1973,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Deployment[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1996,7 +1996,7 @@

unselect#

unselect(item: Deployment): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2017,7 +2017,7 @@

update#

update(item: Deployment, data: Partial‹Deployment›): Promise‹Deployment

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2042,13 +2042,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Deployment, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Deployment

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.endpoint/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.endpoint/index.html index bf1aa7f05c..ab94df8bdf 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.endpoint/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.endpoint/index.html @@ -1189,7 +1189,7 @@

constructor#

+ new Endpoint(data: KubeJsonApiData): Endpoint

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1210,51 +1210,51 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


Optional status#

status? : any

Inherited from KubeObject.status

-

Defined in src/renderer/api/kube-object.ts:79

+

Defined in src/renderer/api/kube-object.ts:79


subsets#

subsets: IEndpointSubset[]

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:109

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:109


Static apiBase#

apiBase: string = "/api/v1/endpoints"

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:107

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:107


Static kind#

kind: string = "Endpoints"

Overrides KubeObject.kind

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:105

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:105


Static namespaced#

namespaced: boolean = true

Overrides KubeObject.namespaced

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:106

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:106

Accessors#

get selfLink(): string

Inherited from KubeObject.selfLink

-

Defined in src/renderer/api/kube-object.ts:81

+

Defined in src/renderer/api/kube-object.ts:81

Returns: string

Methods#

delete#

delete(params?: JsonApiParams): CancelablePromise‹KubeJsonApiData›

Inherited from KubeObject.delete

-

Defined in src/renderer/api/kube-object.ts:167

+

Defined in src/renderer/api/kube-object.ts:167

Parameters:

@@ -1275,7 +1275,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1308,7 +1308,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1330,72 +1330,72 @@

getEndpointSubsets#

getEndpointSubsets(): EndpointSubset[]

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:111

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:111

Returns: EndpointSubset[]


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


toString#

toString(): string

-

Defined in src/renderer/api/endpoints/endpoint.api.ts:117

+

Defined in src/renderer/api/endpoints/endpoint.api.ts:117

Returns: string


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1418,7 +1418,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1439,7 +1439,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1460,7 +1460,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1481,7 +1481,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1502,7 +1502,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.endpointstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.endpointstore/index.html index e6560ae735..f0477e7460 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.endpointstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.endpointstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new EndpointStore(): EndpointStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: EndpointStore

Properties#

api#

api: KubeApiEndpoint‹›› = endpointApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+network-endpoints/endpoints.store.ts:8

+

Defined in src/renderer/components/+network-endpoints/endpoints.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Endpoint[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Endpoint[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹Endpoint›): Promise‹Endpoint

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹Endpoint›): Promise‹Endpoint

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: Endpoint): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Endpoint[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Endpoint[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): Endpoint[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): Endpoint

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): Endpoint

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: Endpoint[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: Endpoint): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Endpoint[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹Endpoint

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹Endpoint

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Endpoint[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: Endpoint): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: Endpoint, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Endpoint

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Endpoint): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: Endpoint[], sorting?: function[], order?: "asc" | "desc"): Endpoint[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: Endpoint): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Endpoint[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: Endpoint): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: Endpoint, data: Partial‹Endpoint›): Promise‹Endpoint

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Endpoint, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Endpoint

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.eventstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.eventstore/index.html index b025c9a999..9f9b211646 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.eventstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.eventstore/index.html @@ -1312,81 +1312,81 @@

constructor#

+ new EventStore(): EventStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: EventStore

Properties#

api#

api: KubeApiKubeEvent‹›› = eventApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+events/event.store.ts:13

+

Defined in src/renderer/components/+events/event.store.ts:13


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


limit#

limit: number = 1000

Overrides KubeObjectStore.limit

-

Defined in src/renderer/components/+events/event.store.ts:14

+

Defined in src/renderer/components/+events/event.store.ts:14


saveLimit#

saveLimit: number = 50000

-

Defined in src/renderer/components/+events/event.store.ts:15

+

Defined in src/renderer/components/+events/event.store.ts:15


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): KubeEvent[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: KubeEvent[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(): IReactionDisposer

Overrides KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/components/+events/event.store.ts:17

+

Defined in src/renderer/components/+events/event.store.ts:17

Returns: IReactionDisposer


create#

create(params: object, data?: Partial‹KubeEvent›): Promise‹KubeEvent

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1414,7 +1414,7 @@

createItem(params: object, data?: Partial‹KubeEvent›): Promise‹KubeEvent

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1441,7 +1441,7 @@

Protected defaultSorting#

defaultSorting(item: KubeEvent): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1462,7 +1462,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: KubeEvent[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1483,7 +1483,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): KubeEvent[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1511,7 +1511,7 @@

getByLabel#

getByLabel(labels: string[] | object): KubeEvent[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1533,7 +1533,7 @@

getByName(name: string, namespace?: string): KubeEvent

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1558,7 +1558,7 @@

getByPath#

getByPath(path: string): KubeEvent

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1578,7 +1578,7 @@

getEventsByObject#

getEventsByObject(obj: KubeObject): KubeEvent[]

-

Defined in src/renderer/components/+events/event.store.ts:27

+

Defined in src/renderer/components/+events/event.store.ts:27

Parameters:

@@ -1599,7 +1599,7 @@

Optional getStatuses#

getStatuses(items: KubeEvent[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1619,13 +1619,13 @@

getWarnings#

getWarnings(): KubeEvent‹›[]

-

Defined in src/renderer/components/+events/event.store.ts:37

+

Defined in src/renderer/components/+events/event.store.ts:37

Returns: KubeEvent‹›[]


isSelected#

isSelected(item: KubeEvent): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1646,7 +1646,7 @@

isSelectedAll#

isSelectedAll(visibleItems: KubeEvent[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1669,7 +1669,7 @@

load#

load(params: object): Promise‹KubeEvent

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1696,13 +1696,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1724,7 +1724,7 @@

loadItem(params: object): Promise‹KubeEvent

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1751,7 +1751,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹KubeEvent[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1772,7 +1772,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1793,7 +1793,7 @@

remove#

remove(item: KubeEvent): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1814,7 +1814,7 @@

Protected removeItem#

removeItem(item: KubeEvent, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: KubeEvent

request: function

@@ -1825,25 +1825,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: KubeEvent): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1864,7 +1864,7 @@

Protected sortItems#

sortItems(items: KubeEvent[]): KubeEvent‹›[]

Overrides KubeObjectStore.sortItems

-

Defined in src/renderer/components/+events/event.store.ts:21

+

Defined in src/renderer/components/+events/event.store.ts:21

Parameters:

@@ -1886,7 +1886,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1909,7 +1909,7 @@

toggleSelection#

toggleSelection(item: KubeEvent): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1930,7 +1930,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: KubeEvent[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1953,7 +1953,7 @@

unselect#

unselect(item: KubeEvent): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1974,7 +1974,7 @@

update#

update(item: KubeEvent, data: Partial‹KubeEvent›): Promise‹KubeEvent

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1999,13 +1999,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: KubeEvent, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: KubeEvent

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.horizontalpodautoscaler/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.horizontalpodautoscaler/index.html index 5491147fd0..515599c858 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.horizontalpodautoscaler/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.horizontalpodautoscaler/index.html @@ -1237,7 +1237,7 @@

constructor#

+ new HorizontalPodAutoscaler(data: KubeJsonApiData): HorizontalPodAutoscaler

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1258,21 +1258,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/hpa.api.ts:46

+

Defined in src/renderer/api/endpoints/hpa.api.ts:46

Type declaration:

@@ -1362,7 +1362,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1395,7 +1395,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1417,40 +1417,40 @@

getConditions#

getConditions(): object[]

-

Defined in src/renderer/api/endpoints/hpa.api.ts:81

+

Defined in src/renderer/api/endpoints/hpa.api.ts:81

Returns: object[]


getCurrentMetrics#

getCurrentMetrics(): IHpaMetric[]

-

Defined in src/renderer/api/endpoints/hpa.api.ts:99

+

Defined in src/renderer/api/endpoints/hpa.api.ts:99

Returns: IHpaMetric[]


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getMaxPods#

getMaxPods(): number

-

Defined in src/renderer/api/endpoints/hpa.api.ts:69

+

Defined in src/renderer/api/endpoints/hpa.api.ts:69

Returns: number


Protected getMetricName#

getMetricName(metric: IHpaMetric): string

-

Defined in src/renderer/api/endpoints/hpa.api.ts:103

+

Defined in src/renderer/api/endpoints/hpa.api.ts:103

Parameters:

@@ -1470,7 +1470,7 @@

getMetricValues#

getMetricValues(metric: IHpaMetric): string

-

Defined in src/renderer/api/endpoints/hpa.api.ts:119

+

Defined in src/renderer/api/endpoints/hpa.api.ts:119

Parameters:

@@ -1490,59 +1490,59 @@

getMetrics#

getMetrics(): IHpaMetric[]

-

Defined in src/renderer/api/endpoints/hpa.api.ts:95

+

Defined in src/renderer/api/endpoints/hpa.api.ts:95

Returns: IHpaMetric[]


getMinPods#

getMinPods(): number

-

Defined in src/renderer/api/endpoints/hpa.api.ts:73

+

Defined in src/renderer/api/endpoints/hpa.api.ts:73

Returns: number


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getReplicas#

getReplicas(): number

-

Defined in src/renderer/api/endpoints/hpa.api.ts:77

+

Defined in src/renderer/api/endpoints/hpa.api.ts:77

Returns: number


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1565,7 +1565,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1586,7 +1586,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1607,7 +1607,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1628,7 +1628,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1649,7 +1649,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.hpastore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.hpastore/index.html index 03ce6ba82d..10dce45e9c 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.hpastore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.hpastore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new HPAStore(): HPAStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: HPAStore

Properties#

api#

api: KubeApiHorizontalPodAutoscaler‹›› = hpaApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+config-autoscalers/hpa.store.ts:8

+

Defined in src/renderer/components/+config-autoscalers/hpa.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): HorizontalPodAutoscaler[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: HorizontalPodAutoscaler[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹HorizontalPodAutoscaler›): Promise‹HorizontalPodAutoscaler

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹HorizontalPodAutoscaler›): Promise‹HorizontalPodAutoscaler

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: HorizontalPodAutoscaler): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: HorizontalPodAutoscaler[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): HorizontalPodAutoscaler[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): HorizontalPodAutoscaler[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): HorizontalPodAutoscaler

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): HorizontalPodAutoscaler

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: HorizontalPodAutoscaler[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: HorizontalPodAutoscaler): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: HorizontalPodAutoscaler[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹HorizontalPodAutoscaler

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹HorizontalPodAutoscaler

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹HorizontalPodAutoscaler[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: HorizontalPodAutoscaler): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: HorizontalPodAutoscaler, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: HorizontalPodAutoscaler

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: HorizontalPodAutoscaler): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: HorizontalPodAutoscaler[], sorting?: function[], order?: "asc" | "desc"): HorizontalPodAutoscaler[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: HorizontalPodAutoscaler): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: HorizontalPodAutoscaler[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: HorizontalPodAutoscaler): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: HorizontalPodAutoscaler, data: Partial‹HorizontalPodAutoscaler›): Promise‹HorizontalPodAutoscaler

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: HorizontalPodAutoscaler, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: HorizontalPodAutoscaler

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.ingress/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.ingress/index.html index eb3f72afc0..74d2bf249a 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.ingress/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.ingress/index.html @@ -1213,7 +1213,7 @@

constructor#

+ new Ingress(data: KubeJsonApiData): Ingress

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1234,21 +1234,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/ingress.api.ts:70

+

Defined in src/renderer/api/endpoints/ingress.api.ts:70

Type declaration:

@@ -1323,7 +1323,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1356,7 +1356,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1379,74 +1379,74 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getHosts#

getHosts(): string[]

-

Defined in src/renderer/api/endpoints/ingress.api.ts:137

+

Defined in src/renderer/api/endpoints/ingress.api.ts:137

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getLoadBalancers#

getLoadBalancers(): string[]

-

Defined in src/renderer/api/endpoints/ingress.api.ts:168

+

Defined in src/renderer/api/endpoints/ingress.api.ts:168

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getPorts#

getPorts(): string

-

Defined in src/renderer/api/endpoints/ingress.api.ts:145

+

Defined in src/renderer/api/endpoints/ingress.api.ts:145

Returns: string


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getRoutes#

getRoutes(): string[]

-

Defined in src/renderer/api/endpoints/ingress.api.ts:100

+

Defined in src/renderer/api/endpoints/ingress.api.ts:100

Returns: string[]


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getServiceNamePort#

getServiceNamePort(): object

-

Defined in src/renderer/api/endpoints/ingress.api.ts:126

+

Defined in src/renderer/api/endpoints/ingress.api.ts:126

Returns: object

@@ -1510,7 +1510,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1531,7 +1531,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1552,7 +1552,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1573,7 +1573,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.ingressapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.ingressapi/index.html index aea1b8197c..9bea3699af 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.ingressapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.ingressapi/index.html @@ -1186,7 +1186,7 @@

constructor#

+ new IngressApi(options: IKubeApiOptions‹Ingress›): IngressApi

Inherited from KubeApi.constructor

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1207,84 +1207,84 @@

apiBase#

apiBase: string

Inherited from KubeApi.apiBase

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

Inherited from KubeApi.apiGroup

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

Inherited from KubeApi.apiPrefix

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

Inherited from KubeApi.apiResource

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

Inherited from KubeApi.apiVersion

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

Inherited from KubeApi.apiVersionPreferred

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

Inherited from KubeApi.isNamespaced

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

Inherited from KubeApi.kind

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹Ingress

Inherited from KubeApi.objectConstructor

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹Ingress

Inherited from KubeApi.options

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

Inherited from KubeApi.request

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

Inherited from KubeApi.resourceVersions

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

Inherited from KubeApi.parseApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

Inherited from KubeApi.apiVersionWithGroup

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

Inherited from KubeApi.checkPreferredVersion

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹Ingress›): Promise‹Ingress

Inherited from KubeApi.create

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1314,7 +1314,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

Inherited from KubeApi.delete

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1343,7 +1343,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Ingress

Inherited from KubeApi.get

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1372,7 +1372,7 @@

getMetrics#

getMetrics(ingress: string, namespace: string): Promise‹IIngressMetrics›

-

Defined in src/renderer/api/endpoints/ingress.api.ts:7

+

Defined in src/renderer/api/endpoints/ingress.api.ts:7

Parameters:

@@ -1397,7 +1397,7 @@

getResourceVersion#

getResourceVersion(namespace: string): string

Inherited from KubeApi.getResourceVersion

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1420,7 +1420,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

Inherited from KubeApi.getUrl

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1450,7 +1450,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

Inherited from KubeApi.getWatchUrl

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1478,7 +1478,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Ingress[]›

Inherited from KubeApi.list

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1503,7 +1503,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

Inherited from KubeApi.normalizeQuery

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1526,7 +1526,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

Inherited from KubeApi.parseResponse

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1551,7 +1551,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

Inherited from KubeApi.refreshResourceVersion

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1573,7 +1573,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

Inherited from KubeApi.setResourceVersion

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1601,7 +1601,7 @@

update#

update(__namedParameters: object, data?: Partial‹Ingress›): Promise‹Ingress

Inherited from KubeApi.update

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1631,14 +1631,14 @@

watch#

watch(): function

Inherited from KubeApi.watch

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

Inherited from KubeApi.watchAll

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.ingressstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.ingressstore/index.html index 4a340c948c..8741efc733 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.ingressstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.ingressstore/index.html @@ -1304,75 +1304,75 @@

constructor#

+ new IngressStore(): IngressStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: IngressStore

Properties#

api#

api: IngressApi‹› = ingressApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:9

+

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:9


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IIngressMetrics = null

-

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:10

+

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:10


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Ingress[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Ingress[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1395,7 +1395,7 @@

create#

create(params: object, data?: Partial‹Ingress›): Promise‹Ingress

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1423,7 +1423,7 @@

createItem(params: object, data?: Partial‹Ingress›): Promise‹Ingress

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1450,7 +1450,7 @@

Protected defaultSorting#

defaultSorting(item: Ingress): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1471,7 +1471,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Ingress[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1492,7 +1492,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Ingress[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1520,7 +1520,7 @@

getByLabel#

getByLabel(labels: string[] | object): Ingress[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1542,7 +1542,7 @@

getByName(name: string, namespace?: string): Ingress

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1567,7 +1567,7 @@

getByPath#

getByPath(path: string): Ingress

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1588,7 +1588,7 @@

Optional getStatuses#

getStatuses(items: Ingress[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1609,7 +1609,7 @@

isSelected#

isSelected(item: Ingress): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1630,7 +1630,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Ingress[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1653,7 +1653,7 @@

load#

load(params: object): Promise‹Ingress

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1680,13 +1680,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1708,7 +1708,7 @@

loadItem(params: object): Promise‹Ingress

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1735,7 +1735,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Ingress[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1755,7 +1755,7 @@

loadMetrics#

loadMetrics(ingress: Ingress): Promise‹void›

-

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:12

+

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:12

Parameters:

@@ -1776,7 +1776,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1797,7 +1797,7 @@

remove#

remove(item: Ingress): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1818,7 +1818,7 @@

Protected removeItem#

removeItem(item: Ingress, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Ingress

request: function

@@ -1829,25 +1829,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:16

+

Defined in src/renderer/components/+network-ingresses/ingress.store.ts:16

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Ingress): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1868,7 +1868,7 @@

Protected sortItems#

sortItems(items: Ingress[], sorting?: function[], order?: "asc" | "desc"): Ingress[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1902,7 +1902,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1925,7 +1925,7 @@

toggleSelection#

toggleSelection(item: Ingress): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1946,7 +1946,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Ingress[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1969,7 +1969,7 @@

unselect#

unselect(item: Ingress): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1990,7 +1990,7 @@

update#

update(item: Ingress, data: Partial‹Ingress›): Promise‹Ingress

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2015,13 +2015,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Ingress, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Ingress

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.job/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.job/index.html index cb4a569d5c..3accfeb391 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.job/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.job/index.html @@ -1261,7 +1261,7 @@

constructor#

+ new Job(data: KubeJsonApiData): Job

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1282,22 +1282,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/job.api.ts:14

+

Defined in src/renderer/api/endpoints/job.api.ts:14

Type declaration:

@@ -1481,7 +1481,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1503,12 +1503,12 @@

getCompletions#

getCompletions(): number

-

Defined in src/renderer/api/endpoints/job.api.ts:77

+

Defined in src/renderer/api/endpoints/job.api.ts:77

Returns: number


getCondition#

getCondition(): object

-

Defined in src/renderer/api/endpoints/job.api.ts:85

+

Defined in src/renderer/api/endpoints/job.api.ts:85

Returns: object

@@ -1668,7 +1668,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1689,7 +1689,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1710,7 +1710,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1731,7 +1731,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.jobstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.jobstore/index.html index 304b339f6e..2445a80f65 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.jobstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.jobstore/index.html @@ -1304,71 +1304,71 @@

constructor#

+ new JobStore(): JobStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: JobStore

Properties#

api#

api: KubeApiJob‹›› = jobApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-jobs/job.store.ts:10

+

Defined in src/renderer/components/+workloads-jobs/job.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Job[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Job[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1391,7 +1391,7 @@

create#

create(params: object, data?: Partial‹Job›): Promise‹Job

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1419,7 +1419,7 @@

createItem(params: object, data?: Partial‹Job›): Promise‹Job

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1446,7 +1446,7 @@

Protected defaultSorting#

defaultSorting(item: Job): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1467,7 +1467,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Job[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1488,7 +1488,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Job[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1516,7 +1516,7 @@

getByLabel#

getByLabel(labels: string[] | object): Job[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1538,7 +1538,7 @@

getByName(name: string, namespace?: string): Job

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1563,7 +1563,7 @@

getByPath#

getByPath(path: string): Job

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1583,7 +1583,7 @@

getChildPods#

getChildPods(job: Job): Pod[]

-

Defined in src/renderer/components/+workloads-jobs/job.store.ts:12

+

Defined in src/renderer/components/+workloads-jobs/job.store.ts:12

Parameters:

@@ -1603,7 +1603,7 @@

getJobsByOwner#

getJobsByOwner(cronJob: CronJob): Job‹›[]

-

Defined in src/renderer/components/+workloads-jobs/job.store.ts:16

+

Defined in src/renderer/components/+workloads-jobs/job.store.ts:16

Parameters:

@@ -1624,7 +1624,7 @@

getStatuses#

getStatuses(jobs?: Job[]): object

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-jobs/job.store.ts:23

+

Defined in src/renderer/components/+workloads-jobs/job.store.ts:23

Parameters:

@@ -1659,7 +1659,7 @@

isSelected#

isSelected(item: Job): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1680,7 +1680,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Job[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1703,7 +1703,7 @@

load#

load(params: object): Promise‹Job

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1730,13 +1730,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1758,7 +1758,7 @@

loadItem(params: object): Promise‹Job

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1785,7 +1785,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Job[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1806,7 +1806,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1827,7 +1827,7 @@

remove#

remove(item: Job): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1848,7 +1848,7 @@

Protected removeItem#

removeItem(item: Job, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Job

request: function

@@ -1859,25 +1859,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Job): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1898,7 +1898,7 @@

Protected sortItems#

sortItems(items: Job[], sorting?: function[], order?: "asc" | "desc"): Job[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1932,7 +1932,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1955,7 +1955,7 @@

toggleSelection#

toggleSelection(item: Job): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1976,7 +1976,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Job[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1999,7 +1999,7 @@

unselect#

unselect(item: Job): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2020,7 +2020,7 @@

update#

update(item: Job, data: Partial‹Job›): Promise‹Job

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2045,13 +2045,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Job, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Job

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeapi/index.html index 3bf76b2f59..bab537da1f 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeapi/index.html @@ -1190,7 +1190,7 @@

Constructors#

constructor#

+ new KubeApi(options: IKubeApiOptions‹T›): KubeApi

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1210,69 +1210,69 @@

Properties#

apiBase#

apiBase: string

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹T›

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹T›

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹T›): Promise‹T›

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1301,7 +1301,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1329,7 +1329,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹T›

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1358,7 +1358,7 @@

getResourceVersion#

getResourceVersion(namespace: string): string

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1380,7 +1380,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1409,7 +1409,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1436,7 +1436,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹T[]›

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1460,7 +1460,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1482,7 +1482,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1506,7 +1506,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1527,7 +1527,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1554,7 +1554,7 @@

update#

update(__namedParameters: object, data?: Partial‹T›): Promise‹T›

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1583,13 +1583,13 @@

watch#

watch(): function

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeevent/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeevent/index.html index 2cc234d285..a4aa4223bf 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeevent/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeevent/index.html @@ -1285,7 +1285,7 @@

constructor#

+ new KubeEvent(data: KubeJsonApiData): KubeEvent

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1306,23 +1306,23 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


count#

count: number

-

Defined in src/renderer/api/endpoints/events.api.ts:30

+

Defined in src/renderer/api/endpoints/events.api.ts:30


eventTime#

eventTime: null

-

Defined in src/renderer/api/endpoints/events.api.ts:32

+

Defined in src/renderer/api/endpoints/events.api.ts:32


firstTimestamp#

firstTimestamp: string

-

Defined in src/renderer/api/endpoints/events.api.ts:28

+

Defined in src/renderer/api/endpoints/events.api.ts:28


involvedObject#

involvedObject: object

-

Defined in src/renderer/api/endpoints/events.api.ts:13

+

Defined in src/renderer/api/endpoints/events.api.ts:13

Type declaration:

@@ -1444,7 +1444,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1477,7 +1477,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1500,81 +1500,81 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getFirstSeenTime#

getFirstSeenTime(): string

-

Defined in src/renderer/api/endpoints/events.api.ts:46

+

Defined in src/renderer/api/endpoints/events.api.ts:46

Returns: string


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getLastSeenTime#

getLastSeenTime(): string

-

Defined in src/renderer/api/endpoints/events.api.ts:52

+

Defined in src/renderer/api/endpoints/events.api.ts:52

Returns: string


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSource#

getSource(): string

-

Defined in src/renderer/api/endpoints/events.api.ts:40

+

Defined in src/renderer/api/endpoints/events.api.ts:40

Returns: string


isWarning#

isWarning(): boolean

-

Defined in src/renderer/api/endpoints/events.api.ts:36

+

Defined in src/renderer/api/endpoints/events.api.ts:36

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1597,7 +1597,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1618,7 +1618,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1639,7 +1639,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1660,7 +1660,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1681,7 +1681,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobject/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobject/index.html index 0d2ed6e02d..fee0cad536 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobject/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobject/index.html @@ -1175,7 +1175,7 @@

Constructors#

constructor#

+ new KubeObject(data: KubeJsonApiData): KubeObject

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1195,36 +1195,36 @@

Properties#

apiVersion#

apiVersion: string

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


Optional status#

status? : any

-

Defined in src/renderer/api/kube-object.ts:79

+

Defined in src/renderer/api/kube-object.ts:79


Static kind#

kind: string

-

Defined in src/renderer/api/kube-object.ts:47

+

Defined in src/renderer/api/kube-object.ts:47


Static namespaced#

namespaced: boolean

-

Defined in src/renderer/api/kube-object.ts:48

+

Defined in src/renderer/api/kube-object.ts:48

Accessors#

get selfLink(): string

-

Defined in src/renderer/api/kube-object.ts:81

+

Defined in src/renderer/api/kube-object.ts:81

Returns: string

Methods#

delete#

delete(params?: JsonApiParams): CancelablePromise‹KubeJsonApiData›

-

Defined in src/renderer/api/kube-object.ts:167

+

Defined in src/renderer/api/kube-object.ts:167

Parameters:

@@ -1244,7 +1244,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1276,7 +1276,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1298,52 +1298,52 @@

getFinalizers#

getFinalizers(): string[]

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1365,7 +1365,7 @@

Static create#

create(data: any): KubeObject‹›

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1385,7 +1385,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1405,7 +1405,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1425,7 +1425,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1445,7 +1445,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobjectstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobjectstore/index.html index 00dbfdacf0..01f15e7be7 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobjectstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.kubeobjectstore/index.html @@ -1325,65 +1325,65 @@

Constructors#

constructor#

+ new KubeObjectStore(): KubeObjectStore

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: KubeObjectStore

Properties#

Abstract api#

api: KubeApi‹T›

-

Defined in src/renderer/kube-object.store.ts:13

+

Defined in src/renderer/kube-object.store.ts:13


bufferSize#

bufferSize: number = 50000

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): T[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: T[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1405,7 +1405,7 @@

create#

create(params: object, data?: Partial‹T›): Promise‹T›

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1432,7 +1432,7 @@

Protected createItem#

createItem(params: object, data?: Partial‹T›): Promise‹T›

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1459,7 +1459,7 @@

Protected defaultSorting#

defaultSorting(item: T): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1479,7 +1479,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: T[]): T[]

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1499,7 +1499,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): T[]

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1526,7 +1526,7 @@

getByLabel#

getByLabel(labels: string[] | object): T[]

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1547,7 +1547,7 @@

getByName#

getByName(name: string, namespace?: string): T

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1571,7 +1571,7 @@

getByPath#

getByPath(path: string): T

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1591,7 +1591,7 @@

Optional getStatuses#

getStatuses(items: T[]): Record‹string, number›

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1612,7 +1612,7 @@

isSelected#

isSelected(item: T): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1633,7 +1633,7 @@

isSelectedAll#

isSelectedAll(visibleItems: T[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1655,7 +1655,7 @@

load#

load(params: object): Promise‹T›

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1681,12 +1681,12 @@

loadAll#

loadAll(): Promise‹void›

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1707,7 +1707,7 @@

Protected loadItem#

loadItem(params: object): Promise‹T›

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1733,7 +1733,7 @@

Protected loadItems#

loadItems(allowedNamespaces?: string[]): Promise‹T[]›

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1753,7 +1753,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1773,7 +1773,7 @@

remove#

remove(item: T): Promise‹void›

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1794,7 +1794,7 @@

Protected removeItem#

removeItem(item: T, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: T

request: function

@@ -1804,25 +1804,25 @@

removeSelectedItems#

removeSelectedItems(): Promise‹void[]›

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: T): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1843,7 +1843,7 @@

Protected sortItems#

sortItems(items: T[], sorting?: function[], order?: "asc" | "desc"): T[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1876,7 +1876,7 @@

subscribe#

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1899,7 +1899,7 @@

toggleSelection#

toggleSelection(item: T): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1920,7 +1920,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: T[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1943,7 +1943,7 @@

unselect#

unselect(item: T): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1963,7 +1963,7 @@

update#

update(item: T, data: Partial‹T›): Promise‹T›

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1987,13 +1987,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: T, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: T

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.namespace/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.namespace/index.html index 1c7f8aa67c..e3b1cea00e 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.namespace/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.namespace/index.html @@ -1173,7 +1173,7 @@

constructor#

+ new Namespace(data: KubeJsonApiData): Namespace

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1194,22 +1194,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


Optional status#

status? : object

Overrides KubeObject.status

-

Defined in src/renderer/api/endpoints/namespaces.api.ts:16

+

Defined in src/renderer/api/endpoints/namespaces.api.ts:16

Type declaration:

@@ -1259,7 +1259,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1292,7 +1292,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1315,66 +1315,66 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getStatus#

getStatus(): string

-

Defined in src/renderer/api/endpoints/namespaces.api.ts:20

+

Defined in src/renderer/api/endpoints/namespaces.api.ts:20

Returns: string


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1397,7 +1397,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1418,7 +1418,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1439,7 +1439,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1460,7 +1460,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1481,7 +1481,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.namespacestore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.namespacestore/index.html index 0f5d2f9312..40bd632ddb 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.namespacestore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.namespacestore/index.html @@ -1360,84 +1360,84 @@

constructor#

+ new NamespaceStore(): NamespaceStore

Overrides KubeObjectStore.constructor

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:21

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:21

Returns: NamespaceStore

Properties#

api#

api: KubeApiNamespace‹›› = namespacesApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:12

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:12


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


contextNs#

contextNs: IObservableArray‹string› = observable.array()

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:13

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:13


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19


Protected storage#

storage: StorageHelper‹string[]› = createStorage("context_ns", this.contextNs)

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:15

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:15

Accessors#

initNamespaces#

get initNamespaces(): string[]

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:17

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:17

Returns: string[]


query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Namespace[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Namespace[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1460,7 +1460,7 @@

create#

create(params: object, data?: Partial‹Namespace›): Promise‹Namespace

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1488,7 +1488,7 @@

createItem(params: object, data?: Partial‹Namespace›): Promise‹Namespace

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1515,7 +1515,7 @@

Protected defaultSorting#

defaultSorting(item: Namespace): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1536,7 +1536,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Namespace[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1557,7 +1557,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Namespace[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1585,7 +1585,7 @@

getByLabel#

getByLabel(labels: string[] | object): Namespace[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1607,7 +1607,7 @@

getByName(name: string, namespace?: string): Namespace

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1632,7 +1632,7 @@

getByPath#

getByPath(path: string): Namespace

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1652,12 +1652,12 @@

getContextParams#

getContextParams(): Partial‹IQueryParams›

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:39

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:39

Returns: Partial‹IQueryParams›


Protected getDummyNamespace#

getDummyNamespace(name: string): Namespace‹›

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:74

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:74

Parameters:

@@ -1678,7 +1678,7 @@

Optional getStatuses#

getStatuses(items: Namespace[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1698,7 +1698,7 @@

hasContext#

hasContext(namespace: string | string[]): boolean

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:91

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:91

Parameters:

@@ -1719,7 +1719,7 @@

isSelected#

isSelected(item: Namespace): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1740,7 +1740,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Namespace[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1763,7 +1763,7 @@

load#

load(params: object): Promise‹Namespace

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1790,13 +1790,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1818,7 +1818,7 @@

loadItem(params: object): Promise‹Namespace

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1844,7 +1844,7 @@

Protected loadItems#

loadItems(namespaces?: string[]): Promise‹Namespace‹›[]›

Overrides KubeObjectStore.loadItems

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:60

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:60

Parameters:

@@ -1865,7 +1865,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1886,7 +1886,7 @@

remove#

remove(item: Namespace): Promise‹void›

Overrides KubeObjectStore.remove

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:108

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:108

Parameters:

@@ -1907,7 +1907,7 @@

Protected removeItem#

removeItem(item: Namespace, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Namespace

request: function

@@ -1918,25 +1918,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:103

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:103

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Namespace): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1956,7 +1956,7 @@

setContext#

setContext(namespaces: string[]): void

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:87

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:87

Parameters:

@@ -1977,7 +1977,7 @@

Protected sortItems#

sortItems(items: Namespace[], sorting?: function[], order?: "asc" | "desc"): Namespace[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -2010,7 +2010,7 @@

subscribe#

subscribe(apis: KubeApiNamespace‹››[]): (Anonymous function)

Overrides KubeObjectStore.subscribe

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:45

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:45

Parameters:

@@ -2032,7 +2032,7 @@

toggleContext#

toggleContext(namespace: string): void

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:97

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:97

Parameters:

@@ -2053,7 +2053,7 @@

toggleSelection#

toggleSelection(item: Namespace): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -2074,7 +2074,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Namespace[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2097,7 +2097,7 @@

unselect#

unselect(item: Namespace): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2118,7 +2118,7 @@

update#

update(item: Namespace, data: Partial‹Namespace›): Promise‹Namespace

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2143,13 +2143,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Namespace, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Namespace

request: function

@@ -2158,7 +2158,7 @@

Protected updateUrl#

updateUrl(namespaces: string[]): void

-

Defined in src/renderer/components/+namespaces/namespace.store.ts:56

+

Defined in src/renderer/components/+namespaces/namespace.store.ts:56

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicy/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicy/index.html index 13ee5eee58..714076901e 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicy/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicy/index.html @@ -1189,7 +1189,7 @@

constructor#

+ new NetworkPolicy(data: KubeJsonApiData): NetworkPolicy

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1210,21 +1210,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/network-policy.api.ts:44

+

Defined in src/renderer/api/endpoints/network-policy.api.ts:44

Type declaration:

@@ -1296,7 +1296,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1329,7 +1329,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1352,71 +1352,71 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getMatchLabels#

getMatchLabels(): string[]

-

Defined in src/renderer/api/endpoints/network-policy.api.ts:56

+

Defined in src/renderer/api/endpoints/network-policy.api.ts:56

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getTypes#

getTypes(): string[]

-

Defined in src/renderer/api/endpoints/network-policy.api.ts:64

+

Defined in src/renderer/api/endpoints/network-policy.api.ts:64

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1439,7 +1439,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1460,7 +1460,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1481,7 +1481,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1502,7 +1502,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1523,7 +1523,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicystore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicystore/index.html index 369d6c2ab6..a4703b3995 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicystore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.networkpolicystore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new NetworkPolicyStore(): NetworkPolicyStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: NetworkPolicyStore

Properties#

api#

api: KubeApiNetworkPolicy‹›› = networkPolicyApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+network-policies/network-policy.store.ts:8

+

Defined in src/renderer/components/+network-policies/network-policy.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): NetworkPolicy[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: NetworkPolicy[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹NetworkPolicy›): Promise‹NetworkPolicy

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹NetworkPolicy›): Promise‹NetworkPolicy

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: NetworkPolicy): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: NetworkPolicy[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): NetworkPolicy[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): NetworkPolicy[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): NetworkPolicy

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): NetworkPolicy

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: NetworkPolicy[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: NetworkPolicy): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: NetworkPolicy[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹NetworkPolicy

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹NetworkPolicy

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹NetworkPolicy[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: NetworkPolicy): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: NetworkPolicy, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: NetworkPolicy

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: NetworkPolicy): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: NetworkPolicy[], sorting?: function[], order?: "asc" | "desc"): NetworkPolicy[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: NetworkPolicy): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: NetworkPolicy[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: NetworkPolicy): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: NetworkPolicy, data: Partial‹NetworkPolicy›): Promise‹NetworkPolicy

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: NetworkPolicy, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: NetworkPolicy

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.node/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.node/index.html index d78ca3c630..b6b8f7096b 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.node/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.node/index.html @@ -1261,7 +1261,7 @@

constructor#

+ new Node(data: KubeJsonApiData): Node

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1282,21 +1282,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/nodes.api.ts:37

+

Defined in src/renderer/api/endpoints/nodes.api.ts:37

Type declaration:

@@ -1430,13 +1430,13 @@

getActiveConditions#

getActiveConditions(): object[]

-

Defined in src/renderer/api/endpoints/nodes.api.ts:138

+

Defined in src/renderer/api/endpoints/nodes.api.ts:138

Returns: object[]


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1469,7 +1469,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1491,112 +1491,112 @@

getConditions#

getConditions(): object[]

-

Defined in src/renderer/api/endpoints/nodes.api.ts:128

+

Defined in src/renderer/api/endpoints/nodes.api.ts:128

Returns: object[]


getCpuCapacity#

getCpuCapacity(): number

-

Defined in src/renderer/api/endpoints/nodes.api.ts:116

+

Defined in src/renderer/api/endpoints/nodes.api.ts:116

Returns: number


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getKubeletVersion#

getKubeletVersion(): string

-

Defined in src/renderer/api/endpoints/nodes.api.ts:150

+

Defined in src/renderer/api/endpoints/nodes.api.ts:150

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getMemoryCapacity#

getMemoryCapacity(): number

-

Defined in src/renderer/api/endpoints/nodes.api.ts:122

+

Defined in src/renderer/api/endpoints/nodes.api.ts:122

Returns: number


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeConditionText#

getNodeConditionText(): string

-

Defined in src/renderer/api/endpoints/nodes.api.ts:88

+

Defined in src/renderer/api/endpoints/nodes.api.ts:88

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOperatingSystem#

getOperatingSystem(): string

-

Defined in src/renderer/api/endpoints/nodes.api.ts:154

+

Defined in src/renderer/api/endpoints/nodes.api.ts:154

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getRoleLabels#

getRoleLabels(): string

-

Defined in src/renderer/api/endpoints/nodes.api.ts:104

+

Defined in src/renderer/api/endpoints/nodes.api.ts:104

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getTaints#

getTaints(): object[]

-

Defined in src/renderer/api/endpoints/nodes.api.ts:100

+

Defined in src/renderer/api/endpoints/nodes.api.ts:100

Returns: object[]


getWarningConditions#

getWarningConditions(): object[]

-

Defined in src/renderer/api/endpoints/nodes.api.ts:142

+

Defined in src/renderer/api/endpoints/nodes.api.ts:142

Returns: object[]


isUnschedulable#

isUnschedulable(): boolean

-

Defined in src/renderer/api/endpoints/nodes.api.ts:164

+

Defined in src/renderer/api/endpoints/nodes.api.ts:164

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1619,7 +1619,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1640,7 +1640,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1661,7 +1661,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1682,7 +1682,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1703,7 +1703,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.nodesapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.nodesapi/index.html index 40cbb214ee..edef08edfd 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.nodesapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.nodesapi/index.html @@ -1186,7 +1186,7 @@

constructor#

+ new NodesApi(options: IKubeApiOptions‹Node›): NodesApi

Inherited from KubeApi.constructor

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1207,84 +1207,84 @@

apiBase#

apiBase: string

Inherited from KubeApi.apiBase

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

Inherited from KubeApi.apiGroup

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

Inherited from KubeApi.apiPrefix

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

Inherited from KubeApi.apiResource

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

Inherited from KubeApi.apiVersion

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

Inherited from KubeApi.apiVersionPreferred

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

Inherited from KubeApi.isNamespaced

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

Inherited from KubeApi.kind

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹Node

Inherited from KubeApi.objectConstructor

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹Node

Inherited from KubeApi.options

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

Inherited from KubeApi.request

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

Inherited from KubeApi.resourceVersions

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

Inherited from KubeApi.parseApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

Inherited from KubeApi.apiVersionWithGroup

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

Inherited from KubeApi.checkPreferredVersion

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹Node›): Promise‹Node

Inherited from KubeApi.create

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1314,7 +1314,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

Inherited from KubeApi.delete

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1343,7 +1343,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Node

Inherited from KubeApi.get

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1372,13 +1372,13 @@

getMetrics#

getMetrics(): Promise‹INodeMetrics›

-

Defined in src/renderer/api/endpoints/nodes.api.ts:7

+

Defined in src/renderer/api/endpoints/nodes.api.ts:7

Returns: Promise‹INodeMetrics›


getResourceVersion#

getResourceVersion(namespace: string): string

Inherited from KubeApi.getResourceVersion

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1401,7 +1401,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

Inherited from KubeApi.getUrl

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1431,7 +1431,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

Inherited from KubeApi.getWatchUrl

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1459,7 +1459,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Node[]›

Inherited from KubeApi.list

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1484,7 +1484,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

Inherited from KubeApi.normalizeQuery

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1507,7 +1507,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

Inherited from KubeApi.parseResponse

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1532,7 +1532,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

Inherited from KubeApi.refreshResourceVersion

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1554,7 +1554,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

Inherited from KubeApi.setResourceVersion

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1582,7 +1582,7 @@

update#

update(__namedParameters: object, data?: Partial‹Node›): Promise‹Node

Inherited from KubeApi.update

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1612,14 +1612,14 @@

watch#

watch(): function

Inherited from KubeApi.watch

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

Inherited from KubeApi.watchAll

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.nodesstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.nodesstore/index.html index 5d32b82528..fa3cb40f1e 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.nodesstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.nodesstore/index.html @@ -1360,97 +1360,97 @@

constructor#

+ new NodesStore(): NodesStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: NodesStore

Properties#

api#

api: NodesApi‹› = nodesApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+nodes/nodes.store.ts:9

+

Defined in src/renderer/components/+nodes/nodes.store.ts:9


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: Partial‹INodeMetrics›

-

Defined in src/renderer/components/+nodes/nodes.store.ts:11

+

Defined in src/renderer/components/+nodes/nodes.store.ts:11


metricsLoaded#

metricsLoaded: boolean = false

-

Defined in src/renderer/components/+nodes/nodes.store.ts:14

+

Defined in src/renderer/components/+nodes/nodes.store.ts:14


metricsLoading#

metricsLoading: boolean = false

-

Defined in src/renderer/components/+nodes/nodes.store.ts:13

+

Defined in src/renderer/components/+nodes/nodes.store.ts:13


nodeMetrics#

nodeMetrics: Partial‹IClusterMetrics› = null

-

Defined in src/renderer/components/+nodes/nodes.store.ts:12

+

Defined in src/renderer/components/+nodes/nodes.store.ts:12


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

masterNodes#

get masterNodes(): Node‹›[]

-

Defined in src/renderer/components/+nodes/nodes.store.ts:33

+

Defined in src/renderer/components/+nodes/nodes.store.ts:33

Returns: Node‹›[]


query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Node[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Node[]


workerNodes#

get workerNodes(): Node‹›[]

-

Defined in src/renderer/components/+nodes/nodes.store.ts:37

+

Defined in src/renderer/components/+nodes/nodes.store.ts:37

Returns: Node‹›[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1473,7 +1473,7 @@

create#

create(params: object, data?: Partial‹Node›): Promise‹Node

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1501,7 +1501,7 @@

createItem(params: object, data?: Partial‹Node›): Promise‹Node

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1528,7 +1528,7 @@

Protected defaultSorting#

defaultSorting(item: Node): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1549,7 +1549,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Node[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1570,7 +1570,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Node[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1598,7 +1598,7 @@

getByLabel#

getByLabel(labels: string[] | object): Node[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1620,7 +1620,7 @@

getByName(name: string, namespace?: string): Node

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1645,7 +1645,7 @@

getByPath#

getByPath(path: string): Node

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1665,7 +1665,7 @@

getLastMetricValues#

getLastMetricValues(node: Node, metricNames: string[]): number[]

-

Defined in src/renderer/components/+nodes/nodes.store.ts:41

+

Defined in src/renderer/components/+nodes/nodes.store.ts:41

Parameters:

@@ -1690,7 +1690,7 @@

Optional getStatuses#

getStatuses(items: Node[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1711,7 +1711,7 @@

isSelected#

isSelected(item: Node): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1732,7 +1732,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Node[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1755,7 +1755,7 @@

load#

load(params: object): Promise‹Node

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1782,13 +1782,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1810,7 +1810,7 @@

loadItem(params: object): Promise‹Node

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1837,7 +1837,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Node[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1857,7 +1857,7 @@

loadMetrics#

loadMetrics(nodeName: string): Promise‹void›

-

Defined in src/renderer/components/+nodes/nodes.store.ts:29

+

Defined in src/renderer/components/+nodes/nodes.store.ts:29

Parameters:

@@ -1877,13 +1877,13 @@

loadUsageMetrics#

loadUsageMetrics(): Promise‹void›

-

Defined in src/renderer/components/+nodes/nodes.store.ts:17

+

Defined in src/renderer/components/+nodes/nodes.store.ts:17

Returns: Promise‹void›


Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1904,7 +1904,7 @@

remove#

remove(item: Node): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1925,7 +1925,7 @@

Protected removeItem#

removeItem(item: Node, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Node

request: function

@@ -1936,25 +1936,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+nodes/nodes.store.ts:65

+

Defined in src/renderer/components/+nodes/nodes.store.ts:65

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Node): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1975,7 +1975,7 @@

Protected sortItems#

sortItems(items: Node[], sorting?: function[], order?: "asc" | "desc"): Node[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -2009,7 +2009,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -2032,7 +2032,7 @@

toggleSelection#

toggleSelection(item: Node): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -2053,7 +2053,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Node[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2076,7 +2076,7 @@

unselect#

unselect(item: Node): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2097,7 +2097,7 @@

update#

update(item: Node, data: Partial‹Node›): Promise‹Node

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2122,13 +2122,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Node, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Node

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolume/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolume/index.html index 2f8fdafd7d..8cd659ae14 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolume/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolume/index.html @@ -1197,7 +1197,7 @@

constructor#

+ new PersistentVolume(data: KubeJsonApiData): PersistentVolume

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1218,21 +1218,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:12

+

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:12

Type declaration:

@@ -1366,7 +1366,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1399,7 +1399,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1421,7 +1421,7 @@

getCapacity#

getCapacity(inBytes: boolean): string | number

-

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:48

+

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:48

Parameters:

@@ -1443,72 +1443,72 @@

getClaimRefName#

getClaimRefName(): string

-

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:66

+

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:66

Returns: string


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getStatus#

getStatus(): string

-

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:60

+

Defined in src/renderer/api/endpoints/persistent-volume.api.ts:60

Returns: string


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1531,7 +1531,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1552,7 +1552,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1573,7 +1573,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1594,7 +1594,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1615,7 +1615,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaim/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaim/index.html index 760a419cad..66255749d0 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaim/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaim/index.html @@ -1213,7 +1213,7 @@

constructor#

+ new PersistentVolumeClaim(data: KubeJsonApiData): PersistentVolumeClaim

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1234,21 +1234,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:30

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:30

Type declaration:

@@ -1333,7 +1333,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1366,7 +1366,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1389,52 +1389,52 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getMatchExpressions#

getMatchExpressions(): object[]

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:77

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:77

Returns: object[]


getMatchLabels#

getMatchLabels(): string[]

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:70

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:70

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getPods#

getPods(allPods: Pod[]): Pod[]

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:53

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:53

Parameters:

@@ -1455,35 +1455,35 @@

getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getStatus#

getStatus(): string

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:83

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:83

Returns: string


getStorage#

getStorage(): string

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:64

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:64

Returns: string


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1506,7 +1506,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1527,7 +1527,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1548,7 +1548,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1569,7 +1569,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1590,7 +1590,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaimsapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaimsapi/index.html index 2e6430cbe9..b7dfc9e096 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaimsapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumeclaimsapi/index.html @@ -1186,7 +1186,7 @@

constructor#

+ new PersistentVolumeClaimsApi(options: IKubeApiOptions‹PersistentVolumeClaim›): PersistentVolumeClaimsApi

Inherited from KubeApi.constructor

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1207,84 +1207,84 @@

apiBase#

apiBase: string

Inherited from KubeApi.apiBase

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

Inherited from KubeApi.apiGroup

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

Inherited from KubeApi.apiPrefix

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

Inherited from KubeApi.apiResource

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

Inherited from KubeApi.apiVersion

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

Inherited from KubeApi.apiVersionPreferred

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

Inherited from KubeApi.isNamespaced

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

Inherited from KubeApi.kind

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹PersistentVolumeClaim

Inherited from KubeApi.objectConstructor

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹PersistentVolumeClaim

Inherited from KubeApi.options

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

Inherited from KubeApi.request

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

Inherited from KubeApi.resourceVersions

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

Inherited from KubeApi.parseApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

Inherited from KubeApi.apiVersionWithGroup

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

Inherited from KubeApi.checkPreferredVersion

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹PersistentVolumeClaim›): Promise‹PersistentVolumeClaim

Inherited from KubeApi.create

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1314,7 +1314,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

Inherited from KubeApi.delete

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1343,7 +1343,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹PersistentVolumeClaim

Inherited from KubeApi.get

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1372,7 +1372,7 @@

getMetrics#

getMetrics(pvcName: string, namespace: string): Promise‹IPvcMetrics›

-

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:8

+

Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:8

Parameters:

@@ -1397,7 +1397,7 @@

getResourceVersion#

getResourceVersion(namespace: string): string

Inherited from KubeApi.getResourceVersion

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1420,7 +1420,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

Inherited from KubeApi.getUrl

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1450,7 +1450,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

Inherited from KubeApi.getWatchUrl

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1478,7 +1478,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹PersistentVolumeClaim[]›

Inherited from KubeApi.list

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1503,7 +1503,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

Inherited from KubeApi.normalizeQuery

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1526,7 +1526,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

Inherited from KubeApi.parseResponse

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1551,7 +1551,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

Inherited from KubeApi.refreshResourceVersion

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1573,7 +1573,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

Inherited from KubeApi.setResourceVersion

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1601,7 +1601,7 @@

update#

update(__namedParameters: object, data?: Partial‹PersistentVolumeClaim›): Promise‹PersistentVolumeClaim

Inherited from KubeApi.update

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1631,14 +1631,14 @@

watch#

watch(): function

Inherited from KubeApi.watch

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

Inherited from KubeApi.watchAll

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumesstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumesstore/index.html index 1cf5067e2b..15a5f6b8a3 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumesstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.persistentvolumesstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new PersistentVolumesStore(): PersistentVolumesStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: PersistentVolumesStore

Properties#

api#

api: KubeApiPersistentVolume‹›› = persistentVolumeApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+storage-volumes/volumes.store.ts:8

+

Defined in src/renderer/components/+storage-volumes/volumes.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): PersistentVolume[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: PersistentVolume[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹PersistentVolume›): Promise‹PersistentVolume

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹PersistentVolume›): Promise‹PersistentVolume

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: PersistentVolume): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: PersistentVolume[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): PersistentVolume[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): PersistentVolume[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): PersistentVolume

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): PersistentVolume

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: PersistentVolume[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: PersistentVolume): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: PersistentVolume[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹PersistentVolume

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹PersistentVolume

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹PersistentVolume[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: PersistentVolume): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: PersistentVolume, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: PersistentVolume

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: PersistentVolume): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: PersistentVolume[], sorting?: function[], order?: "asc" | "desc"): PersistentVolume[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: PersistentVolume): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: PersistentVolume[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: PersistentVolume): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: PersistentVolume, data: Partial‹PersistentVolume›): Promise‹PersistentVolume

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: PersistentVolume, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: PersistentVolume

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.pod/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.pod/index.html index 4a1aaeb1f5..2abc428e73 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.pod/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.pod/index.html @@ -1389,7 +1389,7 @@

constructor#

+ new Pod(data: KubeJsonApiData): Pod

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1410,22 +1410,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/pods.api.ts:179

+

Defined in src/renderer/api/endpoints/pods.api.ts:179

Type declaration:

@@ -1557,19 +1557,19 @@

getAffinity#

getAffinity(): IAffinity

Overrides Deployment.getAffinity

-

Defined in src/renderer/api/endpoints/pods.api.ts:380

+

Defined in src/renderer/api/endpoints/pods.api.ts:380

Returns: IAffinity


getAffinityNumber#

getAffinityNumber(): number

Inherited from Pod.getAffinityNumber

-

Defined in src/renderer/api/workload-kube-object.ts:78

+

Defined in src/renderer/api/workload-kube-object.ts:78

Returns: number


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1601,13 +1601,13 @@

getAllContainers#

getAllContainers(): IPodContainer[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:245

+

Defined in src/renderer/api/endpoints/pods.api.ts:245

Returns: IPodContainer[]


getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1629,12 +1629,12 @@

getConditions#

getConditions(): object[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:354

+

Defined in src/renderer/api/endpoints/pods.api.ts:354

Returns: object[]


getContainerStatuses#

getContainerStatuses(includeInitContainers: boolean): IPodContainerStatus[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:258

+

Defined in src/renderer/api/endpoints/pods.api.ts:258

Parameters:

@@ -1656,35 +1656,35 @@

getContainers#

getContainers(): IPodContainer[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:241

+

Defined in src/renderer/api/endpoints/pods.api.ts:241

Returns: IPodContainer[]


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getInitContainers#

getInitContainers(): IPodContainer[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:237

+

Defined in src/renderer/api/endpoints/pods.api.ts:237

Returns: IPodContainer[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getLivenessProbe#

getLivenessProbe(container: IPodContainer): string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:401

+

Defined in src/renderer/api/endpoints/pods.api.ts:401

Parameters:

@@ -1705,40 +1705,40 @@

getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeName#

getNodeName(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:447

+

Defined in src/renderer/api/endpoints/pods.api.ts:447

Returns: string


getNodeSelectors#

getNodeSelectors(): string[]

Overrides Deployment.getNodeSelectors

-

Defined in src/renderer/api/endpoints/pods.api.ts:368

+

Defined in src/renderer/api/endpoints/pods.api.ts:368

Returns: string[]


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getPriorityClassName#

getPriorityClassName(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:289

+

Defined in src/renderer/api/endpoints/pods.api.ts:289

Returns: string


getProbe#

getProbe(probeData: IContainerProbe): string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:409

+

Defined in src/renderer/api/endpoints/pods.api.ts:409

Parameters:

@@ -1758,12 +1758,12 @@

getQosClass#

getQosClass(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:281

+

Defined in src/renderer/api/endpoints/pods.api.ts:281

Returns: string


getReadinessProbe#

getReadinessProbe(container: IPodContainer): string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:405

+

Defined in src/renderer/api/endpoints/pods.api.ts:405

Parameters:

@@ -1783,94 +1783,94 @@

getReason#

getReason(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:285

+

Defined in src/renderer/api/endpoints/pods.api.ts:285

Returns: string


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getRestartsCount#

getRestartsCount(): number

-

Defined in src/renderer/api/endpoints/pods.api.ts:273

+

Defined in src/renderer/api/endpoints/pods.api.ts:273

Returns: number


getRunningContainers#

getRunningContainers(): IPodContainer[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:249

+

Defined in src/renderer/api/endpoints/pods.api.ts:249

Returns: IPodContainer[]


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSecrets#

getSecrets(): string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:362

+

Defined in src/renderer/api/endpoints/pods.api.ts:362

Returns: string[]


getSelectedNodeOs#

getSelectedNodeOs(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:451

+

Defined in src/renderer/api/endpoints/pods.api.ts:451

Returns: string


getSelectors#

getSelectors(): string[]

Inherited from Pod.getSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:52

+

Defined in src/renderer/api/workload-kube-object.ts:52

Returns: string[]


getStatus#

getStatus(): FAILED | PENDING | RUNNING | SUCCEEDED | EVICTED

-

Defined in src/renderer/api/endpoints/pods.api.ts:294

+

Defined in src/renderer/api/endpoints/pods.api.ts:294

Returns: FAILED | PENDING | RUNNING | SUCCEEDED | EVICTED


getStatusMessage#

getStatusMessage(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:321

+

Defined in src/renderer/api/endpoints/pods.api.ts:321

Returns: string


getStatusPhase#

getStatusPhase(): string

-

Defined in src/renderer/api/endpoints/pods.api.ts:350

+

Defined in src/renderer/api/endpoints/pods.api.ts:350

Returns: string


getTemplateLabels#

getTemplateLabels(): string[]

Inherited from Pod.getTemplateLabels

-

Defined in src/renderer/api/workload-kube-object.ts:64

+

Defined in src/renderer/api/workload-kube-object.ts:64

Returns: string[]


getTolerations#

getTolerations(): object[]

Overrides Deployment.getTolerations

-

Defined in src/renderer/api/endpoints/pods.api.ts:376

+

Defined in src/renderer/api/endpoints/pods.api.ts:376

Returns: object[]


getVolumes#

getVolumes(): object[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:358

+

Defined in src/renderer/api/endpoints/pods.api.ts:358

Returns: object[]


hasIssues#

hasIssues(): boolean

-

Defined in src/renderer/api/endpoints/pods.api.ts:384

+

Defined in src/renderer/api/endpoints/pods.api.ts:384

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1893,7 +1893,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1914,7 +1914,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1935,7 +1935,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1956,7 +1956,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1977,7 +1977,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudget/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudget/index.html index 7c833866e7..073a029f85 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudget/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudget/index.html @@ -1213,7 +1213,7 @@

constructor#

+ new PodDisruptionBudget(data: KubeJsonApiData): PodDisruptionBudget

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1234,21 +1234,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:11

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:11

Type declaration:

@@ -1329,7 +1329,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1362,7 +1362,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1384,87 +1384,87 @@

getCurrentHealthy#

getCurrentHealthy(): number

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:37

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:37

Returns: number


getDesiredHealthy#

getDesiredHealthy(): number

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:41

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:41

Returns: number


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getMaxUnavailable#

getMaxUnavailable(): string

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:33

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:33

Returns: string


getMinAvailable#

getMinAvailable(): string

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:29

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:29

Returns: string


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSelectors#

getSelectors(): string[]

-

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:23

+

Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:23

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1487,7 +1487,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1508,7 +1508,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1529,7 +1529,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1550,7 +1550,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1571,7 +1571,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudgetsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudgetsstore/index.html index 5d7c674531..8c01c358fb 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudgetsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.poddisruptionbudgetsstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new PodDisruptionBudgetsStore(): PodDisruptionBudgetsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: PodDisruptionBudgetsStore

Properties#

api#

api: KubeApiPodDisruptionBudget‹›› = pdbApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.store.ts:8

+

Defined in src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): PodDisruptionBudget[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: PodDisruptionBudget[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹PodDisruptionBudget›): Promise‹PodDisruptionBudget

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹PodDisruptionBudget›): Promise‹PodDisruptionBudget

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: PodDisruptionBudget): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: PodDisruptionBudget[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): PodDisruptionBudget[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): PodDisruptionBudget[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): PodDisruptionBudget

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): PodDisruptionBudget

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: PodDisruptionBudget[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: PodDisruptionBudget): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: PodDisruptionBudget[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹PodDisruptionBudget

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹PodDisruptionBudget

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹PodDisruptionBudget[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: PodDisruptionBudget): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: PodDisruptionBudget, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: PodDisruptionBudget

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: PodDisruptionBudget): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: PodDisruptionBudget[], sorting?: function[], order?: "asc" | "desc"): PodDisruptionBudget[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: PodDisruptionBudget): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: PodDisruptionBudget[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: PodDisruptionBudget): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: PodDisruptionBudget, data: Partial‹PodDisruptionBudget›): Promise‹PodDisruptionBudget

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: PodDisruptionBudget, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: PodDisruptionBudget

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.podsapi/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.podsapi/index.html index 75f824065a..6bd7b160cf 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.podsapi/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.podsapi/index.html @@ -1194,7 +1194,7 @@

constructor#

+ new PodsApi(options: IKubeApiOptions‹Pod›): PodsApi

Inherited from KubeApi.constructor

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102

Parameters:

@@ -1215,84 +1215,84 @@

apiBase#

apiBase: string

Inherited from KubeApi.apiBase

-

Defined in src/renderer/api/kube-api.ts:92

+

Defined in src/renderer/api/kube-api.ts:92


apiGroup#

apiGroup: string

Inherited from KubeApi.apiGroup

-

Defined in src/renderer/api/kube-api.ts:94

+

Defined in src/renderer/api/kube-api.ts:94


apiPrefix#

apiPrefix: string

Inherited from KubeApi.apiPrefix

-

Defined in src/renderer/api/kube-api.ts:93

+

Defined in src/renderer/api/kube-api.ts:93


apiResource#

apiResource: string

Inherited from KubeApi.apiResource

-

Defined in src/renderer/api/kube-api.ts:97

+

Defined in src/renderer/api/kube-api.ts:97


apiVersion#

apiVersion: string

Inherited from KubeApi.apiVersion

-

Defined in src/renderer/api/kube-api.ts:95

+

Defined in src/renderer/api/kube-api.ts:95


Optional apiVersionPreferred#

apiVersionPreferred? : string

Inherited from KubeApi.apiVersionPreferred

-

Defined in src/renderer/api/kube-api.ts:96

+

Defined in src/renderer/api/kube-api.ts:96


isNamespaced#

isNamespaced: boolean

Inherited from KubeApi.isNamespaced

-

Defined in src/renderer/api/kube-api.ts:98

+

Defined in src/renderer/api/kube-api.ts:98


kind#

kind: string

Inherited from KubeApi.kind

-

Defined in src/renderer/api/kube-api.ts:91

+

Defined in src/renderer/api/kube-api.ts:91


objectConstructor#

objectConstructor: IKubeObjectConstructor‹Pod

Inherited from KubeApi.objectConstructor

-

Defined in src/renderer/api/kube-api.ts:100

+

Defined in src/renderer/api/kube-api.ts:100


Protected options#

options: IKubeApiOptions‹Pod

Inherited from KubeApi.options

-

Defined in src/renderer/api/kube-api.ts:104

+

Defined in src/renderer/api/kube-api.ts:104


Protected request#

request: KubeJsonApi

Inherited from KubeApi.request

-

Defined in src/renderer/api/kube-api.ts:101

+

Defined in src/renderer/api/kube-api.ts:101


Protected resourceVersions#

resourceVersions: Map‹string, string› = new Map()

Inherited from KubeApi.resourceVersions

-

Defined in src/renderer/api/kube-api.ts:102

+

Defined in src/renderer/api/kube-api.ts:102


Static parseApi#

parseApi: parseKubeApi = parseKubeApi

Inherited from KubeApi.parseApi

-

Defined in src/renderer/api/kube-api.ts:83

+

Defined in src/renderer/api/kube-api.ts:83

Accessors#

apiVersionWithGroup#

get apiVersionWithGroup(): string

Inherited from KubeApi.apiVersionWithGroup

-

Defined in src/renderer/api/kube-api.ts:132

+

Defined in src/renderer/api/kube-api.ts:132

Returns: string

Methods#

Protected checkPreferredVersion#

checkPreferredVersion(): Promise‹void›

Inherited from KubeApi.checkPreferredVersion

-

Defined in src/renderer/api/kube-api.ts:194

+

Defined in src/renderer/api/kube-api.ts:194

Returns: Promise‹void›


create#

create(__namedParameters: object, data?: Partial‹Pod›): Promise‹Pod

Inherited from KubeApi.create

-

Defined in src/renderer/api/kube-api.ts:304

+

Defined in src/renderer/api/kube-api.ts:304

Parameters:

Default value __namedParameters: object= {}

@@ -1322,7 +1322,7 @@

delete#

delete(__namedParameters: object): Promise‹KubeJsonApiData›

Inherited from KubeApi.delete

-

Defined in src/renderer/api/kube-api.ts:331

+

Defined in src/renderer/api/kube-api.ts:331

Parameters:

__namedParameters: object

@@ -1351,7 +1351,7 @@

get#

get(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Pod

Inherited from KubeApi.get

-

Defined in src/renderer/api/kube-api.ts:296

+

Defined in src/renderer/api/kube-api.ts:296

Parameters:

Default value __namedParameters: object= {}

@@ -1380,7 +1380,7 @@

getLogs#

getLogs(params: object, query?: IPodLogsQuery): Promise‹string›

-

Defined in src/renderer/api/endpoints/pods.api.ts:7

+

Defined in src/renderer/api/endpoints/pods.api.ts:7

Parameters:

params: object

@@ -1406,7 +1406,7 @@

getMetrics#

getMetrics(pods: Pod[], namespace: string, selector: string): Promise‹IPodMetrics›

-

Defined in src/renderer/api/endpoints/pods.api.ts:13

+

Defined in src/renderer/api/endpoints/pods.api.ts:13

Parameters:

@@ -1439,7 +1439,7 @@

getResourceVersion#

getResourceVersion(namespace: string): string

Inherited from KubeApi.getResourceVersion

-

Defined in src/renderer/api/kube-api.ts:227

+

Defined in src/renderer/api/kube-api.ts:227

Parameters:

@@ -1462,7 +1462,7 @@

getUrl#

getUrl(__namedParameters: object, query?: Partial‹IKubeApiQueryParams›): string

Inherited from KubeApi.getUrl

-

Defined in src/renderer/api/kube-api.ts:235

+

Defined in src/renderer/api/kube-api.ts:235

Parameters:

Default value __namedParameters: object= {}

@@ -1492,7 +1492,7 @@

getWatchUrl#

getWatchUrl(namespace: string, query: IKubeApiQueryParams): string

Inherited from KubeApi.getWatchUrl

-

Defined in src/renderer/api/kube-api.ts:338

+

Defined in src/renderer/api/kube-api.ts:338

Parameters:

@@ -1520,7 +1520,7 @@

list#

list(__namedParameters: object, query?: IKubeApiQueryParams): Promise‹Pod[]›

Inherited from KubeApi.list

-

Defined in src/renderer/api/kube-api.ts:288

+

Defined in src/renderer/api/kube-api.ts:288

Parameters:

Default value __namedParameters: object= {}

@@ -1545,7 +1545,7 @@

Protected normalizeQuery#

normalizeQuery(query: Partial‹IKubeApiQueryParams›): object

Inherited from KubeApi.normalizeQuery

-

Defined in src/renderer/api/kube-api.ts:247

+

Defined in src/renderer/api/kube-api.ts:247

Parameters:

@@ -1568,7 +1568,7 @@

Protected parseResponse#

parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any

Inherited from KubeApi.parseResponse

-

Defined in src/renderer/api/kube-api.ts:259

+

Defined in src/renderer/api/kube-api.ts:259

Parameters:

@@ -1593,7 +1593,7 @@

refreshResourceVersion#

refreshResourceVersion(params?: object): Promise‹T[]›

Inherited from KubeApi.refreshResourceVersion

-

Defined in src/renderer/api/kube-api.ts:231

+

Defined in src/renderer/api/kube-api.ts:231

Parameters:

Optional params: object

@@ -1615,7 +1615,7 @@

setResourceVersion#

setResourceVersion(namespace: string, newVersion: string): void

Inherited from KubeApi.setResourceVersion

-

Defined in src/renderer/api/kube-api.ts:223

+

Defined in src/renderer/api/kube-api.ts:223

Parameters:

@@ -1643,7 +1643,7 @@

update#

update(__namedParameters: object, data?: Partial‹Pod›): Promise‹Pod

Inherited from KubeApi.update

-

Defined in src/renderer/api/kube-api.ts:322

+

Defined in src/renderer/api/kube-api.ts:322

Parameters:

Default value __namedParameters: object= {}

@@ -1673,14 +1673,14 @@

watch#

watch(): function

Inherited from KubeApi.watch

-

Defined in src/renderer/api/kube-api.ts:346

+

Defined in src/renderer/api/kube-api.ts:346

Returns: function

▸ (): void


Static watchAll#

watchAll(...apis: KubeApi[]): (Anonymous function)

Inherited from KubeApi.watchAll

-

Defined in src/renderer/api/kube-api.ts:85

+

Defined in src/renderer/api/kube-api.ts:85

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.podsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.podsstore/index.html index 4599c1ac48..e16c91d737 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.podsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.podsstore/index.html @@ -1352,79 +1352,79 @@

constructor#

+ new PodsStore(): PodsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: PodsStore

Properties#

api#

api: PodsApi‹› = podsApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:11

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:11


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


kubeMetrics#

kubeMetrics: IObservableArray‹PodMetrics‹›› = observable.array([])

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:14

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:14


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPodMetrics = null

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:13

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:13


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Pod[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Pod[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1447,7 +1447,7 @@

create#

create(params: object, data?: Partial‹Pod›): Promise‹Pod

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1475,7 +1475,7 @@

createItem(params: object, data?: Partial‹Pod›): Promise‹Pod

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1502,7 +1502,7 @@

Protected defaultSorting#

defaultSorting(item: Pod): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1523,7 +1523,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Pod[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1544,7 +1544,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Pod[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1572,7 +1572,7 @@

getByLabel#

getByLabel(labels: string[] | object): Pod[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1594,7 +1594,7 @@

getByName(name: string, namespace?: string): Pod

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1619,7 +1619,7 @@

getByPath#

getByPath(path: string): Pod

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1639,7 +1639,7 @@

getPodKubeMetrics#

getPodKubeMetrics(pod: Pod): object

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:53

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:53

Parameters:

@@ -1667,7 +1667,7 @@

getPodsByNode#

getPodsByNode(node: string): Pod‹›[]

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:43

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:43

Parameters:

@@ -1687,7 +1687,7 @@

getPodsByOwner#

getPodsByOwner(workload: WorkloadKubeObject): Pod[]

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:31

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:31

Parameters:

@@ -1708,7 +1708,7 @@

getStatuses#

getStatuses(pods: Pod[]): Dictionary‹number›

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:49

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:49

Parameters:

@@ -1729,7 +1729,7 @@

isSelected#

isSelected(item: Pod): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1750,7 +1750,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Pod[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1773,7 +1773,7 @@

load#

load(params: object): Promise‹Pod

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1800,12 +1800,12 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadContainerMetrics#

loadContainerMetrics(pod: Pod): Promise‹IPodMetrics‹IMetrics››

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:21

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:21

Parameters:

@@ -1826,7 +1826,7 @@

loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1848,7 +1848,7 @@

loadItem(params: object): Promise‹Pod

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1875,7 +1875,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Pod[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1895,7 +1895,7 @@

loadKubeMetrics#

loadKubeMetrics(namespace?: string): Promise‹void›

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:25

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:25

Parameters:

@@ -1915,7 +1915,7 @@

loadMetrics#

loadMetrics(pod: Pod): Promise‹void›

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:17

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:17

Parameters:

@@ -1936,7 +1936,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1957,7 +1957,7 @@

remove#

remove(item: Pod): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1978,7 +1978,7 @@

Protected removeItem#

removeItem(item: Pod, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Pod

request: function

@@ -1989,25 +1989,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+workloads-pods/pods.store.ts:82

+

Defined in src/renderer/components/+workloads-pods/pods.store.ts:82

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Pod): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -2028,7 +2028,7 @@

Protected sortItems#

sortItems(items: Pod[], sorting?: function[], order?: "asc" | "desc"): Pod[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -2062,7 +2062,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -2085,7 +2085,7 @@

toggleSelection#

toggleSelection(item: Pod): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -2106,7 +2106,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Pod[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2129,7 +2129,7 @@

unselect#

unselect(item: Pod): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2150,7 +2150,7 @@

update#

update(item: Pod, data: Partial‹Pod›): Promise‹Pod

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2175,13 +2175,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Pod, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Pod

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.replicaset/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.replicaset/index.html index 38b9295df7..ff97728837 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.replicaset/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.replicaset/index.html @@ -1229,7 +1229,7 @@

constructor#

+ new ReplicaSet(data: KubeJsonApiData): ReplicaSet

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1250,22 +1250,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/replica-set.api.ts:13

+

Defined in src/renderer/api/endpoints/replica-set.api.ts:13

Type declaration:

@@ -1381,19 +1381,19 @@

getAffinity#

getAffinity(): IAffinity

Inherited from Deployment.getAffinity

-

Defined in src/renderer/api/workload-kube-object.ts:74

+

Defined in src/renderer/api/workload-kube-object.ts:74

Returns: IAffinity


getAffinityNumber#

getAffinityNumber(): number

Inherited from Pod.getAffinityNumber

-

Defined in src/renderer/api/workload-kube-object.ts:78

+

Defined in src/renderer/api/workload-kube-object.ts:78

Returns: number


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1426,7 +1426,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1449,90 +1449,90 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getImages#

getImages(): string[]

-

Defined in src/renderer/api/endpoints/replica-set.api.ts:49

+

Defined in src/renderer/api/endpoints/replica-set.api.ts:49

Returns: string[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeSelectors#

getNodeSelectors(): string[]

Inherited from Deployment.getNodeSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:58

+

Defined in src/renderer/api/workload-kube-object.ts:58

Returns: string[]


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSelectors#

getSelectors(): string[]

Inherited from Pod.getSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:52

+

Defined in src/renderer/api/workload-kube-object.ts:52

Returns: string[]


getTemplateLabels#

getTemplateLabels(): string[]

Inherited from Pod.getTemplateLabels

-

Defined in src/renderer/api/workload-kube-object.ts:64

+

Defined in src/renderer/api/workload-kube-object.ts:64

Returns: string[]


getTolerations#

getTolerations(): IToleration[]

Inherited from Deployment.getTolerations

-

Defined in src/renderer/api/workload-kube-object.ts:70

+

Defined in src/renderer/api/workload-kube-object.ts:70

Returns: IToleration[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1555,7 +1555,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1576,7 +1576,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1597,7 +1597,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1618,7 +1618,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1639,7 +1639,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.replicasetstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.replicasetstore/index.html index 5a7c3a3193..589a351ca6 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.replicasetstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.replicasetstore/index.html @@ -1320,75 +1320,75 @@

constructor#

+ new ReplicaSetStore(): ReplicaSetStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: ReplicaSetStore

Properties#

api#

api: KubeApiReplicaSet‹›› = replicaSetApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:10

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPodMetrics = null

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:11

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:11


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): ReplicaSet[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: ReplicaSet[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1411,7 +1411,7 @@

create#

create(params: object, data?: Partial‹ReplicaSet›): Promise‹ReplicaSet

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1439,7 +1439,7 @@

createItem(params: object, data?: Partial‹ReplicaSet›): Promise‹ReplicaSet

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1466,7 +1466,7 @@

Protected defaultSorting#

defaultSorting(item: ReplicaSet): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1487,7 +1487,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: ReplicaSet[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1508,7 +1508,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): ReplicaSet[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1536,7 +1536,7 @@

getByLabel#

getByLabel(labels: string[] | object): ReplicaSet[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1558,7 +1558,7 @@

getByName(name: string, namespace?: string): ReplicaSet

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1583,7 +1583,7 @@

getByPath#

getByPath(path: string): ReplicaSet

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1603,7 +1603,7 @@

getChildPods#

getChildPods(replicaSet: ReplicaSet): Pod‹›[]

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:19

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:19

Parameters:

@@ -1623,7 +1623,7 @@

getReplicaSetsByOwner#

getReplicaSetsByOwner(deployment: Deployment): ReplicaSet‹›[]

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:23

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:23

Parameters:

@@ -1644,7 +1644,7 @@

Optional getStatuses#

getStatuses(items: ReplicaSet[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1665,7 +1665,7 @@

isSelected#

isSelected(item: ReplicaSet): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1686,7 +1686,7 @@

isSelectedAll#

isSelectedAll(visibleItems: ReplicaSet[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1709,7 +1709,7 @@

load#

load(params: object): Promise‹ReplicaSet

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1736,13 +1736,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1764,7 +1764,7 @@

loadItem(params: object): Promise‹ReplicaSet

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1791,7 +1791,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹ReplicaSet[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1811,7 +1811,7 @@

loadMetrics#

loadMetrics(replicaSet: ReplicaSet): Promise‹void›

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:13

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:13

Parameters:

@@ -1832,7 +1832,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1853,7 +1853,7 @@

remove#

remove(item: ReplicaSet): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1874,7 +1874,7 @@

Protected removeItem#

removeItem(item: ReplicaSet, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: ReplicaSet

request: function

@@ -1885,25 +1885,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:29

+

Defined in src/renderer/components/+workloads-replicasets/replicasets.store.ts:29

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: ReplicaSet): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1924,7 +1924,7 @@

Protected sortItems#

sortItems(items: ReplicaSet[], sorting?: function[], order?: "asc" | "desc"): ReplicaSet[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1958,7 +1958,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1981,7 +1981,7 @@

toggleSelection#

toggleSelection(item: ReplicaSet): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -2002,7 +2002,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: ReplicaSet[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2025,7 +2025,7 @@

unselect#

unselect(item: ReplicaSet): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2046,7 +2046,7 @@

update#

update(item: ReplicaSet, data: Partial‹ReplicaSet›): Promise‹ReplicaSet

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2071,13 +2071,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: ReplicaSet, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: ReplicaSet

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequota/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequota/index.html index 1160a8434b..50ba57b2c3 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequota/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequota/index.html @@ -1181,7 +1181,7 @@

constructor#

+ new ResourceQuota(data: KubeJsonApiData): ResourceQuota

Overrides KubeObject.constructor

-

Defined in src/renderer/api/endpoints/resource-quota.api.ts:36

+

Defined in src/renderer/api/endpoints/resource-quota.api.ts:36

Parameters:

@@ -1202,21 +1202,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/resource-quota.api.ts:43

+

Defined in src/renderer/api/endpoints/resource-quota.api.ts:43

Type declaration:

@@ -1288,7 +1288,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1321,7 +1321,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1344,66 +1344,66 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getScopeSelector#

getScopeSelector(): object[]

-

Defined in src/renderer/api/endpoints/resource-quota.api.ts:59

+

Defined in src/renderer/api/endpoints/resource-quota.api.ts:59

Returns: object[]


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1426,7 +1426,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1447,7 +1447,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1468,7 +1468,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1489,7 +1489,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1510,7 +1510,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequotasstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequotasstore/index.html index fe2979e2d8..73e0bd7a67 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequotasstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.resourcequotasstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new ResourceQuotasStore(): ResourceQuotasStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: ResourceQuotasStore

Properties#

api#

api: KubeApiResourceQuota‹›› = resourceQuotaApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+config-resource-quotas/resource-quotas.store.ts:8

+

Defined in src/renderer/components/+config-resource-quotas/resource-quotas.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): ResourceQuota[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: ResourceQuota[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹ResourceQuota›): Promise‹ResourceQuota

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹ResourceQuota›): Promise‹ResourceQuota

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: ResourceQuota): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: ResourceQuota[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): ResourceQuota[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): ResourceQuota[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): ResourceQuota

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): ResourceQuota

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: ResourceQuota[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: ResourceQuota): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: ResourceQuota[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹ResourceQuota

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹ResourceQuota

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹ResourceQuota[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: ResourceQuota): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: ResourceQuota, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: ResourceQuota

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: ResourceQuota): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: ResourceQuota[], sorting?: function[], order?: "asc" | "desc"): ResourceQuota[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: ResourceQuota): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: ResourceQuota[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: ResourceQuota): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: ResourceQuota, data: Partial‹ResourceQuota›): Promise‹ResourceQuota

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: ResourceQuota, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: ResourceQuota

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.role/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.role/index.html index 2f72333558..73103bf202 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.role/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.role/index.html @@ -1182,7 +1182,7 @@

constructor#

+ new Role(data: KubeJsonApiData): Role

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1203,51 +1203,51 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


rules#

rules: object[]

-

Defined in src/renderer/api/endpoints/role.api.ts:9

+

Defined in src/renderer/api/endpoints/role.api.ts:9


Optional status#

status? : any

Inherited from KubeObject.status

-

Defined in src/renderer/api/kube-object.ts:79

+

Defined in src/renderer/api/kube-object.ts:79


Static apiBase#

apiBase: string = "/apis/rbac.authorization.k8s.io/v1/roles"

-

Defined in src/renderer/api/endpoints/role.api.ts:7

+

Defined in src/renderer/api/endpoints/role.api.ts:7


Static kind#

kind: string = "Role"

Overrides KubeObject.kind

-

Defined in src/renderer/api/endpoints/role.api.ts:5

+

Defined in src/renderer/api/endpoints/role.api.ts:5


Static namespaced#

namespaced: boolean = true

Overrides KubeObject.namespaced

-

Defined in src/renderer/api/endpoints/role.api.ts:6

+

Defined in src/renderer/api/endpoints/role.api.ts:6

Accessors#

get selfLink(): string

Inherited from KubeObject.selfLink

-

Defined in src/renderer/api/kube-object.ts:81

+

Defined in src/renderer/api/kube-object.ts:81

Returns: string

Methods#

delete#

delete(params?: JsonApiParams): CancelablePromise‹KubeJsonApiData›

Inherited from KubeObject.delete

-

Defined in src/renderer/api/kube-object.ts:167

+

Defined in src/renderer/api/kube-object.ts:167

Parameters:

@@ -1268,7 +1268,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1301,7 +1301,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1324,66 +1324,66 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getRules#

getRules(): object[]

-

Defined in src/renderer/api/endpoints/role.api.ts:16

+

Defined in src/renderer/api/endpoints/role.api.ts:16

Returns: object[]


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1406,7 +1406,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1427,7 +1427,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1448,7 +1448,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1469,7 +1469,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1490,7 +1490,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.rolebinding/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.rolebinding/index.html index a1111f9984..6f4c6df720 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.rolebinding/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.rolebinding/index.html @@ -1198,7 +1198,7 @@

constructor#

+ new RoleBinding(data: KubeJsonApiData): RoleBinding

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1219,21 +1219,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


roleRef#

roleRef: object

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:19

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:19

Type declaration:

@@ -1300,7 +1300,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1333,7 +1333,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1356,71 +1356,71 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSubjectNames#

getSubjectNames(): string

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:29

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:29

Returns: string


getSubjects#

getSubjects(): IRoleBindingSubject[]

-

Defined in src/renderer/api/endpoints/role-binding.api.ts:25

+

Defined in src/renderer/api/endpoints/role-binding.api.ts:25

Returns: IRoleBindingSubject[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1443,7 +1443,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1464,7 +1464,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1485,7 +1485,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1506,7 +1506,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1527,7 +1527,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.rolebindingsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.rolebindingsstore/index.html index 3c7d167817..edc2198735 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.rolebindingsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.rolebindingsstore/index.html @@ -1296,71 +1296,71 @@

constructor#

+ new RoleBindingsStore(): RoleBindingsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: RoleBindingsStore

Properties#

api#

api: KubeApiClusterRoleBinding‹›› = clusterRoleBindingApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:10

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): RoleBinding[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: RoleBinding[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1383,7 +1383,7 @@

create#

create(params: object, data?: Partial‹RoleBinding›): Promise‹RoleBinding

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1410,7 +1410,7 @@

Protected createItem#

createItem(params: object, data?: Partial‹RoleBinding›): Promise‹RoleBinding‹››

Overrides KubeObjectStore.createItem

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:40

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:40

Parameters:

params: object

@@ -1437,7 +1437,7 @@

Protected defaultSorting#

defaultSorting(item: RoleBinding): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1458,7 +1458,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: RoleBinding[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1479,7 +1479,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): RoleBinding[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1507,7 +1507,7 @@

getByLabel#

getByLabel(labels: string[] | object): RoleBinding[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1529,7 +1529,7 @@

getByName(name: string, namespace?: string): RoleBinding

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1554,7 +1554,7 @@

getByPath#

getByPath(path: string): RoleBinding

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1575,7 +1575,7 @@

Optional getStatuses#

getStatuses(items: RoleBinding[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1596,7 +1596,7 @@

isSelected#

isSelected(item: RoleBinding): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1617,7 +1617,7 @@

isSelectedAll#

isSelectedAll(visibleItems: RoleBinding[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1640,7 +1640,7 @@

load#

load(params: object): Promise‹RoleBinding

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1667,13 +1667,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1694,7 +1694,7 @@

Protected loadItem#

loadItem(params: object): Promise‹RoleBinding‹››

Overrides KubeObjectStore.loadItem

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:23

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:23

Parameters:

params: object

@@ -1720,7 +1720,7 @@

Protected loadItems#

loadItems(namespaces?: string[]): Promise‹RoleBinding‹›[]›

Overrides KubeObjectStore.loadItems

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:29

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:29

Parameters:

@@ -1741,7 +1741,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1762,7 +1762,7 @@

remove#

remove(item: RoleBinding): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1783,7 +1783,7 @@

Protected removeItem#

removeItem(item: RoleBinding, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: RoleBinding

request: function

@@ -1794,25 +1794,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: RoleBinding): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1833,7 +1833,7 @@

Protected sortItems#

sortItems(items: RoleBinding[]): RoleBinding‹›[]

Overrides KubeObjectStore.sortItems

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:16

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:16

Parameters:

@@ -1854,13 +1854,13 @@

subscribe#

subscribe(): (Anonymous function)

Overrides KubeObjectStore.subscribe

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:12

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:12

Returns: (Anonymous function)


toggleSelection#

toggleSelection(item: RoleBinding): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1881,7 +1881,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: RoleBinding[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1904,7 +1904,7 @@

unselect#

unselect(item: RoleBinding): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1925,7 +1925,7 @@

update#

update(item: RoleBinding, data: Partial‹RoleBinding›): Promise‹RoleBinding

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1950,13 +1950,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: RoleBinding, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: RoleBinding

request: function

@@ -1965,7 +1965,7 @@

updateSubjects#

updateSubjects(params: object): Promise‹RoleBinding‹››

-

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:48

+

Defined in src/renderer/components/+user-management-roles-bindings/role-bindings.store.ts:48

Parameters:

params: object

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.rolesstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.rolesstore/index.html index d2340f79d5..ae561b37b4 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.rolesstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.rolesstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new RolesStore(): RolesStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: RolesStore

Properties#

api#

api: KubeApiClusterRole‹›› = clusterRoleApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:8

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Role[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Role[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹Role›): Promise‹Role

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1402,7 +1402,7 @@

Protected createItem#

createItem(params: object, data?: Partial‹Role›): Promise‹Role‹››

Overrides KubeObjectStore.createItem

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:38

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:38

Parameters:

params: object

@@ -1429,7 +1429,7 @@

Protected defaultSorting#

defaultSorting(item: Role): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1450,7 +1450,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Role[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1471,7 +1471,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Role[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1499,7 +1499,7 @@

getByLabel#

getByLabel(labels: string[] | object): Role[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1521,7 +1521,7 @@

getByName(name: string, namespace?: string): Role

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1546,7 +1546,7 @@

getByPath#

getByPath(path: string): Role

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1567,7 +1567,7 @@

Optional getStatuses#

getStatuses(items: Role[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1588,7 +1588,7 @@

isSelected#

isSelected(item: Role): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1609,7 +1609,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Role[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1632,7 +1632,7 @@

load#

load(params: object): Promise‹Role

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1659,13 +1659,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1686,7 +1686,7 @@

Protected loadItem#

loadItem(params: object): Promise‹Role‹››

Overrides KubeObjectStore.loadItem

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:21

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:21

Parameters:

params: object

@@ -1712,7 +1712,7 @@

Protected loadItems#

loadItems(namespaces?: string[]): Promise‹Role[]›

Overrides KubeObjectStore.loadItems

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:27

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:27

Parameters:

@@ -1733,7 +1733,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1754,7 +1754,7 @@

remove#

remove(item: Role): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1775,7 +1775,7 @@

Protected removeItem#

removeItem(item: Role, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Role

request: function

@@ -1786,25 +1786,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Role): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1825,7 +1825,7 @@

Protected sortItems#

sortItems(items: Role[]): Role‹›[]

Overrides KubeObjectStore.sortItems

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:14

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:14

Parameters:

@@ -1846,13 +1846,13 @@

subscribe#

subscribe(): (Anonymous function)

Overrides KubeObjectStore.subscribe

-

Defined in src/renderer/components/+user-management-roles/roles.store.ts:10

+

Defined in src/renderer/components/+user-management-roles/roles.store.ts:10

Returns: (Anonymous function)


toggleSelection#

toggleSelection(item: Role): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1873,7 +1873,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Role[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1896,7 +1896,7 @@

unselect#

unselect(item: Role): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1917,7 +1917,7 @@

update#

update(item: Role, data: Partial‹Role›): Promise‹Role

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1942,13 +1942,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Role, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Role

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.secret/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.secret/index.html index f493b5e316..0baa8383e7 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.secret/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.secret/index.html @@ -1197,7 +1197,7 @@

constructor#

+ new Secret(data: KubeJsonApiData): Secret

Overrides KubeObject.constructor

-

Defined in src/renderer/api/endpoints/secret.api.ts:32

+

Defined in src/renderer/api/endpoints/secret.api.ts:32

Parameters:

@@ -1218,11 +1218,11 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


data#

data: object

-

Defined in src/renderer/api/endpoints/secret.api.ts:29

+

Defined in src/renderer/api/endpoints/secret.api.ts:29

Type declaration:

@@ -1296,7 +1296,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1329,7 +1329,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1352,71 +1352,71 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getKeys#

getKeys(): string[]

-

Defined in src/renderer/api/endpoints/secret.api.ts:39

+

Defined in src/renderer/api/endpoints/secret.api.ts:39

Returns: string[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getToken#

getToken(): string

-

Defined in src/renderer/api/endpoints/secret.api.ts:43

+

Defined in src/renderer/api/endpoints/secret.api.ts:43

Returns: string


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1439,7 +1439,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1460,7 +1460,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1481,7 +1481,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1502,7 +1502,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1523,7 +1523,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.secretsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.secretsstore/index.html index 2b1450d9f4..f43ebc61ab 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.secretsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.secretsstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new SecretsStore(): SecretsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: SecretsStore

Properties#

api#

api: KubeApiSecret‹›› = secretsApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+config-secrets/secrets.store.ts:8

+

Defined in src/renderer/components/+config-secrets/secrets.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Secret[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Secret[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹Secret›): Promise‹Secret

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹Secret›): Promise‹Secret

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: Secret): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Secret[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Secret[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): Secret[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): Secret

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): Secret

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: Secret[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: Secret): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Secret[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹Secret

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹Secret

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Secret[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: Secret): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: Secret, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Secret

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Secret): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: Secret[], sorting?: function[], order?: "asc" | "desc"): Secret[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: Secret): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Secret[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: Secret): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: Secret, data: Partial‹Secret›): Promise‹Secret

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Secret, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Secret

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.service/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.service/index.html index 47d5b3ebe2..b9fdda842e 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.service/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.service/index.html @@ -1237,7 +1237,7 @@

constructor#

+ new Service(data: KubeJsonApiData): Service

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1258,21 +1258,21 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

-

Defined in src/renderer/api/endpoints/service.api.ts:38

+

Defined in src/renderer/api/endpoints/service.api.ts:38

Type declaration:

@@ -1359,7 +1359,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1392,7 +1392,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1414,35 +1414,35 @@

getClusterIp#

getClusterIp(): string

-

Defined in src/renderer/api/endpoints/service.api.ts:58

+

Defined in src/renderer/api/endpoints/service.api.ts:58

Returns: string


getExternalIps#

getExternalIps(): string[]

-

Defined in src/renderer/api/endpoints/service.api.ts:62

+

Defined in src/renderer/api/endpoints/service.api.ts:62

Returns: string[]


getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getLoadBalancer#

getLoadBalancer(): object

-

Defined in src/renderer/api/endpoints/service.api.ts:88

+

Defined in src/renderer/api/endpoints/service.api.ts:88

Returns: object

@@ -1556,7 +1556,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1577,7 +1577,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1598,7 +1598,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1619,7 +1619,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccount/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccount/index.html index 68969968fc..d672380612 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccount/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccount/index.html @@ -1197,7 +1197,7 @@

constructor#

+ new ServiceAccount(data: KubeJsonApiData): ServiceAccount

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1218,55 +1218,55 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


Optional imagePullSecrets#

imagePullSecrets? : object[]

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:14

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:14


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


Optional secrets#

secrets? : object[]

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:11

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:11


Optional status#

status? : any

Inherited from KubeObject.status

-

Defined in src/renderer/api/kube-object.ts:79

+

Defined in src/renderer/api/kube-object.ts:79


Static apiBase#

apiBase: string = "/api/v1/serviceaccounts"

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:9

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:9


Static kind#

kind: string = "ServiceAccount"

Overrides KubeObject.kind

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:7

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:7


Static namespaced#

namespaced: boolean = true

Overrides KubeObject.namespaced

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:8

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:8

Accessors#

get selfLink(): string

Inherited from KubeObject.selfLink

-

Defined in src/renderer/api/kube-object.ts:81

+

Defined in src/renderer/api/kube-object.ts:81

Returns: string

Methods#

delete#

delete(params?: JsonApiParams): CancelablePromise‹KubeJsonApiData›

Inherited from KubeObject.delete

-

Defined in src/renderer/api/kube-object.ts:167

+

Defined in src/renderer/api/kube-object.ts:167

Parameters:

@@ -1287,7 +1287,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1320,7 +1320,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1343,71 +1343,71 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getImagePullSecrets#

getImagePullSecrets(): object[]

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:22

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:22

Returns: object[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSecrets#

getSecrets(): object[]

-

Defined in src/renderer/api/endpoints/service-accounts.api.ts:18

+

Defined in src/renderer/api/endpoints/service-accounts.api.ts:18

Returns: object[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1430,7 +1430,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1451,7 +1451,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1472,7 +1472,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1493,7 +1493,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1514,7 +1514,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccountsstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccountsstore/index.html index 36436c8b33..03210a4895 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccountsstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.serviceaccountsstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new ServiceAccountsStore(): ServiceAccountsStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: ServiceAccountsStore

Properties#

api#

api: KubeApiServiceAccount‹›› = serviceAccountsApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+user-management-service-accounts/service-accounts.store.ts:8

+

Defined in src/renderer/components/+user-management-service-accounts/service-accounts.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): ServiceAccount[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: ServiceAccount[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹ServiceAccount›): Promise‹ServiceAccount

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1402,7 +1402,7 @@

Protected createItem#

createItem(params: object): Promise‹ServiceAccount‹››

Overrides KubeObjectStore.createItem

-

Defined in src/renderer/components/+user-management-service-accounts/service-accounts.store.ts:10

+

Defined in src/renderer/components/+user-management-service-accounts/service-accounts.store.ts:10

Parameters:

params: object

@@ -1428,7 +1428,7 @@

Protected defaultSorting#

defaultSorting(item: ServiceAccount): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1449,7 +1449,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: ServiceAccount[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1470,7 +1470,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): ServiceAccount[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1498,7 +1498,7 @@

getByLabel#

getByLabel(labels: string[] | object): ServiceAccount[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1520,7 +1520,7 @@

getByName(name: string, namespace?: string): ServiceAccount

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1545,7 +1545,7 @@

getByPath#

getByPath(path: string): ServiceAccount

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1566,7 +1566,7 @@

Optional getStatuses#

getStatuses(items: ServiceAccount[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1587,7 +1587,7 @@

isSelected#

isSelected(item: ServiceAccount): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1608,7 +1608,7 @@

isSelectedAll#

isSelectedAll(visibleItems: ServiceAccount[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1631,7 +1631,7 @@

load#

load(params: object): Promise‹ServiceAccount

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1658,13 +1658,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1686,7 +1686,7 @@

loadItem(params: object): Promise‹ServiceAccount

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1713,7 +1713,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹ServiceAccount[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1734,7 +1734,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1755,7 +1755,7 @@

remove#

remove(item: ServiceAccount): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1776,7 +1776,7 @@

Protected removeItem#

removeItem(item: ServiceAccount, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: ServiceAccount

request: function

@@ -1787,25 +1787,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: ServiceAccount): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1826,7 +1826,7 @@

Protected sortItems#

sortItems(items: ServiceAccount[], sorting?: function[], order?: "asc" | "desc"): ServiceAccount[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1860,7 +1860,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1883,7 +1883,7 @@

toggleSelection#

toggleSelection(item: ServiceAccount): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1904,7 +1904,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: ServiceAccount[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1927,7 +1927,7 @@

unselect#

unselect(item: ServiceAccount): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1948,7 +1948,7 @@

update#

update(item: ServiceAccount, data: Partial‹ServiceAccount›): Promise‹ServiceAccount

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1973,13 +1973,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: ServiceAccount, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: ServiceAccount

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.servicestore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.servicestore/index.html index 219491e9db..cd9968c28c 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.servicestore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.servicestore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new ServiceStore(): ServiceStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: ServiceStore

Properties#

api#

api: KubeApiService‹›› = serviceApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+network-services/services.store.ts:8

+

Defined in src/renderer/components/+network-services/services.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): Service[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: Service[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹Service›): Promise‹Service

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹Service›): Promise‹Service

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: Service): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: Service[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): Service[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): Service[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): Service

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): Service

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: Service[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: Service): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: Service[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹Service

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹Service

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹Service[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: Service): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: Service, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: Service

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: Service): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: Service[], sorting?: function[], order?: "asc" | "desc"): Service[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: Service): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: Service[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: Service): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: Service, data: Partial‹Service›): Promise‹Service

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: Service, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: Service

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.statefulset/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.statefulset/index.html index 5ae8f1c306..c263a36cd9 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.statefulset/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.statefulset/index.html @@ -1237,7 +1237,7 @@

constructor#

+ new StatefulSet(data: KubeJsonApiData): StatefulSet

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1258,22 +1258,22 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


spec#

spec: object

Overrides void

-

Defined in src/renderer/api/endpoints/stateful-set.api.ts:36

+

Defined in src/renderer/api/endpoints/stateful-set.api.ts:36

Type declaration:

@@ -1397,19 +1397,19 @@

getAffinity#

getAffinity(): IAffinity

Inherited from Deployment.getAffinity

-

Defined in src/renderer/api/workload-kube-object.ts:74

+

Defined in src/renderer/api/workload-kube-object.ts:74

Returns: IAffinity


getAffinityNumber#

getAffinityNumber(): number

Inherited from Pod.getAffinityNumber

-

Defined in src/renderer/api/workload-kube-object.ts:78

+

Defined in src/renderer/api/workload-kube-object.ts:78

Returns: number


getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1442,7 +1442,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1465,95 +1465,95 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getImages#

getImages(): string[]

-

Defined in src/renderer/api/endpoints/stateful-set.api.ts:103

+

Defined in src/renderer/api/endpoints/stateful-set.api.ts:103

Returns: string[]


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNodeSelectors#

getNodeSelectors(): string[]

Inherited from Deployment.getNodeSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:58

+

Defined in src/renderer/api/workload-kube-object.ts:58

Returns: string[]


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getReplicas#

getReplicas(): number

-

Defined in src/renderer/api/endpoints/stateful-set.api.ts:99

+

Defined in src/renderer/api/endpoints/stateful-set.api.ts:99

Returns: number


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getSelectors#

getSelectors(): string[]

Inherited from Pod.getSelectors

-

Defined in src/renderer/api/workload-kube-object.ts:52

+

Defined in src/renderer/api/workload-kube-object.ts:52

Returns: string[]


getTemplateLabels#

getTemplateLabels(): string[]

Inherited from Pod.getTemplateLabels

-

Defined in src/renderer/api/workload-kube-object.ts:64

+

Defined in src/renderer/api/workload-kube-object.ts:64

Returns: string[]


getTolerations#

getTolerations(): IToleration[]

Inherited from Deployment.getTolerations

-

Defined in src/renderer/api/workload-kube-object.ts:70

+

Defined in src/renderer/api/workload-kube-object.ts:70

Returns: IToleration[]


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1576,7 +1576,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1597,7 +1597,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1618,7 +1618,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1639,7 +1639,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1660,7 +1660,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.statefulsetstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.statefulsetstore/index.html index 308cd2a348..eff412bd0b 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.statefulsetstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.statefulsetstore/index.html @@ -1312,75 +1312,75 @@

constructor#

+ new StatefulSetStore(): StatefulSetStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: StatefulSetStore

Properties#

api#

api: StatefulSetApi‹› = statefulSetApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:10

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:10


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPodMetrics = null

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:11

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:11


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): StatefulSet[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: StatefulSet[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1403,7 +1403,7 @@

create#

create(params: object, data?: Partial‹StatefulSet›): Promise‹StatefulSet

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1431,7 +1431,7 @@

createItem(params: object, data?: Partial‹StatefulSet›): Promise‹StatefulSet

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1458,7 +1458,7 @@

Protected defaultSorting#

defaultSorting(item: StatefulSet): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1479,7 +1479,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: StatefulSet[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1500,7 +1500,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): StatefulSet[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1528,7 +1528,7 @@

getByLabel#

getByLabel(labels: string[] | object): StatefulSet[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1550,7 +1550,7 @@

getByName(name: string, namespace?: string): StatefulSet

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1575,7 +1575,7 @@

getByPath#

getByPath(path: string): StatefulSet

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1595,7 +1595,7 @@

getChildPods#

getChildPods(statefulSet: StatefulSet): Pod‹›[]

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:19

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:19

Parameters:

@@ -1616,7 +1616,7 @@

getStatuses#

getStatuses(statefulSets: StatefulSet[]): object

Overrides KubeObjectStore.getStatuses

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:23

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:23

Parameters:

@@ -1648,7 +1648,7 @@

isSelected#

isSelected(item: StatefulSet): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1669,7 +1669,7 @@

isSelectedAll#

isSelectedAll(visibleItems: StatefulSet[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1692,7 +1692,7 @@

load#

load(params: object): Promise‹StatefulSet

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1719,13 +1719,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1747,7 +1747,7 @@

loadItem(params: object): Promise‹StatefulSet

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1774,7 +1774,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹StatefulSet[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1794,7 +1794,7 @@

loadMetrics#

loadMetrics(statefulSet: StatefulSet): Promise‹void›

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:13

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:13

Parameters:

@@ -1815,7 +1815,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1836,7 +1836,7 @@

remove#

remove(item: StatefulSet): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1857,7 +1857,7 @@

Protected removeItem#

removeItem(item: StatefulSet, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: StatefulSet

request: function

@@ -1868,25 +1868,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:43

+

Defined in src/renderer/components/+workloads-statefulsets/statefulset.store.ts:43

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: StatefulSet): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1907,7 +1907,7 @@

Protected sortItems#

sortItems(items: StatefulSet[], sorting?: function[], order?: "asc" | "desc"): StatefulSet[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1941,7 +1941,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1964,7 +1964,7 @@

toggleSelection#

toggleSelection(item: StatefulSet): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1985,7 +1985,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: StatefulSet[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -2008,7 +2008,7 @@

unselect#

unselect(item: StatefulSet): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -2029,7 +2029,7 @@

update#

update(item: StatefulSet, data: Partial‹StatefulSet›): Promise‹StatefulSet

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2054,13 +2054,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: StatefulSet, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: StatefulSet

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.storageclass/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.storageclass/index.html index 0976f61d41..1a9c3349c5 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.storageclass/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.storageclass/index.html @@ -1229,7 +1229,7 @@

constructor#

+ new StorageClass(data: KubeJsonApiData): StorageClass

Inherited from KubeObject.constructor

-

Defined in src/renderer/api/kube-object.ts:70

+

Defined in src/renderer/api/kube-object.ts:70

Parameters:

@@ -1250,25 +1250,25 @@

apiVersion#

apiVersion: string

Inherited from KubeObject.apiVersion

-

Defined in src/renderer/api/kube-object.ts:76

+

Defined in src/renderer/api/kube-object.ts:76


kind#

kind: string

Inherited from KubeObject.kind

-

Defined in src/renderer/api/kube-object.ts:77

+

Defined in src/renderer/api/kube-object.ts:77


metadata#

metadata: IKubeObjectMetadata

Inherited from KubeObject.metadata

-

Defined in src/renderer/api/kube-object.ts:78

+

Defined in src/renderer/api/kube-object.ts:78


Optional mountOptions#

mountOptions? : string[]

-

Defined in src/renderer/api/endpoints/storage-class.api.ts:12

+

Defined in src/renderer/api/endpoints/storage-class.api.ts:12


parameters#

parameters: object

-

Defined in src/renderer/api/endpoints/storage-class.api.ts:15

+

Defined in src/renderer/api/endpoints/storage-class.api.ts:15

Type declaration:

@@ -1335,7 +1335,7 @@

getAge#

getAge(humanize: boolean, compact: boolean, fromNow: boolean): string | number

Inherited from KubeObject.getAge

-

Defined in src/renderer/api/kube-object.ts:103

+

Defined in src/renderer/api/kube-object.ts:103

Parameters:

@@ -1368,7 +1368,7 @@

getAnnotations#

getAnnotations(filter: boolean): string[]

Inherited from KubeObject.getAnnotations

-

Defined in src/renderer/api/kube-object.ts:124

+

Defined in src/renderer/api/kube-object.ts:124

Parameters:

@@ -1391,76 +1391,76 @@

getFinalizers#

getFinalizers(): string[]

Inherited from KubeObject.getFinalizers

-

Defined in src/renderer/api/kube-object.ts:116

+

Defined in src/renderer/api/kube-object.ts:116

Returns: string[]


getId#

getId(): string

Inherited from KubeObject.getId

-

Defined in src/renderer/api/kube-object.ts:85

+

Defined in src/renderer/api/kube-object.ts:85

Returns: string


getLabels#

getLabels(): string[]

Inherited from KubeObject.getLabels

-

Defined in src/renderer/api/kube-object.ts:120

+

Defined in src/renderer/api/kube-object.ts:120

Returns: string[]


getName#

getName(): string

Inherited from KubeObject.getName

-

Defined in src/renderer/api/kube-object.ts:93

+

Defined in src/renderer/api/kube-object.ts:93

Returns: string


getNs#

getNs(): string

Inherited from KubeObject.getNs

-

Defined in src/renderer/api/kube-object.ts:97

+

Defined in src/renderer/api/kube-object.ts:97

Returns: string


getOwnerRefs#

getOwnerRefs(): object[]

Inherited from KubeObject.getOwnerRefs

-

Defined in src/renderer/api/kube-object.ts:134

+

Defined in src/renderer/api/kube-object.ts:134

Returns: object[]


getReclaimPolicy#

getReclaimPolicy(): string

-

Defined in src/renderer/api/endpoints/storage-class.api.ts:32

+

Defined in src/renderer/api/endpoints/storage-class.api.ts:32

Returns: string


getResourceVersion#

getResourceVersion(): string

Inherited from KubeObject.getResourceVersion

-

Defined in src/renderer/api/kube-object.ts:89

+

Defined in src/renderer/api/kube-object.ts:89

Returns: string


getSearchFields#

getSearchFields(): string[]

Inherited from KubeObject.getSearchFields

-

Defined in src/renderer/api/kube-object.ts:143

+

Defined in src/renderer/api/kube-object.ts:143

Returns: string[]


getVolumeBindingMode#

getVolumeBindingMode(): string

-

Defined in src/renderer/api/endpoints/storage-class.api.ts:28

+

Defined in src/renderer/api/endpoints/storage-class.api.ts:28

Returns: string


isDefault#

isDefault(): boolean

-

Defined in src/renderer/api/endpoints/storage-class.api.ts:19

+

Defined in src/renderer/api/endpoints/storage-class.api.ts:19

Returns: boolean


toPlainObject#

toPlainObject(): object

Inherited from KubeObject.toPlainObject

-

Defined in src/renderer/api/kube-object.ts:155

+

Defined in src/renderer/api/kube-object.ts:155

Returns: object


update#

updateT›(data: Partial‹T›): Promise‹T›

Inherited from KubeObject.update

-

Defined in src/renderer/api/kube-object.ts:160

+

Defined in src/renderer/api/kube-object.ts:160

Type parameters:

T: KubeObject

Parameters:

@@ -1483,7 +1483,7 @@

Static create#

create(data: any): KubeObject‹›

Inherited from KubeObject.create

-

Defined in src/renderer/api/kube-object.ts:50

+

Defined in src/renderer/api/kube-object.ts:50

Parameters:

@@ -1504,7 +1504,7 @@

Static isJsonApiData#

isJsonApiData(object: any): object is KubeJsonApiData

Inherited from KubeObject.isJsonApiData

-

Defined in src/renderer/api/kube-object.ts:58

+

Defined in src/renderer/api/kube-object.ts:58

Parameters:

@@ -1525,7 +1525,7 @@

Static isJsonApiDataList#

isJsonApiDataList(object: any): object is KubeJsonApiDataList

Inherited from KubeObject.isJsonApiDataList

-

Defined in src/renderer/api/kube-object.ts:62

+

Defined in src/renderer/api/kube-object.ts:62

Parameters:

@@ -1546,7 +1546,7 @@

Static isNonSystem#

isNonSystem(item: KubeJsonApiData | KubeObject): boolean

Inherited from KubeObject.isNonSystem

-

Defined in src/renderer/api/kube-object.ts:54

+

Defined in src/renderer/api/kube-object.ts:54

Parameters:

@@ -1567,7 +1567,7 @@

Static stringifyLabels#

stringifyLabels(labels: object): string[]

Inherited from KubeObject.stringifyLabels

-

Defined in src/renderer/api/kube-object.ts:66

+

Defined in src/renderer/api/kube-object.ts:66

Parameters:

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.storageclassstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.storageclassstore/index.html index d38917fe45..9d7b64f78e 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.storageclassstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.storageclassstore/index.html @@ -1288,71 +1288,71 @@

constructor#

+ new StorageClassStore(): StorageClassStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: StorageClassStore

Properties#

api#

api: KubeApiStorageClass‹›› = storageClassApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+storage-classes/storage-class.store.ts:8

+

Defined in src/renderer/components/+storage-classes/storage-class.store.ts:8


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): StorageClass[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: StorageClass[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1375,7 +1375,7 @@

create#

create(params: object, data?: Partial‹StorageClass›): Promise‹StorageClass

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1403,7 +1403,7 @@

createItem(params: object, data?: Partial‹StorageClass›): Promise‹StorageClass

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1430,7 +1430,7 @@

Protected defaultSorting#

defaultSorting(item: StorageClass): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1451,7 +1451,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: StorageClass[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1472,7 +1472,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): StorageClass[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1500,7 +1500,7 @@

getByLabel#

getByLabel(labels: string[] | object): StorageClass[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1522,7 +1522,7 @@

getByName(name: string, namespace?: string): StorageClass

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1547,7 +1547,7 @@

getByPath#

getByPath(path: string): StorageClass

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1568,7 +1568,7 @@

Optional getStatuses#

getStatuses(items: StorageClass[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1589,7 +1589,7 @@

isSelected#

isSelected(item: StorageClass): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1610,7 +1610,7 @@

isSelectedAll#

isSelectedAll(visibleItems: StorageClass[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1633,7 +1633,7 @@

load#

load(params: object): Promise‹StorageClass

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1660,13 +1660,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1688,7 +1688,7 @@

loadItem(params: object): Promise‹StorageClass

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1715,7 +1715,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹StorageClass[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1736,7 +1736,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1757,7 +1757,7 @@

remove#

remove(item: StorageClass): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1778,7 +1778,7 @@

Protected removeItem#

removeItem(item: StorageClass, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: StorageClass

request: function

@@ -1789,25 +1789,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Inherited from KubeObjectStore.reset

-

Defined in src/renderer/item.store.ts:163

+

Defined in src/renderer/item.store.ts:163

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: StorageClass): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1828,7 +1828,7 @@

Protected sortItems#

sortItems(items: StorageClass[], sorting?: function[], order?: "asc" | "desc"): StorageClass[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1862,7 +1862,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1885,7 +1885,7 @@

toggleSelection#

toggleSelection(item: StorageClass): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1906,7 +1906,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: StorageClass[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1929,7 +1929,7 @@

unselect#

unselect(item: StorageClass): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1950,7 +1950,7 @@

update#

update(item: StorageClass, data: Partial‹StorageClass›): Promise‹StorageClass

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -1975,13 +1975,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: StorageClass, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: StorageClass

request: function

diff --git a/master/extensions/api/classes/_renderer_api_k8s_api_.volumeclaimstore/index.html b/master/extensions/api/classes/_renderer_api_k8s_api_.volumeclaimstore/index.html index 33d91aaf09..f0a75d276c 100644 --- a/master/extensions/api/classes/_renderer_api_k8s_api_.volumeclaimstore/index.html +++ b/master/extensions/api/classes/_renderer_api_k8s_api_.volumeclaimstore/index.html @@ -1304,75 +1304,75 @@

constructor#

+ new VolumeClaimStore(): VolumeClaimStore

Inherited from KubeObjectStore.constructor

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15

Returns: VolumeClaimStore

Properties#

api#

api: PersistentVolumeClaimsApi‹› = pvcApi

Overrides KubeObjectStore.api

-

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:9

+

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:9


bufferSize#

bufferSize: number = 50000

Inherited from KubeObjectStore.bufferSize

-

Defined in src/renderer/kube-object.store.ts:15

+

Defined in src/renderer/kube-object.store.ts:15


Protected eventsBuffer#

eventsBuffer: IObservableArray‹IKubeWatchEvent‹KubeJsonApiData›› = observable>([], { deep: false })

Inherited from KubeObjectStore.eventsBuffer

-

Defined in src/renderer/kube-object.store.ts:167

+

Defined in src/renderer/kube-object.store.ts:167


isLoaded#

isLoaded: boolean = false

Inherited from KubeObjectStore.isLoaded

-

Defined in src/renderer/item.store.ts:17

+

Defined in src/renderer/item.store.ts:17


isLoading#

isLoading: boolean = false

Inherited from KubeObjectStore.isLoading

-

Defined in src/renderer/item.store.ts:16

+

Defined in src/renderer/item.store.ts:16


items#

items: IObservableArray‹T› = observable.array([], { deep: false })

Inherited from KubeObjectStore.items

-

Defined in src/renderer/item.store.ts:18

+

Defined in src/renderer/item.store.ts:18


Optional limit#

limit? : number

Inherited from KubeObjectStore.limit

-

Defined in src/renderer/kube-object.store.ts:14

+

Defined in src/renderer/kube-object.store.ts:14


metrics#

metrics: IPvcMetrics = null

-

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:10

+

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:10


selectedItemsIds#

selectedItemsIds: ObservableMap‹string, boolean› = observable.map()

Inherited from KubeObjectStore.selectedItemsIds

-

Defined in src/renderer/item.store.ts:19

+

Defined in src/renderer/item.store.ts:19

Accessors#

query#

get query(): IKubeApiQueryParams

Inherited from KubeObjectStore.query

-

Defined in src/renderer/kube-object.store.ts:23

+

Defined in src/renderer/kube-object.store.ts:23

Returns: IKubeApiQueryParams


selectedItems#

get selectedItems(): PersistentVolumeClaim[]

Inherited from KubeObjectStore.selectedItems

-

Defined in src/renderer/item.store.ts:21

+

Defined in src/renderer/item.store.ts:21

Returns: PersistentVolumeClaim[]

Methods#

[Symbol.iterator]#

[Symbol.iterator](): Generator‹T, void, undefined›

Inherited from KubeObjectStore.[Symbol.iterator]

-

Defined in src/renderer/item.store.ts:178

+

Defined in src/renderer/item.store.ts:178

Returns: Generator‹T, void, undefined›


Protected bindWatchEventsUpdater#

bindWatchEventsUpdater(delay: number): IReactionDisposer

Inherited from KubeObjectStore.bindWatchEventsUpdater

-

Defined in src/renderer/kube-object.store.ts:169

+

Defined in src/renderer/kube-object.store.ts:169

Parameters:

@@ -1395,7 +1395,7 @@

create#

create(params: object, data?: Partial‹PersistentVolumeClaim›): Promise‹PersistentVolumeClaim

Inherited from KubeObjectStore.create

-

Defined in src/renderer/kube-object.store.ts:138

+

Defined in src/renderer/kube-object.store.ts:138

Parameters:

params: object

@@ -1423,7 +1423,7 @@

createItem(params: object, data?: Partial‹PersistentVolumeClaim›): Promise‹PersistentVolumeClaim

Inherited from KubeObjectStore.createItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:134

+

Defined in src/renderer/kube-object.store.ts:134

Parameters:

params: object

@@ -1450,7 +1450,7 @@

Protected defaultSorting#

defaultSorting(item: PersistentVolumeClaim): string

Inherited from KubeObjectStore.defaultSorting

-

Defined in src/renderer/item.store.ts:14

+

Defined in src/renderer/item.store.ts:14

Parameters:

@@ -1471,7 +1471,7 @@

Protected filterItemsOnLoad#

filterItemsOnLoad(items: PersistentVolumeClaim[]): T[]

Inherited from KubeObjectStore.filterItemsOnLoad

-

Defined in src/renderer/kube-object.store.ts:84

+

Defined in src/renderer/kube-object.store.ts:84

Parameters:

@@ -1492,7 +1492,7 @@

getAllByNs#

getAllByNs(namespace: string | string[], strict: boolean): PersistentVolumeClaim[]

Inherited from KubeObjectStore.getAllByNs

-

Defined in src/renderer/kube-object.store.ts:35

+

Defined in src/renderer/kube-object.store.ts:35

Parameters:

@@ -1520,7 +1520,7 @@

getByLabel#

getByLabel(labels: string[] | object): PersistentVolumeClaim[]

Inherited from KubeObjectStore.getByLabel

-

Defined in src/renderer/kube-object.store.ts:57

+

Defined in src/renderer/kube-object.store.ts:57

Parameters:

@@ -1542,7 +1542,7 @@

getByName(name: string, namespace?: string): PersistentVolumeClaim

Inherited from KubeObjectStore.getByName

Overrides void

-

Defined in src/renderer/kube-object.store.ts:45

+

Defined in src/renderer/kube-object.store.ts:45

Parameters:

@@ -1567,7 +1567,7 @@

getByPath#

getByPath(path: string): PersistentVolumeClaim

Inherited from KubeObjectStore.getByPath

-

Defined in src/renderer/kube-object.store.ts:53

+

Defined in src/renderer/kube-object.store.ts:53

Parameters:

@@ -1588,7 +1588,7 @@

Optional getStatuses#

getStatuses(items: PersistentVolumeClaim[]): Record‹string, number›

Inherited from KubeObjectStore.getStatuses

-

Defined in src/renderer/kube-object.store.ts:33

+

Defined in src/renderer/kube-object.store.ts:33

Parameters:

@@ -1609,7 +1609,7 @@

isSelected#

isSelected(item: PersistentVolumeClaim): boolean

Inherited from KubeObjectStore.isSelected

-

Defined in src/renderer/item.store.ts:115

+

Defined in src/renderer/item.store.ts:115

Parameters:

@@ -1630,7 +1630,7 @@

isSelectedAll#

isSelectedAll(visibleItems: PersistentVolumeClaim[]): boolean

Inherited from KubeObjectStore.isSelectedAll

-

Defined in src/renderer/item.store.ts:151

+

Defined in src/renderer/item.store.ts:151

Parameters:

@@ -1653,7 +1653,7 @@

load#

load(params: object): Promise‹PersistentVolumeClaim

Inherited from KubeObjectStore.load

-

Defined in src/renderer/kube-object.store.ts:113

+

Defined in src/renderer/kube-object.store.ts:113

Parameters:

params: object

@@ -1680,13 +1680,13 @@

loadAll(): Promise‹void›

Inherited from KubeObjectStore.loadAll

Overrides void

-

Defined in src/renderer/kube-object.store.ts:89

+

Defined in src/renderer/kube-object.store.ts:89

Returns: Promise‹void›


loadFromPath#

loadFromPath(resourcePath: string): Promise‹T›

Inherited from KubeObjectStore.loadFromPath

-

Defined in src/renderer/kube-object.store.ts:128

+

Defined in src/renderer/kube-object.store.ts:128

Parameters:

@@ -1708,7 +1708,7 @@

loadItem(params: object): Promise‹PersistentVolumeClaim

Inherited from KubeObjectStore.loadItem

Overrides void

-

Defined in src/renderer/kube-object.store.ts:108

+

Defined in src/renderer/kube-object.store.ts:108

Parameters:

params: object

@@ -1735,7 +1735,7 @@

loadItems(allowedNamespaces?: string[]): Promise‹PersistentVolumeClaim[]›

Inherited from KubeObjectStore.loadItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:74

+

Defined in src/renderer/kube-object.store.ts:74

Parameters:

@@ -1755,7 +1755,7 @@

loadMetrics#

loadMetrics(pvc: PersistentVolumeClaim): Promise‹void›

-

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:13

+

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:13

Parameters:

@@ -1776,7 +1776,7 @@

Protected onWatchApiEvent#

onWatchApiEvent(evt: IKubeWatchEvent): void

Inherited from KubeObjectStore.onWatchApiEvent

-

Defined in src/renderer/kube-object.store.ts:179

+

Defined in src/renderer/kube-object.store.ts:179

Parameters:

@@ -1797,7 +1797,7 @@

remove#

remove(item: PersistentVolumeClaim): Promise‹void›

Inherited from KubeObjectStore.remove

-

Defined in src/renderer/kube-object.store.ts:156

+

Defined in src/renderer/kube-object.store.ts:156

Parameters:

@@ -1818,7 +1818,7 @@

Protected removeItem#

removeItem(item: PersistentVolumeClaim, request: function): Promise‹void›

Inherited from KubeObjectStore.removeItem

-

Defined in src/renderer/item.store.ts:109

+

Defined in src/renderer/item.store.ts:109

Parameters:

item: PersistentVolumeClaim

request: function

@@ -1829,25 +1829,25 @@

removeSelectedItems(): Promise‹void[]›

Inherited from KubeObjectStore.removeSelectedItems

Overrides void

-

Defined in src/renderer/kube-object.store.ts:162

+

Defined in src/renderer/kube-object.store.ts:162

Returns: Promise‹void[]›


reset#

reset(): void

Overrides KubeObjectStore.reset

-

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:17

+

Defined in src/renderer/components/+storage-volume-claims/volume-claim.store.ts:17

Returns: void


resetSelection#

resetSelection(): void

Inherited from KubeObjectStore.resetSelection

-

Defined in src/renderer/item.store.ts:158

+

Defined in src/renderer/item.store.ts:158

Returns: void


select#

select(item: PersistentVolumeClaim): void

Inherited from KubeObjectStore.select

-

Defined in src/renderer/item.store.ts:120

+

Defined in src/renderer/item.store.ts:120

Parameters:

@@ -1868,7 +1868,7 @@

Protected sortItems#

sortItems(items: PersistentVolumeClaim[], sorting?: function[], order?: "asc" | "desc"): PersistentVolumeClaim[]

Inherited from KubeObjectStore.sortItems

-

Defined in src/renderer/item.store.ts:31

+

Defined in src/renderer/item.store.ts:31

Parameters:

@@ -1902,7 +1902,7 @@

subscribe(apis: KubeApi‹T›[]): (Anonymous function)

Inherited from KubeObjectStore.subscribe

Overrides void

-

Defined in src/renderer/kube-object.store.ts:175

+

Defined in src/renderer/kube-object.store.ts:175

Parameters:

@@ -1925,7 +1925,7 @@

toggleSelection#

toggleSelection(item: PersistentVolumeClaim): void

Inherited from KubeObjectStore.toggleSelection

-

Defined in src/renderer/item.store.ts:130

+

Defined in src/renderer/item.store.ts:130

Parameters:

@@ -1946,7 +1946,7 @@

toggleSelectionAll#

toggleSelectionAll(visibleItems: PersistentVolumeClaim[]): void

Inherited from KubeObjectStore.toggleSelectionAll

-

Defined in src/renderer/item.store.ts:140

+

Defined in src/renderer/item.store.ts:140

Parameters:

@@ -1969,7 +1969,7 @@

unselect#

unselect(item: PersistentVolumeClaim): void

Inherited from KubeObjectStore.unselect

-

Defined in src/renderer/item.store.ts:125

+

Defined in src/renderer/item.store.ts:125

Parameters:

@@ -1990,7 +1990,7 @@

update#

update(item: PersistentVolumeClaim, data: Partial‹PersistentVolumeClaim›): Promise‹PersistentVolumeClaim

Inherited from KubeObjectStore.update

-

Defined in src/renderer/kube-object.store.ts:147

+

Defined in src/renderer/kube-object.store.ts:147

Parameters:

@@ -2015,13 +2015,13 @@

Protected updateFromEventsBuffer#

updateFromEventsBuffer(): void

Inherited from KubeObjectStore.updateFromEventsBuffer

-

Defined in src/renderer/kube-object.store.ts:185

+

Defined in src/renderer/kube-object.store.ts:185

Returns: void


Protected updateItem#

updateItem(item: PersistentVolumeClaim, request: function): Promise‹T›

Inherited from KubeObjectStore.updateItem

-

Defined in src/renderer/item.store.ts:99

+

Defined in src/renderer/item.store.ts:99

Parameters:

item: PersistentVolumeClaim

request: function

diff --git a/master/extensions/api/classes/lensmainextension/index.html b/master/extensions/api/classes/lensmainextension/index.html index 3526ca7831..fd54739fe2 100644 --- a/master/extensions/api/classes/lensmainextension/index.html +++ b/master/extensions/api/classes/lensmainextension/index.html @@ -1074,7 +1074,7 @@

constructor#

+ new LensMainExtension(__namedParameters: object): LensMainExtension

Inherited from LensMainExtension.constructor

-

Defined in src/extensions/lens-extension.ts:24

+

Defined in src/extensions/lens-extension.ts:24

Parameters:

__namedParameters: object

@@ -1107,62 +1107,62 @@

Properties#

appMenus#

appMenus: MenuRegistration[] = []

-

Defined in src/extensions/lens-main-extension.ts:7

+

Defined in src/extensions/lens-main-extension.ts:7


id#

id: LensExtensionId

Inherited from LensMainExtension.id

-

Defined in src/extensions/lens-extension.ts:19

+

Defined in src/extensions/lens-extension.ts:19


isBundled#

isBundled: boolean

Inherited from LensMainExtension.isBundled

-

Defined in src/extensions/lens-extension.ts:22

+

Defined in src/extensions/lens-extension.ts:22


manifest#

manifest: LensExtensionManifest

Inherited from LensMainExtension.manifest

-

Defined in src/extensions/lens-extension.ts:20

+

Defined in src/extensions/lens-extension.ts:20


manifestPath#

manifestPath: string

Inherited from LensMainExtension.manifestPath

-

Defined in src/extensions/lens-extension.ts:21

+

Defined in src/extensions/lens-extension.ts:21

Accessors#

description#

get description(): string

Inherited from LensMainExtension.description

-

Defined in src/extensions/lens-extension.ts:52

+

Defined in src/extensions/lens-extension.ts:52

Returns: string


name#

get name(): string

Inherited from LensMainExtension.name

-

Defined in src/extensions/lens-extension.ts:33

+

Defined in src/extensions/lens-extension.ts:33

Returns: string


version#

get version(): string

Inherited from LensMainExtension.version

-

Defined in src/extensions/lens-extension.ts:37

+

Defined in src/extensions/lens-extension.ts:37

Returns: string

Methods#

disable#

disable(): Promise‹void›

Inherited from LensMainExtension.disable

-

Defined in src/extensions/lens-extension.ts:65

+

Defined in src/extensions/lens-extension.ts:65

Returns: Promise‹void›


enable#

enable(): Promise‹void›

Inherited from LensMainExtension.enable

-

Defined in src/extensions/lens-extension.ts:57

+

Defined in src/extensions/lens-extension.ts:57

Returns: Promise‹void›


getExtensionFileFolder#

getExtensionFileFolder(): Promise‹string›

Inherited from LensMainExtension.getExtensionFileFolder

-

Defined in src/extensions/lens-extension.ts:48

+

Defined in src/extensions/lens-extension.ts:48

getExtensionFileFolder returns the path to an already created folder. This folder is for the sole use of this extension.

Note: there is no security done on this folder, only obfiscation of the @@ -1171,7 +1171,7 @@ folder name.


navigateP›(pageId?: string, params?: P, frameId?: number): Promise‹void›

-

Defined in src/extensions/lens-main-extension.ts:9

+

Defined in src/extensions/lens-main-extension.ts:9

Type parameters:

P: object

Parameters:

@@ -1202,19 +1202,19 @@ folder name.

Protected onActivate#

onActivate(): void

Inherited from LensMainExtension.onActivate

-

Defined in src/extensions/lens-extension.ts:104

+

Defined in src/extensions/lens-extension.ts:104

Returns: void


Protected onDeactivate#

onDeactivate(): void

Inherited from LensMainExtension.onDeactivate

-

Defined in src/extensions/lens-extension.ts:108

+

Defined in src/extensions/lens-extension.ts:108

Returns: void


toggle#

toggle(enable?: boolean): void

Inherited from LensMainExtension.toggle

-

Defined in src/extensions/lens-extension.ts:72

+

Defined in src/extensions/lens-extension.ts:72

Parameters:

@@ -1235,7 +1235,7 @@ folder name.

whenEnabled#

whenEnabled(handlers: function): Promise‹(Anonymous function)›

Inherited from LensMainExtension.whenEnabled

-

Defined in src/extensions/lens-extension.ts:80

+

Defined in src/extensions/lens-extension.ts:80

Parameters:

handlers: function

▸ (): Promise‹Function[]›

diff --git a/master/extensions/api/classes/lensrendererextension/index.html b/master/extensions/api/classes/lensrendererextension/index.html index bcf698823f..fa3440a10a 100644 --- a/master/extensions/api/classes/lensrendererextension/index.html +++ b/master/extensions/api/classes/lensrendererextension/index.html @@ -1154,7 +1154,7 @@

constructor#

+ new LensRendererExtension(__namedParameters: object): LensRendererExtension

Inherited from LensMainExtension.constructor

-

Defined in src/extensions/lens-extension.ts:24

+

Defined in src/extensions/lens-extension.ts:24

Parameters:

__namedParameters: object

@@ -1187,98 +1187,98 @@

Properties#

appPreferences#

appPreferences: AppPreferenceRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:13

+

Defined in src/extensions/lens-renderer-extension.ts:13


clusterFeatures#

clusterFeatures: ClusterFeatureRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:14

+

Defined in src/extensions/lens-renderer-extension.ts:14


clusterPageMenus#

clusterPageMenus: PageMenuRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:11

+

Defined in src/extensions/lens-renderer-extension.ts:11


clusterPages#

clusterPages: PageRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:9

+

Defined in src/extensions/lens-renderer-extension.ts:9


globalPageMenus#

globalPageMenus: PageMenuRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:10

+

Defined in src/extensions/lens-renderer-extension.ts:10


globalPages#

globalPages: PageRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:8

+

Defined in src/extensions/lens-renderer-extension.ts:8


id#

id: LensExtensionId

Inherited from LensMainExtension.id

-

Defined in src/extensions/lens-extension.ts:19

+

Defined in src/extensions/lens-extension.ts:19


isBundled#

isBundled: boolean

Inherited from LensMainExtension.isBundled

-

Defined in src/extensions/lens-extension.ts:22

+

Defined in src/extensions/lens-extension.ts:22


kubeObjectDetailItems#

kubeObjectDetailItems: KubeObjectDetailRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:16

+

Defined in src/extensions/lens-renderer-extension.ts:16


kubeObjectMenuItems#

kubeObjectMenuItems: KubeObjectMenuRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:17

+

Defined in src/extensions/lens-renderer-extension.ts:17


kubeObjectStatusTexts#

kubeObjectStatusTexts: KubeObjectStatusRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:12

+

Defined in src/extensions/lens-renderer-extension.ts:12


manifest#

manifest: LensExtensionManifest

Inherited from LensMainExtension.manifest

-

Defined in src/extensions/lens-extension.ts:20

+

Defined in src/extensions/lens-extension.ts:20


manifestPath#

manifestPath: string

Inherited from LensMainExtension.manifestPath

-

Defined in src/extensions/lens-extension.ts:21

+

Defined in src/extensions/lens-extension.ts:21


statusBarItems#

statusBarItems: StatusBarRegistration[] = []

-

Defined in src/extensions/lens-renderer-extension.ts:15

+

Defined in src/extensions/lens-renderer-extension.ts:15

Accessors#

description#

get description(): string

Inherited from LensMainExtension.description

-

Defined in src/extensions/lens-extension.ts:52

+

Defined in src/extensions/lens-extension.ts:52

Returns: string


name#

get name(): string

Inherited from LensMainExtension.name

-

Defined in src/extensions/lens-extension.ts:33

+

Defined in src/extensions/lens-extension.ts:33

Returns: string


version#

get version(): string

Inherited from LensMainExtension.version

-

Defined in src/extensions/lens-extension.ts:37

+

Defined in src/extensions/lens-extension.ts:37

Returns: string

Methods#

disable#

disable(): Promise‹void›

Inherited from LensMainExtension.disable

-

Defined in src/extensions/lens-extension.ts:65

+

Defined in src/extensions/lens-extension.ts:65

Returns: Promise‹void›


enable#

enable(): Promise‹void›

Inherited from LensMainExtension.enable

-

Defined in src/extensions/lens-extension.ts:57

+

Defined in src/extensions/lens-extension.ts:57

Returns: Promise‹void›


getExtensionFileFolder#

getExtensionFileFolder(): Promise‹string›

Inherited from LensMainExtension.getExtensionFileFolder

-

Defined in src/extensions/lens-extension.ts:48

+

Defined in src/extensions/lens-extension.ts:48

getExtensionFileFolder returns the path to an already created folder. This folder is for the sole use of this extension.

Note: there is no security done on this folder, only obfiscation of the @@ -1287,7 +1287,7 @@ folder name.


isEnabledForCluster#

isEnabledForCluster(cluster: Cluster): Promise‹Boolean›

-

Defined in src/extensions/lens-renderer-extension.ts:34

+

Defined in src/extensions/lens-renderer-extension.ts:34

Defines if extension is enabled for a given cluster. Defaults to true.

Parameters:

@@ -1308,7 +1308,7 @@ folder name.


navigateP›(pageId?: string, params?: P): Promise‹void›

-

Defined in src/extensions/lens-renderer-extension.ts:19

+

Defined in src/extensions/lens-renderer-extension.ts:19

Type parameters:

P: object

Parameters:

@@ -1335,19 +1335,19 @@ folder name.

Protected onActivate#

onActivate(): void

Inherited from LensMainExtension.onActivate

-

Defined in src/extensions/lens-extension.ts:104

+

Defined in src/extensions/lens-extension.ts:104

Returns: void


Protected onDeactivate#

onDeactivate(): void

Inherited from LensMainExtension.onDeactivate

-

Defined in src/extensions/lens-extension.ts:108

+

Defined in src/extensions/lens-extension.ts:108

Returns: void


toggle#

toggle(enable?: boolean): void

Inherited from LensMainExtension.toggle

-

Defined in src/extensions/lens-extension.ts:72

+

Defined in src/extensions/lens-extension.ts:72

Parameters:

@@ -1368,7 +1368,7 @@ folder name.

whenEnabled#

whenEnabled(handlers: function): Promise‹(Anonymous function)›

Inherited from LensMainExtension.whenEnabled

-

Defined in src/extensions/lens-extension.ts:80

+

Defined in src/extensions/lens-extension.ts:80

Parameters:

handlers: function

▸ (): Promise‹Function[]›

diff --git a/master/extensions/api/enums/_renderer_api_components_.notificationstatus/index.html b/master/extensions/api/enums/_renderer_api_components_.notificationstatus/index.html index 0b1aacd37a..ef9c5ce84f 100644 --- a/master/extensions/api/enums/_renderer_api_components_.notificationstatus/index.html +++ b/master/extensions/api/enums/_renderer_api_components_.notificationstatus/index.html @@ -880,15 +880,15 @@

Enumeration members#

ERROR#

ERROR: = "error"

-

Defined in src/renderer/components/notifications/notifications.store.ts:12

+

Defined in src/renderer/components/notifications/notifications.store.ts:12


INFO#

INFO: = "info"

-

Defined in src/renderer/components/notifications/notifications.store.ts:13

+

Defined in src/renderer/components/notifications/notifications.store.ts:13


OK#

OK: = "ok"

-

Defined in src/renderer/components/notifications/notifications.store.ts:11

+

Defined in src/renderer/components/notifications/notifications.store.ts:11

diff --git a/master/extensions/api/enums/_renderer_api_components_.tooltipposition/index.html b/master/extensions/api/enums/_renderer_api_components_.tooltipposition/index.html index 6e603afc10..16fe500b3e 100644 --- a/master/extensions/api/enums/_renderer_api_components_.tooltipposition/index.html +++ b/master/extensions/api/enums/_renderer_api_components_.tooltipposition/index.html @@ -920,35 +920,35 @@

Enumeration members#

BOTTOM#

BOTTOM: = "bottom"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:11

+

Defined in src/renderer/components/tooltip/tooltip.tsx:11


BOTTOM_LEFT#

BOTTOM_LEFT: = "bottom_left"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:16

+

Defined in src/renderer/components/tooltip/tooltip.tsx:16


BOTTOM_RIGHT#

BOTTOM_RIGHT: = "bottom_right"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:17

+

Defined in src/renderer/components/tooltip/tooltip.tsx:17


LEFT#

LEFT: = "left"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:12

+

Defined in src/renderer/components/tooltip/tooltip.tsx:12


RIGHT: = "right"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:13

+

Defined in src/renderer/components/tooltip/tooltip.tsx:13


TOP#

TOP: = "top"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:10

+

Defined in src/renderer/components/tooltip/tooltip.tsx:10


TOP_LEFT#

TOP_LEFT: = "top_left"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:14

+

Defined in src/renderer/components/tooltip/tooltip.tsx:14


TOP_RIGHT#

TOP_RIGHT: = "top_right"

-

Defined in src/renderer/components/tooltip/tooltip.tsx:15

+

Defined in src/renderer/components/tooltip/tooltip.tsx:15

diff --git a/master/extensions/api/enums/_renderer_api_k8s_api_.kubeobjectstatuslevel/index.html b/master/extensions/api/enums/_renderer_api_k8s_api_.kubeobjectstatuslevel/index.html index 0ffe111ac4..07c67f9f07 100644 --- a/master/extensions/api/enums/_renderer_api_k8s_api_.kubeobjectstatuslevel/index.html +++ b/master/extensions/api/enums/_renderer_api_k8s_api_.kubeobjectstatuslevel/index.html @@ -880,15 +880,15 @@

Enumeration members#

CRITICAL#

CRITICAL: = 3

-

Defined in src/extensions/renderer-api/kube-object-status.ts:10

+

Defined in src/extensions/renderer-api/kube-object-status.ts:10


INFO#

INFO: = 1

-

Defined in src/extensions/renderer-api/kube-object-status.ts:8

+

Defined in src/extensions/renderer-api/kube-object-status.ts:8


WARNING#

WARNING: = 2

-

Defined in src/extensions/renderer-api/kube-object-status.ts:9

+

Defined in src/extensions/renderer-api/kube-object-status.ts:9

diff --git a/master/extensions/api/interfaces/_core_api_cluster_feature_.clusterfeaturestatus/index.html b/master/extensions/api/interfaces/_core_api_cluster_feature_.clusterfeaturestatus/index.html index 21a820dd4e..0c2dd99fb4 100644 --- a/master/extensions/api/interfaces/_core_api_cluster_feature_.clusterfeaturestatus/index.html +++ b/master/extensions/api/interfaces/_core_api_cluster_feature_.clusterfeaturestatus/index.html @@ -899,22 +899,22 @@

Properties#

canUpgrade#

canUpgrade: boolean

-

Defined in src/extensions/cluster-feature.ts:20

+

Defined in src/extensions/cluster-feature.ts:20

whether the feature can be upgraded or not, as set by the implementation


currentVersion#

currentVersion: string

-

Defined in src/extensions/cluster-feature.ts:14

+

Defined in src/extensions/cluster-feature.ts:14

feature's current version, as set by the implementation


installed#

installed: boolean

-

Defined in src/extensions/cluster-feature.ts:18

+

Defined in src/extensions/cluster-feature.ts:18

whether the feature is installed or not, as set by the implementation


latestVersion#

latestVersion: string

-

Defined in src/extensions/cluster-feature.ts:16

+

Defined in src/extensions/cluster-feature.ts:16

feature's latest version, as set by the implementation

diff --git a/master/extensions/api/interfaces/_core_api_stores_.clustermodel/index.html b/master/extensions/api/interfaces/_core_api_stores_.clustermodel/index.html index 51e57c93e1..dde3cc65c5 100644 --- a/master/extensions/api/interfaces/_core_api_stores_.clustermodel/index.html +++ b/master/extensions/api/interfaces/_core_api_stores_.clustermodel/index.html @@ -950,47 +950,47 @@

Properties#

Optional accessibleNamespaces#

accessibleNamespaces? : string[]

-

Defined in src/common/cluster-store.ts:67

+

Defined in src/common/cluster-store.ts:67

List of accessible namespaces


Optional contextName#

contextName? : string

-

Defined in src/common/cluster-store.ts:53

+

Defined in src/common/cluster-store.ts:53

User context in kubeconfig


id#

id: ClusterId

-

Defined in src/common/cluster-store.ts:44

+

Defined in src/common/cluster-store.ts:44

Unique id for a cluster


Optional kubeConfig#

kubeConfig? : string

-

Defined in src/common/cluster-store.ts:70

+

Defined in src/common/cluster-store.ts:70

deprecated


kubeConfigPath#

kubeConfigPath: string

-

Defined in src/common/cluster-store.ts:47

+

Defined in src/common/cluster-store.ts:47

Path to cluster kubeconfig


Optional metadata#

metadata? : ClusterMetadata

-

Defined in src/common/cluster-store.ts:59

+

Defined in src/common/cluster-store.ts:59

Metadata


Optional ownerRef#

ownerRef? : string

-

Defined in src/common/cluster-store.ts:64

+

Defined in src/common/cluster-store.ts:64

If extension sets ownerRef it has to explicitly mark a cluster as enabled during onActive (or when cluster is saved)


Optional preferences#

preferences? : ClusterPreferences

-

Defined in src/common/cluster-store.ts:56

+

Defined in src/common/cluster-store.ts:56

Preferences


Optional workspace#

workspace? : WorkspaceId

-

Defined in src/common/cluster-store.ts:50

+

Defined in src/common/cluster-store.ts:50

Workspace id

diff --git a/master/extensions/api/interfaces/_core_api_stores_.workspacemodel/index.html b/master/extensions/api/interfaces/_core_api_stores_.workspacemodel/index.html index 1cebbbb868..b7b1ef6e06 100644 --- a/master/extensions/api/interfaces/_core_api_stores_.workspacemodel/index.html +++ b/master/extensions/api/interfaces/_core_api_stores_.workspacemodel/index.html @@ -918,23 +918,23 @@

Properties#

Optional description#

description? : string

-

Defined in src/common/workspace-store.ts:20

+

Defined in src/common/workspace-store.ts:20


id#

id: WorkspaceId

-

Defined in src/common/workspace-store.ts:18

+

Defined in src/common/workspace-store.ts:18


Optional lastActiveClusterId#

lastActiveClusterId? : ClusterId

-

Defined in src/common/workspace-store.ts:22

+

Defined in src/common/workspace-store.ts:22


name#

name: string

-

Defined in src/common/workspace-store.ts:19

+

Defined in src/common/workspace-store.ts:19


Optional ownerRef#

ownerRef? : string

-

Defined in src/common/workspace-store.ts:21

+

Defined in src/common/workspace-store.ts:21

diff --git a/master/extensions/api/interfaces/_interfaces_index_.apppreferencecomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.apppreferencecomponents/index.html index 8b2b9911fb..19d1a781ef 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.apppreferencecomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.apppreferencecomponents/index.html @@ -883,11 +883,11 @@

Properties#

Hint#

Hint: React.ComponentType‹any›

-

Defined in src/extensions/registries/app-preference-registry.ts:5

+

Defined in src/extensions/registries/app-preference-registry.ts:5


Input#

Input: React.ComponentType‹any›

-

Defined in src/extensions/registries/app-preference-registry.ts:6

+

Defined in src/extensions/registries/app-preference-registry.ts:6

diff --git a/master/extensions/api/interfaces/_interfaces_index_.apppreferenceregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.apppreferenceregistration/index.html index 1c42f9ff84..0d78a57b43 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.apppreferenceregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.apppreferenceregistration/index.html @@ -883,11 +883,11 @@

Properties#

components#

components: AppPreferenceComponents

-

Defined in src/extensions/registries/app-preference-registry.ts:11

+

Defined in src/extensions/registries/app-preference-registry.ts:11


title#

title: string

-

Defined in src/extensions/registries/app-preference-registry.ts:10

+

Defined in src/extensions/registries/app-preference-registry.ts:10

diff --git a/master/extensions/api/interfaces/_interfaces_index_.clusterfeaturecomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.clusterfeaturecomponents/index.html index 14d01e74ea..ddca6af52e 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.clusterfeaturecomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.clusterfeaturecomponents/index.html @@ -875,7 +875,7 @@

Properties#

Description#

Description: React.ComponentType‹any›

-

Defined in src/extensions/registries/cluster-feature-registry.ts:6

+

Defined in src/extensions/registries/cluster-feature-registry.ts:6

diff --git a/master/extensions/api/interfaces/_interfaces_index_.clusterfeatureregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.clusterfeatureregistration/index.html index 960d46a344..4bf98a4870 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.clusterfeatureregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.clusterfeatureregistration/index.html @@ -891,15 +891,15 @@

Properties#

components#

components: ClusterFeatureComponents

-

Defined in src/extensions/registries/cluster-feature-registry.ts:11

+

Defined in src/extensions/registries/cluster-feature-registry.ts:11


feature#

feature: ClusterFeature

-

Defined in src/extensions/registries/cluster-feature-registry.ts:12

+

Defined in src/extensions/registries/cluster-feature-registry.ts:12


title#

title: string

-

Defined in src/extensions/registries/cluster-feature-registry.ts:10

+

Defined in src/extensions/registries/cluster-feature-registry.ts:10

diff --git a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailcomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailcomponents/index.html index 077eeb8107..305bad3a34 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailcomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailcomponents/index.html @@ -875,7 +875,7 @@

Properties#

Details#

Details: React.ComponentType‹any›

-

Defined in src/extensions/registries/kube-object-detail-registry.ts:5

+

Defined in src/extensions/registries/kube-object-detail-registry.ts:5

diff --git a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailregistration/index.html index be89df5683..577656beb6 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectdetailregistration/index.html @@ -899,19 +899,19 @@

Properties#

apiVersions#

apiVersions: string[]

-

Defined in src/extensions/registries/kube-object-detail-registry.ts:10

+

Defined in src/extensions/registries/kube-object-detail-registry.ts:10


components#

components: KubeObjectDetailComponents

-

Defined in src/extensions/registries/kube-object-detail-registry.ts:11

+

Defined in src/extensions/registries/kube-object-detail-registry.ts:11


kind#

kind: string

-

Defined in src/extensions/registries/kube-object-detail-registry.ts:9

+

Defined in src/extensions/registries/kube-object-detail-registry.ts:9


Optional priority#

priority? : number

-

Defined in src/extensions/registries/kube-object-detail-registry.ts:12

+

Defined in src/extensions/registries/kube-object-detail-registry.ts:12

diff --git a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenucomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenucomponents/index.html index 7fe4f81b9d..df718ea3d7 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenucomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenucomponents/index.html @@ -875,7 +875,7 @@

Properties#

MenuItem: React.ComponentType‹any›

-

Defined in src/extensions/registries/kube-object-menu-registry.ts:5

+

Defined in src/extensions/registries/kube-object-menu-registry.ts:5

diff --git a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenuregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenuregistration/index.html index 23844ca94e..f4c0cfa744 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenuregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectmenuregistration/index.html @@ -891,15 +891,15 @@

Properties#

apiVersions#

apiVersions: string[]

-

Defined in src/extensions/registries/kube-object-menu-registry.ts:10

+

Defined in src/extensions/registries/kube-object-menu-registry.ts:10


components#

components: KubeObjectMenuComponents

-

Defined in src/extensions/registries/kube-object-menu-registry.ts:11

+

Defined in src/extensions/registries/kube-object-menu-registry.ts:11


kind#

kind: string

-

Defined in src/extensions/registries/kube-object-menu-registry.ts:9

+

Defined in src/extensions/registries/kube-object-menu-registry.ts:9

diff --git a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectstatusregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectstatusregistration/index.html index 508966efed..18f4da4328 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.kubeobjectstatusregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.kubeobjectstatusregistration/index.html @@ -891,15 +891,15 @@

Properties#

apiVersions#

apiVersions: string[]

-

Defined in src/extensions/registries/kube-object-status-registry.ts:6

+

Defined in src/extensions/registries/kube-object-status-registry.ts:6


kind#

kind: string

-

Defined in src/extensions/registries/kube-object-status-registry.ts:5

+

Defined in src/extensions/registries/kube-object-status-registry.ts:5


resolve#

resolve: function

-

Defined in src/extensions/registries/kube-object-status-registry.ts:7

+

Defined in src/extensions/registries/kube-object-status-registry.ts:7

Type declaration:

▸ (object: KubeObject): KubeObjectStatus

Parameters:

diff --git a/master/extensions/api/interfaces/_interfaces_index_.pagecomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.pagecomponents/index.html index cdf38d49ce..15af534248 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.pagecomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.pagecomponents/index.html @@ -875,7 +875,7 @@

Properties#

Page#

Page: React.ComponentType‹any›

-

Defined in src/extensions/registries/page-registry.ts:40

+

Defined in src/extensions/registries/page-registry.ts:40

diff --git a/master/extensions/api/interfaces/_interfaces_index_.pagemenucomponents/index.html b/master/extensions/api/interfaces/_interfaces_index_.pagemenucomponents/index.html index 75a02cbab6..7d8e2c302d 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.pagemenucomponents/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.pagemenucomponents/index.html @@ -875,7 +875,7 @@

Properties#

Icon#

Icon: React.ComponentType‹IconProps

-

Defined in src/extensions/registries/page-menu-registry.ts:27

+

Defined in src/extensions/registries/page-menu-registry.ts:27

diff --git a/master/extensions/api/interfaces/_interfaces_index_.pagemenuregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.pagemenuregistration/index.html index d83f72a6dd..88d8ad2a2b 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.pagemenuregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.pagemenuregistration/index.html @@ -891,15 +891,15 @@

Properties#

components#

components: PageMenuComponents

-

Defined in src/extensions/registries/page-menu-registry.ts:18

+

Defined in src/extensions/registries/page-menu-registry.ts:18


Optional target#

target? : PageMenuTarget

-

Defined in src/extensions/registries/page-menu-registry.ts:16

+

Defined in src/extensions/registries/page-menu-registry.ts:16


title#

title: React.ReactNode

-

Defined in src/extensions/registries/page-menu-registry.ts:17

+

Defined in src/extensions/registries/page-menu-registry.ts:17

diff --git a/master/extensions/api/interfaces/_interfaces_index_.pageregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.pageregistration/index.html index 3497b32149..a8e3c70a44 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.pageregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.pageregistration/index.html @@ -891,11 +891,11 @@

Properties#

components#

components: PageComponents

-

Defined in src/extensions/registries/page-registry.ts:31

+

Defined in src/extensions/registries/page-registry.ts:31


Optional exact#

exact? : boolean

-

Defined in src/extensions/registries/page-registry.ts:30

+

Defined in src/extensions/registries/page-registry.ts:30

Strict route matching to provided page-id, read also: https://reactrouter.com/web/api/NavLink/exact-bool In case when more than one page registered at same extension "pageId" is required to identify different pages, It might be useful to provide exact: true in some cases to avoid overlapping routes. @@ -908,7 +908,7 @@ Pro-tip: registering pages in opposite order will make same effect without "exac


Optional id#

id? : string

-

Defined in src/extensions/registries/page-registry.ts:18

+

Defined in src/extensions/registries/page-registry.ts:18

Page ID or additional route path to indicate uniqueness within current extension registered pages Might contain special url placeholders, e.g. "/users/:userId?" (? - marks as optional param) When not provided, first registered page without "id" would be used for page-menus without target.pageId for same extension

diff --git a/master/extensions/api/interfaces/_interfaces_index_.statusbarregistration/index.html b/master/extensions/api/interfaces/_interfaces_index_.statusbarregistration/index.html index 9e75b18a9d..fab4a30b28 100644 --- a/master/extensions/api/interfaces/_interfaces_index_.statusbarregistration/index.html +++ b/master/extensions/api/interfaces/_interfaces_index_.statusbarregistration/index.html @@ -875,7 +875,7 @@

Properties#

Optional item#

item? : React.ReactNode

-

Defined in src/extensions/registries/status-bar-registry.ts:7

+

Defined in src/extensions/registries/status-bar-registry.ts:7

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.badgeprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.badgeprops/index.html index d90e824d7b..bd52e897f9 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.badgeprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.badgeprops/index.html @@ -3414,7 +3414,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional label#

label? : React.ReactNode

-

Defined in src/renderer/components/badge/badge.tsx:9

+

Defined in src/renderer/components/badge/badge.tsx:9


Optional lang#

lang? : string

@@ -4268,7 +4268,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional small#

small? : boolean

-

Defined in src/renderer/components/badge/badge.tsx:8

+

Defined in src/renderer/components/badge/badge.tsx:8


Optional spellCheck#

spellCheck? : Booleanish

@@ -4303,12 +4303,12 @@ A hint could be a sample value or a brief description of the expected format.

Optional tooltip#

tooltip? : ReactNode | Omit‹TooltipProps, "targetId"›

Inherited from ButtonProps.tooltip

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:10

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:10


Optional tooltipOverrideDisabled#

tooltipOverrideDisabled? : boolean

Inherited from ButtonProps.tooltipOverrideDisabled

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

forces tooltip to detect the target's parent for mouse events. This is useful for displaying tooltips even when the target is "disabled"


diff --git a/master/extensions/api/interfaces/_renderer_api_components_.buttonprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.buttonprops/index.html index dc3b6d7b69..cfb1c25d25 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.buttonprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.buttonprops/index.html @@ -3118,7 +3118,7 @@

Optional accent#

accent? : boolean

-

Defined in src/renderer/components/button/button.tsx:10

+

Defined in src/renderer/components/button/button.tsx:10


Optional accessKey#

accessKey? : string

@@ -3127,7 +3127,7 @@

Optional active#

active? : boolean

-

Defined in src/renderer/components/button/button.tsx:14

+

Defined in src/renderer/components/button/button.tsx:14


Optional aria-activedescendant#

aria-activedescendant? : string

@@ -3469,7 +3469,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional big#

big? : boolean

-

Defined in src/renderer/components/button/button.tsx:15

+

Defined in src/renderer/components/button/button.tsx:15


checkedLink? : ReactLink‹boolean›

@@ -3573,11 +3573,11 @@ A hint could be a sample value or a brief description of the expected format.

Optional hidden#

hidden? : boolean

Overrides IconProps.hidden

-

Defined in src/renderer/components/button/button.tsx:13

+

Defined in src/renderer/components/button/button.tsx:13


Optional href#

href? : string

-

Defined in src/renderer/components/button/button.tsx:17

+

Defined in src/renderer/components/button/button.tsx:17


Optional id#

id? : string

@@ -3630,7 +3630,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional label#

label? : React.ReactNode

-

Defined in src/renderer/components/button/button.tsx:7

+

Defined in src/renderer/components/button/button.tsx:7


Optional lang#

lang? : string

@@ -4444,7 +4444,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional outlined#

outlined? : boolean

-

Defined in src/renderer/components/button/button.tsx:12

+

Defined in src/renderer/components/button/button.tsx:12


Optional placeholder#

placeholder? : string

@@ -4453,7 +4453,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional plain#

plain? : boolean

-

Defined in src/renderer/components/button/button.tsx:11

+

Defined in src/renderer/components/button/button.tsx:11


Optional prefix#

prefix? : string

@@ -4462,7 +4462,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional primary#

primary? : boolean

-

Defined in src/renderer/components/button/button.tsx:9

+

Defined in src/renderer/components/button/button.tsx:9


Optional property#

property? : string

@@ -4491,7 +4491,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional round#

round? : boolean

-

Defined in src/renderer/components/button/button.tsx:16

+

Defined in src/renderer/components/button/button.tsx:16


Optional security#

security? : string

@@ -4530,7 +4530,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional target#

target? : "_blank"

-

Defined in src/renderer/components/button/button.tsx:18

+

Defined in src/renderer/components/button/button.tsx:18


Optional title#

title? : string

@@ -4540,12 +4540,12 @@ A hint could be a sample value or a brief description of the expected format.

Optional tooltip#

tooltip? : ReactNode | Omit‹TooltipProps, "targetId"›

Inherited from ButtonProps.tooltip

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:10

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:10


Optional tooltipOverrideDisabled#

tooltipOverrideDisabled? : boolean

Inherited from ButtonProps.tooltipOverrideDisabled

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

forces tooltip to detect the target's parent for mouse events. This is useful for displaying tooltips even when the target is "disabled"


@@ -4586,7 +4586,7 @@ useful for displaying tooltips even when the target is "disabled"


Optional waiting#

waiting? : boolean

-

Defined in src/renderer/components/button/button.tsx:8

+

Defined in src/renderer/components/button/button.tsx:8

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.checkboxprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.checkboxprops/index.html index 3ad60121ad..aca722bdbc 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.checkboxprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.checkboxprops/index.html @@ -955,31 +955,31 @@

Properties#

Optional className#

className? : string

-

Defined in src/renderer/components/checkbox/checkbox.tsx:7

+

Defined in src/renderer/components/checkbox/checkbox.tsx:7


Optional disabled#

disabled? : boolean

-

Defined in src/renderer/components/checkbox/checkbox.tsx:10

+

Defined in src/renderer/components/checkbox/checkbox.tsx:10


Optional inline#

inline? : boolean

-

Defined in src/renderer/components/checkbox/checkbox.tsx:9

+

Defined in src/renderer/components/checkbox/checkbox.tsx:9


Optional label#

label? : React.ReactNode

-

Defined in src/renderer/components/checkbox/checkbox.tsx:8

+

Defined in src/renderer/components/checkbox/checkbox.tsx:8


Optional theme#

theme? : "dark" | "light"

-

Defined in src/renderer/components/checkbox/checkbox.tsx:6

+

Defined in src/renderer/components/checkbox/checkbox.tsx:6


Optional value#

value? : T

-

Defined in src/renderer/components/checkbox/checkbox.tsx:11

+

Defined in src/renderer/components/checkbox/checkbox.tsx:11

Methods#

Optional onChange#

onChange(value: T, evt: ChangeEvent‹HTMLInputElement›): void

-

Defined in src/renderer/components/checkbox/checkbox.tsx:12

+

Defined in src/renderer/components/checkbox/checkbox.tsx:12

Parameters:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.confirmdialogparams/index.html b/master/extensions/api/interfaces/_renderer_api_components_.confirmdialogparams/index.html index 9f1086c613..c3659862c5 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.confirmdialogparams/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.confirmdialogparams/index.html @@ -923,33 +923,33 @@

Properties#

Optional cancelButtonProps#

cancelButtonProps? : Partial‹ButtonProps

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:22

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:22


Optional icon#

icon? : ReactNode

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:20

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:20


Optional labelCancel#

labelCancel? : ReactNode

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:18

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:18


Optional labelOk#

labelOk? : ReactNode

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:17

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:17


Optional message#

message? : ReactNode

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:19

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:19


Optional ok#

ok? : function

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:16

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:16

Type declaration:

▸ (): void


Optional okButtonProps#

okButtonProps? : Partial‹ButtonProps

-

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:21

+

Defined in src/renderer/components/confirm-dialog/confirm-dialog.tsx:21

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.cubespinnerprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.cubespinnerprops/index.html index 37fd5234a6..38d767a026 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.cubespinnerprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.cubespinnerprops/index.html @@ -883,11 +883,11 @@

Properties#

Optional center#

center? : boolean

-

Defined in src/renderer/components/spinner/cube-spinner.tsx:7

+

Defined in src/renderer/components/spinner/cube-spinner.tsx:7


Optional className#

className? : string

-

Defined in src/renderer/components/spinner/cube-spinner.tsx:6

+

Defined in src/renderer/components/spinner/cube-spinner.tsx:6

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.dialogprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.dialogprops/index.html index 26186bee69..7d72570ab2 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.dialogprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.dialogprops/index.html @@ -939,47 +939,47 @@

Properties#

Optional animated#

animated? : boolean

-

Defined in src/renderer/components/dialog/dialog.tsx:22

+

Defined in src/renderer/components/dialog/dialog.tsx:22


Optional className#

className? : string

-

Defined in src/renderer/components/dialog/dialog.tsx:14

+

Defined in src/renderer/components/dialog/dialog.tsx:14


Optional close#

close? : function

-

Defined in src/renderer/components/dialog/dialog.tsx:17

+

Defined in src/renderer/components/dialog/dialog.tsx:17

Type declaration:

▸ (): void


Optional isOpen#

isOpen? : boolean

-

Defined in src/renderer/components/dialog/dialog.tsx:15

+

Defined in src/renderer/components/dialog/dialog.tsx:15


Optional modal#

modal? : boolean

-

Defined in src/renderer/components/dialog/dialog.tsx:20

+

Defined in src/renderer/components/dialog/dialog.tsx:20


Optional onClose#

onClose? : function

-

Defined in src/renderer/components/dialog/dialog.tsx:19

+

Defined in src/renderer/components/dialog/dialog.tsx:19

Type declaration:

▸ (): void


Optional onOpen#

onOpen? : function

-

Defined in src/renderer/components/dialog/dialog.tsx:18

+

Defined in src/renderer/components/dialog/dialog.tsx:18

Type declaration:

▸ (): void


Optional open#

open? : function

-

Defined in src/renderer/components/dialog/dialog.tsx:16

+

Defined in src/renderer/components/dialog/dialog.tsx:16

Type declaration:

▸ (): void


Optional pinned#

pinned? : boolean

-

Defined in src/renderer/components/dialog/dialog.tsx:21

+

Defined in src/renderer/components/dialog/dialog.tsx:21

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.draweritemlabelsprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.draweritemlabelsprops/index.html index 247de86377..a33baddb06 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.draweritemlabelsprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.draweritemlabelsprops/index.html @@ -3301,7 +3301,7 @@ A hint could be a sample value or a brief description of the expected format.

className? : string

Inherited from DrawerItemProps.className

Overrides ButtonProps.className

-

Defined in src/renderer/components/drawer/drawer-item.tsx:7

+

Defined in src/renderer/components/drawer/drawer-item.tsx:7


Optional color#

color? : string

@@ -3356,7 +3356,7 @@ A hint could be a sample value or a brief description of the expected format.

hidden? : boolean

Inherited from DrawerItemProps.hidden

Overrides IconProps.hidden

-

Defined in src/renderer/components/drawer/drawer-item.tsx:10

+

Defined in src/renderer/components/drawer/drawer-item.tsx:10


Optional id#

id? : string

@@ -3409,12 +3409,12 @@ A hint could be a sample value or a brief description of the expected format.

labels#

labels: string[]

-

Defined in src/renderer/components/drawer/drawer-item-labels.tsx:6

+

Defined in src/renderer/components/drawer/drawer-item-labels.tsx:6


Optional labelsOnly#

labelsOnly? : boolean

Inherited from DrawerItemProps.labelsOnly

-

Defined in src/renderer/components/drawer/drawer-item.tsx:9

+

Defined in src/renderer/components/drawer/drawer-item.tsx:9


Optional lang#

lang? : string

@@ -3424,7 +3424,7 @@ A hint could be a sample value or a brief description of the expected format.

name#

name: React.ReactNode

Inherited from DrawerItemProps.name

-

Defined in src/renderer/components/drawer/drawer-item.tsx:6

+

Defined in src/renderer/components/drawer/drawer-item.tsx:6


Optional onAbort#

onAbort? : ReactEventHandler‹any›

@@ -4249,7 +4249,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional renderBoolean#

renderBoolean? : boolean

Inherited from DrawerItemProps.renderBoolean

-

Defined in src/renderer/components/drawer/drawer-item.tsx:11

+

Defined in src/renderer/components/drawer/drawer-item.tsx:11


Optional resource#

resource? : string

@@ -4305,7 +4305,7 @@ A hint could be a sample value or a brief description of the expected format.

title? : string

Inherited from DrawerItemProps.title

Overrides ButtonProps.title

-

Defined in src/renderer/components/drawer/drawer-item.tsx:8

+

Defined in src/renderer/components/drawer/drawer-item.tsx:8


Optional translate#

translate? : "yes" | "no"

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.draweritemprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.draweritemprops/index.html index 788beaf53e..ca9c45b15a 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.draweritemprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.draweritemprops/index.html @@ -3295,7 +3295,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional className#

className? : string

Overrides ButtonProps.className

-

Defined in src/renderer/components/drawer/drawer-item.tsx:7

+

Defined in src/renderer/components/drawer/drawer-item.tsx:7


Optional color#

color? : string

@@ -3349,7 +3349,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional hidden#

hidden? : boolean

Overrides IconProps.hidden

-

Defined in src/renderer/components/drawer/drawer-item.tsx:10

+

Defined in src/renderer/components/drawer/drawer-item.tsx:10


Optional id#

id? : string

@@ -3402,7 +3402,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional labelsOnly#

labelsOnly? : boolean

-

Defined in src/renderer/components/drawer/drawer-item.tsx:9

+

Defined in src/renderer/components/drawer/drawer-item.tsx:9


Optional lang#

lang? : string

@@ -3411,7 +3411,7 @@ A hint could be a sample value or a brief description of the expected format.

name#

name: React.ReactNode

-

Defined in src/renderer/components/drawer/drawer-item.tsx:6

+

Defined in src/renderer/components/drawer/drawer-item.tsx:6


Optional onAbort#

onAbort? : ReactEventHandler‹any›

@@ -4235,7 +4235,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional renderBoolean#

renderBoolean? : boolean

-

Defined in src/renderer/components/drawer/drawer-item.tsx:11

+

Defined in src/renderer/components/drawer/drawer-item.tsx:11


Optional resource#

resource? : string

@@ -4290,7 +4290,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional title#

title? : string

Overrides ButtonProps.title

-

Defined in src/renderer/components/drawer/drawer-item.tsx:8

+

Defined in src/renderer/components/drawer/drawer-item.tsx:8


Optional translate#

translate? : "yes" | "no"

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.drawerparamtogglerprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.drawerparamtogglerprops/index.html index 8c223b3943..e2541eee34 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.drawerparamtogglerprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.drawerparamtogglerprops/index.html @@ -875,7 +875,7 @@

Properties#

label#

label: string | number

-

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:9

+

Defined in src/renderer/components/drawer/drawer-param-toggler.tsx:9

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.drawerprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.drawerprops/index.html index 821db56fa7..9394d77213 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.drawerprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.drawerprops/index.html @@ -947,45 +947,45 @@

Properties#

Optional animation#

animation? : AnimateName

-

Defined in src/renderer/components/drawer/drawer.tsx:18

+

Defined in src/renderer/components/drawer/drawer.tsx:18


Optional className#

className? : string | object

-

Defined in src/renderer/components/drawer/drawer.tsx:15

+

Defined in src/renderer/components/drawer/drawer.tsx:15


Optional contentClass#

contentClass? : string | object

-

Defined in src/renderer/components/drawer/drawer.tsx:16

+

Defined in src/renderer/components/drawer/drawer.tsx:16


Optional onClose#

onClose? : function

-

Defined in src/renderer/components/drawer/drawer.tsx:19

+

Defined in src/renderer/components/drawer/drawer.tsx:19

Type declaration:

▸ (): void


open#

open: boolean

-

Defined in src/renderer/components/drawer/drawer.tsx:11

+

Defined in src/renderer/components/drawer/drawer.tsx:11


Optional position#

position? : "top" | "left" | "right" | "bottom"

-

Defined in src/renderer/components/drawer/drawer.tsx:17

+

Defined in src/renderer/components/drawer/drawer.tsx:17


Optional size#

size? : string

-

Defined in src/renderer/components/drawer/drawer.tsx:13

+

Defined in src/renderer/components/drawer/drawer.tsx:13


title#

title: React.ReactNode

-

Defined in src/renderer/components/drawer/drawer.tsx:12

+

Defined in src/renderer/components/drawer/drawer.tsx:12


Optional toolbar#

toolbar? : React.ReactNode

-

Defined in src/renderer/components/drawer/drawer.tsx:20

+

Defined in src/renderer/components/drawer/drawer.tsx:20


Optional usePortal#

usePortal? : boolean

-

Defined in src/renderer/components/drawer/drawer.tsx:14

+

Defined in src/renderer/components/drawer/drawer.tsx:14

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.drawertitleprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.drawertitleprops/index.html index 2589f5a9da..4b6b862b36 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.drawertitleprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.drawertitleprops/index.html @@ -883,11 +883,11 @@

Properties#

Optional className#

className? : string

-

Defined in src/renderer/components/drawer/drawer-title.tsx:6

+

Defined in src/renderer/components/drawer/drawer-title.tsx:6


Optional title#

title? : React.ReactNode

-

Defined in src/renderer/components/drawer/drawer-title.tsx:7

+

Defined in src/renderer/components/drawer/drawer-title.tsx:7

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.groupselectoption/index.html b/master/extensions/api/interfaces/_renderer_api_components_.groupselectoption/index.html index c9a4402bf1..0a0f4b972b 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.groupselectoption/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.groupselectoption/index.html @@ -892,11 +892,11 @@

Properties#

label#

label: ReactNode

-

Defined in src/renderer/components/select/select.tsx:16

+

Defined in src/renderer/components/select/select.tsx:16


options#

options: T[]

-

Defined in src/renderer/components/select/select.tsx:17

+

Defined in src/renderer/components/select/select.tsx:17

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.iconprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.iconprops/index.html index 80d65c7d4a..d8b3048325 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.iconprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.iconprops/index.html @@ -3051,7 +3051,7 @@

Optional active#

active? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:20

+

Defined in src/renderer/components/icon/icon.tsx:20


Optional aria-activedescendant#

aria-activedescendant? : string

@@ -3388,7 +3388,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional big#

big? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:19

+

Defined in src/renderer/components/icon/icon.tsx:19


checkedLink? : ReactLink‹boolean›

@@ -3451,7 +3451,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional disabled#

disabled? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:24

+

Defined in src/renderer/components/icon/icon.tsx:24


Optional draggable#

draggable? : Booleanish

@@ -3460,7 +3460,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional focusable#

focusable? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:22

+

Defined in src/renderer/components/icon/icon.tsx:22


Optional hidden#

hidden? : boolean

@@ -3469,7 +3469,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional href#

href? : string

-

Defined in src/renderer/components/icon/icon.tsx:15

+

Defined in src/renderer/components/icon/icon.tsx:15


Optional id#

id? : string

@@ -3490,7 +3490,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional interactive#

interactive? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:21

+

Defined in src/renderer/components/icon/icon.tsx:21


Optional is#

is? : string

@@ -3531,11 +3531,11 @@ A hint could be a sample value or a brief description of the expected format.

link? : LocationDescriptor

-

Defined in src/renderer/components/icon/icon.tsx:14

+

Defined in src/renderer/components/icon/icon.tsx:14


Optional material#

material? : string

-

Defined in src/renderer/components/icon/icon.tsx:12

+

Defined in src/renderer/components/icon/icon.tsx:12


Optional onAbort#

onAbort? : ReactEventHandler‹any›

@@ -4379,7 +4379,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional size#

size? : string | number

-

Defined in src/renderer/components/icon/icon.tsx:16

+

Defined in src/renderer/components/icon/icon.tsx:16


Optional slot#

slot? : string

@@ -4388,11 +4388,11 @@ A hint could be a sample value or a brief description of the expected format.

Optional small#

small? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:17

+

Defined in src/renderer/components/icon/icon.tsx:17


Optional smallest#

smallest? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:18

+

Defined in src/renderer/components/icon/icon.tsx:18


Optional spellCheck#

spellCheck? : Booleanish

@@ -4401,7 +4401,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional sticker#

sticker? : boolean

-

Defined in src/renderer/components/icon/icon.tsx:23

+

Defined in src/renderer/components/icon/icon.tsx:23


Optional style#

style? : CSSProperties

@@ -4420,7 +4420,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional svg#

svg? : string

-

Defined in src/renderer/components/icon/icon.tsx:13

+

Defined in src/renderer/components/icon/icon.tsx:13


Optional tabIndex#

tabIndex? : number

@@ -4435,12 +4435,12 @@ A hint could be a sample value or a brief description of the expected format.

Optional tooltip#

tooltip? : ReactNode | Omit‹TooltipProps, "targetId"›

Inherited from ButtonProps.tooltip

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:10

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:10


Optional tooltipOverrideDisabled#

tooltipOverrideDisabled? : boolean

Inherited from ButtonProps.tooltipOverrideDisabled

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

forces tooltip to detect the target's parent for mouse events. This is useful for displaying tooltips even when the target is "disabled"


diff --git a/master/extensions/api/interfaces/_renderer_api_components_.inputvalidator/index.html b/master/extensions/api/interfaces/_renderer_api_components_.inputvalidator/index.html index 4115eb073e..fd5ec0f94d 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.inputvalidator/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.inputvalidator/index.html @@ -922,15 +922,15 @@

Properties#

Optional debounce#

debounce? : number

-

Defined in src/renderer/components/input/input_validators.ts:8

+

Defined in src/renderer/components/input/input_validators.ts:8


Optional message#

message? : ReactNode | function

-

Defined in src/renderer/components/input/input_validators.ts:10

+

Defined in src/renderer/components/input/input_validators.ts:10

Methods#

Optional condition#

condition(props: InputProps): boolean

-

Defined in src/renderer/components/input/input_validators.ts:9

+

Defined in src/renderer/components/input/input_validators.ts:9

Parameters:

@@ -950,7 +950,7 @@

validate#

validate(value: string, props?: InputProps): boolean | Promise‹any›

-

Defined in src/renderer/components/input/input_validators.ts:11

+

Defined in src/renderer/components/input/input_validators.ts:11

Parameters:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.kubeeventdetailsprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.kubeeventdetailsprops/index.html index fd2756a8dc..e98edddc88 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.kubeeventdetailsprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.kubeeventdetailsprops/index.html @@ -875,7 +875,7 @@

Properties#

object#

object: KubeObject

-

Defined in src/renderer/components/+events/kube-event-details.tsx:12

+

Defined in src/renderer/components/+events/kube-event-details.tsx:12

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectdetailsprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectdetailsprops/index.html index 879714d1d4..dc05064708 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectdetailsprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectdetailsprops/index.html @@ -892,11 +892,11 @@

Properties#

Optional className#

className? : string

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:18

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:18


object#

object: T

-

Defined in src/renderer/components/kube-object/kube-object-details.tsx:19

+

Defined in src/renderer/components/kube-object/kube-object-details.tsx:19

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectlistlayoutprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectlistlayoutprops/index.html index 77be774062..546c52844b 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectlistlayoutprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.kubeobjectlistlayoutprops/index.html @@ -1102,22 +1102,22 @@

Optional addRemoveButtons#

addRemoveButtons? : Partial‹AddRemoveButtonsProps›

Inherited from KubeObjectListLayoutProps.addRemoveButtons

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:61

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:61


className#

className: IClassName

Inherited from KubeObjectListLayoutProps.className

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:36

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:36


Optional copyClassNameFromHeadCells#

copyClassNameFromHeadCells? : boolean

Inherited from KubeObjectListLayoutProps.copyClassNameFromHeadCells

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:54

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:54


Optional customizeHeader#

customizeHeader? : function

Inherited from KubeObjectListLayoutProps.customizeHeader

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:48

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:48

Type declaration:

▸ (placeholders: IHeaderPlaceholders, content: ReactNode): Partial‹IHeaderPlaceholders› | ReactNode

Parameters:

@@ -1143,7 +1143,7 @@

Optional customizeRemoveDialog#

customizeRemoveDialog? : function

Inherited from KubeObjectListLayoutProps.customizeRemoveDialog

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:70

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:70

Type declaration:

▸ (selectedItems: T[]): Partial‹ConfirmDialogParams

Parameters:

@@ -1165,7 +1165,7 @@

Optional customizeTableRowProps#

customizeTableRowProps? : function

Inherited from KubeObjectListLayoutProps.customizeTableRowProps

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:60

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:60

Type declaration:

▸ (item: T): Partial‹TableRowProps

Parameters:

@@ -1187,57 +1187,57 @@

Optional dependentStores#

dependentStores? : ItemStore[]

Inherited from KubeObjectListLayoutProps.dependentStores

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:38

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:38


Optional detailsItem#

detailsItem? : T

Inherited from KubeObjectListLayoutProps.detailsItem

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:66

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:66


Optional filterItems#

filterItems? : ItemsFilter‹T›[]

Inherited from KubeObjectListLayoutProps.filterItems

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:42

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:42


Optional hasDetailsView#

hasDetailsView? : boolean

Inherited from KubeObjectListLayoutProps.hasDetailsView

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:65

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:65


Optional headerClassName#

headerClassName? : IClassName

Inherited from KubeObjectListLayoutProps.headerClassName

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:46

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:46


Optional hideFilters#

hideFilters? : boolean

Inherited from KubeObjectListLayoutProps.hideFilters

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:40

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:40


Optional isClusterScoped#

isClusterScoped? : boolean

Inherited from KubeObjectListLayoutProps.isClusterScoped

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:39

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:39


Optional isReady#

isReady? : boolean

Inherited from KubeObjectListLayoutProps.isReady

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:51

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:51


Optional isSearchable#

isSearchable? : boolean

Inherited from KubeObjectListLayoutProps.isSearchable

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:53

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:53


Optional isSelectable#

isSelectable? : boolean

Inherited from KubeObjectListLayoutProps.isSelectable

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:52

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:52


Optional onDetails#

onDetails? : function

Inherited from KubeObjectListLayoutProps.onDetails

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:67

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:67

Type declaration:

▸ (item: T): void

Parameters:

@@ -1259,7 +1259,7 @@

Optional renderFooter#

renderFooter? : function

Inherited from KubeObjectListLayoutProps.renderFooter

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:71

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:71

Type declaration:

▸ (parent: ItemListLayout): React.ReactNode

Parameters:

@@ -1281,12 +1281,12 @@

Optional renderHeaderTitle#

renderHeaderTitle? : ReactNode | function

Inherited from KubeObjectListLayoutProps.renderHeaderTitle

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:47

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:47


Optional renderItemMenu#

renderItemMenu? : function

Inherited from KubeObjectListLayoutProps.renderItemMenu

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:59

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:59

Type declaration:

▸ (item: T, store: ItemStore‹T›): ReactNode

Parameters:

@@ -1312,7 +1312,7 @@

renderTableContents#

renderTableContents: function

Inherited from KubeObjectListLayoutProps.renderTableContents

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:58

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:58

Type declaration:

▸ (item: T): (string | number | false | true | object | ReactElement‹any, string | function | object› | ReactNodeArray‹› | ReactPortal‹› | TableCellProps‹›)[]

Parameters:

@@ -1334,22 +1334,22 @@

renderTableHeader#

renderTableHeader: TableCellProps[] | null

Inherited from KubeObjectListLayoutProps.renderTableHeader

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:57

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:57


Optional searchFilters#

searchFilters? : SearchFilter‹T›[]

Inherited from KubeObjectListLayoutProps.searchFilters

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:41

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:41


Optional showHeader#

showHeader? : boolean

Inherited from KubeObjectListLayoutProps.showHeader

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:45

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:45


Optional sortingCallbacks#

sortingCallbacks? : object

Inherited from KubeObjectListLayoutProps.sortingCallbacks

-

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:55

+

Defined in src/renderer/components/item-object-list/item-list-layout.tsx:55

Type declaration:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.selectoption/index.html b/master/extensions/api/interfaces/_renderer_api_components_.selectoption/index.html index 5ebaa888ae..e3aa431db0 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.selectoption/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.selectoption/index.html @@ -892,11 +892,11 @@

Properties#

Optional label#

label? : React.ReactNode

-

Defined in src/renderer/components/select/select.tsx:22

+

Defined in src/renderer/components/select/select.tsx:22


value#

value: T

-

Defined in src/renderer/components/select/select.tsx:21

+

Defined in src/renderer/components/select/select.tsx:21

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.selectprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.selectprops/index.html index 5643900619..b3005e543b 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.selectprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.selectprops/index.html @@ -1528,7 +1528,7 @@

Optional autoConvertOptions#

autoConvertOptions? : boolean

-

Defined in src/renderer/components/select/select.tsx:30

+

Defined in src/renderer/components/select/select.tsx:30


Optional autoFocus#

autoFocus? : boolean

@@ -1736,7 +1736,7 @@

Optional isCreatable#

isCreatable? : boolean

-

Defined in src/renderer/components/select/select.tsx:29

+

Defined in src/renderer/components/select/select.tsx:29


Optional isDisabled#

isDisabled? : boolean

@@ -1875,7 +1875,7 @@

Optional menuClass#

menuClass? : string

-

Defined in src/renderer/components/select/select.tsx:28

+

Defined in src/renderer/components/select/select.tsx:28


Optional menuIsOpen#

menuIsOpen? : boolean

@@ -2131,17 +2131,17 @@

Optional themeName#

themeName? : "dark" | "light" | "outlined"

-

Defined in src/renderer/components/select/select.tsx:27

+

Defined in src/renderer/components/select/select.tsx:27


Optional value#

value? : T

Overrides void

-

Defined in src/renderer/components/select/select.tsx:26

+

Defined in src/renderer/components/select/select.tsx:26

Methods#

Optional onChange#

onChange(option: T, meta?: ActionMeta‹any›): void

Overrides void

-

Defined in src/renderer/components/select/select.tsx:31

+

Defined in src/renderer/components/select/select.tsx:31

Parameters:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.sliderprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.sliderprops/index.html index df2e7d94a2..274fd0dd42 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.sliderprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.sliderprops/index.html @@ -907,11 +907,11 @@

Properties#

Optional className#

className? : string

-

Defined in src/renderer/components/slider/slider.tsx:10

+

Defined in src/renderer/components/slider/slider.tsx:10

Methods#

Optional onChange#

onChange(evt: FormEvent‹any›, value: number): void

-

Defined in src/renderer/components/slider/slider.tsx:11

+

Defined in src/renderer/components/slider/slider.tsx:11

Parameters:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.spinnerprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.spinnerprops/index.html index a5b2d44e1c..42b061b2f0 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.spinnerprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.spinnerprops/index.html @@ -4209,11 +4209,11 @@ A hint could be a sample value or a brief description of the expected format.

Optional center#

center? : boolean

-

Defined in src/renderer/components/spinner/spinner.tsx:8

+

Defined in src/renderer/components/spinner/spinner.tsx:8


Optional centerHorizontal#

centerHorizontal? : boolean

-

Defined in src/renderer/components/spinner/spinner.tsx:9

+

Defined in src/renderer/components/spinner/spinner.tsx:9


Optional challenge#

challenge? : string

@@ -5561,7 +5561,7 @@ A hint could be a sample value or a brief description of the expected format.

Optional singleColor#

singleColor? : boolean

-

Defined in src/renderer/components/spinner/spinner.tsx:7

+

Defined in src/renderer/components/spinner/spinner.tsx:7


Optional size#

size? : number

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.statusbrickprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.statusbrickprops/index.html index 8c3532fe8b..d81d97a908 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.statusbrickprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.statusbrickprops/index.html @@ -4279,12 +4279,12 @@ A hint could be a sample value or a brief description of the expected format.

Optional tooltip#

tooltip? : ReactNode | Omit‹TooltipProps, "targetId"›

Inherited from ButtonProps.tooltip

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:10

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:10


Optional tooltipOverrideDisabled#

tooltipOverrideDisabled? : boolean

Inherited from ButtonProps.tooltipOverrideDisabled

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

forces tooltip to detect the target's parent for mouse events. This is useful for displaying tooltips even when the target is "disabled"


diff --git a/master/extensions/api/interfaces/_renderer_api_components_.stepperprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.stepperprops/index.html index a123977c2c..656dd943d4 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.stepperprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.stepperprops/index.html @@ -5588,11 +5588,11 @@ A hint could be a sample value or a brief description of the expected format.

step#

step: number

Overrides LineProgressProps.step

-

Defined in src/renderer/components/stepper/stepper.tsx:6

+

Defined in src/renderer/components/stepper/stepper.tsx:6


steps#

steps: Step[]

-

Defined in src/renderer/components/stepper/stepper.tsx:7

+

Defined in src/renderer/components/stepper/stepper.tsx:7


Optional style#

style? : CSSProperties

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tablayoutprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tablayoutprops/index.html index 61f3c1eeea..053fa2ccfe 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tablayoutprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tablayoutprops/index.html @@ -899,19 +899,19 @@

Properties#

Optional children#

children? : ReactNode

-

Defined in src/renderer/components/layout/tab-layout.tsx:15

+

Defined in src/renderer/components/layout/tab-layout.tsx:15


Optional className#

className? : IClassName

-

Defined in src/renderer/components/layout/tab-layout.tsx:12

+

Defined in src/renderer/components/layout/tab-layout.tsx:12


Optional contentClass#

contentClass? : IClassName

-

Defined in src/renderer/components/layout/tab-layout.tsx:13

+

Defined in src/renderer/components/layout/tab-layout.tsx:13


Optional tabs#

tabs? : TabLayoutRoute[]

-

Defined in src/renderer/components/layout/tab-layout.tsx:14

+

Defined in src/renderer/components/layout/tab-layout.tsx:14

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tablayoutroute/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tablayoutroute/index.html index f4cadd1199..523a95a30a 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tablayoutroute/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tablayoutroute/index.html @@ -915,27 +915,27 @@

Properties#

component#

component: React.ComponentType‹any›

-

Defined in src/renderer/components/layout/tab-layout.tsx:21

+

Defined in src/renderer/components/layout/tab-layout.tsx:21


Optional default#

default? : boolean

-

Defined in src/renderer/components/layout/tab-layout.tsx:24

+

Defined in src/renderer/components/layout/tab-layout.tsx:24


Optional exact#

exact? : boolean

-

Defined in src/renderer/components/layout/tab-layout.tsx:23

+

Defined in src/renderer/components/layout/tab-layout.tsx:23


routePath#

routePath: string

-

Defined in src/renderer/components/layout/tab-layout.tsx:19

+

Defined in src/renderer/components/layout/tab-layout.tsx:19


title#

title: React.ReactNode

-

Defined in src/renderer/components/layout/tab-layout.tsx:20

+

Defined in src/renderer/components/layout/tab-layout.tsx:20


Optional url#

url? : string

-

Defined in src/renderer/components/layout/tab-layout.tsx:22

+

Defined in src/renderer/components/layout/tab-layout.tsx:22

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tablecellprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tablecellprops/index.html index 3b280888ae..abdebac0da 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tablecellprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tablecellprops/index.html @@ -2259,15 +2259,15 @@

Properties#

Optional _nowrap#

_nowrap? : boolean

-

Defined in src/renderer/components/table/table-cell.tsx:20

+

Defined in src/renderer/components/table/table-cell.tsx:20


Optional _sorting#

_sorting? : Partial‹TableSortParams

-

Defined in src/renderer/components/table/table-cell.tsx:18

+

Defined in src/renderer/components/table/table-cell.tsx:18


Optional checkbox#

checkbox? : boolean

-

Defined in src/renderer/components/table/table-cell.tsx:14

+

Defined in src/renderer/components/table/table-cell.tsx:14


Optional children#

children? : ReactNode

@@ -2276,7 +2276,7 @@

Optional className#

className? : string

-

Defined in src/renderer/components/table/table-cell.tsx:12

+

Defined in src/renderer/components/table/table-cell.tsx:12


Optional dangerouslySetInnerHTML#

dangerouslySetInnerHTML? : object

@@ -2289,7 +2289,7 @@

Optional isChecked#

isChecked? : boolean

-

Defined in src/renderer/components/table/table-cell.tsx:15

+

Defined in src/renderer/components/table/table-cell.tsx:15


Optional onAbort#

onAbort? : ReactEventHandler‹HTMLDivElement›

@@ -3093,19 +3093,19 @@

Optional renderBoolean#

renderBoolean? : boolean

-

Defined in src/renderer/components/table/table-cell.tsx:16

+

Defined in src/renderer/components/table/table-cell.tsx:16


Optional sortBy#

sortBy? : TableSortBy

-

Defined in src/renderer/components/table/table-cell.tsx:17

+

Defined in src/renderer/components/table/table-cell.tsx:17


Optional title#

title? : ReactNode

-

Defined in src/renderer/components/table/table-cell.tsx:13

+

Defined in src/renderer/components/table/table-cell.tsx:13

Methods#

Optional _sort#

_sort(sortBy: TableSortBy): void

-

Defined in src/renderer/components/table/table-cell.tsx:19

+

Defined in src/renderer/components/table/table-cell.tsx:19

Parameters:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tableheadprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tableheadprops/index.html index 43f331a126..678bf1b272 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tableheadprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tableheadprops/index.html @@ -2201,7 +2201,7 @@

Optional className#

className? : string

-

Defined in src/renderer/components/table/table-head.tsx:9

+

Defined in src/renderer/components/table/table-head.tsx:9


Optional dangerouslySetInnerHTML#

dangerouslySetInnerHTML? : object

@@ -2214,7 +2214,7 @@

Optional nowrap#

nowrap? : boolean

-

Defined in src/renderer/components/table/table-head.tsx:12

+

Defined in src/renderer/components/table/table-head.tsx:12


Optional onAbort#

onAbort? : ReactEventHandler‹HTMLDivElement›

@@ -3018,11 +3018,11 @@

Optional showTopLine#

showTopLine? : boolean

-

Defined in src/renderer/components/table/table-head.tsx:10

+

Defined in src/renderer/components/table/table-head.tsx:10


Optional sticky#

sticky? : boolean

-

Defined in src/renderer/components/table/table-head.tsx:11

+

Defined in src/renderer/components/table/table-head.tsx:11

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tableprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tableprops/index.html index c19cccf312..3c5cac718f 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tableprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tableprops/index.html @@ -2300,7 +2300,7 @@

Properties#

Optional autoSize#

autoSize? : boolean

-

Defined in src/renderer/components/table/table.tsx:25

+

Defined in src/renderer/components/table/table.tsx:25


Optional children#

children? : ReactNode

@@ -2309,11 +2309,11 @@

Optional className#

className? : string

-

Defined in src/renderer/components/table/table.tsx:24

+

Defined in src/renderer/components/table/table.tsx:24


Optional customRowHeights#

customRowHeights? : function

-

Defined in src/renderer/components/table/table.tsx:42

+

Defined in src/renderer/components/table/table.tsx:42

Type declaration:

▸ (item: object, lineHeight: number, paddings: number): number

Parameters:

@@ -2351,7 +2351,7 @@

Optional getTableRow#

getTableRow? : function

-

Defined in src/renderer/components/table/table.tsx:43

+

Defined in src/renderer/components/table/table.tsx:43

Type declaration:

▸ (uid: string): ReactElement‹TableRowProps

Parameters:

@@ -2372,11 +2372,11 @@

Optional items#

items? : ItemObject[]

-

Defined in src/renderer/components/table/table.tsx:23

+

Defined in src/renderer/components/table/table.tsx:23


Optional noItems#

noItems? : React.ReactNode

-

Defined in src/renderer/components/table/table.tsx:37

+

Defined in src/renderer/components/table/table.tsx:37


Optional onAbort#

onAbort? : ReactEventHandler‹HTMLDivElement›

@@ -3060,7 +3060,7 @@

Optional onSort#

onSort? : function

-

Defined in src/renderer/components/table/table.tsx:36

+

Defined in src/renderer/components/table/table.tsx:36

Type declaration:

▸ (params: TableSortParams): void

Parameters:

@@ -3201,35 +3201,35 @@

Optional rowLineHeight#

rowLineHeight? : string

-

Defined in src/renderer/components/table/table.tsx:41

+

Defined in src/renderer/components/table/table.tsx:41


Optional rowPadding#

rowPadding? : string

-

Defined in src/renderer/components/table/table.tsx:40

+

Defined in src/renderer/components/table/table.tsx:40


Optional scrollable#

scrollable? : boolean

-

Defined in src/renderer/components/table/table.tsx:27

+

Defined in src/renderer/components/table/table.tsx:27


Optional selectable#

selectable? : boolean

-

Defined in src/renderer/components/table/table.tsx:26

+

Defined in src/renderer/components/table/table.tsx:26


Optional selectedItemId#

selectedItemId? : string

-

Defined in src/renderer/components/table/table.tsx:38

+

Defined in src/renderer/components/table/table.tsx:38


Optional sortByDefault#

sortByDefault? : Partial‹TableSortParams

-

Defined in src/renderer/components/table/table.tsx:35

+

Defined in src/renderer/components/table/table.tsx:35


Optional sortSyncWithUrl#

sortSyncWithUrl? : boolean

-

Defined in src/renderer/components/table/table.tsx:34

+

Defined in src/renderer/components/table/table.tsx:34


Optional sortable#

sortable? : object

-

Defined in src/renderer/components/table/table.tsx:29

+

Defined in src/renderer/components/table/table.tsx:29

Type declaration:

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tooltipcontentformatters/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tooltipcontentformatters/index.html index 2df0cf6050..44e9fe0892 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tooltipcontentformatters/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tooltipcontentformatters/index.html @@ -907,23 +907,23 @@

Properties#

Optional narrow#

narrow? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:34

+

Defined in src/renderer/components/tooltip/tooltip.tsx:34


Optional nowrap#

nowrap? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:37

+

Defined in src/renderer/components/tooltip/tooltip.tsx:37


Optional small#

small? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:36

+

Defined in src/renderer/components/tooltip/tooltip.tsx:36


Optional tableView#

tableView? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:38

+

Defined in src/renderer/components/tooltip/tooltip.tsx:38


Optional warning#

warning? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:35

+

Defined in src/renderer/components/tooltip/tooltip.tsx:35

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tooltipdecoratorprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tooltipdecoratorprops/index.html index c416dd7fef..9a6e4a74b6 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tooltipdecoratorprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tooltipdecoratorprops/index.html @@ -888,11 +888,11 @@

Properties#

Optional tooltip#

tooltip? : ReactNode | Omit‹TooltipProps, "targetId"›

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:10

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:10


Optional tooltipOverrideDisabled#

tooltipOverrideDisabled? : boolean

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:15

forces tooltip to detect the target's parent for mouse events. This is useful for displaying tooltips even when the target is "disabled"

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.tooltipprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.tooltipprops/index.html index dc48214f45..e20049fba5 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.tooltipprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.tooltipprops/index.html @@ -947,43 +947,43 @@

Properties#

Optional children#

children? : React.ReactNode

-

Defined in src/renderer/components/tooltip/tooltip.tsx:30

+

Defined in src/renderer/components/tooltip/tooltip.tsx:30


Optional className#

className? : IClassName

-

Defined in src/renderer/components/tooltip/tooltip.tsx:27

+

Defined in src/renderer/components/tooltip/tooltip.tsx:27


Optional formatters#

formatters? : TooltipContentFormatters

-

Defined in src/renderer/components/tooltip/tooltip.tsx:28

+

Defined in src/renderer/components/tooltip/tooltip.tsx:28


Optional offset#

offset? : number

-

Defined in src/renderer/components/tooltip/tooltip.tsx:24

+

Defined in src/renderer/components/tooltip/tooltip.tsx:24


Optional preferredPositions#

preferredPositions? : TooltipPosition | TooltipPosition[]

-

Defined in src/renderer/components/tooltip/tooltip.tsx:26

+

Defined in src/renderer/components/tooltip/tooltip.tsx:26


Optional style#

style? : CSSProperties

-

Defined in src/renderer/components/tooltip/tooltip.tsx:29

+

Defined in src/renderer/components/tooltip/tooltip.tsx:29


targetId#

targetId: string

-

Defined in src/renderer/components/tooltip/tooltip.tsx:21

+

Defined in src/renderer/components/tooltip/tooltip.tsx:21


Optional tooltipOnParentHover#

tooltipOnParentHover? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:22

+

Defined in src/renderer/components/tooltip/tooltip.tsx:22


Optional usePortal#

usePortal? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:25

+

Defined in src/renderer/components/tooltip/tooltip.tsx:25


Optional visible#

visible? : boolean

-

Defined in src/renderer/components/tooltip/tooltip.tsx:23

+

Defined in src/renderer/components/tooltip/tooltip.tsx:23

diff --git a/master/extensions/api/interfaces/_renderer_api_components_.wizardlayoutprops/index.html b/master/extensions/api/interfaces/_renderer_api_components_.wizardlayoutprops/index.html index f7e521f4b7..290157885f 100644 --- a/master/extensions/api/interfaces/_renderer_api_components_.wizardlayoutprops/index.html +++ b/master/extensions/api/interfaces/_renderer_api_components_.wizardlayoutprops/index.html @@ -2220,7 +2220,7 @@

Properties#

Optional centered#

centered? : boolean

-

Defined in src/renderer/components/layout/wizard-layout.tsx:13

+

Defined in src/renderer/components/layout/wizard-layout.tsx:13


Optional children#

children? : ReactNode

@@ -2229,11 +2229,11 @@

Optional className#

className? : IClassName

-

Defined in src/renderer/components/layout/wizard-layout.tsx:7

+

Defined in src/renderer/components/layout/wizard-layout.tsx:7


Optional contentClass#

contentClass? : IClassName

-

Defined in src/renderer/components/layout/wizard-layout.tsx:10

+

Defined in src/renderer/components/layout/wizard-layout.tsx:10


Optional dangerouslySetInnerHTML#

dangerouslySetInnerHTML? : object

@@ -2246,19 +2246,19 @@

Optional header#

header? : React.ReactNode

-

Defined in src/renderer/components/layout/wizard-layout.tsx:8

+

Defined in src/renderer/components/layout/wizard-layout.tsx:8


Optional headerClass#

headerClass? : IClassName

-

Defined in src/renderer/components/layout/wizard-layout.tsx:9

+

Defined in src/renderer/components/layout/wizard-layout.tsx:9


Optional infoPanel#

infoPanel? : React.ReactNode

-

Defined in src/renderer/components/layout/wizard-layout.tsx:12

+

Defined in src/renderer/components/layout/wizard-layout.tsx:12


Optional infoPanelClass#

infoPanelClass? : IClassName

-

Defined in src/renderer/components/layout/wizard-layout.tsx:11

+

Defined in src/renderer/components/layout/wizard-layout.tsx:11


Optional onAbort#

onAbort? : ReactEventHandler‹any›

diff --git a/master/extensions/api/interfaces/_renderer_api_k8s_api_.ikubeapicluster/index.html b/master/extensions/api/interfaces/_renderer_api_k8s_api_.ikubeapicluster/index.html index 1bb15b2e2b..da2c0b403e 100644 --- a/master/extensions/api/interfaces/_renderer_api_k8s_api_.ikubeapicluster/index.html +++ b/master/extensions/api/interfaces/_renderer_api_k8s_api_.ikubeapicluster/index.html @@ -875,7 +875,7 @@

Properties#

id#

id: string

-

Defined in src/renderer/api/kube-api.ts:63

+

Defined in src/renderer/api/kube-api.ts:63

diff --git a/master/extensions/api/interfaces/_renderer_api_k8s_api_.ipodcontainer/index.html b/master/extensions/api/interfaces/_renderer_api_k8s_api_.ipodcontainer/index.html index 178b9a26e2..5e0f83b4bc 100644 --- a/master/extensions/api/interfaces/_renderer_api_k8s_api_.ipodcontainer/index.html +++ b/master/extensions/api/interfaces/_renderer_api_k8s_api_.ipodcontainer/index.html @@ -963,47 +963,47 @@

Properties#

Optional args#

args? : string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:69

+

Defined in src/renderer/api/endpoints/pods.api.ts:69


Optional command#

command? : string[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:68

+

Defined in src/renderer/api/endpoints/pods.api.ts:68


Optional env#

env? : object[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:85

+

Defined in src/renderer/api/endpoints/pods.api.ts:85


Optional envFrom#

envFrom? : object[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:103

+

Defined in src/renderer/api/endpoints/pods.api.ts:103


image#

image: string

-

Defined in src/renderer/api/endpoints/pods.api.ts:67

+

Defined in src/renderer/api/endpoints/pods.api.ts:67


imagePullPolicy#

imagePullPolicy: string

-

Defined in src/renderer/api/endpoints/pods.api.ts:115

+

Defined in src/renderer/api/endpoints/pods.api.ts:115


Optional livenessProbe#

livenessProbe? : IContainerProbe

-

Defined in src/renderer/api/endpoints/pods.api.ts:113

+

Defined in src/renderer/api/endpoints/pods.api.ts:113


name#

name: string

-

Defined in src/renderer/api/endpoints/pods.api.ts:66

+

Defined in src/renderer/api/endpoints/pods.api.ts:66


ports#

ports: object[]

-

Defined in src/renderer/api/endpoints/pods.api.ts:70

+

Defined in src/renderer/api/endpoints/pods.api.ts:70


Optional readinessProbe#

readinessProbe? : IContainerProbe

-

Defined in src/renderer/api/endpoints/pods.api.ts:114

+

Defined in src/renderer/api/endpoints/pods.api.ts:114


Optional resources#

resources? : object

-

Defined in src/renderer/api/endpoints/pods.api.ts:75

+

Defined in src/renderer/api/endpoints/pods.api.ts:75

Type declaration:

@@ -919,7 +919,7 @@

openExternal#

openExternal(url: string): Promise‹void›

-

Defined in src/common/utils/openExternal.ts:4

+

Defined in src/common/utils/openExternal.ts:4

Parameters:

@@ -939,7 +939,7 @@

prevDefault#

prevDefaultE›(callback: function): (Anonymous function)

-

Defined in src/renderer/utils/prevDefault.ts:15

+

Defined in src/renderer/utils/prevDefault.ts:15

Type parameters:

E: SyntheticEvent | Event

Parameters:

@@ -964,7 +964,7 @@

stopPropagation#

stopPropagation(evt: Event | SyntheticEvent): void

-

Defined in src/renderer/utils/prevDefault.ts:24

+

Defined in src/renderer/utils/prevDefault.ts:24

Parameters:

diff --git a/master/extensions/api/modules/_renderer_api_components_/index.html b/master/extensions/api/modules/_renderer_api_components_/index.html index 033cd99ff1..1311bd2576 100644 --- a/master/extensions/api/modules/_renderer_api_components_/index.html +++ b/master/extensions/api/modules/_renderer_api_components_/index.html @@ -1195,47 +1195,47 @@

Type aliases#

InputProps#

Ƭ InputProps: Omit‹InputElementProps, "onChange" | "onSubmit"› & object

-

Defined in src/renderer/components/input/input.tsx:21

+

Defined in src/renderer/components/input/input.tsx:21


Ƭ MenuContextValue: Menu

-

Defined in src/renderer/components/menu/menu.tsx:11

+

Defined in src/renderer/components/menu/menu.tsx:11


NotificationId#

Ƭ NotificationId: string | number

-

Defined in src/renderer/components/notifications/notifications.store.ts:7

+

Defined in src/renderer/components/notifications/notifications.store.ts:7


NotificationMessage#

Ƭ NotificationMessage: React.ReactNode | React.ReactNode[] | JsonApiErrorParsed

-

Defined in src/renderer/components/notifications/notifications.store.ts:8

+

Defined in src/renderer/components/notifications/notifications.store.ts:8


RadioProps#

Ƭ RadioProps: HTMLProps‹any› & object

-

Defined in src/renderer/components/radio/radio.tsx:40

+

Defined in src/renderer/components/radio/radio.tsx:40


TableCellElem#

Ƭ TableCellElem: ReactElement‹TableCellProps

-

Defined in src/renderer/components/table/table-cell.tsx:9

+

Defined in src/renderer/components/table/table-cell.tsx:9


TableHeadElem#

Ƭ TableHeadElem: ReactElement‹TableHeadProps

-

Defined in src/renderer/components/table/table-head.tsx:6

+

Defined in src/renderer/components/table/table-head.tsx:6


TableOrderBy#

Ƭ TableOrderBy: "asc" | "desc" | string

-

Defined in src/renderer/components/table/table.tsx:18

+

Defined in src/renderer/components/table/table.tsx:18


TableRowElem#

Ƭ TableRowElem: ReactElement‹TableRowProps

-

Defined in src/renderer/components/table/table-row.tsx:7

+

Defined in src/renderer/components/table/table-row.tsx:7


TableSortBy#

Ƭ TableSortBy: string

-

Defined in src/renderer/components/table/table.tsx:17

+

Defined in src/renderer/components/table/table.tsx:17


TableSortCallback#

Ƭ TableSortCallback: function

-

Defined in src/renderer/components/table/table.tsx:20

+

Defined in src/renderer/components/table/table.tsx:20

Type declaration:

▸ (data: D): string | number | (string | number)[]

Parameters:

@@ -1256,7 +1256,7 @@

TableSortParams#

Ƭ TableSortParams: object

-

Defined in src/renderer/components/table/table.tsx:19

+

Defined in src/renderer/components/table/table.tsx:19

Type declaration:

@@ -1339,7 +1339,7 @@

SubMenu(props: Partial‹MenuProps›): Element‹›

-

Defined in src/renderer/components/menu/menu.tsx:275

+

Defined in src/renderer/components/menu/menu.tsx:275

Parameters:

@@ -1359,7 +1359,7 @@

createPodLogsTab#

createPodLogsTab(data: IPodLogsData, tabParams: Partial‹IDockTab›): IDockTab

-

Defined in src/renderer/components/dock/pod-logs.store.ts:190

+

Defined in src/renderer/components/dock/pod-logs.store.ts:190

Parameters:

@@ -1386,7 +1386,7 @@

createTerminalTab#

createTerminalTab(tabParams: Partial‹ITerminalTab›): IDockTab

-

Defined in src/renderer/components/dock/terminal.store.ts:18

+

Defined in src/renderer/components/dock/terminal.store.ts:18

Parameters:

@@ -1408,7 +1408,7 @@

withTooltip#

withTooltipT›(Target: T): T

-

Defined in src/renderer/components/tooltip/withTooltip.tsx:18

+

Defined in src/renderer/components/tooltip/withTooltip.tsx:18

Type parameters:

T: React.ComponentType‹any›

Parameters:

diff --git a/master/extensions/api/modules/_renderer_api_k8s_api_/index.html b/master/extensions/api/modules/_renderer_api_k8s_api_/index.html index f7f0f669ad..2766c32ec8 100644 --- a/master/extensions/api/modules/_renderer_api_k8s_api_/index.html +++ b/master/extensions/api/modules/_renderer_api_k8s_api_/index.html @@ -1256,7 +1256,7 @@

Type aliases#

KubeObjectStatus#

Ƭ KubeObjectStatus: object

-

Defined in src/extensions/renderer-api/kube-object-status.ts:1

+

Defined in src/extensions/renderer-api/kube-object-status.ts:1

Type declaration:

diff --git a/master/extensions/api/modules/_renderer_api_navigation_/index.html b/master/extensions/api/modules/_renderer_api_navigation_/index.html index e8d773044f..f5e349e983 100644 --- a/master/extensions/api/modules/_renderer_api_navigation_/index.html +++ b/master/extensions/api/modules/_renderer_api_navigation_/index.html @@ -899,7 +899,7 @@

Functions#

getDetailsUrl#

getDetailsUrl(details: string): string

-

Defined in src/renderer/navigation.ts:71

+

Defined in src/renderer/navigation.ts:71

Parameters:

@@ -919,13 +919,13 @@

hideDetails#

hideDetails(): void

-

Defined in src/renderer/navigation.ts:93

+

Defined in src/renderer/navigation.ts:93

Hide details. Works only in renderer.

Returns: void


navigate(location: LocationDescriptor): void

-

Defined in src/renderer/navigation.ts:17

+

Defined in src/renderer/navigation.ts:17

Navigate to a location. Works only in renderer.

Parameters:

@@ -946,7 +946,7 @@

showDetails#

showDetails(path: string, resetSelected: boolean): void

-

Defined in src/renderer/navigation.ts:83

+

Defined in src/renderer/navigation.ts:83

Show details. Works only in renderer.

Parameters:

diff --git a/master/extensions/api/modules/_renderer_api_theming_/index.html b/master/extensions/api/modules/_renderer_api_theming_/index.html index 7cd07613ce..cd283c1c99 100644 --- a/master/extensions/api/modules/_renderer_api_theming_/index.html +++ b/master/extensions/api/modules/_renderer_api_theming_/index.html @@ -864,7 +864,7 @@

Functions#

getActiveTheme#

getActiveTheme(): Theme

-

Defined in src/extensions/renderer-api/theming.ts:3

+

Defined in src/extensions/renderer-api/theming.ts:3

Returns: Theme

diff --git a/master/extensions/guides/images/certificates-crd-list.png b/master/extensions/guides/images/certificates-crd-list.png new file mode 100644 index 0000000000000000000000000000000000000000..19c9558f7118b43e45138dac4d12f73ba648678d GIT binary patch literal 811453 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
i?B!l|m(j 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
9!7hB*BweWUzMIV9meOR+nuy%ddQpKzD8TYi3 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�F_RQs&$fHV$gKK4X9PLQ1((c+oC=et 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

5n}f-)2b+8dOqeos|99$* z{jVYfb4-9;Qx{Jnhs&roUtb!9yEy?{J5ga1&Ao7k)DR$Etxj)2+mo!S#Si>VT*z7} zjvGuUl9O>t@WuWRCAZt=r%UL*&)F0Wo4-@PxAB}Xwv)Vx7DqMsNM?JFl4jkLfSa^Q z7;YsFN5}q?03!q!41o1ulj^vQXjTytM^TX^mWVi)V3G?;7OM`sYnP-Efw`pL9wi+g z`=*!sPydr5{*(puQgrM#zBA`ul<66`8HU!eUg~`alYr$GYn=yIq81mQHFs(1AVNfT zvb5cz5kaZ~L`+}Kr4A1vgw`5Rc8vfw$Pm?F+_Wc&Q+wfdM$_ZNC#&X_vxWQtgm*Yh~UDfb0>`z75Q`n3D zl*BJh7fJ>3F-o48snVBt3y=)g#LON(T*r}6$1<=kk=ko%5y)%2B%MR2A7vbPeq@i~ zcXxj|68qcTa}^hm+jgV6(oEEByDWpfq0W*Hbn3>P9Ut*?>&~F))A2OVTOaP8Kk&n^ zf5y%J3;52*2(SCx>+N-6QxOH(!!G^(qy33*-haX!CS|3mzEn-4`h6CwL>=PYqhw~gOnGJcO*7x3ZuK)n2qac=re1f#I%h7#cr z?1A}s5Ywg}7d|y!9z568HDH~^1+ewpJW}kqDV&4$c4du56gI}_;gmILd01u*Y2={*u1^p8R^t0GS5m%)>PKV4LuFm}P>^h<)zm;i0PK z>@`wJ-HHR&H{5R$I0IF8pjcht0rQ?V!|76rDgT=3KeIJD_ zVZ*=KP1t&@eILDlSIm3SXt?d<0Q2|0fGhuU?5R5=vn^6#rO1Jj)OiNWz4~35-Y&vQ zMG`QKuu$Xj&oBZQo4|SgHGOTaVJYH)72ZMnFL0Y}mPPIc!m8;yCEfCjoA6l_>~SLX zX2^6P6v{U!hSaPGMC%IPhN``Q z6OTIeNX+lEcFj%NI$~?U%G~sAlQRQflxNBTAF~X9& zwp$X5TSjqs1;!Eiit@E)p9^HvR&fi-WXn^a+Ia_Dt%y4=*mylSd&NmO`}S$ZnxtX; zei)fg(t)#L<_HMMd{~mQxWqns$Fl<|uZBeI^?Z9$bgWV*^>0|-_~ugB&@-}-V{dW} zpjq6J`+kmY7!zZHwzh?Si$|zbX-D1myYwzv2e%q1j_(H-Q9Z*K-rk4i%%&gdVL>tZ zN8avEHN_TY4cj~d>3~D0Us56*=R#+PO*Kmi5Ohb;9&=!Lmua_mp&nSOOim`zRfMIw zEpT{|Bp;4sPrvqY)PABtYeem06?WoF9w*^lvv=MiWbj-ANWZ13!S>Zq{$tc4Q#xwF z@*q}If<0s&2i{J3kj#kwO=HpgX<(<_F%d)#Ap%^l9+WOipB}6byt+ST@mU)N^ZGz3 z%k@f}h%KG<8XZPhBJZ5WFQ(v0r zFFy9bP?c}W@8``7Tie(j7qI%`sTD{FXMnZg<5Y2O|EDV&m|W8PYU#IGtV2^eO zHk^bE@5NUTHU`(Ie&d3cfnkCeFEN9YHIq|@ay}oGt9`Xi!Od!-IU4W+qZ|7g>R1T) z#+T2p$rQjxls^uTCmmVBjbK(VVIu@N6iWJ3F+_qpZf`B<&zZ0d-~M>u@KPO{$1;6L z$S`-imZKUo{_Mv7BLGK?N;$2m#$Q4vCx82Pi9dEPM(v8>JZ!=DJ6zfE=8GClH=*!H zuFp>uLw?`qgl16dI##YZOcFWiN@lDCdK-R%GDJ@TM69Yb`a1<+*|o3_YqHk(ws`!! z5+=1Q<+20|j8H2Fb6yfGr`%>+ycelew~uxCK!q;*3aB^QpZ_!NMv|%zQ%>zpG ziHOj$l=3OiK+`|>3tZI#?iX0Pd#YI7ludiczBOC{QHY>BfB-SzkM$hYSml+>?5LjF z+2F*^s+Mj__>4~yI5_Bt+`_b&^x=@4J&X^zt|%|}b9nA418tj%K7TChWhnKQzn0s@ ziTyj%4;V%ozfSf2P3M$B;U@K|x2!ayG$*st*w`}2ny@WYtexm=o?SblD38Rp4+EVT zQMP4k9(lu@)r%9xa(LwzlC&*{#x}0NdY3SxT4sKEk3>ciA$2ItB+q>Qws3J1>tXOI zOte8>?^qT*2C@nohzyx4b7PYD#!<;^iR3*-Y$PreMazi?yGxfh$!qz1SJOc*P>_?$ z>UiQXMH~gTks*l;4}4t-_ZL4fH}Hihbjq_gKO2?5k&$~ka2U%>mV_3Zr%B)XIO$v8 zjenW@O*6LAhd*EYjxM7p-~MpMVIj97J^g|GT;HYK+$ZUlj%UzPyvNPwDU1ihq@C?=L&>6y~+d0_fxu(cqzE4 z>tI3*VKb5U?7=0AxXJu|`WnUOU+?jlU-qnF@hC$qWbOTM%gKqJHhzrQ~e=$mGw ze2saIaznvU15V^h9Z0Az2zN5=V+ndCpWnO>XE|Uz*&KyipMVvlsIOD}Ze!Q3;46EL zNQ~8M2jNM(c50g3`_(z0oN>yfcCL^$0lbgv92Q23mxG-^Yo4a39)2nSNn? zOiiR_2)uaQ_imbm-0c0j`mvtE%&$K5T3xB2Z1l*BT`{9a2wStE-_m?Ky!>U);)Ccj z*Uo`)Q-R|4DR2Sa3JH7gUX`ZC`I36tuiSAvCd$Zcp(x+Z2aL)rV6R=S94%R);9rVn zLz_~^}^gOikl(WxfsgqNnFo=0a`10w9~lD->Gk9uBv7QKEVJ-RwV=Y08( z1O)Z78{hA!l^^2R525BL4cbD_%g^oZ!MA%IQ`}ildl9|yt_rK`VB-BrD1tL|;WL(h zq{Zu}Qp+`^q@lQIjc8Ty6HA}3*JPU3J36Thozk_H%xSh|B1;n-GIKHv_9{}Gz9ZO6 z+|Dew{U6M|S5%V;`}V6MMGyjlg0!fpV55kHo`5KfgA~gM3WlbjgdU2J00JT~lvoFl zE+c}JfJl?xf=G!BkVHBJLhq!Ikg%V?ynF5c$@jf}`(W=`E|v#)FnONb^}6m~n3Wii zGcF_ymQ;(B5o_nW{X1$+1}DNI4METHU*&sPR*D8gQp(HPU3LAKKWXuvp@sT(Drc`N z_Kw#>VJS?j`S5M(B~+D+g#CH|jA1cQlH!r>#Ow_+9Jd+WO4($7xPIiwkpYVuDu>3s z$Nx^0u>ErDKSkw$1WnkJ*+Wx@u{c#rH+k8}D625zFosLq0aF?}^HnptZ8Xg5UzA zypC_BJKcv*#Q`XcgC1#pciG;+$f#U)d&@bvy;_ms_7VOhf!X=4gb8hyQQRxHj##_lUA9I>hUuv~n z5&@VDVgQq&wV+@#4%4j_EKg|}yETd*1_%WS8fnY()02NwWbG*FDO>4>tTs zIixZD;w$1-k*UVeOWb~PwgL=jypvFN=w#N**wU}Kkqon1C~2$1vNucZJ>Ddn5Be>; zKhrC^ok|OD3Ue}Dq!8sF2e3&O7Ry-)WgjB?lPp!vEHGO4XKt(=0veR&zF5K1Yc^?x zUtS|DDwfgHv;K1^mGZZ}TdY~;TdVhmc>ya#%W9y=K95^waxYQ=u2u_t{T@YMX~59;A+gR(9OGv*nuZmh7M(H&N7>Dc)fdW zRDNaPER3oS8w{Cj3vn#sq>TolZD6v@6QOX!%s?_wUdqt^8S)yH86l0V7Sa1)h-{i7 z0P`5EsHes^5|*p`=6S7v7u9q7`>1EdsJDv^96HMB0Gc8HuS=KHk4m1~{9wnnuU@3- z4gmkHpwRR|i;7YgJYW%M^>4c$P?iyd#|x`GSU~}*;nCD(8OSsS2sQdwj|mH+=BB?n z{92O@bmU{71h}y#ZG-U|gY8=ZoHe%|{MM+f0M;OOUzjW_N)7Ug-R`-eS=3dgR(yPp zXf+=?VIjaXpZ6zU$r1bL%7+htQw{kIf~x>3c>MRmYCr$MhMO4U${ zd3Zr5kns(Z6r~;1TD1u{%HC)PzqZLgnK6no)~J=2mN+t3_N=v8Xpuk!BLcR*by0nq#{Ic1@S6s?z(RY6 zlA`;(T~@=nUWLMf3Lzm^_;4>^;s*;FlV`qRchgR%JZ$M|6OZ4}2wrMw^c8gifP zQdc+m_K~I5lNn1EYJ04aiQQxotIF`fv|gavWUqCIEYI{fEp{gNrc7{JEb3~9w~I2; z=arssr;Re{Det5xIIAa)5l!a3UIazX@HXltOD>=;hdrUPU2C|#&<_3r%bnQnXdfJ1 zy=C-Tplk29@85lFZ0@_8{F%7cHw|Tdt_Mga?76w$SxwV0t9o|g^Dmd;x3>60@`iop z-Q}~TFPK*}n!oR*Ib?&-08 zI@1wd?>D;CSV2?^z(9N#cHDLAH$mRkWE13GWJ}V*RI_%3GN`^T~AmGTV{B{Z*v(#y$0 z7fqsudBlaR3j%lib)Bs*{8=RN90DYv8Lp1D7RX z&v$K{A(w66k<6#BaBo@jyivrVU<+OU-Yz8UG+vM0HBMh^jWWZX=e|r5+?OdYLm_I{ z9`Y+abN-29gs>ppD&q3n`8yF!n>s6PbJ_l>m{*R*u6bupIR70J7Ua4(Ll6oj#%|wr zqQB*J6Yv{ij%Vi*@u>yv?cYo;XtL0?2D&>%QgP`r}@yEV+0IpALfmyp7LuO_^0u! zwB*Fw{m;Hm;jCb3_1cg7AypI+YVD!{xmV?7o+_o~3%#pRrC;@Y2u2Ago7I}i7{N7Lqo9)_c$Y5DHpY z7$1QMslIoq7e1gNw_o4!yyLMJ`|fWp9sr^Ps&Y!oDim+8Y`g|zjz!5sujsGFh%35Q z!5-9DFN@t)Xma<|A}no{*bMXl^)HXf5u)AoT%uTzL)qO@4>{M|{2LB4pd|Cb%dN8S zq|1@c9dD&2=F0XzlN5K0m%`O)?~MXd)6DOW-X-;S960Aim-CfMT6_lid7x6HuYKEDBdg{Eu&@H}^Vgkb%9gxI6% zlQXLhS2mWX2lNUc%1$9}(ShZZL#e3F=7Gx2O+#zCcaK8wbxO3;HV;rOgOF>3ZU%0& zEKQg~kS~d03skfz`4zeWVES|$jla!9-Z$7|W81O5CUeY`|I%shuzb)Hn<$zd0B$NNs!Y@SdkH5R#(jTE@~F~aorg!*E>9jB@6dDqTm0fDd%QQ!eS9BYyIWnCC5 zwV_BuX$Y8_|A9wswOgcP+ZCD}k-dA%2ohwSi}bhq1)s9`cxCpj^w;OeTy2&__Z-JP ztb<$E6d{Y!^;(dZFbMaVGj7hqu?X^KP|3F>KhI`x$|}|63PvUH%Y5vJ&c?fL)6e>L zU}6$8(AepdCImql{2lCO6J`FBb?8N`lywUK64Ca0?Kmk)es!%g(n~wkF(pI4pbOx7 zh_xji2!he>u2_Un0Ir9Kj?=8CGQAjQ0>eQ?R8EKjT#qR(*CTogN~UuO0rsCNgh?pkE-XpD#~r(0RSog^Fox&0AQnx)Hd9r`Ob8l!^_!YU_R%NUW4ezllT31PG5zbWX-&N!2SN2rv@UhA*L~{XcF|AR z+V7f51{1&ld416gwnk3LynY(72;7M)4+e$??!7_B$@d;OIApO&DWRWh7v+{c$g7l5 znr9uyYOyqfLq;4((chJx>K+5e266^}n*OpFW8ucW>VZtl$mX_;C+MmlTS37RFPV3v z@dG*gzvqg%p_w|4%~2Zu-(QtwP0z=o059`!`RayK#=|alzA&x@+z9H)VEHR$unuS7$6IZgO3LkPQmSm6rG<%4vzIrQ3y1 zYeck0kp1W9F~ac&OqTVAL}c&gCW?GIYTv0*bRJIoo<1*MmupbkQ~*D3ZGG15(&g)t z1OFtBT8Ekvya_V=yq~*|k95?&`=MC>jxTaxTKf*Zs7xKEr+MkD-gaT{yvo^vRidkB zM}AMH!Foe=D8)s^_2yHcgjXq7L330FdPkYY@Gp^+XZ4Iy zSQP~q6}!)PS9Rn+Sf9Ja!p)_6M^8|f~!|Eq?Q6Vkr2?{%?ka0|=$%>zyXZBx1>dB+;{GG`7R5n_m zP9TU@P1_-b40(nCBC76zpRt9ol+_i7`b|BHJV@*{2tuWxSSEUmJ!C{)OuZuio=!Dj zoM6ry9fwLzzMqp4Big>H(vBWaeu{vzf7f7qhSaOYH_A_}d=J~~d5oRiBL(ixiBA$h z;G^UkbJEL#wtmpnk`yL^!wl4bu9=}EjQ+}xW`1w&koM9%!p`kh9nCe5Bgpv5;p!9c`HTngrPMY^Jwq8@>sPF6+U5Hq3(2 zzepcCeUAG6vW60R+Z11}u86Ogx&`r~rlVXqu9uXa3~JU-xi4}8*uK=)wp+2-q9X44 zU~sV-kFHMBpO{<<38Wb!AJ+8@#v zq;PwWjkU#b<;agS=Lv12erEjMDgbt5>8i`YjUqrxNmiRc3~R?r9Qlo2vZ`io7KN@& z&>9KTqwHcwaEaPf06W6;aU%NeU`H|l?1;JBazlt?sqttmVnTa)aa~&^QJhD0?Pc+3 zc0%mST-XnSzO2NH%ek|9If=*k{MSVzIFeK5<0yp35{R=dRjY z$wiIaE>Dn~wL2elekB&GdYn)pU6RdevDPh$32B6qj_SUgdKm7IJ=_RHM4NnMGog&)C7 zI3dAH9zRko+l45Ox@%O{fZIin(wi5qYlhS%Cr#U^zyc2l3zq)g8Q?MH#^#0Ez$Wgo zCbrj`JEjL8&gTzjHuy&>_t6{%Aqm&Mk7f)|dT22)9K45wv! zzmGKlGFeu@P>1J!Mo3|_U9Kucm-RSW0@wfpttf4&3m&IMkZT(*&0s^%IKz_Fs8tf; z;2QFXlX{TH@^9w>l$gVkK0>FUq9ev#+3jnp*R|I>B$M0Aw*MiS82c@#%cE*jEh`Ux zh01dT6hauq6&W%g`;hub^l+OzY^y6W0bQ_py!iM+Z-xevUKK@&faB#I#iFWQsOX}y zWFB2qakfz^T_GgnNhXl!X!ZKkzL-XD?AGeiXk~T6&G@~S_7o_8i4ck!Y-$RdJ1k|D zy-%12zPP4{L%5{N!0z10QggUBsrdS_jLPB9f~xP7zbJ$T+nt$LJezS%LoidOYfjJT zxlj1a+sRKd63+9}$z}s{5315KQXiMLmO*4*x)JJDLepw);_jC%8%KmoQVvIIZnq2$ z)M8P=+*bcnz@_w%)!Qh_tY;ZEWJ)NWD9&Ak0)Mc|K#HsRTC;oc7zm30{U5mbPRVkr zwk<;nZu#T^*}Tu`maXRp6@@Z#97&2bfpR;t;bgK=VLz%*2yrs$yt;W2Dv-UJf)%8`W0RTGz@;b6vw&RVi$ zD3LinAJxsr!~PNoGhVW|zD{l)Qdd1OP+>!_8#wBIXN-fpg5M&8^ft0wEu|KF_#$<( zE*|ZV6^wQF_Rp2G)&th$^F-dhsVk(!^&UuC_rQZf>3yV@`~yY_e)GA~;shCqhH~Y8 zoN7%@17FJFFZX?FzVk)4KPbF_P0J6RPs<;Pc126C6KBHzHXPp<+tHOU?0buwpaAlU zKT7w>jF;~1E}QR=HrfNg4R`^^D?G9J=e!M5&jFmu;{7*8|QtRC4KYPWFC19?krW!_>4aIRT^!-;nvpfqBlt zJTG`5-K;tY4J;l)HsUCa^b=}hSDy>>_7B;%tlk6+%O^n7jm3d`|6J@rYC++0$Dq?= z^W;7sYaTF6<(a(q@Ul%s!E&#;`MUT=*mT%EmeJ8RsiKl<%=&SXXsBL_6rpV1jCZne zRM$}fj4C-^kSxw`2VKAgEH?tsm308RLK`yzfloKYh@)0{Bgf;0!TkaT^oD^ak8W!{ z8C%)98rl80_e)esdvQr_+o9)@f`mJQ_{*(!Lk7*Ihtk}LnX21I&*HvtJRx#rk+Xag zSshtIW4`=A#0*LcTORuUvs_1K&{@c@{KhN=R^50HZdv*CMCtBxnCI@6i?YG$R=+wu zs~qR53V7e~1BIgBNL*ip`b|%>VC}Mg!5~7MgqRA^{c;emUXHgEfa zMn(uJZyER866Y?9wslg3aY#Mufl$h%{ez56xh_na7PEMix%N)vpEfn+O=@pK>1J~C z%gP0BAOp3BYx}ziASP^YR<4*oi%5R4e`y{RC%^hMuA9FZ2VU@lsm1gNL1=qlH>*oN zty?m|juDr4Y|R)grVg=9mZQWtKtMBAsvt#bKX;id`b+e5QqS?02VGDnQ4C8;2)qSb zZ7>4$P8M58OK6?>Jd&$=@4hVjmbKJ{vehS9tB3Y)6NU1--ucb{0G30i`?d%E=1BD> zscLyn-_LP}Th6Q>%#HaYo|pW1JS|?c`{pX+Fjtmxn`J2HdhtF2(fhVsPkS&YHlM1+ zlfv4=2WX+fo1EqU1G50{|0mNccq^gm>Mu594Zsy-prZKXOJ|5T3khN*f?eD5vdWJo z_A~{~cgn41zaZiExfUj8_eQacR_VEbN2lA-Hdt!drq=catPCv|eS?HAK`7Z^cB$Yj5hCn(@nclbism z!mX&`^~`xP(Z{11A3PHSSf7!q^iGYmL9X@Lc|ULwJsHJkf@j45TP#tyg?dzu&9s^#Gz(2A+0eOb?+o*Pw~9(Z7DX5$n>J7)@fB|4SlcaseZ z!(E$>dj2K8d(q+-ioK^h{nYPR3~aL<>Gu~9y^gA3&sZiQhZW4>LPOPW15D4cl*#5t^ublhX^VeLu;$WNIIW<=|$pVT~2VZE;*tA*2NgW zx=;YDi+6pA;0-tQ~_T2frEjk`e=CErq{JqDI~!L>)TioWW2n3gs#HiWs}mg*Pc zYmOD17kw@%K8GoL>nfj{^KA7{F6rR=a~=JFK4<&-;nI-E$LvwJdz;UVBfpoay5|Sf z{kXIIq|U7EwX0(;?%CT?sz~QgW=bR8PUXx&*!o-iGZSeEf7}`PzYi#u`+$hcZ+n0F zhLM4VeE?8~^F}IyKN@o9z!J2p`{q98m6QXgbixx(z&9A`CIlfAkt!kIJ7do-H{)l} znNWy#Nj{*?T_^a$FU5(#<{H~gQ(#;dym$$#QFh3kPf_e;Tz1ip4~a`;gQc%Z!i4|LD22YMa~P+%q%z)e-8 za|eAF42!AWPNnz17R;W#tYOkQFt@1kWopp8ygw4@9=Pb1qFh7}+njF> z@O#A!d?!Ibb<_b-xI~owHX>9%$On7gzfS*YXM=d5C zVX@}IdFuvPFSSTV^URk_HW+IT$dihY{b{Jak{n7ky_e9Y7E;yiR7#Xy8!^}OQJaV` zOJm*?c09PIFnN0@J3%XCpc5|-c%Y#!FtBVn$058hhM$X9iQltd70RRpxp~_I8cBX zV!&!~5#9Q!AUpIUOM@U7GIRThhLUXKCi4*xu4FFe8Ak?{+1H>m<+OY&<0X#_JTiQy zvxu(wDk)Kp;|*jR^#84zTv&FCKjg<>cI&keZR_nNn@N{y|7#IVWu+b6yPs~YDR=Eo zuV`=o?%j>xZlkqSqK=}75AN~$;v2<%!yeW>EU zB}!npSF~9(tn)o=w|Z{fc0=PhRNmlW8%m%uzNhWjk&Ml67F}B2Oew~bk$2thj7t96 zO<*L0M~JN3q;$&%C(%(q6l@mL%~)Tp=!%B^C-$F+PITJXGiOG5dqxJVfRX!L3$2*j+e|+ulKV^$r^{q`RuK95Xl>WF>b1U=0NZCKerha2VcgOFY z6c!|2zJS{O0BJhhbraQ2Y5Ld2+NL{VZJj%{nFizAQS;e3?}9uK-w`@}k)=4}c&)Nw ziM5OGom7yn0E`Brq}t}JNA`>_`@=%kcXHebRyGuOL`+;#Zc}V6+h_@ z;ut9gIktGzcGmz+n?NiSvhG%6s$2?ZQ`0u%BVfonQ$h1Y@mJKnNw0Sd(8)iNYBSUT z1N6f9ywK{f&75Iedy_VYqR4;37axVqWa^G#h3%jdYBZPTkK3-=+c)%8N;;SIJ1x$; z6#=;%wS%MieV+mZpCf1ImmcNJOAdJtx70GI<=nDJQ=*Q%4A{mETLmP2y+PgEXQFQ4 zUPwGtDTz59=R!3J&ThYHW2@DN%l-h72XuKx*_VI%AF~?Gw4BZ@EifYteE;sM8^A%^ z+)e*7`?s_rVa_FQz4HihV53}ekWtiII2=?L59+sTj{MpZo#EmF1fDeSKdp8ur3MaH z{KlrDroQZEgW;QC^33yg-aL5oOl+JblXskK-&txAG2XDx&~`Wy0qD#K$Yg<#k$+rHNnH z3tiMT>pBlpCh0XTM$;jbk)EyekJlsOHNaIBxO4r^Y9!}H%3;8K99D7&Fdx4vl+-MW zn!L&8nvccW@a(wBX_Y-{*6Rmal1QS2mU(JHmtC&|wq&DXCSwagq4pRUgmh=sVcO;0 zaqD_BC|$L?DETe1HH4EdOkuN11xY_jR)bsGdr!1LJuGvDfa2%?PuPiz@6S0H)fB(` z`M308XVZRuuVT2B*5{tTpO(rm4e2cv818*V<>^<=caiN*g$;J6*%a|bmKl%uIsH8C z_vsq@%lwl2*DwD#SEPHCqS6tj0mRsgLR2CTUGCD^zYQJa5S-nuY-ODQ&_Dt`OUzardPdA- z4Qc1|gwN*$JA~|@E{Tesg`=%y+Snfk;J!m6LE{tquPVQ_tcAi8G!ps$Y-P&-`7-!l zm+JD^tE<)S872r3gRPWqtE(=f20Sn zb%YP3i|ML~`nEKHLfybvzQ_nAnp4DO>YgvN(kh4hPJ!Hxy|x`bAokRC>D~pw=8WE{ z8#dBl_gGW@D9OXh_Ab-TKd(jX!)jj7dF}7PjbIx;AvT3phkiF{ZnAZ)D>HO>bVVxB z;gUPT#G;}{#-cn@_piYjgZrZFhd@M23=_Y#`;DnP1$<+IS-n$Zzwlkzm6iUW8AR-B zWp5*bC4_I0%?y>PV}G`8&lKNvT6)Lyps5{-a18Ev*;9pUllGxY?a+IUNp7A&0>179 za7Jr06UC2cs*QDV#vtjRPeZ)__2DY4=Ba6hn(@!Fxi;KYTlEtyS3H%`C3%Yct5Q8x z*c?eAAe=3nJn;f4uIsZ${NhBuRDJ!i^+J?Vr6wPWsl`MYI=u$lg?+^vKjjRy7<3}C zU}_~j5)Ho{Tp!CpS zYvGsKXN{b~Be%&qwH0|n9*6h(tQKD6Y5PL6NF11mJ{`$pl--n@?tjM!b zXp9`F?1~k9Y)QJJ61)5DnCEIVi(Z2-5`RU;!u_|E#}9Bt{!{z5=c#uEJdZ;WXVG_W zg>}A@_VOLDMwsC5!Gg~~aQs2qW+@SlYe*WfakH40a$BoO0yX|fwNc8Zf7^S z<;8!D8VHMs8Vq{9?>SXAMMmPeTyuv&>D*shNRFE>%A=~VsNj$F#>3sWZBzy`4SxT- z>AIxVz`|eZ?zDl|?z2m-Z$42Xsr5(aH@!_G_DTFZS|rMFw`ZR9kCw!LaZc=|Aoi~^ z%^u2WA=g;0j0;oxylx8WJLTNjnjQm~Z|7tAhKvb&_X06v-`~J8`ruQY3noJm zU{rKPSze=ToIo8!B@>vVca$Niz)>F?L;`3+zB^3Vux+UH=qT$bPc5(?f$f+_H@m{* z!7WuT_lX{xx27-5nVEtMv+# zzgUVsiSa{WW`!lm0yL^m)EsWA9F_=M-CK0yvs!_QGW(-y(WHnH{M8tKcCGTl1=+{3 zLex)9O*#W+K$nrEdLJ>Jm^c{g(*32~b#eV_lqvY(@XZ+izRahZDyQS-^Su{Id61yy zQg<}Vr#9E}7zBO`kQKar+9tpA9E!mQfV2YRxN0MRaWVp&WfJE;7?!5AL^?VZ&_d;5 zjQ0pW%WKYg-1y3o@CKwl(VPmJrO%iwensVx{o~U#P$lXnZL;@AqZ?$i(rv&_S#1E@ zR6;dHMjtufkX(u>gBT-e$gSweZgm;{P^T(MnUJNtS+2J;soMD@WFpWyg$D&AV#Ef^ zn;eQx?x%{{zS4&`)fUA^)$?-p`DgGyG}C()JBE1yk_n+Kk{`QZ)Q(1u57o3hgfThF z-N0p<&7V>6PZqL|W`avrsa5xN{|c-GsgaiNvK@}LLy8Ty8g z_l=@?YA%ePP{Ya?)vvKsP3wMM5)WLE_*mMU?ejDLCtob&+$C!KN9y~g8G9Qk@FOAW z*QPA&uvM2pX?ab}#Y>6>1=k0@NGtMv($xdi>3UesI1%O#lzw;%sipeL414Fqd%%ds zQKuJUx9OlDtiEPF8(8fQCHrLV#;#fmZgaA&`F#i7_$x#C%VRfpCMDmWYQilUR2{I! z&>Q|+zStjoo{n5b&-au#mA)AL8bD|nQy(FS*(_UZUPNq(x-+w;n=voHdhD;~*pl=? z{$w%!Srgh#ovufmcOoVICBQ2#6zVvJu_qg0(=?{Z>Y--S2>b}Ex}L7UU-y5T880l+ zRrfC$J~`?O_o%K4WJY*<@#?ZR*29664_WW`t(0wLEw#3t=2^haO}7|fvCxrN4X{he zjm(^g9lFvwIUrRK-)$%Nz$^|qE5-%&Y>W~civwU(8Cwe8xsl?}~&P$QU^N$ktC|1(J2 z;cF#OY5|KARJyxe@YdrCD4**QO~73jpIq)|Pg)1YhQ-sN?`8iFaOOL6!@1jS833bE zc*ivOJsdC%79{Dc0H(n+wmCQdSEj)WD9Hc6OoNjqZBhRZ(;#>IIQYrX;kM>P|FdB? z%cOpoaqkIOUTCTnzR#f!X)2SZ^AGME)t*=7f^DJ1LSkR0<)$;aeT(%Sz;d}-tbAeu zlc7Ia({|2fdku57PJZjRDF3F5|Gsk4JjPujdes$&7C_$}QhJ+HEbs8ZEDNUax!*%! zZ`mMv>0ts^M=%Cxasjwgi+RX?7y;+s!i78GjPGmd5GFs;QmViZKQ`QFra84Xj!6gj zE2yLt%vPru{h}tsDHONp=nY*T$G@``0;E8@WyL(<-$F4o8z8SqHnPNvD)qs;aNzq0p@;DsL$LvUqc9Y`_ASFQMUg3 zhp_vbnisi`qS$r|=<{43xPCvHcFQO};deOYk{C&%_;Xfs0w86XQs4_8(Et{I3ULEJ z$pd@UwX5z`(8>fySskLCF+Y%8sGo)9mqBHSsl<7Z_gs&{Bkm(3c&!}?r zAauraAyUS#?wfNVQZMTGZsYGsEoF_R*UJBmpE?!O#=A+1!m^IWcmnatQT_Www78*dnE*V#=^S6_wXEFj3$kM~r(~L$6aR$nGh`&L?ekGVbo2|VijF+` zlcZ|yjNp01Nh*vR+~~WR0!7}kL9bGnHW0X{v{d+giq}HzbH2#gq|niq*&+~G54NQp zGap9M8Xl1a!i{EVV(MA$=Jo&mWaKPaAE=mI=6!d4XQt2Z_6h*<^~22&Ue&WCC4ut4 z()7Fg=`5wYOGE~_?Ke15cfwT9DNw}t3NRbeZi~`}b{_4*f0NcNIlM-j4}l@+;#k=0 z=~E&|C|atkai}KY!@wJSnTx#&tNd^ppte3#ouYpbL7n++>|t?L(QJ-su|GIFWMTYb zwEuJ*?u%DOS>Tx=MG@A|SSgHHBV|Ze%e8cGgH#;jSZ8}Fz*gh$cq>M7#V8&^Tl@lytFWiOjJG~} zEX<)Eec!nagdo|gr+43F;*Q!2U`-bNs;xgd=H7&la}{8OcEQn-8vq2W z3gP?acxic{VVdy4htjn7ADNv#Ks9MbzRWFfR62`o@jUTtYy}+3MyQQQB&Z zK01>A8eHpSHqBycYv*aVC00$Ju6N0wJ*`_8>_$mP%zqnk=WRQ8AWHS90^(W3+0!mv zvW<8KJX`}w)sUmuO8vkcu?F$kIohOR;T64V1RIOPrFt{H!mc|1`xrpnwgFcE(BqdM16hoF z$)PEDtG&(2m9fGX`2G1~CHqO4voAF%GcV(thO^{{CPIDt;t@#qgKp7GYCkiBA!_2C zpc0;T!lAo;Mq0P7FI=6TeNq~Xyx2y8Q;(=P(d8Mc#ESoEi1Pmb*bw#UeCYNirM@iw zaSGLpIEP`5HigBX3+fftR2J0gbDMqW9$2fEb;0A(=?$DaCDG0DN5wk<=lpC)phHPl zT`Ud)# z_J83nBGymXU#G1(DAw1J&g9e3xJzJECosUX1IMzL98Mlt6(cZCB(yvPIf~FS)&Htv zxExJia=fb;Uc+V4R9z4zPccVDA@Ta)gceM>{ zF;!1McwaPcrMEM1dD}G{uOmLk02{%_&AaDj7|hhppYsTTN%{vqUz{Hpv9Ll$7nCg4 zOG?cBki6EDRMa`A5&2aLh*F~zeqdsoGX*!eQmnvOU?pm;Df>EF5e1@7E@FhiOD z*VP~8|HGWaJPN%7E+eCFA5_0-YL*63Fgw_H3t{3itlhd@P{QK!z;yoQfteE~A53Qd zl@eSB&yi))s)V>4~LS5JW^;O;ZY>wzwmmMhU6>>t{Pc*d`H=9xx;SY`dbNitxY zP`-&0h$1VM==-hpw*>cA`$1{bS%(9^i*B)*8Zj&*RPIesqVvYe5a?U@Qui7dop z>oCo!o`{f%Ky&h(X^2y$B!j62{N)OaYC~kauqavG1KTfyoS?4uILxOUa@A(!xpW0@ zbr>Ba_X!Dth(dzy+qIdNE+Z$eKEw&TTo?RZ<4oL~L<#DGij6*^=IgopK8GmBoH!_chQJ(1tM|~1b*iT9Zz5*_( z6T647itB+%tV1XpuI>Jd-v|SNjh*&P#0Q8``2LmOf@S__F;c5T8qfFSL7mOTppLaw zWZ%=I<1)m(K1uC}tZE#DjINg~nT8o#;R4>XIaBtZn< zOtbpbUe#l60Jl}0^txRR8n3Hs2AJ{pV0c+#entHy^jA$e=VHQE*NfwpsNtk!Rtasw z_V!O{JkK1WG(3oXH0)Vg4|p%k*XF8z_GWzla%;lK)+M2haCu!+WkuJ%xS5}Ld1Rk& zH_p1nV8wxJnVA?f-HPA7y=~t+s-6`4ati}x03F(m-q4Abn0rfdRoj|Nb>+=orOcfC z>w@3IZlv_j3pU&7!LL94rt$p`4W$k3Pn-7T5ZBk!`DeywZ3ZWVD$37<^31=D?D-N> zl>bC63)G<}ENBz+KyGJn;ib=Q8K^7gD8Gyv(L5V=A7S~#1b8)0wa5T=?{l2n3pb5x zZaC=0N&E!8t$(qJXM9(Cq%ECtnW z9_`6)#!Y|CX&$nz9j;*{_;`+;t)_}n-$Td&>?sLq`&vOfC}E(|qa$BX zQpt}(|o$V1B*@3nQBZ~`_YJh5)YeG3L+4QvnfR-_s>Os&o09qzR z$O2kA^`JUvks1Ik!`=3DBXm~0g_6oe(mvBq9g|cmhJc2!RY^h3B_REYsbryXA5IGd zhO$nvsC7|DP!ZnRc2&Cj-1r0>XA;{U_s36}3rp{lkx#rICX^!^p z3sc!I4H}~~t~TO&F~N6K=~#%Ac<6rEl~6nh+dn=HrOez-0n1Gst%QaD?`=O_^Vldy?6h3T8SFHl~?9uw2{2=vnPx^lM25sIQwY(v`K*pc*{~l={A)U zBW{;FHS&@bN?u9>=Xi8|$jR@2YPsIZBV#7;foziY*IV7o{9wQ!{?{A`azE16FJj;3 zCpCvV^_b(p{iUjNca_qEC6L3W^LD(~x|5)(*6 z-d$IdQzE3&4^&e6v9}{s5bH9%QVYjLu(CDVI*4U(pG_0x9~;u`tuvw_%l^ zDDhlUcy5Bc2EJf0_Wg4&U*z3Wa?&S0?RB{Qcd&NY!Dh_oo=nvTaw2!IdIi9}v34GJ zX4>GuLRHFKWMqUD)G`prswPPjyY9DQJU7W^u{Gyng6UH{zX$c)Ex^>zzZ02&qeam}vE5QL_frzBaZWA7uSn@L1tCjLWT(`3BAY>S z-ZeadoujPxRx1JVD#*F^Djw<-u4vZlPOz2@Y#Be9N*W1cw>ZbwNfKL-BZJdOS!G2& z`$+|ddJ{QGg&U!ng{U2#T5sTW6~luIl;eDfCetCY>!unrD_7g#bl`#y`A}3K*i??C z4`ang!l1a8C^iW=_r`i$JQJL}Uc%pqrTcY7k4=X-9$!+dS2>f^!Nvfqb$ z7OrTWn-bS11L!B?tGp{3H|FEh%Extvz7pbqDjtYdtNT$@a59UyD4YBrhAzL|7-&v*Z1){WQQsROPQ60suz(1R`AYKX{ks6yICI81iK6)Xj7*-v3>LehL~yM~N6i z=Z63#1z^so2mwd1N^XfShj8I)QWf1O-IDUdko(taMEMQ1;wRE-Le! zwK-FLPr((vICQYAV`jGXXuU*1%;2=-ks#Q*le!3GLZRj4^T6S#H2we3)udv=(qC3H z12IrgIe_iJ;iQktBf7i3A%r@60IM({IsW7wT9avcyRxr9THM$Vh)sY_8UE%@cB%V+ zZULY+_FYl_>K+lE;H%WP{Tvt0h+B5r5_WM#-U+Y};`xgzSPHy-M3(7}% z-%(NNd~#zPh*`k^rpR0_zg~^nYc~J%(nViDuOVWb^KZi}%x#!8VGosmxnbtnIcat2 z6uJ`nJ?2c^2mjQsh!*W2-w;yLt?5Eh{;Y0P6_h6W8gucX@m2|)<*Hp!f|#ejY-4&* z7YyUtQcF+t1rI(_Q0e%Jy=UNTZeWOQwuj&vgNxE28BKo zgP}=-`1o6MRq5JwOHLRthXSB730tBhQQ9p2T@`D{Xx$L&0xF4a9x4rj5(hfN()0l# zayLt?-a^k(SWsdT_OBhod)srUc2jBVa*eO$M|ft;o|`fgr|#?eG&Moj^N zt7FKg@Ulr_>X9HbB=CDjLy` zlYLWbv-n})B!xZ^d|tMljOn(mX06QnO{%MKim1&*P?|6w^YMB}+)zdmr42B`*kAeL zS+Nvcran;6z>bee2Xth><(B?T)qxaYK~b_zVd88a)a`wo}gMgxr1R3~X3SB@pJg z`-l7tzl-J(;r8mgGF4kEuGafLJGJWiFQ$qHVPme=`%mhsA{b`J4N-4MuN>QMy1$Xa z4nF@h-i;}n5aMHI61!vhTCPa-(~)Zm1Ls$ksSG-}PUdj$x^#f!ScK}$R|`Lrvghf^ z7Ip;2%S2Le!99TB1_HB>q8j(tphVwaq^&KVr=`upj{L@zB!u3o5e;hbtM?rKTxX%H-DM$5R+rDkgTHHikZ#fN zr|&Y{Oho)K>vQeT9^Xhc`{eMx`;uN+ z=C+8*l9z_CU@+oWSV{dHIE#tbNNxoLQ7B7y0sm=*N~~j zsJ4PFYIQ_ubMMg5lL5wC5|{CIy8Be5(9#vHqyyK+>UJ4#GiX(}twuOq{IyiAy%Shf zTMxN+We-KRDQ@U6AV;CYJ>uR@c+KWHC-by{QUNp2eO8s^@9 z@T0$`T;9zJ|NT!*(Vb(b`-aID2UV2xZhj-0#t;#o&Rn3BdX4BHO%TKG=QD>AwNKSE ztyA1>X)7hT3=*#7P4bPN3=L*TSE{t9kE6Q$W_*@BFi55Vl5G0hc`p!wAv#za$4JT0 z%_N`4^+)y8YRJ)4KPmEE*4wY&bT4g_DksZ?`7Zd`Oa~iKPOc$g2=*86Cs5_*@e@JH zZU^1ui*q81%MHL+!9>O!%8o30t1-ix)VX{YIERC#*#mo})VX35aN=R>9-x~Au0^e` zTy+tlq*vu2WrElxy>SNS`}L9dv6(>F4ZzXbG@tj8`yJr-fIo^_wsxzipR%l;_2VCC zYIHqly+X2G{Ju{sq!{69NqS=FK&Z_uhU6PZ&bkrdmPv$BPW#%IG!E?^YRR-?aSNpA zK6OcRs2WJawXDI(orPv`B6m!x@_$5Zu}$A;=4OE~1Pd%OXY??YpcD<>jz90-!X#Ke ziyb+=-*4{jt(5r8bp<|VT~V3_c$F#J8H17P5VNDSl;CP$E&z=)f#Ji4rXs-*=vvl# zLSKR|-HmayS&MPJAl~TwGqKvbU~{+HH0>RC1Jhm|MlKIupK3WN|K{bDCI>78M9!*u z7S)Kkj0SZ`JE(9N$pF@^mCY>4*cW1e6rnv*ujk#K>v$--G1J-ln=&ns&v-w~&d>|I z+4mo7gZKZ|+HfagpNq6g0${sOfrn-e)5uW+lS7d%P8PVh#~#Yjn?Aar*RRDp}irng-` zq=f{PNgtj&h#2zn>^L`^SzO#;$NImBd+(?w*RNYtL;;m%1q2ci74}Anh;)*GY(+%@ zb#ICyp=^!PdrLw@q$njSTM_A^q7q6(K!k)&WK#mtTd2}Q2&9paaNg+ee&?L~*XKQF zj5~(%2Lok{_sz4Ox#pU4O{>&NcxTD{0eeErAqXX|Yxx}{UkKv2Kj=(&XMSn`QJ zL(Ey3o;nSj7x0@Z(s?t%>86SUOQq+I8=b?|H03AquIXLM6IVA*mj!MMjMqlVe{2r% zP4Tkuo$mi-b9iOhxjVfqVhV_=@|@}olE)-Q@4+&GodqH1yfUIU21aL<$_hf|81idV z`7XNoUoN}Ts{!}g$vHdaxRZwZa&>btpQYmdUK~CSXihH0{nz&; z%StUdN7oB12tRo$_sG|_kpFMrVmYM(t!+P8nTb-AN=g*s6V|D0>CSw7K>6%0@!ZY>NQ>K444FL=`8M!dyrhjnsPLB=2Tp0iN0VHNxxjf zto~p^yLR-iyKFDht+EfyOtYz`*=K~r&5}Ta=)qwFAd!y# zBav>=6Tw^%9%)IFdU$@al@KAuIuNL5fOG~D>9lbjVI4!f>bZ?pwQWlnw5lcKvi0)) zVjz?bx%e}b4jC)uz_7=4)V$_;>Vj0=E-x>Fh(eNb!5KUdNv9^^sYJ$na?g{{XNOY1 zxX(6Ur|`wLFTXqaM@bQhUqU-kN_$%2?UnB7;)=nzx}rbdQ}`a2ZkSW+vbAQLwe*3u z4D`udQwgK_d-r9Z1?CEMR7usgHPn64J2xI>O2Zfa#JtH3B0hxZoV@499A|{g4Z73b z0BinJv6xRfFKSmBVt!Y${cMY^95E3AI=km)68r3)V?X@*VO&%zc_qFxn8CZhHEFY= z-=a!eFv9+)KjaQ%CefSF%l*TWu|t&*q}08fpql#x@xLV2U9K|~Mb>%boeb}~0?vgQ zH-@pfD0XrmIoTl_JzWb%JP7m5wOp~Et=f}NTuGiXQYKTY`a&8zcr$g`P|Ahv`PX(d z@wP4f)?;B#jyZm(gGx~$0g-hp%p`8}^9cFC06$y}>wT2eD1Soholte9KNcdl?!d2_ z=!OTY2;Naso%%RXyp6V3mZymnVUD0auzqo?mOfqN*r3L_ZeNScCFPv70t>RBC@aiF zOWX7L^6x`~A%iCRp9=fi%UQ~cz2V(^>*e?##9|JfH*~(d+5O!hiGP7q>mu9VEvuQ~ zr$P$aGQs;Rf5ATORp$=Zeyn+v(T+$NiQQ~?$R`?qeIjJM#ho@MCcNmxeJU2SYtx`j zS>&6ny(s_nUj0Q|oAzG@*bbnrS_V0O*YuXH%Xs(eoro>S#oT9#MqLDx45ghp{V&g< zucPh`eXo<;jO>lgPU0^ybhFTN@fL>ajX!-Fys6N&-V?D5mAsfv6%OVYww96%m#wK^Fo^1(}(*! zkwaewd56!;hcjHwqAuJ6rsrL}>t}Y?V-MM}b)V^~+A4m}bCx-yGP_GA7%Yq-_}skH@q^w)t! zniPKIUVVFmau2Yjzi+0d*CPEitx;CNZ-!8jnS7JYJ%k^a?_yg?l&SJs+v^6oFmS}= zU4>?A*`+=+in9r3l)E-y0*Yy`Qq%Z)YiE-K$si7WAta3 zTgHFF+9ssXjP&5%uP-;ClqdMUD2$3p)4z#uFznDcEHAPBU!>v1u&#h}SkjEx z_K#aDgbwd&%%!jSWfi$TjEUYwvz0kg&HVa=y;_VbUpGQaAh+5j{cYyjyYWx>k3}V6 z7CZhnn~-VBbo=l3LjU>668yG~XtC`t`J0~5AnER@%PHD|@ki}|Eu-tZl}!bb-AH&E zeH&AS>k4lsg96;!^5r5LQML&@X24YRz~1CynI;}zmi>UQO-)neGzT0r0P@k~ys9;)J3kAvG>{%i;}5L<|P|_BpPSH!^M3 znTFFP#TP{OSbn{$D)MDeUoO*!NK@sPH$nv*ryPXsyU>@Kx_U24zP~*9XBa|v?GH7!ZV{wClltZWB}Wi zXM{o!brj_Q1_$*ads9JcBng(0I+ZkPC~apDF0djsmkZ@4TI2v5cIy6{K6<%IA|NzYoyDRn$o+$ zEwPMy7kV}yj`A!q-nf@ps)d@o^?-`;mb`(5Y(UeemVq*RF2jEK-d2Rxi|h6lJ6K*3 z-9R-uk?v{h`nGV`b_$R{h0y}a#dneyTV-~|;pD`3P&TJ+(@|^(6KAY?G6n2Q7HCYB zA!hH#19e|{Q+ISVi&Gw2z1Ez&lE8Pqv$;yC8sl2Mb`!NX)z({;Y{N3Q?ER_u|LHXP z?|s!e@6sf(&!;jxY;lycG`VYgMYfq4*Z|rWL|ZN4v~Dj`l{q*UmkezX=XQtT+dB|; zLFcoTp>o8bM)l@#OX>CIxPy4t6kU=mBxfq|ace1xg;8A`2D}$;(wy4Z9C!L?8=apf zPGpp+j$Xjh2sqv+gpKnt6bv1?Slx1utLP2 zVVA{sp3Q2DS7Pa^^HH;~!`V3(m>eG-_UXOQI%s~(s%ra=z^YAcmfIR)Cz}1lm z){#P7H~So?-_fW(*W!MhMRzk3`%WdI7Ad_D-5dGC&kK;lZ|EZq;=6Q{CSu;dKO>gZ z{Z&aub6?v;!VbL*zZHTztx0lrs4hRb%$>ikRl=TjlGDUPU*$(mc@|@>_%`5;^CpoS zVJ0P;-^+uC&(bF1KzHE0x=_J&as8oX#nAR zXDIk`h zfV*JziR8S!+x%W+S)_N|$bw<1<+}v9(TZgWV<5o?woJB2oE)r5FUFDW;T|Owu=0m) z^$(k`4vo-nogax_xz)KIkizbphcpAhQ4hN*0Cqrn^%c-o0#4JF6L1z11MR)^mN;hw z1`X*j9ceO;8j=-q!;ly}ApgWHkqS^WQVM~4d9{f$vCXZ;B67{2yh*^2J7hH3_$MO# zq*vzi;c|cJ{D(9VfEs%4d3)$fQn$?T`{^L@ozlnJD5}139)~8@p>aba-D@=N2BRsi zM#s|@sQt~tIqXI*+_T>ag+VQ}kcUNytC4glb|4u9{YGLoZC12Xve{#^#b1s$m`Iys z6t0|&i;3wMreYNjet1=!&mN>2`Ky&2+|kz7R$ei(QqE4u-dw^v(`ocDdld6YTpTt# z>DhJ1%<1`4Gb$D0e27hZk2*#X=+$FwW#NI6@!#1w1b$4p1doehS|iQ(nmMF7$| z(d`|9$$k2~qs&^xRx@lDtL%Zh`*j^eizacaVl-JB$v3@d}HXZekX&G7_}I2 zNp{7UDL;rmNX`BfEh(FE{4@`MA=l(x3@2=aOvvyXAe=W+SejkF$z{k{PY67^PtYTM zfo;7$D#CRl-4hYs5W5ff)Gmx2{`Dy4&$dz-lHxl9n-wl@t0)AMeT&Fg zwV3zwr_AOb99Oc{yo1(>ns^Yc_jqMeJdoxBs6EVMy5PwYMH4J1Ss?bb*mD>zsK|d^ zwMgGY3KTZhEpvqvCS+lL^;cz=jm*$dAb5%c{^U+hF2|0rI1Mg!lJJdLiv~F2S`LBx z_i8G5^Y5y;R|&%@IC!7F@8H$w9jVqqn7Jr^+{}!yRYFW@A3Jx2+W8?RV8ogw_NjP?H2pgm>aGK&tT1HpN2` z-M#&ZXy?|)_ZxOdz}Nm1R81png!Dav=kD$I>H};qCI5P_t+aKv?q2;w#G1)MZpF)U zSM4}Kl6iSCFQFFOWVfpr<=*gu-Rw#A=y_oyyA3;ORQeJJt^aTn+|gGzrhO|YW1evv zM>VBdAOZ;XV|)VncD248r*9re%IN2@D^kc2Gc41)CpcFy>_=rrr3TpI{!oYCLVllk z8d#OI7(sObN%V`)b{ZBhW;?S)f+YC(GGFqFewK04OrU@=d$P-U>AoA zc2wQxqL)vaGQ#_+XtDUZI$Xl_)W2?eOJb*-2!WD;6UgdHlCAho3k^mV5k)9=O#A(m z^pQ)w{d>!upxxRvcdrdQX(1fmZ9e87$`gy3Vl_R8CJ*NxJRdfZA6N$RCNCl+rH`v{ zeA`|gtz5+k&teJ|DPT?F5-lM3=oyBg9X$W>k ziSOK|bADxls%r!@Y58%v zj|++`%ZZC`$COFawNTQ=8%Vi;kI=6!MAQIjs8iV<>H5AtakDc+;+#!O)R&hz>-Xzf zzLB2%!ivof+w{5w?D{O$OY+OWm8V_+0JFY$58z0*ZzsLZ$!K|8&-JVC%Cn3$&%cJ* z(X`P@xNYWYqS_zKq}=9XBw`3EQ34sD6v!L&2kSNp*w zFZu;6Xfoa(5J>0wR>7xmU@b;pNK-0$W)*~w*PrSFV!ENQCC5U_ze*;R`xn@=uq+~D zdXYYjX=%uk1lxI*R1|r>f8MjUq#A$J=hfWlE{BUt5-6pPg{~{LsdY1z`hs8F3v=7OMmRh$!j~-?`WpQrdO!F9G_*{&b7KHcSpbYXYn9|N z)XQOA*xb8Yw8#^zInSL-?dxN@Ia`vg9}NY`{MOdvQvci&ISjP<$rAgM`{2c7S?y02 zHXu()kjXb$*cD)lzAoa5qCjT;>aF4HKv(&qW_#+*$XopGnvDV5r9}ikKt{n-Z>hiV z1_EI);ApW$mnMY5eK>SMOXDshV8~O_NfIO#m*r=Lp&yQk?wjmL=2VjF0|BI_hqQrR zR*D7rElBQ@RW%+E(h$OM#jA6BoiH>OO&rWCHD`Tokdr}N?d-q~W^UG-0Kwgn6@tlG zxjP5@tRPjd1dhGugj1IAJ83LzBTNqb_9_81}6#m%db7d_Xo)U z0LQ_IJAL^ERft8y3`as2;2I(#gP6#`kTCO1alkd?*416r{s@j*>j@bseHxcBQ%5!_ zIlQovYoDQuTklHCFK)%&)^YVwakXSp9a)Ex zY<%;_tNpwzE4^y<=p8ebmKd~rU zz512xvxr56twSS$X+!#Ovh>zXncv$!wMK?s6V&eV9uoxWz3}^_YEtsJ_~`K_J;py` zF%KP{-&~i(GRd^q3PFfT(25H`e{}QYK~PR7YK#-b?i-6hVW6(qK_RDcNLJI7)#y%3 zM{F+qksUf3W>v*_&XF$Xli1JLmoTnkKq;`+Gpohc2`<~;>{h)0nFAKuW8Oz$Z%zSl)OEeNFb!UaV~>M&^bokReASAT~c3+yVpR^w@13LFXsXiq_-LfaV|;?ltoN zp;bE~V!oT)ImD{uo&f%i(@bYw+uDCEC}k*SJO&sbuXcJSC6oNUv)ZF%uGEBG-`Jbo zbgreT6ouZs#0(9zv7-zy-Y8@cii{zy)Ido_+U z_YP-E{vv`bOxQxA1#WqnX5uq!_}8$s=Dwt_ANK;(#7A|^U-d$*9dgu~3fg*$Tq@To zytkKTf#r3XhaxaHC(`yJ?B_C7Y{OO=+^@T^RfFnQYW@K8;I|0W#(yI{^j$D-x9T7+4l4InF;UEu~J|k_K33_u}_LP z#I!E`W{{lqOz0H^D^v9vm><*cPz;i)RMa+O-f9{n`MR&rf|ruIVv`+~qYL}1Agsr6 zx{=ZfC6;X$j?0BCEGA?M{pm>S#og|LAz6Qn_GFUlQHAy09o)l3(?=x;5;}8jZy+$M z2M_X}!YU!(k0u_iG~Vb<>E9Km)8U+KsJt9*9w$+Pat#nm&_$f8wK386BuqxPoA}L4 zcwsOOyW_ULbH&jAj$HH71aG{HD!D%PvTqijGd1t|QR6v}`?MdTm!n(kpFwEA@%@{h zLp1k2_*$v{SS%)x+}GwyoS@N&^vznojep^z!_E=@*>7DlfxJsFA5x(&AuWRHzzTLg z>1c>7@>GslmJMxVSRV=<<(bC=)cNO)M?hDw(S!wgV5i1}Z=izdy?H2rrb-{aT(Kea zg8{AhFsFWvHlLq$2e--VVo#E0Eh7g-tX1Sz4dttc)=a3uQ}1eltMwp4FMMKs_S_eP zfE2M9gQp=LzdnFm-Qz$Ii%Iu1%l-1&)6BJqI=9B^H0iLQpVlJwFr7lGg0Ay6=1N!=JAzdpNna;ma)?^Fd#5jf^B=<`b}E$spFImcl6IZ!97Ycec%H?$68`O#+bvgLyCBf8!XR&Y1T2cDYcYCKn#aLU} zC2aT#W(A2-ZrCN_-urD_zCAvZ9sDM4?`JECeLTbw{x2iv&m~g$xqD}FhcNUai?Wd` za!GNfr>(yr%fOjJ5BBK^b#}VRCzpmd1YTN0m>s{NOv%D|s?Fwd#23f*E5qh@UiDB6 zm9>Zp$z0p$XJpdqkZd?%H`zVI*lvMiv|uO|-lmbyFwH0=DzYw~0NAJIa68MT3o$v} z4<9ntKH{5s_Xh^~e(a|3E4NIu6?*zzx3hSqTX&cgz_&)uHJ^nRu-bdcZkE27*zFPK zxJ*Uru&bCIv(eL`pjX;GqP+vu(=Y9SY3OwZEb|R*tN4JYz3L; zDmrB@E92@|1|fI3qJ~jSdq@V|43Lyl*7pI_N}T5*EWLgii~WoJ5aHtbdkwJfm|&)V znBXqN5_dZS#jzu{wgo7TaTD998sa;VYX!%E2I!ZTi~#?K954sX@w391=ki|JNNb`= zcMP|f(Lc$x^X6z8`8rRsJb5Jq!eqj`JOgDo>Jvj<0`58PX>EsgZ2xOmEjx0Kp{78j z&S5&$xp$C%**NoClU$p?L||ckV?ZAcO21bupbf347T@YPC1Vt?X1VE-@&?_>TE|C4 zzH$hAMfm5Kde`g2Kw8jQCY>`>jn{W><_*X%Cid^i(CM4-a%OKF%HUVeJ%MSU8p}4L z22ss%P?oCxAp`%pLdqkMsy>JUj8Xa)Xv;}cf^~wRj&MWrCPG;-_I=mRvuXhyQW>pc z+qI$p#qQ1#f3my2ZOhF!sNFz`I?<52-Fbvl|6793;Fq#?fSyvw!WLmzt%&QBsAB*z zCcDAPhd~o7$I_*7A~)rR zWqkRxx{W+AIv={x`EBCS1^+If>SZWJG1Ow#ZW%@mBh4n-A{)Yfy%ethr1p!%Vmv5R z3|(Q?BarOpU>syttcMvcS`t7sx{>Yj_w*&V8Wt4L?#!7Xg5tvmyKDbV11PUJXzn<7Hk{L*0))+_8u`J7djn?+O%`_TENfBNxAV;3 zgF7-7#bR#NtZe_s&%@&bW~pZBj;O=4>F?i8V)$-y{;Alcg$jN6M9#*<_}Vk>6jLzJkIEIUSC$VbkOE8FhL!V@BVk zDwl?uSZ6OH1Oc5aEWl2F!U@{F^_+BcdtQf#^5@s33}2fyix8=6{N44B*_gM|niM}8xGt-6*Rlo0fY_6vdNC*IU|n-wv6epC&^=%BhH?Z* zV#hwTVRwZ$Oc1XQny(phvEBgKLBT^yUa2v&nP5p7R6vw{jt8p*i+d-XPpiaVmd9|eHO_wR$qs)Ys5VM+L^Li7S^ zj2FQN7)9ocJ#Bq!y#}nZRA*qNQ=C(gy)nmE2mkEsfG3Uhh?4~=4h~$hv8jM>7S#AC z+(ch6F*WEH-sQkQt*CgsVuA|h+*Y{Rpo~@k)+5^(Yp2}Zu z`>R8K%ntfTF?4OA*1v!>##ir*d!7teT7Fd#R1^|42}Rj3r6PixZ-AA{&`4UN+amoo3>{yQ z#rduGD&gx@nwG}WvBTjtoNr-O`HxfQFhqG$ypY!!PuaElYQbSQrCJl^`MAMEtp5w| zna9d^FHGReXvNi)XX1-_-Oj^eCt)L(m5p|HP~}YSUxp%C++2EKiRC+AnZQMQS})Ov zP9?d|N~my_MsHxxopA~OaVmosH?*MZRQ)bbXuq&8T)mHj8E>HR3~I_$O+xU3siKpyhpzjj;@r4ei~aJO_$)~BDtgN6$)69y{-E344L;eR7s@9xL73?Ywt$YFO8nhv^SSa6U&ytHrdKRlZIj-6NLI5=)wt*O zZKQIviX{%@ZJDg%bEDi#70sQR*T}xp$ZC)m+^Yxrz2WDD3Bu`@FS9%bo@LVn7x?p8 zV3bN>ji6)9yP}#;Z0J|D1(}2dy{oy~J@bTeO|N>TkWbQ=zMS}vsOP|62PWkXWpHoj zJE1 zm(H3WNVi8k)KIve>4dqACUA5XEnzc06NX{-J@h9XCv&kAd;k=>J1)E@%?iZvLQE>Y1+5@!Ci5R6SV}LIyw89|r%H$$uWG!NUqDuHJt`StN9`qZ z<`!KRSr~7xjNPmLGgLgZFCUh8HO97X|xp{COfYWQb<8seD z#uB^k$H##;$Nv)F3cN-j!CVlML&{h|(bx03a<*=l1sQfO7uP*NKvxq|sB0ezioHdb zZV2OOstl)_(U}|Fpr8y|Z=!gfypIh&3xL%4-~g>Tb;U?>16{|?1ixd^Dv^kF#^eL-OASt=3Y2E-AKaI_*3 z1J2?*uYE5=QmA!0*ax)%dw>EK@Xa)|k|!49JId+Jm2Z$9*8cLDblVS4!>+$cIRFOR zh5>|&#5iq6SYwS+RDgCnq;#sP!W4Y8pIFlzpWkq z)r#o(_(w$q@=Q>%0JGx16)G4w-QR7JRPxQF<55zXFNu8H0v_@QR+*hd;3%88orw6% zFn4GtgOr6ufCgpjW4ZKTz6x(*DvRpZ$Xnu@ut_}@)yi7I)skAmxt{)zhww^5^+8+1ZetB);47Ca0_?R%fO7NVkE36Hy&XRJqa9WQ+F@tm0!}sc8KtolIh|&SO=lag&2dl2XXx_u zoM#ted34~$nBihBxg+h_7cR3B=!1>HXeN>dB==B7$vuO4UN&tm#p*v4HLm|BvKc>+wB|`uKNOT5UiwY0 z<6@1T;5*Y!YtE?jTO4r4c}0w=k>N!{?kj`XXQj|trpI1SsGy{KEJ-FeY1ot-*6br^ z62dg4;-GpC4@*e}EJBJUc#;MwrX2#7%U(qQp0XR+P?Z*|ME^eWv0dx|f?7sP;MIv3 z${(L!Z2!&03G2#?SNJ|vn0m6(fy31hq zZEW*|qQgwn`!gCNz*KRlTOxy`5fUV2WV9D4yUKvg)Jtwcyv7JAYH`w>~r!HS&fX)!OY_O;F9+HzF&**1XNvEDAnG*l z210NGlv^LQ^Qy&-m))E(4oQVH`GyZ!DpKq6Oeth=Uw^3I+-4`CKZ(wNu=LxsyD1WI zgoT5grIp)R)g?wH;dMi@^@9?aeHiDp0y?JM!g@P4z_pYVS|_Qz{;)22ycOE($^rJR zYy_(euIS1Fp2)LE88)@DTwUY{(@iwHybX$?k1t?qYyr>`-=75qWWu$FTde@eZfonB z)2-Hf^_7RyMcX)#qVFNCwEcgzvZnR(n(u>PsKH_x{@Z#>1qOS}_kS@cNL3 zM}Aiz4Qc1lkX9weeXe6`Dm|UgQqPhA++1>QpB%?xv8?Z>q#}a)+}<4UH|;B?jnCT4 zC+2||bHq3nVInT;8G4$X48Z$f-W;x&Q!7XGFH`+Kov?#CRdmpH;GRE)Dy>E6fVRnKnRxyig+(LEGFn?It-Ukl*}#V3?eoL)$zRUy!M=E z!LY3A_}C(Uq|wcuoc6M>koGuxziK2i`dX?naIP>DJ%8YG)D4g+B`X5ECy^W5TU@p6X!xme$1iG!|DRm|SCdu`cF)qsq8z+tx^Vj$ zktA_KJP@|3gp=vAfeNR`1*+%F`r$K`D3pw*{0p&|`|^$Px-fswl50Wk&6U{(O5vLaC*cu zv}|y!Si2M4kw-+dL?=B9S&Gz?zN6ekWg@Mpa7;WY8nvOk2xW$R}%Jv zy%qpXgM6SZIQOkvqVX#CPAN=hK;8?}9tk&0+;oldCn6KZk*DeyXQa*oaWUMF_-V7T zSu;u{;FcP|`)YUa`a-6CRlZ!%sXrsn{QBw^GFpgO^tb1Fzi@eER535hu0 zIM+bJnd1_NiRtXK#mhENGaf#UKSEL|P_XsYu@4NKx#d-_@RE^H#tQFRPqmO5;B$?W zorg>&7k5pG*qw)#aq#*ywXJp=y?JYp--JVnmT`|$pqyaD@RJ&P^M`R?(=U!Y;zc! z?1;JdZ?lK902&@MkwNHExAv`oPR_-jwUpBjX%ySe9%w@f8BS9Xt2ueHatvlbX~4N9 zoqX6COi(;yiNRS?EySr3V0vGp;3O$V-x=I^aYtwwePm>ck&)z1zv*e>hQxSGwl-wV zz6KQZ58NvRu!G z)HpO=FuF3IZJZqWC*4YWkq_$AP|yc@@&^vgf!#~!qfz_QL%V^s!t{oc`{APN<3;B0 zts>ix>VHvIXQSx~_#A-@+-s3i5i-yL<<<*B?6O-`fGdK&vRbkSu|Y$PYKv z-3O4gNnED=a7qyoQ8s~`f}vIwZD2u-Y8kuT7!7Y-ENldfs@?GUy6h~!wLJ;RrQvvb z<)vu3^-eWvx&yC+Ouy}o9@JWTPsg;xb%e1=c`Tw$nuIbEb zz3xYifV{3Lh>tVm?llsmo4;#EI!0dMgWJDJDN@m4;wv$xE z!pccAGt6=>iE<%Pe=Qu$Bxa(4&7z!uTyyI=r zN9%UZg&!tE&j$eB>-#E~+5a=`Q`xH{8f=MZEL$=vkb(`pJ%+i`7+Y4X$Bj_ zcIob>r9u7i(>adW`^{&Sz^JcDI@z$f-E?zb1J?ZaW=VpE3Sx4%03(U2$0&4g*FGCO z*R5wlK?#JX*`UC{-jK)C>?&X_KSfvTj5V{bULifg<1uc3rhgfxY&_`qI%~B( zl@%pg3MGfMNRQU}3V*{v77awB`1!Rt`mUGhy#L+dGTqp0yG6?gA6;Bef=|u57r`o| z0gHtB8rVMEHX4Fl@G2-#gey)LTuF5aScb%>j} z_WV~7M?uO@H_F$@w;<&S@5b3nI71}wy-~M#vb8djHfOY$4}lJH4@qx*+^RA+vNsN* z1*1kki}bTY@5a2Zi-x;hrr+wKM79GK6dPc=BAHmFRc3x%^&(kGys_27F3Ojw^=BY5B2>d*9 z)|H;R%fsa0=}tLSRIH@eyZ+lYrdr0YDM?vz&fb%|-B;9Ovz8gT5<$T9d^#vhOqn26 zX1|YNaT*F>X}23N~UXZ@<^l0lsPV^flfaKXxhG3 z9tI#p;931}5$yUuB!vOcg?2NWpx#8APb5buZYv?b%-znG!VEGUOD6%@-n=_AFLcy_ z_ZjLwd+B%xdu||aQF8ZyIx}$5U7N{uZ@|HPJ@b&hU_;cTp{IMys_OYL*e@+ z*aL++a4txH13x_5ZJlW37&AfrGJO<;+0(V#Q+c|3w*IHX(jEM94hu!+@cR0jwX9!0 zhfjXcMsYug^tS`w8ZH-{zRcMvzGcq4u>!1WqOZJ8L(N{21+66&4@6*jRYp^Bce>@E za*=puusWB;sb9vFq~lD_*X*&%HY@;arPFrgH0T-ajg~0*{Uow;(Apr!2ZQcng&H8h zWBe=8ii_^)n)NU49Dma;aE@(+N+BdNAqIDSGlg!|CHFH81;Cr*uJ)-Xr{;x^IiOWe zy`yQ`*Jyx+yz3Osq!&zbdpsEorsHuehB+QL8X8@$ID8uY{_*Y+8m;gsJ z3Gp!_0K@pRY9B{L&D6*rKLKl>goxHm8Z+`$5;^gI;ZKS24v~C94VW$!MVFzAK9@J}fVun^4Jhy1^>*7W$PL4)(6B8~W6;t}UNV0ud1*;Q=AgWdv>Xam-;T@L;609x z^y}!GAG?6?l8OX^@*r6UHhYRIIP0B($K=k)@+XMVAsu~WdvmhI3HtrQ;`Z<(hS}D~ zA7#fRF+TE`A;H{_vwNJsz)_BXAq(PVcCvUDVA?RYPou*EU-TPKe;Y&j^%a-rsWhHE zVwM=H%sJ70$L}6A5;k+BxhiieaXb#tG>K@LgY{-OAd6xnv`=B5zJDd!Tu>JjEgg)y=O~X7hgFZ{gr<`n z*xV0!2E%}#FFnL=smF3<%FD-oLw-pL>BUYCddhq; zAl9II^G5>%Pb~RD<>zeH%Iu{glCvt}#4%Latt(RrQ^+&yW6P|4>`SK!8T;K$Qz$^1 zgjHVtj%tY(8KEb2Aud^|QkzZzV|s{mRYNJwQLyi&J!#=vvO| z&Cp*CEZ0urPpf4)G@|iR`W#YpfxhIHwz@}h^;rkey;}eo+hQqCc7TswW^l4**okt+ z9*$KAD=6>fR#c#nBdvK)J)j79EE7&oE>lHM#bH!bp}t_ps&D=xtysHoOvJ*jY>%Pz zSpbyQpx`=rqU})<%$K$V&C7$Qmp1HLP;t@hmQTo{dfRObrstP8WIZ#TJ}n2MM(w{6 zCr6yj2yer6m||4f)8kjh=t=poi2kAENgh;h9>_@`a^8|c3ut?QoCF^>)f0U*J|fL!8!+tophi}Xk1TR`cAh56m~vnapY#lTALEM2-U!U!4gwADFiVZ|0q zkVP>cp%(MV{ko`Ct-jUjziFzeiq`CZ7qK;A(?|mZ^XnJ?UCm`@J(=|2MlDkuI&ZUA*gueR(G!t0>kxQ>;(y#xs-h zkZ<71nKs^%$|1apBwY#BGupAcU|rZ5%kCK-r@<@&2{VvQ_vF z_X|a`Sk^Rat8-#$Dj;e?Id|rYEjhn%s-0|0m0syiZoiJ_x~$1&gd5&KfbAM{w|F>= znWT-GD*r19_c(;_t9Z*Y(wYn7yAx65%#zA2PS|-|+Lv zdX7l^DOzTUD*{Qem`V<<016~U0Nceqfy*h^^tM#rwd;j?XN5SqD z3j^&1$3ovC*a4G>Mcw0_yCRkvSE#bPN?vJDqaFbMZjg?Gk$gZ2@;gCa$bFg(Ir_pL zOLsY8w=fpG=xt&ED()7Uu>YqX>;DG1C0Z=-9-{dtg85J^hN5soa?4yMJJ%6R6if>g zc9wMEk|6cenaGW$u5(C8h2Dyuh877w^MUr*2F~O@PH^^R0we_b6H1ObT~;%qXt&XI zqo$ZP%4%pf8TZ5jtM`e~Wo^Lf{jA2vdDxOCDWF=|hQw@*i z#^`0?j^5RYEP`5}5>~BF$z8Q$<`zY+zLJsvnh*SF>BI-WAR^HN*T!7M1NO#IdHA_5 z*C~e6u&Zw&b(v~N%?1yHRjPtJS!G?DHvytypY`Eu*RFXtyiE&f`F>+aum9$^x3jVp z8d(vQG?af)d%LP9Ic+IELo~m%eyH)|V<#1rB5H#!)c)}^-QZWyy~0mxLZ!sM4^R|` zh{z~tS8Z@5)MbM_4`RvoL6JwJV4ksCnEr?Em3|R1u8s2vvcOFrK{i_Z448fLW!Iew zryP|dBI=AdlY`ZbYCUHRIr?(^T`ZlFmC-kGsV%c&`5h2qa13FqDW&oE zC~scBDpz8!_V9>y;lzUkZEDYL?CA5KA}eEr`? z>)pG7hdVFT^y?ciW+6XEpYtL+o>LI)n%rd)jEU~HY9GwqHuP?{mnrXyTSJ^~NJL3l z?yT!$V5`0^W_YF>XE^ypSRgag2(FXs$_{%CFR<`cK`}E5ak32AYGA8Aidi(HQ&AqE z^guVXcbSR`*YDu`56<2?D(bdt0~L@EDWz)wc@z|N=!PML5lLyJ87b+I8oCBi7!(O< z1f*j`QW(0WYv`8lh5^nGpZ7c8`TjcZ^Y{mAxx^*TecyXu``XvOw(bWb?BH3nEj#3H z@(bG^72Npeig&v7h|p=G^InN@jVg9vfY)+a9~~8PuOjtL!j~>ZLkQfQ)7eu6v4CAn zKe7SDvK~zd(U~tfM7?D)E9j*N-u@6#Yi!^s6(~MrD%Xxk^>SUXG&{7+N+GY>sy-}d zP|E@1Y)qXGiWV8p+1wf&JS<3jLu-gGGt@U$s$BURVfT%IvP79W<1HZ>&D;XEm|3K} z&q&nqhs5QtfO3bKhVl}}8qhE7%{xG+K>F^rq#P*gjc#AJpJ-m~lKycG|8JPv|M{N% z_t#ZDRru8LmZ*By<{<{72(Gx+K|0F!d46k4;LE>k{y7>NN#|9ncgK5ZE}PVN?@JrC zpU=+r#SRoukTZ--2UU6@39Wchy{G}b!{)EegRV& zBm0tBuO89p<@qcHPd)o<``C!V;h1XgZf!AbBW=Gi3&XCbw2>w=*Zdb+a|cpq502Sa zI(6!#=%hji6&DIw5Zc+q$93FB>_#i%r!_lAEEHt&hkSMJd zTArG4-R zPz#KrpHEAUFE~Ep!QmpuKc{A6^b>VL(d#ewr;l*6ZhDlDD=>9;QRYK7+E~3L zcGrCrAO;GC!JGy9kSPnH0*AOETFR$Cy%i_4gKjZei~{qWj@+iKw|=2;@DE8IJsx6# zMn3&Pd(2|pTPHl4G9xq^$@Ilxe}C3!0*r;3bi0@`;SW%{g9~B_$x|&-a=~G^spZzFZoP^WvwP_0jb_6JL~qmZJTvg`+Eq z!H*9lN7^hvwu{hq1+sMpL~{J))04f+wOu*gj)0UH_rqO@Gf|9}k1->oWw3Wrl@OP) zz6tWONFTW1y6XwR)U>A09n)&b2<}?@JVV#9ShuM}u-!ztoh={Vpg=S$Z`k9QXj0At zBN8sA!t`KTawa>ZgrTu!j&um{%WI9WrIO%2(8t(;_Htc24A%2rr$$~WrSN}RhEwRW z{b_5+-U5I>9+q7sViA!LM~)ll!T9(b}8A?Td<`jEg(?U7_rWE1_*a>+>1 zBlmm`0v;ClR(Rj>W?D;H4x~N6k=&+aoI)9NG_<-M3JIKM3Yu?b`OQAUG_?Hmx5eQ! zn!T#;JPJ{}tv4|zp8KHuBZcdux%*E-SuPC%wQAu32VP+9t)?a2;X9U+W z9~&<_`=vNH*he5|XOWL^{5`n4tg7lV)kb_Y^#4nj>HeQaz&{Et4orVfuh0Ii6k2Fz z97HO+NYoAzan&vqV06!a!)*mG&7cPrrZaT#Iu!fJS222);9>6#)EqFa+|POg=%-cm zrn5+Ht&&0udeL>TZAFRZpD6V&-rp6o2M^yxp~2J3jUPoXR|I!5gd%HsMqFA_&j62jQIVQ>Er3I30Q$!x@*QR2g|Kewj@bgsq5&_vLdZ{dRDw{%*@d^q+@ z-nh;rP4x@Z4Q(YQZkDnuaZ2Gb4yaz#AjhuQOUo9AHFB)oD{D zb(jgImxGX(1+}w5Q$MYBkYM=1LjHDWisjdMM_|N?zhVDg5eJ-YgT`zaiN$#1By6Hw zL_la!DPQb?fNE~2?(D+y?R2R4vD5q57U9jIACjKGdPVh-kk5cNFwAnJb@wTeU^7cE zTd3UTyc*8w?lCj!B~sUx$nt2hA&&6pX~dM8=yaRt3A_6YU~>B4?#9&5YIItCUkkr6 zGzTz#N}M=!sQO`8V<)SRw0|Xz7sPkAP)5dipg^xJtSx)%oUFS7n(AFut7)t$Y_uG5 zx^P&A@7F15cDMnUOL+Nq)hJw-bTuD=3U5b#K&9}XhZCbe;iL(#VicAt#C0)SaG*bE ztm04>n8L>u(TZ44-)4aH)Ye7@fdMJ0$b^eZu^?&$Fr&W!%;*{3bps1NH;zhR(B6d$ zj7Ct5@cPeJEMlGqY}1#35@KMP2Yh%q7+HEa*7UKana8geJ_w8uHgWbm!tERN0KDjZY{{irHpCbEM{6ZVcAyQa zB_mCUwo=b-g@WTbi9YsLx^1}GwE%?A={GCOHtebQ&Q;?PvlzXz?pr)!M#1j#_fKcW zpL$LRY<@j6YivDbw{uIsOc|YR9BW^vSEE}S20M9NoVi)K!Qf6?x)aCke4AOzWIw88 zFVB~3?cZLu0T~htSp7F$f4agf*9p@btL2>ik3Vc-zCRN&g^fSA>CtJ9(5YA>XRn;q z+#{6Jw4{p;){6gI6)kh^$VUGv%t6o+>vOhN3AMJvR)H$O6sRh@PPWvXl`!Z}u!U+#h*0dYt=#EZD=6Nc?Yl~c6*JBp z-x||sZ}aFmvtHN}ub~r6SckV`YE0}1=WK%{!zGJPhmX;}*|Gy6RV8{eKWBp?u+7&t z^eKQ1J&UW)rD!Bzw~k2hKKWWo0N*y4_()oNiJ_NIdk~mX>+X1nHU`QY+h&{Il-pOg ziPzWGiTFy_C$b#IN1oO>D^55ALuGzTiQ{vHv=wjLB7Yp78`~$6Z91&e{AR=>ESBqW zlQK2+s_rhq|b19KH-neu-X!lMmE`C%X z*x}#!=3H)H@;apNv|eXb#wHQ1{~pBr=R0Q&{>F~A*K>p9!*HJ>kk_}<1l)+GqkutV zq@(;cMWEs)e-w=iS)RARK`ap` zMzMS{k1zlKB#i)P+|XOhN(Tj|3!Ba`JF>kmK+bR|w(nTf=b&vAK8u*H1SVnjT5fJT z=>WE*^_7;}AtGtqTE@@fjf95jR4{I;i)-`l`0O{GhGW*SS{4!Vp z;+JFkRbZ9hKV_(1Jt+AO*f-&az}Mv$xik9=b#Ybx48=veS@?r$_GTE&Mw*xz6Xm7w&-!P zuSid|dF1q2vzcW}t3(cRN_acRu$E_0wg8zL*qyKzTTr`yx9MGwLYtjI<07W!WrXQ*sB#N=1IayvB+5_BXB8yV3UG&R;1jQK* z&^#U2uIsBlyR9XZcct9hD?~_zVJBf{$_GHJk@#ea_ujRUBjLoH>?M4C=vZ_Hkjx3s z_@z(&kr(!;0&)srh+o{~pKad%=#}*Z|1H5BO*8{s3IqY=myv7Yh2GSlRKe7+gS2UsARK&-&Ch?2>4wa)HDmpuHM0YavV& zJp^{eFbV2tXz<80dwT!SOQo|VDo0z?u`sn>mDE>Gm&)z%eVO%O3;s&v=HsoW?VPsl zlD0fqN5X15B1CKHVcItbgTW4uz?<#&)`sl=}0^}|j3+7=x zOKU?i0W1&6aT6^I0aes=FT=`q0ZvG_u<>&|VsB>Ci(l1lV_FmA)H?Py`W1ForKRiR z2fz~SG!p9jxG7jf0Qwld8o#%nD|Y zGZ^?Sn z_F-IC?H{>@`7P|#M(uHGa!bsXesYjA>n*mMM9-qy8{%Kr)4^;hKlCPvr7mzwUX5Zr zdXnK5NjHf;M4*%fO}M3HSc9X2Z^%)JA$&$FUiE4pj%;aHs8dU91V zq7PDwe}zq+BBH}#H@W%2{|+~8zypG4WYD>d+slbeVw(8hpwVMtQxbxOzML^ z9ehzz8DKYYOyBz_`riHP-3uG2{N)T?OpcDB6AG%5@qNBDwgTL)jZQE6t-p+b+xILv6Pg^2Ku;;J*7&G3qmJsnPrMB2_OvMj0<8kH$P%(Sq7wLc4!y4gRc ztL4A=;+qy~%!N*1?l%8vX+INojpxR_StQ>LJ9H^J;q7>oPJ{06rATeSMNvofg zhH1!xl;Q=l`I0MM8zu1ll$eRHH<6KGaFI&qkIeNCrBizDlp(WxDUs`w2A*+_BBUe! z>4irelk*NCUc1S>Iva?e%L}()ouCW4b;dv?9mot=eEeYeEg#Y__v2W~Z~Sa*+SSC^ zfgwyfWUkUYKst2r-M0mQ8JM@=d$4Xo?322CvQ={#Zv*zf@r(Z|{?_sLA$`Nc1x}DG zHPGgt9NhmNc3WuuXEM%b9Zo@j+dU*4@c?#KHLL-$-MVdwj08C`Jh$%C0t=&e`0+9j z{Ao9kD!Wv5g4%^i!tFq3A5uG6@P_QcQ{Fwur=h~pX5a51Yxkn@?ylsK>*Hvp;J{Z)mViZedW?cgloM-+Jg;|ISW(0tA1q;&ZEvCUH5o5cyyAS&0O{}(TiE`ahw{SYazcO-d` z^r5}lN(B4GUmyXz!G}pdLty5d{zf(l&Z}50)#`(#N6c<-=0iA&u28#C9;5MDkByCnz3rUb&Z16jv+M&ukK~u9 zTBrpe;(nbsfvyrd+U1t!2VqILEGxhh!4zYRCQ?jg5sUEU|51Tb=F?&*r zagkb=1&hlyJK`sttqYTB^%k4st3qjgbV7IdEBLccEqh;Brt)!h#}CK8g7rq+n#^(J zPZ;vYZJ2k%CAc$x7C1CC5&ep6LovD5Fqembnqgt{OxbX1cZsfwC*9`vuOWz^5yP6T zYRvE0N*=bgFH*|U%xbf(!Ig__hsWeuL53IB6Gufq;L8F0!rV!rp(hN=4hdv<#C&F9 zugA=FGH-*8XoT!{xC8`ATP^E67earSUQ`cJH$8grcO;ExxGA2-El??z|Br&||GZ7% zJ48xT{*B=VzLRNv%)hQ85rWodIRXatDbU(Y{)I*u9_nlMOttrdfLr(-+u^zo2qwRT zBmr@MBax^kMO9;=Bk^{&mW;U=EG9hc7F!e4XR$p~W3v`F-h$CXuoX1uiH$=qKa`cSlQ1cwg{;|nq zOb>=-ACmKEiIv?lvE4;1_5%Ox0wPj3F9HW=2|=4HA5b9P9E|9D$N~2lmM3e8WrFOL zJ^~5my$iTG9F{^y!E0uMkf=^=^Os=^Top{~n;uKB=&@H_HsS_%CsPVN;1~Mc5X||u zk$)8@gx6UKpTF5erl|ohcfWpmXnZCyp&G7ktgpZJiW@@On?g?{*kTem`y{#TH-}i7 znmj{f0s)NE6j)(=a600%T7Nk`G@)@>$W@q42#LWX-lt89d0LC@{IP<){eZtu{a&j{ zJFR|2CKB>04n1C5s`*9ePZ|u+@b?Fd*>KubO#f+a{Bw*dcX0@-9 zPn98+&%3YMhk}$^1{bV7KPD#_c1D-5-`AVebs8O5`|1M8ev_ zm3$jO3Um?B6@_Q4yDti2a6d;;>wlb&BMdG+OrJC2*?G9oZbYbQy9eWvTFRF8|88$4 z)tN8vXZ97w=^sPa8B|Dwo`hvXQJt8^8(-${+}3}dztK*9N5ivEfn0K@^C3{ZLC%6A zE0L^)Uo3<;4ZJqze>gUL80!C)A%7U1xxk>t>8y2j22*33{s!TXdQ>W=AuHwxVr1_1 zm-&MF>CSC8bguIB;;tIg@UxF%SH=kmY|~*Pm>ebnoW327ei2ro*<~ zoI6GlCmYrT=Bf|@xL5s0g*GFv#SL=~eXsAR0J@v3v1Y84NS5*fOb(fLLZ%)n{KH9JyiBjU$0aWP)YG7^dku8X+kRRr>C3VTzfH@r%v-#6A$pq(w1B5Ir@g#p`PabKKa`FoaWdorvHrCKhE`f*L zzJe~u3+^@0O3KnwDtUN(oCUpFg2Hq`54YAt;{^+h;{+WhqX-BO9Xda{#s2;A*YC0e zId7q@@6JC2od5ajnrz(Wz|In#MRovpQVUV#D14T*7Yzc$+X189_zl{Gq^}VqDHbmU zh7{oLiQHaqLYMG}jM>`ZK>m9@mk}B8lZK1Ei0-m^$2vg`g zd${iP8y$8CDdjmu-O(3fqtM|AQ+zyDuPATp-M7n%h%!Ci9(*e`x0Xn|6i)xb%GO?C z)2=Z0J^>8_Bb0zz_*cKx03LA~ehaIVxo}GQ3zB;`HA&>Hgad_EbV6Z{Z1!4K43Tpo zn0&fI_LpmyNmzdw5`|`tUdF5QGlGEzJPGTZ3h)cM9*6y_+32lm&u{N{UXydWy1IT- zeEL(|UZ#@2?8nNzkL;>-4%<4b3&@eILVZE}6zrpjzSjg)i+mKR7ul)aNs@Y3rfaKT zrcd%Mimxk&fI-shH))?5zb^0(N{Rn{mxw#@-*G~y5d>5zuUbfnArT1a8=~IUAag6} zDWH4DWYI#9Liot%HFUe$dv#$1BmwvCZ(J{b5=jM z3j;IfJI9KP_`EdJO?a61N{PlaZ_2?5=Y#xuisG8)78XxWnq9V@OzcTI zJII#=?=zQZ3U9^HE7{~;SrV*PzND`9FoHaD%XTe_OyrWndA>akTW2DLGdEslv#@-S zE}o_qOBr-anJ1@joS}&rC?PZ^-vBsf!ygy#R!sUy&U|^Ww~Y*?T7+^;dIKF**i1vG z2?>|xJkG$bHNcbvy;OB~H(nFLBola@v8ST<*gboOa6+o~e`lL_6+Z_`2L@R#m>(?~ zYi2V}5p+w;-8TQcfvL+s5SItA<||bextx|TR@fN+JAkU(0Llqr99Gfbe}!4%fq?2N z#WwCqK9#n!AS@{{dA(i$Y&{xGQjMvDjG9fdOt3dGO+vY zT(QT{i66-K03~?S=G(cy3>CdQM>Fz-J_xVS&Mr4Yz+Tg&c!G4E>Atd+6r10~BkLSL z&NjOb`V8`{W;kD*!X~JATOx>qcnY|O;u2mhWYpV{jJ_k`)V#N)#$V_D_Bea%!qB?X zFUxX5qy%hqawsw3mVEytQBr|%r1(7}2bm@+uk8bEcFKkB_nFI4zYkg8C;vXP z$m=A?glFZ(^RM39;LU)C%xXj=+K{q5u~@(N(C!`n3t*o>uYeEc5HvP`|4Z!#d;{}- zbmxZiYw;Cor1*SL;o96fDZ^~)&oAU-c^n42{dbH7o6}foercpAl%L3A(h=?VC2!9o zHZY3Dt+G8S!W4pQ2p!UaQXOAgxpt3st>0jmF2Q0tmWa<(V)tW_;W5g&aU}X4;cER$ zMlD~Xk!v!9MB({9Ve%hsDemI=wWt{^vBhp^5yHpt^&WErG-LOtYap zyDvA}F|rux4Npwm8Ah9so+=fbHGd@z6hvv2)_y^_9Cun280KSxT7i0QdgN0A%r2af zhEB7OjfdGqDgcjAD>P`XPWN35;oV5V&)oA~i>jg2k4PQ?-oCeYUkWrw5TCh*e{BV+ z4_eapO|5G3IPBYTi@gPfD--RJ8fuN4V-!3fbyB{-`JSzcMh3CV!H zzI|N})N8T=IWJdgN+jZ+ku3kodGDl67)Uq|S`~b0$YpQ2k`3yTqrPYNr&8w)+eG=nG87!nmz4ww3y9BZ$y6dDF(e5MJkRi_zpg9 zXFILuVmX~-J8k3=w9$jr>JDXlV@f%+zkti3p8}b4=|8T_Vji;A;Kn)MwLuD@H{|yE zQ#?e)%O5d_D4#Gr_d5OlsE91DrtEw`aB^+r>n*B1PKXoT3pJnSxd6@VHzry}OM{@~ z`A4C)R7mU&rXia0O$1_pJr;kiK98`j4JMTy6P!KlFEgZ{)!I5l)r4PI_$0SBMjGFQ zF`b8y%8b?2gF7w!R$yq!vV16|LQHz4vZ?T;peBLY4x5RjfqEV!P3>Jn@QbxAK>tek zb5Kgv?___MIT@(C0{dr-{qEaMeSa7#e!%7Ex>2&@-`MQ zBkK9-)K=aPV);P~iq@Ux)WCQF@2i|S`g?t9HyqkyB{7dJTVkORc^I4CJdYiU{DTv# zVsT6~p-gK^sD;O3co5U4C#cS|7h(Vm01Dljz0c+CVfolK2ad?Shebz+BizNm5ws75 z;2tgDrSIKb9j)xdSyuR;3UOcb7@4#~WeFZ-{>qZQi^SWTMHFK7-W6jTEYv}Q7^#!| zSm(+cBEdz!I*fR2KgVeW;TD8HoEWF;1Vgm<;^5vTFfAkPj==7ty}|Gl2CCa)r(7do z;3!C263T4!zL6UG?0hM+I-x)*%M z8w#XBLDrlMYd@>cHAc}z@s@PLYZ14~a<7lAJEE4{V#O=VTcZvMMU%d|W-*J!XJQEi-vD-E+81K( zs-iRrx&8tu#dmE4AVv@EB};Q;3g+Hk?D+tT(PcB2je2c!z;Z*VmdI?3j!l^S(x8#R z?0aLwPcIG4iTbay)`5sV`&+6iK-MEn8*+4mK}DzxCAkNs${%7FxD=Ywb;_#kwBBy-c)*LPrDIGNHz zYR>iYK*eAaKpjrHqW|XL{O<@46Da}P@9fo16vX-02NMm8P~C8C*8@*Q@?r_zv(hme z4{2Uf?%+q~_p(i+sDUSSOK`uSneE%WNd|*1TSp0COfP|)XV*yLB^T%M_zUcL8qHEQ zVv_HBUsc7c2Nj|-wWwp)5IF$TZw=KkEaO7Iz15U)M~;)83mzsT_o4>`YE;>MOLVmJ zi7?TVjHEC8N&O3xlKbTe`~7zi(9@QMV!|(b>_L_>U@p%X<8z87KHm7WllFEbX(ru{ zD7bvbt6i>eJOgYKZ6LUEU``}RF8}!y7}Fp)lOy5$(Uep!#Hr@}q{W(xG$J>>>uHQ$iNkiv0hUGk`m}P1e#P_f`CRnC2MWeqTD$j`mh}e{{ooI03b>2r z9%`!}WASghi~#sQE1m7KO6(BGYZ}N?*Iz4ud)`TI<$nmTf5<>{^ZWseFAOe*@-B6K zU2|S}71MK?ETu2M5_f(M_{|^f<@hDai>~U9afK#q{6(%6Q}Qq|xCM4QJv;r2s9qTq z`J{Gs$7_YQOVcb#1$bjSL`91;(WH`IREdo*Ek#uv$uS%j(#LdRMI8RxanIuGyRx-&2S?<=p zZpM>ZvLsg^M;e{Jd*^pcv^;9Bsf!@l`$dZQMoj7n=3$+-Egk2q_;)#Z-!Spc_sqc{ znIb6fDI4_YqzQSMCb7kQl1;Cc(>&3M08Gv8RPp#MvyQfkhUkQ-Nx*1sfhXc(p)|PP zomWXGNor!{UcF->1gxvXc9WG^I zFqqfuIpn#Wo#z(k?W?^>KI>kcpBz_9-`g@NR#sM&jwi27sLz!dAu9S6wx9;d%kiER z385!-&T^v1HT!_W0RS-_YA@F^os(=Au1h~dmnmhDZa!74=;6^((#Gev3vj9Qr;ja@ z`T!y4Byojej@LcZ` zPQQ||;twHp-n#GPyu&2QqqOJe@g5RNwo@sVV?Nx&jf9#zGQW^(kDL8u3KntF@+XEB z&+lk7Ne~7@Lyhn$Zeqvj~4r$KA zcD_?OEeVL){VX!KdmnPtJgiLGPNn0!(I3Qeh=LyXIt9rjeY*=~c=JXj2ne-xwS1)R zuECj~#@)A7?2LV=Iqa2!TowdFN_!NndnSh{&W5Ncg0Y!u_tPR9g66g=c}!Sa3OcH*syGl)#xMWM~)jBiH6Ij9w<@I_^Ec-N7!pnn*`B`c4M#&w8r(#R5RaLY>URAs7MT>a~ z5zQFWpu&w#gLxDO`CrDXQBC`tk~Lma@48N-tnU*%^Yu6zXdv`k4eYL&&)~9Q1;Lk^ zRlQ3@Xt_kzJ_QbIg{rmO{mhD4e|Y@Y)A!mh*?JHbTDyC)q0GKF?)xzl8-6j~<0TVU zwey|NRcVQNa!M_W_6Lh;k9}hKl)P95w{7Pbn8k6U5cQak+5MQ#g}7^$xcQf5ujj!M zTj+cz} z^Xjv4#zCpc>4u3Ngqev2?+`_u4n-4L^nH70x=7O`SUT)bLc4B3B)g}A)!wpdefoUg zt?OIF>UMG6z2Q4HE{ck0DwEFrOn&dtSZ^Dz&80dfQw=Vw5BkQT2#(`ZX8MJd)D9G| zEsLt@ov%E@{K|i@*m#DA9|_TqA3wfb=l@iIy5;f6cJ0WD<3LYfB}BBYlSjyp{r_cr z{`-bA(C$KBqqJtH>uQxFHnlZc3=U(qUX-ZGeu$J;NMN3`ZbV?%NBeMnqvqQqC4BcR zvx@cIR+dWfD%wfzN72s8oD>xPW?^`I;4nhTd8`!o zu9vpiy{0X-Y!63-g0uFLPQd`Jg!6D`iIhTn|3Xt$N0!#9Komuu63~^oE7|OCx%AS0 z19ktY(0$IL4J|yte^0#)3_5LqZ62@`8~zk5A4C+PJ^L$LH0Ohx`hQG}4#b|#KiMVS z-1Jmq>(}gF4T_{wBcg92$^Dr9@X)3HOTR6vCzuNx@8p$k+w=b zyU!q^?^XS^{UonH$0w)b=a#?B%3k*^o_Mv@Rh3P+TV^?c^R2_`*t|7i(S%g;CA16JME4knH#D7Fk zlC>(6{Jb|pXfv&R;X`tJB>S3(Qj9bH(j$64`7Eh{Za}2O&-e^m+HKu*_I82n@#9Eu z{Z-20&n^`_g?#m>6%;;p)pY9ch zFNg8vdaBA;R3IVMgF~J%%)e@bC~@8VW(%mdCetViD*)crmnN-`PsLAww93n>Pp-(< zIh4ZcUMpGhMo?krib`u_j4);nubAoN;R7z99}-sbk=fZcOs=@XwV<7CNd}p`*epj7 zQ0JBbOCGk zr6WnX{yP5@r_%DGP5LtnbEbG%)y*XD&xqRj#{Ga2@WMSrXZ%jo$R1wkC{ShX*lFE@=4MjClW#Z-N~I=6lsB%=wmhh?4i>rHI**N~wb zb5=!#&tzRdqG5P3nhsLwc^otjp2*hjbdi1a`wX@k{J28TYMQ$VNO+Zk>BPgnt;}tu zXukVB*V)6I%Qn(_>Cxrt8&rdqWN%m_cXF*sjO3j58thsZ^PC?MQ6sk&uxO zkG%y(J3l-<*k!=3zfvXIOTtVo04u@cuc63Q9PxXZ&Nc^%*S~Q&!dUzb$k!q=J}>#v z#_*PSX^r$WGMlEJ>#`A$IoZ) zn0|Vx+AAp#tEYwDDRAMn0Hn{1n}jFumwf`GGfWNz#zxQOOBsa{fdRh1v^ovLCp*XD_Gt@RC!yw)(eL)SW-i1p!;~_S&*_%=Ppq)%ItbAiuD` zRUr!RX~6U$3mSD7#c%e#G_cJ0%cnfz>d4Ceg<3zXgwI*W8T$}W0^)vJxXZ2Sd{nip z1yizkF5Ps?c^dWPGPZ{Ma^~(BXnPIl8p-ut{)2?^zfjd=jp9#ZfhUb(sx?2=>#IhJEAbUX%U>#bqpV*R^TAPXWXQPP_wagQ-;eF3%~rNeKlZVLmA*9MCe@#eui@o_~& zQmfL@ee2@N6Y0f3Oq}RO|3mbKo)(K|X515=Aq2>Fq%;rBTV&R$BJk+jVt6+Q{WPXw zje)9hAl9GhSwNOX!%|9+LXqPM8^YDYBY-nQPN5aa{)3(zK_69RQ`ocQ%1iQz3g+z`OnR11-&#XU-ik zLGGnLF(}24OAgJjeG|#<^ohr65+`JU!;D0rA~Su=WzeMNWv$5c4VGdj@*grE38~*i z-!vn6K+;C3T#naYGPbj{oD0CuA-e9l>L=++Y?nEB#9B=zbebz7@vn|HRgxtL@7a@p zcTAU%-pxQoz%J||#g=srI`K^qfUA6UO8Vxz5_n&6P`P6I<4oTbBHK^sclV9%?(Wqd z_!g2r`Ls&!vewFXrVIv02l!X)3}*gfJUO2ajat4c5uHxz?S`^H>v8bjpXkq-PGCHk z@jKr1K9|;LHmF%_tel%o@aDp;psYEFTb7@qk>Zn3K8!i>nQz5=v%S9A?ch~+c9u9$ zP{|x3@Ad}lviHCv^r01cxo|7>Su{kJuGFHtLj+u7r3Z?grSXSc?XJF2>G7PwBacYB zzvum9>*7c9%uHCc!{e}YLi;-=?F*+6aps82UAPdA*9qc^;WS~O{6uVL?Y&=$e;eij z1AhaqxYg{k{5ugR{pR~|Mkx-@r7BhjNmn<8jDiY35m5bgW4~9>k3mRw<2i}kV?D2z zuj;wA`+$s)D(P{R{9*9JNh0wRJujzMzW7(mkF#j6u!xhI^Svj;jpT!n(RvFjJIbw>Q$=pWR4%#0Q%xf@nusyb6X-$4cuxF2m? z#`)lg!Yyh;3sx0JB6ixqZdr_NXC0POA!77cd_@gKW!;We+Q`-N+RamhpRO{oPqRZ} z>Qai{K+|@^nxtPSHGb!G-M|kdfgafkrX8AdLKff00&O?Ql;;8Dq*H-rbf|hFlS5vv zldQm-bh&b8S8*9H@ip|_mk6-hsDs#(&pyGD;5ot?W=&4FZNmcsvQ~f7eeySgpBArn zS!p8Zyl1<&nrD^InxEtf_%6Sj8W>Ngr4A3NE;`no9U_RO`oNnm0jx^7A5Y*_XvqZ1S-Y87FtiZs+Y@9RwfI&5;@G(eWPZ z?Nr*P2low~$Cg$T*6lmLTBe-5MTdMHio+vb}5mev2gac&ZQggxH2V`ddO5gMCPwy;@ve@^HmfvGYIEVXD z>kF_@?L0+9@QnZdv-p7&AOY+m@Ti<2uD2XQ1pMMysyX+krthQ`pU7_;cWbM-TVIe=3({?(gNrrD$c5?lsFxNlo zERGKkAb0Y3g4$z`mc)>73l2SC=3zU^BbNwPaX$J4L)3i0AqTV$RQgBbrQtfi04NG{ zJV{0i3>hKWyt3Gbau(16JwGGn)93eF@|F5viv84M{P4;0?Iw85kX$B>KiF(wi7`oIIhs6 zX6|P;$CpD)LR|cE>?a6Dd7)2T=G6uJ%Y?oh0icuVj9nTm{ct-8QJ(=s&+EY0mtQZA zeFJXhv3RU{aYS^QOJ(3USZKZ4(xnb`#J$`O9iRePGmiVCgCVqrcPluUNT#;eVh?9! zA-{wOZ9jxwxPNu31LayLRb*c+Rat(&Rl(utf_HG15B}B*nMgVvXE}zPJWt?pv3N8y z-otp*D|Qt~7m7)}t|Kzu#9qa46)VRXSMf?tG|=ImUj3ya3T~pP^V<`8C-gIJ2;|52 zRNq&N#%>I2UG~neBZM}avCd6DcK^YNSNGwfZDgH*@#gfG@<^u?UY+F+^s5syKK$=p zxukPbNqTo~%2G}8*Sm+ijH&}wxEJdl4;^areI;rx3!KiMJQSNnBT`EovnmVA_hQQO|R5-9FVS1#OPbc;<*vd(8k zPKm99s@ObNK0hWRCD-Ssq9h!SN_CQd$L=9$c1c={XJ@JY}@k z&}XRSQ*j^6gz%@7&@& zx(`rdU`=V`0F;+Z{_FR&S1iQ%&jToI1-_9`R%Pgz+d`wwE&QM z6RtJVremA5*$o~x=W6^6(Cqbg>pj$i%Y}FXs_>l{sVM1?1^{B!doJ^_M={h*CNLbg znBbE3?-J~G4DgV0epYCw4A+|g-A#cGc+^8ia#uiqWUI{AP{ zPkp_V*ILC@#Un61fh1j{Kb;z(Bb0IBD1o|*AemSXvbINVGwq(_zxF!mX zslLB|=*vCXxIJhIbRL9^;kj?-aY7zZaU_Y1M>V?AtIW;8{yF889@UA!kLxTnLM_eHl8C`muYR7G{M z=zGmCfeT7rJ}D^k&gIZHY+SX<#LKk`zms!vSN4`JDqHt7y)Dki)1yPyfSFiLqCni7 z$&58a&)AsZsQJnM?Z=B=pIMUU)7T}SDVcE=WBV2~MgpHK$1&-L#n83uiR6QlGkygX zeU7W@M~KJ*V36kl>PRbJvUVD?*1lX;&uY;xycJcDzBgF`wbG-`xE*cVXZ^)$-s=v#8$OX zvdh-j1<4^438z7gttWrjj6rv;&jjsi3~dTv|1ID$H=sB`TH!5`eKA<7nssr06!|DU zJ)LcO=ju7yX}+{O^_$Su(H`f;|IpQ4mnR2#t~;~M4og6#oH%fer2#d?zA`}uF0%At z;#rk+dPUq7i{oDcLKT{XFE7usE%yrvba!Jf6YXo+pM>KOgfZf|ZBKqI_c;Z;0vP72 zhRq(o@?8qQhQ{9$8i)y$PDmhEwu<8w$N8wq*3TO3O*DP|1h-pB?uP4?T4bN2_tgYF z!32VW&9kk#KWtB_SJ!MDeywr%?fb#n{rv{$3@SwkXk**DZ^6hpKQBY*@rVJ5zg{)4 zUC~*h_saCGNi_#>T_?THr<~rm&Wr!pTZTkVb_M`#x3%=Q^RHo~52NM=x{3=Pn5`fZ z0v9+a1(ll&Xv2EThZiu%So7T8-}Nv@?CI) zZ87{KKEjt1gbtUU5h>#o%wHR!e-~mv?lk+h$7COEq~fa8Xe~Y;^&*t{h^paHl?RS` zr4p6oxk?biK6})p)Z2MIEmB)xkZe6j% zuSB9)qaTl*qH!azz2dw1ll4V1Z8o}b-MZ_W?mm3UK3kqp{&=K0__XHq_88-g zyc`zlfQIZfa@o^A>0$+NLCi?8el+?7TdHob)NA-d*wF1%%etYlbT0y5-L=KB73i`L zoRN=4dNKyvb{#e#eB&L$X3KA^iPO9)+1YR%tv$9J9c3p7qJj0}E5`oDAw5{4sCT^% zxmLOtKd)3SF0faqGuNpIW5w$+6=3#FRrO-4E>9j1ILSB-#CypSn}5#*sie^WS3Nb% z^IstXM=v(+EIi`=+cjq$-a(D3QkK~s$#Ib#*#R8Z$)*HKh55Y%36VC*%VUUsRA;en`X00gsybSdT`nJRjskCPT z9pkF=26#b};_L@|iD}UvU5Ht_9!z<4ys5Iu!{4X&4hMHp zMD6lr#dif#&P9)ykCjd~viis9A@RP%1T${wgZ`glEh=4yuSq$R{2D@5V~b}zCoLs` zo4GBy2bot#mcQ8=HTL0|M%PtULt=h?_)K`tqt`}qo>237}EM|6DXjMCVc&Mu9}b^vEcq)LK7H!xpCLjJ&1!Gvu`nE$Cq(&rP8hOP zeLUfbG2Kp?%B{I&@|d;<0`HkDn7&gXMAAAF-BXzxlK3>OV%kH%?(!h|*XTKF<9ns_ zT=hprs!NJWK3yDT1TYT?4ri3Gzw|0vCeQbatF9)qKu;s}9j@dj(;THIJ?;oOiXSHC zy#xGA)si$V3fMwcxs&P}B+?w!A-;rvk8=D|gup?4EsG3`E(A(DhsRem#3R9d8@8>G8S8i4_eZl!DJ z?(Sx2X@sF+r~$qU@8?~=FP`h*5Tz{>7#m{`0~YdBsd3f($;}iieaPE%~^u9dhNN z6lthiC&=Goos3)34P<@6$%o7DycStS%*}<*QYcwo#Fk32i}vHB`W-GrNjzH?WI+ou z+3o8|Sp~y{ZHrdK3)S|2#>XA7g3*IZaN#pGeC+XpL~TA+dWb@&V|$3c%Uvtpbu&x( zi-Xlwy4&P@kJf(#^>!NpCpE?-Z2C%=R z?5U^1n<$4h7?bt()n;;%tj<=_$zacls#aowrmZY31o9@=>nM3FM#_LX)NLK%9j>0< zUTU@FZZ;d|3}1bw2MfQf@VJO*eL_5F-{Ad>0okyVb=kMa=ab=WW#}{Kx_MM;+p-`Y zv4=AlDQ_T>+)^_1b$(=)C&{&1Akh3yM8c&}0Cw=Q* zsCQYfX^-&ChFg}udkO(0&06o zUisbdB>v(ior{$w<3~%ZPfv|lVC~&ta71gHlvg)gPOULr3h-Izk7@N~c}|((e?L-3 zox|=GUUBF^sD$Y5H&MZ;g+4=?;Zkqw-xQS%X9Qx}>bKOP zpgCW31T||+6e#_7b+g96ftW9m)VM7^<-KtZL~{i@Z5%#O4@e|3WH%2=B&yvN0APn~ zv6yKJ5dK@G+S$6QO|cJKzu(A8;AZRbvl+!sq?51?W(iYPa2-Nqo_Nk?XNy|NP(#AN zU)7|BfuoB>ehk~aXpKLB2Qdq!6j`{|R$Wd-@lAY*Zg-~rmHE-s^a||^m1W>mE4kw7h9L!CdT~wd7y!jOUSQeO(y!M2_e$RT> z#%@K;dTcVpW;P{A9=JKYB;wpv-Ih=0I5EwnM9IX- zim*ldwQ(X4r_;_c|TmZ&JBA6Coo4u|M=uhW)uk`miT{fR?G_)kFrGv+R zlwS?orB&k7c$wWl7DaK1zW zYs&k%cPs|UpwL6o^3jJhZexCVVbJLu5}{K@7D##LS6po#e2p>2Xqa0dS?5hgfHD7G zd50ZnPo46{^Rnl^%0yKhFgPM;66e#Gm&hocM%tPG1=zxN&;j8fwg=DR!nL|0z;(A}Yp zJh(9iECD21JhHtdG2H~qb}X`P<@3fEeICNZ3a8k-tgTCKKVC}hB4Qm>lT*6rjV;M} z=z1W^hb4n|-3&TRYaOqSTGylBo>}x{*!KJy583g!Ld=lLwTOhDr)gL>2qijSE{;x5 zf4MAjQ}zfyRdSEvKc7AJWZ@f#uJ7agb&$U!oG>LM*lw}D6EM9#M_l@uo8U z9Ap}qsR$XC#n-ak?6MyajQ?HfaL3+1D=Y?Vn=+_!H%t!14(ESoN|${YAf2PtUyJ#KM;j`x<1=Zzrp zxXV9>9q{RC)nhH^r6&STb@423G<%xhCJ41 zz^tQbj{C<%55;DRo@oJH;K<4s8-{;3)ZG6EcAG2k+6YO?I-6fi6^NOpG+kDPR>s|* zWSSs-UNk9bhdwlx=sYB)aGjj!PYQBb|Aw1%5~*+2b_b$y6cg_kksdp2`&GW;Vte^aReZa=gQ$-;Wu-Zs5nyw1MT{zMl8jA zb5aAj>H9|Nh9YO6vTc4`g1D#r`U#j|?0`sO?uypFTZ!4xseu3`~p%)G(8I^zmxM0Qu% z%4O9)S)6&fmRUG&EC1d5v~4`WdZK@;iWwyTUE9OV(dAbnwFT0}w1`oNex;+gGGHai z+LMp7w8_~|gOa*^J)!}36o3|mQ;hA3*3dyfo3R(1HGi^-d)nKoTd9ALNyjv&0NHIk z-q^J2y^I&VxLl!pHMpZ;sbe#eh|9lh=K48sdoxY$))O zh2}G7Yn+z(XNrpUr|8J%>4LdzzJCUGSIL%kmr(MK0DL`qsrt+-W&V-Y|n@pbalFWkjT{NFqptM zJ|z98+cZvxeqW-6b8rPN7MFpE3=^+=*KMf49+FMFDAq8Yp8z3MfH_Gsc`3!P3{>7@ ztaZ!#jF2A~WXRydOhbTX>;lk?CB@AhDN}!~zq^r3(kjkM{y86G$mFg9*%u!TC~Oo9 z1p60+DY=X3v);))%qy!VRbJ}O4AV)%)^P}B5>k0}^qc79IWV7*xm>?H`8oo|$=?u2 z7WoanD12!{#QMu+ikS69pK>VfyG0fM)Qk*nQa?h^Ap&7aYt_t~m9RO`EP70pCaj*O zWcU|K9e_yC+9BlRS)5?WJwW|7&O#H_40=0R5S)by`p_f*a@{LYm$2AW2x_v@=} z0qoO&Q|WQ);_sK#y6ZdA;Vpi93yb`=*HI$&yIsRdTKc=Tux;aq$1H*=jl|g8nj;=h z(`b_Ue#zqvEng%CQTLm6OJGyv8|-}s=8GCToe!>_SmB@Cv${z-#L<8Exe^8_!#3g9oBh@7*D&^CjmR0Z@9kc$}7y^9_i%oL^MM z_ez>Ypx^$6|74IetC9GI2T3U68uA>Yy7GA8*&&qDczk}jBl4O0g%8M}h|nX+b#cN~ zbO;+StZHGYy>M0~9IyR?lbS2N(s$Vp_-+y8iv*YxEuQUHz+w{3)ol)}e{%z5a$ZaD z*eIurH~QdMCtto6-gv26BAV+$yZv(_$Jl$eTFihQez@|6-XV|s!S`H`BB{)83F~(a z_oKo*x%t=hu)0dW+eUsX1NNUgrD1zTMh`>;yY7P(nGai2R~2^_&}cibmI8fDSYVmA?- zX#VwY&~x(piD0@Fc1}eLL*ZhR+j>lO`-&wVW0q`m%SbW_+sLk@Y`m;eC6Z-P zICg+snEWO-p4`3Aj3tls=iD~Otxs-ld3u^v*03B6Bqu+bDG)nwWMWCWkN4pVtpaPy z!T51%>L@Akc>ej)lbtOtKpR5p!`58%d;D`HTtA}IrALX(?a9A!32UDuSL{OBWC5#+ zxw|*457+W9l*FSo-CT+AX1*#lV49PMBP?~~vWRHU8x97+_7tMBCq%?wTT>bx`R2$g zs2=B$5ZKT)7r2~XOdVfFp?9V=;^2$d(?I}gHa{rxjk~I;sUD8l(#bfUcV!F2lC)B$ zUZJG>Q2h+^RLxFtSPYjJe-VT~S3M9Z?u~&=q+in`gD9zq6b?k3+>cS$>_;dcwTH^U z6TSgc6FRG2UYh=kqs|5EN*O$sIMhOSAG*$nLV+!+AwiR`5xgc=IcUqX9lQdl*~2iHCe!Fd6%=^ zYwy0$C^V+l)iDKXTgjOK)Z|}z-VtvFsU=wHMBYd9TAi?VFyHVE;_@88>Z|jc z4(G07U3V%5*n{f?)gOwJjBNlI3zJHl{6`sof)}I=5z2V43Jl-hj)w&)Qq+rm5q1CF zUD*i$qy+2IS4b6bJ}qL*7jex=*^>%{wI%_sq^Ji{8SD?y!(C9C7cwpzfLrXCwu!-Q zJ$7%y6;fO~yDqrf4=E`Uhh0(c<)M!K+~O-&5ar@K@s^n^((q<2uCUUY(d>Mfm zJ~)OE0XSs_5QV$Ytd97>CCBA#+xaBwgkZkj4%JmP;|JaQ1BcjnMF8nSnq6C^`I(;A zy=%Ra$1>M`ZS{5#hXFLFGljG&mx<5<3lMmA$?#LOuU!dx_ZO ziVN#{-ya)V3^)B39Ex4}PuGO*8##agm25B|K-I7J{}iA)u*=+Gq^a**Z;}Lm3wKzj zl;1Nq80!x43lkPT8R_ZkhTMDlj7Q-!l;*y-3#v>tyc-UA>$OOR>u$k_`F2adzs^vQ ztseQvDPPq6v?&+Z>H^kv7Inb`T+Djhkf=N&EcrBYN<+#Y{-Nqq4+BX)5{n2MG1YrW zB)sOF4DQfA?ZUq4Fcy^W^Ju`Q&H=ek3NOnej^7WlJd#kZYkljLC~+DRAa}0IweX1^ z=ASh2w&ee#KP3tN@V>;@GB^{gRiQt({At18c4mS4MGB&vJbbv${!T{HwL~FTUl0oemfmwo~14r^1SziH^ zd4zAz7!Ay?E->ZjuGHw^ArPetE{5UQgRL(VWUFY+9V&X<`^8|6;I7agg$8UU8x#Ss zc!xxkWd4gqNguM94>vLZ06b^C!}1mI+N>V~x6X&g0fxFDG!fpQxh#{&Y|X~&4$!&X zHxeP9?G^(T??uKIus(R<6N4a`;PP@|zAVpp0dfR8|NkyIh4?>`Q`&zmIrUlMThPNT zJaXH^&g5?x5A5!72kf+%|06g>l%e0HEqk>L$jZhCVdLy81uYxNc>GWj9`mamrGVFM zG(qk)IOOe{JP=(Ah)&iQ?k6U+7%zay;#2ZlW>CunS7fQ`^QS(%+pYWJz#EK9Xx~q$ zMPK)fo{Nz4#~{a7S|C=)SPindBYz6>oX(0?Vv(TG@_vJZF&ycY`S55IaCW=pM5_ z5%egE>5E($n`n7wX^@np$Ub0e8C3c?`QWnzPb9^oi`(Ety9EiEQ~efg+hu6l+5MKY zsTO<|R&JH&T}J6Gh_zjxG-J=(ZK25yIPaYVZDQVme+sw0+Ztu|L9{_Xi@L9fML-4h zvw1-`zCyKs(Bc*ElTtvQXC|N)l<5Gzk{zZKShGfEF@wn8F}dlBbq4z~px3=1xP+Dj zaue7AgnSPG^{CL*%acMvP5OuPDGCe8@_Oku}CPMx5nr8>lH}~|KZd4*b zl!7L`GR`xeI&oy?*IouWw2ic0g4FpP{zQ zyYIJyA5La)T#)JNn#xC{3E5lDrjcD8XFyNmKtDKzTn3OSqJe~^`q1y&q#z^GI2eFm zb%favF>tqr6I5kMv{CYe14PNliCp^x~PnW zGH~AgeVc;LaLPa_nlh!}ng4wjMN1sK?+u|*n(itL+K3OHSQ$6O+Di6GC3K5}fOQHN zmEQ=mp_xMZ&Y~sXA}Oix&~!od+fX_e!^q|LQC$#i0W}_sPg0$V3nqZf4xqnlsZ*h+ z*xIj2P&hy5^ZrK*K&XAhOU!qJi>LLM_)HurF-F!_vvozGnK8XKOdv&pc7-wE4K0K| zc$&l^9)|;@Y!8B_F@Y#aV)fqBgciD>=qj^Q6Jo^F2P<(2i-o@O&1VhLOHkWtUq)x= zJ-h+1m`$0?rKP2-H|MM~C+$}wRKgH!fXw|P^;$!-_pW`!*>&j#Upp>=t#V-HAsz(c z&fO6cXV-g#&{awIJ(1ooID%@N0) z3=ljHV(LiR*7}W<$m>jb#%l+0E4!^Kf?SZOok|6*C}eV!(`t*gL;hbHQw%`=wVNZm z=P1%9_Vh|Om#0gcCylAW?rsN&yzsr$4<1n?O(sa0vLZP-b!_Np(l`9);Me%_jFh*q z`FV>C+RBAXN!ml@%9@!BfDLyxe@zhp#Lyr41;(bf`)vp(E+fU&KvCP=EnnVUUrw*v z_+lONZs{&lxz+Q#1^T4XYQ?_MVaSt|C2p>bd5w)ZdXk{#0f=hhbaZ4^d1)*E zKQHU?^~)-bbkzKJFKhq5h(^U(|86lh6%VgOnc)DUQC>eDx|G6E>srz5o-{8fWClP76(v-pHd>`+=A*EY{Oa1Hit_%Mdw zlXJG~TWN-!M)DiE1ZHH3@aVd_1)?M^05$`?OFi)wFtAtBLNsQ*q=mSM#SP>-7A>o5{y zim6Ox1V8e5fmy>2AfIjVu%Gz>@MgDxO#{KJq9T&xc60WhZ0*!CjULydAihiVTiV0E zn~sAeo!3{J%|0mrV05*NNBz42PS-yJoCfqDAodku4_G80v&$ae17StxlIdKmuMcHM z>3Hs-LYmTD%Gj!hlP;~$Nb%t=5&^JNo}wc&s=InH7eYh{=U1p&y!J>2E;9q^b_nF& z9dv6Wpablav6h-_BhQ3DPVt9;!kfD0~9p0Rk$>EaOR5QQpY? z^a=Gg=|Zk9sv5U)q!~Z9&LXMKUe?}~FfgmMBp8<|!45E2=@lJ~oR3*t^wBI`#Y&sG zIrIacvOA0OM`KF!?p?k|L~Tm1abdPCIDE|S^wrW%2UW3mnZ-M}Q&LU@R3&JQIqn7W zx*S|}m^-}|dNOf(Fc4Q<-ME&MTPPh31QzF5(Pc}S*_QiNa3OZX|45MXf4jcJ-lc76 z{<}M@_1-mw$M)-(eEvqn%KV}tmvCPS5p>XA7V1(bRqlX#M%f4vLN5ZUqx3Xjw>BpD ziEggjiJKqjWT^$WFv+G(N)E`CfGIP&`&t@m{Vr-yB2=`P?(|{J+y5v-agKruX@39> zH!?JGFH*WJh0VUCki1=r=|P)Z$V$4tkYy;=P$RDQ`{%)MUVp}DH!-N=RR>Rs!gAgrI-?!eeWbC`hITt9miE1) z`b#}-aWo*F7)tNAmwH6>Zn(S;A6WV}$g~p^H|^Ca;>fQ>2bStCOp=G!Y|oW3)m`;# z{LY;naX&Gbkx(c_!l|Omy6cdj3Z@`4%#@dsK@H7Vn(~ksDkD` zD|ue#Mod0f)5oOaV(}ooOWmVLodw3`wl9H1s9NMB#n&0p>!U*bNti>gmdz&Z;^Aoe zV&9HvW%LR};6Bu4g-KNSzK%oJwCq}di3z8D3C2)WojcNnzynk~LduXgn7*ac8G`D{~7%vxH`^E0CVJGZx< zJLH||2a8wXdoqC$=3;s-{5(W$TQ|>-fA-_*{9L`PAEn@9A>ysbsPCVA=-3}h2f^un zJ??B)jVV(MB#=bRPlMZq z!atupTYS`THXV}g0SKYh@$}}NF1+mSgJ|zbS6LjqDc%cy{_wr8VXn{T5-RHbp-5lC zhxWfCTbF!=KQ38Dn^pZW?vjlM7LrzmV%Y5-(AidxZeX; z=6m{U00Kp+eT!Bu)-6fIl%}Z?sl2)jJ?f!WFqJ?UZ@vF+_LAs6HxFNiy8YB}ZB>4D zdfh{w4nRYQnE2tP&?8wlF-8zp43_Ej=%8*k+h|8MyRL$bhXnjHaL^Ioms0bhtda*wJ^cZQ-5!zs9-uB%k^rxU2 zz$~Indr;ieHLx?FB=a?gu%Rd-Pnb-?T1ddMJ~3miRSkE)Q7P^+{dz!QwDxvn%!Cjj0JNUScNfHoB->X z_1)<3)K}yF53&cV6+dGW`?9M-mcj?sS_mm13WJ$Fy3I|V*_KyHqjv!LNePS>Bm=0x zT= zw#f(EC6j4uSArjRYS8c39uLgzs`O_pIt_+a2h34cq_bdMARpVJz;4!_Ml_;6;h6^l&D^aWbD~GM#_IbG2Yd zF}ZJQ70;2EV>G{?3Z~o|hUDUtOLVfATqGUgN4kI{Uoh~FhL)^yi3l#0y2eoW$$JV- zBxBYYHcQtg`nz8D36%H3_)cLOiE_w}^6i*vMW3 zgTFoKx%1UP_3^`=Xrk!q$F-##uQEnc8b96SzE@k3`gnTRSiQ*8e5cL7`4eIIAs_2* zSWCef(~PptJ8C*@weoSQ+ug$}j#}RL-33P8(Nel_`gV{>R%}1su|lepkAtrLiSZ6S zr9Q~<31ylo#3YJFC;agdF&6UWX6;2MEA&(0{FOBu@W<{f9O=Y_M{1kn1(Pa4@lMH+ zA9ZO7sZX=2oFX8If&@34Pgg^VeA`Lp21P+xP@V9rPsFyAYsh;jC9FOH8m$ueld@mE z7glDDcJ#sR3Sf~sGEfr7fZeV z(+P_9ahvA$ZM<_2NW}doL}>n^=<)I#!M*1YQg26`iH=Vt0}ylcOyS7(XH+f|1gmd= z);3w-e3gay@`-~5*#Xx?Ak1@0z*Q|C(1ePeC!?b!tb~`Zcfun(YLSd6ruB=_-$9Vs z{E5P9TiYiW$w$C{G!K@_sONI2Ah4hHawRMM&i9{Xih7qA*D{urxz>1<%{pFIg%x=N z9Cqd~tEac-JaZoxurm{F%_y!8(G*clri-T{reBskx0FGa>)K8t^6ImSY+g_DG%RN1 zrU{G~5)*RY4I7j6&!2Ys9v;8(=_cLgr<+H@HOvA^_WtSuvVP5Z7{s!|^;_cDy!k_1 zZ~Q9QuJNypu#jxNH0BDGrbf;gjunLqcmeSnCVCuYQ|}I+z2%EYiaN7!@N%5mLdai~ zd!4071i!S$PJ6Xwq{`2#msZj%=3TBA$D4p zqVBVnb69NwiFZt_8b%ZrGLlY2(+<+8ijJdN;0Flf9f^aF&taQl>P0q{k45$M1kPe! z8l4WG9tGePYWos{qleNXa_2*fOZq!*syG-J7`ZG37O&4%^rTJ2aP;0HREq4PrF`#9 z%T&&;saejR9Zm=sz)Z<<)@#AbD?oU(Ky;xV@6=V)SsbLW zh!lrQ{4OyempDw|9|zmN@axfaBj{E0Ywn&(QP^}e_iO&{_60f)pRyGp45N8C_){f5 ziW#(#Ju4-p$muvmc~xROuX^V(zp;*x1?ACH>=zyZnp4)t?E@3HW~8KumWtX{YIvjV zExP>HHz97T9&@p$+s&&_pB_uBy(04G;>>)?AaYWpdTnltDl@qYF}Gh_tCg$K3|ppV z1<_Tie}jBaxzRLNsP&~1RvMJEu{|6H(H3<;F5t6X)KR)ydL3EPuX+BlfU_{9&uD=1b`Yg_du!div#H=G#l`V9qcl9R)Ql9R*fs z4i)8wt^0K@d=#*7mec%s@IuIVp^hH+qO=*Cu_?UM3y^eHN zA?t1&&OD`I4l$wdQqd=9&!EDjNNtLR7CNf;8E5jln>8S>ZY# z(#=h(lv~l{7Cx{^IQ!5%8o?c)G?4e2meTmUckv&4(4cQ(w3H%wqE!h(|Jw!iUtj2( z*db8B8LnD|Q=ch=RRQ#Nl?UaikVz>d@$ADYQdJ*;clhil(L(0{3JUQW+*!LCx9wUw*rEfhcIi-ySs|Ah?gFxnR@{ zD$p6_iknxlP?itTc7L*a-V+O7!2{IBi|^cI1EMv`;z(zFeO(ZI=-LOe%007 zg85ZZcX{^^^A%{zaAG<;Uuk(&8fEc5?A76T7s3BQQD7q&&uDM|r4cG-seAmV)c1ug zjUJ5i{KHQ`@{$m8cIdkaJuFwUQZU8YNmEbdWwy|${DD$)d*RuoCmwq>7x?UOoX%)^ z9bIg8pf*`+mWM(r#*=Tb5eCKo5MQu44_WI1dF0pK8wQ)Qq4Ec;USFQ#* zmD&-gHtLpsECJVDs$Ub6*WBzm(rbm(olegrX$he#am&XmYJ&1jIHEZ>Rh;EKf``0N zWMB9JcldTL{4-zuMc;U3v!c2O;&5W7G*2PtftKnHquv3Ce$wTwn{v>DBHpL=UU&1R zE7zlVneAH<7ua0R;l%d)(-vYDn8EmDGC+}3ef&7(UbLx*o&A%-L7&+>$pR%5jr9#%q zo2q3Hc}dn<|=gRHFWx1e;DkhZ|N1OJ8GxpHGpu2p$SVg8ney0x(b;;$rj!BK zjQ2j5l<*hZK^kdy``<0JbX(NZ{I$Viwc`a(YwS}E;A&?y4P_>BG6zNNYf^l9IlvR{ zTG;*gyiQVnbu9YU>KN7SlkZP86jbPe==zY}%u$^*h98fz_QUaT9;YG)k__ukZB?1Y zWNBUfcLndVjgi~6+P3`Cw3H-k$-pzYz8vu3K#n1SOur!cYd>>8SzSpw$`7f#)zcFe z`OcW*GsRomQhj`7qj{EZiatlfL@XI{b8^Rw`$UX7w-D8o zBC0=Y*AiYPo~qIX4-O&CN-ElGLJz;^$67f?zmf% zVL`-~s|Ui$Jc=^U6wfb1J#oou6WvYo62Ejxl$JvXG+ww{vbL^$)O^Rlv>5m486Q5U zFojKDu9mW6d0wBjjKMDndTjv?QNiQQQrs|N6MJ|Jf%!m(NOO|g_y$5^zFjvWa-P0@ ze2ypG-eAt{B4_MK%lGX#JZ#h(?ER-s(%@~NKZpYAB=R`QjZcJFF&|~h#C_Xu#EJ02 zfn!})_cP220#rMg`QV551;b>9fywFxhyAzfq|EPs1Ncaw$D;g~K9XVtGF-kiK;m$0 zs?kw6@v6IXH0Cwx#x&}xp*A25dPkmKq6T%JaGVOMzjMPNon6o%#o1C@p9W5*vDt6- zqX<$P9v*JHQCcGb7&trMg`a9@91@}n5Jqw^0q2zZ8KmP>qB33oc>gq)086=ZV=^*t zsA4hBrGNSYFx~EI#R~JdZ{ay=%Sm2_zj3^f;zRj75v}ibQ@_X>qHp8saHf%h z;c&8{lbJ{z&EGq%wy}GRIib7dZV?tje2LopM10AuR$AVBx+`8}ZmGp}5BXdE@eA+$ z^Uoiv4janqQ;ODYyv0+~5$Di2vehx~z(>A6d#JuIMQFeK{si)7J z4*En8Qwhl8`LnFt4Q&c+#K~cW7lX!tYGz#xKMU0!Vrbsp#dvdOPdwPnQ}D8v>|!#L zS=(D(Z%LgRaJ&~mfC%Nz$=O@QNlBRAjkj`OGok5KMA3Ujv)bC8%Exgy!eAyHx*+Ox z*74)$Kpxv^O!M;{6EAdF3uKQ>pS-2^3;~ySzhhC=;ATN4sh?u9T;MgA-q)g?Yi(cB zK?|78_4jp}-|8Kjw`<86`?Se#qOI_&pnGtzwph1GLA~BXTtNR6Q|z#3qt216db>1+ ze>-2?chwJpNHpqMSDSnnPcF%4#V%C7^H|8-zF9LG$RJ1aJ~N`%Wgz-GW2503wf|eP z_^-a(y1b+@ctCIWVCJ1@sB1P+hSN;7_1gN->6jT`X1@j_$@9eH@iTyNA+mv>L6|fg z<@Q+h)w}0I1@d=P;9z~>)r8xr+tZStF$VKh*uv_SM)f$i_!%LO27TaRc1@&^YjWm`LkA z68nLTQ_UI^67-%Plwq-!0dc-}1mp-+yzxTlZ=$sg(OY*&qK$f1qYZ!r(zE%AP~tYB z=KJ5)3Mrhv6J&qVNWGSh3{qI7y?ig1G75OC_oF!fRNBA%NP+SLKlS$XUl(~XS~rYK z#Z$+x3To=y#TQm*-(_`VR3=TC`A2=!kwjBZFS?^2ubV)J=019Q=3SKgAT{4H8u$Tp z2?2Mc(70J4nU4!9wjw;0fww=KSgLoR7G_{BEz(-T`MJZMLmzO8Pn0WS;pIK!x890n zTU8B$LXY>YrqGf^=m*SqexN}nI;`zXsf{tY6G2gai_;A{$`q{_?b`4FMpsO#Mk5?h zS2~LsAama@kt{M7b>O8oU8_GfSiWrK5asP1;^eD8_Z!d8KM&(&v+*`aGr3IPRGn3$ zqg?Gf1ui+VUmWkc9&6PX(K{bD7X!Efhc`85X_%K4g+%0rjZ;zZ)|Ql6xLUhU3e4pz z(A_ERCjd~L<>P8e7tLYgsgy;kAKuyk|VMpl_X4n(b+rXC!dxY zg)_K@%(mzB$PJ$ArNa!^kVQL_Gpg_>_J!8+cyEZ`6X<#SgtOw9E%ZPaKH~-?3uyw5XU{5h z6xK~qmnNpB+UiBRS&ud9Q|Q%ol+~(#@ILB=K1#p6iA1^>G_PJ48W~$g9q2@(H92p3 z%dfqRk)Qw!1Ta$uzEEJ`(WAg+C;xo>i=U0CyBxP@DNP}j*Un^xvry3CqhD$W)=zIWX%GIhsW=QZmxv(@mf>TKYxYLKrD?Fn=Cf^dn7|N6k$# zuW&A=aMPuP@1`GE832+>8}c&xrOgnp#^v2!yp;UQ_1mcT^LIY-q7KNUG}fkKTA+kZ zA99tGj%G9EDSu^4Rv5vs^({OF%lDsty5?#t6c*! zI^`*Mrq~~8IQOy9&CR`)1oABs&EWbZ6+V$-L`w-$40-zJuP#C5qiqwfqqFs(LP3k*e0C=H)isiJ{!g}LdZQI`LQu)0 zRhN@pE`!eu4KK$WZQ{=!LrZ8YF0KNgt)CIS>%ul!Tu*BB!R20#6G! z_c+SWw++tLm4A%x-BB;ngP)uf!F78C#t=KMgJpZ0#T7w`Uh5%2PXz5bj(Z)arX>nt z=iE$@6ygIjT>Nfx&{FQTly7G|P++@Jcyq)|oaBDh6L#9=klX+}UKX_mUZiG&mEfXYy&7>f`7yMa4da{i5K}O*&VyNDgmFY#V zt=&u?=wJda^tji$so@N0Room__3u-8d8`(W^!KZh9x_2M*I_}YlPx4LroG@T8ldjo zC>?@m4EQp*U2K$6eW9Wd?s!rru16NXDK(se71Vin-Si&r%amT`e#Ga83gSlN?gt(J3w5RzV*= zhdC)8=!C4@6+J(5l{_BXln`#kARnS)m1g}BJV`|ecfG+&7>S+@TKGmf)#5#R@*x#b z%TkkNCTMfj?ro5u2Pt}r|AOj%AcA_<1T~+Vqpj&Vb+W|(c&G4Bao$TB5c&o9p_3$D zq8O*LJCdkp=8bPSY?&lz6c!Q_@@I&rJ`a|;9vR384c{QTj!A)QoYQ`>BSAXwPyYM= zpYZ52ZWtGcFEqb#fDjXEY%HH2mE4)t_m*6voT=F{MKlyXRe<)dc?ppR!6ds8(~3~k zr2TyscLG7rQAEaSO__aRxB=$F)Ti)5p5-l(z0S5^V)uXd6!cWjUxgMGhDRIS2c7YP+{U+zu=Ei12sLw!Oqlz{ zAn`ugQ(GjTDEi6$ouKej4d!;qj!ank$MEyjrQWmsMVvHZH&n15y~CM}hy@~59NTQG z*Y{EiI8_hZ%@nYt46CoBu{wlV`%g3yUq>UI=-SM)zm3M-`yBSfglsjBHUO-C@_mT(WX`+UdIxIcf(MNceNBPrr znn~&5;*UiRqLSlm7fU&d_G*D_(jo~xT;&6aBu&t-R`4=FEn_M~)}t;x2UagDl@Hj( zGw$8E7aVPHh_xZRYHBgA*?!L>_4mM39q&^?Zvp>CuT7okI%#)Fi#iT803krU9gs|U zX7_YkwPAwZuMy7j-VOwuvG&?)j#DMaR$+wbvvl)#>cKD4qWyqL&ay826mF$f=4Q(< zl7i*mSxN!KU@4RApK(SE#dQp_c=c8p{%s8Ey}3^Mk4DZu;sjjrjlttSY*ghxEF39# zn!w{e8mu&J8O|^0F{J3%C!+6%V~-9q!Cb0cxB+5aVCdzj9aphr9w&?Fb1#SB%U*=@ z7ERxPh`yH{DX^eGhUp7{G-)R~mu=4=FD~0SPYmRPIz zKcuECi7|5iivZm}N2l?bD*$@7(cGvn}7@E@4}fMP?1v zs0#%cJEC_7)(cz)0NBR@EGa_ul2ys6Cl4&P4RZSr2J>`h{v`bVT%pYg_&dk@H!`Au z+BqZIBrO04yhhFIBBW~nOF!&y2M#1sI9wAcHhTF9Nvc5h(s(qnGckbU@geh6ZG=)R zpC{mCR8`~4wwF+KP-4J&Z%Df6-rzz|k>qY$1S|k{xV$4ucj+gB%D&0>w0>QUt^-rB zsbV4_>=3-x9$kHKSrSX9u}Wya@2& zgr%Nl3hGes2Pygs;L}EpJf;d1@Qq>M>|^t);A!$vx=ftlhxl7+ z2kO&uvV8VH>5I;;KtJ#k+}h{~Z+d^l3vt6_uNcqAS=y(VY>PMo)cjPbFezezQ-pGG zNJ>kGpq<0EtJ8tOr+yxLhh-*FCa7C$6lNxxKFK%X)uy#Dx;FsKdDIqIW_wte)0DRG zYxbC3PQlRn=9u}?ikiJ^idx=ID)pYd{NR-9!iV9SuYhX9q(J;NF@Gqz3{dRqfFOkF zh;dd;3S1-^DKE(-y`@;wSG!>-3S4n1B2L4Fm6| zwfIo2#nl0iqNd#By0@-rU_e|Y(mn!$Eed39F^iVXAn%U*8+;N?t8*@5o~bEnPa3GI z&kK>&bWHMtZFfPK_OdzoR1%$rr|j>b$QG-NUj&EDX(Ed=ljvIwUS#SdZa<`!Wkvx6 z`F>ecC$>yyaK1hU{jvAlleH4agqHMMbt#B0c)r+C30Vq^kCXJ^{kpsi+LTcDexPfS za!iFe3KKTg{vBIz32<3%RTSE1YUKvIZ?^Nof>-A`IW8;}S^-%#$T`l6w6Ke!#cQ?$V zm6X}MRX8t^s~R5u+_phrP_H9McK~9-9kFJ}EdsQ%j2jF?W&< z0As8=v?j8Kw>|#|FQAP&QyiNx>NhiRntn6Kx%@dzeAlPR3X@>p^Vg^8OJf)ht7d62 zZuK^rr&hsc#HxDKR>?pXCIq$Dd73q%o$l+j9y21WD_-Y5-pZ9GF@;<|%^GWm4&e)V zWc}W@{vfsn6j+>=+PYvJf3w1cGLwo96&~FT>zAlDUY0;g%^38H^FPM1u_!fYEw3x3GB6w{c_!5n zS7k1FqfR6*mZ>$P5sFRic3j#KSaQw%HU+rfZmX!@OH&8GHDujv2g#i zeNA3M6A@8$zRh~*2RDvLHOZmusfFfCde*)TK1T;Bc_BeIWGJ$IL{OsZw9EFAfsCXc zKOej8p49wYo2#<3z83}w`1W$+mNL0}SXxa)IM&pFId_lqE_G>OP!R(5CwCKCVB;rD z>mljvr`AAKwgSv6FZcjocj;^RzlUq+8objjxJH>YPhYPk{q;j*`U8jD9=^t@kGsFq zTD|%Cuv*m=OU#RX3h=W;Kpv+%^kJ0t-oQRFk2m?19z} z$p^8GbZU(jw3R%VFr(67FkdA=6tRHN1nwT=X>AywT(Gw3AeJZtAUyno@DrDBFZ6&xM&CNx2 z+NNB134g(1yh-YG2L^sI$(}nKGoCv?*q!_=5G4ZF)aQAZ-LtC#oiaDF&?7U2EXsQ$ zvbyEmta<#G{&w4VRMF{hk&K$fY3l~%B$va5{WJ4Ix#MpX?Ef_9wAVpPdzbmeUzTY= zgG&16Njhr-lk!zTOp4c?79~E}18km&QAhAu>Ce)*46Jb^!pZ6Y%gw<9MF$t|-z=>d z@K8wqzo>i9s3y~|Z&XE4LE3tKjamz13^$8_~M+$+<%DxD(Vu0MR-R>F_M+M}94U3%Ms=2#-@={eg+6lF2cw4td$W=Iz$$&@UAPJs;kD}kMDPt|fj zOy+ArLrwNn5Yp4e{$j&_dJfG#QDIAvzawA*LtO4nnY`e3ZHs#Zuj-AbKmHo`?<-vN z5NL((*NY#s1a8G&{BVEYLETCRGf9pR_v|lU?mw^+)iwJ2^Si$DPPTQW<3f+ zod`!_WQ+Sm2fhY_W;W5qBpP2j2zw)cXyXHc107=Qn8?yLKa!_Ya&)YMeC0BOG38VTQ zYmYF|IJ9HmoG`PEvnbHy% zFKXoXuIfm3C9s6@hx70|Bm9h$>jQDL*bUB_t>h>5pGf}qw~BcK zoH{Xe>fN6$-Y=cIg`bBm*nDc6o@tL8Sq{trmOkH=0wz`g_D2HSV^9zLxhNvTE1-7% z%lQ4Kv)nEpg#eBX$S8@L35^`DLX9+3WAzPIijTLX7?T7Z+)P1+?D)HZZ5-{5z z>A*=$sPttzDny!|=We-kU>;904O(TKacr;dw)v!Rk1v9VRZA^3y}7&HX|;=AB<(1s z_S$x^tnn0GW?5c}uGZ6g>P8`3YAw3fHv&Q}_9`@SItv53QnsE|I9kg&G#*f>l3k{S z7`!Of93t02Z;yUmY!V4M!x=c>2m*JTp@4u^yj9huZ}|zqyL2GPrtrDtWZc`WvYx^V zodib(#-;mgd@VbT9dmdjEr$ zqNy@{c%HLZJPOCLJ-M6aF%q$Jd(JypEaz?y?i;Ih=?Om&0|A?e-Om9dTTRg6RX z;L{zgW~`EXIJPeVahWy+2W~OWi2c@5<3+V;<($F`ice$3UBtow+Kq$9iT%4(Uh0)& zHze4vB8L=@!3i=Qdp_-Em}(Y2Y)--+Ebzyf`fIr~rXifVT1Pk|n#c77 z|7ql;wQaTBy6#z^ysyC(?Vp4zd6baf)usr8ojaNb)=k&WL+1>~fGF@TDAeY&#PR=5 zwrPB~^V0rrCeAP1dOqb+ZwrBWe}|p&7f~o${q?%|lI4m4sH88h|C()9*F`A-djD!> z(Q3*xW^j4CeGh7Xz}Sd$=4WDeN={qbcT07BbS-q!%*aJ9Mz?gNq#^}=N$EU{*`rON zb$8|lsQgbNWdcL&=_i*V5s|&=1+MGU-!`VL-yCYi*~@@$nJi?)Jmy&YTr2wKufo4Y zy;B(Q?!DA!B&K6f@X z@R5?1jFyCpCSpcgpE2|s4*OeNb`3&PR+;5pG1W2<8#FMmL!`7g>lAw6a!}-+t^;;x z@@R>cbK9oUgJ->^aS3lo9QQj((x1Mcy1(! z5G?@7`Q2kzdf-T+OZevC%QCQZfu*Tl>3;v%?ZW>L`7!u^Hu-Vm(b*zg%WI_w3OgOfUGRr`o@< z9Dwv5y{4ic6uZ6$5eh4YJ_NY2I?D3NnsG>xS>dM-B8*qA*p=lKoCyG=`S?kW8X7sdpgWAhIBU6Za z2INPGyPyas&RRE)Mu{|6KUF;ULhc^h}wt#3XO`FSkZtojI)A zpoA+;Saxnq3U@CUKSv=dNB1hK88YhASMz)64b9_CjaH_WJl)z6?H7bZ`?4_~xTnofNw%IUz-N3e@fNzL zZ#>;+d=aDG*vRFdyh44)JmlG$aAdX=$7!wY6l3wGNB;4dYbB^>;e2o2`u4yL%%7j1 z+h8Pnzj|(|1ZWPbGO`FWlTrqY%9dC#n)Nl}Y2fnMRSSLZKa=&m)PT9@KC4yR`VhKo z=h={ftK%P1)Gu|XJ73;f`)!B#_{?*BM0a%2$Cmp!*W&YR>BU5$J%js=i2e3O_krXj z%4$Yq%!mij8U+kh#Hg>wk)PD)4V48BDbGuK(2-2l&-BZ4WuL}}hO}F8;`K7-iFhR8 zsgilV6^2%1sX<*fs|8dC+Ddv`$pqTLIyO zk|BW;@w*xj_XMfYKBm~TcDYVBKk&xD@HaiYR{Ty>)@&VT9?<)UY3ikPnYtX$F$Hb! zM=jpUZWRkxh%`Kl_Lp-&5#ze!0lV<*o8Sf??tjCE{Jndv4Ay5h-gV%w%cvFPyIFUn z8V9{m0f9~?4q8MH9~Y6)P*cHe^sX9sS2Ns)i`~c`h9ku(WMxZ`LoFlT`^rg~_}>#v zw#qgdX#BS?!sE_P`t0E4ja-$K?VSzHuY44{e~wl%7F0AaBD~i6Z-mHK*ZvP7a_H#L zd~CPe{GDX1eG9y45J)IFnX}Iu2%1kZTG=QunhxH#@fKflA>WBA?=aW@(tjVYiMW$B zeye24W2M^krN0YmACS)^AATzDDW!Ux+NJgO@WnzX**i|j}d z2kosI9Mn~Ql*+rQx@3)h5Xte*1rU;U5#iTXGwC}>oO!*`vH1fksn;~{)7keXszb(M zlbEoXpIFl?QEK%a84btl31)Lce)Rx|qMT^*m9{+^&U{5l<8DXEX_rh!N1V#%1!8%% zknw<_LzFU6VS)+$e8_qO52MHi zaAkJDE+GG89Zhqi#P>-=0&sV^*-Mpmfz>wAa|nXLvLxu(39Zg-(DoKUa(T0z4NOD7 z3x!&&E>cWK08tlPPal;dIbAq67FS(br^r>;&$(Swo&ca(|9ksmbZnBt5@{#mS>xaC zF8ufw(DBBPa0jnoKW3%HA?DSVBCp9QD4Yu7Of$ZP^nE%|c;7_}D=)2to&?V>0I$=N zcPFAx)w1b%e>sy;)Hg8ha%n{1)yH*?I~Am2v#(`1HT@FTVJF5ot-*8KN38o95>_~>20iUb%VLtSvVjL zf-HAMCxqp&%nM>BvrLh5?1ghQ^X%3b`zGhrTc$W9v$NjJY&r8>N||yXq_!3)j*x2T zPkJTIdjDmWoxPGumnl3osQ$w2qgagvJqG=B!!z>9M|=y!_F5!H-5Rn!l(swTuSTTU z{`{iLC$>k^HFb3QnZi^!V*08kW zf4qbpFpfVIjNc+q+HI{(ZU^6hdw+wBh4hmBVOxL8ZUFyb4KRMIL1~H=&S}3vTHfRb z&n;{$lW@z!VRIYc0Q@@XQPl^WJZRAz?`w5m673L{Q3xTw(xljqdnT<0LKav znPMq39hcy>iU#3=AB0Z@x$7O^cVX5~*}cw8G%PitZ)MItkKr*Q5`ubF%x-j>Q6I65 zI+ABsNhIIzNzy;k*CNoDwSHYDbnC)TBFs}jwqg^t70JGuc||nHc<^4?r_v--3(Am| zovY)SV&CqIQ^$EveA$$yb8&7FnC#XvZb6AmwfY*;|0-;C_-!%_Ld!tlbd^I2-QWZF zROUGay=jGqJcgJatJ$q@4B5Qistk&Ps*oa}6qT;`mu#)M^CVnK%N@`(R_|(NEc+Xn zL600Y3mlQp`f3E5gj1q>l=B?$>#4pFW}6#&S`O#y%;lIL2L9^XRf`@IbQWKau@noK zuTf!4NSd+=l=T~u41q8lILV%^@zrP*uC)Bz!5d%>9oTJQ0gQl_zwE@*#xvs;}}ma}a9? zJ~`%3@ix-XLvD^1dqG2~d1Y~i_v^&e04t_Z<55Ul$d@UgmAODH=%H5Q$4)Zv?2)A^A0~g+I$9_S zo$;N|rg9UlMEgp$=DvEP%M@=ZT!doiuU9Geq(oYnH}$|P_Zw3+^1C#2nh*X~9%sTi z6SA>x%BL#iD><$YWG_-T*CQP}P*g8fOf99`R9;b)!QXgo$CO738NT%9o@0uSBuS3T z;=^tj@|s?TRzNPkeAIQosL$Y>KvxE!zfu%#ZtKm|wtoJSyke=>@HLTH(8>J4othKPvD2W&O4KeFSdpYt^+Y)fXKV4 zr#fTxkBC@sMUI+%c>(ftIhj&MwEJyhiL;gEY2(xd>%+_~s2F1gRno%#W`3(%TjQ*T zajaFkq@~%miivBBb?vc`;bs>q5mHsNcDm{MOr(x#*z`->NknS6mn?%wSCamIiZivkBYs%c51VIj=|$0*tKpg@1me==CJaoUiHn$ryv;momH(9huOokCO0hqBVH zc{ZPZeCQ#i6ohY=t_ljGv0~A{R@cVHD&bd$3kd^*pCjO#cmGkegc`fIeaZNw+Dm8% zS?WAen0axaWsiIAyUf0p5fAcoW2-#MMPZ)47Jwa(M;NmxfL|$95}rn);_Q7(GaWS=auV^F7+kg9&NO)*UX8eJ%`7fxSI( z=J&l~QFRaWRSz0<>qkdurMVg*Ctd*CFSKVS0zcsZ45YTE+ifRoJ#8j~-pZ=F{+=$! zX9jVqW#3ptWasg$h?;dByQ`1(fOWtUkwS4Kj^Ca9-pPho4Rs2%;F~s{EQ@3Yi%zD{ zG}KN(*4w;rLeW8s)Iz_bV_8M!8Ty#0RAHr8eb(Ypp z%#BO*p!GZ^M%JO~-CIo0iRgD;Ru8WN+w^JuKmPB$D*)JDy#`vwDD4G|EB*(`2MQ6Z zf^pWnA?b$u%vyX%k1+Is4^o?H17R(#M2;NXQi(xV#)Yod*ZxO5uttv?%J2>taZSvn zXy&5>vSnXFGL{X0+V>1OLS6_78l3-xt;=w=nQW5IvTdpX#^HsUx_wVtU>s1$R)j!k z+oZsUQ(3sHBE?9!kROvu{fxQAn-!lnt7ia9C@W)br{6H8wx@Y?)KH^*{>5p$Ob{OE zv88xlIkocA38r2bSR1d24+>RKe@s`4X#6>I#`WwPxEeq>xLuN|zFfq@k9)I8)SSgP z)qmG53D!=ecfD|@b&c!k*h?V)1oUB(Oag`1>#y(?9I^Ii)3cGudcupjz0m#X_3u5U zT@_T(wG2ph*C*&fl~$Zh^7%#BcT3gsva541alA059k;cmrJdl-$J0x8@h~||K{HAU z$~h|-=$uf|?0xOwmGaW%`jq$M%QNLV#kR4H0E`bWYxJ6FIuXt>cWO)we!KM*dJ$7`<)64{;N{{iI zFsYCS;e1A1Ue?G5O@$<>U9W|r4|4npUsyqNk znmEIm4e4BzV#DNe$bJiO(*=Xy-{+!7TnXPT&7%CLP91!(b#%GJmkqvn5Uy287{c4# zs3~U`ua6o}cBJ_h!_S-Gg6d?iCLS^34xcNwO*GXi$9L_YA0Zf&L17BgK9?iUMoYX4 z+!OQFJR%b3^W)^K2#h^aOqz<^`=NllO5#^m^G32kO`doU6+Kl>rJic_H<+)F5dgb1 z$6{Z3-zlr?=z_iH(@cZjTv5=sT2R||x3LddSLraMB+B;WZ|C!EOFc)8G&S-M+B`@o z1}hee3X6~PvFyr5GHT1V0Nse^IAmcK*GIzEdM4*0y~Be7nAmmJB`&9#_vPX!pyNXE zrgCYqk?)w)-BO@hrz}uUu4Q96s6V zWw|-DQAoLH#gKTw{tUm;6@;Wf6oi>j^tr3_v8n8{rXKhn-H1#rj3gPWcQH*-cib~U(!!wUyX ztxybhhQf@p<8*;HdfDOPgt!8&>~dUuf;GxQP=VRi`i?&PQSiLN=8$Bg!Tjb_*pSP) z$UQ$s-U)CM-6I>W#R0mEgzpce3|@%}r=*?@5uQU_bCpj2Ys#tPsS57)4p@69sZBUH z%P#?_y+?T!vN>w9&EJhez1Qu4CXqt14D{y;0Y@hlCR^i_N-MZF`hrmo0^*1SZH6H zu{9exOdTrBtiC0(2n%5~Z@8#;f;Qy^9`9@CI_azKAPZsJk1-3YO(OfNqcm^0DWHPg z;H_eO%;%?)z({%XjXDg<40<(+-T>8fNm-dxtc416iSO?+$gg2v^L(&{U_SeczocN= zdP`^6;pHAnlkIAeP?cG{G4#Uvg%=Yo$C7|9P$I%A>DMo={W}^d=X-V+Y5;OG=fVt? znAl*t*zmm6snbyOz^iNU)|j;09?bQ7Amb?Az{s$;==c(VFrs7{FxGCi_GOUH)%( z|2%v2QLv$fc>2WMgqHhV_tY9>lXyAfNb-9c_T2vEGG4%NRWYJzPy|jG;mogF#+WuF z{e8h=c_5R9l}0f)En_5J8d3n(p(%>m^4TdLQn~(jn=fc{=0_r}oS?~Ff+m+nnUZ|z2{8G}OUsM>j_2V`D zkLZ^w#y`wSqqVs*eSG3f^Jbs#e%>=0|)V&VyuTZKEx)P{!~^VNv%&H+vMuEk-WS%XC4A zxjf?8%=+umBmp$&w&C`eNc&*~x_Y~VpUcYyoYSuyUh236<`vz*3e2Jl6r{IIXPA-| zlswXFyTv6b+e2teJM{ERTV3k%7WExJ?+|aa3do$REl!7Qw3Q$}ebXoofWoD}XOg zz*Np~rbWt#*Rw~tf~{CX-JxY=JylHvA-IK_IFPR*X0)+3W$k-3Q?RY+0-|1?)q9Ms z-8xZ%(1C0}VLb&jB!w5&^kqZ$q5>uk!93!}sf62*xwH~1)N-e{;_^G%$_>q=%NGZQ zoUGo<2pfsrJqs@lY*{-#G}%a$nO<@jNR@jT?Z4b*Ep~oBP29n}B&cq})Pwb;btp|V znUUQwAwEF+t%Ebs$Z2vR1OVI%a418P5%NdGb5p{cS?QvQc$aVs*EihU`B+KQPvI1h zJrCH){P;)%?lJJmtdz=}6rbrAz%Iil+AKdVA>p+hOi3MFUGPQk&$vPS8MB*!!^~jA zQh~yG0H}%ld^yp})wSHQjLl!*xudt;>+bflPHh8uu&ca3Iob65`BQzp=}v0XxUhD& z*(LynJ>~9S&tY+_ZPoSiSgTc(JT@toAC&znTvs)0u?Q>6o951SCAWhId08ig5^B@e zIR1oJcwqePzF(@Z>QkGYUsJ1hv=f|9#OklguWhuH)jGfgzXVoyt}pjlAFM`YkJ@!3w$@9+ONoYo7noI%RC1!(HKp*Gdg$AKk6G~WLQc+z()=lYZZ~vJ=t6Jt@1A0TI=v_r;AJ3$Dv^v^U9|K6`*KY&- z0-_rQskWldR*`v>W)h|&@ej`bvo}BpPg^$;X9wbf(_|gYqByHsi-e2l)twzEd<@uk zs##df1xD`4|6@&*fFtVuo)T1V*}krGLhVcZfg6eYQHT`_x$)}EYIeJ8$Z~H`J2F5~ zVRWG8^FMZnjIP&U!~!B4%JQcrvG9m5vxjl-x2em$OBVM5z{ zY1#)I#}rh3I~%(QUV%c(S5){~1s7ACL}b)dbySa9o9SH}goI)AaVw(2iW`sE*eycU zNu22MspgeT?jD#y<&K$Z>l~Xvcp?Q2B|V5 z$J6UXj#R5@>F8XyP(r7hT!lrv{i;|t9kuZ>KRi<#zZ8Vm0N7;h*YBv5kS`-r{-QM^ zjH_gMEJx4p75>+7!v({n51I~1Qcf?0qKDTMUTFW?iQ8E#@g#pr_r@cZM1+%;jl$GCEi3`ckYtdZ{${^NZR*!PR45fBv?cmJ$+Zb{oLL=!ja=IdvAdDxo!>$sV5dUUv;bD`ey9osdtHDlF1;e;pCCG-hyto44{JBSnyEr*u zLU95}Mi9UrG1jJYRw(+m-R;3Cv5h&`SY!~oudnQ7jjpOq zXRXiF`;G2VZ&A)AhK{%+EmfiF#G@VHg?EodqBpE&n@<7l+if#ubN&MchDQdq$AV2r zG*1;o3Tu6%%^Fi{+Z${yAhhA^YV(jVP|~~iF?CQVg2Zw0B>vNTC!OctmStw!&DpA; zV~{QFU?SIUxbpROH0&l7neJtxJ;uvqn$rmCPq2^iD}RTGe-I8 z(s0yNXJpjezNDk2-lI1Mb6F56^qa_KL}d2~!R{UWKoubO%y}5x1mKxw>tiv$sB{3j zPp$AW9#as&=_N3>l7OwcVdegJ(7vJYnS77v)WmDZ_yI_`jCp+g8ZS%xxH1t{i$=|ZQfzG>*;?* zv_ui1fr0u&f>s`&eT>)&JmRaaUZ7hIo2i^q8MQ|3K z;H9wDUVnoamSv-66}dZJNLX-AI!Rf)f6oSj&->so{=H(|^u0{BcQ9pTqYB2aHpU=z zOib{OA@q`aA@L;@6RF41XqoRZ8RilGY2mAav+pmNH5dDpm-z*MO{R%AlYzxm@|~i7 ze*&+Dvr>x+MXk)F(7=F2D!K}J`YMKAqW|h%2R0~PITG698cPRN@@s(=f7-mG_$y;` z*F8sh9pHgaud2|L=b>a)iSH!mHEw<|k?6v=gg8Yuv=U75j$v*0Qu*E(dS9OTC)qG& z6!D;0;Gp5Sl3qInzcs+dZ)YX&%hqB8?!md*wFtAAK zLO#0m6T5~_`iF-N`=<9QCERPc6j*Ggr=v>~Icdj=J_4QZjG&MC z9aWFq8D0%q=KSp^grwu=244vkeVUX_MdgfJ5^fuNeranF%4mCN-*Sec2=O>vxULx2 zAF1sU>v~Dd>=L$X;Z^~CIjxa1l&%fQEbV_=X84^TzaGbaA%!9~nfE9!8zMGy=2~0A z;ZBj=x_SbFk!?{kzb{%lIdM(nLWyzE345;DL$}?*!4_sN`(Nt1C=GTW9&feCC?_e- z7m&{tAQH9ZTm4VVgB0fGCFlwB#RxAki)7FcV&%Ic=5R(3pzDI7G?woukOu)Jx=S1d zu#vL~KNOL8B8r>{R!Y2*_hM;8L7 zb5^yL`m(b&I;v~LcJTJ{Y)Qpk*0FP!pF_?b;k;4LEYalTZZyG_OUi=?_-mK~ae8kb z&tgfqsL1C@Q zqp_jGNKX6soB@s?S@4-5% zApV?AR!?z5hZ5zEChyUCK6QMDu13rT2kOl3fTgePprM7dR2Zz-fVU;p@ev!Ir*^x# z9O&7kX6xA`>9flHCB*RjZR#_k1|XI-@F3OZB3mZ$(U;8V!}3ApYwpcBYDM3v`(xsO zT4YGv)%RcF&99V>TW5cA$Zroz+6QgRLsiS&^u?Z;ot*iYmYQgIMNs(4o+p9by$&{1 z0JfPJ-RG8ehaS!hNn2fbH>|(1y?9SOBIxd*bY=<}Z7` zUVHuZ!=JCeaYPryII(zAwn2ddxO1myiePuLq3C^@wcQrb#@f71u-Jq-z%jIj1<@A9{cZm(OYS zzT19k?)_vk_TXH0`R$B{-0uwyYhY^jHVqt}!Tn1YwET((>uj}nu781OnV@zsFFQNi z^Ik|uaE1#aa*r4X$!PR0Vu5-W7yn*?xwR(T3G1Cc%=?2&;^rO$;7nQ~C+)Es`hc-f)!_4CW>AiVxsW0r5owI%OG}7b$VR} ziIo>rM*U);a2HW;c7X=Ud&EagFcRv!K|04eySha2TFAG29-f!Wh^J_rPPgHmBQXUW z;`eOTdtKXR<4g?_bi|8?_C!Ok!TbmZbKwNc(LSXXZUU@CC zS-2T$r?(idh*wT8H6Fq9BQZ$V<+^T?EmR_-@Ntzgjz0z}1Bdba8>{(nHmOrwI%YxO zd`e=C{`E!yzUfixfmjfZ$0Z$s-u9uU4pg79;*U;RQI<58ZSDE@xkpN$o)2%yRtBK; zZ1SOBCYDMVT-?jZHJ_^O5{g!_T6@&cNblW$=Bix4kdC^&dS{Xm(jx3F?HE^ytGYLE zN1k6;bRQfzH~%(sNkQ_h@~hvM;A)#&@W#aB2L71{uanyTjKaYd*KTwIsIVvGK6%nx zjp@=zFx5S>7xG}gKQXS!!bBYD??k1rwOo=F68+q&Hod_-qQ@)Iy{LuGr5_ znKe1#5%idQn_<)AajqOJ4OR@X^}vFjtK7$)^_dExs}0D>d>HET?lNe#ebzA!FSyv z(!j0p_aBQ7;(0sMy!4O{)6`pmH^6q7@Ea|i4uS@3 z6@gQ{U|bql^unS;y}pX{Hw<5#w=X`ty&Ka7GHsqG(KD#o7#4pp_kGZ2O3a=h9-Wiw zXAhW>j!8H3*GR03-Cb;Y2kj`G!E&jp+;f8V@@y4CgP?4a>v5hwlF)fFoK$OGiOBjD-EvbdXD%_62 z?#l!0INw&guiXK0YTYM-w{Q0C!caoGqKGDGIVU1J4v7B7Nv))9dVz-v2W`iKF<-*hMY4XR9DQY{^~rqdMqS6?FJst4h&|f? zws`1AGFX*!-8tPAdsg$=>LK}EJq}O2O^pIQWHua_-AQs`Eu)4mOWc!#@OaSsE0E2w zEv;+B_(>v8q>57SWiow~`yIO2bQoZu<^5x-;&BKJ8Wr;T$<>DeKl_djHY-^ z1G2{cewzB2D~Q^U6V6nQXEb$u;&gUm2GW3(mT4ZX&Bg2iW4F>?j6uFN0T`z2ATki-urs#Js&c zH*!UvWWqr*DbP^g;NHovdtPY^Zd!izNx}Sq0rQ`kG_$0`!D@=RL{q<|^ISMtnfX4NZnN%3XdM=;(gE3sT|UCdv4;Jf?I!FL4?&GdQ;Zm|E!VgxAeDW{(PwXR)=GRZNkxpSnp(=aM#m8c|> zj53kcJ1R#E_)_}RO!a9!8ZJjPY5GC(FBr`KAyW8Rld>|6)zLPh8_2Z$MXT1OC0|pEY$-s4cf+q&0i(!H>B)5%WX( zB6|$%lpAW3Oxf2Ys=rlEXsG3t0OCYaE&H|q%5WC=`g2Xbu`jpX99Y3RR`)(A%YaH=myymBI#CXMOIC8YJXb4EDqe;bl+Diab=}rEjLKd_n zg03E590A%fjz9y(5sF_Dx3}9LDavt&nD)A=ipQqtJ?WbI`g!kZf1$Q(T1R0h%9WJ_ zW7&~HvcKovw%?$q>as$m7p129OR*6B#^vUKj+mAxIvXBRa^jHFR>WfBM_Tqubm(7G zNDRvlwXsB5f}MpSvj^&YYTC>Jwg*g?pNV1eZ=C!7a&&EiJ6KjG9!_NvNzcinn|8N> zRo~xHE7L4Ml*4euQ-X|PLF_)-8fW+~GEo8%6-B1&dvMkN_u*{dh0=Dk<| z2&}?bYK#liq~738NsEY&4yO zd*QY+r=7QS3+_4E{vT5cDxEE++!pw+DMkKIQwo&F>9wQb8sNW7G`_c*g^d#~hS7)* zBxnV7`<(HJg=CQ)wFeB-5#G)A+LYFaw1a?0`V#%753DU1 zDDpKOaPPs~%kL7F4J!9%1ZyFX9jB0u;X#2XQo;Zo?eBJ35wD-eqYNLreoo zQ$x^Sa{F0>gL;qeKO629#|GjRq`UDOe%o{yYqs=TC%>lr`dp%-8-$Yy8B8GgkUzF` zxB}(_hc&PM%zZ&#+<92XI-`VtS;46PwhmBfTz|dU)@q%Se+u)>Y_XcFwtnx5@~-#; zuQo@d>pnYWP9zyUU=+4iu+gB|dagW%BRA~rWf}Gqp+=~G;_44EqHJll#u#R@4&Q>S zl%AbHk5dt==xO?Yj4;IiHNv<)x>3P6xO|Uvx!3Je;j5wXWoP?rOUpgr$gY4ZWp^Hx zY|GK%;#l)yV}#D9=?r1tLZ;aIsu$@;l5V*__(F_(iDVG?sGukA!7$lCglOkknb z>Ysq8=#(PEdY*TTaqSm#iPCQsXcTc&WW&0`+~dblL73656;E%-gpACIWbp4kU9pg{ z2fEysSn1&0hb>XQSCcO{4WsTDk&^AW`ImI%a$aN_9dD@~vbiE%vzF=EJmQgJfBQDl z8WK{=WnrOTF$?^&#{9qecwg>nqb`Xm6is5q!`uiM^6;IEabL>#iZ{0>adojzp)b9s z@4LwkB?Afq2H4>6@)PdATxqH$_llkQ875b4_Kg0eYqj;Z7}CO{KLm+bl|S+aK1Y4| z214N6yT>*2C*|%p;VOLHjXDoMJ$IQrNj@wm8L(v&2&9y3&BygooUIO;(Ya&X9k-3X z+;DD6N`DHuW6b|0sc7Iq@)44mo(u2K zekJBVZX1#HSio%qt}KRQr563iZQ}u0Ii!nPdA;#JZX4u(-8QiQx@|0Thx?ZzyYL5f zkH{;t!*tvyBTa4t<~Z*ZKgmkZeVyljZz!)JPbiF3)zUu&wjQw@EhN9p=zaJ&68f;j zHu%c!TVR(?H~XU}z>3R^q=tl^(T3mrYS44Dp}U7OO3Eg%2m4R$c*{xh%bjHFdWWJ85NxCF+<;)_+Fm~9AeJ+SYJKDA9>R2bDD zowd^=2Hyabr)yu=?)m@n^IAR?5f0=*B;&%SoBTvUqftO8yr^JYSihsOWny|}G4?;n za(P`PS_Q`zv$7X(TN0MO3E)SmVJRM#jVK`Pc-` z6ScQw05^C-$?6WD?==nN3y3S_USkW8(lztm^V{xTk3aA-aQleJ$|#+K#InWn zG=;usVZ8TD)d3(n0HD_7m-#lUyy*?pJGGT5M;Ka$<;fnt`L*8Z8s#usGEnD_@|a%G zh)GSnVZN~%F(fT~F>Jd5S3A^gf;Z6lv#0Kia-;JLU_P3nqGuukIgb?>QIq+#i~+_1 ziBCjraM#2+U5o@gBhQqThM9fM;HPk8Q5*5LKObFPi6o%YEb;Bg`{mx>VE@laR)8r= zgs`>_Ky9|{!(}F}WnWp)P!1r^t4~@|?E2~-r?Nen75k2yRZ9|)2tT}DwmNFM#W0#% z?R}h3^Xe3QiQaw5w8=Rh#s|XYhC5j$Rt)5?|VA`2Nl%SDrEA|pBv#|5NB>~lie zc0pE#I-8$}>k;ab5=&Tg=kp%IM`Ku~FW2LXY|OTv3pnfG4Z8@pfv`Es-EQax`H~~d z{S3m9S=b^5>28%D%?L4{+FGv&B#b7O1>v{n7^Ojq-j<1eoXRKqM{Z(y$BHkhW8GbM z**iFZpjQiyy=N|Bq&Kr?@wY_56g}qAhdnJBkUGO!%zeiKHRz%!;-~J z@Yee9Whx|tf7?Pw1wbR?s8F{2v$_SZ%TE257r-w))5tSUBzfu8Y@z5sDY-!FIK9@! zR;`}R{EmHo+r2&bu$xPIj-9d5Quj$7B7WRXrr?+~YcVGAJrv^q?SzUlsAO!JM&GkC z4|pdJ0_$RmUqZfM=jy=YG(%j_eXm?&-wKeCrOVNjr-lIwYtDE8vGXUxmk4J}2IubL zXh~u~7@3ysLA^fvzr`=vJes5u^ZyzHjhuTOTCS5B69h8i4DC~8qE32*qv_#5ES)h; zir_DA2is6+tf?a=UWIKav%iokT4KVU#qZlXHuP31KQU3vf%M9zquzQamJX)mB9{fV z3H}VVaox8e7+n$C^-xx7f|meXsw98gs+EMym7&76wHJFt_o5^*uS{89dV-p3*LI7F z&}e)az$j$P9QTLuvP3~R0uc8QoG(qV^MG+fCq?b?@ zpi5B{6_65&iqauS3rPe-P)e2yl}5HN%iAOuq2+~9hi=Y7X{ z&p4a?Y40!kB}2!^oqPW0f6nW=ekkdh$xsLi_>Or+2aC3Td@uj)K&AcdWa8Z8C;0L`6PoeGdk_j(|D|F=;6a}^25>WaENhj&>rgja z4WgWNCdIN)&WBhcY^yxW8Hp5F5?(~A@Z^COeAC5h0yc4oe8`ao4;E zEc;in3PW~0(laO5@1X(pUe5Q(FO^iyLE?@!Mmj((d=(V*!ZVksyL@Z?5<1X8`gJW;!v4(X5FF^O%W! zV>I3QkwrM9XiyDOTilPO4y$Yro#fjO4t=}7V~Q%;21V5B*$VGoa5~D(!R!N^fx!lu zWTd*Jh@N%8hlc>p@XwcQd91OQZqSzDUNyFxR@;RI9A3i1ug^Cn9Nu!j8OZYD(PLx+ zPUF|2Zq8rY#6a`uS+|XB*N(CESY0V~`1t{(VKM*w4$bDJl3Pmi!P{&%6n>uoeEUg(>ea8$mql+%*@ zc`{8_3vwmn3jj`nyK_4f6lNRQX)srfBgN2~5xD$~RDxe(d}Lr8$)|u%*SIww=Hp?z zc6`dvimt{g5r-g6@TM~JjBT7&Nh+9MeUpA}NX+j7@z2oJF+|4Dsemi$+o9THj7eNk85em^^GF6wdJnM8RJdK zzK+CSIK9?Lrln-e3vd|dU7ZVsKwg6WSFBy6<~G*O#-{2J5Ch{Huux@NgNI!UxUqF< z>-^ALP^iDKLS$m%Gj?Wi$Jn z4j+=(>o zSps*%8(T~O(I56Lm#GXRNt>)DRmNYdMTl#c_E;fSsfphpbI`WT%q(@3^w-XM>x(_w zpCRsul@R)-`U$+}IoI0PH)Z9@3j5G51H{br36`>Jb>20}Q)*=TKqvi>AWKp~$rOr9(KDD67DXCj9WGAWLGmB>gm1)J>G z4J%>>OP>0keh{>5)9vZbN-6~cVMGn^2m%Rc>MdswE6%bB0ev0z?reaBC%|l<3Hr0l z?%HQNm`}ur{{F=o840hMlgombBCbZ!E(nN+8u2Mk$fw;nDJ5Ji{a_`jx9E1bqT7mO zw;1I(f00xoC~Ym7|0#9CwA19;v$C0{I0p;-Jzc~sQ>;yBIi;zeQS;ExvkkX^9M9yG zx{;=5hm?^Lmk_BYy62+?@54OXZLzUg?}@*3n+WN6elILPRXQ7UW+KX^mV z@5H4$+Z|l&p>uEUU$Qh4zI2Xapb@mS4?lQOH$YV`zo2aT!v~4SQ}+r;&*s&ErTqEe zuHW65l>hdlpwu~ZfOh#PmLAF#10;?+9W@(ajkr1W4D2B4p4T%cTi&^#?@u`#{Ep5M z7pt?wD@8&3LG*Vj2Z9NtQ*Wta)Ut(C6P~#SX8*caPPP%&-c)K)UuK1lojt;`Betgg ze6*ndxU|GgEA45lOyqq)$VL4dR(x~y7Nq9S7ZF1+;Em2clYS2x`peL9MmZgpF z?QO+4DE)b0S@6-N3RB$0BOT4r2d_qpy4rrq-j67cU9MYIdu;yKy_Vm_YwiUwNG;5P zs08eGLmpTvwEcR7*(u7~=1vIHZiZYH-t(ZwXkd|a*-XprrC*YBP6zDX7wrqfIm4nL zNue)qTss{X=_)fuQ4y6O$bRiAM(VoLB0cvU?XGa>OaS=Q_t_<57th68p9*Z7O;L5& zIEw7s4d6g8xKV)sVVG1PAQ=bHF#>1uC@Y)fIO#lRzmx#XuZP_Qv-KJqpEO#(HUblT0-h zdl8!cs)j*>wTBlFU@nsm&ar|h)tQG=Wt^m05PNo?fOG-1zAmF)yyCsYk;>6WPk#QV zfOYoFaoN~6?YGj7II!n^@SaaqPai&wRZ~}&SzB=bbC%9Q@iqLTQK2xuB9_6aMn2Z7 zt^7tha?-TE2lQl6zQMYWd?fOXYob+t3ojzu^_p0F_18;&0OUey`8SQHo@NZ3Fa*M4 z5-=0k-B_WviW?Yqb0#0wy9+X|d`-EfeSJiAQc70~?B4cq4!(+)g3wEF0!V14EXWPP?as|yb!i`lFHj%sqfw3@ z1^(%~6pBwlyHx)`xHN#`15ueh?A{E0HtVBB4i_$b8D|8B;?mdFFNL2ngP;&SI5a*$mAXfTu+LgbX?`mq9!`araPNe z0L+8P_FDKM_W2Mwxd-35VXrr1Fp3+3_?F8uz*H5iMN=Ii-Ea>XCf3qj3KJpHKz4IN zKzD#!^TeM{P6lKzZ;GL^%t6i;TMSH0QyvyDc(u%|ZSgD9O5<-FD6Pt$KG8k*&BdN& zHy2q1(vm#1+D&4MRe_b;Q36nWebgg#*#eM2IhbG1j(w57Axj4@IjG9V@Oy+Cj$|T2 zC+44hngf+Z_2F@ngSF3v8Okj#Rz63<~BG6aI>Yai7knl-e6 ze2`)1P-Kyd*VcqvW~u5z^DOixivk3MjKN7ps5BrTg!;?5*H_RFu|A9M=hf@iP4TC# zUo@?Qu6oXHJbby=MdIp}3u>Z1wZjp`DN#4Ulg=v~JyFj8VEtIDs@Fe0$JFES+gLw3 zGyCl?z4@t2V4oO#;Cnr!Jn^-wAfbN*XD8?$1(wn5$)u;R!%SDFnoz^sZlvah1c928 z;TrSpco5broF1dz2*>Ts09P6Ww(h{h7PAg_jP9Iuhiqnr5!1+!t6|5Mt@YyDZgicPkwc4>;pqy zx&`&bt7v*WdQ|r}=`RIC>IOi`BmIIeBV)r+Zj>n;Nc$hsA4R1uYokQi6trdovF|ou zY?J;FgFb3t==LydK?SU4eJ#2w2m3*0O=#wGV+8$#RNFJDdN@0@OIGHut__ENRybzi zw48EqLyMk+Zy<@IlfVWV0|utqBp5^qY3?EfeLSEX3FbkBsUFqa!TqfT%PfS-_@J1W z)BXVI$+{FT)=boEY2@0vF|t)}bV<_|#K&WM-$JdAd?$idRgMk(GU83SoPw4ttGeQt zv5|;F7OO%#U@tRI`TS2r`S?zXEZf8P^R8x9 z+aInxyfaC@HxZ8#P?XoPoq7K@Rl=3WpM5^HqGMPH>{{$`KBF&LQwtt7A%O%_)`f>O z)~k!M!)Ngvu(}-vV2L;?Bwq;lEz?!%g6Wkg40-8zIZV7H39X$$Jm1nA*@aP+UQ_yX z`hcO%e%;1tq;&C}`1uw(18MfJ+S~A!`n%OVg?3Vjx2S&bsG009+o#!N>kLPH8X7x32P4)V&b)aAYhhWVY?bd?ghB9IYG^ z4r(0KXf_n@u~3-^x! zRC9xg7s8i-*8=pW5qnvmed!eTD5cco`R6f-F5(Sc^~PMV>fj|Ut2&SFy_*;;s@7p}@XxX%1YJ05lb`bSp%hz82tOm;55Niq(wHU386R=z->^cq zODb-m=m4jh4EaFBiMo4=Kt;JT1xZM{Mn*A^Zh7%*ZM+qC;v45Z%1E;$T;4p1cy+$e zM&V1%=;u*Vi)6Q4#ILs}e1e2lr**TDKF>v^`b_7mL`~-hpuF=RzE+jrYCrtV7L)8v zk98T+RYyycX8XwCuGqmZ_I3R%)~Ye*D(n?7c8a(a@_P!xzdd@FDuy_3M0@OAZ;%?XSj?&4hZ)BB^h0YRUKIl099MVo?VrqkZ^U8 zQ|u*WB)++Sc74_5_EMLpUI)eA-bsJe00jcx&ko&G0Z7OrbNyg2Gz0k_h_xVwh)Ig5 zkz3~So}@95yu7wG@zp)~2O@52qD;C8!f_ptNAyud=7|4FuubC1sc?msxR2m({Iot_ zOh<_=lGk2C-4gP-KAdSU;===F>_=1GFA9$1dB+!2{E(NaO#4CbB>3efUwq= zGUcryYfd-;$Jnua-Im5kv6dbX{LT@tuecl}+yF^`8+0yVX4Y9S8Xq#1^DtEdeker8 z3#jMom0XyO*ajKA8~=(;N{0+Qkq+yW)t*l`WA@}RX35k|2Z%o~DnSb6%Y;wJ#aDmLO*b2F z>;@-Zn+9@D_+rW&b?$ks#FzPB#pHT3&CbmO$)G?b%Wmf_mDtAs)tgH>7j%?X>bNS} zCw`fMq`N69bX2@4^RXFQDheCrM3{s(8oSwj3W@@LqU9{3VZ0O)Naber3#|yF#MX(?#bdU!Lag2( z%e6^2N*dF;236%!@aw4diX<136q0Zx)nE8;+TO(Y+{m!FeMy~(7_@RNw;p9;j+Z)O zLpF%{-l(}rI?Z*$4KaZfkX#{Oen-ag@j{kUZ`(Jz50M`&iV8dRl|B_6>(LlqxP><;1vWZ$ zIn~mnJfHDwV(WamO-F_H*k^m{oNF23IE`v%~hTno-L=UgHr`-K$Kv(#AUhh5^(%omYyaPIB% z+0mjn^E6nkxzx_H8O`y4`1v1iZ_)vf(>o&_b=aBc(IB-I;=jGU3oZ-N?TbM_F7;cj zyn?yZ-trI)_aJyeeD>}U6Fb)+UtTe?cU(nBw2@@T3~N z7>XLk5#605;2GX%(lu$k7m*afS!5e&QaS(N{vsdGvm~sQzH?*A2Jif+_R*mN^}@0U zVC(njcCHjlj63#VG%Y$E{$Lo3Si7uUS8Z;#|48QQkq2bIBydr-LFm|n^)fdr>%wnO zXy4!4N9T%QbGpl5b+sZ5mv0#8!8Tk4_JO~nz$gQ=uYTP@hQ?o%eo&oynSrGL7n+U!`MyzK?DmL+O@##IE(Oa<}`T z)4WPaHLG9$4DtcHK{Eigxl@pu#C`y!LX9z069AS?{r`qpmZDfOEloI;uD`~`OLkzE ztR>vqWuR5d(0Byo)@=G=GR*JGGiJtX6O}$)58d0gWO}CP7|hdrme}LQ<7|IBF~7`) zY#cGbLJPp<6F}cR<6tTAWv&-@daK z-;QK{WSq~a5Jam^SLT1rd1%I`q2-ZZCh(yqMQxRF>yH=#L)kqgF`*rr%G3wVIH=Ms zfsQD}cSS)pvzpQ;jkcZHZWBDS6Z zjm2MUa8y68`NCgLshIgMtDrW0Pd3;1g!o3(@oRliK~~x>J#nZV66XXiavT-=k5v%# z+bX#F+bURG>VLljv27LXZs#+FNZ8f43Vb-w;&6WjK#v$!U((yw2+6Pa%Y~3DKbB+z{<11X(H_6NE`6|H+hdt} zbeN+@zL1IEWssyUsBDm8IvfsyMOBo3Y>+y7n&`H|q1E>oc$Ah3;TJhNoF=ed2#=DPP$r}1bIAAj>*yi^Lz7N$pk+j>{ZuNeSa zPD+GVHvf#Q0usWwBtZbh9RUt7mlWA-xG^@Mrj}i_-}@kA?;|U*`_M!Mg{>J?pbnLo z(xBAf#=u6)PBLd?Z0t?#t;6lNF$i0Pdp|MMm0qSMFY+=|*)cXj_;N+k8d^75R77D* z{n*>zm+_`Qw+B(Qgx0EE527;4;DCX|t91J!D8kmW1;y^UJ$ftBtUJuOF8|EUhs}|i zpr4CfsKF=nTex`%ZMQWim$*31YOGMGrlD?yUW*|Ltj5Y+QBw~l^@Rd8$ju{$M44F^ z;!Sf=##Pg#Yj+3lW0M8S?f;bbet?+%`k`EzWtOO>bggA> z+H&Q42qCMuHT3KzQ1Ab;u)a6?s8{x86w64Wo8f&7`Bv)ecE7~0 zvwitnN6T{^+O@2>_3-vu>1@eJh`~e-`RVP=Td%HmVGQ@}3Ff61nBwBv4H0vr*23ZV zKy6cZ47eAYPc{1T3!sgHO?dyJ&fz0QR)FOkKpREeS9~%VLn`_uxI-HSGTjbra;xdB z4q8L?^!#4B;YXP@APD`pjfC*shte1TXuc5kA#^U@X+85$RbP*-1()7jcS4w5GKUorH(1raZ?=o-s4f!( zh&@_6Lhfb(D(fcPaI!Zs>oiucIYTD3EQq1~E1IuCK--D+%axIXz+h03>8d`0PFCmV z#lMuQfw4SVdcHwN-Qk{nHeoAon%}P{_3O&qMUNKpLr7AMMszoU=yu(7UP-~2x$4_P ze}G;CZaU={HyNj2i<(w*mfZznl*}tnb<;g^ypqZ#xDtsoF4xuq{r&QVfPkEkd>HIP zBx`nEaPyYL)+?Z`6N}UaHmlxFANYS*s{^eK1KFewpK@4n9rf-;0>89n={sL;s!DVw zDixB#GABZ_BQM;RD@=XkHOCndP4)%;H?c{h`lsft7txVvPt>D;u_Gb^&^jz!>^kE(P zHe8QMZ!R2Yx9@uivlYg-66Z3zES`-u`6y=jU~+>33Snb|YAfgcGral#e=I6Xi}O$< z#QHDcED%!$&`!#p)Dhw1dD3y=qfwEi(3b1S-(i~@6Vg!^=JX#t3~zjBv^PEe`;XP> zebqb)-FqCGTh-)e>ouB3b1U6E_?P21Pd)#2Lk)=3>;G{JBdC1ol=pjvq`B9{N6DJm z299!X<$oUo{F>XPXBnh~+pYX5&_Z~}eL~v@j0Vekdv2>}5M+Re2#DN8+WrZd5+t(T5yE2#o*OVE{7>}-@9 zVs7Y#vmUWJUG**VE`s#3%34JoQA7w3yHcLwZO-p;49=IEUZync93RT{3mSA~(#Jq= zZDI~#GMQ4B9iAA;smIOKy*g(5RHmVC=6(S`XyxLdeEp+q@PHPjI;Pn7v7&)+P*#w5 zZ?E4{09w|+!{Iz@*en0Wo$yAE=N36PRHVc2)4+o(F=m0nBrse zdbNA!V5&lG6Oh2d&cxz3S%0^M7#MKjTyN>0y`y?I|GMNcvQAdlYEC+k4RRN0M0ix5 zTX&_m+k1d;_<6ndCeT*$AG7`qcefSY9?aUYVybovMy^kJz2hViTHJP$D6XROw~?xO zDC=%+eP@nd9H2El+b_?R&7TIR_!MHtOf$XfT0mfvwUi+tKy1?rRXQ;^jOx(TYoj`L zJVKcC^}i_is{%r2Ce@$=*-1KzK8Y(6O^^6Vq$lTl%R>rv_rV6#E&P%npFicV4ioDm zcfG1_bpXV99tjTfdM51trU!!a9pbT%CjgA{;I(?h+KCqDKZ-T!{BeU(fHy%1^i0!b z`p!Opch-)dl`f`JQ;Cb3vGWojzp0A>;J3kZs+^=2)`rngM*W4?Ck}jxJ-b}ArCys` zpT+Gq2RPkSD)`12j7o_EeM3xtfH5~eWsM5Q|tA}3!d@60B~gSR0vbH4~}cDogzjk^C=i^v(3 z|85bX4di>+oBzuqa{Yg_h@9*AKiVQvEh?h1dj5>or8D_`(LCqeh-;0l0bfMzYd?DQ zxE-`yacb=7v>eIkBkO^tAt6W0Dp=IE6^ah2#v%F{EMXIR=jS z+)1$=>5_NU_LWwUZKb(;Uk>HiwwCG1+wD4EIN_Xvd$*SSoWn%VwJT$?DiUAy=r}dg|rV^taasm^f7pq(16wAij*tw!OTq;m#EOk{U$+cW=Br+hB zv4$e&epm~~TlKvI205&#pu{Z8)D(~|wlGN;qMR`2;k;PcUR+h*F*9-bXH$JkDCP_H zgTywybuCZ05>~6>@19@sxagPn6$&|uOMj)*0LWR#6(f>e(kW)8)?kWEEr{zOGf8U9~P}A!<_EwM!VSX<42`#0Ey)9 z|Eq(;D$vB~D-pO{0Y~Y}1QC_5Ta|y3`%lZX2`iuyQDW!zu*=GHK4<1O2v zj$Zh666F*a+f4g#z^~;A$c?f@49PFCvs9Gt{A16DvR>B%@@L)V;@5`Nz1;A96y1%Lj~TL!tr+nu9|8*8kU+}(ml6G(Jq6o?2#A$w4#T$UmCGGqwBlJkq``bgfjJjP{t?o`L-MPHOeVu zCZ;dT0@9v(BBVJOnsT&1veFXlT#4>tczY~3)-hvlTqjqF$KLEVkU!CfhaWu(Q;?z_ z=aNM~nFe;JPR<}Svq$;gZVAo#n5MzuZaYzE$wTm@9)a8svv%x$(_FtEWMx7RHlVbz ztzbS1pC~aidue6X2AItl{l<=2)KgG(+B;xd(L$y>nR+3TIfD&QX}ZHHwsErq0EpI% z%K#-7Eyk^!sIr_Si41wsdi7vS@0dzr^edt z>NrdC$x77;rSir){~}K}bHU@@WYut2ez6;$_@3q*HE|fUD+Ibs30Ri>)!febA46Z! zw?{nyI<^0L37LQRf#)Nq+?v}$YyPMCA0#I4NsTNv0XuBwaJn>dHDq`%WNxTzVoto6uI#3n`bM|Kr`hD%d=N;Pkk-^^^fhK=vIHOdvUy`3S8z8?}|L7=}SnK~|CpnoCx6pDtPWHByxG);<9A zE&yE~a@TiX%Tx!;2K)7|152R9l)MV<01$l!x5kC@1T-L?tKa}Jh* zR$voCM!oICpKRp2ECzvva>wQt54rIG^4IZcT#c9YBhbbIY*1h%z*JjnY)iM&4?p?i z9y8VgUlEUFU4yL|+b{g{E>XCE@<-vKP3?Z3L3mz|Rh1vM1mw$q!Iob@?&W`PYI3?a zej`?Ox?0=R5Bs-%gQD3UM!#VFJv+0=YVWmQ(frDK(3j7wS2T-$DV-LeO0^U3Nd~(% zSkos5D=9|bB8nG0)}2+bn=$Dqok7~E0}&PQ;d`FiHQ1JB&s1wDyF@%;L+w|%hf15( zDt7+C8#Da?RxEK(c7k~PDk0d%$PCe4nDVZ<`qiM9MCIIZEIqWUwtHEMeKccb{q}9 zD3dH)&e)T!V1u;B8aTE_L|GIQ-?*Na*XgBtmz0dZ8*4id;rgeT17W+~VaCnpT>ZrO z%V?Hlr$Y}D+{|Y&&+~louJwsUExfK|46)-Ou+CncD#wq}`y_{u%bBpj$T8?#d4g&= ztlhqVAh7vM5$%E6>Qb4HzEP($bY}4PD@BL}2DA3+Uk*y`x?w2N-jVK9j{?k-amdHb zkBnSSdKM|=o@<}lDfheb0-WrA8gP>^&uf>^{?Iho-)brw8YbXIE|1LtF`xe=O8j49 z%rHFSjMigs+>?>oxgZWX_7T(u86*g^s=7*1?$Gt&N6#rhAk$>aP4+dS5Bv!7l7g*l z*OC4c%s<)D3`y4CDHmyWMV7)p%IwW%*|Y)8g(`zgHQ$0K%e^C~0ehz>OTqw^g3DO@P>N37Y$Dq*jS<|K0r-X_Vxjc6~+%7fGpXz=9d4 zD3H*;I*1HK=rdq z9`-`GPc3&04n!A#Q>cJvb3^CG$MWba|rC~eCi)E@8~rB^%IOaqvLv_ zQ}4)PLIm5_Rhm%~Nl)GE*?+38f8OT!Hpoma{RrLY0vhi>Sx~5PH-rm?axrU_Crm*;%;_uL#Bkd0=80#GCF@52H5EY>LKq9 z)}Od3e|i`pyF!cOI8WZX8r~>^FA07)8M#oC1)r)}d>kUTxp@eDZD1`A zxoiu2>{G^uZ1qOE1h(JRwd6Z{dTTvtO)@9lOY|;lj5UDm`rX0TY5~ni;1kwo?OpEE zkL_QJ-9)CbpfH3KrR!~Lq#9iIeT z=4RMQslr3r#poUPM{-~XjM*m@Inul*CgdcAo=bE(Nf!7572x80FX&o*r2DGizM7z@ zhUu=Vu}Rh~KCO_h5&~OQy1BC1aTIq8hrr_z&J!q$eJDv3-R5e>Jz+E^@xvdp`g zd6?kFGlRdtr+B`t{f=zYdqhj-)k!jcSpu*aNq1tpYusd)TyHY@P|z2(hTLi#n7_{D zP76gNR-fp0&8y2i2Cp^L455YtENdJawrmy5HhR5My>5h%lGePi>xMQTUjTYR0zr2Rn_g?3(;LyRWGTXs_NFq%OmQ#{s&wn_7>$z zgCZ2{`ZLMGrd>+=A8s(F3`!Yvt$y$?qsUmY7p0jDos7neWfk_=nC)+#gn}bV^Qp8D z)sgBQa4?7th3abzLpvmX|7Lpo|Gtk6*d-X8s~XqOW;=g_jqD-Y600lB5bb9d4>! zXzEDcJiqRXq^+NbY1YSovt!qqqPc8}7NO4nqg4cxv80ZeBKZ@BNJD(;FC#7N(`u6s zMCf$~ez~OxI#0ODf37#t9NdtIo*10kUZaaE)_xxC(5o5T9It@<>gDp>3?QMRx+YKdmDE!3s^8L}DKzu=8fQ7c_NCkARrpwLweTNMd@;N&r z=%e16U_2_=-Go&_XS!#9~Vzpxg zHgBLuGrwQ_J=5#m7KY_zCSZ1bB`B`jzgA|D`6Cv9d(>tuEy;1d^vE%;x8RIu=!sKt za;8KtmRNUsWfpE8rPSaCy(m#t^1&@!j+bPh?(5opetAMq1N+;CaGe66nV#peB)}9` zLO%tX91sIIP-0Zm9BlRw>qRUImP+4jJF=4J3u8ZD0aHyr#?RSvK{kQFz;kvz{sIJ6@upXsdI;Ap`Bdi2KHV0Vo6# zvz$Fc=1co9MgAr!M=I--yHt=$9 zHp6`DGSa4~<=F>b$@veimjlUpt@9f>cOy+WC64k}*S_N8ak01e+*-bo?or36^7@h> z%DxdCUm$mz5BoX zDAbYvw;!b;*uYW4j*crK68#A_c{e9Uc$=bmE}cErWQ_5c!LPbXikQ$W;_}WoUV3K` zI&L=}cFDthHvTn4+WA_=AFAiRyaIbImcp?K2RMi>7Y7ZvBCvn>v}FS z$2K3s@%n9_MJW5RZ}IP&!!G`;Jn?TsOIBRUJ7*JegZP>C57=78AI5;Cg=6vq zBe&+iTUt(^hPCH_{K+*X$3?IbTp&XKcNExvH6$ISsVO$#f-qfiJ{_k=sle7|hp+m? zTt%?I5Zw_Z?~@9!VHbq^XNNdx$;M=jgd+;Iq7x2sCqtQxeOabD$Ff!$iZ{4mBR8%& zt%k+I>!+65I5UcvUFX(mFc>$(VMaC%+d=!s%mVsfG_y#pABf20$^cSHf%;c5sz(@I znKvCu>n*P5<&D>*ddEk9t~kJHZ`PmN@@$&H^Q!1L<&gDBMGx~mURO5aOpavnWDiw( zU$2qOE|*3wd@u-25V|{uJo@DgvV>FO?=)VRL2}`QU?{)c_6IBrps~OF^}lK}GLIZc&q;R1!_)<`2Q#iNH0K(kJypWX z*GWZY!%CJ+eX!type^`-V7(JY?(~aJD&PQpoOMi|Ko-nRi{g0u#-V3{+`-Svv{vS{ zHCBK5ZgnNUum}eV*NS}W?YUQp?WX%3aPzxY|HWNFmOq6 z(pc$ucn8~!{oqqo}JB$}p~2qPtX4s_0;(jM;jJu#aEJ79`u zegu}}^7c8`r73`$Cg!3g-@%pM+@-z%smFBe+~pctTvZD%FY)Z%>{kX=A>kZm2fr}@ zt(ru^?HdgwlkZ~9C5VWtk|LKbF01sS)Cx=NEyR2Tojo5mApktw=EN55Y%!#|xXWIr zv@d;Q(3ja_0mLg;NeJJ~DH%Za1M@PkVMYHTz7?acP2{?Cz?Y#sO@p0L*|JK}7YGYe z=Zbtn3M22+)LWmZC_}H$Ej~hS#IDTOZG5#z*}7w=bGAs1g#uGI*9x^!klPE1Y|$+o zNPR(S`>79aKlMsvU8>%$pSs!3Q)etq3D^D6Fa=cTi;3?HU-}g68ym=Q5H_qjq_=Ke zd-cB>cqsqP!1Hw5z*7L7Z53bY#lxE?WI)OK(R%Z z_9a7$O;a{5tXo19!ZS==fH8Lo3eQrNW`%Gzz^9ynOm9cTj)_O+e=za9_Z@(4=cw_D z0U-c70PW5)Q#mw2WR$iL;ZGj|6x0#arKfvEA$I65Ir!nebWIp6%i8fQHc{WAkwJ3i z3WONEoLvBzoSQFg>Y4)s*D?_c6ULkr+F(;)!R7;|%6xfB$J;b?4Wj2|JMTe7ozkD_ ztmrrXq^jQXz;yKN(p5ktojA4>zF7N#O#rW@`{&z>R;Dg-;9el_IbF&OdOgJ- zYP4;%jwH|gaNM<~%t11g4Wze;ill28gag^tH&0Tc_lwNja`y0f_qBRfo@|WT`cfaD zMFwb_vHUT!?ppPA1bPXzsW47ev)!iq_)%Fcmi+!x;2<5YU~=R47cvH>?tNq+?KLnT z(4rcwD)avdq}8A?{o*A){L9V(XqTSCQQc;vHWWInJrx)}VOG?dNR1iV9sq2!UuS=o z=;R5h!(9Y8WA-;}v&2$twm;lqj!3CJrX2G%H_a!f;I@s=NH=bAvEJUjr3)oQ4H*r^ zL;*vGDv;zmbTI2h1KYzypMY!$qHMaFI}jZ`%*BHDkf)z*Y}~A&tyQggEP@9Ys$H<{ zAn~%;E?Yu|c`PrjG|sfODes_7k)-zq<}$k)=4C!!WOzkYE{0t9o%+5LHJ6i1yI+e1 zRF%l0Jepx+l8fb#WnJZ^+SKCmTZ(eGk8eCjuH?MppGN~T12(c+;Eur-l1^MKs3T;R z1G%xAzv|$h(>57ZYrQl0ij=sHGWsywh{;7e+o0_UR+AzjH+qY{jOnmhbI4+GaXnf$ z$W^^32|+8xmu=D1vB58J6{AmT*`{Mp0+=j|nTP3AmzCDd zvC*rB(qdnc%vWA+AOyZ({$pwMd|e2ol#67md6`?vZ+pKoTW8*}``d8B>0%@w&tj2L z>?2?y_8m7@dV&yU1jL;Vy9IpdAF~vd=OJ~EqM938E*txTtGSTwaZ}CDGoUD~zMc>| zVh}L9DiR9%DP_-r%PneqZD^5$y$xs+SeGG>=VhKWQ@bA`)|`xrX`0N9@!}N$VMUc*SYUjKt?Zb#E+BuWabhXV~m=)`|}NBI9#-Lc7WMBv;jB z7W%*yx{)chJMo*kj?Aypmz}R{so$*2uh~9*zYnAv@=ZWz;4e`1Y-h%v4>XZ|h!5)W zB3U6{)a1Pn3L%p)8OXTUT>0WxI8m#Cal@f1mne^d3-mLb*X}-|Mh~Clj@|!N zZ@)jzHoWoud(VId;jQ06fX%@%0t1U;w zx%N(r!q-K3TfuI@j4;0kbCcK3Prq6VRh0QEtEWm_zrxfv-C(H68kwps9f9Z--^9Mm zT>oT-Gtr`St1V@A_)g0OMcyStQl)q%xKCG08g054=K6eTxc>flq%;upI;neOE@k?jOdds?^pK4J9=~qRNi&m!|5}`F7ZU z)6c1y%9XYc=Liis5jHfle)?}B`VUWwvR=cHOGfts1_P+wwb8r8Jb~Dp^@~);w+MU0`AQP?r=2C?}D1>rvxRCjF#Q6B? zzR+~zV-h04N5__A{2;clHrkhr8_h=N)Hp>Kh6I$)oY!9a(OV%-5rH5&UGUwfGX0L7uo~P8;{aNA zQ$rqk^kdzPPUFso=cnzW6m48ipF~T2F@;cH>^_zn>_O zisGG($*a^S0$*{W7t`P=g5^uEjJ_rPUH|f0)s?uyz#owhIXB?-r{zVIZfAUQO)6#b zPit{#+B>ABB)A#xyIK&^<9$xboIJyNHa4H4l1>v%LPftLbGyuw^{F!1rU>x_a-Cu1n@YM3Hl6+DgAJ_MYrM zsx^0%)>?W4?H>d8oivx!%S8e@kMaXH*v!7o%^wHc+(+r*7v|AkV|D92&F!_8>i5j- z;@kB~8(X9;U4u4P0!A=i{i4~2DpamZy`D`Cyyo-M!F;H5GTux}PD5vTIT+?l>-a;j zRZ<~4?o7o1C(mMw z#2ohNs4LwoEgMa@uO4_?SkONEWHeRj{kMl{nm=2r*?;Zjywd%ZlxzZfFwGB}q?z@N zTd0I_gl6%DJ~G!B9Q}W&d+(s8*S2d^MFCL>2wOlPk&OcTQ7IegBmq&-trSHCLy(kJOT?|D?LX(J;fIxuId!)A%5|W%B?&tZw^PQP9^ZL&B&73oX z%ch}92KXgBTj%7C45!q(yDCXy!iQ^ENV}EuSH<`m1DLC$n^u^X;R@0sx zCh-Xq3J)!wcgQ3mj-5aFqxCIg&%yAGubD5|=pF2_Hf573DY+&&tS8Ll3(MQ}IO4lq z7kpKT{q(HR&eayPtxwioM-$=GLhzGhRgdXN*co(-{cXx$=%rStpfx|Zl(hZ{M{4C^ z>8-!y-ket=WoNwn6$`#W=Am+7K~=bHkoCcdYqqwR%dY^aeAB8B`lv zBx5kx0T~dhcYK8-fU5yDWC;rT<76qS1PqgIkHFR&TKLES%2E6BCdT{g1FFrpwmGWRN)AR>kfEuRWU4VTSn$7 zwfj0QE;ILmg^-}Lx_Wzk6J$0<89m=_`JcJ|W5_nT-wsgCb5KHn&VRJ~?kMJdsBqdk zp?)%VANiK8WeDY}H-1zw&%;c0Tm4Hf_v9_^%O>gA%@XfV(N5P%xC0`G|04SH>4iaG zk#nhuL%NF#cSIv(q(v1Dh@OdT=vsO8JNdu+SehI$+GPR6Nnd{P+}b9e)gH*VQL$9S zr|#2V&#%aMpP(&RB60rETsV;y_!e?;YPz+wN^)2IWm+p*#v zn+b&SkBQRd7vQz}R&W7A#J}Ya?0QOZdQ|NCS5^qS>CpG;$sQ$JpZ>3Ux+`VMu;U;mT}}1y!M~OL z(IzV^5n#^Oe-TVyOPC{kY*yxP=V#~FJr#aQ%a$}N!aAf(PfahLTnG#?$v^J@Tzn*Z zOiFS`;>_->=cOJj^+9}SjSiLS5a7lMzHDd80mHWsUq+_ko1So8)aip`5rV>UvP|$r zN&WN~G-s4EWN*a%yWYHv#}hcErQE&8p+_*^t;bioX6-7a2~q_`psUA7XJQh4fc%#! z+g-0pMsHt*`9<)`eZ94EPe{wG6_6KZlPu32mUUWtFLLqLgNkLJk72&a4?gOsNuwGY zoqd}hETw20Y=&Z7Hg(fTEaFAS{ME<8bdv*OvvKmS0q}s!Yi|6HWb9nK<$1Gu8&><@ z(dz`QU14pirpD=ace9g61t^)oi%&uZ^JI-H(FKGbQV?_Ytw#Y0CHn}b*_!Y^D(CIq zQcp$}Rz>CSr2A87o~l)83pr`vkgo*$$Kx|Oj`5?5=#RB{4>W)mN`OC__UfNfGO1r#~dh)3g z2}J|fd@G@~3lF4pr?jai*_B5m4u}z^Ezf{|9sd32Ca@&wdk%<6vk=puV=tutxIBIV zT6GQx+j;(e#L;7}yv*&3$XV=%Q;+ks4UIqAo#^;(3i+!w#`*Jf_FR(Wc$#FY$rH5KYbUoqU$=9?nX$xJyWq+J(gJtN! zj(j<5;eYGOn~$z}`t+y$c@+AOgpyCbE<3FGD^coiuZAhUELDX4CXzBW*65^#CoR9Z z;C^UYzvctT+GYjip+*)MhsMjS&rHo+KOg%3rJcgO)Ng;C)EHF?3{RT!-` zy?)o5IyYCyj4Yy-mcu-+-0{uvQ{w#ylzT_n8}`9;JRvRjdW1|=th%5bN$sIwogKci)S@H!*8TwX3nKeTc=_3MmGoj9jCu6 zd8QhFXbaa5xY6(z`7b>+XKv!=a{pzGiRGu@D!->MLmGF*?ZcwO8R2&a4oiRkYkkIQ z9byY1e7co*RsBZVp<~=)K-1b!;(lm(wQT$QM@x-5cJn@S)pp^nd?#++v5HoCNVX$W z*QfKr%3^c@^Z1%w$CIVVs};1go!^_TJo>>e)?K>u$#+O_?fTyfBEPZLhg1ek5Qv-j z#wE1>mvBQk@qVpkzO3{72l<5=k|2^wJr|g$|l(EjA=MqSbDd1h&Nf28#u)X&!<@A+~ zo(GMI&&sD(3@%uImR1awJ{)vPZtMaKoi^YWt$y6_Tja~Id)F3@{5TjXf;p%4a-Z>Z zv9UBnG2~m+)z3Z2d2SL}+HVzZU%0pt*bLeYIh_kF@V|<_e>4enf9%IIt7{y{jvYG$ zf?y-0{eNt}7YL!BX6zhhYmS>;J@)?M%ZU9)FYev@_H^>=hzgD0)fWH0BKE2GSqM-rzWXdYFP(z*Sa zG8;U%?w(aSlGicK>ue?~%4o`BTr$K%UVj zjcOI~YsrVn71QLxJJBa^(q1WC&VTiwAo2GaH!d&3_3q|MBd9VO5}ptJG|8{v5l?#0 z-(>Yvl|XH{(cp~|p1Mn{xgQ@{lJc^K$h&IotE$j0IF&m!${SIo#fvbrSP4G&j#8OlBF?7(i2EklN$2IOa8+W#XH# zQzXFwiXuPH$VX7W&&mhRnjlw-fYDWirMY>UB5P6hOO<{ZAI8IRP*GcbAoOd@+Dy%3 zhBi3Z%V?|AjJC+~0qn4;uT1*{t3BN~9|8Gz=AZfD%Z-S;kO4Hx*N3#F>`^(J8Hna` zf-CS?60^M9%PV{;CGXR5;&R(Ke59m^WKr2Sn&($N*5*blDTW2x2uiS})x+$#W%2ne zLBs@p?rp^)Ut|zDvYHY!8pOA5SN`b#U`9CB8!tG8~!pE+inA-deg-LyX0tr#T;V^PR%_C~If>T1&%<=OLA0+NAIoOcw0 zG|Ap|G3zX=AZ`vQ&zSfcZ%0a^ym~4h1Cf%n@;8HL&sFIGk&+49k&=`)6F_-vA0Y9M z@;LdY@;Dh#9#iRIvYfxeI$0>HXtn466dwCe#zH^}wb43da*=U_S?!7|ImYy_mg;MX zeF_UL??A}FDHUOPA?QPKQo*5hp*<%1FW(YJ5I-q~4m}MT@>Io7TR?_i^-M+`YgCT< z^K|h!*qTX%#a{Z|aQf@8x3R$A~UZx*_8n4&D~l@L+q1+`)O!to!V<5S8ck8d)h z=`5BJ+09PfmlW`$+uTpjuA3uR%e2hlMO@ziNsn9sNyE5m5Vdr>15DqM0cSy)yswvF ztpdZ)d?c#^5jsj*V8$4m z>%Rqip&1=Ti)q2WqeTc``_P{8Mb>}`*UA0 zn}ex2uMk38Q zvOM}ty;m?FR{ww$;FxGgrGGsusF=Slj>5D>fg$K8uPK8xy2GGIN2>n%oQEag%WI*2 zKXbsCoqPf7#g?;e-Ih_822n2h05a-IVP<#{M7!cig9}sT=(dbnR>P$bwLWewM6~Ib zC#R+_lquiXjXfhDz8`yJ-BYzWy{+NiFxi1bik%lzY~nPzC`0^=h3Ot%&xjSM**`%n zC6U$4UdXF~b;(FJr6oYzoBjl_K_T1EAsU7D{GBEs|ElEu<=bzI z{oU5Z(PGDGucKvP;D1RUg{ZCcK8glckru0#YZ#j2%!=valeUNpvc%jS?J>LE=OY?Q zobFrIWT&=}>_Sh0q{H+1I($14do|~K->`o$YCY>B=92SU;~lXc@YO12R`^1T**hro zME~F=PP90p5bJ^^^R{O1+KtElhBF9qs38%r)XN-arx9(yYFkW7;a!i+kXu|jBluJ0 z)_`S=lMm!n9)wg&*m_95lBrC4a{Lv3@|pq+-5$}|2%3iH;g%vA28(O6Gw!#245Cm) zXm-o}hEpjUWZOBVy@EeDSQrqKLKbW>>Tf$>2F7I&{I|>@RYmy1rZ@i`*aiKOZxz1P zY@`|<=W=<8e%cwfeUdiW1ylc)A^*a8D)rqxvk`HcL0jB<*zhj!dg||

KaUjqltM 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 literal 0 HcmV?d00001 diff --git a/master/extensions/guides/kube-object-list-layout/index.html b/master/extensions/guides/kube-object-list-layout/index.html index eba555b1d5..104ead8cf3 100644 --- a/master/extensions/guides/kube-object-list-layout/index.html +++ b/master/extensions/guides/kube-object-list-layout/index.html @@ -19,7 +19,7 @@ - Kube object list layout - Lens Documentation + KubeObjectListLayout Sample - Lens Documentation @@ -75,7 +75,7 @@

- + Skip to content @@ -106,7 +106,7 @@
- Kube object list layout + KubeObjectListLayout Sample
@@ -782,6 +782,8 @@ + +
@@ -790,6 +792,8 @@
); }) Defined in src/renderer/components/layout/tab-layout.tsx:27 Const notificationsStore # \u2022 notificationsStore : NotificationsStore \u2039\u203a = new NotificationsStore() Defined in src/renderer/components/notifications/notifications.store.ts:77 Const terminalStore # \u2022 terminalStore : TerminalStore\u2039\u203a = new TerminalStore() Defined in src/renderer/components/dock/terminal.store.ts:124 Functions # DrawerItemLabels # \u25b8 DrawerItemLabels ( props : DrawerItemLabelsProps ): Element\u2039\u203a Defined in src/renderer/components/drawer/drawer-item-labels.tsx:9 Parameters: Name Type props DrawerItemLabelsProps Returns: Element\u2039\u203a SubMenu # \u25b8 SubMenu ( props : Partial\u2039 MenuProps \u203a): Element\u2039\u203a Defined in src/renderer/components/menu/menu.tsx:275 Parameters: Name Type props Partial\u2039 MenuProps \u203a Returns: Element\u2039\u203a createPodLogsTab # \u25b8 createPodLogsTab ( data : IPodLogsData, tabParams : Partial\u2039IDockTab\u203a): IDockTab Defined in src/renderer/components/dock/pod-logs.store.ts:190 Parameters: Name Type Default data IPodLogsData - tabParams Partial\u2039IDockTab\u203a {} Returns: IDockTab createTerminalTab # \u25b8 createTerminalTab ( tabParams : Partial\u2039ITerminalTab\u203a): IDockTab Defined in src/renderer/components/dock/terminal.store.ts:18 Parameters: Name Type Default tabParams Partial\u2039ITerminalTab\u203a {} Returns: IDockTab withTooltip # \u25b8 withTooltip \u2039 T \u203a( Target : T): T Defined in src/renderer/components/tooltip/withTooltip.tsx:18 Type parameters: \u25aa T : React.ComponentType\u2039any\u203a Parameters: Name Type Target T Returns: T","title":"Module: \"renderer-api/components\""},{"location":"extensions/api/modules/_renderer_api_components_/#module-renderer-apicomponents","text":"","title":"Module: \"renderer-api/components\""},{"location":"extensions/api/modules/_renderer_api_components_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_components_/#enumerations","text":"NotificationStatus TooltipPosition","title":"Enumerations"},{"location":"extensions/api/modules/_renderer_api_components_/#classes","text":"Badge Button Checkbox ConfirmDialog CubeSpinner Dialog Drawer DrawerItem DrawerParamToggler DrawerTitle Icon Input KubeEventDetails KubeObjectDetails KubeObjectListLayout KubeObjectMenu KubeObjectMeta LineProgress Menu MenuActions MenuItem Notifications NotificationsStore PageLayout Radio RadioGroup Select Slider Spinner StatusBrick Stepper Tab Table TableCell TableHead TableRow Tabs Tooltip WizardLayout","title":"Classes"},{"location":"extensions/api/modules/_renderer_api_components_/#interfaces","text":"BadgeProps ButtonProps CheckboxProps ConfirmDialogParams ConfirmDialogProps CubeSpinnerProps DialogProps DrawerItemLabelsProps DrawerItemProps DrawerParamTogglerProps DrawerProps DrawerTitleProps GroupSelectOption IconProps InputValidator KubeEventDetailsProps KubeObjectDetailsProps KubeObjectListLayoutProps KubeObjectMenuProps KubeObjectMetaProps LineProgressProps MenuActionsProps MenuItemProps MenuPosition MenuProps Notification PageLayoutProps RadioGroupProps SelectOption SelectProps SliderProps SpinnerProps StatusBrickProps StepperProps TabLayoutProps TabLayoutRoute TabProps TableCellProps TableHeadProps TableProps TableRowProps TabsProps TooltipContentFormatters TooltipDecoratorProps TooltipProps WizardLayoutProps","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_components_/#type-aliases","text":"InputProps MenuContextValue NotificationId NotificationMessage RadioProps TableCellElem TableHeadElem TableOrderBy TableRowElem TableSortBy TableSortCallback TableSortParams","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_components_/#variables","text":"InputValidators MenuContext TabLayout notificationsStore terminalStore","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_components_/#functions","text":"DrawerItemLabels SubMenu createPodLogsTab createTerminalTab withTooltip","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_components_/#type-aliases_1","text":"","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_components_/#inputprops","text":"\u01ac InputProps : Omit\u2039InputElementProps, \"onChange\" | \"onSubmit\"\u203a & object Defined in src/renderer/components/input/input.tsx:21","title":"InputProps"},{"location":"extensions/api/modules/_renderer_api_components_/#menucontextvalue","text":"\u01ac MenuContextValue : Menu Defined in src/renderer/components/menu/menu.tsx:11","title":"MenuContextValue"},{"location":"extensions/api/modules/_renderer_api_components_/#notificationid","text":"\u01ac NotificationId : string | number Defined in src/renderer/components/notifications/notifications.store.ts:7","title":"NotificationId"},{"location":"extensions/api/modules/_renderer_api_components_/#notificationmessage","text":"\u01ac NotificationMessage : React.ReactNode | React.ReactNode[] | JsonApiErrorParsed Defined in src/renderer/components/notifications/notifications.store.ts:8","title":"NotificationMessage"},{"location":"extensions/api/modules/_renderer_api_components_/#radioprops","text":"\u01ac RadioProps : HTMLProps\u2039any\u203a & object Defined in src/renderer/components/radio/radio.tsx:40","title":"RadioProps"},{"location":"extensions/api/modules/_renderer_api_components_/#tablecellelem","text":"\u01ac TableCellElem : ReactElement\u2039 TableCellProps \u203a Defined in src/renderer/components/table/table-cell.tsx:9","title":"TableCellElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tableheadelem","text":"\u01ac TableHeadElem : ReactElement\u2039 TableHeadProps \u203a Defined in src/renderer/components/table/table-head.tsx:6","title":"TableHeadElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tableorderby","text":"\u01ac TableOrderBy : \"asc\" | \"desc\" | string Defined in src/renderer/components/table/table.tsx:18","title":"TableOrderBy"},{"location":"extensions/api/modules/_renderer_api_components_/#tablerowelem","text":"\u01ac TableRowElem : ReactElement\u2039 TableRowProps \u203a Defined in src/renderer/components/table/table-row.tsx:7","title":"TableRowElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortby","text":"\u01ac TableSortBy : string Defined in src/renderer/components/table/table.tsx:17","title":"TableSortBy"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortcallback","text":"\u01ac TableSortCallback : function Defined in src/renderer/components/table/table.tsx:20","title":"TableSortCallback"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortparams","text":"\u01ac TableSortParams : object Defined in src/renderer/components/table/table.tsx:19","title":"TableSortParams"},{"location":"extensions/api/modules/_renderer_api_components_/#variables_1","text":"","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_components_/#inputvalidators","text":"\u2022 InputValidators : InputValidators Defined in src/renderer/components/input/input.tsx:14","title":"InputValidators"},{"location":"extensions/api/modules/_renderer_api_components_/#const-menucontext","text":"\u2022 MenuContext : Context\u2039 Menu \u2039\u203a\u203a = React.createContext (null) Defined in src/renderer/components/menu/menu.tsx:10","title":"Const MenuContext"},{"location":"extensions/api/modules/_renderer_api_components_/#const-tablayout","text":"\u2022 TabLayout : (Anonymous function) = observer(({ className, contentClass, tabs = [], children }: TabLayoutProps) => { const currentLocation = navigation.location.pathname; const hasTabs = tabs.length > 0; const startTabUrl = hasTabs ? (tabs.find(tab => tab.default) || tabs[0])?.url : null; return ( {hasTabs && ( navigate(url)}> {tabs.map(({ title, routePath, url = routePath, exact }) => { const isActive = !!matchPath(currentLocation, { path: routePath, exact }); return ; })} )}
{hasTabs && ( {tabs.map(({ routePath, exact, component }) => { return ; })} )} {children}
); }) Defined in src/renderer/components/layout/tab-layout.tsx:27","title":"Const TabLayout"},{"location":"extensions/api/modules/_renderer_api_components_/#const-notificationsstore","text":"\u2022 notificationsStore : NotificationsStore \u2039\u203a = new NotificationsStore() Defined in src/renderer/components/notifications/notifications.store.ts:77","title":"Const notificationsStore"},{"location":"extensions/api/modules/_renderer_api_components_/#const-terminalstore","text":"\u2022 terminalStore : TerminalStore\u2039\u203a = new TerminalStore() Defined in src/renderer/components/dock/terminal.store.ts:124","title":"Const terminalStore"},{"location":"extensions/api/modules/_renderer_api_components_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_components_/#draweritemlabels","text":"\u25b8 DrawerItemLabels ( props : DrawerItemLabelsProps ): Element\u2039\u203a Defined in src/renderer/components/drawer/drawer-item-labels.tsx:9 Parameters: Name Type props DrawerItemLabelsProps Returns: Element\u2039\u203a","title":"DrawerItemLabels"},{"location":"extensions/api/modules/_renderer_api_components_/#submenu","text":"\u25b8 SubMenu ( props : Partial\u2039 MenuProps \u203a): Element\u2039\u203a Defined in src/renderer/components/menu/menu.tsx:275 Parameters: Name Type props Partial\u2039 MenuProps \u203a Returns: Element\u2039\u203a","title":"SubMenu"},{"location":"extensions/api/modules/_renderer_api_components_/#createpodlogstab","text":"\u25b8 createPodLogsTab ( data : IPodLogsData, tabParams : Partial\u2039IDockTab\u203a): IDockTab Defined in src/renderer/components/dock/pod-logs.store.ts:190 Parameters: Name Type Default data IPodLogsData - tabParams Partial\u2039IDockTab\u203a {} Returns: IDockTab","title":"createPodLogsTab"},{"location":"extensions/api/modules/_renderer_api_components_/#createterminaltab","text":"\u25b8 createTerminalTab ( tabParams : Partial\u2039ITerminalTab\u203a): IDockTab Defined in src/renderer/components/dock/terminal.store.ts:18 Parameters: Name Type Default tabParams Partial\u2039ITerminalTab\u203a {} Returns: IDockTab","title":"createTerminalTab"},{"location":"extensions/api/modules/_renderer_api_components_/#withtooltip","text":"\u25b8 withTooltip \u2039 T \u203a( Target : T): T Defined in src/renderer/components/tooltip/withTooltip.tsx:18 Type parameters: \u25aa T : React.ComponentType\u2039any\u203a Parameters: Name Type Target T Returns: T","title":"withTooltip"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/","text":"Module: \"renderer-api/k8s-api\" # Index # Enumerations # KubeObjectStatusLevel Classes # CRDResourceStore CRDStore ClusterRole ClusterRoleBinding ConfigMap ConfigMapsStore CronJob CronJobStore CustomResourceDefinition DaemonSet DaemonSetStore Deployment DeploymentApi DeploymentStore Endpoint EndpointStore EventStore HPAStore HorizontalPodAutoscaler Ingress IngressApi IngressStore Job JobStore KubeApi KubeEvent KubeObject KubeObjectStore Namespace NamespaceStore NetworkPolicy NetworkPolicyStore Node NodesApi NodesStore PersistentVolume PersistentVolumeClaim PersistentVolumeClaimsApi PersistentVolumesStore Pod PodDisruptionBudget PodDisruptionBudgetsStore PodsApi PodsStore ReplicaSet ReplicaSetStore ResourceQuota ResourceQuotasStore Role RoleBinding RoleBindingsStore RolesStore Secret SecretsStore Service ServiceAccount ServiceAccountsStore ServiceStore StatefulSet StatefulSetStore StorageClass StorageClassStore VolumeClaimStore Interfaces # IKubeApiCluster IPodContainer IPodContainerStatus ISecretRef Type aliases # KubeObjectStatus Variables # apiManager clusterRoleApi clusterRoleBindingApi configMapApi crdApi cronJobApi daemonSetApi deploymentApi endpointApi eventApi hpaApi ingressApi jobApi namespacesApi networkPolicyApi nodesApi pdbApi persistentVolumeApi podsApi pvcApi replicaSetApi resourceQuotaApi roleApi roleBindingApi secretsApi serviceAccountsApi serviceApi statefulSetApi storageClassApi Functions # forCluster isAllowedResource Type aliases # KubeObjectStatus # \u01ac KubeObjectStatus : object Defined in src/extensions/renderer-api/kube-object-status.ts:1 Type declaration: level : KubeObjectStatusLevel text : string timestamp ? : string Variables # Const apiManager # \u2022 apiManager : ApiManager\u2039\u203a = new ApiManager() Defined in src/renderer/api/api-manager.ts:54 Const clusterRoleApi # \u2022 clusterRoleApi : KubeApi \u2039 ClusterRole \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRole, }) Defined in src/renderer/api/endpoints/cluster-role.api.ts:12 Const clusterRoleBindingApi # \u2022 clusterRoleBindingApi : KubeApi \u2039 ClusterRoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRoleBinding, }) Defined in src/renderer/api/endpoints/cluster-role-binding.api.ts:10 Const configMapApi # \u2022 configMapApi : KubeApi \u2039 ConfigMap \u2039\u203a\u203a = new KubeApi({ objectConstructor: ConfigMap, }) Defined in src/renderer/api/endpoints/configmap.api.ts:26 Const crdApi # \u2022 crdApi : KubeApi \u2039 CustomResourceDefinition \u2039\u203a\u203a = new KubeApi ({ objectConstructor: CustomResourceDefinition, checkPreferredVersion: true, }) Defined in src/renderer/api/endpoints/crd.api.ts:154 Const cronJobApi # \u2022 cronJobApi : KubeApi \u2039 CronJob \u2039\u203a\u203a = new KubeApi({ objectConstructor: CronJob, }) Defined in src/renderer/api/endpoints/cron-job.api.ts:95 Const daemonSetApi # \u2022 daemonSetApi : KubeApi \u2039 DaemonSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: DaemonSet, }) Defined in src/renderer/api/endpoints/daemon-set.api.ts:74 Const deploymentApi # \u2022 deploymentApi : DeploymentApi \u2039\u203a = new DeploymentApi({ objectConstructor: Deployment, }) Defined in src/renderer/api/endpoints/deployment.api.ts:193 Const endpointApi # \u2022 endpointApi : KubeApi \u2039 Endpoint \u2039\u203a\u203a = new KubeApi({ objectConstructor: Endpoint, }) Defined in src/renderer/api/endpoints/endpoint.api.ts:127 Const eventApi # \u2022 eventApi : KubeApi \u2039 KubeEvent \u2039\u203a\u203a = new KubeApi({ objectConstructor: KubeEvent, }) Defined in src/renderer/api/endpoints/events.api.ts:59 Const hpaApi # \u2022 hpaApi : KubeApi \u2039 HorizontalPodAutoscaler \u2039\u203a\u203a = new KubeApi({ objectConstructor: HorizontalPodAutoscaler, }) Defined in src/renderer/api/endpoints/hpa.api.ts:143 Const ingressApi # \u2022 ingressApi : IngressApi \u2039\u203a = new IngressApi({ objectConstructor: Ingress, // Add fallback for Kubernetes <1.19 checkPreferredVersion: true, fallbackApiBases: [\"/apis/extensions/v1beta1/ingresses\"], logStuff: true } as any) Defined in src/renderer/api/endpoints/ingress.api.ts:177 Const jobApi # \u2022 jobApi : KubeApi \u2039 Job \u2039\u203a\u203a = new KubeApi({ objectConstructor: Job, }) Defined in src/renderer/api/endpoints/job.api.ts:110 Const namespacesApi # \u2022 namespacesApi : KubeApi \u2039 Namespace \u2039\u203a\u203a = new KubeApi({ objectConstructor: Namespace, }) Defined in src/renderer/api/endpoints/namespaces.api.ts:25 Const networkPolicyApi # \u2022 networkPolicyApi : KubeApi \u2039 NetworkPolicy \u2039\u203a\u203a = new KubeApi({ objectConstructor: NetworkPolicy, }) Defined in src/renderer/api/endpoints/network-policy.api.ts:71 Const nodesApi # \u2022 nodesApi : NodesApi \u2039\u203a = new NodesApi({ objectConstructor: Node, }) Defined in src/renderer/api/endpoints/nodes.api.ts:169 Const pdbApi # \u2022 pdbApi : KubeApi \u2039 PodDisruptionBudget \u2039\u203a\u203a = new KubeApi({ objectConstructor: PodDisruptionBudget, }) Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:47 Const persistentVolumeApi # \u2022 persistentVolumeApi : KubeApi \u2039 PersistentVolume \u2039\u203a\u203a = new KubeApi({ objectConstructor: PersistentVolume, }) Defined in src/renderer/api/endpoints/persistent-volume.api.ts:73 Const podsApi # \u2022 podsApi : PodsApi \u2039\u203a = new PodsApi({ objectConstructor: Pod, }) Defined in src/renderer/api/endpoints/pods.api.ts:459 Const pvcApi # \u2022 pvcApi : PersistentVolumeClaimsApi \u2039\u203a = new PersistentVolumeClaimsApi({ objectConstructor: PersistentVolumeClaim, }) Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:90 Const replicaSetApi # \u2022 replicaSetApi : KubeApi \u2039 ReplicaSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: ReplicaSet, }) Defined in src/renderer/api/endpoints/replica-set.api.ts:56 Const resourceQuotaApi # \u2022 resourceQuotaApi : KubeApi \u2039 ResourceQuota \u2039\u203a\u203a = new KubeApi({ objectConstructor: ResourceQuota, }) Defined in src/renderer/api/endpoints/resource-quota.api.ts:66 Const roleApi # \u2022 roleApi : KubeApi \u2039 Role \u2039\u203a\u203a = new KubeApi({ objectConstructor: Role, }) Defined in src/renderer/api/endpoints/role.api.ts:21 Const roleBindingApi # \u2022 roleBindingApi : KubeApi \u2039 RoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: RoleBinding, }) Defined in src/renderer/api/endpoints/role-binding.api.ts:34 Const secretsApi # \u2022 secretsApi : KubeApi \u2039 Secret \u2039\u203a\u203a = new KubeApi({ objectConstructor: Secret, }) Defined in src/renderer/api/endpoints/secret.api.ts:48 Const serviceAccountsApi # \u2022 serviceAccountsApi : KubeApi \u2039 ServiceAccount \u2039\u203a\u203a = new KubeApi ({ objectConstructor: ServiceAccount, }) Defined in src/renderer/api/endpoints/service-accounts.api.ts:27 Const serviceApi # \u2022 serviceApi : KubeApi \u2039 Service \u2039\u203a\u203a = new KubeApi({ objectConstructor: Service, }) Defined in src/renderer/api/endpoints/service.api.ts:101 Const statefulSetApi # \u2022 statefulSetApi : StatefulSetApi\u2039\u203a = new StatefulSetApi({ objectConstructor: StatefulSet, }) Defined in src/renderer/api/endpoints/stateful-set.api.ts:110 Const storageClassApi # \u2022 storageClassApi : KubeApi \u2039 StorageClass \u2039\u203a\u203a = new KubeApi({ objectConstructor: StorageClass, }) Defined in src/renderer/api/endpoints/storage-class.api.ts:37 Functions # forCluster # \u25b8 forCluster \u2039 T \u203a( cluster : IKubeApiCluster , kubeClass : IKubeObjectConstructor\u2039T\u203a): KubeApi \u2039T\u203a Defined in src/renderer/api/kube-api.ts:66 Type parameters: \u25aa T : KubeObject Parameters: Name Type cluster IKubeApiCluster kubeClass IKubeObjectConstructor\u2039T\u203a Returns: KubeApi \u2039T\u203a isAllowedResource # \u25b8 isAllowedResource ( resources : KubeResource | KubeResource[]): boolean Defined in src/common/rbac.ts:40 Parameters: Name Type resources KubeResource | KubeResource[] Returns: boolean","title":"Module: \"renderer-api/k8s-api\""},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#module-renderer-apik8s-api","text":"","title":"Module: \"renderer-api/k8s-api\""},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#enumerations","text":"KubeObjectStatusLevel","title":"Enumerations"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#classes","text":"CRDResourceStore CRDStore ClusterRole ClusterRoleBinding ConfigMap ConfigMapsStore CronJob CronJobStore CustomResourceDefinition DaemonSet DaemonSetStore Deployment DeploymentApi DeploymentStore Endpoint EndpointStore EventStore HPAStore HorizontalPodAutoscaler Ingress IngressApi IngressStore Job JobStore KubeApi KubeEvent KubeObject KubeObjectStore Namespace NamespaceStore NetworkPolicy NetworkPolicyStore Node NodesApi NodesStore PersistentVolume PersistentVolumeClaim PersistentVolumeClaimsApi PersistentVolumesStore Pod PodDisruptionBudget PodDisruptionBudgetsStore PodsApi PodsStore ReplicaSet ReplicaSetStore ResourceQuota ResourceQuotasStore Role RoleBinding RoleBindingsStore RolesStore Secret SecretsStore Service ServiceAccount ServiceAccountsStore ServiceStore StatefulSet StatefulSetStore StorageClass StorageClassStore VolumeClaimStore","title":"Classes"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#interfaces","text":"IKubeApiCluster IPodContainer IPodContainerStatus ISecretRef","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#type-aliases","text":"KubeObjectStatus","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#variables","text":"apiManager clusterRoleApi clusterRoleBindingApi configMapApi crdApi cronJobApi daemonSetApi deploymentApi endpointApi eventApi hpaApi ingressApi jobApi namespacesApi networkPolicyApi nodesApi pdbApi persistentVolumeApi podsApi pvcApi replicaSetApi resourceQuotaApi roleApi roleBindingApi secretsApi serviceAccountsApi serviceApi statefulSetApi storageClassApi","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#functions","text":"forCluster isAllowedResource","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#type-aliases_1","text":"","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#kubeobjectstatus","text":"\u01ac KubeObjectStatus : object Defined in src/extensions/renderer-api/kube-object-status.ts:1","title":"KubeObjectStatus"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#variables_1","text":"","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-apimanager","text":"\u2022 apiManager : ApiManager\u2039\u203a = new ApiManager() Defined in src/renderer/api/api-manager.ts:54","title":"Const apiManager"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-clusterroleapi","text":"\u2022 clusterRoleApi : KubeApi \u2039 ClusterRole \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRole, }) Defined in src/renderer/api/endpoints/cluster-role.api.ts:12","title":"Const clusterRoleApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-clusterrolebindingapi","text":"\u2022 clusterRoleBindingApi : KubeApi \u2039 ClusterRoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRoleBinding, }) Defined in src/renderer/api/endpoints/cluster-role-binding.api.ts:10","title":"Const clusterRoleBindingApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-configmapapi","text":"\u2022 configMapApi : KubeApi \u2039 ConfigMap \u2039\u203a\u203a = new KubeApi({ objectConstructor: ConfigMap, }) Defined in src/renderer/api/endpoints/configmap.api.ts:26","title":"Const configMapApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-crdapi","text":"\u2022 crdApi : KubeApi \u2039 CustomResourceDefinition \u2039\u203a\u203a = new KubeApi ({ objectConstructor: CustomResourceDefinition, checkPreferredVersion: true, }) Defined in src/renderer/api/endpoints/crd.api.ts:154","title":"Const crdApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-cronjobapi","text":"\u2022 cronJobApi : KubeApi \u2039 CronJob \u2039\u203a\u203a = new KubeApi({ objectConstructor: CronJob, }) Defined in src/renderer/api/endpoints/cron-job.api.ts:95","title":"Const cronJobApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-daemonsetapi","text":"\u2022 daemonSetApi : KubeApi \u2039 DaemonSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: DaemonSet, }) Defined in src/renderer/api/endpoints/daemon-set.api.ts:74","title":"Const daemonSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-deploymentapi","text":"\u2022 deploymentApi : DeploymentApi \u2039\u203a = new DeploymentApi({ objectConstructor: Deployment, }) Defined in src/renderer/api/endpoints/deployment.api.ts:193","title":"Const deploymentApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-endpointapi","text":"\u2022 endpointApi : KubeApi \u2039 Endpoint \u2039\u203a\u203a = new KubeApi({ objectConstructor: Endpoint, }) Defined in src/renderer/api/endpoints/endpoint.api.ts:127","title":"Const endpointApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-eventapi","text":"\u2022 eventApi : KubeApi \u2039 KubeEvent \u2039\u203a\u203a = new KubeApi({ objectConstructor: KubeEvent, }) Defined in src/renderer/api/endpoints/events.api.ts:59","title":"Const eventApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-hpaapi","text":"\u2022 hpaApi : KubeApi \u2039 HorizontalPodAutoscaler \u2039\u203a\u203a = new KubeApi({ objectConstructor: HorizontalPodAutoscaler, }) Defined in src/renderer/api/endpoints/hpa.api.ts:143","title":"Const hpaApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-ingressapi","text":"\u2022 ingressApi : IngressApi \u2039\u203a = new IngressApi({ objectConstructor: Ingress, // Add fallback for Kubernetes <1.19 checkPreferredVersion: true, fallbackApiBases: [\"/apis/extensions/v1beta1/ingresses\"], logStuff: true } as any) Defined in src/renderer/api/endpoints/ingress.api.ts:177","title":"Const ingressApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-jobapi","text":"\u2022 jobApi : KubeApi \u2039 Job \u2039\u203a\u203a = new KubeApi({ objectConstructor: Job, }) Defined in src/renderer/api/endpoints/job.api.ts:110","title":"Const jobApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-namespacesapi","text":"\u2022 namespacesApi : KubeApi \u2039 Namespace \u2039\u203a\u203a = new KubeApi({ objectConstructor: Namespace, }) Defined in src/renderer/api/endpoints/namespaces.api.ts:25","title":"Const namespacesApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-networkpolicyapi","text":"\u2022 networkPolicyApi : KubeApi \u2039 NetworkPolicy \u2039\u203a\u203a = new KubeApi({ objectConstructor: NetworkPolicy, }) Defined in src/renderer/api/endpoints/network-policy.api.ts:71","title":"Const networkPolicyApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-nodesapi","text":"\u2022 nodesApi : NodesApi \u2039\u203a = new NodesApi({ objectConstructor: Node, }) Defined in src/renderer/api/endpoints/nodes.api.ts:169","title":"Const nodesApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-pdbapi","text":"\u2022 pdbApi : KubeApi \u2039 PodDisruptionBudget \u2039\u203a\u203a = new KubeApi({ objectConstructor: PodDisruptionBudget, }) Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:47","title":"Const pdbApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-persistentvolumeapi","text":"\u2022 persistentVolumeApi : KubeApi \u2039 PersistentVolume \u2039\u203a\u203a = new KubeApi({ objectConstructor: PersistentVolume, }) Defined in src/renderer/api/endpoints/persistent-volume.api.ts:73","title":"Const persistentVolumeApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-podsapi","text":"\u2022 podsApi : PodsApi \u2039\u203a = new PodsApi({ objectConstructor: Pod, }) Defined in src/renderer/api/endpoints/pods.api.ts:459","title":"Const podsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-pvcapi","text":"\u2022 pvcApi : PersistentVolumeClaimsApi \u2039\u203a = new PersistentVolumeClaimsApi({ objectConstructor: PersistentVolumeClaim, }) Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:90","title":"Const pvcApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-replicasetapi","text":"\u2022 replicaSetApi : KubeApi \u2039 ReplicaSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: ReplicaSet, }) Defined in src/renderer/api/endpoints/replica-set.api.ts:56","title":"Const replicaSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-resourcequotaapi","text":"\u2022 resourceQuotaApi : KubeApi \u2039 ResourceQuota \u2039\u203a\u203a = new KubeApi({ objectConstructor: ResourceQuota, }) Defined in src/renderer/api/endpoints/resource-quota.api.ts:66","title":"Const resourceQuotaApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-roleapi","text":"\u2022 roleApi : KubeApi \u2039 Role \u2039\u203a\u203a = new KubeApi({ objectConstructor: Role, }) Defined in src/renderer/api/endpoints/role.api.ts:21","title":"Const roleApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-rolebindingapi","text":"\u2022 roleBindingApi : KubeApi \u2039 RoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: RoleBinding, }) Defined in src/renderer/api/endpoints/role-binding.api.ts:34","title":"Const roleBindingApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-secretsapi","text":"\u2022 secretsApi : KubeApi \u2039 Secret \u2039\u203a\u203a = new KubeApi({ objectConstructor: Secret, }) Defined in src/renderer/api/endpoints/secret.api.ts:48","title":"Const secretsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-serviceaccountsapi","text":"\u2022 serviceAccountsApi : KubeApi \u2039 ServiceAccount \u2039\u203a\u203a = new KubeApi ({ objectConstructor: ServiceAccount, }) Defined in src/renderer/api/endpoints/service-accounts.api.ts:27","title":"Const serviceAccountsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-serviceapi","text":"\u2022 serviceApi : KubeApi \u2039 Service \u2039\u203a\u203a = new KubeApi({ objectConstructor: Service, }) Defined in src/renderer/api/endpoints/service.api.ts:101","title":"Const serviceApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-statefulsetapi","text":"\u2022 statefulSetApi : StatefulSetApi\u2039\u203a = new StatefulSetApi({ objectConstructor: StatefulSet, }) Defined in src/renderer/api/endpoints/stateful-set.api.ts:110","title":"Const statefulSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-storageclassapi","text":"\u2022 storageClassApi : KubeApi \u2039 StorageClass \u2039\u203a\u203a = new KubeApi({ objectConstructor: StorageClass, }) Defined in src/renderer/api/endpoints/storage-class.api.ts:37","title":"Const storageClassApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#forcluster","text":"\u25b8 forCluster \u2039 T \u203a( cluster : IKubeApiCluster , kubeClass : IKubeObjectConstructor\u2039T\u203a): KubeApi \u2039T\u203a Defined in src/renderer/api/kube-api.ts:66 Type parameters: \u25aa T : KubeObject Parameters: Name Type cluster IKubeApiCluster kubeClass IKubeObjectConstructor\u2039T\u203a Returns: KubeApi \u2039T\u203a","title":"forCluster"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#isallowedresource","text":"\u25b8 isAllowedResource ( resources : KubeResource | KubeResource[]): boolean Defined in src/common/rbac.ts:40 Parameters: Name Type resources KubeResource | KubeResource[] Returns: boolean","title":"isAllowedResource"},{"location":"extensions/api/modules/_renderer_api_navigation_/","text":"Module: \"renderer-api/navigation\" # Index # Interfaces # IURLParams Functions # getDetailsUrl hideDetails navigate showDetails Functions # getDetailsUrl # \u25b8 getDetailsUrl ( details : string): string Defined in src/renderer/navigation.ts:71 Parameters: Name Type details string Returns: string hideDetails # \u25b8 hideDetails (): void Defined in src/renderer/navigation.ts:93 Hide details. Works only in renderer. Returns: void navigate # \u25b8 navigate ( location : LocationDescriptor): void Defined in src/renderer/navigation.ts:17 Navigate to a location. Works only in renderer. Parameters: Name Type location LocationDescriptor Returns: void showDetails # \u25b8 showDetails ( path : string, resetSelected : boolean): void Defined in src/renderer/navigation.ts:83 Show details. Works only in renderer. Parameters: Name Type Default path string - resetSelected boolean true Returns: void","title":"Module: \"renderer-api/navigation\""},{"location":"extensions/api/modules/_renderer_api_navigation_/#module-renderer-apinavigation","text":"","title":"Module: \"renderer-api/navigation\""},{"location":"extensions/api/modules/_renderer_api_navigation_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_navigation_/#interfaces","text":"IURLParams","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_navigation_/#functions","text":"getDetailsUrl hideDetails navigate showDetails","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_navigation_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_navigation_/#getdetailsurl","text":"\u25b8 getDetailsUrl ( details : string): string Defined in src/renderer/navigation.ts:71 Parameters: Name Type details string Returns: string","title":"getDetailsUrl"},{"location":"extensions/api/modules/_renderer_api_navigation_/#hidedetails","text":"\u25b8 hideDetails (): void Defined in src/renderer/navigation.ts:93 Hide details. Works only in renderer. Returns: void","title":"hideDetails"},{"location":"extensions/api/modules/_renderer_api_navigation_/#navigate","text":"\u25b8 navigate ( location : LocationDescriptor): void Defined in src/renderer/navigation.ts:17 Navigate to a location. Works only in renderer. Parameters: Name Type location LocationDescriptor Returns: void","title":"navigate"},{"location":"extensions/api/modules/_renderer_api_navigation_/#showdetails","text":"\u25b8 showDetails ( path : string, resetSelected : boolean): void Defined in src/renderer/navigation.ts:83 Show details. Works only in renderer. Parameters: Name Type Default path string - resetSelected boolean true Returns: void","title":"showDetails"},{"location":"extensions/api/modules/_renderer_api_theming_/","text":"Module: \"renderer-api/theming\" # Index # Functions # getActiveTheme Functions # getActiveTheme # \u25b8 getActiveTheme (): Theme Defined in src/extensions/renderer-api/theming.ts:3 Returns: Theme","title":"Module: \"renderer-api/theming\""},{"location":"extensions/api/modules/_renderer_api_theming_/#module-renderer-apitheming","text":"","title":"Module: \"renderer-api/theming\""},{"location":"extensions/api/modules/_renderer_api_theming_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_theming_/#functions","text":"getActiveTheme","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_theming_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_theming_/#getactivetheme","text":"\u25b8 getActiveTheme (): Theme Defined in src/extensions/renderer-api/theming.ts:3 Returns: Theme","title":"getActiveTheme"},{"location":"extensions/capabilities/","text":"","title":"Index"},{"location":"extensions/capabilities/color-reference/","text":"Theme Color Reference # You can use theme-based CSS Variables to style an extension according to the active theme. Base Colors # --blue : blue color. --magenta : magenta color. --golden : gold/yellow color. --halfGray : gray with some apacity applied. --primary : Lens brand (blue) color. --colorSuccess : successfull operations color. --colorOk : successfull operations (bright version) color. --colorInfo : informational, in-progress color. --colorError : critical error color. --colorSoftError : error color. --colorWarning : warning color. --colorVague : soft gray color for notices, hints etc. --colorTerminated : terminated, closed, stale color. --boxShadow : semi-transparent box-shadow color. Text Colors # --textColorPrimary : foreground text color. --textColorSecondary : foreground text color for different paragraps, parts of text. --textColorAccent : foreground text color to highlight its parts. Border Colors # --borderColor : border color. --borderFaintColor : fainted (lighter or darker, which depends on the theme) border color. Layout Colors # --mainBackground : main background color for the app. --contentColor : background color for panels contains some data. --layoutBackground : background color for layout parts. --layoutTabsBackground : background color for general tabs. --layoutTabsActiveColor : foreground color for general tabs. --layoutTabsLineColor : background color for lines under general tabs. Sidebar Colors # --sidebarLogoBackground : background color behind logo in sidebar. --sidebarActiveColor : foreground color for active menu items in sidebar. --sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. --sidebarBackground : background color for sidebar. Button Colors # --buttonPrimaryBackground : button background color for primary actions. --buttonDefaultBackground : default button background color. --buttonAccentBackground : accent button background color. --buttonDisabledBackground : disabled button background color. Table Colors # --tableBgcStripe : background color for odd rows in table. --tableBgcSelected : background color for selected row in table. --tableHeaderBackground : background color for table header. --tableHeaderBorderWidth : border width under table header. --tableHeaderBorderColor : border color for line under table header. --tableHeaderColor : foreground color for table header. --tableSelectedRowColor : foreground color for selected row in table. Dock Colors # --dockHeadBackground : background color for dock's header. --dockInfoBackground : background color for dock's info panel. --dockInfoBorderColor : border color for dock's info panel. Helm Chart Colors # --helmLogoBackground : background color for chart logo. --helmImgBackground : background color for chart image. --helmStableRepo : background color for stable repo. --helmIncubatorRepo : background color for incubator repo. --helmDescriptionHr : Helm chart description separator line color. --helmDescriptionBlockqouteColor : Helm chart description blockquote color. --helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. --helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. --helmDescriptionHeaders : Helm chart description headers color. --helmDescriptionH6 : Helm chart description header foreground color. --helmDescriptionTdBorder : Helm chart description table cell border color. --helmDescriptionTrBackground : Helm chart description table row background color. --helmDescriptionCodeBackground : Helm chart description code background color. --helmDescriptionPreBackground : Helm chart description pre background color. --helmDescriptionPreColor : Helm chart description pre foreground color. Terminal Colors # --terminalBackground : Terminal background color. --terminalForeground : Terminal foreground color. --terminalCursor : Terminal cursor color. --terminalCursorAccent : Terminal cursor accent color. --terminalSelection : Terminal selection background color. --terminalBlack : Terminal black color. --terminalRed : Terminal red color. --terminalGreen : Terminal green color. --terminalYellow : Terminal yellow color. --terminalBlue : Terminal blue color. --terminalMagenta : Terminal magenta color. --terminalCyan : Terminal cyan color. --terminalWhite : Terminal white color. --terminalBrightBlack : Terminal bright black color. --terminalBrightRed : Terminal bright red color. --terminalBrightGreen : Terminal bright green color. --terminalBrightYellow : Terminal bright yellow color. --terminalBrightBlue : Terminal bright blue color. --terminalBrightMagenta : Terminal bright magenta color. --terminalBrightCyan : Terminal bright cyan color. --terminalBrightWhite : Terminal bright white color. Dialog Colors # --dialogHeaderBackground : background color for dialog header. --dialogFooterBackground : background color for dialog footer. Detail Panel (Drawer) Colors # --drawerTitleText : drawer title foreground color. --drawerSubtitleBackground : drawer subtitle foreground color. --drawerItemNameColor : foreground color for item name in drawer. --drawerItemValueColor : foreground color for item value in drawer. Misc Colors # --logsBackground : background color for pod logs. --clusterMenuBackground : background color for cluster menu. --clusterMenuBorderColor : border color for cluster menu. --clusterSettingsBackground : background color for cluster settings. --addClusterIconColor : add cluster button background color. --iconActiveColor : active cluster icon foreground color. --iconActiveBackground : active cluster icon background color. --filterAreaBackground : page filter area (where selected namespaces are lister) background color. --chartStripesColor : bar chart zebra stripes background color. --chartCapacityColor : background color for capacity values in bar charts. --pieChartDefaultColor : default background color for pie chart values. --selectOptionHoveredColor : foregrond color for selected element in dropdown list. --lineProgressBackground : background color for progress line. --radioActiveBackground : background color for active radio buttons. --menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Color Reference"},{"location":"extensions/capabilities/color-reference/#theme-color-reference","text":"You can use theme-based CSS Variables to style an extension according to the active theme.","title":"Theme Color Reference"},{"location":"extensions/capabilities/color-reference/#base-colors","text":"--blue : blue color. --magenta : magenta color. --golden : gold/yellow color. --halfGray : gray with some apacity applied. --primary : Lens brand (blue) color. --colorSuccess : successfull operations color. --colorOk : successfull operations (bright version) color. --colorInfo : informational, in-progress color. --colorError : critical error color. --colorSoftError : error color. --colorWarning : warning color. --colorVague : soft gray color for notices, hints etc. --colorTerminated : terminated, closed, stale color. --boxShadow : semi-transparent box-shadow color.","title":"Base Colors"},{"location":"extensions/capabilities/color-reference/#text-colors","text":"--textColorPrimary : foreground text color. --textColorSecondary : foreground text color for different paragraps, parts of text. --textColorAccent : foreground text color to highlight its parts.","title":"Text Colors"},{"location":"extensions/capabilities/color-reference/#border-colors","text":"--borderColor : border color. --borderFaintColor : fainted (lighter or darker, which depends on the theme) border color.","title":"Border Colors"},{"location":"extensions/capabilities/color-reference/#layout-colors","text":"--mainBackground : main background color for the app. --contentColor : background color for panels contains some data. --layoutBackground : background color for layout parts. --layoutTabsBackground : background color for general tabs. --layoutTabsActiveColor : foreground color for general tabs. --layoutTabsLineColor : background color for lines under general tabs.","title":"Layout Colors"},{"location":"extensions/capabilities/color-reference/#sidebar-colors","text":"--sidebarLogoBackground : background color behind logo in sidebar. --sidebarActiveColor : foreground color for active menu items in sidebar. --sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. --sidebarBackground : background color for sidebar.","title":"Sidebar Colors"},{"location":"extensions/capabilities/color-reference/#button-colors","text":"--buttonPrimaryBackground : button background color for primary actions. --buttonDefaultBackground : default button background color. --buttonAccentBackground : accent button background color. --buttonDisabledBackground : disabled button background color.","title":"Button Colors"},{"location":"extensions/capabilities/color-reference/#table-colors","text":"--tableBgcStripe : background color for odd rows in table. --tableBgcSelected : background color for selected row in table. --tableHeaderBackground : background color for table header. --tableHeaderBorderWidth : border width under table header. --tableHeaderBorderColor : border color for line under table header. --tableHeaderColor : foreground color for table header. --tableSelectedRowColor : foreground color for selected row in table.","title":"Table Colors"},{"location":"extensions/capabilities/color-reference/#dock-colors","text":"--dockHeadBackground : background color for dock's header. --dockInfoBackground : background color for dock's info panel. --dockInfoBorderColor : border color for dock's info panel.","title":"Dock Colors"},{"location":"extensions/capabilities/color-reference/#helm-chart-colors","text":"--helmLogoBackground : background color for chart logo. --helmImgBackground : background color for chart image. --helmStableRepo : background color for stable repo. --helmIncubatorRepo : background color for incubator repo. --helmDescriptionHr : Helm chart description separator line color. --helmDescriptionBlockqouteColor : Helm chart description blockquote color. --helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. --helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. --helmDescriptionHeaders : Helm chart description headers color. --helmDescriptionH6 : Helm chart description header foreground color. --helmDescriptionTdBorder : Helm chart description table cell border color. --helmDescriptionTrBackground : Helm chart description table row background color. --helmDescriptionCodeBackground : Helm chart description code background color. --helmDescriptionPreBackground : Helm chart description pre background color. --helmDescriptionPreColor : Helm chart description pre foreground color.","title":"Helm Chart Colors"},{"location":"extensions/capabilities/color-reference/#terminal-colors","text":"--terminalBackground : Terminal background color. --terminalForeground : Terminal foreground color. --terminalCursor : Terminal cursor color. --terminalCursorAccent : Terminal cursor accent color. --terminalSelection : Terminal selection background color. --terminalBlack : Terminal black color. --terminalRed : Terminal red color. --terminalGreen : Terminal green color. --terminalYellow : Terminal yellow color. --terminalBlue : Terminal blue color. --terminalMagenta : Terminal magenta color. --terminalCyan : Terminal cyan color. --terminalWhite : Terminal white color. --terminalBrightBlack : Terminal bright black color. --terminalBrightRed : Terminal bright red color. --terminalBrightGreen : Terminal bright green color. --terminalBrightYellow : Terminal bright yellow color. --terminalBrightBlue : Terminal bright blue color. --terminalBrightMagenta : Terminal bright magenta color. --terminalBrightCyan : Terminal bright cyan color. --terminalBrightWhite : Terminal bright white color.","title":"Terminal Colors"},{"location":"extensions/capabilities/color-reference/#dialog-colors","text":"--dialogHeaderBackground : background color for dialog header. --dialogFooterBackground : background color for dialog footer.","title":"Dialog Colors"},{"location":"extensions/capabilities/color-reference/#detail-panel-drawer-colors","text":"--drawerTitleText : drawer title foreground color. --drawerSubtitleBackground : drawer subtitle foreground color. --drawerItemNameColor : foreground color for item name in drawer. --drawerItemValueColor : foreground color for item value in drawer.","title":"Detail Panel (Drawer) Colors"},{"location":"extensions/capabilities/color-reference/#misc-colors","text":"--logsBackground : background color for pod logs. --clusterMenuBackground : background color for cluster menu. --clusterMenuBorderColor : border color for cluster menu. --clusterSettingsBackground : background color for cluster settings. --addClusterIconColor : add cluster button background color. --iconActiveColor : active cluster icon foreground color. --iconActiveBackground : active cluster icon background color. --filterAreaBackground : page filter area (where selected namespaces are lister) background color. --chartStripesColor : bar chart zebra stripes background color. --chartCapacityColor : background color for capacity values in bar charts. --pieChartDefaultColor : default background color for pie chart values. --selectOptionHoveredColor : foregrond color for selected element in dropdown list. --lineProgressBackground : background color for progress line. --radioActiveBackground : background color for active radio buttons. --menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Misc Colors"},{"location":"extensions/capabilities/common-capabilities/","text":"Common Capabilities # Here we will discuss common and important building blocks for your extensions, and explain how you can use them. Almost all extensions use some of these functionalities. Main Extension # The main extension runs in the background. It adds app menu items to the Lens UI. In order to see logs from this extension, you need to start Lens from the command line. Activate # This extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } App Menus # This extension can register custom app menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] } Renderer Extension # The renderer extension runs in a browser context, and is visible in Lens's main window. In order to see logs from this extension you need to check them via View > Toggle Developer Tools > Console . Activate # This extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } Global Pages # This extension can register custom global pages (views) to Lens's main window. The global page is a full-screen page that hides all other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { id : \"example\" , components : { Page : ExamplePage , } } ] globalPageMenus = [ { title : \"Example page\" , // used in icon's tooltip target : { pageId : \"example\" } components : { Icon : () => < Component . Icon material = \"arrow\" /> , } } ] } App Preferences # This extension can register custom app preferences. It is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] } Cluster Pages # This extension can register custom cluster pages. These pages are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , // optional exact : true , // optional components : { Page : () => < ExamplePage extension = { this } /> , } } ] clusterPageMenus = [ { url : \"/extension-example\" , // optional title : \"Example Extension\" , components : { Icon : ExampleIcon , } } ] } Cluster Features # This extension can register installable features for a cluster. These features are visible in the \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] } Status Bar Items # This extension can register custom icons and text to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => this . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" /> < /div> ) } ] } Kubernetes Object Menu Items # This extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] } Kubernetes Object Details # This extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#common-capabilities","text":"Here we will discuss common and important building blocks for your extensions, and explain how you can use them. Almost all extensions use some of these functionalities.","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#main-extension","text":"The main extension runs in the background. It adds app menu items to the Lens UI. In order to see logs from this extension, you need to start Lens from the command line.","title":"Main Extension"},{"location":"extensions/capabilities/common-capabilities/#activate","text":"This extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate","text":"This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#app-menus","text":"This extension can register custom app menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] }","title":"App Menus"},{"location":"extensions/capabilities/common-capabilities/#renderer-extension","text":"The renderer extension runs in a browser context, and is visible in Lens's main window. In order to see logs from this extension you need to check them via View > Toggle Developer Tools > Console .","title":"Renderer Extension"},{"location":"extensions/capabilities/common-capabilities/#activate_1","text":"This extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate_1","text":"This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#global-pages","text":"This extension can register custom global pages (views) to Lens's main window. The global page is a full-screen page that hides all other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { id : \"example\" , components : { Page : ExamplePage , } } ] globalPageMenus = [ { title : \"Example page\" , // used in icon's tooltip target : { pageId : \"example\" } components : { Icon : () => < Component . Icon material = \"arrow\" /> , } } ] }","title":"Global Pages"},{"location":"extensions/capabilities/common-capabilities/#app-preferences","text":"This extension can register custom app preferences. It is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] }","title":"App Preferences"},{"location":"extensions/capabilities/common-capabilities/#cluster-pages","text":"This extension can register custom cluster pages. These pages are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , // optional exact : true , // optional components : { Page : () => < ExamplePage extension = { this } /> , } } ] clusterPageMenus = [ { url : \"/extension-example\" , // optional title : \"Example Extension\" , components : { Icon : ExampleIcon , } } ] }","title":"Cluster Pages"},{"location":"extensions/capabilities/common-capabilities/#cluster-features","text":"This extension can register installable features for a cluster. These features are visible in the \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] }","title":"Cluster Features"},{"location":"extensions/capabilities/common-capabilities/#status-bar-items","text":"This extension can register custom icons and text to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => this . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" /> < /div> ) } ] }","title":"Status Bar Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-menu-items","text":"This extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] }","title":"Kubernetes Object Menu Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-details","text":"This extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Kubernetes Object Details"},{"location":"extensions/capabilities/styling/","text":"Styling an Extension # Lens provides a set of global styles and UI components that can be used by any extension to preserve the look and feel of the application. Layout # For layout tasks, Lens uses the flex.box library which provides helpful class names to specify some of the flexbox properties. For example, consider the following HTML and its associated CSS properties: < div className = \"flex column align-center\" > div { display : flex ; flex-direction : column ; align-items : center ; } However, you are free to use any styling technique or framework you like, including Emotion or even plain CSS. Layout Variables # There is a set of CSS variables available for for basic layout needs. They are located inside :root and are defined in app.scss : --unit : 8px ; --padding : var ( --unit ); --margin : var ( --unit ); --border-radius : 3px ; These variables are intended to set consistent margins and paddings across components. For example: . status { padding-left : calc ( var ( -- padding ) * 2 ); border-radius : var ( -- border - radius ); } Themes # Lens uses two built-in themes defined in the themes directory \u2013 one light and one dark. Theme Variables # When Lens is loaded, it transforms the selected theme's json file into a list of CSS Custom Properties (CSS Variables) . This list then gets injected into the :root element so that any of the down-level components can use them. When the user changes the theme, the above process is repeated, and new CSS variables appear, replacing the previous ones. If you want to preserve Lens's native look and feel, with respect to the lightness or darkness of your extension, you can use the provided variables and built-in Lens components such as Button , Select , Table , and so on. There is a set of CSS variables available for extensions to use for theming. They are all located inside :root and are defined in app.scss : --font-main : 'Roboto' , 'Helvetica' , 'Arial' , sans-serif ; --font-monospace : Lucida Console , Monaco , Consolas , monospace ; --font-size-small : calc ( 1 . 5 * var ( --unit )); --font-size : calc ( 1 . 75 * var ( --unit )); --font-size-big : calc ( 2 * var ( --unit )); --font-weight-thin : 300 ; --font-weight-normal : 400 ; --font-weight-bold : 500 ; as well as in the theme modules : --blue: #3d90ce; --magenta: #c93dce; --golden: #ffc63d; --halfGray: #87909c80; --primary: #3d90ce; --textColorPrimary: #555555; --textColorSecondary: #51575d; --textColorAccent: #333333; --borderColor: #c9cfd3; --borderFaintColor: #dfdfdf; --mainBackground: #f1f1f1; --contentColor: #ffffff; --layoutBackground: #e8e8e8; --layoutTabsBackground: #f8f8f8; --layoutTabsActiveColor: #333333; --layoutTabsLineColor: #87909c80; ... These variables can be used in the following form: var(--magenta) . For example: . status { font-size : var ( -- font - size - small ); background-color : var ( -- colorSuccess ); } A complete list of themable colors can be found in the Color Reference . Theme Switching # When the light theme is active, the element gets a \"theme-light\" class, or: . If the class isn't there, the theme defaults to dark. The active theme can be changed in the Preferences page: There is a way of detect active theme and its changes in JS. MobX observer function/decorator can be used for this purpose. import React from \"react\" import { observer } from \"mobx-react\" import { App , Component , Theme } from \"@k8slens/extensions\" ; @ observer export class SupportPage extends React . Component { render () { return ( < div className = \"SupportPage\" > < h1 > Active theme is { Theme . getActiveTheme (). name } < /h1> < /div> ); } } Theme entity from @k8slens/extensions provides active theme object and @observer decorator makes component reactive - so it will rerender each time any of the observables (active theme in our case) will be changed. Working example provided in Styling with Emotion sample extension. Injected Styles # Every extension is affected by the list of default global styles defined in app.scss . These are basic browser resets and element styles, including: setting the box-sizing property for every element default text and background colors default font sizes basic heading (h1, h2, etc) formatting custom scrollbar styling Extensions may overwrite these defaults if needed. They have low CSS specificity, so overriding them should be fairly easy. CSS-in-JS # If an extension uses a system like Emotion to work with styles, it can use CSS variables as follows: const Container = styled . div (() => ({ backgroundColor : 'var(--mainBackground)' })); Examples # You can explore samples for each styling technique that you can use for extensions: Styling with Sass Styling with Emotion Styling with CSS Modules","title":"Styling"},{"location":"extensions/capabilities/styling/#styling-an-extension","text":"Lens provides a set of global styles and UI components that can be used by any extension to preserve the look and feel of the application.","title":"Styling an Extension"},{"location":"extensions/capabilities/styling/#layout","text":"For layout tasks, Lens uses the flex.box library which provides helpful class names to specify some of the flexbox properties. For example, consider the following HTML and its associated CSS properties: < div className = \"flex column align-center\" > div { display : flex ; flex-direction : column ; align-items : center ; } However, you are free to use any styling technique or framework you like, including Emotion or even plain CSS.","title":"Layout"},{"location":"extensions/capabilities/styling/#layout-variables","text":"There is a set of CSS variables available for for basic layout needs. They are located inside :root and are defined in app.scss : --unit : 8px ; --padding : var ( --unit ); --margin : var ( --unit ); --border-radius : 3px ; These variables are intended to set consistent margins and paddings across components. For example: . status { padding-left : calc ( var ( -- padding ) * 2 ); border-radius : var ( -- border - radius ); }","title":"Layout Variables"},{"location":"extensions/capabilities/styling/#themes","text":"Lens uses two built-in themes defined in the themes directory \u2013 one light and one dark.","title":"Themes"},{"location":"extensions/capabilities/styling/#theme-variables","text":"When Lens is loaded, it transforms the selected theme's json file into a list of CSS Custom Properties (CSS Variables) . This list then gets injected into the :root element so that any of the down-level components can use them. When the user changes the theme, the above process is repeated, and new CSS variables appear, replacing the previous ones. If you want to preserve Lens's native look and feel, with respect to the lightness or darkness of your extension, you can use the provided variables and built-in Lens components such as Button , Select , Table , and so on. There is a set of CSS variables available for extensions to use for theming. They are all located inside :root and are defined in app.scss : --font-main : 'Roboto' , 'Helvetica' , 'Arial' , sans-serif ; --font-monospace : Lucida Console , Monaco , Consolas , monospace ; --font-size-small : calc ( 1 . 5 * var ( --unit )); --font-size : calc ( 1 . 75 * var ( --unit )); --font-size-big : calc ( 2 * var ( --unit )); --font-weight-thin : 300 ; --font-weight-normal : 400 ; --font-weight-bold : 500 ; as well as in the theme modules : --blue: #3d90ce; --magenta: #c93dce; --golden: #ffc63d; --halfGray: #87909c80; --primary: #3d90ce; --textColorPrimary: #555555; --textColorSecondary: #51575d; --textColorAccent: #333333; --borderColor: #c9cfd3; --borderFaintColor: #dfdfdf; --mainBackground: #f1f1f1; --contentColor: #ffffff; --layoutBackground: #e8e8e8; --layoutTabsBackground: #f8f8f8; --layoutTabsActiveColor: #333333; --layoutTabsLineColor: #87909c80; ... These variables can be used in the following form: var(--magenta) . For example: . status { font-size : var ( -- font - size - small ); background-color : var ( -- colorSuccess ); } A complete list of themable colors can be found in the Color Reference .","title":"Theme Variables"},{"location":"extensions/capabilities/styling/#theme-switching","text":"When the light theme is active, the element gets a \"theme-light\" class, or: . If the class isn't there, the theme defaults to dark. The active theme can be changed in the Preferences page: There is a way of detect active theme and its changes in JS. MobX observer function/decorator can be used for this purpose. import React from \"react\" import { observer } from \"mobx-react\" import { App , Component , Theme } from \"@k8slens/extensions\" ; @ observer export class SupportPage extends React . Component { render () { return ( < div className = \"SupportPage\" > < h1 > Active theme is { Theme . getActiveTheme (). name } < /h1> < /div> ); } } Theme entity from @k8slens/extensions provides active theme object and @observer decorator makes component reactive - so it will rerender each time any of the observables (active theme in our case) will be changed. Working example provided in Styling with Emotion sample extension.","title":"Theme Switching"},{"location":"extensions/capabilities/styling/#injected-styles","text":"Every extension is affected by the list of default global styles defined in app.scss . These are basic browser resets and element styles, including: setting the box-sizing property for every element default text and background colors default font sizes basic heading (h1, h2, etc) formatting custom scrollbar styling Extensions may overwrite these defaults if needed. They have low CSS specificity, so overriding them should be fairly easy.","title":"Injected Styles"},{"location":"extensions/capabilities/styling/#css-in-js","text":"If an extension uses a system like Emotion to work with styles, it can use CSS variables as follows: const Container = styled . div (() => ({ backgroundColor : 'var(--mainBackground)' }));","title":"CSS-in-JS"},{"location":"extensions/capabilities/styling/#examples","text":"You can explore samples for each styling technique that you can use for extensions: Styling with Sass Styling with Emotion Styling with CSS Modules","title":"Examples"},{"location":"extensions/get-started/anatomy/","text":"Extension Anatomy # In the previous section you learned how to create your first extension. In this section you will learn how this extension works under the hood. The Hello World sample extension does three things: Implements onActivate() and outputs a message to the console. Implements onDectivate() and outputs a message to the console. Registers ClusterPage so that the page is visible in the left-side menu of the cluster dashboard. Let's take a closer look at our Hello World sample's source code and see how these three things are achieved. Extension File Structure # . \u251c\u2500\u2500 .gitignore // Ignore build output and node_modules \u251c\u2500\u2500 Makefile // Config for build tasks that compiles the extension \u251c\u2500\u2500 README.md // Readable description of your extension's functionality \u251c\u2500\u2500 src \u2502 \u2514\u2500\u2500 page.tsx // Extension's additional source code \u251c\u2500\u2500 main.ts // Source code for extension's main entrypoint \u251c\u2500\u2500 package.json // Extension manifest and dependencies \u251c\u2500\u2500 renderer.tsx // Source code for extension's renderer entrypoint \u251c\u2500\u2500 tsconfig.json // TypeScript configuration \u251c\u2500\u2500 webpack.config.js // Webpack configuration The extension directory contains the extension's entry files and a few configuration files. Three files: package.json , main.ts and renderer.tsx are essential to understanding the Hello World sample extension. We'll look at those first. Extension Manifest # Each Lens extension must have a package.json file. It contains a mix of Node.js fields, including scripts and dependencies, and Lens-specific fields such as publisher and contributes . Some of the most-important fields include: name and publisher : Lens uses @/ as a unique ID for the extension. For example, the Hello World sample has the ID @lensapp-samples/helloworld-sample . Lens uses this ID to uniquely identify your extension. main : the extension's entry point run in main process. renderer : the extension's entry point run in renderer process. engines.lens : the minimum version of Lens API that the extension depends upon. { \"name\" : \"helloworld-sample\" , \"publisher\" : \"lens-samples\" , \"version\" : \"0.0.1\" , \"description\" : \"Lens helloworld-sample\" , \"license\" : \"MIT\" , \"homepage\" : \"https://github.com/lensapp/lens-extension-samples\" , \"engines\" : { \"lens\" : \"^4.0.0\" }, \"main\" : \"dist/main.js\" , \"renderer\" : \"dist/renderer.js\" , \"scripts\" : { \"build\" : \"webpack --config webpack.config.js\" , \"dev\" : \"npm run build --watch\" }, \"dependencies\" : { \"react-open-doodles\" : \"^1.0.5\" }, \"devDependencies\" : { \"@k8slens/extensions\" : \"^4.0.0-alpha.2\" , \"ts-loader\" : \"^8.0.4\" , \"typescript\" : \"^4.0.3\" , \"@types/react\" : \"^16.9.35\" , \"@types/node\" : \"^12.0.0\" , \"webpack\" : \"^4.44.2\" , \"webpack-cli\" : \"^3.3.11\" } } Extension Entry Files # Lens extensions can have two separate entry files. One file is used in the main process of the Lens application and the other is used in the renderer process. The main entry file exports the class that extends LensMainExtension , and the renderer entry file exports the class that extends LensRendererExtension . Both extension classes have onActivate and onDeactivate methods. The onActivate method is executed when your extension is activated. If you need to initialize something in your extension, this is where such an operation should occur. The onDeactivate method gives you a chance to clean up before your extension becomes deactivated. For extensions where explicit cleanup is not required, you don't need to override this method. However, if an extension needs to perform an operation when Lens is shutting down (or if the extension is disabled or uninstalled), this is the method where such an operation should occur. The Hello World sample extension does not do anything on the main process, so we'll focus on the renderer process, instead. On the renderer entry point, the Hello World sample extension defines the Cluster Page object. The Cluster Page object registers the /extension-example path, and this path renders the ExamplePage React component. It also registers the MenuItem component that displays the ExampleIcon React component and the \"Hello World\" text in the left-side menu of the cluster dashboard. These React components are defined in the additional ./src/page.tsx file. import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ] } The Hello World sample extension uses the Cluster Page capability, which is just one of the Lens extension API's capabilities. The Common Capabilities page will help you home in on the right capabilities to use with your own extensions.","title":"Extension Anatomy"},{"location":"extensions/get-started/anatomy/#extension-anatomy","text":"In the previous section you learned how to create your first extension. In this section you will learn how this extension works under the hood. The Hello World sample extension does three things: Implements onActivate() and outputs a message to the console. Implements onDectivate() and outputs a message to the console. Registers ClusterPage so that the page is visible in the left-side menu of the cluster dashboard. Let's take a closer look at our Hello World sample's source code and see how these three things are achieved.","title":"Extension Anatomy"},{"location":"extensions/get-started/anatomy/#extension-file-structure","text":". \u251c\u2500\u2500 .gitignore // Ignore build output and node_modules \u251c\u2500\u2500 Makefile // Config for build tasks that compiles the extension \u251c\u2500\u2500 README.md // Readable description of your extension's functionality \u251c\u2500\u2500 src \u2502 \u2514\u2500\u2500 page.tsx // Extension's additional source code \u251c\u2500\u2500 main.ts // Source code for extension's main entrypoint \u251c\u2500\u2500 package.json // Extension manifest and dependencies \u251c\u2500\u2500 renderer.tsx // Source code for extension's renderer entrypoint \u251c\u2500\u2500 tsconfig.json // TypeScript configuration \u251c\u2500\u2500 webpack.config.js // Webpack configuration The extension directory contains the extension's entry files and a few configuration files. Three files: package.json , main.ts and renderer.tsx are essential to understanding the Hello World sample extension. We'll look at those first.","title":"Extension File Structure"},{"location":"extensions/get-started/anatomy/#extension-manifest","text":"Each Lens extension must have a package.json file. It contains a mix of Node.js fields, including scripts and dependencies, and Lens-specific fields such as publisher and contributes . Some of the most-important fields include: name and publisher : Lens uses @/ as a unique ID for the extension. For example, the Hello World sample has the ID @lensapp-samples/helloworld-sample . Lens uses this ID to uniquely identify your extension. main : the extension's entry point run in main process. renderer : the extension's entry point run in renderer process. engines.lens : the minimum version of Lens API that the extension depends upon. { \"name\" : \"helloworld-sample\" , \"publisher\" : \"lens-samples\" , \"version\" : \"0.0.1\" , \"description\" : \"Lens helloworld-sample\" , \"license\" : \"MIT\" , \"homepage\" : \"https://github.com/lensapp/lens-extension-samples\" , \"engines\" : { \"lens\" : \"^4.0.0\" }, \"main\" : \"dist/main.js\" , \"renderer\" : \"dist/renderer.js\" , \"scripts\" : { \"build\" : \"webpack --config webpack.config.js\" , \"dev\" : \"npm run build --watch\" }, \"dependencies\" : { \"react-open-doodles\" : \"^1.0.5\" }, \"devDependencies\" : { \"@k8slens/extensions\" : \"^4.0.0-alpha.2\" , \"ts-loader\" : \"^8.0.4\" , \"typescript\" : \"^4.0.3\" , \"@types/react\" : \"^16.9.35\" , \"@types/node\" : \"^12.0.0\" , \"webpack\" : \"^4.44.2\" , \"webpack-cli\" : \"^3.3.11\" } }","title":"Extension Manifest"},{"location":"extensions/get-started/anatomy/#extension-entry-files","text":"Lens extensions can have two separate entry files. One file is used in the main process of the Lens application and the other is used in the renderer process. The main entry file exports the class that extends LensMainExtension , and the renderer entry file exports the class that extends LensRendererExtension . Both extension classes have onActivate and onDeactivate methods. The onActivate method is executed when your extension is activated. If you need to initialize something in your extension, this is where such an operation should occur. The onDeactivate method gives you a chance to clean up before your extension becomes deactivated. For extensions where explicit cleanup is not required, you don't need to override this method. However, if an extension needs to perform an operation when Lens is shutting down (or if the extension is disabled or uninstalled), this is the method where such an operation should occur. The Hello World sample extension does not do anything on the main process, so we'll focus on the renderer process, instead. On the renderer entry point, the Hello World sample extension defines the Cluster Page object. The Cluster Page object registers the /extension-example path, and this path renders the ExamplePage React component. It also registers the MenuItem component that displays the ExampleIcon React component and the \"Hello World\" text in the left-side menu of the cluster dashboard. These React components are defined in the additional ./src/page.tsx file. import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ] } The Hello World sample extension uses the Cluster Page capability, which is just one of the Lens extension API's capabilities. The Common Capabilities page will help you home in on the right capabilities to use with your own extensions.","title":"Extension Entry Files"},{"location":"extensions/get-started/overview/","text":"Extension Development Overview # This is a general overview to how the development of an extension will procede. For building extensions there will be a few things that you should have installed, and some other things that might be of help. Required: # Node.js Git Some sort of text editor \u2013 we recommend VSCode We use Webpack for compilation. All extension need to be at least compatable with a webpack system. Recommended: # All Lens extensions are javascript packages. We recommend that you program in Typescript because it catches many common errors. Lens is a standard Electron application with both main and renderer processes. An extension is made up of two parts, one for each of Lens's core processes. When an extension is loaded, each part is first loaded and issues a notification that it has been loaded. From there, the extension can start doing is work. Lens uses React as its UI framework and provides some of Lens's own components for reuse with extensions. An extension is resonsible for the lifetime of any resources it spins up. If an extension's main part starts new processes they all must be stopped and cleaned up when the extension is deactivated or unloaded. See Your First Extension to get started.","title":"Overview"},{"location":"extensions/get-started/overview/#extension-development-overview","text":"This is a general overview to how the development of an extension will procede. For building extensions there will be a few things that you should have installed, and some other things that might be of help.","title":"Extension Development Overview"},{"location":"extensions/get-started/overview/#required","text":"Node.js Git Some sort of text editor \u2013 we recommend VSCode We use Webpack for compilation. All extension need to be at least compatable with a webpack system.","title":"Required:"},{"location":"extensions/get-started/overview/#recommended","text":"All Lens extensions are javascript packages. We recommend that you program in Typescript because it catches many common errors. Lens is a standard Electron application with both main and renderer processes. An extension is made up of two parts, one for each of Lens's core processes. When an extension is loaded, each part is first loaded and issues a notification that it has been loaded. From there, the extension can start doing is work. Lens uses React as its UI framework and provides some of Lens's own components for reuse with extensions. An extension is resonsible for the lifetime of any resources it spins up. If an extension's main part starts new processes they all must be stopped and cleaned up when the extension is deactivated or unloaded. See Your First Extension to get started.","title":"Recommended:"},{"location":"extensions/get-started/wrapping-up/","text":"Wrapping Up # In Your First Extension , you learned how to create and run an extension. In Extension Anatomy , you learned in detail how a basic extension works. This is just a glimpse into what can be created with Lens extensions. Below are some suggested routes for learning more. Extension Capabilities # In this section, you'll find information on common extension capabilities, styling information, and a color reference guide. Determine whether your idea for an extension is doable and get ideas for new extensions by reading through the Common Capabilities page. Guides and Samples # Here you'll find a collection of sample extensions that you can use as a base to work from. Some of these samples include a detailed guide that explains the source code. You can find all samples and guides in the lens-extension-samples repository. Testing and Publishing # In this section, you can learn: How to add integration tests to your extension How to publish your extension","title":"Wrapping Up"},{"location":"extensions/get-started/wrapping-up/#wrapping-up","text":"In Your First Extension , you learned how to create and run an extension. In Extension Anatomy , you learned in detail how a basic extension works. This is just a glimpse into what can be created with Lens extensions. Below are some suggested routes for learning more.","title":"Wrapping Up"},{"location":"extensions/get-started/wrapping-up/#extension-capabilities","text":"In this section, you'll find information on common extension capabilities, styling information, and a color reference guide. Determine whether your idea for an extension is doable and get ideas for new extensions by reading through the Common Capabilities page.","title":"Extension Capabilities"},{"location":"extensions/get-started/wrapping-up/#guides-and-samples","text":"Here you'll find a collection of sample extensions that you can use as a base to work from. Some of these samples include a detailed guide that explains the source code. You can find all samples and guides in the lens-extension-samples repository.","title":"Guides and Samples"},{"location":"extensions/get-started/wrapping-up/#testing-and-publishing","text":"In this section, you can learn: How to add integration tests to your extension How to publish your extension","title":"Testing and Publishing"},{"location":"extensions/get-started/your-first-extension/","text":"Your First Extension # We recommend to always use Yeoman generator for Lens Extension to start new extension project. Read the generator guide here . If you want to setup the project manually, please continue reading. First Extension # In this topic, you'll learn the basics of building extensions by creating an extension that adds a \"Hello World\" page to a cluster menu. Install the Extension # To install the extension, clone the Lens Extension samples repository to your local machine: git clone https://github.com/lensapp/lens-extension-samples.git Next you need to create a symlink. A symlink connects the directory that Lens will monitor for user-installed extensions to the sample extension. In this case the sample extension is helloworld-sample . Linux & macOS # mkdir -p ~/.k8slens/extensions cd ~/.k8slens/extensions ln -s lens-extension-samples/helloworld-sample helloworld-sample Windows # Create the directory that Lens will monitor for user-installed extensions: mkdir C: \\U sers \\< user> \\. k8slens \\e xtensions -force cd C: \\U sers \\< user> \\. k8slens \\e xtensions If you have administrator rights, you can create symlink to the sample extension \u2013 in this case helloworld-sample : cmd /c mklink /D helloworld-sample lens-extension-samples \\h elloworld-sample Without administrator rights, you need to copy the extensions sample directory into C:\\Users\\\\.k8slens\\extensions : Copy-Item 'lens-extension-samples\\helloworld-sample' 'C:\\Users\\\\.k8slens\\extensions\\helloworld-sample' Build the Extension # To build the extension you can use make or run the npm commands manually: cd /helloworld-sample make build To run the npm commands, enter: cd /helloworld-sample npm install npm run build Optionally, automatically rebuild the extension by watching for changes to the source code. To do so, enter: cd /helloworld-sample npm run dev You must restart Lens for the extension to load. After this initial restart, reload Lens and it will automatically pick up changes any time the extension rebuilds. With Lens running, either connect to an existing cluster or create a new one . You will see the \"Hello World\" page in the left-side cluster menu. Develop the Extension # Finally, you'll make a change to the message that our Hello World sample extension displays: Navigate to /helloworld-sample . In page.tsx , change the message from HelloWorld! to Hello Lens Extensions . Rebuild the extension. If you used npm run dev , the extension will rebuild automatically. Reload the Lens window. Click on the Hello World page. The updated message will appear. Next Steps # In the next topic , we'll take a closer look at the source code of our Hello World sample. You can find the source code for this tutorial at: lensapp/lens-extension-samples . Extension Guides contains additional samples.","title":"Your First Extension"},{"location":"extensions/get-started/your-first-extension/#your-first-extension","text":"We recommend to always use Yeoman generator for Lens Extension to start new extension project. Read the generator guide here . If you want to setup the project manually, please continue reading.","title":"Your First Extension"},{"location":"extensions/get-started/your-first-extension/#first-extension","text":"In this topic, you'll learn the basics of building extensions by creating an extension that adds a \"Hello World\" page to a cluster menu.","title":"First Extension"},{"location":"extensions/get-started/your-first-extension/#install-the-extension","text":"To install the extension, clone the Lens Extension samples repository to your local machine: git clone https://github.com/lensapp/lens-extension-samples.git Next you need to create a symlink. A symlink connects the directory that Lens will monitor for user-installed extensions to the sample extension. In this case the sample extension is helloworld-sample .","title":"Install the Extension"},{"location":"extensions/get-started/your-first-extension/#linux-macos","text":"mkdir -p ~/.k8slens/extensions cd ~/.k8slens/extensions ln -s lens-extension-samples/helloworld-sample helloworld-sample","title":"Linux & macOS"},{"location":"extensions/get-started/your-first-extension/#windows","text":"Create the directory that Lens will monitor for user-installed extensions: mkdir C: \\U sers \\< user> \\. k8slens \\e xtensions -force cd C: \\U sers \\< user> \\. k8slens \\e xtensions If you have administrator rights, you can create symlink to the sample extension \u2013 in this case helloworld-sample : cmd /c mklink /D helloworld-sample lens-extension-samples \\h elloworld-sample Without administrator rights, you need to copy the extensions sample directory into C:\\Users\\\\.k8slens\\extensions : Copy-Item 'lens-extension-samples\\helloworld-sample' 'C:\\Users\\\\.k8slens\\extensions\\helloworld-sample'","title":"Windows"},{"location":"extensions/get-started/your-first-extension/#build-the-extension","text":"To build the extension you can use make or run the npm commands manually: cd /helloworld-sample make build To run the npm commands, enter: cd /helloworld-sample npm install npm run build Optionally, automatically rebuild the extension by watching for changes to the source code. To do so, enter: cd /helloworld-sample npm run dev You must restart Lens for the extension to load. After this initial restart, reload Lens and it will automatically pick up changes any time the extension rebuilds. With Lens running, either connect to an existing cluster or create a new one . You will see the \"Hello World\" page in the left-side cluster menu.","title":"Build the Extension"},{"location":"extensions/get-started/your-first-extension/#develop-the-extension","text":"Finally, you'll make a change to the message that our Hello World sample extension displays: Navigate to /helloworld-sample . In page.tsx , change the message from HelloWorld! to Hello Lens Extensions . Rebuild the extension. If you used npm run dev , the extension will rebuild automatically. Reload the Lens window. Click on the Hello World page. The updated message will appear.","title":"Develop the Extension"},{"location":"extensions/get-started/your-first-extension/#next-steps","text":"In the next topic , we'll take a closer look at the source code of our Hello World sample. You can find the source code for this tutorial at: lensapp/lens-extension-samples . Extension Guides contains additional samples.","title":"Next Steps"},{"location":"extensions/guides/","text":"Extension Guides # The basics of the Lens Extension API are covered in Your First Extension . In this section detailed code guides and samples are used to explain how to use specific Lens Extension APIs. Each guide or sample will include: Clearly commented source code. Instructions for running the sample extension. Image of the sample extension's appearance and usage. Listing of Extension API being used. Explanation of Extension API concepts. Guides # Guide APIs Generate new extension project Main process extension LensMainExtension Renderer process extension LensRendererExtension Stores Components KubeObjectListLayout Working with mobx Samples # Sample APIs helloworld LensMainExtension LensRendererExtension Component.Icon Component.IconProps minikube LensMainExtension Store.clusterStore Store.workspaceStore styling-css-modules-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-emotion-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-sass-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps custom-resource-page LensRendererExtension K8sApi.KubeApi K8sApi.KubeObjectStore Component.KubeObjectListLayout Component.KubeObjectDetailsProps Component.IconProps","title":"Overview"},{"location":"extensions/guides/#extension-guides","text":"The basics of the Lens Extension API are covered in Your First Extension . In this section detailed code guides and samples are used to explain how to use specific Lens Extension APIs. Each guide or sample will include: Clearly commented source code. Instructions for running the sample extension. Image of the sample extension's appearance and usage. Listing of Extension API being used. Explanation of Extension API concepts.","title":"Extension Guides"},{"location":"extensions/guides/#guides","text":"Guide APIs Generate new extension project Main process extension LensMainExtension Renderer process extension LensRendererExtension Stores Components KubeObjectListLayout Working with mobx","title":"Guides"},{"location":"extensions/guides/#samples","text":"Sample APIs helloworld LensMainExtension LensRendererExtension Component.Icon Component.IconProps minikube LensMainExtension Store.clusterStore Store.workspaceStore styling-css-modules-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-emotion-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-sass-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps custom-resource-page LensRendererExtension K8sApi.KubeApi K8sApi.KubeObjectStore Component.KubeObjectListLayout Component.KubeObjectDetailsProps Component.IconProps","title":"Samples"},{"location":"extensions/guides/anatomy/","text":"WIP #","title":"Anatomy"},{"location":"extensions/guides/anatomy/#wip","text":"","title":"WIP"},{"location":"extensions/guides/components/","text":"WIP #","title":"Components"},{"location":"extensions/guides/components/#wip","text":"","title":"WIP"},{"location":"extensions/guides/generator/","text":"New Extension Project with Generator # The Lens Extension Generator scaffolds a project ready for development. Install Yeoman and Lens Extension Generator with: npm install -g yo generator-lens-ext Run the generator and fill out a few fields for a TypeScript project: yo lens-ext # ? What type of extension do you want to create? New Extension (TypeScript) # ? What's the name of your extension? my-first-lens-ext # ? What's the description of your extension? My hello world extension # ? What's your extension's publisher name? @my-org/my-first-lens-ext # ? Initialize a git repository? Yes # ? Install dependencies after initialization? Yes # ? Which package manager to use? yarn # ? symlink created extension folder to ~/.k8slens/extensions (mac/linux) or :User s \\< user> \\. k8slens \\e xtensions ( windows ) ? Yes Start webpack, which watches the my-first-lens-ext folder. cd my-first-lens-ext npm start # start the webpack server in watch mode Then, open Lens, you should see a Hello World item in the menu: Developing the Extension # Try to change my-first-lens-ext/renderer.tsx to \"Hello Lens!\": clusterPageMenus = [ { target: { pageId: \"hello\" }, title: \"Hello Lens\", components: { Icon: ExampleIcon, } } ] Then, Reload Lens by CMD+R (Mac) / Ctrl+R (Linux/Windows), you should see the menu item text changes: Debugging the Extension # Testing Next steps # You can take a closer look at Common Capabilities of extension, how to style the extension. Or the Extension Anatomy . You are welcome to raise an issue for Lens Extension Generator, if you find problems, or have feature requests. The source code of the generator is hosted at Github","title":"Generator"},{"location":"extensions/guides/generator/#new-extension-project-with-generator","text":"The Lens Extension Generator scaffolds a project ready for development. Install Yeoman and Lens Extension Generator with: npm install -g yo generator-lens-ext Run the generator and fill out a few fields for a TypeScript project: yo lens-ext # ? What type of extension do you want to create? New Extension (TypeScript) # ? What's the name of your extension? my-first-lens-ext # ? What's the description of your extension? My hello world extension # ? What's your extension's publisher name? @my-org/my-first-lens-ext # ? Initialize a git repository? Yes # ? Install dependencies after initialization? Yes # ? Which package manager to use? yarn # ? symlink created extension folder to ~/.k8slens/extensions (mac/linux) or :User s \\< user> \\. k8slens \\e xtensions ( windows ) ? Yes Start webpack, which watches the my-first-lens-ext folder. cd my-first-lens-ext npm start # start the webpack server in watch mode Then, open Lens, you should see a Hello World item in the menu:","title":"New Extension Project with Generator"},{"location":"extensions/guides/generator/#developing-the-extension","text":"Try to change my-first-lens-ext/renderer.tsx to \"Hello Lens!\": clusterPageMenus = [ { target: { pageId: \"hello\" }, title: \"Hello Lens\", components: { Icon: ExampleIcon, } } ] Then, Reload Lens by CMD+R (Mac) / Ctrl+R (Linux/Windows), you should see the menu item text changes:","title":"Developing the Extension"},{"location":"extensions/guides/generator/#debugging-the-extension","text":"Testing","title":"Debugging the Extension"},{"location":"extensions/guides/generator/#next-steps","text":"You can take a closer look at Common Capabilities of extension, how to style the extension. Or the Extension Anatomy . You are welcome to raise an issue for Lens Extension Generator, if you find problems, or have feature requests. The source code of the generator is hosted at Github","title":"Next steps"},{"location":"extensions/guides/kube-object-list-layout/","text":"WIP #","title":"Kube object list layout"},{"location":"extensions/guides/kube-object-list-layout/#wip","text":"","title":"WIP"},{"location":"extensions/guides/main-extension/","text":"Main Extension # The main extension api is the interface to Lens' main process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom application menu items, and generally run custom code in Lens' main process. LensMainExtension Class # To create a main extension simply extend the LensMainExtension class: import { LensMainExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensMainExtension { onActivate() { console . log ( 'custom main process extension code started' ); } onDeactivate() { console . log ( 'custom main process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. Note that to see standard output from the main process there must be a console connected to it. This is typically achieved by starting Lens from the command prompt. The following example is a little more interesting in that it accesses some Lens state data and periodically logs the name of the currently active cluster in Lens. import { LensMainExtension , Store } from \"@k8slens/extensions\" ; const clusterStore = Store . clusterStore export default class ActiveClusterExtensionMain extends LensMainExtension { timer : NodeJS.Timeout onActivate() { console . log ( \"Cluster logger activated\" ); this . timer = setInterval (() => { if ( ! clusterStore . active ) { console . log ( \"No active cluster\" ); return ; } console . log ( \"active cluster is\" , clusterStore . active . contextName ) }, 5000 ) } onDeactivate() { clearInterval ( this . timer ) console . log ( \"Cluster logger deactivated\" ); } } See the Stores guide for more details on accessing Lens state data. appMenus # The only UI feature customizable in the main extension api is the application menu. Custom menu items can be inserted and linked to custom functionality, such as navigating to a specific page. The following example demonstrates adding a menu item to the Help menu. import { LensMainExtension } from \"@k8slens/extensions\" ; export default class SamplePageMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Sample\" , click() { console . log ( \"Sample clicked\" ); } } ] } appMenus is an array of objects satisfying the MenuRegistration interface. MenuRegistration extends React's MenuItemConstructorOptions interface. parentId is the id of the menu to put this menu item under (todo: is this case sensitive and how do we know what the available ids are?), label is the text to show on the menu item, and click() is called when the menu item is selected. In this example we simply log a message, but typically you would navigate to a specific page or perform some operation. Pages are associated with the LensRendererExtension class and can be defined when you extend it.","title":"Main Extension"},{"location":"extensions/guides/main-extension/#main-extension","text":"The main extension api is the interface to Lens' main process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom application menu items, and generally run custom code in Lens' main process.","title":"Main Extension"},{"location":"extensions/guides/main-extension/#lensmainextension-class","text":"To create a main extension simply extend the LensMainExtension class: import { LensMainExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensMainExtension { onActivate() { console . log ( 'custom main process extension code started' ); } onDeactivate() { console . log ( 'custom main process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. Note that to see standard output from the main process there must be a console connected to it. This is typically achieved by starting Lens from the command prompt. The following example is a little more interesting in that it accesses some Lens state data and periodically logs the name of the currently active cluster in Lens. import { LensMainExtension , Store } from \"@k8slens/extensions\" ; const clusterStore = Store . clusterStore export default class ActiveClusterExtensionMain extends LensMainExtension { timer : NodeJS.Timeout onActivate() { console . log ( \"Cluster logger activated\" ); this . timer = setInterval (() => { if ( ! clusterStore . active ) { console . log ( \"No active cluster\" ); return ; } console . log ( \"active cluster is\" , clusterStore . active . contextName ) }, 5000 ) } onDeactivate() { clearInterval ( this . timer ) console . log ( \"Cluster logger deactivated\" ); } } See the Stores guide for more details on accessing Lens state data.","title":"LensMainExtension Class"},{"location":"extensions/guides/main-extension/#appmenus","text":"The only UI feature customizable in the main extension api is the application menu. Custom menu items can be inserted and linked to custom functionality, such as navigating to a specific page. The following example demonstrates adding a menu item to the Help menu. import { LensMainExtension } from \"@k8slens/extensions\" ; export default class SamplePageMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Sample\" , click() { console . log ( \"Sample clicked\" ); } } ] } appMenus is an array of objects satisfying the MenuRegistration interface. MenuRegistration extends React's MenuItemConstructorOptions interface. parentId is the id of the menu to put this menu item under (todo: is this case sensitive and how do we know what the available ids are?), label is the text to show on the menu item, and click() is called when the menu item is selected. In this example we simply log a message, but typically you would navigate to a specific page or perform some operation. Pages are associated with the LensRendererExtension class and can be defined when you extend it.","title":"appMenus"},{"location":"extensions/guides/renderer-extension/","text":"Renderer Extension # The renderer extension api is the interface to Lens's renderer process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom Lens UI elements, and generally run custom code in Lens's renderer process. The custom Lens UI elements that can be added include global pages, cluster pages, cluster page menus, cluster features, app preferences, status bar items, KubeObject menu items, and KubeObject details items. These UI elements are based on React components. LensRendererExtension Class # To create a renderer extension simply extend the LensRendererExtension class: import { LensRendererExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensRendererExtension { onActivate() { console . log ( 'custom renderer process extension code started' ); } onDeactivate() { console . log ( 'custom renderer process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. clusterPages # Cluster pages appear as part of the cluster dashboard. They are accessible from the side bar, and are shown in the menu list after Custom Resources . It is conventional to use a cluster page to show information or provide functionality pertaining to the active cluster, along with custom data and functionality your extension may have. However, it is not limited to the active cluster. Also, your extension can gain access to the Kubernetes resources in the active cluster in a straightforward manner using the clusterStore . The following example adds a cluster page definition to a LensRendererExtension subclass: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; } Cluster pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for wich there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above ExamplePage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } Note that the ExamplePage class defines a property named extension . This allows the ExampleExtension object to be passed in React-style in the cluster page definition, so that ExamplePage can access any ExampleExtension subclass data. clusterPageMenus # The above example code shows how to create a cluster page but not how to make it available to the Lens user. Cluster pages are typically made available through a menu item in the cluster dashboard sidebar. Expanding on the above example a cluster page menu is added to the ExampleExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; clusterPageMenus = [ { target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, ]; } Cluster page menus are objects matching the ClusterPageMenuRegistration interface. They define the appearance of the cluster page menu item in the cluster dashboard sidebar and the behaviour when the cluster page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the cluster page with id of \"hello\" . This is done by setting target 's pageId field to \"hello\" . The cluster page menu item's appearance is defined by setting the title field to the text that is to be displayed in the cluster dashboard sidebar. The components field is used to set an icon that appears to the left of the title text in the sidebar. Thus when the \"Hello World\" menu item is activated the cluster dashboard will show the contents of ExamplePage . This example requires the definition of another React-based component, ExampleIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function ExampleIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"pages\" tooltip = { \"Hi!\" } /> } export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } ExampleIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. ExampleIcon also sets a tooltip, shown when the Lens user hovers over the icon with a mouse, by setting the tooltip field. A cluster page menu can also be used to define a foldout submenu in the cluster dashboard sidebar. This enables the grouping of cluster pages. The following example shows how to specify a submenu having two menu items: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } }, { id : \"bonjour\" , components : { Page : () => < ExemplePage extension = { this } /> , } } ]; clusterPageMenus = [ { id : \"example\" , title : \"Greetings\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"bonjour\" }, title : \"Bonjour le monde\" , components : { Icon : ExempleIcon , } } ]; } The above defines two cluster pages and three cluster page menu objects. The cluster page definitons are straightforward. The first cluster page menu object defines the parent of a foldout submenu. Setting the id field in a cluster page menu definition implies that it is defining a foldout submenu. Also note that the target field is not specified (it is ignored if the id field is specified). This cluster page menu object specifies the title and components fields, which are used in displaying the menu item in the cluster dashboard sidebar. Initially the submenu is hidden. Activating this menu item toggles on and off the appearance of the submenu below it. The remaining two cluster page menu objects define the contents of the submenu. A cluster page menu object is defined to be a submenu item by setting the parentId field to the id of the parent of a foldout submenu, \"example\" in this case globalPages # Global pages appear independently of the cluster dashboard and they fill the Lens UI space. A global page is typically triggered from the cluster menu using a global page menu . They can also be triggered by a custom app menu selection from a Main Extension or a custom status bar item . Global pages can appear even when there is no active cluster, unlike cluster pages. It is conventional to use a global page to show information and provide functionality relevant across clusters, along with custom data and functionality that your extension may have. The following example defines a LensRendererExtension subclass with a single global page definition: import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpPage } from './page' ; import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; } Global pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for which there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above HelpPage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help yourself < /p> < /div> ) } } Note that the HelpPage class defines a property named extension . This allows the HelpExtension object to be passed in React-style in the global page definition, so that HelpPage can access any HelpExtension subclass data. This example code shows how to create a global page but not how to make it available to the Lens user. Global pages are typically made available through a number of ways. Menu items can be added to the Lens app menu system and set to open a global page when activated (See appMenus in the Main Extension guide ). Interactive elements can be placed on the status bar (the blue strip along the bottom of the Lens UI) and can be configured to link to a global page when activated (See statusBarItems ). As well, global pages can be made accessible from the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Global page menu icons that are defined using globalPageMenus appear below the Add Cluster icon. globalPageMenus # Global page menus connect a global page to the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Expanding on the example from globalPages a global page menu is added to the HelpExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { HelpIcon , HelpPage } from \"./page\" import React from \"react\" export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; globalPageMenus = [ { target : { pageId : \"help\" }, title : \"Help\" , components : { Icon : HelpIcon , } }, ]; } Global page menus are objects matching the PageMenuRegistration interface. They define the appearance of the global page menu item in the cluster menu and the behaviour when the global page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the global page with id of \"help\" . This is done by setting target 's pageId field to \"help\" . The global page menu item's appearance is defined by setting the title field to the text that is to be displayed as a tooltip in the cluster menu. The components field is used to set an icon that appears in the cluster menu. Thus when the \"Help\" icon is activated the contents of ExamplePage will be shown. This example requires the definition of another React-based component, HelpIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function HelpIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"help\" /> } export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help < /p> < /div> ) } } HelpIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. clusterFeatures # Cluster features are Kubernetes resources that can be applied to and managed within the active cluster. They can be installed/uninstalled by the Lens user from the cluster settings page . The following example shows how to add a cluster feature as part of a LensRendererExtension : import { LensRendererExtension } from \"@k8slens/extensions\" import { ExampleFeature } from \"./src/example-feature\" import React from \"react\" export default class ExampleFeatureExtension extends LensRendererExtension { clusterFeatures = [ { title : \"Example Feature\" , components : { Description : () => { return ( < span > Enable an example feature . < /span> ) } }, feature : new ExampleFeature () } ]; } The title and components.Description fields provide content that appears on the cluster settings page, in the Features section. The feature field must specify an instance which extends the abstract class ClusterFeature.Feature , and specifically implement the following methods: abstract install ( cluster : Cluster ) : Promise < void > ; abstract upgrade ( cluster : Cluster ) : Promise < void > ; abstract uninstall ( cluster : Cluster ) : Promise < void > ; abstract updateStatus ( cluster : Cluster ) : Promise < ClusterFeatureStatus > ; The install() method is typically called by Lens when a user has indicated that this feature is to be installed (i.e. clicked Install for the feature on the cluster settings page). The implementation of this method should install kubernetes resources using the applyResources() method, or by directly accessing the kubernetes api ( K8sApi ). The upgrade() method is typically called by Lens when a user has indicated that this feature is to be upgraded (i.e. clicked Upgrade for the feature on the cluster settings page). The implementation of this method should upgrade the kubernetes resources already installed, if relevant to the feature. The uninstall() method is typically called by Lens when a user has indicated that this feature is to be uninstalled (i.e. clicked Uninstall for the feature on the cluster settings page). The implementation of this method should uninstall kubernetes resources using the kubernetes api ( K8sApi ) The updateStatus() method is called periodically by Lens to determine details about the feature's current status. The implementation of this method should provide the current status information in the status field of the ClusterFeature.Feature parent class. The status.currentVersion and status.latestVersion fields may be displayed by Lens in describing the feature. The status.installed field should be set to true if the feature is currently installed, otherwise false. Also, Lens relies on the status.canUpgrade field to determine if the feature can be upgraded (i.e a new version could be available) so the implementation should set the status.canUpgrade field according to specific rules for the feature, if relevant. The following shows a very simple implementation of a ClusterFeature : import { ClusterFeature , Store , K8sApi } from \"@k8slens/extensions\" ; import * as path from \"path\" ; export class ExampleFeature extends ClusterFeature . Feature { async install ( cluster : Store.Cluster ) : Promise < void > { super . applyResources ( cluster , path . join ( __dirname , \"../resources/\" )); } async upgrade ( cluster : Store.Cluster ) : Promise < void > { return this . install ( cluster ); } async updateStatus ( cluster : Store.Cluster ) : Promise < ClusterFeature . FeatureStatus > { try { const pod = K8sApi . forCluster ( cluster , K8sApi . Pod ); const examplePod = await pod . get ({ name : \"example-pod\" , namespace : \"default\" }); if ( examplePod ? . kind ) { this . status . installed = true ; this . status . currentVersion = examplePod . spec . containers [ 0 ]. image . split ( \":\" )[ 1 ]; this . status . canUpgrade = true ; // a real implementation would perform a check here that is relevant to the specific feature } else { this . status . installed = false ; this . status . canUpgrade = false ; } } catch ( e ) { if ( e ? . error ? . code === 404 ) { this . status . installed = false ; this . status . canUpgrade = false ; } } return this . status ; } async uninstall ( cluster : Store.Cluster ) : Promise < void > { const podApi = K8sApi . forCluster ( cluster , K8sApi . Pod ); await podApi . delete ({ name : \"example-pod\" , namespace : \"default\" }); } } This example implements the install() method by simply invoking the helper applyResources() method. applyResources() tries to apply all resources read from all files found in the folder path provided. In this case this folder path is the ../resources subfolder relative to current source code's folder. The file ../resources/example-pod.yml could contain: apiVersion : v1 kind : Pod metadata : name : example-pod spec : containers : - name : example-pod image : nginx The upgrade() method in the example above is implemented by simply invoking the install() method. Depending on the feature to be supported by an extension, upgrading may require additional and/or different steps. The uninstall() method is implemented in the example above by utilizing the K8sApi provided by Lens to simply delete the example-pod pod applied by the install() method. The updateStatus() method is implemented above by using the K8sApi as well, this time to get information from the example-pod pod, in particular to determine if it is installed, what version is associated with it, and if it can be upgraded. How the status is updated for a specific cluster feature is up to the implementation. appPreferences # The Preferences page is a built-in global page. Extensions can add custom preferences to the Preferences page, thus providing a single location for users to configure global options, for Lens and extensions alike. The following example demonstrates adding a custom preference: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExamplePreferenceHint , ExamplePreferenceInput } from \"./src/example-preference\" ; import { observable } from \"mobx\" ; import React from \"react\" ; export default class ExampleRendererExtension extends LensRendererExtension { @observable preference = { enabled : false }; appPreferences = [ { title : \"Example Preferences\" , components : { Input : () => < ExamplePreferenceInput preference = { this . preference } /> , Hint : () => < ExamplePreferenceHint /> } } ]; } App preferences are objects matching the AppPreferenceRegistration interface. The title field specifies the text to show as the heading on the Preferences page. The components field specifies two React.Component objects defining the interface for the preference. Input should specify an interactive input element for your preference and Hint should provide descriptive information for the preference, which is shown below the Input element. ExamplePreferenceInput expects its React props set to an ExamplePreferenceProps instance, which is how ExampleRendererExtension handles the state of the preference input. ExampleRendererExtension has the field preference , which is provided to ExamplePreferenceInput when it is created. In this example ExamplePreferenceInput , ExamplePreferenceHint , and ExamplePreferenceProps are defined in ./src/example-preference.tsx : import { Component } from \"@k8slens/extensions\" ; import { observer } from \"mobx-react\" ; import React from \"react\" ; export class ExamplePreferenceProps { preference : { enabled : boolean ; } } @observer export class ExamplePreferenceInput extends React . Component < ExamplePreferenceProps > { render() { const { preference } = this . props ; return ( < Component . Checkbox label = \"I understand appPreferences\" value = { preference . enabled } onChange = { v => { preference . enabled = v ; }} /> ); } } export class ExamplePreferenceHint extends React . Component { render() { return ( < span > This is an example of an appPreference for extensions . < /span> ); } } ExamplePreferenceInput implements a simple checkbox (using Lens's Component.Checkbox ). It provides label as the text to display next to the checkbox and an onChange function, which reacts to the checkbox state change. The checkbox's value is initially set to preference.enabled . ExamplePreferenceInput is defined with React props of ExamplePreferenceProps type, which is an object with a single field, enabled . This is used to indicate the state of the preference, and is bound to the checkbox state in onChange . ExamplePreferenceHint is a simple text span. Note that the input and the hint could comprise of more sophisticated elements, according to the needs of the extension. Note that the above example introduces decorators observable and observer from the mobx and mobx-react packages. mobx simplifies state management and without it this example would not visually update the checkbox properly when the user activates it. Lens uses mobx extensively for state management of its own UI elements and it is recommended that extensions rely on it too. Alternatively, React's state management can be used, though mobx is typically simpler to use. Also note that an extension's state data can be managed using an ExtensionStore object, which conveniently handles persistence and synchronization. The example above defined a preference field in the ExampleRendererExtension class definition to hold the extension's state primarily to simplify the code for this guide, but it is recommended to manage your extension's state data using ExtensionStore statusBarItems # The Status bar is the blue strip along the bottom of the Lens UI. Status bar items are React.ReactNode types, which can be used to convey status information, or act as a link to a global page, or even an external page. The following example adds a status bar item definition, as well as a global page definition, to a LensRendererExtension subclass, and configures the status bar item to navigate to the global page upon activation (normally a mouse click): import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpIcon , HelpPage } from \"./page\" import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; statusBarItems = [ { item : ( < div className = \"flex align-center gaps\" onClick = {() => this . navigate ( \"help\" )} > < HelpIcon /> My Status Bar Item < /div> ), }, ]; } The item field of a status bar item specifies the React.Component to be shown on the status bar. By default items are added starting from the right side of the status bar. Typically, item would specify an icon and/or a short string of text, considering the limited space on the status bar. In the example above the HelpIcon from the globalPageMenus guide is reused. Also, the item provides a link to the global page by setting the onClick property to a function that calls the LensRendererExtension navigate() method. navigate() takes as a parameter the id of the global page, which is shown when navigate() is called. kubeObjectMenuItems # An extension can add custom menu items (including actions) for specific Kubernetes resource kinds/apiVersions. These menu items appear under the ... for each listed resource in the cluster dashboard, and on the title bar of the details page for a specific resource: The following example shows how to add a menu for Namespace resources, and associate an action with it: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceMenuItem } from \"./src/namespace-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) => < NamespaceMenuItem {... props } /> } } ]; } Kube object menu items are objects matching the KubeObjectMenuRegistration interface. The kind field specifies the kubernetes resource type to apply this menu item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a menu item for namespaces in the cluster dashboard. The components field defines the menu item's appearance and behaviour. The MenuItem field provides a function that returns a React.Component given a set of menu item properties. In this example a NamespaceMenuItem object is returned. NamespaceMenuItem is defined in ./src/namespace-menu-item.tsx : import React from \"react\" ; import { Component , K8sApi , Navigation } from \"@k8slens/extensions\" ; export function NamespaceMenuItem ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) { const { object : namespace , toolbar } = props ; if ( ! namespace ) return null ; const namespaceName = namespace . getName (); const sendToTerminal = ( command : string ) => { Component . terminalStore . sendCommand ( command , { enter : true , newTab : true , }); Navigation . hideDetails (); }; const getPods = () => { sendToTerminal ( `kubectl get pods -n ${ namespaceName } ` ); }; return ( < Component . MenuItem onClick = { getPods } > < Component . Icon material = \"speaker_group\" interactive = { toolbar } title = \"Get pods in terminal\" /> < span className = \"title\" > Get Pods < /span> < /Component.MenuItem> ); } NamespaceMenuItem returns a Component.MenuItem defining the menu item's appearance (icon and text) and behaviour when activated via the onClick property. getPods() shows how to open a terminal tab and run a command, specifically it runs kubectl to get a list of pods running in the current namespace. See Component.terminalStore.sendCommand for more details on running terminal commands. The name of the namespace is retrieved from props passed into NamespaceMenuItem() . namespace is the props.object , which is of type K8sApi.Namespace . This is the api for accessing namespaces, and the current namespace in this example is simply given by namespace.getName() . Thus kube object menu items are afforded convenient access to the specific resource selected by the user. kubeObjectDetailItems # An extension can add custom details (content) for specified Kubernetes resource kinds/apiVersions. These custom details appear on the details page for a specific resource, such as a Namespace: The following example shows how to add a tabulated list of pods to the Namespace resource details page: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceDetailsItem } from \"./src/namespace-details-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], priority : 10 , components : { Details : ( props : Component.KubeObjectDetailsProps < K8sApi . Namespace > ) => < NamespaceDetailsItem {... props } /> } } ]; } Kube object detail items are objects matching the KubeObjectDetailRegistration interface. The kind field specifies the kubernetes resource type to apply this detail item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a detail item for namespaces in the cluster dashboard. The components field defines the detail item's appearance and behaviour. The Details field provides a function that returns a React.Component given a set of detail item properties. In this example a NamespaceDetailsItem object is returned. NamespaceDetailsItem is defined in ./src/namespace-details-item.tsx : import { Component , K8sApi } from \"@k8slens/extensions\" ; import { PodsDetailsList } from \"./pods-details-list\" ; import React from \"react\" ; import { observable } from \"mobx\" ; import { observer } from \"mobx-react\" ; @observer export class NamespaceDetailsItem extends React . Component < Component . KubeObjectDetailsProps < K8sApi . Namespace >> { @observable private pods : K8sApi.Pod []; async componentDidMount() { this . pods = await K8sApi . podsApi . list ({ namespace : this.props.object.getName ()}); } render() { return ( < div > < Component . DrawerTitle title = \"Pods\" /> < PodsDetailsList pods = { this . pods } /> < /div> ) } } Since NamespaceDetailsItem extends React.Component> it can access the current namespace object (type K8sApi.Namespace ) through this.props.object . This object can be queried for many details about the current namespace. In this example the namespace's name is obtained in componentDidMount() using the K8sApi.Namespace getName() method. The namespace's name is needed to limit the list of pods to only those in this namespace. To get the list of pods this example uses the kubernetes pods api, specifically the K8sApi.podsApi.list() method. The K8sApi.podsApi is automatically configured for the currently active cluster. Note that K8sApi.podsApi.list() is an asynchronous method, and ideally getting the pods list should be done before rendering the NamespaceDetailsItem . It is a common technique in React development to await async calls in componentDidMount() . However, componentDidMount() is called right after the first call to render() . In order to effect a subsequent render() call React must be made aware of a state change. Like in the appPreferences guide , mobx and mobx-react are used to ensure NamespaceDetailsItem renders when the pods list is updated. This is done simply by marking the pods field as an observable and the NamespaceDetailsItem class itself as an observer . Finally, the NamespaceDetailsItem is rendered using the render() method. Details are placed in drawers, and using Component.DrawerTitle provides a separator from details above this one. Multiple details in a drawer can be placed in elements for further separation, if desired. The rest of this example's details are defined in PodsDetailsList , found in ./pods-details-list.tsx : import React from \"react\" ; import { Component , K8sApi } from \"@k8slens/extensions\" ; interface Props { pods : K8sApi.Pod []; } export class PodsDetailsList extends React . Component < Props > { getTableRow ( index : number ) { const { pods } = this . props ; return ( < Component . TableRow key = { index } nowrap > < Component . TableCell className = \"podName\" > { pods [ index ]. getName ()} < /Component.TableCell> < Component . TableCell className = \"podAge\" > { pods [ index ]. getAge ()} < /Component.TableCell> < Component . TableCell className = \"podStatus\" > { pods [ index ]. getStatus ()} < /Component.TableCell> < /Component.TableRow> ) } render() { const { pods } = this . props if ( ! pods ? . length ) { return null ; } return ( < div > < Component . Table > < Component . TableHead > < Component . TableCell className = \"podName\" > Name < /Component.TableCell> < Component . TableCell className = \"podAge\" > Age < /Component.TableCell> < Component . TableCell className = \"podStatus\" > Status < /Component.TableCell> < /Component.TableHead> { pods . map (( pod , index ) => this . getTableRow ( index )) } < /Component.Table> < /div> ) } } PodsDetailsList produces a simple table showing a list of the pods found in this namespace: For each pod the name, age, and status are obtained using the K8sApi.Pod methods. The table is constructed using the Component.Table and related elements. See Component documentation for further details.","title":"Renderer Extension"},{"location":"extensions/guides/renderer-extension/#renderer-extension","text":"The renderer extension api is the interface to Lens's renderer process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom Lens UI elements, and generally run custom code in Lens's renderer process. The custom Lens UI elements that can be added include global pages, cluster pages, cluster page menus, cluster features, app preferences, status bar items, KubeObject menu items, and KubeObject details items. These UI elements are based on React components.","title":"Renderer Extension"},{"location":"extensions/guides/renderer-extension/#lensrendererextension-class","text":"To create a renderer extension simply extend the LensRendererExtension class: import { LensRendererExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensRendererExtension { onActivate() { console . log ( 'custom renderer process extension code started' ); } onDeactivate() { console . log ( 'custom renderer process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled.","title":"LensRendererExtension Class"},{"location":"extensions/guides/renderer-extension/#clusterpages","text":"Cluster pages appear as part of the cluster dashboard. They are accessible from the side bar, and are shown in the menu list after Custom Resources . It is conventional to use a cluster page to show information or provide functionality pertaining to the active cluster, along with custom data and functionality your extension may have. However, it is not limited to the active cluster. Also, your extension can gain access to the Kubernetes resources in the active cluster in a straightforward manner using the clusterStore . The following example adds a cluster page definition to a LensRendererExtension subclass: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; } Cluster pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for wich there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above ExamplePage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } Note that the ExamplePage class defines a property named extension . This allows the ExampleExtension object to be passed in React-style in the cluster page definition, so that ExamplePage can access any ExampleExtension subclass data.","title":"clusterPages"},{"location":"extensions/guides/renderer-extension/#clusterpagemenus","text":"The above example code shows how to create a cluster page but not how to make it available to the Lens user. Cluster pages are typically made available through a menu item in the cluster dashboard sidebar. Expanding on the above example a cluster page menu is added to the ExampleExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; clusterPageMenus = [ { target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, ]; } Cluster page menus are objects matching the ClusterPageMenuRegistration interface. They define the appearance of the cluster page menu item in the cluster dashboard sidebar and the behaviour when the cluster page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the cluster page with id of \"hello\" . This is done by setting target 's pageId field to \"hello\" . The cluster page menu item's appearance is defined by setting the title field to the text that is to be displayed in the cluster dashboard sidebar. The components field is used to set an icon that appears to the left of the title text in the sidebar. Thus when the \"Hello World\" menu item is activated the cluster dashboard will show the contents of ExamplePage . This example requires the definition of another React-based component, ExampleIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function ExampleIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"pages\" tooltip = { \"Hi!\" } /> } export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } ExampleIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. ExampleIcon also sets a tooltip, shown when the Lens user hovers over the icon with a mouse, by setting the tooltip field. A cluster page menu can also be used to define a foldout submenu in the cluster dashboard sidebar. This enables the grouping of cluster pages. The following example shows how to specify a submenu having two menu items: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } }, { id : \"bonjour\" , components : { Page : () => < ExemplePage extension = { this } /> , } } ]; clusterPageMenus = [ { id : \"example\" , title : \"Greetings\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"bonjour\" }, title : \"Bonjour le monde\" , components : { Icon : ExempleIcon , } } ]; } The above defines two cluster pages and three cluster page menu objects. The cluster page definitons are straightforward. The first cluster page menu object defines the parent of a foldout submenu. Setting the id field in a cluster page menu definition implies that it is defining a foldout submenu. Also note that the target field is not specified (it is ignored if the id field is specified). This cluster page menu object specifies the title and components fields, which are used in displaying the menu item in the cluster dashboard sidebar. Initially the submenu is hidden. Activating this menu item toggles on and off the appearance of the submenu below it. The remaining two cluster page menu objects define the contents of the submenu. A cluster page menu object is defined to be a submenu item by setting the parentId field to the id of the parent of a foldout submenu, \"example\" in this case","title":"clusterPageMenus"},{"location":"extensions/guides/renderer-extension/#globalpages","text":"Global pages appear independently of the cluster dashboard and they fill the Lens UI space. A global page is typically triggered from the cluster menu using a global page menu . They can also be triggered by a custom app menu selection from a Main Extension or a custom status bar item . Global pages can appear even when there is no active cluster, unlike cluster pages. It is conventional to use a global page to show information and provide functionality relevant across clusters, along with custom data and functionality that your extension may have. The following example defines a LensRendererExtension subclass with a single global page definition: import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpPage } from './page' ; import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; } Global pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for which there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above HelpPage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help yourself < /p> < /div> ) } } Note that the HelpPage class defines a property named extension . This allows the HelpExtension object to be passed in React-style in the global page definition, so that HelpPage can access any HelpExtension subclass data. This example code shows how to create a global page but not how to make it available to the Lens user. Global pages are typically made available through a number of ways. Menu items can be added to the Lens app menu system and set to open a global page when activated (See appMenus in the Main Extension guide ). Interactive elements can be placed on the status bar (the blue strip along the bottom of the Lens UI) and can be configured to link to a global page when activated (See statusBarItems ). As well, global pages can be made accessible from the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Global page menu icons that are defined using globalPageMenus appear below the Add Cluster icon.","title":"globalPages"},{"location":"extensions/guides/renderer-extension/#globalpagemenus","text":"Global page menus connect a global page to the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Expanding on the example from globalPages a global page menu is added to the HelpExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { HelpIcon , HelpPage } from \"./page\" import React from \"react\" export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; globalPageMenus = [ { target : { pageId : \"help\" }, title : \"Help\" , components : { Icon : HelpIcon , } }, ]; } Global page menus are objects matching the PageMenuRegistration interface. They define the appearance of the global page menu item in the cluster menu and the behaviour when the global page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the global page with id of \"help\" . This is done by setting target 's pageId field to \"help\" . The global page menu item's appearance is defined by setting the title field to the text that is to be displayed as a tooltip in the cluster menu. The components field is used to set an icon that appears in the cluster menu. Thus when the \"Help\" icon is activated the contents of ExamplePage will be shown. This example requires the definition of another React-based component, HelpIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function HelpIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"help\" /> } export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help < /p> < /div> ) } } HelpIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field.","title":"globalPageMenus"},{"location":"extensions/guides/renderer-extension/#clusterfeatures","text":"Cluster features are Kubernetes resources that can be applied to and managed within the active cluster. They can be installed/uninstalled by the Lens user from the cluster settings page . The following example shows how to add a cluster feature as part of a LensRendererExtension : import { LensRendererExtension } from \"@k8slens/extensions\" import { ExampleFeature } from \"./src/example-feature\" import React from \"react\" export default class ExampleFeatureExtension extends LensRendererExtension { clusterFeatures = [ { title : \"Example Feature\" , components : { Description : () => { return ( < span > Enable an example feature . < /span> ) } }, feature : new ExampleFeature () } ]; } The title and components.Description fields provide content that appears on the cluster settings page, in the Features section. The feature field must specify an instance which extends the abstract class ClusterFeature.Feature , and specifically implement the following methods: abstract install ( cluster : Cluster ) : Promise < void > ; abstract upgrade ( cluster : Cluster ) : Promise < void > ; abstract uninstall ( cluster : Cluster ) : Promise < void > ; abstract updateStatus ( cluster : Cluster ) : Promise < ClusterFeatureStatus > ; The install() method is typically called by Lens when a user has indicated that this feature is to be installed (i.e. clicked Install for the feature on the cluster settings page). The implementation of this method should install kubernetes resources using the applyResources() method, or by directly accessing the kubernetes api ( K8sApi ). The upgrade() method is typically called by Lens when a user has indicated that this feature is to be upgraded (i.e. clicked Upgrade for the feature on the cluster settings page). The implementation of this method should upgrade the kubernetes resources already installed, if relevant to the feature. The uninstall() method is typically called by Lens when a user has indicated that this feature is to be uninstalled (i.e. clicked Uninstall for the feature on the cluster settings page). The implementation of this method should uninstall kubernetes resources using the kubernetes api ( K8sApi ) The updateStatus() method is called periodically by Lens to determine details about the feature's current status. The implementation of this method should provide the current status information in the status field of the ClusterFeature.Feature parent class. The status.currentVersion and status.latestVersion fields may be displayed by Lens in describing the feature. The status.installed field should be set to true if the feature is currently installed, otherwise false. Also, Lens relies on the status.canUpgrade field to determine if the feature can be upgraded (i.e a new version could be available) so the implementation should set the status.canUpgrade field according to specific rules for the feature, if relevant. The following shows a very simple implementation of a ClusterFeature : import { ClusterFeature , Store , K8sApi } from \"@k8slens/extensions\" ; import * as path from \"path\" ; export class ExampleFeature extends ClusterFeature . Feature { async install ( cluster : Store.Cluster ) : Promise < void > { super . applyResources ( cluster , path . join ( __dirname , \"../resources/\" )); } async upgrade ( cluster : Store.Cluster ) : Promise < void > { return this . install ( cluster ); } async updateStatus ( cluster : Store.Cluster ) : Promise < ClusterFeature . FeatureStatus > { try { const pod = K8sApi . forCluster ( cluster , K8sApi . Pod ); const examplePod = await pod . get ({ name : \"example-pod\" , namespace : \"default\" }); if ( examplePod ? . kind ) { this . status . installed = true ; this . status . currentVersion = examplePod . spec . containers [ 0 ]. image . split ( \":\" )[ 1 ]; this . status . canUpgrade = true ; // a real implementation would perform a check here that is relevant to the specific feature } else { this . status . installed = false ; this . status . canUpgrade = false ; } } catch ( e ) { if ( e ? . error ? . code === 404 ) { this . status . installed = false ; this . status . canUpgrade = false ; } } return this . status ; } async uninstall ( cluster : Store.Cluster ) : Promise < void > { const podApi = K8sApi . forCluster ( cluster , K8sApi . Pod ); await podApi . delete ({ name : \"example-pod\" , namespace : \"default\" }); } } This example implements the install() method by simply invoking the helper applyResources() method. applyResources() tries to apply all resources read from all files found in the folder path provided. In this case this folder path is the ../resources subfolder relative to current source code's folder. The file ../resources/example-pod.yml could contain: apiVersion : v1 kind : Pod metadata : name : example-pod spec : containers : - name : example-pod image : nginx The upgrade() method in the example above is implemented by simply invoking the install() method. Depending on the feature to be supported by an extension, upgrading may require additional and/or different steps. The uninstall() method is implemented in the example above by utilizing the K8sApi provided by Lens to simply delete the example-pod pod applied by the install() method. The updateStatus() method is implemented above by using the K8sApi as well, this time to get information from the example-pod pod, in particular to determine if it is installed, what version is associated with it, and if it can be upgraded. How the status is updated for a specific cluster feature is up to the implementation.","title":"clusterFeatures"},{"location":"extensions/guides/renderer-extension/#apppreferences","text":"The Preferences page is a built-in global page. Extensions can add custom preferences to the Preferences page, thus providing a single location for users to configure global options, for Lens and extensions alike. The following example demonstrates adding a custom preference: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExamplePreferenceHint , ExamplePreferenceInput } from \"./src/example-preference\" ; import { observable } from \"mobx\" ; import React from \"react\" ; export default class ExampleRendererExtension extends LensRendererExtension { @observable preference = { enabled : false }; appPreferences = [ { title : \"Example Preferences\" , components : { Input : () => < ExamplePreferenceInput preference = { this . preference } /> , Hint : () => < ExamplePreferenceHint /> } } ]; } App preferences are objects matching the AppPreferenceRegistration interface. The title field specifies the text to show as the heading on the Preferences page. The components field specifies two React.Component objects defining the interface for the preference. Input should specify an interactive input element for your preference and Hint should provide descriptive information for the preference, which is shown below the Input element. ExamplePreferenceInput expects its React props set to an ExamplePreferenceProps instance, which is how ExampleRendererExtension handles the state of the preference input. ExampleRendererExtension has the field preference , which is provided to ExamplePreferenceInput when it is created. In this example ExamplePreferenceInput , ExamplePreferenceHint , and ExamplePreferenceProps are defined in ./src/example-preference.tsx : import { Component } from \"@k8slens/extensions\" ; import { observer } from \"mobx-react\" ; import React from \"react\" ; export class ExamplePreferenceProps { preference : { enabled : boolean ; } } @observer export class ExamplePreferenceInput extends React . Component < ExamplePreferenceProps > { render() { const { preference } = this . props ; return ( < Component . Checkbox label = \"I understand appPreferences\" value = { preference . enabled } onChange = { v => { preference . enabled = v ; }} /> ); } } export class ExamplePreferenceHint extends React . Component { render() { return ( < span > This is an example of an appPreference for extensions . < /span> ); } } ExamplePreferenceInput implements a simple checkbox (using Lens's Component.Checkbox ). It provides label as the text to display next to the checkbox and an onChange function, which reacts to the checkbox state change. The checkbox's value is initially set to preference.enabled . ExamplePreferenceInput is defined with React props of ExamplePreferenceProps type, which is an object with a single field, enabled . This is used to indicate the state of the preference, and is bound to the checkbox state in onChange . ExamplePreferenceHint is a simple text span. Note that the input and the hint could comprise of more sophisticated elements, according to the needs of the extension. Note that the above example introduces decorators observable and observer from the mobx and mobx-react packages. mobx simplifies state management and without it this example would not visually update the checkbox properly when the user activates it. Lens uses mobx extensively for state management of its own UI elements and it is recommended that extensions rely on it too. Alternatively, React's state management can be used, though mobx is typically simpler to use. Also note that an extension's state data can be managed using an ExtensionStore object, which conveniently handles persistence and synchronization. The example above defined a preference field in the ExampleRendererExtension class definition to hold the extension's state primarily to simplify the code for this guide, but it is recommended to manage your extension's state data using ExtensionStore","title":"appPreferences"},{"location":"extensions/guides/renderer-extension/#statusbaritems","text":"The Status bar is the blue strip along the bottom of the Lens UI. Status bar items are React.ReactNode types, which can be used to convey status information, or act as a link to a global page, or even an external page. The following example adds a status bar item definition, as well as a global page definition, to a LensRendererExtension subclass, and configures the status bar item to navigate to the global page upon activation (normally a mouse click): import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpIcon , HelpPage } from \"./page\" import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; statusBarItems = [ { item : ( < div className = \"flex align-center gaps\" onClick = {() => this . navigate ( \"help\" )} > < HelpIcon /> My Status Bar Item < /div> ), }, ]; } The item field of a status bar item specifies the React.Component to be shown on the status bar. By default items are added starting from the right side of the status bar. Typically, item would specify an icon and/or a short string of text, considering the limited space on the status bar. In the example above the HelpIcon from the globalPageMenus guide is reused. Also, the item provides a link to the global page by setting the onClick property to a function that calls the LensRendererExtension navigate() method. navigate() takes as a parameter the id of the global page, which is shown when navigate() is called.","title":"statusBarItems"},{"location":"extensions/guides/renderer-extension/#kubeobjectmenuitems","text":"An extension can add custom menu items (including actions) for specific Kubernetes resource kinds/apiVersions. These menu items appear under the ... for each listed resource in the cluster dashboard, and on the title bar of the details page for a specific resource: The following example shows how to add a menu for Namespace resources, and associate an action with it: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceMenuItem } from \"./src/namespace-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) => < NamespaceMenuItem {... props } /> } } ]; } Kube object menu items are objects matching the KubeObjectMenuRegistration interface. The kind field specifies the kubernetes resource type to apply this menu item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a menu item for namespaces in the cluster dashboard. The components field defines the menu item's appearance and behaviour. The MenuItem field provides a function that returns a React.Component given a set of menu item properties. In this example a NamespaceMenuItem object is returned. NamespaceMenuItem is defined in ./src/namespace-menu-item.tsx : import React from \"react\" ; import { Component , K8sApi , Navigation } from \"@k8slens/extensions\" ; export function NamespaceMenuItem ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) { const { object : namespace , toolbar } = props ; if ( ! namespace ) return null ; const namespaceName = namespace . getName (); const sendToTerminal = ( command : string ) => { Component . terminalStore . sendCommand ( command , { enter : true , newTab : true , }); Navigation . hideDetails (); }; const getPods = () => { sendToTerminal ( `kubectl get pods -n ${ namespaceName } ` ); }; return ( < Component . MenuItem onClick = { getPods } > < Component . Icon material = \"speaker_group\" interactive = { toolbar } title = \"Get pods in terminal\" /> < span className = \"title\" > Get Pods < /span> < /Component.MenuItem> ); } NamespaceMenuItem returns a Component.MenuItem defining the menu item's appearance (icon and text) and behaviour when activated via the onClick property. getPods() shows how to open a terminal tab and run a command, specifically it runs kubectl to get a list of pods running in the current namespace. See Component.terminalStore.sendCommand for more details on running terminal commands. The name of the namespace is retrieved from props passed into NamespaceMenuItem() . namespace is the props.object , which is of type K8sApi.Namespace . This is the api for accessing namespaces, and the current namespace in this example is simply given by namespace.getName() . Thus kube object menu items are afforded convenient access to the specific resource selected by the user.","title":"kubeObjectMenuItems"},{"location":"extensions/guides/renderer-extension/#kubeobjectdetailitems","text":"An extension can add custom details (content) for specified Kubernetes resource kinds/apiVersions. These custom details appear on the details page for a specific resource, such as a Namespace: The following example shows how to add a tabulated list of pods to the Namespace resource details page: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceDetailsItem } from \"./src/namespace-details-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], priority : 10 , components : { Details : ( props : Component.KubeObjectDetailsProps < K8sApi . Namespace > ) => < NamespaceDetailsItem {... props } /> } } ]; } Kube object detail items are objects matching the KubeObjectDetailRegistration interface. The kind field specifies the kubernetes resource type to apply this detail item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a detail item for namespaces in the cluster dashboard. The components field defines the detail item's appearance and behaviour. The Details field provides a function that returns a React.Component given a set of detail item properties. In this example a NamespaceDetailsItem object is returned. NamespaceDetailsItem is defined in ./src/namespace-details-item.tsx : import { Component , K8sApi } from \"@k8slens/extensions\" ; import { PodsDetailsList } from \"./pods-details-list\" ; import React from \"react\" ; import { observable } from \"mobx\" ; import { observer } from \"mobx-react\" ; @observer export class NamespaceDetailsItem extends React . Component < Component . KubeObjectDetailsProps < K8sApi . Namespace >> { @observable private pods : K8sApi.Pod []; async componentDidMount() { this . pods = await K8sApi . podsApi . list ({ namespace : this.props.object.getName ()}); } render() { return ( < div > < Component . DrawerTitle title = \"Pods\" /> < PodsDetailsList pods = { this . pods } /> < /div> ) } } Since NamespaceDetailsItem extends React.Component> it can access the current namespace object (type K8sApi.Namespace ) through this.props.object . This object can be queried for many details about the current namespace. In this example the namespace's name is obtained in componentDidMount() using the K8sApi.Namespace getName() method. The namespace's name is needed to limit the list of pods to only those in this namespace. To get the list of pods this example uses the kubernetes pods api, specifically the K8sApi.podsApi.list() method. The K8sApi.podsApi is automatically configured for the currently active cluster. Note that K8sApi.podsApi.list() is an asynchronous method, and ideally getting the pods list should be done before rendering the NamespaceDetailsItem . It is a common technique in React development to await async calls in componentDidMount() . However, componentDidMount() is called right after the first call to render() . In order to effect a subsequent render() call React must be made aware of a state change. Like in the appPreferences guide , mobx and mobx-react are used to ensure NamespaceDetailsItem renders when the pods list is updated. This is done simply by marking the pods field as an observable and the NamespaceDetailsItem class itself as an observer . Finally, the NamespaceDetailsItem is rendered using the render() method. Details are placed in drawers, and using Component.DrawerTitle provides a separator from details above this one. Multiple details in a drawer can be placed in elements for further separation, if desired. The rest of this example's details are defined in PodsDetailsList , found in ./pods-details-list.tsx : import React from \"react\" ; import { Component , K8sApi } from \"@k8slens/extensions\" ; interface Props { pods : K8sApi.Pod []; } export class PodsDetailsList extends React . Component < Props > { getTableRow ( index : number ) { const { pods } = this . props ; return ( < Component . TableRow key = { index } nowrap > < Component . TableCell className = \"podName\" > { pods [ index ]. getName ()} < /Component.TableCell> < Component . TableCell className = \"podAge\" > { pods [ index ]. getAge ()} < /Component.TableCell> < Component . TableCell className = \"podStatus\" > { pods [ index ]. getStatus ()} < /Component.TableCell> < /Component.TableRow> ) } render() { const { pods } = this . props if ( ! pods ? . length ) { return null ; } return ( < div > < Component . Table > < Component . TableHead > < Component . TableCell className = \"podName\" > Name < /Component.TableCell> < Component . TableCell className = \"podAge\" > Age < /Component.TableCell> < Component . TableCell className = \"podStatus\" > Status < /Component.TableCell> < /Component.TableHead> { pods . map (( pod , index ) => this . getTableRow ( index )) } < /Component.Table> < /div> ) } } PodsDetailsList produces a simple table showing a list of the pods found in this namespace: For each pod the name, age, and status are obtained using the K8sApi.Pod methods. The table is constructed using the Component.Table and related elements. See Component documentation for further details.","title":"kubeObjectDetailItems"},{"location":"extensions/guides/stores/","text":"WIP # Stores # ClusterStore # WorkspaceStore # ExtensionStore #","title":"Stores"},{"location":"extensions/guides/stores/#wip","text":"","title":"WIP"},{"location":"extensions/guides/stores/#stores","text":"","title":"Stores"},{"location":"extensions/guides/stores/#clusterstore","text":"","title":"ClusterStore"},{"location":"extensions/guides/stores/#workspacestore","text":"","title":"WorkspaceStore"},{"location":"extensions/guides/stores/#extensionstore","text":"","title":"ExtensionStore"},{"location":"extensions/guides/working-with-mobx/","text":"Working with mobx # Introduction # Lens uses mobx as its state manager on top of React's state management system. This helps with having a more declarative style of managing state, as opposed to React 's native setState mechanism. You should already have a basic understanding of how React handles state ( read here for more information). However, if you do not, here is a quick overview. A React.Component is generic over both Props and State (with default empty object types). Props should be considered read-only from the point of view of the component and is the mechanism for passing in \"arguments\" to a component. State is a component's internal state and can be read by accessing the parent field state . State must be updated using the setState parent method which merges the new data with the old state. React does do some optimizations around re-rendering components after quick successions of setState calls. How mobx works: # mobx is a package that provides an abstraction over React 's state management. The three main concepts are: - observable : data stored in the component's state - action : a function that modifies any observable data - computed : data that is derived from observable data but is not actually stored. Think of this as computing isEmpty vs an observable field called count . Further reading is available from mobx 's website .","title":"Working with mobx"},{"location":"extensions/guides/working-with-mobx/#working-with-mobx","text":"","title":"Working with mobx"},{"location":"extensions/guides/working-with-mobx/#introduction","text":"Lens uses mobx as its state manager on top of React's state management system. This helps with having a more declarative style of managing state, as opposed to React 's native setState mechanism. You should already have a basic understanding of how React handles state ( read here for more information). However, if you do not, here is a quick overview. A React.Component is generic over both Props and State (with default empty object types). Props should be considered read-only from the point of view of the component and is the mechanism for passing in \"arguments\" to a component. State is a component's internal state and can be read by accessing the parent field state . State must be updated using the setState parent method which merges the new data with the old state. React does do some optimizations around re-rendering components after quick successions of setState calls.","title":"Introduction"},{"location":"extensions/guides/working-with-mobx/#how-mobx-works","text":"mobx is a package that provides an abstraction over React 's state management. The three main concepts are: - observable : data stored in the component's state - action : a function that modifies any observable data - computed : data that is derived from observable data but is not actually stored. Think of this as computing isEmpty vs an observable field called count . Further reading is available from mobx 's website .","title":"How mobx works:"},{"location":"extensions/testing-and-publishing/bundling/","text":"","title":"Bundling"},{"location":"extensions/testing-and-publishing/publishing/","text":"","title":"Publishing Extensions"},{"location":"extensions/testing-and-publishing/testing/","text":"Testing Extensions # Renderer Process Unit Testing # UI components in extension renderer process are based on React/ReactDOM. These components can be tested by popular React testing tools like React Testing Library . If you are using the Yeoman Lens Extension Generator to scaffold extension project. The testing environment for render process are already setup for you. Just use npm start or yarn test to run the tests. For example, I have a component GlobalPageMenuIcon and want to test if props.navigate is called when user clicks the icon. My component GlobalPageMenuIcon import React from \"react\" import { Component: { Icon } } from \"@k8slens/extensions\"; const GlobalPageMenuIcon = ({ navigate }: { navigate?: () => void }): JSX.Element => ( navigate()} data-testid=\"global-page-menu-icon\" /> ) The test import React from \"react\" import { render , screen , fireEvent } from \"@testing-library/react\" ; import GlobalPageMenuIcon from \"./GlobalPageMenuIcon\" ; test ( \"click called navigate()\" , () => { const navigate = jest . fn (); render ( < GlobalPageMenuIcon navigate = { navigate } /> ); fireEvent . click ( screen . getByTestId ( \"global-page-menu-icon\" )); expect ( navigate ). toHaveBeenCalled (); }); In the example we used React Testing Library but any React testing framework can be used to test renderer process UI components. There are more example tests in the generator's template . Extend your tests based on the examples. Main Process Unit Testing # Code in the extension main process are just normal JavaScript files that has access to extension api, you can write unit tests using any testing framework. If you are using the Yeoman Lens Extension Generator to scaffold your extension project. The testing environment Jest are setup for you. Just use npm start or yarn test to run the tests. Tips # Console.log # Extension developers might find console.log() useful for printing out information and errors from extensions. To use console.log() , note that Lens is based on Electron, and that Electron has two types of processes: Main and Renderer . Renderer Process Logs # In the Renderer process, console.log() is printed in the Console in Developer Tools ( View > Toggle Developer Tools ). Main Process Logs # Viewing the logs from the Main process is a little trickier, since they cannot be printed using Developer Tools. macOS On macOS, view the Main process logs by running Lens from the terminal: /Applications/Lens.app/Contents/MacOS/Lens You can also use Console.app to view the Main process logs. Linux On Linux, you can access the Main process logs using the Lens PID. First get the PID: ps aux | grep Lens | grep -v grep Then get the Main process logs using the PID: tail -f /proc/ [ pid ] /fd/1 # stdout (console.log) tail -f /proc/ [ pid ] /fd/2 # stdout (console.error)","title":"Testing Extensions"},{"location":"extensions/testing-and-publishing/testing/#testing-extensions","text":"","title":"Testing Extensions"},{"location":"extensions/testing-and-publishing/testing/#renderer-process-unit-testing","text":"UI components in extension renderer process are based on React/ReactDOM. These components can be tested by popular React testing tools like React Testing Library . If you are using the Yeoman Lens Extension Generator to scaffold extension project. The testing environment for render process are already setup for you. Just use npm start or yarn test to run the tests. For example, I have a component GlobalPageMenuIcon and want to test if props.navigate is called when user clicks the icon. My component GlobalPageMenuIcon import React from \"react\" import { Component: { Icon } } from \"@k8slens/extensions\"; const GlobalPageMenuIcon = ({ navigate }: { navigate?: () => void }): JSX.Element => ( navigate()} data-testid=\"global-page-menu-icon\" /> ) The test import React from \"react\" import { render , screen , fireEvent } from \"@testing-library/react\" ; import GlobalPageMenuIcon from \"./GlobalPageMenuIcon\" ; test ( \"click called navigate()\" , () => { const navigate = jest . fn (); render ( < GlobalPageMenuIcon navigate = { navigate } /> ); fireEvent . click ( screen . getByTestId ( \"global-page-menu-icon\" )); expect ( navigate ). toHaveBeenCalled (); }); In the example we used React Testing Library but any React testing framework can be used to test renderer process UI components. There are more example tests in the generator's template . Extend your tests based on the examples.","title":"Renderer Process Unit Testing"},{"location":"extensions/testing-and-publishing/testing/#main-process-unit-testing","text":"Code in the extension main process are just normal JavaScript files that has access to extension api, you can write unit tests using any testing framework. If you are using the Yeoman Lens Extension Generator to scaffold your extension project. The testing environment Jest are setup for you. Just use npm start or yarn test to run the tests.","title":"Main Process Unit Testing"},{"location":"extensions/testing-and-publishing/testing/#tips","text":"","title":"Tips"},{"location":"extensions/testing-and-publishing/testing/#consolelog","text":"Extension developers might find console.log() useful for printing out information and errors from extensions. To use console.log() , note that Lens is based on Electron, and that Electron has two types of processes: Main and Renderer .","title":"Console.log"},{"location":"extensions/testing-and-publishing/testing/#renderer-process-logs","text":"In the Renderer process, console.log() is printed in the Console in Developer Tools ( View > Toggle Developer Tools ).","title":"Renderer Process Logs"},{"location":"extensions/testing-and-publishing/testing/#main-process-logs","text":"Viewing the logs from the Main process is a little trickier, since they cannot be printed using Developer Tools.","title":"Main Process Logs"},{"location":"extensions/usage/","text":"Using Extensions # The features that Lens includes out-of-the-box are just the start. Lens extensions let you add new features to your installation to support your workflow. Rich extensibility model lets extension authors plug directly into the Lens UI and contribute functionality through the same APIs used by Lens itself. The start using Lens Extensions go to File (or Lens on macOS) > Extensions in the application menu. This is the Extensions management page where all the management of the extensions you want to use is done. Installing an Extension # There are three ways to install extensions. If you have the extension as a .tgz file then dragging and dropping it in the extension management page will install it for you. If it is hosted on the web, you can paste the URL and click Install and Lens will download and install it. The third way is to move the extension into your ~/.k8slens/extensions (or C:\\Users\\\\.k8slens\\extensions ) folder and Lens will automatically detect it and install the extension. Enabling or Disabling an Extension # Go to the extension management page and click either the Enable or Disable buttons. Extensions will be enabled by default when you first install them. A disabled extension is not loaded by Lens and is not run. Uninstalling an Extension # If, for whatever reason, you wish to remove the installation of an extension simple click the Uninstall button. This will remove all the files that Lens would need to run the extension.","title":"Using Extensions"},{"location":"extensions/usage/#using-extensions","text":"The features that Lens includes out-of-the-box are just the start. Lens extensions let you add new features to your installation to support your workflow. Rich extensibility model lets extension authors plug directly into the Lens UI and contribute functionality through the same APIs used by Lens itself. The start using Lens Extensions go to File (or Lens on macOS) > Extensions in the application menu. This is the Extensions management page where all the management of the extensions you want to use is done.","title":"Using Extensions"},{"location":"extensions/usage/#installing-an-extension","text":"There are three ways to install extensions. If you have the extension as a .tgz file then dragging and dropping it in the extension management page will install it for you. If it is hosted on the web, you can paste the URL and click Install and Lens will download and install it. The third way is to move the extension into your ~/.k8slens/extensions (or C:\\Users\\\\.k8slens\\extensions ) folder and Lens will automatically detect it and install the extension.","title":"Installing an Extension"},{"location":"extensions/usage/#enabling-or-disabling-an-extension","text":"Go to the extension management page and click either the Enable or Disable buttons. Extensions will be enabled by default when you first install them. A disabled extension is not loaded by Lens and is not run.","title":"Enabling or Disabling an Extension"},{"location":"extensions/usage/#uninstalling-an-extension","text":"If, for whatever reason, you wish to remove the installation of an extension simple click the Uninstall button. This will remove all the files that Lens would need to run the extension.","title":"Uninstalling an Extension"},{"location":"faq/","text":"FAQ # What operating systems does Lens support? # Lens supports MacOS, Windows and Linux operating systems. For Linux there are Snap and AppImage versions. For MacOS there are DMG and Homebrew options. Lens application is not opening, what might be wrong? # When Lens is started, it will start HTTP proxy server on the background and requires that operating system allows to start listening to some free port. You can see the port allocated for Lens from application logs. Lens expects also that localhost DNS points to 127.0.0.1 address. Why can't I add any clusters? # When adding new clusters, a valid Kubeconfig file is required. Please check that all contexts present in Kubeconfig file are valid. Why Cluster dashboard is not opening? # To see Cluster dashboard properly, Kubernetes cluster must be reachable either directly from your computer or via HTTP proxy. You can configure HTTP proxy in Cluster Settigns. Also, provided credentials in Kubeconfig must be valid. If Kubeconfig uses exec command, the binary must be available in global PATH or absolute path must be used. Lens application can't see PATH modifications made by any shell init scripts. There might be also some issues on the Snap version if the exec binary is installed also from Snap and requires additional symlinking, please see #699 . Why I don't see anything on Cluster dashboard? # Users will see on Cluster dashboard only those resources that they are allowed to see (RBAC). Lens requires that user has access at least to one namespace. Lens tries first fetch namespaces from Kubernetes API. If user is not allowed to list namespaces, allowed namespaces can be configured in Cluster settings or in Kubeconfig. Why I don't see any metrics or some of the metrics are not working? # In order to display cluster metrics, Lens requires that Prometheus is running in the cluster. You can install Prometheus in Cluster settings if needed. Lens tries to detect Prometheus installation automatically. If it fails to detect the installation properly, you can configure Prometheus service address in Cluster settings. If some of the metrics are not displayed correctly, you can see queries that Lens is using here and adapt your prometheus configuration to support those queries. Please refer Prometheus documentation or your Prometheus installer documentation how to do this. Kubectl is not working in Lens terminal, what should I do? # Lens tries to download correct Kubectl version for the cluster and use that in Lens terminal. Some operating systems (namely Windows) might have restrictions set that prevent downloading and executing binaries from the default location that Lens is using. You can change the directory where Lens downloads the binaries in App Preferences. It's also possible to change the Download mirror to use Azure if default Google is not reachable from your network. If downloading Kubectl is not option for you, you can define path to pre-installed Kubectl on your machine and Lens will use that binary instead. How can I configure Helm repositories? # Lens comes with bundled Helm 3 binary and Lens will add by default bitnami repository if no other repositories are configured. You can add more repositories from Artifact HUB in App preferences. At this moment it is not possible to add private repositories. Those and other public repositories can be added manually via command line. Where can I find application logs? # Lens will store application logs to following locations depending on your operating system: - MacOS: ~/Library/Logs/Lens/ - Windows: %USERPROFILE%\\AppData\\Roaming\\Lens\\logs\\ - Linux: ~/.config/Lens/logs/ How can I see more verbose logs? # You can start Lens application on debug mode from the command line to see more verbose logs. To start application on debug mode, please provide DEBUG=true environment variable and before starting the application, for example: DEBUG=TRUE /Applications/Lens.app/Contents/MacOS/Lens","title":"FAQ"},{"location":"faq/#faq","text":"","title":"FAQ"},{"location":"faq/#what-operating-systems-does-lens-support","text":"Lens supports MacOS, Windows and Linux operating systems. For Linux there are Snap and AppImage versions. For MacOS there are DMG and Homebrew options.","title":"What operating systems does Lens support?"},{"location":"faq/#lens-application-is-not-opening-what-might-be-wrong","text":"When Lens is started, it will start HTTP proxy server on the background and requires that operating system allows to start listening to some free port. You can see the port allocated for Lens from application logs. Lens expects also that localhost DNS points to 127.0.0.1 address.","title":"Lens application is not opening, what might be wrong?"},{"location":"faq/#why-cant-i-add-any-clusters","text":"When adding new clusters, a valid Kubeconfig file is required. Please check that all contexts present in Kubeconfig file are valid.","title":"Why can't I add any clusters?"},{"location":"faq/#why-cluster-dashboard-is-not-opening","text":"To see Cluster dashboard properly, Kubernetes cluster must be reachable either directly from your computer or via HTTP proxy. You can configure HTTP proxy in Cluster Settigns. Also, provided credentials in Kubeconfig must be valid. If Kubeconfig uses exec command, the binary must be available in global PATH or absolute path must be used. Lens application can't see PATH modifications made by any shell init scripts. There might be also some issues on the Snap version if the exec binary is installed also from Snap and requires additional symlinking, please see #699 .","title":"Why Cluster dashboard is not opening?"},{"location":"faq/#why-i-dont-see-anything-on-cluster-dashboard","text":"Users will see on Cluster dashboard only those resources that they are allowed to see (RBAC). Lens requires that user has access at least to one namespace. Lens tries first fetch namespaces from Kubernetes API. If user is not allowed to list namespaces, allowed namespaces can be configured in Cluster settings or in Kubeconfig.","title":"Why I don't see anything on Cluster dashboard?"},{"location":"faq/#why-i-dont-see-any-metrics-or-some-of-the-metrics-are-not-working","text":"In order to display cluster metrics, Lens requires that Prometheus is running in the cluster. You can install Prometheus in Cluster settings if needed. Lens tries to detect Prometheus installation automatically. If it fails to detect the installation properly, you can configure Prometheus service address in Cluster settings. If some of the metrics are not displayed correctly, you can see queries that Lens is using here and adapt your prometheus configuration to support those queries. Please refer Prometheus documentation or your Prometheus installer documentation how to do this.","title":"Why I don't see any metrics or some of the metrics are not working?"},{"location":"faq/#kubectl-is-not-working-in-lens-terminal-what-should-i-do","text":"Lens tries to download correct Kubectl version for the cluster and use that in Lens terminal. Some operating systems (namely Windows) might have restrictions set that prevent downloading and executing binaries from the default location that Lens is using. You can change the directory where Lens downloads the binaries in App Preferences. It's also possible to change the Download mirror to use Azure if default Google is not reachable from your network. If downloading Kubectl is not option for you, you can define path to pre-installed Kubectl on your machine and Lens will use that binary instead.","title":"Kubectl is not working in Lens terminal, what should I do?"},{"location":"faq/#how-can-i-configure-helm-repositories","text":"Lens comes with bundled Helm 3 binary and Lens will add by default bitnami repository if no other repositories are configured. You can add more repositories from Artifact HUB in App preferences. At this moment it is not possible to add private repositories. Those and other public repositories can be added manually via command line.","title":"How can I configure Helm repositories?"},{"location":"faq/#where-can-i-find-application-logs","text":"Lens will store application logs to following locations depending on your operating system: - MacOS: ~/Library/Logs/Lens/ - Windows: %USERPROFILE%\\AppData\\Roaming\\Lens\\logs\\ - Linux: ~/.config/Lens/logs/","title":"Where can I find application logs?"},{"location":"faq/#how-can-i-see-more-verbose-logs","text":"You can start Lens application on debug mode from the command line to see more verbose logs. To start application on debug mode, please provide DEBUG=true environment variable and before starting the application, for example: DEBUG=TRUE /Applications/Lens.app/Contents/MacOS/Lens","title":"How can I see more verbose logs?"},{"location":"getting-started/","text":"Getting Started # Lens is lightweight and simple to install. You'll be up and running in just a few minutes. System Requirements # Review the System Requirements to check if your computer configuration is supported. macOS # Download Lens for macOS. Open the browser's download list and locate the downloaded archive. Select the 'magnifying glass' icon to open the archive in Finder. Double-click Lens-{version}.dmg and drag Lens.app to the Applications folder, making it available in the macOS Launchpad. Add Lens to your Dock by right-clicking on the icon to bring up the context menu and choosing Options , Keep in Dock . Windows # Download the Lens installer for Windows. Once it is downloaded, run the installer Lens-Setup-{version}.exe . This will only take a minute. By default, Lens is installed under C:\\users\\{username}\\AppData\\Local\\Programs\\Lens . Linux # See the Download Lens page for a complete list of available installation options. Snap # Lens is officially distributed as a Snap package in the Snap Store : You can install it by running: sudo snap install kontena-lens --classic Update Cadence # Lens releases a new version each month with new features and important bug fixes. Lens supports auto updating and you will be prompted to install the new release when it becomes available! To stay current with the Lens features, you can review the release notes . Next Steps # Add clusters Watch introductory videos","title":"Getting Started"},{"location":"getting-started/#getting-started","text":"Lens is lightweight and simple to install. You'll be up and running in just a few minutes.","title":"Getting Started"},{"location":"getting-started/#system-requirements","text":"Review the System Requirements to check if your computer configuration is supported.","title":"System Requirements"},{"location":"getting-started/#macos","text":"Download Lens for macOS. Open the browser's download list and locate the downloaded archive. Select the 'magnifying glass' icon to open the archive in Finder. Double-click Lens-{version}.dmg and drag Lens.app to the Applications folder, making it available in the macOS Launchpad. Add Lens to your Dock by right-clicking on the icon to bring up the context menu and choosing Options , Keep in Dock .","title":"macOS"},{"location":"getting-started/#windows","text":"Download the Lens installer for Windows. Once it is downloaded, run the installer Lens-Setup-{version}.exe . This will only take a minute. By default, Lens is installed under C:\\users\\{username}\\AppData\\Local\\Programs\\Lens .","title":"Windows"},{"location":"getting-started/#linux","text":"See the Download Lens page for a complete list of available installation options.","title":"Linux"},{"location":"getting-started/#snap","text":"Lens is officially distributed as a Snap package in the Snap Store : You can install it by running: sudo snap install kontena-lens --classic","title":"Snap"},{"location":"getting-started/#update-cadence","text":"Lens releases a new version each month with new features and important bug fixes. Lens supports auto updating and you will be prompted to install the new release when it becomes available! To stay current with the Lens features, you can review the release notes .","title":"Update Cadence"},{"location":"getting-started/#next-steps","text":"Add clusters Watch introductory videos","title":"Next Steps"},{"location":"getting-started/introductory-videos/","text":"Introductory Videos # Continue your Lens journey with this set of introductory videos! These videos are meant to quickly familiarize you with Lens' various powerful features. Getting started Get Lens Kubernetes IDE Running in 5 Minutes Duration 35 minutes Introducing Lens Lens Kubernetes IDE overview Duration 2 minutes Demo of Mirantis Lens The Best IDE For Kubernetes Duration 10 minutes","title":"Introductory Videos"},{"location":"getting-started/introductory-videos/#introductory-videos","text":"Continue your Lens journey with this set of introductory videos! These videos are meant to quickly familiarize you with Lens' various powerful features.","title":"Introductory Videos"},{"location":"getting-started/preferences/","text":"Preferences # Color Themes # The Color Themes option in Lens preferences lets you set the colors in the Lens user interface to suit your liking. Go to File > Preferences ( Lens > Preferences on Mac). Select your preferred theme from the Color Theme dropdown. Telemetry & Usage Tracking # Lens collects telemetry data, which is used to help us understand how to improve the product. For example, this usage data helps us to debug issues and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data. Please see our privacy statement to learn more. Disable Telemetry Reporting # If you don't wish to send usage data to Mirantis, you can disable the \"Telemetry & Usage Tracking\" in the Lens preferences. Go to File > Preferences ( Lens > Preferences on Mac). Scroll down to Telemetry & Usage Tracking Uncheck Allow Telemetry & Usage Tracking . This will silence all telemetry events from Lens going forward. Telemetry information may have been collected and sent up until the point when you disable this setting.","title":"Preferences"},{"location":"getting-started/preferences/#preferences","text":"","title":"Preferences"},{"location":"getting-started/preferences/#color-themes","text":"The Color Themes option in Lens preferences lets you set the colors in the Lens user interface to suit your liking. Go to File > Preferences ( Lens > Preferences on Mac). Select your preferred theme from the Color Theme dropdown.","title":"Color Themes"},{"location":"getting-started/preferences/#telemetry-usage-tracking","text":"Lens collects telemetry data, which is used to help us understand how to improve the product. For example, this usage data helps us to debug issues and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data. Please see our privacy statement to learn more.","title":"Telemetry & Usage Tracking"},{"location":"getting-started/preferences/#disable-telemetry-reporting","text":"If you don't wish to send usage data to Mirantis, you can disable the \"Telemetry & Usage Tracking\" in the Lens preferences. Go to File > Preferences ( Lens > Preferences on Mac). Scroll down to Telemetry & Usage Tracking Uncheck Allow Telemetry & Usage Tracking . This will silence all telemetry events from Lens going forward. Telemetry information may have been collected and sent up until the point when you disable this setting.","title":"Disable Telemetry Reporting"},{"location":"helm/","text":"Using Helm Charts # Lens has integration to Helm making it easy to install and manage Helm charts and releases in Apps section. Managing Helm Reporistories # Used Helm repositories are possible to configure in the Preferences . Lens app will fetch available Helm repositories from the Artifact HUB and automatically add bitnami repository by default if no other repositories are already configured. If any other repositories are needed to add, those can be added manually via command line. Note! Configured Helm repositories are added globally to user's computer, so other processes can see those as well. Installing a Helm Chart # Lens will list all charts from configured Helm repositries on Apps section. To install a chart, you need to select a chart and click \"Install\" button. Lens will open the chart in the editor where you can select a chart version, target namespace and give optionally a name for the release and configure values for the release. Finally, by clicking \"Install\" button Lens will deploy the chart into the cluster. Updating a Helm Release # To update a Helm release, you can open the release details and modify the release values and click \"Save\" button. To upgrade or downgrade the release, click \"Upgrade\" button in the release details. In the release editor you can select a new chart version and edit the release values if needed and then click \"Upgrade\" or \"Upgrade and Close\" button. Deleting a Helm Release # To delete existing Helm release open the release details and click trash can icon on the top of the panel. Deletion removes all Kubernetes resources created by the Helm release. Note! If the release included any persistent volumes, those are required to remove manually!","title":"Using Helm Charts"},{"location":"helm/#using-helm-charts","text":"Lens has integration to Helm making it easy to install and manage Helm charts and releases in Apps section.","title":"Using Helm Charts"},{"location":"helm/#managing-helm-reporistories","text":"Used Helm repositories are possible to configure in the Preferences . Lens app will fetch available Helm repositories from the Artifact HUB and automatically add bitnami repository by default if no other repositories are already configured. If any other repositories are needed to add, those can be added manually via command line. Note! Configured Helm repositories are added globally to user's computer, so other processes can see those as well.","title":"Managing Helm Reporistories"},{"location":"helm/#installing-a-helm-chart","text":"Lens will list all charts from configured Helm repositries on Apps section. To install a chart, you need to select a chart and click \"Install\" button. Lens will open the chart in the editor where you can select a chart version, target namespace and give optionally a name for the release and configure values for the release. Finally, by clicking \"Install\" button Lens will deploy the chart into the cluster.","title":"Installing a Helm Chart"},{"location":"helm/#updating-a-helm-release","text":"To update a Helm release, you can open the release details and modify the release values and click \"Save\" button. To upgrade or downgrade the release, click \"Upgrade\" button in the release details. In the release editor you can select a new chart version and edit the release values if needed and then click \"Upgrade\" or \"Upgrade and Close\" button.","title":"Updating a Helm Release"},{"location":"helm/#deleting-a-helm-release","text":"To delete existing Helm release open the release details and click trash can icon on the top of the panel. Deletion removes all Kubernetes resources created by the Helm release. Note! If the release included any persistent volumes, those are required to remove manually!","title":"Deleting a Helm Release"},{"location":"support/","text":"Support # Here you will find different ways of getting support for Lens IDE. Community Support # Community Slack - Request for support and help from the Lens community via Slack. Github Issues - Submit your issues and feature requests to Lens IDE via Github. Commercial Support & Services # If you are interested in paid support options, professional services or training, please see the offerings from the following vendors: Mirantis offers commercial support for officially released versions of Lens IDE on MacOS, Windows and Linux operating systems. In addition, Mirantis offers professional services to create proprietary / custom Lens IDE extensions and custom msi packaging to meet enterprise IT policies for software distribution and configuration. Training is also available. If you'd like to get your business listed in here, please contact us via email info@k8slens.dev","title":"Support"},{"location":"support/#support","text":"Here you will find different ways of getting support for Lens IDE.","title":"Support"},{"location":"support/#community-support","text":"Community Slack - Request for support and help from the Lens community via Slack. Github Issues - Submit your issues and feature requests to Lens IDE via Github.","title":"Community Support"},{"location":"support/#commercial-support-services","text":"If you are interested in paid support options, professional services or training, please see the offerings from the following vendors: Mirantis offers commercial support for officially released versions of Lens IDE on MacOS, Windows and Linux operating systems. In addition, Mirantis offers professional services to create proprietary / custom Lens IDE extensions and custom msi packaging to meet enterprise IT policies for software distribution and configuration. Training is also available. If you'd like to get your business listed in here, please contact us via email info@k8slens.dev","title":"Commercial Support & Services"},{"location":"supporting/requirements/","text":"Requirements for Lens # Hardware # Lens is a small download (< 300 MB) and has a disk footprint of 600 MB. Lens is lightweight and should easily run on today's hardware. We recommend: 2 GHz or faster processor 1 GB of RAM Platforms # Lens has been tested on the following platforms: macOS Windows Linux Additional Windows requirements # ... Additional Linux Requirements # ...","title":"Requirements for Lens"},{"location":"supporting/requirements/#requirements-for-lens","text":"","title":"Requirements for Lens"},{"location":"supporting/requirements/#hardware","text":"Lens is a small download (< 300 MB) and has a disk footprint of 600 MB. Lens is lightweight and should easily run on today's hardware. We recommend: 2 GHz or faster processor 1 GB of RAM","title":"Hardware"},{"location":"supporting/requirements/#platforms","text":"Lens has been tested on the following platforms: macOS Windows Linux","title":"Platforms"},{"location":"supporting/requirements/#additional-windows-requirements","text":"...","title":"Additional Windows requirements"},{"location":"supporting/requirements/#additional-linux-requirements","text":"...","title":"Additional Linux Requirements"}]} \ No newline at end of file +{"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Overview # Lens is the most powerful Kubernetes IDE on the market. It is a standalone application, and it is available on macOS, Windows, and Linux. Some of the benefits of using Lens include: Confidence that your clusters are properly setup and configured. Increased visibility, real time statistics, log streams, and hands-on troubleshooting capabilities. The ability to work with your clusters quickly and easily, radically improving productivity and the speed of business. Watch this introductory video to see Lens in action: Note: Use CTRL+click (on Windows and Linux) or CMD+click (on MacOS) to open the above in a new tab Downloading Lens # Download Lens for macOS, Windows, or Linux. Quick Start # Get up and running quickly by learning to add clusters .","title":"Overview"},{"location":"#overview","text":"Lens is the most powerful Kubernetes IDE on the market. It is a standalone application, and it is available on macOS, Windows, and Linux. Some of the benefits of using Lens include: Confidence that your clusters are properly setup and configured. Increased visibility, real time statistics, log streams, and hands-on troubleshooting capabilities. The ability to work with your clusters quickly and easily, radically improving productivity and the speed of business. Watch this introductory video to see Lens in action: Note: Use CTRL+click (on Windows and Linux) or CMD+click (on MacOS) to open the above in a new tab","title":"Overview"},{"location":"#downloading-lens","text":"Download Lens for macOS, Windows, or Linux.","title":"Downloading Lens"},{"location":"#quick-start","text":"Get up and running quickly by learning to add clusters .","title":"Quick Start"},{"location":"clusters/adding-clusters/","text":"Adding Clusters # Add clusters by clicking the Add Cluster button in the left-side menu. Click the Add Cluster button (indicated with a '+' icon). Enter the path to your kubeconfig file. You'll need to have a kubeconfig file for the cluster you want to add. You can either browse for the path from the file system or or enter it directly. Selected cluster contexts are added as a separate item in the left-side cluster menu to allow you to operate easily on multiple clusters and/or contexts. NOTE : Any cluster that you added manually will not be merged into your kubeconfig file. For more information on kubeconfig see Kubernetes docs . To see your currently-enabled config with kubectl , enter kubectl config view --minify --raw in your terminal. When connecting to a cluster, make sure you have a valid and working kubeconfig for the cluster. Following lists known \"gotchas\" in some authentication types used in kubeconfig with Lens app. Exec auth plugins # When using exec auth plugins make sure the paths that are used to call any binaries are full paths as Lens app might not be able to call binaries with relative paths. Make also sure that you pass all needed information either as arguments or env variables in the config, Lens app might not have all login shell env variables set automatically.","title":"Adding Clusters"},{"location":"clusters/adding-clusters/#adding-clusters","text":"Add clusters by clicking the Add Cluster button in the left-side menu. Click the Add Cluster button (indicated with a '+' icon). Enter the path to your kubeconfig file. You'll need to have a kubeconfig file for the cluster you want to add. You can either browse for the path from the file system or or enter it directly. Selected cluster contexts are added as a separate item in the left-side cluster menu to allow you to operate easily on multiple clusters and/or contexts. NOTE : Any cluster that you added manually will not be merged into your kubeconfig file. For more information on kubeconfig see Kubernetes docs . To see your currently-enabled config with kubectl , enter kubectl config view --minify --raw in your terminal. When connecting to a cluster, make sure you have a valid and working kubeconfig for the cluster. Following lists known \"gotchas\" in some authentication types used in kubeconfig with Lens app.","title":"Adding Clusters"},{"location":"clusters/adding-clusters/#exec-auth-plugins","text":"When using exec auth plugins make sure the paths that are used to call any binaries are full paths as Lens app might not be able to call binaries with relative paths. Make also sure that you pass all needed information either as arguments or env variables in the config, Lens app might not have all login shell env variables set automatically.","title":"Exec auth plugins"},{"location":"clusters/removing-clusters/","text":"Removing Clusters # Remove Lens clusters using the context menu that appears when you right-click the cluster in the left-side menu that you want to remove. To remove a cluster from your cluster list: Right-click the name of the cluster in the left-side menu that you want to remove. Click Remove . NOTE : This will only remove the cluster from your Lens cluster list. It will not affect your actual Kubernetes cluster or its configuration.","title":"Removing Clusters"},{"location":"clusters/removing-clusters/#removing-clusters","text":"Remove Lens clusters using the context menu that appears when you right-click the cluster in the left-side menu that you want to remove. To remove a cluster from your cluster list: Right-click the name of the cluster in the left-side menu that you want to remove. Click Remove . NOTE : This will only remove the cluster from your Lens cluster list. It will not affect your actual Kubernetes cluster or its configuration.","title":"Removing Clusters"},{"location":"clusters/settings/","text":"Settings # It is easy to configure Lens Clusters to your liking through its various settings. Right-click the name of the cluster in the left-side menu that you want to open the settings for. Click Settings . Status # Overview of the cluster status Cluster Status # Cluster status information including the detected distribution, kernel version, API endpoint, and online status General # General cluster settings Cluster Name # The cluster name is inheritated by default from the kubeconfig file. Change the cluster name to another value by updating it here. Note that doing so does not update your kubeconfig file. Workspace # This is the Lens workspace that the cluster is associated with. Change workspaces by selecting a different workspace from the dropdown menu. Create a new workspace by clicking workspace in \"Define cluster workspace\" above the dropdown menu. This option will take you the workspaces editor. Create a new workspace and then navigate back to cluster settings. Cluster Icon # Lens randomly generates an icon to associate with each newly-created cluster. Use this setting to choose your own icon. HTTP Proxy # Some users will need to define an HTTP proxy for communicating with the Kubernetes API. Use this setting to do so. Prometheus # Lens can be configured to query a Prometheus server installed in the cluster. Select a query format by choosing either to auto-detect or from the following configurations: Lens Helm Operator Prometheus Operator Stacklight To learn more about custom Prometheus configurations, please refer to this guide . Working Directory # Use this field to set the terminal working directory. The default is $HOME . Features # Additional Lens features that can be installed by the user Metrics # Enable timeseries data visualization (Prometheus stack) for your cluster. Install this only if you don't have existing Prometheus stack installed. User Mode # User Mode feature enables non-admin users to see namespaces they have access to. This is achieved by configuring RBAC rules so that every authenticated user is granted to list namespaces. Removal # Use this setting to remove the current cluster.","title":"Settings"},{"location":"clusters/settings/#settings","text":"It is easy to configure Lens Clusters to your liking through its various settings. Right-click the name of the cluster in the left-side menu that you want to open the settings for. Click Settings .","title":"Settings"},{"location":"clusters/settings/#status","text":"Overview of the cluster status","title":"Status"},{"location":"clusters/settings/#cluster-status","text":"Cluster status information including the detected distribution, kernel version, API endpoint, and online status","title":"Cluster Status"},{"location":"clusters/settings/#general","text":"General cluster settings","title":"General"},{"location":"clusters/settings/#cluster-name","text":"The cluster name is inheritated by default from the kubeconfig file. Change the cluster name to another value by updating it here. Note that doing so does not update your kubeconfig file.","title":"Cluster Name"},{"location":"clusters/settings/#workspace","text":"This is the Lens workspace that the cluster is associated with. Change workspaces by selecting a different workspace from the dropdown menu. Create a new workspace by clicking workspace in \"Define cluster workspace\" above the dropdown menu. This option will take you the workspaces editor. Create a new workspace and then navigate back to cluster settings.","title":"Workspace"},{"location":"clusters/settings/#cluster-icon","text":"Lens randomly generates an icon to associate with each newly-created cluster. Use this setting to choose your own icon.","title":"Cluster Icon"},{"location":"clusters/settings/#http-proxy","text":"Some users will need to define an HTTP proxy for communicating with the Kubernetes API. Use this setting to do so.","title":"HTTP Proxy"},{"location":"clusters/settings/#prometheus","text":"Lens can be configured to query a Prometheus server installed in the cluster. Select a query format by choosing either to auto-detect or from the following configurations: Lens Helm Operator Prometheus Operator Stacklight To learn more about custom Prometheus configurations, please refer to this guide .","title":"Prometheus"},{"location":"clusters/settings/#working-directory","text":"Use this field to set the terminal working directory. The default is $HOME .","title":"Working Directory"},{"location":"clusters/settings/#features","text":"Additional Lens features that can be installed by the user","title":"Features"},{"location":"clusters/settings/#metrics","text":"Enable timeseries data visualization (Prometheus stack) for your cluster. Install this only if you don't have existing Prometheus stack installed.","title":"Metrics"},{"location":"clusters/settings/#user-mode","text":"User Mode feature enables non-admin users to see namespaces they have access to. This is achieved by configuring RBAC rules so that every authenticated user is granted to list namespaces.","title":"User Mode"},{"location":"clusters/settings/#removal","text":"Use this setting to remove the current cluster.","title":"Removal"},{"location":"contributing/","text":"Contributing # There are multiple ways you can contribute to Lens. Even if you are not a developer, you can still contribute. We are always looking for assistance with creating or updating documentation, testing the application, reporting, and troubleshooting issues. Here are some ways you can contribute! Development \u2013 Help make Lens better. Maintaining the Project \u2013 Become a community maintainer and help us maintain the project. Extension Development \u2013 Add integrations via Lens Extensions. Documentation \u2013 Help improve Lens documentation. Promotion \u2013 Show your support, be an ambassador to Lens, write blogs, and make videos! If you are an influencer, blogger, or journalist, feel free to spread the word ! Code of Conduct # This project adheres to the Contributor Covenant code of conduct. By participating and contributing to Lens, you are expected to uphold this code. Please report unacceptable behaviour to info@k8slens.dev.","title":"Overview"},{"location":"contributing/#contributing","text":"There are multiple ways you can contribute to Lens. Even if you are not a developer, you can still contribute. We are always looking for assistance with creating or updating documentation, testing the application, reporting, and troubleshooting issues. Here are some ways you can contribute! Development \u2013 Help make Lens better. Maintaining the Project \u2013 Become a community maintainer and help us maintain the project. Extension Development \u2013 Add integrations via Lens Extensions. Documentation \u2013 Help improve Lens documentation. Promotion \u2013 Show your support, be an ambassador to Lens, write blogs, and make videos! If you are an influencer, blogger, or journalist, feel free to spread the word !","title":"Contributing"},{"location":"contributing/#code-of-conduct","text":"This project adheres to the Contributor Covenant code of conduct. By participating and contributing to Lens, you are expected to uphold this code. Please report unacceptable behaviour to info@k8slens.dev.","title":"Code of Conduct"},{"location":"contributing/development/","text":"Development # Thank you for taking the time to make a contribution to Lens. The following document is a set of guidelines and instructions for contributing to Lens. When contributing to this repository, please consider first discussing the change you wish to make by opening an issue. Recommended Reading: # TypeScript (front-end/back-end) ReactJS (front-end, ui) MobX (app-state-management, back-end/front-end) ElectronJS (chrome/node) NodeJS (api docs) Local Development Environment # Prerequisites: Nodejs v12, make, yarn make dev - builds and starts the app make clean - cleanup local environment build artifacts Github Workflow # We Use Github Flow , so all code changes are tracked via Pull Requests. A detailed guide on the recommended workflow can be found below: Github Workflow Code Testing # All submitted PRs go through a set of tests and reviews. You can run most of these tests before a PR is submitted. In fact, we recommend it, because it will save on many possible review iterations and automated tests. The testing guidelines can be found here: Contributor's Guide to Testing License # By contributing, you agree that your contributions will be licensed as described in LICENSE .","title":"Development"},{"location":"contributing/development/#development","text":"Thank you for taking the time to make a contribution to Lens. The following document is a set of guidelines and instructions for contributing to Lens. When contributing to this repository, please consider first discussing the change you wish to make by opening an issue.","title":"Development"},{"location":"contributing/development/#recommended-reading","text":"TypeScript (front-end/back-end) ReactJS (front-end, ui) MobX (app-state-management, back-end/front-end) ElectronJS (chrome/node) NodeJS (api docs)","title":"Recommended Reading:"},{"location":"contributing/development/#local-development-environment","text":"Prerequisites: Nodejs v12, make, yarn make dev - builds and starts the app make clean - cleanup local environment build artifacts","title":"Local Development Environment"},{"location":"contributing/development/#github-workflow","text":"We Use Github Flow , so all code changes are tracked via Pull Requests. A detailed guide on the recommended workflow can be found below: Github Workflow","title":"Github Workflow"},{"location":"contributing/development/#code-testing","text":"All submitted PRs go through a set of tests and reviews. You can run most of these tests before a PR is submitted. In fact, we recommend it, because it will save on many possible review iterations and automated tests. The testing guidelines can be found here: Contributor's Guide to Testing","title":"Code Testing"},{"location":"contributing/development/#license","text":"By contributing, you agree that your contributions will be licensed as described in LICENSE .","title":"License"},{"location":"contributing/documentation/","text":"Documentation # We are glad to see you're interested in contributing to the Lens documentation. If this is the first Open Source project you've contributed to, we strongly suggest reading GitHub's excellent guide: How to Contribute to Open Source . Finding Documentation Issues to Work On # You can find a list of open documentation-related issues here . When you find something you would like to work on: Express your interest to start working on an issue via comments. One of the maintainers will assign the issue for you. You can start working on the issue. When you're done, simply submit a pull request. Requirements for Documentation Pull Requests # When you create a new pull request, we expect some requirements to be met. Follow this naming convention for Pull Requests: When adding new documentation, add New Documentation: before the title. E.g. New Documentation: Getting Started When fixing documentation, add Fix Documentation: before the title. E.g. Fix Documentation: Getting Started When updating documentation, add Update Documentation: before the title. E.g. Update Documentation: Getting Started If your Pull Request closes an issue, you must write Closes #ISSUE_NUMBER where the ISSUE_NUMBER is the number in the end of the link url or the relevent issue. This will link your pull request to the issue, and when it is merged, the issue will close. For each pull request made, we run tests to check if there are any broken links, the markdown formatting is valid, and the linter is passing. Testing Documentation Site Locally # Run a local instance of mkdocs in a docker container for developing the Lens Documentation. Prerequisites: docker, yarn make docs - local build and serve of mkdocs with auto update enabled Go to localhost:8000 .","title":"Documentation"},{"location":"contributing/documentation/#documentation","text":"We are glad to see you're interested in contributing to the Lens documentation. If this is the first Open Source project you've contributed to, we strongly suggest reading GitHub's excellent guide: How to Contribute to Open Source .","title":"Documentation"},{"location":"contributing/documentation/#finding-documentation-issues-to-work-on","text":"You can find a list of open documentation-related issues here . When you find something you would like to work on: Express your interest to start working on an issue via comments. One of the maintainers will assign the issue for you. You can start working on the issue. When you're done, simply submit a pull request.","title":"Finding Documentation Issues to Work On"},{"location":"contributing/documentation/#requirements-for-documentation-pull-requests","text":"When you create a new pull request, we expect some requirements to be met. Follow this naming convention for Pull Requests: When adding new documentation, add New Documentation: before the title. E.g. New Documentation: Getting Started When fixing documentation, add Fix Documentation: before the title. E.g. Fix Documentation: Getting Started When updating documentation, add Update Documentation: before the title. E.g. Update Documentation: Getting Started If your Pull Request closes an issue, you must write Closes #ISSUE_NUMBER where the ISSUE_NUMBER is the number in the end of the link url or the relevent issue. This will link your pull request to the issue, and when it is merged, the issue will close. For each pull request made, we run tests to check if there are any broken links, the markdown formatting is valid, and the linter is passing.","title":"Requirements for Documentation Pull Requests"},{"location":"contributing/documentation/#testing-documentation-site-locally","text":"Run a local instance of mkdocs in a docker container for developing the Lens Documentation. Prerequisites: docker, yarn make docs - local build and serve of mkdocs with auto update enabled Go to localhost:8000 .","title":"Testing Documentation Site Locally"},{"location":"contributing/github_workflow/","text":"Github Workflow # Fork The Project Adding the Forked Remote Create & Rebase Your Feature Branch Commit & Push Open a Pull Request Get a code review Squash commits Push Your Final Changes This guide assumes you have already cloned the upstream repo to your system via git clone. Fork The Project # Go to http://github.com/lensapp/lens On the top, right-hand side, click on \"fork\" and select your username for the fork destination. Adding the Forked Remote # export GITHUB_USER={ your github's username } cd $WORKDIR/lens git remote add $GITHUB_USER git@github.com:${GITHUB_USER}/lens.git # Prevent push to Upstream git remote set-url --push origin no_push # Set your fork remote as a default push target git push --set-upstream $GITHUB_USER master Your remotes should look something like this: \u279c git remote -v origin https://github.com/lensapp/lens (fetch) origin no_push (push) my_fork git@github.com:{ github_username }/lens.git (fetch) my_fork git@github.com:{ github_username }/lens.git (push) Create & Rebase Your Feature Branch # Create a feature branch: git branch -b my_feature_branch Rebase your branch: git fetch origin git rebase origin/master Current branch my_feature_branch is up to date. Please don't use git pull instead of the above fetch / rebase . git pull does a merge, which leaves merge commits. These make the commit history messy and violate the principle that commits ought to be individually understandable and useful. Commit & Push # Commit and sign your changes: git commit -m \"my commit title\" --signoff You can go back and edit/build/test some more, then commit --amend in a few cycles. When ready, push your changes to your fork's repository: git push --set-upstream my_fork my_feature_branch Open a Pull Request # See Github Docs . Get a code review # Once your pull request has been opened it will be assigned to one or more reviewers, and will go through a series of smoke tests. Commit changes made in response to review comments should be added to the same branch on your fork. Very small PRs are easy to review. Very large PRs are very difficult to review. Squashing Commits # Commits on your branch should represent meaningful milestones or units of work. Small commits that contain typo fixes, rebases, review feedbacks, etc should be squashed. To do that, it's best to perform an interactive rebase : Example If you PR has 3 commits, count backwards from your last commit using HEAD~3 : git rebase -i HEAD~3 Output would be similar to this: pick f7f3f6d Changed some code pick 310154e fixed some typos pick a5f4a0d made some review changes # Rebase 710f0f8..a5f4a0d onto 710f0f8 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like \"squash\", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit # l, label
); }) Defined in src/renderer/components/layout/tab-layout.tsx:27 Const notificationsStore # \u2022 notificationsStore : NotificationsStore \u2039\u203a = new NotificationsStore() Defined in src/renderer/components/notifications/notifications.store.ts:77 Const terminalStore # \u2022 terminalStore : TerminalStore\u2039\u203a = new TerminalStore() Defined in src/renderer/components/dock/terminal.store.ts:124 Functions # DrawerItemLabels # \u25b8 DrawerItemLabels ( props : DrawerItemLabelsProps ): Element\u2039\u203a Defined in src/renderer/components/drawer/drawer-item-labels.tsx:9 Parameters: Name Type props DrawerItemLabelsProps Returns: Element\u2039\u203a SubMenu # \u25b8 SubMenu ( props : Partial\u2039 MenuProps \u203a): Element\u2039\u203a Defined in src/renderer/components/menu/menu.tsx:275 Parameters: Name Type props Partial\u2039 MenuProps \u203a Returns: Element\u2039\u203a createPodLogsTab # \u25b8 createPodLogsTab ( data : IPodLogsData, tabParams : Partial\u2039IDockTab\u203a): IDockTab Defined in src/renderer/components/dock/pod-logs.store.ts:190 Parameters: Name Type Default data IPodLogsData - tabParams Partial\u2039IDockTab\u203a {} Returns: IDockTab createTerminalTab # \u25b8 createTerminalTab ( tabParams : Partial\u2039ITerminalTab\u203a): IDockTab Defined in src/renderer/components/dock/terminal.store.ts:18 Parameters: Name Type Default tabParams Partial\u2039ITerminalTab\u203a {} Returns: IDockTab withTooltip # \u25b8 withTooltip \u2039 T \u203a( Target : T): T Defined in src/renderer/components/tooltip/withTooltip.tsx:18 Type parameters: \u25aa T : React.ComponentType\u2039any\u203a Parameters: Name Type Target T Returns: T","title":"Module: \"renderer-api/components\""},{"location":"extensions/api/modules/_renderer_api_components_/#module-renderer-apicomponents","text":"","title":"Module: \"renderer-api/components\""},{"location":"extensions/api/modules/_renderer_api_components_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_components_/#enumerations","text":"NotificationStatus TooltipPosition","title":"Enumerations"},{"location":"extensions/api/modules/_renderer_api_components_/#classes","text":"Badge Button Checkbox ConfirmDialog CubeSpinner Dialog Drawer DrawerItem DrawerParamToggler DrawerTitle Icon Input KubeEventDetails KubeObjectDetails KubeObjectListLayout KubeObjectMenu KubeObjectMeta LineProgress Menu MenuActions MenuItem Notifications NotificationsStore PageLayout Radio RadioGroup Select Slider Spinner StatusBrick Stepper Tab Table TableCell TableHead TableRow Tabs Tooltip WizardLayout","title":"Classes"},{"location":"extensions/api/modules/_renderer_api_components_/#interfaces","text":"BadgeProps ButtonProps CheckboxProps ConfirmDialogParams ConfirmDialogProps CubeSpinnerProps DialogProps DrawerItemLabelsProps DrawerItemProps DrawerParamTogglerProps DrawerProps DrawerTitleProps GroupSelectOption IconProps InputValidator KubeEventDetailsProps KubeObjectDetailsProps KubeObjectListLayoutProps KubeObjectMenuProps KubeObjectMetaProps LineProgressProps MenuActionsProps MenuItemProps MenuPosition MenuProps Notification PageLayoutProps RadioGroupProps SelectOption SelectProps SliderProps SpinnerProps StatusBrickProps StepperProps TabLayoutProps TabLayoutRoute TabProps TableCellProps TableHeadProps TableProps TableRowProps TabsProps TooltipContentFormatters TooltipDecoratorProps TooltipProps WizardLayoutProps","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_components_/#type-aliases","text":"InputProps MenuContextValue NotificationId NotificationMessage RadioProps TableCellElem TableHeadElem TableOrderBy TableRowElem TableSortBy TableSortCallback TableSortParams","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_components_/#variables","text":"InputValidators MenuContext TabLayout notificationsStore terminalStore","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_components_/#functions","text":"DrawerItemLabels SubMenu createPodLogsTab createTerminalTab withTooltip","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_components_/#type-aliases_1","text":"","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_components_/#inputprops","text":"\u01ac InputProps : Omit\u2039InputElementProps, \"onChange\" | \"onSubmit\"\u203a & object Defined in src/renderer/components/input/input.tsx:21","title":"InputProps"},{"location":"extensions/api/modules/_renderer_api_components_/#menucontextvalue","text":"\u01ac MenuContextValue : Menu Defined in src/renderer/components/menu/menu.tsx:11","title":"MenuContextValue"},{"location":"extensions/api/modules/_renderer_api_components_/#notificationid","text":"\u01ac NotificationId : string | number Defined in src/renderer/components/notifications/notifications.store.ts:7","title":"NotificationId"},{"location":"extensions/api/modules/_renderer_api_components_/#notificationmessage","text":"\u01ac NotificationMessage : React.ReactNode | React.ReactNode[] | JsonApiErrorParsed Defined in src/renderer/components/notifications/notifications.store.ts:8","title":"NotificationMessage"},{"location":"extensions/api/modules/_renderer_api_components_/#radioprops","text":"\u01ac RadioProps : HTMLProps\u2039any\u203a & object Defined in src/renderer/components/radio/radio.tsx:40","title":"RadioProps"},{"location":"extensions/api/modules/_renderer_api_components_/#tablecellelem","text":"\u01ac TableCellElem : ReactElement\u2039 TableCellProps \u203a Defined in src/renderer/components/table/table-cell.tsx:9","title":"TableCellElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tableheadelem","text":"\u01ac TableHeadElem : ReactElement\u2039 TableHeadProps \u203a Defined in src/renderer/components/table/table-head.tsx:6","title":"TableHeadElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tableorderby","text":"\u01ac TableOrderBy : \"asc\" | \"desc\" | string Defined in src/renderer/components/table/table.tsx:18","title":"TableOrderBy"},{"location":"extensions/api/modules/_renderer_api_components_/#tablerowelem","text":"\u01ac TableRowElem : ReactElement\u2039 TableRowProps \u203a Defined in src/renderer/components/table/table-row.tsx:7","title":"TableRowElem"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortby","text":"\u01ac TableSortBy : string Defined in src/renderer/components/table/table.tsx:17","title":"TableSortBy"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortcallback","text":"\u01ac TableSortCallback : function Defined in src/renderer/components/table/table.tsx:20","title":"TableSortCallback"},{"location":"extensions/api/modules/_renderer_api_components_/#tablesortparams","text":"\u01ac TableSortParams : object Defined in src/renderer/components/table/table.tsx:19","title":"TableSortParams"},{"location":"extensions/api/modules/_renderer_api_components_/#variables_1","text":"","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_components_/#inputvalidators","text":"\u2022 InputValidators : InputValidators Defined in src/renderer/components/input/input.tsx:14","title":"InputValidators"},{"location":"extensions/api/modules/_renderer_api_components_/#const-menucontext","text":"\u2022 MenuContext : Context\u2039 Menu \u2039\u203a\u203a = React.createContext (null) Defined in src/renderer/components/menu/menu.tsx:10","title":"Const MenuContext"},{"location":"extensions/api/modules/_renderer_api_components_/#const-tablayout","text":"\u2022 TabLayout : (Anonymous function) = observer(({ className, contentClass, tabs = [], children }: TabLayoutProps) => { const currentLocation = navigation.location.pathname; const hasTabs = tabs.length > 0; const startTabUrl = hasTabs ? (tabs.find(tab => tab.default) || tabs[0])?.url : null; return ( {hasTabs && ( navigate(url)}> {tabs.map(({ title, routePath, url = routePath, exact }) => { const isActive = !!matchPath(currentLocation, { path: routePath, exact }); return ; })} )}
{hasTabs && ( {tabs.map(({ routePath, exact, component }) => { return ; })} )} {children}
); }) Defined in src/renderer/components/layout/tab-layout.tsx:27","title":"Const TabLayout"},{"location":"extensions/api/modules/_renderer_api_components_/#const-notificationsstore","text":"\u2022 notificationsStore : NotificationsStore \u2039\u203a = new NotificationsStore() Defined in src/renderer/components/notifications/notifications.store.ts:77","title":"Const notificationsStore"},{"location":"extensions/api/modules/_renderer_api_components_/#const-terminalstore","text":"\u2022 terminalStore : TerminalStore\u2039\u203a = new TerminalStore() Defined in src/renderer/components/dock/terminal.store.ts:124","title":"Const terminalStore"},{"location":"extensions/api/modules/_renderer_api_components_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_components_/#draweritemlabels","text":"\u25b8 DrawerItemLabels ( props : DrawerItemLabelsProps ): Element\u2039\u203a Defined in src/renderer/components/drawer/drawer-item-labels.tsx:9 Parameters: Name Type props DrawerItemLabelsProps Returns: Element\u2039\u203a","title":"DrawerItemLabels"},{"location":"extensions/api/modules/_renderer_api_components_/#submenu","text":"\u25b8 SubMenu ( props : Partial\u2039 MenuProps \u203a): Element\u2039\u203a Defined in src/renderer/components/menu/menu.tsx:275 Parameters: Name Type props Partial\u2039 MenuProps \u203a Returns: Element\u2039\u203a","title":"SubMenu"},{"location":"extensions/api/modules/_renderer_api_components_/#createpodlogstab","text":"\u25b8 createPodLogsTab ( data : IPodLogsData, tabParams : Partial\u2039IDockTab\u203a): IDockTab Defined in src/renderer/components/dock/pod-logs.store.ts:190 Parameters: Name Type Default data IPodLogsData - tabParams Partial\u2039IDockTab\u203a {} Returns: IDockTab","title":"createPodLogsTab"},{"location":"extensions/api/modules/_renderer_api_components_/#createterminaltab","text":"\u25b8 createTerminalTab ( tabParams : Partial\u2039ITerminalTab\u203a): IDockTab Defined in src/renderer/components/dock/terminal.store.ts:18 Parameters: Name Type Default tabParams Partial\u2039ITerminalTab\u203a {} Returns: IDockTab","title":"createTerminalTab"},{"location":"extensions/api/modules/_renderer_api_components_/#withtooltip","text":"\u25b8 withTooltip \u2039 T \u203a( Target : T): T Defined in src/renderer/components/tooltip/withTooltip.tsx:18 Type parameters: \u25aa T : React.ComponentType\u2039any\u203a Parameters: Name Type Target T Returns: T","title":"withTooltip"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/","text":"Module: \"renderer-api/k8s-api\" # Index # Enumerations # KubeObjectStatusLevel Classes # CRDResourceStore CRDStore ClusterRole ClusterRoleBinding ConfigMap ConfigMapsStore CronJob CronJobStore CustomResourceDefinition DaemonSet DaemonSetStore Deployment DeploymentApi DeploymentStore Endpoint EndpointStore EventStore HPAStore HorizontalPodAutoscaler Ingress IngressApi IngressStore Job JobStore KubeApi KubeEvent KubeObject KubeObjectStore Namespace NamespaceStore NetworkPolicy NetworkPolicyStore Node NodesApi NodesStore PersistentVolume PersistentVolumeClaim PersistentVolumeClaimsApi PersistentVolumesStore Pod PodDisruptionBudget PodDisruptionBudgetsStore PodsApi PodsStore ReplicaSet ReplicaSetStore ResourceQuota ResourceQuotasStore Role RoleBinding RoleBindingsStore RolesStore Secret SecretsStore Service ServiceAccount ServiceAccountsStore ServiceStore StatefulSet StatefulSetStore StorageClass StorageClassStore VolumeClaimStore Interfaces # IKubeApiCluster IPodContainer IPodContainerStatus ISecretRef Type aliases # KubeObjectStatus Variables # apiManager clusterRoleApi clusterRoleBindingApi configMapApi crdApi cronJobApi daemonSetApi deploymentApi endpointApi eventApi hpaApi ingressApi jobApi namespacesApi networkPolicyApi nodesApi pdbApi persistentVolumeApi podsApi pvcApi replicaSetApi resourceQuotaApi roleApi roleBindingApi secretsApi serviceAccountsApi serviceApi statefulSetApi storageClassApi Functions # forCluster isAllowedResource Type aliases # KubeObjectStatus # \u01ac KubeObjectStatus : object Defined in src/extensions/renderer-api/kube-object-status.ts:1 Type declaration: level : KubeObjectStatusLevel text : string timestamp ? : string Variables # Const apiManager # \u2022 apiManager : ApiManager\u2039\u203a = new ApiManager() Defined in src/renderer/api/api-manager.ts:54 Const clusterRoleApi # \u2022 clusterRoleApi : KubeApi \u2039 ClusterRole \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRole, }) Defined in src/renderer/api/endpoints/cluster-role.api.ts:12 Const clusterRoleBindingApi # \u2022 clusterRoleBindingApi : KubeApi \u2039 ClusterRoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRoleBinding, }) Defined in src/renderer/api/endpoints/cluster-role-binding.api.ts:10 Const configMapApi # \u2022 configMapApi : KubeApi \u2039 ConfigMap \u2039\u203a\u203a = new KubeApi({ objectConstructor: ConfigMap, }) Defined in src/renderer/api/endpoints/configmap.api.ts:26 Const crdApi # \u2022 crdApi : KubeApi \u2039 CustomResourceDefinition \u2039\u203a\u203a = new KubeApi ({ objectConstructor: CustomResourceDefinition, checkPreferredVersion: true, }) Defined in src/renderer/api/endpoints/crd.api.ts:154 Const cronJobApi # \u2022 cronJobApi : KubeApi \u2039 CronJob \u2039\u203a\u203a = new KubeApi({ objectConstructor: CronJob, }) Defined in src/renderer/api/endpoints/cron-job.api.ts:95 Const daemonSetApi # \u2022 daemonSetApi : KubeApi \u2039 DaemonSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: DaemonSet, }) Defined in src/renderer/api/endpoints/daemon-set.api.ts:74 Const deploymentApi # \u2022 deploymentApi : DeploymentApi \u2039\u203a = new DeploymentApi({ objectConstructor: Deployment, }) Defined in src/renderer/api/endpoints/deployment.api.ts:193 Const endpointApi # \u2022 endpointApi : KubeApi \u2039 Endpoint \u2039\u203a\u203a = new KubeApi({ objectConstructor: Endpoint, }) Defined in src/renderer/api/endpoints/endpoint.api.ts:127 Const eventApi # \u2022 eventApi : KubeApi \u2039 KubeEvent \u2039\u203a\u203a = new KubeApi({ objectConstructor: KubeEvent, }) Defined in src/renderer/api/endpoints/events.api.ts:59 Const hpaApi # \u2022 hpaApi : KubeApi \u2039 HorizontalPodAutoscaler \u2039\u203a\u203a = new KubeApi({ objectConstructor: HorizontalPodAutoscaler, }) Defined in src/renderer/api/endpoints/hpa.api.ts:143 Const ingressApi # \u2022 ingressApi : IngressApi \u2039\u203a = new IngressApi({ objectConstructor: Ingress, // Add fallback for Kubernetes <1.19 checkPreferredVersion: true, fallbackApiBases: [\"/apis/extensions/v1beta1/ingresses\"], logStuff: true } as any) Defined in src/renderer/api/endpoints/ingress.api.ts:177 Const jobApi # \u2022 jobApi : KubeApi \u2039 Job \u2039\u203a\u203a = new KubeApi({ objectConstructor: Job, }) Defined in src/renderer/api/endpoints/job.api.ts:110 Const namespacesApi # \u2022 namespacesApi : KubeApi \u2039 Namespace \u2039\u203a\u203a = new KubeApi({ objectConstructor: Namespace, }) Defined in src/renderer/api/endpoints/namespaces.api.ts:25 Const networkPolicyApi # \u2022 networkPolicyApi : KubeApi \u2039 NetworkPolicy \u2039\u203a\u203a = new KubeApi({ objectConstructor: NetworkPolicy, }) Defined in src/renderer/api/endpoints/network-policy.api.ts:71 Const nodesApi # \u2022 nodesApi : NodesApi \u2039\u203a = new NodesApi({ objectConstructor: Node, }) Defined in src/renderer/api/endpoints/nodes.api.ts:169 Const pdbApi # \u2022 pdbApi : KubeApi \u2039 PodDisruptionBudget \u2039\u203a\u203a = new KubeApi({ objectConstructor: PodDisruptionBudget, }) Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:47 Const persistentVolumeApi # \u2022 persistentVolumeApi : KubeApi \u2039 PersistentVolume \u2039\u203a\u203a = new KubeApi({ objectConstructor: PersistentVolume, }) Defined in src/renderer/api/endpoints/persistent-volume.api.ts:73 Const podsApi # \u2022 podsApi : PodsApi \u2039\u203a = new PodsApi({ objectConstructor: Pod, }) Defined in src/renderer/api/endpoints/pods.api.ts:459 Const pvcApi # \u2022 pvcApi : PersistentVolumeClaimsApi \u2039\u203a = new PersistentVolumeClaimsApi({ objectConstructor: PersistentVolumeClaim, }) Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:90 Const replicaSetApi # \u2022 replicaSetApi : KubeApi \u2039 ReplicaSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: ReplicaSet, }) Defined in src/renderer/api/endpoints/replica-set.api.ts:56 Const resourceQuotaApi # \u2022 resourceQuotaApi : KubeApi \u2039 ResourceQuota \u2039\u203a\u203a = new KubeApi({ objectConstructor: ResourceQuota, }) Defined in src/renderer/api/endpoints/resource-quota.api.ts:66 Const roleApi # \u2022 roleApi : KubeApi \u2039 Role \u2039\u203a\u203a = new KubeApi({ objectConstructor: Role, }) Defined in src/renderer/api/endpoints/role.api.ts:21 Const roleBindingApi # \u2022 roleBindingApi : KubeApi \u2039 RoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: RoleBinding, }) Defined in src/renderer/api/endpoints/role-binding.api.ts:34 Const secretsApi # \u2022 secretsApi : KubeApi \u2039 Secret \u2039\u203a\u203a = new KubeApi({ objectConstructor: Secret, }) Defined in src/renderer/api/endpoints/secret.api.ts:48 Const serviceAccountsApi # \u2022 serviceAccountsApi : KubeApi \u2039 ServiceAccount \u2039\u203a\u203a = new KubeApi ({ objectConstructor: ServiceAccount, }) Defined in src/renderer/api/endpoints/service-accounts.api.ts:27 Const serviceApi # \u2022 serviceApi : KubeApi \u2039 Service \u2039\u203a\u203a = new KubeApi({ objectConstructor: Service, }) Defined in src/renderer/api/endpoints/service.api.ts:101 Const statefulSetApi # \u2022 statefulSetApi : StatefulSetApi\u2039\u203a = new StatefulSetApi({ objectConstructor: StatefulSet, }) Defined in src/renderer/api/endpoints/stateful-set.api.ts:110 Const storageClassApi # \u2022 storageClassApi : KubeApi \u2039 StorageClass \u2039\u203a\u203a = new KubeApi({ objectConstructor: StorageClass, }) Defined in src/renderer/api/endpoints/storage-class.api.ts:37 Functions # forCluster # \u25b8 forCluster \u2039 T \u203a( cluster : IKubeApiCluster , kubeClass : IKubeObjectConstructor\u2039T\u203a): KubeApi \u2039T\u203a Defined in src/renderer/api/kube-api.ts:66 Type parameters: \u25aa T : KubeObject Parameters: Name Type cluster IKubeApiCluster kubeClass IKubeObjectConstructor\u2039T\u203a Returns: KubeApi \u2039T\u203a isAllowedResource # \u25b8 isAllowedResource ( resources : KubeResource | KubeResource[]): boolean Defined in src/common/rbac.ts:40 Parameters: Name Type resources KubeResource | KubeResource[] Returns: boolean","title":"Module: \"renderer-api/k8s-api\""},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#module-renderer-apik8s-api","text":"","title":"Module: \"renderer-api/k8s-api\""},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#enumerations","text":"KubeObjectStatusLevel","title":"Enumerations"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#classes","text":"CRDResourceStore CRDStore ClusterRole ClusterRoleBinding ConfigMap ConfigMapsStore CronJob CronJobStore CustomResourceDefinition DaemonSet DaemonSetStore Deployment DeploymentApi DeploymentStore Endpoint EndpointStore EventStore HPAStore HorizontalPodAutoscaler Ingress IngressApi IngressStore Job JobStore KubeApi KubeEvent KubeObject KubeObjectStore Namespace NamespaceStore NetworkPolicy NetworkPolicyStore Node NodesApi NodesStore PersistentVolume PersistentVolumeClaim PersistentVolumeClaimsApi PersistentVolumesStore Pod PodDisruptionBudget PodDisruptionBudgetsStore PodsApi PodsStore ReplicaSet ReplicaSetStore ResourceQuota ResourceQuotasStore Role RoleBinding RoleBindingsStore RolesStore Secret SecretsStore Service ServiceAccount ServiceAccountsStore ServiceStore StatefulSet StatefulSetStore StorageClass StorageClassStore VolumeClaimStore","title":"Classes"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#interfaces","text":"IKubeApiCluster IPodContainer IPodContainerStatus ISecretRef","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#type-aliases","text":"KubeObjectStatus","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#variables","text":"apiManager clusterRoleApi clusterRoleBindingApi configMapApi crdApi cronJobApi daemonSetApi deploymentApi endpointApi eventApi hpaApi ingressApi jobApi namespacesApi networkPolicyApi nodesApi pdbApi persistentVolumeApi podsApi pvcApi replicaSetApi resourceQuotaApi roleApi roleBindingApi secretsApi serviceAccountsApi serviceApi statefulSetApi storageClassApi","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#functions","text":"forCluster isAllowedResource","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#type-aliases_1","text":"","title":"Type aliases"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#kubeobjectstatus","text":"\u01ac KubeObjectStatus : object Defined in src/extensions/renderer-api/kube-object-status.ts:1","title":"KubeObjectStatus"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#variables_1","text":"","title":"Variables"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-apimanager","text":"\u2022 apiManager : ApiManager\u2039\u203a = new ApiManager() Defined in src/renderer/api/api-manager.ts:54","title":"Const apiManager"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-clusterroleapi","text":"\u2022 clusterRoleApi : KubeApi \u2039 ClusterRole \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRole, }) Defined in src/renderer/api/endpoints/cluster-role.api.ts:12","title":"Const clusterRoleApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-clusterrolebindingapi","text":"\u2022 clusterRoleBindingApi : KubeApi \u2039 ClusterRoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: ClusterRoleBinding, }) Defined in src/renderer/api/endpoints/cluster-role-binding.api.ts:10","title":"Const clusterRoleBindingApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-configmapapi","text":"\u2022 configMapApi : KubeApi \u2039 ConfigMap \u2039\u203a\u203a = new KubeApi({ objectConstructor: ConfigMap, }) Defined in src/renderer/api/endpoints/configmap.api.ts:26","title":"Const configMapApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-crdapi","text":"\u2022 crdApi : KubeApi \u2039 CustomResourceDefinition \u2039\u203a\u203a = new KubeApi ({ objectConstructor: CustomResourceDefinition, checkPreferredVersion: true, }) Defined in src/renderer/api/endpoints/crd.api.ts:154","title":"Const crdApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-cronjobapi","text":"\u2022 cronJobApi : KubeApi \u2039 CronJob \u2039\u203a\u203a = new KubeApi({ objectConstructor: CronJob, }) Defined in src/renderer/api/endpoints/cron-job.api.ts:95","title":"Const cronJobApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-daemonsetapi","text":"\u2022 daemonSetApi : KubeApi \u2039 DaemonSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: DaemonSet, }) Defined in src/renderer/api/endpoints/daemon-set.api.ts:74","title":"Const daemonSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-deploymentapi","text":"\u2022 deploymentApi : DeploymentApi \u2039\u203a = new DeploymentApi({ objectConstructor: Deployment, }) Defined in src/renderer/api/endpoints/deployment.api.ts:193","title":"Const deploymentApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-endpointapi","text":"\u2022 endpointApi : KubeApi \u2039 Endpoint \u2039\u203a\u203a = new KubeApi({ objectConstructor: Endpoint, }) Defined in src/renderer/api/endpoints/endpoint.api.ts:127","title":"Const endpointApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-eventapi","text":"\u2022 eventApi : KubeApi \u2039 KubeEvent \u2039\u203a\u203a = new KubeApi({ objectConstructor: KubeEvent, }) Defined in src/renderer/api/endpoints/events.api.ts:59","title":"Const eventApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-hpaapi","text":"\u2022 hpaApi : KubeApi \u2039 HorizontalPodAutoscaler \u2039\u203a\u203a = new KubeApi({ objectConstructor: HorizontalPodAutoscaler, }) Defined in src/renderer/api/endpoints/hpa.api.ts:143","title":"Const hpaApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-ingressapi","text":"\u2022 ingressApi : IngressApi \u2039\u203a = new IngressApi({ objectConstructor: Ingress, // Add fallback for Kubernetes <1.19 checkPreferredVersion: true, fallbackApiBases: [\"/apis/extensions/v1beta1/ingresses\"], logStuff: true } as any) Defined in src/renderer/api/endpoints/ingress.api.ts:177","title":"Const ingressApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-jobapi","text":"\u2022 jobApi : KubeApi \u2039 Job \u2039\u203a\u203a = new KubeApi({ objectConstructor: Job, }) Defined in src/renderer/api/endpoints/job.api.ts:110","title":"Const jobApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-namespacesapi","text":"\u2022 namespacesApi : KubeApi \u2039 Namespace \u2039\u203a\u203a = new KubeApi({ objectConstructor: Namespace, }) Defined in src/renderer/api/endpoints/namespaces.api.ts:25","title":"Const namespacesApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-networkpolicyapi","text":"\u2022 networkPolicyApi : KubeApi \u2039 NetworkPolicy \u2039\u203a\u203a = new KubeApi({ objectConstructor: NetworkPolicy, }) Defined in src/renderer/api/endpoints/network-policy.api.ts:71","title":"Const networkPolicyApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-nodesapi","text":"\u2022 nodesApi : NodesApi \u2039\u203a = new NodesApi({ objectConstructor: Node, }) Defined in src/renderer/api/endpoints/nodes.api.ts:169","title":"Const nodesApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-pdbapi","text":"\u2022 pdbApi : KubeApi \u2039 PodDisruptionBudget \u2039\u203a\u203a = new KubeApi({ objectConstructor: PodDisruptionBudget, }) Defined in src/renderer/api/endpoints/poddisruptionbudget.api.ts:47","title":"Const pdbApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-persistentvolumeapi","text":"\u2022 persistentVolumeApi : KubeApi \u2039 PersistentVolume \u2039\u203a\u203a = new KubeApi({ objectConstructor: PersistentVolume, }) Defined in src/renderer/api/endpoints/persistent-volume.api.ts:73","title":"Const persistentVolumeApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-podsapi","text":"\u2022 podsApi : PodsApi \u2039\u203a = new PodsApi({ objectConstructor: Pod, }) Defined in src/renderer/api/endpoints/pods.api.ts:459","title":"Const podsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-pvcapi","text":"\u2022 pvcApi : PersistentVolumeClaimsApi \u2039\u203a = new PersistentVolumeClaimsApi({ objectConstructor: PersistentVolumeClaim, }) Defined in src/renderer/api/endpoints/persistent-volume-claims.api.ts:90","title":"Const pvcApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-replicasetapi","text":"\u2022 replicaSetApi : KubeApi \u2039 ReplicaSet \u2039\u203a\u203a = new KubeApi({ objectConstructor: ReplicaSet, }) Defined in src/renderer/api/endpoints/replica-set.api.ts:56","title":"Const replicaSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-resourcequotaapi","text":"\u2022 resourceQuotaApi : KubeApi \u2039 ResourceQuota \u2039\u203a\u203a = new KubeApi({ objectConstructor: ResourceQuota, }) Defined in src/renderer/api/endpoints/resource-quota.api.ts:66","title":"Const resourceQuotaApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-roleapi","text":"\u2022 roleApi : KubeApi \u2039 Role \u2039\u203a\u203a = new KubeApi({ objectConstructor: Role, }) Defined in src/renderer/api/endpoints/role.api.ts:21","title":"Const roleApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-rolebindingapi","text":"\u2022 roleBindingApi : KubeApi \u2039 RoleBinding \u2039\u203a\u203a = new KubeApi({ objectConstructor: RoleBinding, }) Defined in src/renderer/api/endpoints/role-binding.api.ts:34","title":"Const roleBindingApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-secretsapi","text":"\u2022 secretsApi : KubeApi \u2039 Secret \u2039\u203a\u203a = new KubeApi({ objectConstructor: Secret, }) Defined in src/renderer/api/endpoints/secret.api.ts:48","title":"Const secretsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-serviceaccountsapi","text":"\u2022 serviceAccountsApi : KubeApi \u2039 ServiceAccount \u2039\u203a\u203a = new KubeApi ({ objectConstructor: ServiceAccount, }) Defined in src/renderer/api/endpoints/service-accounts.api.ts:27","title":"Const serviceAccountsApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-serviceapi","text":"\u2022 serviceApi : KubeApi \u2039 Service \u2039\u203a\u203a = new KubeApi({ objectConstructor: Service, }) Defined in src/renderer/api/endpoints/service.api.ts:101","title":"Const serviceApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-statefulsetapi","text":"\u2022 statefulSetApi : StatefulSetApi\u2039\u203a = new StatefulSetApi({ objectConstructor: StatefulSet, }) Defined in src/renderer/api/endpoints/stateful-set.api.ts:110","title":"Const statefulSetApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#const-storageclassapi","text":"\u2022 storageClassApi : KubeApi \u2039 StorageClass \u2039\u203a\u203a = new KubeApi({ objectConstructor: StorageClass, }) Defined in src/renderer/api/endpoints/storage-class.api.ts:37","title":"Const storageClassApi"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#forcluster","text":"\u25b8 forCluster \u2039 T \u203a( cluster : IKubeApiCluster , kubeClass : IKubeObjectConstructor\u2039T\u203a): KubeApi \u2039T\u203a Defined in src/renderer/api/kube-api.ts:66 Type parameters: \u25aa T : KubeObject Parameters: Name Type cluster IKubeApiCluster kubeClass IKubeObjectConstructor\u2039T\u203a Returns: KubeApi \u2039T\u203a","title":"forCluster"},{"location":"extensions/api/modules/_renderer_api_k8s_api_/#isallowedresource","text":"\u25b8 isAllowedResource ( resources : KubeResource | KubeResource[]): boolean Defined in src/common/rbac.ts:40 Parameters: Name Type resources KubeResource | KubeResource[] Returns: boolean","title":"isAllowedResource"},{"location":"extensions/api/modules/_renderer_api_navigation_/","text":"Module: \"renderer-api/navigation\" # Index # Interfaces # IURLParams Functions # getDetailsUrl hideDetails navigate showDetails Functions # getDetailsUrl # \u25b8 getDetailsUrl ( details : string): string Defined in src/renderer/navigation.ts:71 Parameters: Name Type details string Returns: string hideDetails # \u25b8 hideDetails (): void Defined in src/renderer/navigation.ts:93 Hide details. Works only in renderer. Returns: void navigate # \u25b8 navigate ( location : LocationDescriptor): void Defined in src/renderer/navigation.ts:17 Navigate to a location. Works only in renderer. Parameters: Name Type location LocationDescriptor Returns: void showDetails # \u25b8 showDetails ( path : string, resetSelected : boolean): void Defined in src/renderer/navigation.ts:83 Show details. Works only in renderer. Parameters: Name Type Default path string - resetSelected boolean true Returns: void","title":"Module: \"renderer-api/navigation\""},{"location":"extensions/api/modules/_renderer_api_navigation_/#module-renderer-apinavigation","text":"","title":"Module: \"renderer-api/navigation\""},{"location":"extensions/api/modules/_renderer_api_navigation_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_navigation_/#interfaces","text":"IURLParams","title":"Interfaces"},{"location":"extensions/api/modules/_renderer_api_navigation_/#functions","text":"getDetailsUrl hideDetails navigate showDetails","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_navigation_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_navigation_/#getdetailsurl","text":"\u25b8 getDetailsUrl ( details : string): string Defined in src/renderer/navigation.ts:71 Parameters: Name Type details string Returns: string","title":"getDetailsUrl"},{"location":"extensions/api/modules/_renderer_api_navigation_/#hidedetails","text":"\u25b8 hideDetails (): void Defined in src/renderer/navigation.ts:93 Hide details. Works only in renderer. Returns: void","title":"hideDetails"},{"location":"extensions/api/modules/_renderer_api_navigation_/#navigate","text":"\u25b8 navigate ( location : LocationDescriptor): void Defined in src/renderer/navigation.ts:17 Navigate to a location. Works only in renderer. Parameters: Name Type location LocationDescriptor Returns: void","title":"navigate"},{"location":"extensions/api/modules/_renderer_api_navigation_/#showdetails","text":"\u25b8 showDetails ( path : string, resetSelected : boolean): void Defined in src/renderer/navigation.ts:83 Show details. Works only in renderer. Parameters: Name Type Default path string - resetSelected boolean true Returns: void","title":"showDetails"},{"location":"extensions/api/modules/_renderer_api_theming_/","text":"Module: \"renderer-api/theming\" # Index # Functions # getActiveTheme Functions # getActiveTheme # \u25b8 getActiveTheme (): Theme Defined in src/extensions/renderer-api/theming.ts:3 Returns: Theme","title":"Module: \"renderer-api/theming\""},{"location":"extensions/api/modules/_renderer_api_theming_/#module-renderer-apitheming","text":"","title":"Module: \"renderer-api/theming\""},{"location":"extensions/api/modules/_renderer_api_theming_/#index","text":"","title":"Index"},{"location":"extensions/api/modules/_renderer_api_theming_/#functions","text":"getActiveTheme","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_theming_/#functions_1","text":"","title":"Functions"},{"location":"extensions/api/modules/_renderer_api_theming_/#getactivetheme","text":"\u25b8 getActiveTheme (): Theme Defined in src/extensions/renderer-api/theming.ts:3 Returns: Theme","title":"getActiveTheme"},{"location":"extensions/capabilities/","text":"","title":"Index"},{"location":"extensions/capabilities/color-reference/","text":"Theme Color Reference # You can use theme-based CSS Variables to style an extension according to the active theme. Base Colors # --blue : blue color. --magenta : magenta color. --golden : gold/yellow color. --halfGray : gray with some apacity applied. --primary : Lens brand (blue) color. --colorSuccess : successfull operations color. --colorOk : successfull operations (bright version) color. --colorInfo : informational, in-progress color. --colorError : critical error color. --colorSoftError : error color. --colorWarning : warning color. --colorVague : soft gray color for notices, hints etc. --colorTerminated : terminated, closed, stale color. --boxShadow : semi-transparent box-shadow color. Text Colors # --textColorPrimary : foreground text color. --textColorSecondary : foreground text color for different paragraps, parts of text. --textColorAccent : foreground text color to highlight its parts. Border Colors # --borderColor : border color. --borderFaintColor : fainted (lighter or darker, which depends on the theme) border color. Layout Colors # --mainBackground : main background color for the app. --contentColor : background color for panels contains some data. --layoutBackground : background color for layout parts. --layoutTabsBackground : background color for general tabs. --layoutTabsActiveColor : foreground color for general tabs. --layoutTabsLineColor : background color for lines under general tabs. Sidebar Colors # --sidebarLogoBackground : background color behind logo in sidebar. --sidebarActiveColor : foreground color for active menu items in sidebar. --sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. --sidebarBackground : background color for sidebar. Button Colors # --buttonPrimaryBackground : button background color for primary actions. --buttonDefaultBackground : default button background color. --buttonAccentBackground : accent button background color. --buttonDisabledBackground : disabled button background color. Table Colors # --tableBgcStripe : background color for odd rows in table. --tableBgcSelected : background color for selected row in table. --tableHeaderBackground : background color for table header. --tableHeaderBorderWidth : border width under table header. --tableHeaderBorderColor : border color for line under table header. --tableHeaderColor : foreground color for table header. --tableSelectedRowColor : foreground color for selected row in table. Dock Colors # --dockHeadBackground : background color for dock's header. --dockInfoBackground : background color for dock's info panel. --dockInfoBorderColor : border color for dock's info panel. Helm Chart Colors # --helmLogoBackground : background color for chart logo. --helmImgBackground : background color for chart image. --helmStableRepo : background color for stable repo. --helmIncubatorRepo : background color for incubator repo. --helmDescriptionHr : Helm chart description separator line color. --helmDescriptionBlockqouteColor : Helm chart description blockquote color. --helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. --helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. --helmDescriptionHeaders : Helm chart description headers color. --helmDescriptionH6 : Helm chart description header foreground color. --helmDescriptionTdBorder : Helm chart description table cell border color. --helmDescriptionTrBackground : Helm chart description table row background color. --helmDescriptionCodeBackground : Helm chart description code background color. --helmDescriptionPreBackground : Helm chart description pre background color. --helmDescriptionPreColor : Helm chart description pre foreground color. Terminal Colors # --terminalBackground : Terminal background color. --terminalForeground : Terminal foreground color. --terminalCursor : Terminal cursor color. --terminalCursorAccent : Terminal cursor accent color. --terminalSelection : Terminal selection background color. --terminalBlack : Terminal black color. --terminalRed : Terminal red color. --terminalGreen : Terminal green color. --terminalYellow : Terminal yellow color. --terminalBlue : Terminal blue color. --terminalMagenta : Terminal magenta color. --terminalCyan : Terminal cyan color. --terminalWhite : Terminal white color. --terminalBrightBlack : Terminal bright black color. --terminalBrightRed : Terminal bright red color. --terminalBrightGreen : Terminal bright green color. --terminalBrightYellow : Terminal bright yellow color. --terminalBrightBlue : Terminal bright blue color. --terminalBrightMagenta : Terminal bright magenta color. --terminalBrightCyan : Terminal bright cyan color. --terminalBrightWhite : Terminal bright white color. Dialog Colors # --dialogHeaderBackground : background color for dialog header. --dialogFooterBackground : background color for dialog footer. Detail Panel (Drawer) Colors # --drawerTitleText : drawer title foreground color. --drawerSubtitleBackground : drawer subtitle foreground color. --drawerItemNameColor : foreground color for item name in drawer. --drawerItemValueColor : foreground color for item value in drawer. Misc Colors # --logsBackground : background color for pod logs. --clusterMenuBackground : background color for cluster menu. --clusterMenuBorderColor : border color for cluster menu. --clusterSettingsBackground : background color for cluster settings. --addClusterIconColor : add cluster button background color. --iconActiveColor : active cluster icon foreground color. --iconActiveBackground : active cluster icon background color. --filterAreaBackground : page filter area (where selected namespaces are lister) background color. --chartStripesColor : bar chart zebra stripes background color. --chartCapacityColor : background color for capacity values in bar charts. --pieChartDefaultColor : default background color for pie chart values. --selectOptionHoveredColor : foregrond color for selected element in dropdown list. --lineProgressBackground : background color for progress line. --radioActiveBackground : background color for active radio buttons. --menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Color Reference"},{"location":"extensions/capabilities/color-reference/#theme-color-reference","text":"You can use theme-based CSS Variables to style an extension according to the active theme.","title":"Theme Color Reference"},{"location":"extensions/capabilities/color-reference/#base-colors","text":"--blue : blue color. --magenta : magenta color. --golden : gold/yellow color. --halfGray : gray with some apacity applied. --primary : Lens brand (blue) color. --colorSuccess : successfull operations color. --colorOk : successfull operations (bright version) color. --colorInfo : informational, in-progress color. --colorError : critical error color. --colorSoftError : error color. --colorWarning : warning color. --colorVague : soft gray color for notices, hints etc. --colorTerminated : terminated, closed, stale color. --boxShadow : semi-transparent box-shadow color.","title":"Base Colors"},{"location":"extensions/capabilities/color-reference/#text-colors","text":"--textColorPrimary : foreground text color. --textColorSecondary : foreground text color for different paragraps, parts of text. --textColorAccent : foreground text color to highlight its parts.","title":"Text Colors"},{"location":"extensions/capabilities/color-reference/#border-colors","text":"--borderColor : border color. --borderFaintColor : fainted (lighter or darker, which depends on the theme) border color.","title":"Border Colors"},{"location":"extensions/capabilities/color-reference/#layout-colors","text":"--mainBackground : main background color for the app. --contentColor : background color for panels contains some data. --layoutBackground : background color for layout parts. --layoutTabsBackground : background color for general tabs. --layoutTabsActiveColor : foreground color for general tabs. --layoutTabsLineColor : background color for lines under general tabs.","title":"Layout Colors"},{"location":"extensions/capabilities/color-reference/#sidebar-colors","text":"--sidebarLogoBackground : background color behind logo in sidebar. --sidebarActiveColor : foreground color for active menu items in sidebar. --sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. --sidebarBackground : background color for sidebar.","title":"Sidebar Colors"},{"location":"extensions/capabilities/color-reference/#button-colors","text":"--buttonPrimaryBackground : button background color for primary actions. --buttonDefaultBackground : default button background color. --buttonAccentBackground : accent button background color. --buttonDisabledBackground : disabled button background color.","title":"Button Colors"},{"location":"extensions/capabilities/color-reference/#table-colors","text":"--tableBgcStripe : background color for odd rows in table. --tableBgcSelected : background color for selected row in table. --tableHeaderBackground : background color for table header. --tableHeaderBorderWidth : border width under table header. --tableHeaderBorderColor : border color for line under table header. --tableHeaderColor : foreground color for table header. --tableSelectedRowColor : foreground color for selected row in table.","title":"Table Colors"},{"location":"extensions/capabilities/color-reference/#dock-colors","text":"--dockHeadBackground : background color for dock's header. --dockInfoBackground : background color for dock's info panel. --dockInfoBorderColor : border color for dock's info panel.","title":"Dock Colors"},{"location":"extensions/capabilities/color-reference/#helm-chart-colors","text":"--helmLogoBackground : background color for chart logo. --helmImgBackground : background color for chart image. --helmStableRepo : background color for stable repo. --helmIncubatorRepo : background color for incubator repo. --helmDescriptionHr : Helm chart description separator line color. --helmDescriptionBlockqouteColor : Helm chart description blockquote color. --helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. --helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. --helmDescriptionHeaders : Helm chart description headers color. --helmDescriptionH6 : Helm chart description header foreground color. --helmDescriptionTdBorder : Helm chart description table cell border color. --helmDescriptionTrBackground : Helm chart description table row background color. --helmDescriptionCodeBackground : Helm chart description code background color. --helmDescriptionPreBackground : Helm chart description pre background color. --helmDescriptionPreColor : Helm chart description pre foreground color.","title":"Helm Chart Colors"},{"location":"extensions/capabilities/color-reference/#terminal-colors","text":"--terminalBackground : Terminal background color. --terminalForeground : Terminal foreground color. --terminalCursor : Terminal cursor color. --terminalCursorAccent : Terminal cursor accent color. --terminalSelection : Terminal selection background color. --terminalBlack : Terminal black color. --terminalRed : Terminal red color. --terminalGreen : Terminal green color. --terminalYellow : Terminal yellow color. --terminalBlue : Terminal blue color. --terminalMagenta : Terminal magenta color. --terminalCyan : Terminal cyan color. --terminalWhite : Terminal white color. --terminalBrightBlack : Terminal bright black color. --terminalBrightRed : Terminal bright red color. --terminalBrightGreen : Terminal bright green color. --terminalBrightYellow : Terminal bright yellow color. --terminalBrightBlue : Terminal bright blue color. --terminalBrightMagenta : Terminal bright magenta color. --terminalBrightCyan : Terminal bright cyan color. --terminalBrightWhite : Terminal bright white color.","title":"Terminal Colors"},{"location":"extensions/capabilities/color-reference/#dialog-colors","text":"--dialogHeaderBackground : background color for dialog header. --dialogFooterBackground : background color for dialog footer.","title":"Dialog Colors"},{"location":"extensions/capabilities/color-reference/#detail-panel-drawer-colors","text":"--drawerTitleText : drawer title foreground color. --drawerSubtitleBackground : drawer subtitle foreground color. --drawerItemNameColor : foreground color for item name in drawer. --drawerItemValueColor : foreground color for item value in drawer.","title":"Detail Panel (Drawer) Colors"},{"location":"extensions/capabilities/color-reference/#misc-colors","text":"--logsBackground : background color for pod logs. --clusterMenuBackground : background color for cluster menu. --clusterMenuBorderColor : border color for cluster menu. --clusterSettingsBackground : background color for cluster settings. --addClusterIconColor : add cluster button background color. --iconActiveColor : active cluster icon foreground color. --iconActiveBackground : active cluster icon background color. --filterAreaBackground : page filter area (where selected namespaces are lister) background color. --chartStripesColor : bar chart zebra stripes background color. --chartCapacityColor : background color for capacity values in bar charts. --pieChartDefaultColor : default background color for pie chart values. --selectOptionHoveredColor : foregrond color for selected element in dropdown list. --lineProgressBackground : background color for progress line. --radioActiveBackground : background color for active radio buttons. --menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Misc Colors"},{"location":"extensions/capabilities/common-capabilities/","text":"Common Capabilities # Here we will discuss common and important building blocks for your extensions, and explain how you can use them. Almost all extensions use some of these functionalities. Main Extension # The main extension runs in the background. It adds app menu items to the Lens UI. In order to see logs from this extension, you need to start Lens from the command line. Activate # This extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } App Menus # This extension can register custom app menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] } Renderer Extension # The renderer extension runs in a browser context, and is visible in Lens's main window. In order to see logs from this extension you need to check them via View > Toggle Developer Tools > Console . Activate # This extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } Global Pages # This extension can register custom global pages (views) to Lens's main window. The global page is a full-screen page that hides all other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { id : \"example\" , components : { Page : ExamplePage , } } ] globalPageMenus = [ { title : \"Example page\" , // used in icon's tooltip target : { pageId : \"example\" } components : { Icon : () => < Component . Icon material = \"arrow\" /> , } } ] } App Preferences # This extension can register custom app preferences. It is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] } Cluster Pages # This extension can register custom cluster pages. These pages are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , // optional exact : true , // optional components : { Page : () => < ExamplePage extension = { this } /> , } } ] clusterPageMenus = [ { url : \"/extension-example\" , // optional title : \"Example Extension\" , components : { Icon : ExampleIcon , } } ] } Cluster Features # This extension can register installable features for a cluster. These features are visible in the \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] } Status Bar Items # This extension can register custom icons and text to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => this . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" /> < /div> ) } ] } Kubernetes Object Menu Items # This extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] } Kubernetes Object Details # This extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#common-capabilities","text":"Here we will discuss common and important building blocks for your extensions, and explain how you can use them. Almost all extensions use some of these functionalities.","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#main-extension","text":"The main extension runs in the background. It adds app menu items to the Lens UI. In order to see logs from this extension, you need to start Lens from the command line.","title":"Main Extension"},{"location":"extensions/capabilities/common-capabilities/#activate","text":"This extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate","text":"This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#app-menus","text":"This extension can register custom app menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] }","title":"App Menus"},{"location":"extensions/capabilities/common-capabilities/#renderer-extension","text":"The renderer extension runs in a browser context, and is visible in Lens's main window. In order to see logs from this extension you need to check them via View > Toggle Developer Tools > Console .","title":"Renderer Extension"},{"location":"extensions/capabilities/common-capabilities/#activate_1","text":"This extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate_1","text":"This extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#global-pages","text":"This extension can register custom global pages (views) to Lens's main window. The global page is a full-screen page that hides all other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { id : \"example\" , components : { Page : ExamplePage , } } ] globalPageMenus = [ { title : \"Example page\" , // used in icon's tooltip target : { pageId : \"example\" } components : { Icon : () => < Component . Icon material = \"arrow\" /> , } } ] }","title":"Global Pages"},{"location":"extensions/capabilities/common-capabilities/#app-preferences","text":"This extension can register custom app preferences. It is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] }","title":"App Preferences"},{"location":"extensions/capabilities/common-capabilities/#cluster-pages","text":"This extension can register custom cluster pages. These pages are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , // optional exact : true , // optional components : { Page : () => < ExamplePage extension = { this } /> , } } ] clusterPageMenus = [ { url : \"/extension-example\" , // optional title : \"Example Extension\" , components : { Icon : ExampleIcon , } } ] }","title":"Cluster Pages"},{"location":"extensions/capabilities/common-capabilities/#cluster-features","text":"This extension can register installable features for a cluster. These features are visible in the \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] }","title":"Cluster Features"},{"location":"extensions/capabilities/common-capabilities/#status-bar-items","text":"This extension can register custom icons and text to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => this . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" /> < /div> ) } ] }","title":"Status Bar Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-menu-items","text":"This extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] }","title":"Kubernetes Object Menu Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-details","text":"This extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Kubernetes Object Details"},{"location":"extensions/capabilities/styling/","text":"Styling an Extension # Lens provides a set of global styles and UI components that can be used by any extension to preserve the look and feel of the application. Layout # For layout tasks, Lens uses the flex.box library which provides helpful class names to specify some of the flexbox properties. For example, consider the following HTML and its associated CSS properties: < div className = \"flex column align-center\" > div { display : flex ; flex-direction : column ; align-items : center ; } However, you are free to use any styling technique or framework you like, including Emotion or even plain CSS. Layout Variables # There is a set of CSS variables available for for basic layout needs. They are located inside :root and are defined in app.scss : --unit : 8px ; --padding : var ( --unit ); --margin : var ( --unit ); --border-radius : 3px ; These variables are intended to set consistent margins and paddings across components. For example: . status { padding-left : calc ( var ( -- padding ) * 2 ); border-radius : var ( -- border - radius ); } Themes # Lens uses two built-in themes defined in the themes directory \u2013 one light and one dark. Theme Variables # When Lens is loaded, it transforms the selected theme's json file into a list of CSS Custom Properties (CSS Variables) . This list then gets injected into the :root element so that any of the down-level components can use them. When the user changes the theme, the above process is repeated, and new CSS variables appear, replacing the previous ones. If you want to preserve Lens's native look and feel, with respect to the lightness or darkness of your extension, you can use the provided variables and built-in Lens components such as Button , Select , Table , and so on. There is a set of CSS variables available for extensions to use for theming. They are all located inside :root and are defined in app.scss : --font-main : 'Roboto' , 'Helvetica' , 'Arial' , sans-serif ; --font-monospace : Lucida Console , Monaco , Consolas , monospace ; --font-size-small : calc ( 1 . 5 * var ( --unit )); --font-size : calc ( 1 . 75 * var ( --unit )); --font-size-big : calc ( 2 * var ( --unit )); --font-weight-thin : 300 ; --font-weight-normal : 400 ; --font-weight-bold : 500 ; as well as in the theme modules : --blue: #3d90ce; --magenta: #c93dce; --golden: #ffc63d; --halfGray: #87909c80; --primary: #3d90ce; --textColorPrimary: #555555; --textColorSecondary: #51575d; --textColorAccent: #333333; --borderColor: #c9cfd3; --borderFaintColor: #dfdfdf; --mainBackground: #f1f1f1; --contentColor: #ffffff; --layoutBackground: #e8e8e8; --layoutTabsBackground: #f8f8f8; --layoutTabsActiveColor: #333333; --layoutTabsLineColor: #87909c80; ... These variables can be used in the following form: var(--magenta) . For example: . status { font-size : var ( -- font - size - small ); background-color : var ( -- colorSuccess ); } A complete list of themable colors can be found in the Color Reference . Theme Switching # When the light theme is active, the element gets a \"theme-light\" class, or: . If the class isn't there, the theme defaults to dark. The active theme can be changed in the Preferences page: There is a way of detect active theme and its changes in JS. MobX observer function/decorator can be used for this purpose. import React from \"react\" import { observer } from \"mobx-react\" import { App , Component , Theme } from \"@k8slens/extensions\" ; @ observer export class SupportPage extends React . Component { render () { return ( < div className = \"SupportPage\" > < h1 > Active theme is { Theme . getActiveTheme (). name } < /h1> < /div> ); } } Theme entity from @k8slens/extensions provides active theme object and @observer decorator makes component reactive - so it will rerender each time any of the observables (active theme in our case) will be changed. Working example provided in Styling with Emotion sample extension. Injected Styles # Every extension is affected by the list of default global styles defined in app.scss . These are basic browser resets and element styles, including: setting the box-sizing property for every element default text and background colors default font sizes basic heading (h1, h2, etc) formatting custom scrollbar styling Extensions may overwrite these defaults if needed. They have low CSS specificity, so overriding them should be fairly easy. CSS-in-JS # If an extension uses a system like Emotion to work with styles, it can use CSS variables as follows: const Container = styled . div (() => ({ backgroundColor : 'var(--mainBackground)' })); Examples # You can explore samples for each styling technique that you can use for extensions: Styling with Sass Styling with Emotion Styling with CSS Modules","title":"Styling"},{"location":"extensions/capabilities/styling/#styling-an-extension","text":"Lens provides a set of global styles and UI components that can be used by any extension to preserve the look and feel of the application.","title":"Styling an Extension"},{"location":"extensions/capabilities/styling/#layout","text":"For layout tasks, Lens uses the flex.box library which provides helpful class names to specify some of the flexbox properties. For example, consider the following HTML and its associated CSS properties: < div className = \"flex column align-center\" > div { display : flex ; flex-direction : column ; align-items : center ; } However, you are free to use any styling technique or framework you like, including Emotion or even plain CSS.","title":"Layout"},{"location":"extensions/capabilities/styling/#layout-variables","text":"There is a set of CSS variables available for for basic layout needs. They are located inside :root and are defined in app.scss : --unit : 8px ; --padding : var ( --unit ); --margin : var ( --unit ); --border-radius : 3px ; These variables are intended to set consistent margins and paddings across components. For example: . status { padding-left : calc ( var ( -- padding ) * 2 ); border-radius : var ( -- border - radius ); }","title":"Layout Variables"},{"location":"extensions/capabilities/styling/#themes","text":"Lens uses two built-in themes defined in the themes directory \u2013 one light and one dark.","title":"Themes"},{"location":"extensions/capabilities/styling/#theme-variables","text":"When Lens is loaded, it transforms the selected theme's json file into a list of CSS Custom Properties (CSS Variables) . This list then gets injected into the :root element so that any of the down-level components can use them. When the user changes the theme, the above process is repeated, and new CSS variables appear, replacing the previous ones. If you want to preserve Lens's native look and feel, with respect to the lightness or darkness of your extension, you can use the provided variables and built-in Lens components such as Button , Select , Table , and so on. There is a set of CSS variables available for extensions to use for theming. They are all located inside :root and are defined in app.scss : --font-main : 'Roboto' , 'Helvetica' , 'Arial' , sans-serif ; --font-monospace : Lucida Console , Monaco , Consolas , monospace ; --font-size-small : calc ( 1 . 5 * var ( --unit )); --font-size : calc ( 1 . 75 * var ( --unit )); --font-size-big : calc ( 2 * var ( --unit )); --font-weight-thin : 300 ; --font-weight-normal : 400 ; --font-weight-bold : 500 ; as well as in the theme modules : --blue: #3d90ce; --magenta: #c93dce; --golden: #ffc63d; --halfGray: #87909c80; --primary: #3d90ce; --textColorPrimary: #555555; --textColorSecondary: #51575d; --textColorAccent: #333333; --borderColor: #c9cfd3; --borderFaintColor: #dfdfdf; --mainBackground: #f1f1f1; --contentColor: #ffffff; --layoutBackground: #e8e8e8; --layoutTabsBackground: #f8f8f8; --layoutTabsActiveColor: #333333; --layoutTabsLineColor: #87909c80; ... These variables can be used in the following form: var(--magenta) . For example: . status { font-size : var ( -- font - size - small ); background-color : var ( -- colorSuccess ); } A complete list of themable colors can be found in the Color Reference .","title":"Theme Variables"},{"location":"extensions/capabilities/styling/#theme-switching","text":"When the light theme is active, the element gets a \"theme-light\" class, or: . If the class isn't there, the theme defaults to dark. The active theme can be changed in the Preferences page: There is a way of detect active theme and its changes in JS. MobX observer function/decorator can be used for this purpose. import React from \"react\" import { observer } from \"mobx-react\" import { App , Component , Theme } from \"@k8slens/extensions\" ; @ observer export class SupportPage extends React . Component { render () { return ( < div className = \"SupportPage\" > < h1 > Active theme is { Theme . getActiveTheme (). name } < /h1> < /div> ); } } Theme entity from @k8slens/extensions provides active theme object and @observer decorator makes component reactive - so it will rerender each time any of the observables (active theme in our case) will be changed. Working example provided in Styling with Emotion sample extension.","title":"Theme Switching"},{"location":"extensions/capabilities/styling/#injected-styles","text":"Every extension is affected by the list of default global styles defined in app.scss . These are basic browser resets and element styles, including: setting the box-sizing property for every element default text and background colors default font sizes basic heading (h1, h2, etc) formatting custom scrollbar styling Extensions may overwrite these defaults if needed. They have low CSS specificity, so overriding them should be fairly easy.","title":"Injected Styles"},{"location":"extensions/capabilities/styling/#css-in-js","text":"If an extension uses a system like Emotion to work with styles, it can use CSS variables as follows: const Container = styled . div (() => ({ backgroundColor : 'var(--mainBackground)' }));","title":"CSS-in-JS"},{"location":"extensions/capabilities/styling/#examples","text":"You can explore samples for each styling technique that you can use for extensions: Styling with Sass Styling with Emotion Styling with CSS Modules","title":"Examples"},{"location":"extensions/get-started/anatomy/","text":"Extension Anatomy # In the previous section you learned how to create your first extension. In this section you will learn how this extension works under the hood. The Hello World sample extension does three things: Implements onActivate() and outputs a message to the console. Implements onDectivate() and outputs a message to the console. Registers ClusterPage so that the page is visible in the left-side menu of the cluster dashboard. Let's take a closer look at our Hello World sample's source code and see how these three things are achieved. Extension File Structure # . \u251c\u2500\u2500 .gitignore // Ignore build output and node_modules \u251c\u2500\u2500 Makefile // Config for build tasks that compiles the extension \u251c\u2500\u2500 README.md // Readable description of your extension's functionality \u251c\u2500\u2500 src \u2502 \u2514\u2500\u2500 page.tsx // Extension's additional source code \u251c\u2500\u2500 main.ts // Source code for extension's main entrypoint \u251c\u2500\u2500 package.json // Extension manifest and dependencies \u251c\u2500\u2500 renderer.tsx // Source code for extension's renderer entrypoint \u251c\u2500\u2500 tsconfig.json // TypeScript configuration \u251c\u2500\u2500 webpack.config.js // Webpack configuration The extension directory contains the extension's entry files and a few configuration files. Three files: package.json , main.ts and renderer.tsx are essential to understanding the Hello World sample extension. We'll look at those first. Extension Manifest # Each Lens extension must have a package.json file. It contains a mix of Node.js fields, including scripts and dependencies, and Lens-specific fields such as publisher and contributes . Some of the most-important fields include: name and publisher : Lens uses @/ as a unique ID for the extension. For example, the Hello World sample has the ID @lensapp-samples/helloworld-sample . Lens uses this ID to uniquely identify your extension. main : the extension's entry point run in main process. renderer : the extension's entry point run in renderer process. engines.lens : the minimum version of Lens API that the extension depends upon. { \"name\" : \"helloworld-sample\" , \"publisher\" : \"lens-samples\" , \"version\" : \"0.0.1\" , \"description\" : \"Lens helloworld-sample\" , \"license\" : \"MIT\" , \"homepage\" : \"https://github.com/lensapp/lens-extension-samples\" , \"engines\" : { \"lens\" : \"^4.0.0\" }, \"main\" : \"dist/main.js\" , \"renderer\" : \"dist/renderer.js\" , \"scripts\" : { \"build\" : \"webpack --config webpack.config.js\" , \"dev\" : \"npm run build --watch\" }, \"dependencies\" : { \"react-open-doodles\" : \"^1.0.5\" }, \"devDependencies\" : { \"@k8slens/extensions\" : \"^4.0.0-alpha.2\" , \"ts-loader\" : \"^8.0.4\" , \"typescript\" : \"^4.0.3\" , \"@types/react\" : \"^16.9.35\" , \"@types/node\" : \"^12.0.0\" , \"webpack\" : \"^4.44.2\" , \"webpack-cli\" : \"^3.3.11\" } } Extension Entry Files # Lens extensions can have two separate entry files. One file is used in the main process of the Lens application and the other is used in the renderer process. The main entry file exports the class that extends LensMainExtension , and the renderer entry file exports the class that extends LensRendererExtension . Both extension classes have onActivate and onDeactivate methods. The onActivate method is executed when your extension is activated. If you need to initialize something in your extension, this is where such an operation should occur. The onDeactivate method gives you a chance to clean up before your extension becomes deactivated. For extensions where explicit cleanup is not required, you don't need to override this method. However, if an extension needs to perform an operation when Lens is shutting down (or if the extension is disabled or uninstalled), this is the method where such an operation should occur. The Hello World sample extension does not do anything on the main process, so we'll focus on the renderer process, instead. On the renderer entry point, the Hello World sample extension defines the Cluster Page object. The Cluster Page object registers the /extension-example path, and this path renders the ExamplePage React component. It also registers the MenuItem component that displays the ExampleIcon React component and the \"Hello World\" text in the left-side menu of the cluster dashboard. These React components are defined in the additional ./src/page.tsx file. import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ] } The Hello World sample extension uses the Cluster Page capability, which is just one of the Lens extension API's capabilities. The Common Capabilities page will help you home in on the right capabilities to use with your own extensions.","title":"Extension Anatomy"},{"location":"extensions/get-started/anatomy/#extension-anatomy","text":"In the previous section you learned how to create your first extension. In this section you will learn how this extension works under the hood. The Hello World sample extension does three things: Implements onActivate() and outputs a message to the console. Implements onDectivate() and outputs a message to the console. Registers ClusterPage so that the page is visible in the left-side menu of the cluster dashboard. Let's take a closer look at our Hello World sample's source code and see how these three things are achieved.","title":"Extension Anatomy"},{"location":"extensions/get-started/anatomy/#extension-file-structure","text":". \u251c\u2500\u2500 .gitignore // Ignore build output and node_modules \u251c\u2500\u2500 Makefile // Config for build tasks that compiles the extension \u251c\u2500\u2500 README.md // Readable description of your extension's functionality \u251c\u2500\u2500 src \u2502 \u2514\u2500\u2500 page.tsx // Extension's additional source code \u251c\u2500\u2500 main.ts // Source code for extension's main entrypoint \u251c\u2500\u2500 package.json // Extension manifest and dependencies \u251c\u2500\u2500 renderer.tsx // Source code for extension's renderer entrypoint \u251c\u2500\u2500 tsconfig.json // TypeScript configuration \u251c\u2500\u2500 webpack.config.js // Webpack configuration The extension directory contains the extension's entry files and a few configuration files. Three files: package.json , main.ts and renderer.tsx are essential to understanding the Hello World sample extension. We'll look at those first.","title":"Extension File Structure"},{"location":"extensions/get-started/anatomy/#extension-manifest","text":"Each Lens extension must have a package.json file. It contains a mix of Node.js fields, including scripts and dependencies, and Lens-specific fields such as publisher and contributes . Some of the most-important fields include: name and publisher : Lens uses @/ as a unique ID for the extension. For example, the Hello World sample has the ID @lensapp-samples/helloworld-sample . Lens uses this ID to uniquely identify your extension. main : the extension's entry point run in main process. renderer : the extension's entry point run in renderer process. engines.lens : the minimum version of Lens API that the extension depends upon. { \"name\" : \"helloworld-sample\" , \"publisher\" : \"lens-samples\" , \"version\" : \"0.0.1\" , \"description\" : \"Lens helloworld-sample\" , \"license\" : \"MIT\" , \"homepage\" : \"https://github.com/lensapp/lens-extension-samples\" , \"engines\" : { \"lens\" : \"^4.0.0\" }, \"main\" : \"dist/main.js\" , \"renderer\" : \"dist/renderer.js\" , \"scripts\" : { \"build\" : \"webpack --config webpack.config.js\" , \"dev\" : \"npm run build --watch\" }, \"dependencies\" : { \"react-open-doodles\" : \"^1.0.5\" }, \"devDependencies\" : { \"@k8slens/extensions\" : \"^4.0.0-alpha.2\" , \"ts-loader\" : \"^8.0.4\" , \"typescript\" : \"^4.0.3\" , \"@types/react\" : \"^16.9.35\" , \"@types/node\" : \"^12.0.0\" , \"webpack\" : \"^4.44.2\" , \"webpack-cli\" : \"^3.3.11\" } }","title":"Extension Manifest"},{"location":"extensions/get-started/anatomy/#extension-entry-files","text":"Lens extensions can have two separate entry files. One file is used in the main process of the Lens application and the other is used in the renderer process. The main entry file exports the class that extends LensMainExtension , and the renderer entry file exports the class that extends LensRendererExtension . Both extension classes have onActivate and onDeactivate methods. The onActivate method is executed when your extension is activated. If you need to initialize something in your extension, this is where such an operation should occur. The onDeactivate method gives you a chance to clean up before your extension becomes deactivated. For extensions where explicit cleanup is not required, you don't need to override this method. However, if an extension needs to perform an operation when Lens is shutting down (or if the extension is disabled or uninstalled), this is the method where such an operation should occur. The Hello World sample extension does not do anything on the main process, so we'll focus on the renderer process, instead. On the renderer entry point, the Hello World sample extension defines the Cluster Page object. The Cluster Page object registers the /extension-example path, and this path renders the ExamplePage React component. It also registers the MenuItem component that displays the ExampleIcon React component and the \"Hello World\" text in the left-side menu of the cluster dashboard. These React components are defined in the additional ./src/page.tsx file. import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"extension-example\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ] } The Hello World sample extension uses the Cluster Page capability, which is just one of the Lens extension API's capabilities. The Common Capabilities page will help you home in on the right capabilities to use with your own extensions.","title":"Extension Entry Files"},{"location":"extensions/get-started/overview/","text":"Extension Development Overview # This is a general overview to how the development of an extension will procede. For building extensions there will be a few things that you should have installed, and some other things that might be of help. Required: # Node.js Git Some sort of text editor \u2013 we recommend VSCode We use Webpack for compilation. All extension need to be at least compatable with a webpack system. Recommended: # All Lens extensions are javascript packages. We recommend that you program in Typescript because it catches many common errors. Lens is a standard Electron application with both main and renderer processes. An extension is made up of two parts, one for each of Lens's core processes. When an extension is loaded, each part is first loaded and issues a notification that it has been loaded. From there, the extension can start doing is work. Lens uses React as its UI framework and provides some of Lens's own components for reuse with extensions. An extension is resonsible for the lifetime of any resources it spins up. If an extension's main part starts new processes they all must be stopped and cleaned up when the extension is deactivated or unloaded. See Your First Extension to get started.","title":"Overview"},{"location":"extensions/get-started/overview/#extension-development-overview","text":"This is a general overview to how the development of an extension will procede. For building extensions there will be a few things that you should have installed, and some other things that might be of help.","title":"Extension Development Overview"},{"location":"extensions/get-started/overview/#required","text":"Node.js Git Some sort of text editor \u2013 we recommend VSCode We use Webpack for compilation. All extension need to be at least compatable with a webpack system.","title":"Required:"},{"location":"extensions/get-started/overview/#recommended","text":"All Lens extensions are javascript packages. We recommend that you program in Typescript because it catches many common errors. Lens is a standard Electron application with both main and renderer processes. An extension is made up of two parts, one for each of Lens's core processes. When an extension is loaded, each part is first loaded and issues a notification that it has been loaded. From there, the extension can start doing is work. Lens uses React as its UI framework and provides some of Lens's own components for reuse with extensions. An extension is resonsible for the lifetime of any resources it spins up. If an extension's main part starts new processes they all must be stopped and cleaned up when the extension is deactivated or unloaded. See Your First Extension to get started.","title":"Recommended:"},{"location":"extensions/get-started/wrapping-up/","text":"Wrapping Up # In Your First Extension , you learned how to create and run an extension. In Extension Anatomy , you learned in detail how a basic extension works. This is just a glimpse into what can be created with Lens extensions. Below are some suggested routes for learning more. Extension Capabilities # In this section, you'll find information on common extension capabilities, styling information, and a color reference guide. Determine whether your idea for an extension is doable and get ideas for new extensions by reading through the Common Capabilities page. Guides and Samples # Here you'll find a collection of sample extensions that you can use as a base to work from. Some of these samples include a detailed guide that explains the source code. You can find all samples and guides in the lens-extension-samples repository. Testing and Publishing # In this section, you can learn: How to add integration tests to your extension How to publish your extension","title":"Wrapping Up"},{"location":"extensions/get-started/wrapping-up/#wrapping-up","text":"In Your First Extension , you learned how to create and run an extension. In Extension Anatomy , you learned in detail how a basic extension works. This is just a glimpse into what can be created with Lens extensions. Below are some suggested routes for learning more.","title":"Wrapping Up"},{"location":"extensions/get-started/wrapping-up/#extension-capabilities","text":"In this section, you'll find information on common extension capabilities, styling information, and a color reference guide. Determine whether your idea for an extension is doable and get ideas for new extensions by reading through the Common Capabilities page.","title":"Extension Capabilities"},{"location":"extensions/get-started/wrapping-up/#guides-and-samples","text":"Here you'll find a collection of sample extensions that you can use as a base to work from. Some of these samples include a detailed guide that explains the source code. You can find all samples and guides in the lens-extension-samples repository.","title":"Guides and Samples"},{"location":"extensions/get-started/wrapping-up/#testing-and-publishing","text":"In this section, you can learn: How to add integration tests to your extension How to publish your extension","title":"Testing and Publishing"},{"location":"extensions/get-started/your-first-extension/","text":"Your First Extension # We recommend to always use Yeoman generator for Lens Extension to start new extension project. Read the generator guide here . If you want to setup the project manually, please continue reading. First Extension # In this topic, you'll learn the basics of building extensions by creating an extension that adds a \"Hello World\" page to a cluster menu. Install the Extension # To install the extension, clone the Lens Extension samples repository to your local machine: git clone https://github.com/lensapp/lens-extension-samples.git Next you need to create a symlink. A symlink connects the directory that Lens will monitor for user-installed extensions to the sample extension. In this case the sample extension is helloworld-sample . Linux & macOS # mkdir -p ~/.k8slens/extensions cd ~/.k8slens/extensions ln -s lens-extension-samples/helloworld-sample helloworld-sample Windows # Create the directory that Lens will monitor for user-installed extensions: mkdir C: \\U sers \\< user> \\. k8slens \\e xtensions -force cd C: \\U sers \\< user> \\. k8slens \\e xtensions If you have administrator rights, you can create symlink to the sample extension \u2013 in this case helloworld-sample : cmd /c mklink /D helloworld-sample lens-extension-samples \\h elloworld-sample Without administrator rights, you need to copy the extensions sample directory into C:\\Users\\\\.k8slens\\extensions : Copy-Item 'lens-extension-samples\\helloworld-sample' 'C:\\Users\\\\.k8slens\\extensions\\helloworld-sample' Build the Extension # To build the extension you can use make or run the npm commands manually: cd /helloworld-sample make build To run the npm commands, enter: cd /helloworld-sample npm install npm run build Optionally, automatically rebuild the extension by watching for changes to the source code. To do so, enter: cd /helloworld-sample npm run dev You must restart Lens for the extension to load. After this initial restart, reload Lens and it will automatically pick up changes any time the extension rebuilds. With Lens running, either connect to an existing cluster or create a new one . You will see the \"Hello World\" page in the left-side cluster menu. Develop the Extension # Finally, you'll make a change to the message that our Hello World sample extension displays: Navigate to /helloworld-sample . In page.tsx , change the message from HelloWorld! to Hello Lens Extensions . Rebuild the extension. If you used npm run dev , the extension will rebuild automatically. Reload the Lens window. Click on the Hello World page. The updated message will appear. Next Steps # In the next topic , we'll take a closer look at the source code of our Hello World sample. You can find the source code for this tutorial at: lensapp/lens-extension-samples . Extension Guides contains additional samples.","title":"Your First Extension"},{"location":"extensions/get-started/your-first-extension/#your-first-extension","text":"We recommend to always use Yeoman generator for Lens Extension to start new extension project. Read the generator guide here . If you want to setup the project manually, please continue reading.","title":"Your First Extension"},{"location":"extensions/get-started/your-first-extension/#first-extension","text":"In this topic, you'll learn the basics of building extensions by creating an extension that adds a \"Hello World\" page to a cluster menu.","title":"First Extension"},{"location":"extensions/get-started/your-first-extension/#install-the-extension","text":"To install the extension, clone the Lens Extension samples repository to your local machine: git clone https://github.com/lensapp/lens-extension-samples.git Next you need to create a symlink. A symlink connects the directory that Lens will monitor for user-installed extensions to the sample extension. In this case the sample extension is helloworld-sample .","title":"Install the Extension"},{"location":"extensions/get-started/your-first-extension/#linux-macos","text":"mkdir -p ~/.k8slens/extensions cd ~/.k8slens/extensions ln -s lens-extension-samples/helloworld-sample helloworld-sample","title":"Linux & macOS"},{"location":"extensions/get-started/your-first-extension/#windows","text":"Create the directory that Lens will monitor for user-installed extensions: mkdir C: \\U sers \\< user> \\. k8slens \\e xtensions -force cd C: \\U sers \\< user> \\. k8slens \\e xtensions If you have administrator rights, you can create symlink to the sample extension \u2013 in this case helloworld-sample : cmd /c mklink /D helloworld-sample lens-extension-samples \\h elloworld-sample Without administrator rights, you need to copy the extensions sample directory into C:\\Users\\\\.k8slens\\extensions : Copy-Item 'lens-extension-samples\\helloworld-sample' 'C:\\Users\\\\.k8slens\\extensions\\helloworld-sample'","title":"Windows"},{"location":"extensions/get-started/your-first-extension/#build-the-extension","text":"To build the extension you can use make or run the npm commands manually: cd /helloworld-sample make build To run the npm commands, enter: cd /helloworld-sample npm install npm run build Optionally, automatically rebuild the extension by watching for changes to the source code. To do so, enter: cd /helloworld-sample npm run dev You must restart Lens for the extension to load. After this initial restart, reload Lens and it will automatically pick up changes any time the extension rebuilds. With Lens running, either connect to an existing cluster or create a new one . You will see the \"Hello World\" page in the left-side cluster menu.","title":"Build the Extension"},{"location":"extensions/get-started/your-first-extension/#develop-the-extension","text":"Finally, you'll make a change to the message that our Hello World sample extension displays: Navigate to /helloworld-sample . In page.tsx , change the message from HelloWorld! to Hello Lens Extensions . Rebuild the extension. If you used npm run dev , the extension will rebuild automatically. Reload the Lens window. Click on the Hello World page. The updated message will appear.","title":"Develop the Extension"},{"location":"extensions/get-started/your-first-extension/#next-steps","text":"In the next topic , we'll take a closer look at the source code of our Hello World sample. You can find the source code for this tutorial at: lensapp/lens-extension-samples . Extension Guides contains additional samples.","title":"Next Steps"},{"location":"extensions/guides/","text":"Extension Guides # The basics of the Lens Extension API are covered in Your First Extension . In this section detailed code guides and samples are used to explain how to use specific Lens Extension APIs. Each guide or sample will include: Clearly commented source code. Instructions for running the sample extension. Image of the sample extension's appearance and usage. Listing of Extension API being used. Explanation of Extension API concepts. Guides # Guide APIs Generate new extension project Main process extension LensMainExtension Renderer process extension LensRendererExtension Stores Components KubeObjectListLayout Working with mobx Samples # Sample APIs helloworld LensMainExtension LensRendererExtension Component.Icon Component.IconProps minikube LensMainExtension Store.clusterStore Store.workspaceStore styling-css-modules-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-emotion-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-sass-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps custom-resource-page LensRendererExtension K8sApi.KubeApi K8sApi.KubeObjectStore Component.KubeObjectListLayout Component.KubeObjectDetailsProps Component.IconProps","title":"Overview"},{"location":"extensions/guides/#extension-guides","text":"The basics of the Lens Extension API are covered in Your First Extension . In this section detailed code guides and samples are used to explain how to use specific Lens Extension APIs. Each guide or sample will include: Clearly commented source code. Instructions for running the sample extension. Image of the sample extension's appearance and usage. Listing of Extension API being used. Explanation of Extension API concepts.","title":"Extension Guides"},{"location":"extensions/guides/#guides","text":"Guide APIs Generate new extension project Main process extension LensMainExtension Renderer process extension LensRendererExtension Stores Components KubeObjectListLayout Working with mobx","title":"Guides"},{"location":"extensions/guides/#samples","text":"Sample APIs helloworld LensMainExtension LensRendererExtension Component.Icon Component.IconProps minikube LensMainExtension Store.clusterStore Store.workspaceStore styling-css-modules-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-emotion-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps styling-sass-sample LensMainExtension LensRendererExtension Component.Icon Component.IconProps custom-resource-page LensRendererExtension K8sApi.KubeApi K8sApi.KubeObjectStore Component.KubeObjectListLayout Component.KubeObjectDetailsProps Component.IconProps","title":"Samples"},{"location":"extensions/guides/anatomy/","text":"WIP #","title":"Anatomy"},{"location":"extensions/guides/anatomy/#wip","text":"","title":"WIP"},{"location":"extensions/guides/components/","text":"WIP #","title":"Components"},{"location":"extensions/guides/components/#wip","text":"","title":"WIP"},{"location":"extensions/guides/generator/","text":"New Extension Project with Generator # The Lens Extension Generator scaffolds a project ready for development. Install Yeoman and Lens Extension Generator with: npm install -g yo generator-lens-ext Run the generator and fill out a few fields for a TypeScript project: yo lens-ext # ? What type of extension do you want to create? New Extension (TypeScript) # ? What's the name of your extension? my-first-lens-ext # ? What's the description of your extension? My hello world extension # ? What's your extension's publisher name? @my-org/my-first-lens-ext # ? Initialize a git repository? Yes # ? Install dependencies after initialization? Yes # ? Which package manager to use? yarn # ? symlink created extension folder to ~/.k8slens/extensions (mac/linux) or :User s \\< user> \\. k8slens \\e xtensions ( windows ) ? Yes Start webpack, which watches the my-first-lens-ext folder. cd my-first-lens-ext npm start # start the webpack server in watch mode Then, open Lens, you should see a Hello World item in the menu: Developing the Extension # Try to change my-first-lens-ext/renderer.tsx to \"Hello Lens!\": clusterPageMenus = [ { target: { pageId: \"hello\" }, title: \"Hello Lens\", components: { Icon: ExampleIcon, } } ] Then, Reload Lens by CMD+R (Mac) / Ctrl+R (Linux/Windows), you should see the menu item text changes: Debugging the Extension # Testing Next steps # You can take a closer look at Common Capabilities of extension, how to style the extension. Or the Extension Anatomy . You are welcome to raise an issue for Lens Extension Generator, if you find problems, or have feature requests. The source code of the generator is hosted at Github","title":"Generator"},{"location":"extensions/guides/generator/#new-extension-project-with-generator","text":"The Lens Extension Generator scaffolds a project ready for development. Install Yeoman and Lens Extension Generator with: npm install -g yo generator-lens-ext Run the generator and fill out a few fields for a TypeScript project: yo lens-ext # ? What type of extension do you want to create? New Extension (TypeScript) # ? What's the name of your extension? my-first-lens-ext # ? What's the description of your extension? My hello world extension # ? What's your extension's publisher name? @my-org/my-first-lens-ext # ? Initialize a git repository? Yes # ? Install dependencies after initialization? Yes # ? Which package manager to use? yarn # ? symlink created extension folder to ~/.k8slens/extensions (mac/linux) or :User s \\< user> \\. k8slens \\e xtensions ( windows ) ? Yes Start webpack, which watches the my-first-lens-ext folder. cd my-first-lens-ext npm start # start the webpack server in watch mode Then, open Lens, you should see a Hello World item in the menu:","title":"New Extension Project with Generator"},{"location":"extensions/guides/generator/#developing-the-extension","text":"Try to change my-first-lens-ext/renderer.tsx to \"Hello Lens!\": clusterPageMenus = [ { target: { pageId: \"hello\" }, title: \"Hello Lens\", components: { Icon: ExampleIcon, } } ] Then, Reload Lens by CMD+R (Mac) / Ctrl+R (Linux/Windows), you should see the menu item text changes:","title":"Developing the Extension"},{"location":"extensions/guides/generator/#debugging-the-extension","text":"Testing","title":"Debugging the Extension"},{"location":"extensions/guides/generator/#next-steps","text":"You can take a closer look at Common Capabilities of extension, how to style the extension. Or the Extension Anatomy . You are welcome to raise an issue for Lens Extension Generator, if you find problems, or have feature requests. The source code of the generator is hosted at Github","title":"Next steps"},{"location":"extensions/guides/kube-object-list-layout/","text":"KubeObjectListLayout Sample # In this guide we will learn how to list Kubernetes CRD objects on the cluster dashboard. You can see the complete source code for this guide here . Next, we will go the implementation through in steps. To achieve our goal, we need to: Register ClustePage and ClusterPageMenu objects List Certificate Objects on the Cluster Page Customize Details Panel Register clusterPage and clusterPageMenu Objects # First thing we need to do with our extension is to register new menu item in the cluster menu and create a cluster page that is opened when clicking the menu item. We will do this in our extension class CrdSampleExtension that is derived LensRendererExtension class: export default class CrdSampleExtension extends LensRendererExtension { } To register menu item in the cluster menu we need to register PageMenuRegistration object. This object will register a menu item with \"Certificates\" text. It will also use CertificateIcon component to render an icon and navigate to cluster page that is having certificates page id. export function CertificateIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"security\" tooltip = \"Certificates\" /> } export default class CrdSampleExtension extends LensRendererExtension { clusterPageMenus = [ { target : { pageId : \"certificates\" }, title : \"Certificates\" , components : { Icon : CertificateIcon , } }, ] } Then we need to register PageRegistration object with certificates id and define CertificatePage component to render certificates. export default class CrdSampleExtension extends LensRendererExtension { ... clusterPages = [{ id : \"certificates\" , components : { Page : () => < CertificatePage extension = { this } /> , MenuIcon : CertificateIcon , } }] } List Certificate Objects on the Cluster Page # In the previous step we defined CertificatePage component to render certificates. In this step we will actually implement that. CertificatePage is a React component that will render Component.KubeObjectListLayout component to list Certificate CRD objects. Get CRD objects # In order to list CRD objects, we need first fetch those from Kubernetes API. Lens Extensions API provides easy mechanism to do this. We just need to define Certificate class derived from K8sApi.KubeObject , CertificatesApi derived from K8sApi.KubeApi and CertificatesStore derived from K8sApi.KubeObjectStore . Certificate class defines properties found in the CRD object: export class Certificate extends K8sApi . KubeObject { static kind = \"Certificate\" static namespaced = true static apiBase = \"/apis/cert-manager.io/v1alpha2/certificates\" kind : string apiVersion : string metadata : { name : string ; namespace : string ; selfLink : string ; uid : string ; resourceVersion : string ; creationTimestamp : string ; labels : { [ key : string ] : string ; }; annotations : { [ key : string ] : string ; }; } spec : { dnsNames : string []; issuerRef : { group : string ; kind : string ; name : string ; } secretName : string } status : { conditions : { lastTransitionTime : string ; message : string ; reason : string ; status : string ; type? : string ; }[]; } } With CertificatesApi class we are able to manage Certificate objects in Kubernetes API: export class CertificatesApi extends K8sApi . KubeApi < Certificate > { } export const certificatesApi = new CertificatesApi ({ objectConstructor : Certificate }); CertificateStore defines storage for Certificate objects export class CertificatesStore extends K8sApi . KubeObjectStore < Certificate > { api = certificatesApi } export const certificatesStore = new CertificatesStore (); And, finally, we register this store to Lens's API manager. K8sApi . apiManager . registerStore ( certificatesStore ); Create CertificatePage component # Now we have created mechanism to manage Certificate objects in Kubernetes API. Then we need to fetch those and render them in the UI. First we define CertificatePage class that extends React.Component . import { Component , LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" ; import { certificatesStore } from \"../certificate-store\" ; import { Certificate } from \"../certificate\" export class CertificatePage extends React . Component < { extension : LensRendererExtension } > { } Next we will implement render method that will display certificates in a list. To do that, we just need to add Component.KubeObjectListLayout component inside Component.TabLayout component in render method. To define which objects the list is showing, we need to pass certificateStore object to Component.KubeObjectListLayout in store property. Component.KubeObjectListLayout will fetch automacially items from the given store when component is mounted. Also, we can define needed sorting callbacks and search filters for the list: enum sortBy { name = \"name\" , namespace = \"namespace\" , issuer = \"issuer\" } export class CertificatePage extends React . Component < { extension : LensRendererExtension } > { // ... render() { return ( < Component . TabLayout > < Component . KubeObjectListLayout className = \"Certicates\" store = { certificatesStore } sortingCallbacks = {{ [ sortBy . name ] : ( certificate : Certificate ) => certificate . getName (), [ sortBy . namespace ] : ( certificate : Certificate ) => certificate . metadata . namespace , [ sortBy . issuer ] : ( certificate : Certificate ) => certificate . spec . issuerRef . name }} searchFilters = {[ ( certificate : Certificate ) => certificate . getSearchFields () ]} renderHeaderTitle = \"Certificates\" renderTableHeader = {[ { title : \"Name\" , className : \"name\" , sortBy : sortBy.name }, { title : \"Namespace\" , className : \"namespace\" , sortBy : sortBy.namespace }, { title : \"Issuer\" , className : \"issuer\" , sortBy : sortBy.namespace }, ]} renderTableContents = {( certificate : Certificate ) => [ certificate . getName (), certificate . metadata . namespace , certificate . spec . issuerRef . name ]} /> < /Component.TabLayout> ) } } Customize Details panel # We have learned now, how to list CRD objects in a list view. Next, we will learn how to customize details panel that will be opened when the object is clicked in the list. First, we need to register our custom component to render details for the specific Kubernetes custom resource, in our case Certificate . We will do this again in CrdSampleExtension class: export default class CrdSampleExtension extends LensRendererExtension { //... kubeObjectDetailItems = [{ kind : Certificate.kind , apiVersions : [ \"cert-manager.io/v1alpha2\" ], components : { Details : ( props : CertificateDetailsProps ) => < CertificateDetails {... props } /> } }] } Here we defined that CertificateDetails component will render the resource details. So, next we need to implement that component. Lens will inject Certificate object into our component so we just need to render some information out of it. We can use Component.DrawerItem component from Lens Extensions API to give the same look and feel as Lens is using elsewhere: import { Component , K8sApi } from \"@k8slens/extensions\" ; import React from \"react\" ; import { Certificate } from \"../certificate\" ; export interface CertificateDetailsProps extends Component . KubeObjectDetailsProps < Certificate > { } export class CertificateDetails extends React . Component < CertificateDetailsProps > { render() { const { object : certificate } = this . props ; if ( ! certificate ) return null ; return ( < div className = \"Certificate\" > < Component . DrawerItem name = \"Created\" > { certificate . getAge ( true , false )} ago ({ certificate . metadata . creationTimestamp }) < /Component.DrawerItem> < Component . DrawerItem name = \"DNS Names\" > { certificate . spec . dnsNames . join ( \",\" )} < /Component.DrawerItem> < Component . DrawerItem name = \"Secret\" > { certificate . spec . secretName } < /Component.DrawerItem> < Component . DrawerItem name = \"Status\" className = \"status\" labelsOnly > { certificate . status . conditions . map (( condition , index ) => { const { type , reason , message , status } = condition ; const kind = type || reason ; if ( ! kind ) return null ; return ( < Component . Badge key = { kind + index } label = { kind } className = { \"success \" + kind . toLowerCase ()} tooltip = { message } /> ); })} < /Component.DrawerItem> < /div> ) } } Summary # Like we can see above, it's very easy to add custom pages and fetch Kubernetes resources by using Extensions API. Please see the complete source code to test it out.","title":"KubeObjectListLayout Sample"},{"location":"extensions/guides/kube-object-list-layout/#kubeobjectlistlayout-sample","text":"In this guide we will learn how to list Kubernetes CRD objects on the cluster dashboard. You can see the complete source code for this guide here . Next, we will go the implementation through in steps. To achieve our goal, we need to: Register ClustePage and ClusterPageMenu objects List Certificate Objects on the Cluster Page Customize Details Panel","title":"KubeObjectListLayout Sample"},{"location":"extensions/guides/kube-object-list-layout/#register-clusterpage-and-clusterpagemenu-objects","text":"First thing we need to do with our extension is to register new menu item in the cluster menu and create a cluster page that is opened when clicking the menu item. We will do this in our extension class CrdSampleExtension that is derived LensRendererExtension class: export default class CrdSampleExtension extends LensRendererExtension { } To register menu item in the cluster menu we need to register PageMenuRegistration object. This object will register a menu item with \"Certificates\" text. It will also use CertificateIcon component to render an icon and navigate to cluster page that is having certificates page id. export function CertificateIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"security\" tooltip = \"Certificates\" /> } export default class CrdSampleExtension extends LensRendererExtension { clusterPageMenus = [ { target : { pageId : \"certificates\" }, title : \"Certificates\" , components : { Icon : CertificateIcon , } }, ] } Then we need to register PageRegistration object with certificates id and define CertificatePage component to render certificates. export default class CrdSampleExtension extends LensRendererExtension { ... clusterPages = [{ id : \"certificates\" , components : { Page : () => < CertificatePage extension = { this } /> , MenuIcon : CertificateIcon , } }] }","title":"Register clusterPage and clusterPageMenu Objects"},{"location":"extensions/guides/kube-object-list-layout/#list-certificate-objects-on-the-cluster-page","text":"In the previous step we defined CertificatePage component to render certificates. In this step we will actually implement that. CertificatePage is a React component that will render Component.KubeObjectListLayout component to list Certificate CRD objects.","title":"List Certificate Objects on the Cluster Page"},{"location":"extensions/guides/kube-object-list-layout/#get-crd-objects","text":"In order to list CRD objects, we need first fetch those from Kubernetes API. Lens Extensions API provides easy mechanism to do this. We just need to define Certificate class derived from K8sApi.KubeObject , CertificatesApi derived from K8sApi.KubeApi and CertificatesStore derived from K8sApi.KubeObjectStore . Certificate class defines properties found in the CRD object: export class Certificate extends K8sApi . KubeObject { static kind = \"Certificate\" static namespaced = true static apiBase = \"/apis/cert-manager.io/v1alpha2/certificates\" kind : string apiVersion : string metadata : { name : string ; namespace : string ; selfLink : string ; uid : string ; resourceVersion : string ; creationTimestamp : string ; labels : { [ key : string ] : string ; }; annotations : { [ key : string ] : string ; }; } spec : { dnsNames : string []; issuerRef : { group : string ; kind : string ; name : string ; } secretName : string } status : { conditions : { lastTransitionTime : string ; message : string ; reason : string ; status : string ; type? : string ; }[]; } } With CertificatesApi class we are able to manage Certificate objects in Kubernetes API: export class CertificatesApi extends K8sApi . KubeApi < Certificate > { } export const certificatesApi = new CertificatesApi ({ objectConstructor : Certificate }); CertificateStore defines storage for Certificate objects export class CertificatesStore extends K8sApi . KubeObjectStore < Certificate > { api = certificatesApi } export const certificatesStore = new CertificatesStore (); And, finally, we register this store to Lens's API manager. K8sApi . apiManager . registerStore ( certificatesStore );","title":"Get CRD objects"},{"location":"extensions/guides/kube-object-list-layout/#create-certificatepage-component","text":"Now we have created mechanism to manage Certificate objects in Kubernetes API. Then we need to fetch those and render them in the UI. First we define CertificatePage class that extends React.Component . import { Component , LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" ; import { certificatesStore } from \"../certificate-store\" ; import { Certificate } from \"../certificate\" export class CertificatePage extends React . Component < { extension : LensRendererExtension } > { } Next we will implement render method that will display certificates in a list. To do that, we just need to add Component.KubeObjectListLayout component inside Component.TabLayout component in render method. To define which objects the list is showing, we need to pass certificateStore object to Component.KubeObjectListLayout in store property. Component.KubeObjectListLayout will fetch automacially items from the given store when component is mounted. Also, we can define needed sorting callbacks and search filters for the list: enum sortBy { name = \"name\" , namespace = \"namespace\" , issuer = \"issuer\" } export class CertificatePage extends React . Component < { extension : LensRendererExtension } > { // ... render() { return ( < Component . TabLayout > < Component . KubeObjectListLayout className = \"Certicates\" store = { certificatesStore } sortingCallbacks = {{ [ sortBy . name ] : ( certificate : Certificate ) => certificate . getName (), [ sortBy . namespace ] : ( certificate : Certificate ) => certificate . metadata . namespace , [ sortBy . issuer ] : ( certificate : Certificate ) => certificate . spec . issuerRef . name }} searchFilters = {[ ( certificate : Certificate ) => certificate . getSearchFields () ]} renderHeaderTitle = \"Certificates\" renderTableHeader = {[ { title : \"Name\" , className : \"name\" , sortBy : sortBy.name }, { title : \"Namespace\" , className : \"namespace\" , sortBy : sortBy.namespace }, { title : \"Issuer\" , className : \"issuer\" , sortBy : sortBy.namespace }, ]} renderTableContents = {( certificate : Certificate ) => [ certificate . getName (), certificate . metadata . namespace , certificate . spec . issuerRef . name ]} /> < /Component.TabLayout> ) } }","title":"Create CertificatePage component"},{"location":"extensions/guides/kube-object-list-layout/#customize-details-panel","text":"We have learned now, how to list CRD objects in a list view. Next, we will learn how to customize details panel that will be opened when the object is clicked in the list. First, we need to register our custom component to render details for the specific Kubernetes custom resource, in our case Certificate . We will do this again in CrdSampleExtension class: export default class CrdSampleExtension extends LensRendererExtension { //... kubeObjectDetailItems = [{ kind : Certificate.kind , apiVersions : [ \"cert-manager.io/v1alpha2\" ], components : { Details : ( props : CertificateDetailsProps ) => < CertificateDetails {... props } /> } }] } Here we defined that CertificateDetails component will render the resource details. So, next we need to implement that component. Lens will inject Certificate object into our component so we just need to render some information out of it. We can use Component.DrawerItem component from Lens Extensions API to give the same look and feel as Lens is using elsewhere: import { Component , K8sApi } from \"@k8slens/extensions\" ; import React from \"react\" ; import { Certificate } from \"../certificate\" ; export interface CertificateDetailsProps extends Component . KubeObjectDetailsProps < Certificate > { } export class CertificateDetails extends React . Component < CertificateDetailsProps > { render() { const { object : certificate } = this . props ; if ( ! certificate ) return null ; return ( < div className = \"Certificate\" > < Component . DrawerItem name = \"Created\" > { certificate . getAge ( true , false )} ago ({ certificate . metadata . creationTimestamp }) < /Component.DrawerItem> < Component . DrawerItem name = \"DNS Names\" > { certificate . spec . dnsNames . join ( \",\" )} < /Component.DrawerItem> < Component . DrawerItem name = \"Secret\" > { certificate . spec . secretName } < /Component.DrawerItem> < Component . DrawerItem name = \"Status\" className = \"status\" labelsOnly > { certificate . status . conditions . map (( condition , index ) => { const { type , reason , message , status } = condition ; const kind = type || reason ; if ( ! kind ) return null ; return ( < Component . Badge key = { kind + index } label = { kind } className = { \"success \" + kind . toLowerCase ()} tooltip = { message } /> ); })} < /Component.DrawerItem> < /div> ) } }","title":"Customize Details panel"},{"location":"extensions/guides/kube-object-list-layout/#summary","text":"Like we can see above, it's very easy to add custom pages and fetch Kubernetes resources by using Extensions API. Please see the complete source code to test it out.","title":"Summary"},{"location":"extensions/guides/main-extension/","text":"Main Extension # The main extension api is the interface to Lens' main process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom application menu items, and generally run custom code in Lens' main process. LensMainExtension Class # To create a main extension simply extend the LensMainExtension class: import { LensMainExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensMainExtension { onActivate() { console . log ( 'custom main process extension code started' ); } onDeactivate() { console . log ( 'custom main process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. Note that to see standard output from the main process there must be a console connected to it. This is typically achieved by starting Lens from the command prompt. The following example is a little more interesting in that it accesses some Lens state data and periodically logs the name of the currently active cluster in Lens. import { LensMainExtension , Store } from \"@k8slens/extensions\" ; const clusterStore = Store . clusterStore export default class ActiveClusterExtensionMain extends LensMainExtension { timer : NodeJS.Timeout onActivate() { console . log ( \"Cluster logger activated\" ); this . timer = setInterval (() => { if ( ! clusterStore . active ) { console . log ( \"No active cluster\" ); return ; } console . log ( \"active cluster is\" , clusterStore . active . contextName ) }, 5000 ) } onDeactivate() { clearInterval ( this . timer ) console . log ( \"Cluster logger deactivated\" ); } } See the Stores guide for more details on accessing Lens state data. appMenus # The only UI feature customizable in the main extension api is the application menu. Custom menu items can be inserted and linked to custom functionality, such as navigating to a specific page. The following example demonstrates adding a menu item to the Help menu. import { LensMainExtension } from \"@k8slens/extensions\" ; export default class SamplePageMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Sample\" , click() { console . log ( \"Sample clicked\" ); } } ] } appMenus is an array of objects satisfying the MenuRegistration interface. MenuRegistration extends React's MenuItemConstructorOptions interface. parentId is the id of the menu to put this menu item under (todo: is this case sensitive and how do we know what the available ids are?), label is the text to show on the menu item, and click() is called when the menu item is selected. In this example we simply log a message, but typically you would navigate to a specific page or perform some operation. Pages are associated with the LensRendererExtension class and can be defined when you extend it.","title":"Main Extension"},{"location":"extensions/guides/main-extension/#main-extension","text":"The main extension api is the interface to Lens' main process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom application menu items, and generally run custom code in Lens' main process.","title":"Main Extension"},{"location":"extensions/guides/main-extension/#lensmainextension-class","text":"To create a main extension simply extend the LensMainExtension class: import { LensMainExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensMainExtension { onActivate() { console . log ( 'custom main process extension code started' ); } onDeactivate() { console . log ( 'custom main process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. Note that to see standard output from the main process there must be a console connected to it. This is typically achieved by starting Lens from the command prompt. The following example is a little more interesting in that it accesses some Lens state data and periodically logs the name of the currently active cluster in Lens. import { LensMainExtension , Store } from \"@k8slens/extensions\" ; const clusterStore = Store . clusterStore export default class ActiveClusterExtensionMain extends LensMainExtension { timer : NodeJS.Timeout onActivate() { console . log ( \"Cluster logger activated\" ); this . timer = setInterval (() => { if ( ! clusterStore . active ) { console . log ( \"No active cluster\" ); return ; } console . log ( \"active cluster is\" , clusterStore . active . contextName ) }, 5000 ) } onDeactivate() { clearInterval ( this . timer ) console . log ( \"Cluster logger deactivated\" ); } } See the Stores guide for more details on accessing Lens state data.","title":"LensMainExtension Class"},{"location":"extensions/guides/main-extension/#appmenus","text":"The only UI feature customizable in the main extension api is the application menu. Custom menu items can be inserted and linked to custom functionality, such as navigating to a specific page. The following example demonstrates adding a menu item to the Help menu. import { LensMainExtension } from \"@k8slens/extensions\" ; export default class SamplePageMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Sample\" , click() { console . log ( \"Sample clicked\" ); } } ] } appMenus is an array of objects satisfying the MenuRegistration interface. MenuRegistration extends React's MenuItemConstructorOptions interface. parentId is the id of the menu to put this menu item under (todo: is this case sensitive and how do we know what the available ids are?), label is the text to show on the menu item, and click() is called when the menu item is selected. In this example we simply log a message, but typically you would navigate to a specific page or perform some operation. Pages are associated with the LensRendererExtension class and can be defined when you extend it.","title":"appMenus"},{"location":"extensions/guides/renderer-extension/","text":"Renderer Extension # The renderer extension api is the interface to Lens's renderer process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom Lens UI elements, and generally run custom code in Lens's renderer process. The custom Lens UI elements that can be added include global pages, cluster pages, cluster page menus, cluster features, app preferences, status bar items, KubeObject menu items, and KubeObject details items. These UI elements are based on React components. LensRendererExtension Class # To create a renderer extension simply extend the LensRendererExtension class: import { LensRendererExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensRendererExtension { onActivate() { console . log ( 'custom renderer process extension code started' ); } onDeactivate() { console . log ( 'custom renderer process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled. clusterPages # Cluster pages appear as part of the cluster dashboard. They are accessible from the side bar, and are shown in the menu list after Custom Resources . It is conventional to use a cluster page to show information or provide functionality pertaining to the active cluster, along with custom data and functionality your extension may have. However, it is not limited to the active cluster. Also, your extension can gain access to the Kubernetes resources in the active cluster in a straightforward manner using the clusterStore . The following example adds a cluster page definition to a LensRendererExtension subclass: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; } Cluster pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for wich there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above ExamplePage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } Note that the ExamplePage class defines a property named extension . This allows the ExampleExtension object to be passed in React-style in the cluster page definition, so that ExamplePage can access any ExampleExtension subclass data. clusterPageMenus # The above example code shows how to create a cluster page but not how to make it available to the Lens user. Cluster pages are typically made available through a menu item in the cluster dashboard sidebar. Expanding on the above example a cluster page menu is added to the ExampleExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; clusterPageMenus = [ { target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, ]; } Cluster page menus are objects matching the ClusterPageMenuRegistration interface. They define the appearance of the cluster page menu item in the cluster dashboard sidebar and the behaviour when the cluster page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the cluster page with id of \"hello\" . This is done by setting target 's pageId field to \"hello\" . The cluster page menu item's appearance is defined by setting the title field to the text that is to be displayed in the cluster dashboard sidebar. The components field is used to set an icon that appears to the left of the title text in the sidebar. Thus when the \"Hello World\" menu item is activated the cluster dashboard will show the contents of ExamplePage . This example requires the definition of another React-based component, ExampleIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function ExampleIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"pages\" tooltip = { \"Hi!\" } /> } export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } ExampleIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. ExampleIcon also sets a tooltip, shown when the Lens user hovers over the icon with a mouse, by setting the tooltip field. A cluster page menu can also be used to define a foldout submenu in the cluster dashboard sidebar. This enables the grouping of cluster pages. The following example shows how to specify a submenu having two menu items: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } }, { id : \"bonjour\" , components : { Page : () => < ExemplePage extension = { this } /> , } } ]; clusterPageMenus = [ { id : \"example\" , title : \"Greetings\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"bonjour\" }, title : \"Bonjour le monde\" , components : { Icon : ExempleIcon , } } ]; } The above defines two cluster pages and three cluster page menu objects. The cluster page definitons are straightforward. The first cluster page menu object defines the parent of a foldout submenu. Setting the id field in a cluster page menu definition implies that it is defining a foldout submenu. Also note that the target field is not specified (it is ignored if the id field is specified). This cluster page menu object specifies the title and components fields, which are used in displaying the menu item in the cluster dashboard sidebar. Initially the submenu is hidden. Activating this menu item toggles on and off the appearance of the submenu below it. The remaining two cluster page menu objects define the contents of the submenu. A cluster page menu object is defined to be a submenu item by setting the parentId field to the id of the parent of a foldout submenu, \"example\" in this case globalPages # Global pages appear independently of the cluster dashboard and they fill the Lens UI space. A global page is typically triggered from the cluster menu using a global page menu . They can also be triggered by a custom app menu selection from a Main Extension or a custom status bar item . Global pages can appear even when there is no active cluster, unlike cluster pages. It is conventional to use a global page to show information and provide functionality relevant across clusters, along with custom data and functionality that your extension may have. The following example defines a LensRendererExtension subclass with a single global page definition: import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpPage } from './page' ; import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; } Global pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for which there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above HelpPage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help yourself < /p> < /div> ) } } Note that the HelpPage class defines a property named extension . This allows the HelpExtension object to be passed in React-style in the global page definition, so that HelpPage can access any HelpExtension subclass data. This example code shows how to create a global page but not how to make it available to the Lens user. Global pages are typically made available through a number of ways. Menu items can be added to the Lens app menu system and set to open a global page when activated (See appMenus in the Main Extension guide ). Interactive elements can be placed on the status bar (the blue strip along the bottom of the Lens UI) and can be configured to link to a global page when activated (See statusBarItems ). As well, global pages can be made accessible from the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Global page menu icons that are defined using globalPageMenus appear below the Add Cluster icon. globalPageMenus # Global page menus connect a global page to the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Expanding on the example from globalPages a global page menu is added to the HelpExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { HelpIcon , HelpPage } from \"./page\" import React from \"react\" export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; globalPageMenus = [ { target : { pageId : \"help\" }, title : \"Help\" , components : { Icon : HelpIcon , } }, ]; } Global page menus are objects matching the PageMenuRegistration interface. They define the appearance of the global page menu item in the cluster menu and the behaviour when the global page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the global page with id of \"help\" . This is done by setting target 's pageId field to \"help\" . The global page menu item's appearance is defined by setting the title field to the text that is to be displayed as a tooltip in the cluster menu. The components field is used to set an icon that appears in the cluster menu. Thus when the \"Help\" icon is activated the contents of ExamplePage will be shown. This example requires the definition of another React-based component, HelpIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function HelpIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"help\" /> } export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help < /p> < /div> ) } } HelpIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. clusterFeatures # Cluster features are Kubernetes resources that can be applied to and managed within the active cluster. They can be installed/uninstalled by the Lens user from the cluster settings page . The following example shows how to add a cluster feature as part of a LensRendererExtension : import { LensRendererExtension } from \"@k8slens/extensions\" import { ExampleFeature } from \"./src/example-feature\" import React from \"react\" export default class ExampleFeatureExtension extends LensRendererExtension { clusterFeatures = [ { title : \"Example Feature\" , components : { Description : () => { return ( < span > Enable an example feature . < /span> ) } }, feature : new ExampleFeature () } ]; } The title and components.Description fields provide content that appears on the cluster settings page, in the Features section. The feature field must specify an instance which extends the abstract class ClusterFeature.Feature , and specifically implement the following methods: abstract install ( cluster : Cluster ) : Promise < void > ; abstract upgrade ( cluster : Cluster ) : Promise < void > ; abstract uninstall ( cluster : Cluster ) : Promise < void > ; abstract updateStatus ( cluster : Cluster ) : Promise < ClusterFeatureStatus > ; The install() method is typically called by Lens when a user has indicated that this feature is to be installed (i.e. clicked Install for the feature on the cluster settings page). The implementation of this method should install kubernetes resources using the applyResources() method, or by directly accessing the kubernetes api ( K8sApi ). The upgrade() method is typically called by Lens when a user has indicated that this feature is to be upgraded (i.e. clicked Upgrade for the feature on the cluster settings page). The implementation of this method should upgrade the kubernetes resources already installed, if relevant to the feature. The uninstall() method is typically called by Lens when a user has indicated that this feature is to be uninstalled (i.e. clicked Uninstall for the feature on the cluster settings page). The implementation of this method should uninstall kubernetes resources using the kubernetes api ( K8sApi ) The updateStatus() method is called periodically by Lens to determine details about the feature's current status. The implementation of this method should provide the current status information in the status field of the ClusterFeature.Feature parent class. The status.currentVersion and status.latestVersion fields may be displayed by Lens in describing the feature. The status.installed field should be set to true if the feature is currently installed, otherwise false. Also, Lens relies on the status.canUpgrade field to determine if the feature can be upgraded (i.e a new version could be available) so the implementation should set the status.canUpgrade field according to specific rules for the feature, if relevant. The following shows a very simple implementation of a ClusterFeature : import { ClusterFeature , Store , K8sApi } from \"@k8slens/extensions\" ; import * as path from \"path\" ; export class ExampleFeature extends ClusterFeature . Feature { async install ( cluster : Store.Cluster ) : Promise < void > { super . applyResources ( cluster , path . join ( __dirname , \"../resources/\" )); } async upgrade ( cluster : Store.Cluster ) : Promise < void > { return this . install ( cluster ); } async updateStatus ( cluster : Store.Cluster ) : Promise < ClusterFeature . FeatureStatus > { try { const pod = K8sApi . forCluster ( cluster , K8sApi . Pod ); const examplePod = await pod . get ({ name : \"example-pod\" , namespace : \"default\" }); if ( examplePod ? . kind ) { this . status . installed = true ; this . status . currentVersion = examplePod . spec . containers [ 0 ]. image . split ( \":\" )[ 1 ]; this . status . canUpgrade = true ; // a real implementation would perform a check here that is relevant to the specific feature } else { this . status . installed = false ; this . status . canUpgrade = false ; } } catch ( e ) { if ( e ? . error ? . code === 404 ) { this . status . installed = false ; this . status . canUpgrade = false ; } } return this . status ; } async uninstall ( cluster : Store.Cluster ) : Promise < void > { const podApi = K8sApi . forCluster ( cluster , K8sApi . Pod ); await podApi . delete ({ name : \"example-pod\" , namespace : \"default\" }); } } This example implements the install() method by simply invoking the helper applyResources() method. applyResources() tries to apply all resources read from all files found in the folder path provided. In this case this folder path is the ../resources subfolder relative to current source code's folder. The file ../resources/example-pod.yml could contain: apiVersion : v1 kind : Pod metadata : name : example-pod spec : containers : - name : example-pod image : nginx The upgrade() method in the example above is implemented by simply invoking the install() method. Depending on the feature to be supported by an extension, upgrading may require additional and/or different steps. The uninstall() method is implemented in the example above by utilizing the K8sApi provided by Lens to simply delete the example-pod pod applied by the install() method. The updateStatus() method is implemented above by using the K8sApi as well, this time to get information from the example-pod pod, in particular to determine if it is installed, what version is associated with it, and if it can be upgraded. How the status is updated for a specific cluster feature is up to the implementation. appPreferences # The Preferences page is a built-in global page. Extensions can add custom preferences to the Preferences page, thus providing a single location for users to configure global options, for Lens and extensions alike. The following example demonstrates adding a custom preference: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExamplePreferenceHint , ExamplePreferenceInput } from \"./src/example-preference\" ; import { observable } from \"mobx\" ; import React from \"react\" ; export default class ExampleRendererExtension extends LensRendererExtension { @observable preference = { enabled : false }; appPreferences = [ { title : \"Example Preferences\" , components : { Input : () => < ExamplePreferenceInput preference = { this . preference } /> , Hint : () => < ExamplePreferenceHint /> } } ]; } App preferences are objects matching the AppPreferenceRegistration interface. The title field specifies the text to show as the heading on the Preferences page. The components field specifies two React.Component objects defining the interface for the preference. Input should specify an interactive input element for your preference and Hint should provide descriptive information for the preference, which is shown below the Input element. ExamplePreferenceInput expects its React props set to an ExamplePreferenceProps instance, which is how ExampleRendererExtension handles the state of the preference input. ExampleRendererExtension has the field preference , which is provided to ExamplePreferenceInput when it is created. In this example ExamplePreferenceInput , ExamplePreferenceHint , and ExamplePreferenceProps are defined in ./src/example-preference.tsx : import { Component } from \"@k8slens/extensions\" ; import { observer } from \"mobx-react\" ; import React from \"react\" ; export class ExamplePreferenceProps { preference : { enabled : boolean ; } } @observer export class ExamplePreferenceInput extends React . Component < ExamplePreferenceProps > { render() { const { preference } = this . props ; return ( < Component . Checkbox label = \"I understand appPreferences\" value = { preference . enabled } onChange = { v => { preference . enabled = v ; }} /> ); } } export class ExamplePreferenceHint extends React . Component { render() { return ( < span > This is an example of an appPreference for extensions . < /span> ); } } ExamplePreferenceInput implements a simple checkbox (using Lens's Component.Checkbox ). It provides label as the text to display next to the checkbox and an onChange function, which reacts to the checkbox state change. The checkbox's value is initially set to preference.enabled . ExamplePreferenceInput is defined with React props of ExamplePreferenceProps type, which is an object with a single field, enabled . This is used to indicate the state of the preference, and is bound to the checkbox state in onChange . ExamplePreferenceHint is a simple text span. Note that the input and the hint could comprise of more sophisticated elements, according to the needs of the extension. Note that the above example introduces decorators observable and observer from the mobx and mobx-react packages. mobx simplifies state management and without it this example would not visually update the checkbox properly when the user activates it. Lens uses mobx extensively for state management of its own UI elements and it is recommended that extensions rely on it too. Alternatively, React's state management can be used, though mobx is typically simpler to use. Also note that an extension's state data can be managed using an ExtensionStore object, which conveniently handles persistence and synchronization. The example above defined a preference field in the ExampleRendererExtension class definition to hold the extension's state primarily to simplify the code for this guide, but it is recommended to manage your extension's state data using ExtensionStore statusBarItems # The Status bar is the blue strip along the bottom of the Lens UI. Status bar items are React.ReactNode types, which can be used to convey status information, or act as a link to a global page, or even an external page. The following example adds a status bar item definition, as well as a global page definition, to a LensRendererExtension subclass, and configures the status bar item to navigate to the global page upon activation (normally a mouse click): import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpIcon , HelpPage } from \"./page\" import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; statusBarItems = [ { item : ( < div className = \"flex align-center gaps\" onClick = {() => this . navigate ( \"help\" )} > < HelpIcon /> My Status Bar Item < /div> ), }, ]; } The item field of a status bar item specifies the React.Component to be shown on the status bar. By default items are added starting from the right side of the status bar. Typically, item would specify an icon and/or a short string of text, considering the limited space on the status bar. In the example above the HelpIcon from the globalPageMenus guide is reused. Also, the item provides a link to the global page by setting the onClick property to a function that calls the LensRendererExtension navigate() method. navigate() takes as a parameter the id of the global page, which is shown when navigate() is called. kubeObjectMenuItems # An extension can add custom menu items (including actions) for specific Kubernetes resource kinds/apiVersions. These menu items appear under the ... for each listed resource in the cluster dashboard, and on the title bar of the details page for a specific resource: The following example shows how to add a menu for Namespace resources, and associate an action with it: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceMenuItem } from \"./src/namespace-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) => < NamespaceMenuItem {... props } /> } } ]; } Kube object menu items are objects matching the KubeObjectMenuRegistration interface. The kind field specifies the kubernetes resource type to apply this menu item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a menu item for namespaces in the cluster dashboard. The components field defines the menu item's appearance and behaviour. The MenuItem field provides a function that returns a React.Component given a set of menu item properties. In this example a NamespaceMenuItem object is returned. NamespaceMenuItem is defined in ./src/namespace-menu-item.tsx : import React from \"react\" ; import { Component , K8sApi , Navigation } from \"@k8slens/extensions\" ; export function NamespaceMenuItem ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) { const { object : namespace , toolbar } = props ; if ( ! namespace ) return null ; const namespaceName = namespace . getName (); const sendToTerminal = ( command : string ) => { Component . terminalStore . sendCommand ( command , { enter : true , newTab : true , }); Navigation . hideDetails (); }; const getPods = () => { sendToTerminal ( `kubectl get pods -n ${ namespaceName } ` ); }; return ( < Component . MenuItem onClick = { getPods } > < Component . Icon material = \"speaker_group\" interactive = { toolbar } title = \"Get pods in terminal\" /> < span className = \"title\" > Get Pods < /span> < /Component.MenuItem> ); } NamespaceMenuItem returns a Component.MenuItem defining the menu item's appearance (icon and text) and behaviour when activated via the onClick property. getPods() shows how to open a terminal tab and run a command, specifically it runs kubectl to get a list of pods running in the current namespace. See Component.terminalStore.sendCommand for more details on running terminal commands. The name of the namespace is retrieved from props passed into NamespaceMenuItem() . namespace is the props.object , which is of type K8sApi.Namespace . This is the api for accessing namespaces, and the current namespace in this example is simply given by namespace.getName() . Thus kube object menu items are afforded convenient access to the specific resource selected by the user. kubeObjectDetailItems # An extension can add custom details (content) for specified Kubernetes resource kinds/apiVersions. These custom details appear on the details page for a specific resource, such as a Namespace: The following example shows how to add a tabulated list of pods to the Namespace resource details page: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceDetailsItem } from \"./src/namespace-details-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], priority : 10 , components : { Details : ( props : Component.KubeObjectDetailsProps < K8sApi . Namespace > ) => < NamespaceDetailsItem {... props } /> } } ]; } Kube object detail items are objects matching the KubeObjectDetailRegistration interface. The kind field specifies the kubernetes resource type to apply this detail item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a detail item for namespaces in the cluster dashboard. The components field defines the detail item's appearance and behaviour. The Details field provides a function that returns a React.Component given a set of detail item properties. In this example a NamespaceDetailsItem object is returned. NamespaceDetailsItem is defined in ./src/namespace-details-item.tsx : import { Component , K8sApi } from \"@k8slens/extensions\" ; import { PodsDetailsList } from \"./pods-details-list\" ; import React from \"react\" ; import { observable } from \"mobx\" ; import { observer } from \"mobx-react\" ; @observer export class NamespaceDetailsItem extends React . Component < Component . KubeObjectDetailsProps < K8sApi . Namespace >> { @observable private pods : K8sApi.Pod []; async componentDidMount() { this . pods = await K8sApi . podsApi . list ({ namespace : this.props.object.getName ()}); } render() { return ( < div > < Component . DrawerTitle title = \"Pods\" /> < PodsDetailsList pods = { this . pods } /> < /div> ) } } Since NamespaceDetailsItem extends React.Component> it can access the current namespace object (type K8sApi.Namespace ) through this.props.object . This object can be queried for many details about the current namespace. In this example the namespace's name is obtained in componentDidMount() using the K8sApi.Namespace getName() method. The namespace's name is needed to limit the list of pods to only those in this namespace. To get the list of pods this example uses the kubernetes pods api, specifically the K8sApi.podsApi.list() method. The K8sApi.podsApi is automatically configured for the currently active cluster. Note that K8sApi.podsApi.list() is an asynchronous method, and ideally getting the pods list should be done before rendering the NamespaceDetailsItem . It is a common technique in React development to await async calls in componentDidMount() . However, componentDidMount() is called right after the first call to render() . In order to effect a subsequent render() call React must be made aware of a state change. Like in the appPreferences guide , mobx and mobx-react are used to ensure NamespaceDetailsItem renders when the pods list is updated. This is done simply by marking the pods field as an observable and the NamespaceDetailsItem class itself as an observer . Finally, the NamespaceDetailsItem is rendered using the render() method. Details are placed in drawers, and using Component.DrawerTitle provides a separator from details above this one. Multiple details in a drawer can be placed in elements for further separation, if desired. The rest of this example's details are defined in PodsDetailsList , found in ./pods-details-list.tsx : import React from \"react\" ; import { Component , K8sApi } from \"@k8slens/extensions\" ; interface Props { pods : K8sApi.Pod []; } export class PodsDetailsList extends React . Component < Props > { getTableRow ( index : number ) { const { pods } = this . props ; return ( < Component . TableRow key = { index } nowrap > < Component . TableCell className = \"podName\" > { pods [ index ]. getName ()} < /Component.TableCell> < Component . TableCell className = \"podAge\" > { pods [ index ]. getAge ()} < /Component.TableCell> < Component . TableCell className = \"podStatus\" > { pods [ index ]. getStatus ()} < /Component.TableCell> < /Component.TableRow> ) } render() { const { pods } = this . props if ( ! pods ? . length ) { return null ; } return ( < div > < Component . Table > < Component . TableHead > < Component . TableCell className = \"podName\" > Name < /Component.TableCell> < Component . TableCell className = \"podAge\" > Age < /Component.TableCell> < Component . TableCell className = \"podStatus\" > Status < /Component.TableCell> < /Component.TableHead> { pods . map (( pod , index ) => this . getTableRow ( index )) } < /Component.Table> < /div> ) } } PodsDetailsList produces a simple table showing a list of the pods found in this namespace: For each pod the name, age, and status are obtained using the K8sApi.Pod methods. The table is constructed using the Component.Table and related elements. See Component documentation for further details.","title":"Renderer Extension"},{"location":"extensions/guides/renderer-extension/#renderer-extension","text":"The renderer extension api is the interface to Lens's renderer process (Lens runs in main and renderer processes). It allows you to access, configure, and customize Lens data, add custom Lens UI elements, and generally run custom code in Lens's renderer process. The custom Lens UI elements that can be added include global pages, cluster pages, cluster page menus, cluster features, app preferences, status bar items, KubeObject menu items, and KubeObject details items. These UI elements are based on React components.","title":"Renderer Extension"},{"location":"extensions/guides/renderer-extension/#lensrendererextension-class","text":"To create a renderer extension simply extend the LensRendererExtension class: import { LensRendererExtension } from \"@k8slens/extensions\" ; export default class ExampleExtensionMain extends LensRendererExtension { onActivate() { console . log ( 'custom renderer process extension code started' ); } onDeactivate() { console . log ( 'custom renderer process extension de-activated' ); } } There are two methods that you can implement to facilitate running your custom code. onActivate() is called when your extension has been successfully enabled. By implementing onActivate() you can initiate your custom code. onDeactivate() is called when the extension is disabled (typically from the Lens Extensions Page ) and when implemented gives you a chance to clean up after your extension, if necessary. The example above simply logs messages when the extension is enabled and disabled.","title":"LensRendererExtension Class"},{"location":"extensions/guides/renderer-extension/#clusterpages","text":"Cluster pages appear as part of the cluster dashboard. They are accessible from the side bar, and are shown in the menu list after Custom Resources . It is conventional to use a cluster page to show information or provide functionality pertaining to the active cluster, along with custom data and functionality your extension may have. However, it is not limited to the active cluster. Also, your extension can gain access to the Kubernetes resources in the active cluster in a straightforward manner using the clusterStore . The following example adds a cluster page definition to a LensRendererExtension subclass: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; } Cluster pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for wich there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above ExamplePage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } Note that the ExamplePage class defines a property named extension . This allows the ExampleExtension object to be passed in React-style in the cluster page definition, so that ExamplePage can access any ExampleExtension subclass data.","title":"clusterPages"},{"location":"extensions/guides/renderer-extension/#clusterpagemenus","text":"The above example code shows how to create a cluster page but not how to make it available to the Lens user. Cluster pages are typically made available through a menu item in the cluster dashboard sidebar. Expanding on the above example a cluster page menu is added to the ExampleExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } } ]; clusterPageMenus = [ { target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, ]; } Cluster page menus are objects matching the ClusterPageMenuRegistration interface. They define the appearance of the cluster page menu item in the cluster dashboard sidebar and the behaviour when the cluster page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the cluster page with id of \"hello\" . This is done by setting target 's pageId field to \"hello\" . The cluster page menu item's appearance is defined by setting the title field to the text that is to be displayed in the cluster dashboard sidebar. The components field is used to set an icon that appears to the left of the title text in the sidebar. Thus when the \"Hello World\" menu item is activated the cluster dashboard will show the contents of ExamplePage . This example requires the definition of another React-based component, ExampleIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function ExampleIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"pages\" tooltip = { \"Hi!\" } /> } export class ExamplePage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Hello world !< /p> < /div> ) } } ExampleIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field. ExampleIcon also sets a tooltip, shown when the Lens user hovers over the icon with a mouse, by setting the tooltip field. A cluster page menu can also be used to define a foldout submenu in the cluster dashboard sidebar. This enables the grouping of cluster pages. The following example shows how to specify a submenu having two menu items: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./page\" import React from \"react\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { id : \"hello\" , components : { Page : () => < ExamplePage extension = { this } /> , } }, { id : \"bonjour\" , components : { Page : () => < ExemplePage extension = { this } /> , } } ]; clusterPageMenus = [ { id : \"example\" , title : \"Greetings\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"hello\" }, title : \"Hello World\" , components : { Icon : ExampleIcon , } }, { parentId : \"example\" , target : { pageId : \"bonjour\" }, title : \"Bonjour le monde\" , components : { Icon : ExempleIcon , } } ]; } The above defines two cluster pages and three cluster page menu objects. The cluster page definitons are straightforward. The first cluster page menu object defines the parent of a foldout submenu. Setting the id field in a cluster page menu definition implies that it is defining a foldout submenu. Also note that the target field is not specified (it is ignored if the id field is specified). This cluster page menu object specifies the title and components fields, which are used in displaying the menu item in the cluster dashboard sidebar. Initially the submenu is hidden. Activating this menu item toggles on and off the appearance of the submenu below it. The remaining two cluster page menu objects define the contents of the submenu. A cluster page menu object is defined to be a submenu item by setting the parentId field to the id of the parent of a foldout submenu, \"example\" in this case","title":"clusterPageMenus"},{"location":"extensions/guides/renderer-extension/#globalpages","text":"Global pages appear independently of the cluster dashboard and they fill the Lens UI space. A global page is typically triggered from the cluster menu using a global page menu . They can also be triggered by a custom app menu selection from a Main Extension or a custom status bar item . Global pages can appear even when there is no active cluster, unlike cluster pages. It is conventional to use a global page to show information and provide functionality relevant across clusters, along with custom data and functionality that your extension may have. The following example defines a LensRendererExtension subclass with a single global page definition: import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpPage } from './page' ; import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; } Global pages are objects matching the PageRegistration interface. The id field identifies the page, and at its simplest is just a string identifier, as shown in the example above. The 'id' field can also convey route path details, such as variable parameters provided to a page ( See example below ). The components field matches the PageComponents interface for which there is one field, Page . Page is of type React.ComponentType , which gives you great flexibility in defining the appearance and behaviour of your page. For the example above HelpPage can be defined in page.tsx : import { LensRendererExtension } from \"@k8slens/extensions\" ; import React from \"react\" export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help yourself < /p> < /div> ) } } Note that the HelpPage class defines a property named extension . This allows the HelpExtension object to be passed in React-style in the global page definition, so that HelpPage can access any HelpExtension subclass data. This example code shows how to create a global page but not how to make it available to the Lens user. Global pages are typically made available through a number of ways. Menu items can be added to the Lens app menu system and set to open a global page when activated (See appMenus in the Main Extension guide ). Interactive elements can be placed on the status bar (the blue strip along the bottom of the Lens UI) and can be configured to link to a global page when activated (See statusBarItems ). As well, global pages can be made accessible from the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Global page menu icons that are defined using globalPageMenus appear below the Add Cluster icon.","title":"globalPages"},{"location":"extensions/guides/renderer-extension/#globalpagemenus","text":"Global page menus connect a global page to the cluster menu, which is the vertical strip along the left side of the Lens UI showing the available cluster icons, and the Add Cluster icon. Expanding on the example from globalPages a global page menu is added to the HelpExtension definition: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { HelpIcon , HelpPage } from \"./page\" import React from \"react\" export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; globalPageMenus = [ { target : { pageId : \"help\" }, title : \"Help\" , components : { Icon : HelpIcon , } }, ]; } Global page menus are objects matching the PageMenuRegistration interface. They define the appearance of the global page menu item in the cluster menu and the behaviour when the global page menu item is activated (typically by a mouse click). The example above uses the target field to set the behaviour as a link to the global page with id of \"help\" . This is done by setting target 's pageId field to \"help\" . The global page menu item's appearance is defined by setting the title field to the text that is to be displayed as a tooltip in the cluster menu. The components field is used to set an icon that appears in the cluster menu. Thus when the \"Help\" icon is activated the contents of ExamplePage will be shown. This example requires the definition of another React-based component, HelpIcon , which has been added to page.tsx : import { LensRendererExtension , Component } from \"@k8slens/extensions\" ; import React from \"react\" export function HelpIcon ( props : Component.IconProps ) { return < Component . Icon {... props } material = \"help\" /> } export class HelpPage extends React . Component < { extension : LensRendererExtension } > { render() { return ( < div > < p > Help < /p> < /div> ) } } HelpIcon introduces one of Lens's built-in components available to extension developers, the Component.Icon . Built in are the Material Design icons . One can be selected by name via the material field.","title":"globalPageMenus"},{"location":"extensions/guides/renderer-extension/#clusterfeatures","text":"Cluster features are Kubernetes resources that can be applied to and managed within the active cluster. They can be installed/uninstalled by the Lens user from the cluster settings page . The following example shows how to add a cluster feature as part of a LensRendererExtension : import { LensRendererExtension } from \"@k8slens/extensions\" import { ExampleFeature } from \"./src/example-feature\" import React from \"react\" export default class ExampleFeatureExtension extends LensRendererExtension { clusterFeatures = [ { title : \"Example Feature\" , components : { Description : () => { return ( < span > Enable an example feature . < /span> ) } }, feature : new ExampleFeature () } ]; } The title and components.Description fields provide content that appears on the cluster settings page, in the Features section. The feature field must specify an instance which extends the abstract class ClusterFeature.Feature , and specifically implement the following methods: abstract install ( cluster : Cluster ) : Promise < void > ; abstract upgrade ( cluster : Cluster ) : Promise < void > ; abstract uninstall ( cluster : Cluster ) : Promise < void > ; abstract updateStatus ( cluster : Cluster ) : Promise < ClusterFeatureStatus > ; The install() method is typically called by Lens when a user has indicated that this feature is to be installed (i.e. clicked Install for the feature on the cluster settings page). The implementation of this method should install kubernetes resources using the applyResources() method, or by directly accessing the kubernetes api ( K8sApi ). The upgrade() method is typically called by Lens when a user has indicated that this feature is to be upgraded (i.e. clicked Upgrade for the feature on the cluster settings page). The implementation of this method should upgrade the kubernetes resources already installed, if relevant to the feature. The uninstall() method is typically called by Lens when a user has indicated that this feature is to be uninstalled (i.e. clicked Uninstall for the feature on the cluster settings page). The implementation of this method should uninstall kubernetes resources using the kubernetes api ( K8sApi ) The updateStatus() method is called periodically by Lens to determine details about the feature's current status. The implementation of this method should provide the current status information in the status field of the ClusterFeature.Feature parent class. The status.currentVersion and status.latestVersion fields may be displayed by Lens in describing the feature. The status.installed field should be set to true if the feature is currently installed, otherwise false. Also, Lens relies on the status.canUpgrade field to determine if the feature can be upgraded (i.e a new version could be available) so the implementation should set the status.canUpgrade field according to specific rules for the feature, if relevant. The following shows a very simple implementation of a ClusterFeature : import { ClusterFeature , Store , K8sApi } from \"@k8slens/extensions\" ; import * as path from \"path\" ; export class ExampleFeature extends ClusterFeature . Feature { async install ( cluster : Store.Cluster ) : Promise < void > { super . applyResources ( cluster , path . join ( __dirname , \"../resources/\" )); } async upgrade ( cluster : Store.Cluster ) : Promise < void > { return this . install ( cluster ); } async updateStatus ( cluster : Store.Cluster ) : Promise < ClusterFeature . FeatureStatus > { try { const pod = K8sApi . forCluster ( cluster , K8sApi . Pod ); const examplePod = await pod . get ({ name : \"example-pod\" , namespace : \"default\" }); if ( examplePod ? . kind ) { this . status . installed = true ; this . status . currentVersion = examplePod . spec . containers [ 0 ]. image . split ( \":\" )[ 1 ]; this . status . canUpgrade = true ; // a real implementation would perform a check here that is relevant to the specific feature } else { this . status . installed = false ; this . status . canUpgrade = false ; } } catch ( e ) { if ( e ? . error ? . code === 404 ) { this . status . installed = false ; this . status . canUpgrade = false ; } } return this . status ; } async uninstall ( cluster : Store.Cluster ) : Promise < void > { const podApi = K8sApi . forCluster ( cluster , K8sApi . Pod ); await podApi . delete ({ name : \"example-pod\" , namespace : \"default\" }); } } This example implements the install() method by simply invoking the helper applyResources() method. applyResources() tries to apply all resources read from all files found in the folder path provided. In this case this folder path is the ../resources subfolder relative to current source code's folder. The file ../resources/example-pod.yml could contain: apiVersion : v1 kind : Pod metadata : name : example-pod spec : containers : - name : example-pod image : nginx The upgrade() method in the example above is implemented by simply invoking the install() method. Depending on the feature to be supported by an extension, upgrading may require additional and/or different steps. The uninstall() method is implemented in the example above by utilizing the K8sApi provided by Lens to simply delete the example-pod pod applied by the install() method. The updateStatus() method is implemented above by using the K8sApi as well, this time to get information from the example-pod pod, in particular to determine if it is installed, what version is associated with it, and if it can be upgraded. How the status is updated for a specific cluster feature is up to the implementation.","title":"clusterFeatures"},{"location":"extensions/guides/renderer-extension/#apppreferences","text":"The Preferences page is a built-in global page. Extensions can add custom preferences to the Preferences page, thus providing a single location for users to configure global options, for Lens and extensions alike. The following example demonstrates adding a custom preference: import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExamplePreferenceHint , ExamplePreferenceInput } from \"./src/example-preference\" ; import { observable } from \"mobx\" ; import React from \"react\" ; export default class ExampleRendererExtension extends LensRendererExtension { @observable preference = { enabled : false }; appPreferences = [ { title : \"Example Preferences\" , components : { Input : () => < ExamplePreferenceInput preference = { this . preference } /> , Hint : () => < ExamplePreferenceHint /> } } ]; } App preferences are objects matching the AppPreferenceRegistration interface. The title field specifies the text to show as the heading on the Preferences page. The components field specifies two React.Component objects defining the interface for the preference. Input should specify an interactive input element for your preference and Hint should provide descriptive information for the preference, which is shown below the Input element. ExamplePreferenceInput expects its React props set to an ExamplePreferenceProps instance, which is how ExampleRendererExtension handles the state of the preference input. ExampleRendererExtension has the field preference , which is provided to ExamplePreferenceInput when it is created. In this example ExamplePreferenceInput , ExamplePreferenceHint , and ExamplePreferenceProps are defined in ./src/example-preference.tsx : import { Component } from \"@k8slens/extensions\" ; import { observer } from \"mobx-react\" ; import React from \"react\" ; export class ExamplePreferenceProps { preference : { enabled : boolean ; } } @observer export class ExamplePreferenceInput extends React . Component < ExamplePreferenceProps > { render() { const { preference } = this . props ; return ( < Component . Checkbox label = \"I understand appPreferences\" value = { preference . enabled } onChange = { v => { preference . enabled = v ; }} /> ); } } export class ExamplePreferenceHint extends React . Component { render() { return ( < span > This is an example of an appPreference for extensions . < /span> ); } } ExamplePreferenceInput implements a simple checkbox (using Lens's Component.Checkbox ). It provides label as the text to display next to the checkbox and an onChange function, which reacts to the checkbox state change. The checkbox's value is initially set to preference.enabled . ExamplePreferenceInput is defined with React props of ExamplePreferenceProps type, which is an object with a single field, enabled . This is used to indicate the state of the preference, and is bound to the checkbox state in onChange . ExamplePreferenceHint is a simple text span. Note that the input and the hint could comprise of more sophisticated elements, according to the needs of the extension. Note that the above example introduces decorators observable and observer from the mobx and mobx-react packages. mobx simplifies state management and without it this example would not visually update the checkbox properly when the user activates it. Lens uses mobx extensively for state management of its own UI elements and it is recommended that extensions rely on it too. Alternatively, React's state management can be used, though mobx is typically simpler to use. Also note that an extension's state data can be managed using an ExtensionStore object, which conveniently handles persistence and synchronization. The example above defined a preference field in the ExampleRendererExtension class definition to hold the extension's state primarily to simplify the code for this guide, but it is recommended to manage your extension's state data using ExtensionStore","title":"appPreferences"},{"location":"extensions/guides/renderer-extension/#statusbaritems","text":"The Status bar is the blue strip along the bottom of the Lens UI. Status bar items are React.ReactNode types, which can be used to convey status information, or act as a link to a global page, or even an external page. The following example adds a status bar item definition, as well as a global page definition, to a LensRendererExtension subclass, and configures the status bar item to navigate to the global page upon activation (normally a mouse click): import { LensRendererExtension } from '@k8slens/extensions' ; import { HelpIcon , HelpPage } from \"./page\" import React from 'react' ; export default class HelpExtension extends LensRendererExtension { globalPages = [ { id : \"help\" , components : { Page : () => < HelpPage extension = { this } /> , } } ]; statusBarItems = [ { item : ( < div className = \"flex align-center gaps\" onClick = {() => this . navigate ( \"help\" )} > < HelpIcon /> My Status Bar Item < /div> ), }, ]; } The item field of a status bar item specifies the React.Component to be shown on the status bar. By default items are added starting from the right side of the status bar. Typically, item would specify an icon and/or a short string of text, considering the limited space on the status bar. In the example above the HelpIcon from the globalPageMenus guide is reused. Also, the item provides a link to the global page by setting the onClick property to a function that calls the LensRendererExtension navigate() method. navigate() takes as a parameter the id of the global page, which is shown when navigate() is called.","title":"statusBarItems"},{"location":"extensions/guides/renderer-extension/#kubeobjectmenuitems","text":"An extension can add custom menu items (including actions) for specific Kubernetes resource kinds/apiVersions. These menu items appear under the ... for each listed resource in the cluster dashboard, and on the title bar of the details page for a specific resource: The following example shows how to add a menu for Namespace resources, and associate an action with it: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceMenuItem } from \"./src/namespace-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) => < NamespaceMenuItem {... props } /> } } ]; } Kube object menu items are objects matching the KubeObjectMenuRegistration interface. The kind field specifies the kubernetes resource type to apply this menu item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a menu item for namespaces in the cluster dashboard. The components field defines the menu item's appearance and behaviour. The MenuItem field provides a function that returns a React.Component given a set of menu item properties. In this example a NamespaceMenuItem object is returned. NamespaceMenuItem is defined in ./src/namespace-menu-item.tsx : import React from \"react\" ; import { Component , K8sApi , Navigation } from \"@k8slens/extensions\" ; export function NamespaceMenuItem ( props : Component.KubeObjectMenuProps < K8sApi . Namespace > ) { const { object : namespace , toolbar } = props ; if ( ! namespace ) return null ; const namespaceName = namespace . getName (); const sendToTerminal = ( command : string ) => { Component . terminalStore . sendCommand ( command , { enter : true , newTab : true , }); Navigation . hideDetails (); }; const getPods = () => { sendToTerminal ( `kubectl get pods -n ${ namespaceName } ` ); }; return ( < Component . MenuItem onClick = { getPods } > < Component . Icon material = \"speaker_group\" interactive = { toolbar } title = \"Get pods in terminal\" /> < span className = \"title\" > Get Pods < /span> < /Component.MenuItem> ); } NamespaceMenuItem returns a Component.MenuItem defining the menu item's appearance (icon and text) and behaviour when activated via the onClick property. getPods() shows how to open a terminal tab and run a command, specifically it runs kubectl to get a list of pods running in the current namespace. See Component.terminalStore.sendCommand for more details on running terminal commands. The name of the namespace is retrieved from props passed into NamespaceMenuItem() . namespace is the props.object , which is of type K8sApi.Namespace . This is the api for accessing namespaces, and the current namespace in this example is simply given by namespace.getName() . Thus kube object menu items are afforded convenient access to the specific resource selected by the user.","title":"kubeObjectMenuItems"},{"location":"extensions/guides/renderer-extension/#kubeobjectdetailitems","text":"An extension can add custom details (content) for specified Kubernetes resource kinds/apiVersions. These custom details appear on the details page for a specific resource, such as a Namespace: The following example shows how to add a tabulated list of pods to the Namespace resource details page: import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { NamespaceDetailsItem } from \"./src/namespace-details-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectDetailItems = [ { kind : \"Namespace\" , apiVersions : [ \"v1\" ], priority : 10 , components : { Details : ( props : Component.KubeObjectDetailsProps < K8sApi . Namespace > ) => < NamespaceDetailsItem {... props } /> } } ]; } Kube object detail items are objects matching the KubeObjectDetailRegistration interface. The kind field specifies the kubernetes resource type to apply this detail item to, and the apiVersion field specifies the kubernetes api to use in relation to this resource type. This example adds a detail item for namespaces in the cluster dashboard. The components field defines the detail item's appearance and behaviour. The Details field provides a function that returns a React.Component given a set of detail item properties. In this example a NamespaceDetailsItem object is returned. NamespaceDetailsItem is defined in ./src/namespace-details-item.tsx : import { Component , K8sApi } from \"@k8slens/extensions\" ; import { PodsDetailsList } from \"./pods-details-list\" ; import React from \"react\" ; import { observable } from \"mobx\" ; import { observer } from \"mobx-react\" ; @observer export class NamespaceDetailsItem extends React . Component < Component . KubeObjectDetailsProps < K8sApi . Namespace >> { @observable private pods : K8sApi.Pod []; async componentDidMount() { this . pods = await K8sApi . podsApi . list ({ namespace : this.props.object.getName ()}); } render() { return ( < div > < Component . DrawerTitle title = \"Pods\" /> < PodsDetailsList pods = { this . pods } /> < /div> ) } } Since NamespaceDetailsItem extends React.Component> it can access the current namespace object (type K8sApi.Namespace ) through this.props.object . This object can be queried for many details about the current namespace. In this example the namespace's name is obtained in componentDidMount() using the K8sApi.Namespace getName() method. The namespace's name is needed to limit the list of pods to only those in this namespace. To get the list of pods this example uses the kubernetes pods api, specifically the K8sApi.podsApi.list() method. The K8sApi.podsApi is automatically configured for the currently active cluster. Note that K8sApi.podsApi.list() is an asynchronous method, and ideally getting the pods list should be done before rendering the NamespaceDetailsItem . It is a common technique in React development to await async calls in componentDidMount() . However, componentDidMount() is called right after the first call to render() . In order to effect a subsequent render() call React must be made aware of a state change. Like in the appPreferences guide , mobx and mobx-react are used to ensure NamespaceDetailsItem renders when the pods list is updated. This is done simply by marking the pods field as an observable and the NamespaceDetailsItem class itself as an observer . Finally, the NamespaceDetailsItem is rendered using the render() method. Details are placed in drawers, and using Component.DrawerTitle provides a separator from details above this one. Multiple details in a drawer can be placed in elements for further separation, if desired. The rest of this example's details are defined in PodsDetailsList , found in ./pods-details-list.tsx : import React from \"react\" ; import { Component , K8sApi } from \"@k8slens/extensions\" ; interface Props { pods : K8sApi.Pod []; } export class PodsDetailsList extends React . Component < Props > { getTableRow ( index : number ) { const { pods } = this . props ; return ( < Component . TableRow key = { index } nowrap > < Component . TableCell className = \"podName\" > { pods [ index ]. getName ()} < /Component.TableCell> < Component . TableCell className = \"podAge\" > { pods [ index ]. getAge ()} < /Component.TableCell> < Component . TableCell className = \"podStatus\" > { pods [ index ]. getStatus ()} < /Component.TableCell> < /Component.TableRow> ) } render() { const { pods } = this . props if ( ! pods ? . length ) { return null ; } return ( < div > < Component . Table > < Component . TableHead > < Component . TableCell className = \"podName\" > Name < /Component.TableCell> < Component . TableCell className = \"podAge\" > Age < /Component.TableCell> < Component . TableCell className = \"podStatus\" > Status < /Component.TableCell> < /Component.TableHead> { pods . map (( pod , index ) => this . getTableRow ( index )) } < /Component.Table> < /div> ) } } PodsDetailsList produces a simple table showing a list of the pods found in this namespace: For each pod the name, age, and status are obtained using the K8sApi.Pod methods. The table is constructed using the Component.Table and related elements. See Component documentation for further details.","title":"kubeObjectDetailItems"},{"location":"extensions/guides/stores/","text":"WIP # Stores # ClusterStore # WorkspaceStore # ExtensionStore #","title":"Stores"},{"location":"extensions/guides/stores/#wip","text":"","title":"WIP"},{"location":"extensions/guides/stores/#stores","text":"","title":"Stores"},{"location":"extensions/guides/stores/#clusterstore","text":"","title":"ClusterStore"},{"location":"extensions/guides/stores/#workspacestore","text":"","title":"WorkspaceStore"},{"location":"extensions/guides/stores/#extensionstore","text":"","title":"ExtensionStore"},{"location":"extensions/guides/working-with-mobx/","text":"Working with mobx # Introduction # Lens uses mobx as its state manager on top of React's state management system. This helps with having a more declarative style of managing state, as opposed to React 's native setState mechanism. You should already have a basic understanding of how React handles state ( read here for more information). However, if you do not, here is a quick overview. A React.Component is generic over both Props and State (with default empty object types). Props should be considered read-only from the point of view of the component and is the mechanism for passing in \"arguments\" to a component. State is a component's internal state and can be read by accessing the parent field state . State must be updated using the setState parent method which merges the new data with the old state. React does do some optimizations around re-rendering components after quick successions of setState calls. How mobx works: # mobx is a package that provides an abstraction over React 's state management. The three main concepts are: - observable : data stored in the component's state - action : a function that modifies any observable data - computed : data that is derived from observable data but is not actually stored. Think of this as computing isEmpty vs an observable field called count . Further reading is available from mobx 's website .","title":"Working with mobx"},{"location":"extensions/guides/working-with-mobx/#working-with-mobx","text":"","title":"Working with mobx"},{"location":"extensions/guides/working-with-mobx/#introduction","text":"Lens uses mobx as its state manager on top of React's state management system. This helps with having a more declarative style of managing state, as opposed to React 's native setState mechanism. You should already have a basic understanding of how React handles state ( read here for more information). However, if you do not, here is a quick overview. A React.Component is generic over both Props and State (with default empty object types). Props should be considered read-only from the point of view of the component and is the mechanism for passing in \"arguments\" to a component. State is a component's internal state and can be read by accessing the parent field state . State must be updated using the setState parent method which merges the new data with the old state. React does do some optimizations around re-rendering components after quick successions of setState calls.","title":"Introduction"},{"location":"extensions/guides/working-with-mobx/#how-mobx-works","text":"mobx is a package that provides an abstraction over React 's state management. The three main concepts are: - observable : data stored in the component's state - action : a function that modifies any observable data - computed : data that is derived from observable data but is not actually stored. Think of this as computing isEmpty vs an observable field called count . Further reading is available from mobx 's website .","title":"How mobx works:"},{"location":"extensions/testing-and-publishing/bundling/","text":"","title":"Bundling"},{"location":"extensions/testing-and-publishing/publishing/","text":"","title":"Publishing Extensions"},{"location":"extensions/testing-and-publishing/testing/","text":"Testing Extensions # Renderer Process Unit Testing # UI components in extension renderer process are based on React/ReactDOM. These components can be tested by popular React testing tools like React Testing Library . If you are using the Yeoman Lens Extension Generator to scaffold extension project. The testing environment for render process are already setup for you. Just use npm start or yarn test to run the tests. For example, I have a component GlobalPageMenuIcon and want to test if props.navigate is called when user clicks the icon. My component GlobalPageMenuIcon import React from \"react\" import { Component: { Icon } } from \"@k8slens/extensions\"; const GlobalPageMenuIcon = ({ navigate }: { navigate?: () => void }): JSX.Element => ( navigate()} data-testid=\"global-page-menu-icon\" /> ) The test import React from \"react\" import { render , screen , fireEvent } from \"@testing-library/react\" ; import GlobalPageMenuIcon from \"./GlobalPageMenuIcon\" ; test ( \"click called navigate()\" , () => { const navigate = jest . fn (); render ( < GlobalPageMenuIcon navigate = { navigate } /> ); fireEvent . click ( screen . getByTestId ( \"global-page-menu-icon\" )); expect ( navigate ). toHaveBeenCalled (); }); In the example we used React Testing Library but any React testing framework can be used to test renderer process UI components. There are more example tests in the generator's template . Extend your tests based on the examples. Main Process Unit Testing # Code in the extension main process are just normal JavaScript files that has access to extension api, you can write unit tests using any testing framework. If you are using the Yeoman Lens Extension Generator to scaffold your extension project. The testing environment Jest are setup for you. Just use npm start or yarn test to run the tests. Tips # Console.log # Extension developers might find console.log() useful for printing out information and errors from extensions. To use console.log() , note that Lens is based on Electron, and that Electron has two types of processes: Main and Renderer . Renderer Process Logs # In the Renderer process, console.log() is printed in the Console in Developer Tools ( View > Toggle Developer Tools ). Main Process Logs # Viewing the logs from the Main process is a little trickier, since they cannot be printed using Developer Tools. macOS On macOS, view the Main process logs by running Lens from the terminal: /Applications/Lens.app/Contents/MacOS/Lens You can also use Console.app to view the Main process logs. Linux On Linux, you can access the Main process logs using the Lens PID. First get the PID: ps aux | grep Lens | grep -v grep Then get the Main process logs using the PID: tail -f /proc/ [ pid ] /fd/1 # stdout (console.log) tail -f /proc/ [ pid ] /fd/2 # stdout (console.error)","title":"Testing Extensions"},{"location":"extensions/testing-and-publishing/testing/#testing-extensions","text":"","title":"Testing Extensions"},{"location":"extensions/testing-and-publishing/testing/#renderer-process-unit-testing","text":"UI components in extension renderer process are based on React/ReactDOM. These components can be tested by popular React testing tools like React Testing Library . If you are using the Yeoman Lens Extension Generator to scaffold extension project. The testing environment for render process are already setup for you. Just use npm start or yarn test to run the tests. For example, I have a component GlobalPageMenuIcon and want to test if props.navigate is called when user clicks the icon. My component GlobalPageMenuIcon import React from \"react\" import { Component: { Icon } } from \"@k8slens/extensions\"; const GlobalPageMenuIcon = ({ navigate }: { navigate?: () => void }): JSX.Element => ( navigate()} data-testid=\"global-page-menu-icon\" /> ) The test import React from \"react\" import { render , screen , fireEvent } from \"@testing-library/react\" ; import GlobalPageMenuIcon from \"./GlobalPageMenuIcon\" ; test ( \"click called navigate()\" , () => { const navigate = jest . fn (); render ( < GlobalPageMenuIcon navigate = { navigate } /> ); fireEvent . click ( screen . getByTestId ( \"global-page-menu-icon\" )); expect ( navigate ). toHaveBeenCalled (); }); In the example we used React Testing Library but any React testing framework can be used to test renderer process UI components. There are more example tests in the generator's template . Extend your tests based on the examples.","title":"Renderer Process Unit Testing"},{"location":"extensions/testing-and-publishing/testing/#main-process-unit-testing","text":"Code in the extension main process are just normal JavaScript files that has access to extension api, you can write unit tests using any testing framework. If you are using the Yeoman Lens Extension Generator to scaffold your extension project. The testing environment Jest are setup for you. Just use npm start or yarn test to run the tests.","title":"Main Process Unit Testing"},{"location":"extensions/testing-and-publishing/testing/#tips","text":"","title":"Tips"},{"location":"extensions/testing-and-publishing/testing/#consolelog","text":"Extension developers might find console.log() useful for printing out information and errors from extensions. To use console.log() , note that Lens is based on Electron, and that Electron has two types of processes: Main and Renderer .","title":"Console.log"},{"location":"extensions/testing-and-publishing/testing/#renderer-process-logs","text":"In the Renderer process, console.log() is printed in the Console in Developer Tools ( View > Toggle Developer Tools ).","title":"Renderer Process Logs"},{"location":"extensions/testing-and-publishing/testing/#main-process-logs","text":"Viewing the logs from the Main process is a little trickier, since they cannot be printed using Developer Tools.","title":"Main Process Logs"},{"location":"extensions/usage/","text":"Using Extensions # The features that Lens includes out-of-the-box are just the start. Lens extensions let you add new features to your installation to support your workflow. Rich extensibility model lets extension authors plug directly into the Lens UI and contribute functionality through the same APIs used by Lens itself. The start using Lens Extensions go to File (or Lens on macOS) > Extensions in the application menu. This is the Extensions management page where all the management of the extensions you want to use is done. Installing an Extension # There are three ways to install extensions. If you have the extension as a .tgz file then dragging and dropping it in the extension management page will install it for you. If it is hosted on the web, you can paste the URL and click Install and Lens will download and install it. The third way is to move the extension into your ~/.k8slens/extensions (or C:\\Users\\\\.k8slens\\extensions ) folder and Lens will automatically detect it and install the extension. Enabling or Disabling an Extension # Go to the extension management page and click either the Enable or Disable buttons. Extensions will be enabled by default when you first install them. A disabled extension is not loaded by Lens and is not run. Uninstalling an Extension # If, for whatever reason, you wish to remove the installation of an extension simple click the Uninstall button. This will remove all the files that Lens would need to run the extension.","title":"Using Extensions"},{"location":"extensions/usage/#using-extensions","text":"The features that Lens includes out-of-the-box are just the start. Lens extensions let you add new features to your installation to support your workflow. Rich extensibility model lets extension authors plug directly into the Lens UI and contribute functionality through the same APIs used by Lens itself. The start using Lens Extensions go to File (or Lens on macOS) > Extensions in the application menu. This is the Extensions management page where all the management of the extensions you want to use is done.","title":"Using Extensions"},{"location":"extensions/usage/#installing-an-extension","text":"There are three ways to install extensions. If you have the extension as a .tgz file then dragging and dropping it in the extension management page will install it for you. If it is hosted on the web, you can paste the URL and click Install and Lens will download and install it. The third way is to move the extension into your ~/.k8slens/extensions (or C:\\Users\\\\.k8slens\\extensions ) folder and Lens will automatically detect it and install the extension.","title":"Installing an Extension"},{"location":"extensions/usage/#enabling-or-disabling-an-extension","text":"Go to the extension management page and click either the Enable or Disable buttons. Extensions will be enabled by default when you first install them. A disabled extension is not loaded by Lens and is not run.","title":"Enabling or Disabling an Extension"},{"location":"extensions/usage/#uninstalling-an-extension","text":"If, for whatever reason, you wish to remove the installation of an extension simple click the Uninstall button. This will remove all the files that Lens would need to run the extension.","title":"Uninstalling an Extension"},{"location":"faq/","text":"FAQ # What operating systems does Lens support? # Lens supports MacOS, Windows and Linux operating systems. For Linux there are Snap and AppImage versions. For MacOS there are DMG and Homebrew options. Lens application is not opening, what might be wrong? # When Lens is started, it will start HTTP proxy server on the background and requires that operating system allows to start listening to some free port. You can see the port allocated for Lens from application logs. Lens expects also that localhost DNS points to 127.0.0.1 address. Why can't I add any clusters? # When adding new clusters, a valid Kubeconfig file is required. Please check that all contexts present in Kubeconfig file are valid. Why Cluster dashboard is not opening? # To see Cluster dashboard properly, Kubernetes cluster must be reachable either directly from your computer or via HTTP proxy. You can configure HTTP proxy in Cluster Settigns. Also, provided credentials in Kubeconfig must be valid. If Kubeconfig uses exec command, the binary must be available in global PATH or absolute path must be used. Lens application can't see PATH modifications made by any shell init scripts. There might be also some issues on the Snap version if the exec binary is installed also from Snap and requires additional symlinking, please see #699 . Why I don't see anything on Cluster dashboard? # Users will see on Cluster dashboard only those resources that they are allowed to see (RBAC). Lens requires that user has access at least to one namespace. Lens tries first fetch namespaces from Kubernetes API. If user is not allowed to list namespaces, allowed namespaces can be configured in Cluster settings or in Kubeconfig. Why I don't see any metrics or some of the metrics are not working? # In order to display cluster metrics, Lens requires that Prometheus is running in the cluster. You can install Prometheus in Cluster settings if needed. Lens tries to detect Prometheus installation automatically. If it fails to detect the installation properly, you can configure Prometheus service address in Cluster settings. If some of the metrics are not displayed correctly, you can see queries that Lens is using here and adapt your prometheus configuration to support those queries. Please refer Prometheus documentation or your Prometheus installer documentation how to do this. Kubectl is not working in Lens terminal, what should I do? # Lens tries to download correct Kubectl version for the cluster and use that in Lens terminal. Some operating systems (namely Windows) might have restrictions set that prevent downloading and executing binaries from the default location that Lens is using. You can change the directory where Lens downloads the binaries in App Preferences. It's also possible to change the Download mirror to use Azure if default Google is not reachable from your network. If downloading Kubectl is not option for you, you can define path to pre-installed Kubectl on your machine and Lens will use that binary instead. How can I configure Helm repositories? # Lens comes with bundled Helm 3 binary and Lens will add by default bitnami repository if no other repositories are configured. You can add more repositories from Artifact HUB in App preferences. At this moment it is not possible to add private repositories. Those and other public repositories can be added manually via command line. Where can I find application logs? # Lens will store application logs to following locations depending on your operating system: - MacOS: ~/Library/Logs/Lens/ - Windows: %USERPROFILE%\\AppData\\Roaming\\Lens\\logs\\ - Linux: ~/.config/Lens/logs/ How can I see more verbose logs? # You can start Lens application on debug mode from the command line to see more verbose logs. To start application on debug mode, please provide DEBUG=true environment variable and before starting the application, for example: DEBUG=TRUE /Applications/Lens.app/Contents/MacOS/Lens","title":"FAQ"},{"location":"faq/#faq","text":"","title":"FAQ"},{"location":"faq/#what-operating-systems-does-lens-support","text":"Lens supports MacOS, Windows and Linux operating systems. For Linux there are Snap and AppImage versions. For MacOS there are DMG and Homebrew options.","title":"What operating systems does Lens support?"},{"location":"faq/#lens-application-is-not-opening-what-might-be-wrong","text":"When Lens is started, it will start HTTP proxy server on the background and requires that operating system allows to start listening to some free port. You can see the port allocated for Lens from application logs. Lens expects also that localhost DNS points to 127.0.0.1 address.","title":"Lens application is not opening, what might be wrong?"},{"location":"faq/#why-cant-i-add-any-clusters","text":"When adding new clusters, a valid Kubeconfig file is required. Please check that all contexts present in Kubeconfig file are valid.","title":"Why can't I add any clusters?"},{"location":"faq/#why-cluster-dashboard-is-not-opening","text":"To see Cluster dashboard properly, Kubernetes cluster must be reachable either directly from your computer or via HTTP proxy. You can configure HTTP proxy in Cluster Settigns. Also, provided credentials in Kubeconfig must be valid. If Kubeconfig uses exec command, the binary must be available in global PATH or absolute path must be used. Lens application can't see PATH modifications made by any shell init scripts. There might be also some issues on the Snap version if the exec binary is installed also from Snap and requires additional symlinking, please see #699 .","title":"Why Cluster dashboard is not opening?"},{"location":"faq/#why-i-dont-see-anything-on-cluster-dashboard","text":"Users will see on Cluster dashboard only those resources that they are allowed to see (RBAC). Lens requires that user has access at least to one namespace. Lens tries first fetch namespaces from Kubernetes API. If user is not allowed to list namespaces, allowed namespaces can be configured in Cluster settings or in Kubeconfig.","title":"Why I don't see anything on Cluster dashboard?"},{"location":"faq/#why-i-dont-see-any-metrics-or-some-of-the-metrics-are-not-working","text":"In order to display cluster metrics, Lens requires that Prometheus is running in the cluster. You can install Prometheus in Cluster settings if needed. Lens tries to detect Prometheus installation automatically. If it fails to detect the installation properly, you can configure Prometheus service address in Cluster settings. If some of the metrics are not displayed correctly, you can see queries that Lens is using here and adapt your prometheus configuration to support those queries. Please refer Prometheus documentation or your Prometheus installer documentation how to do this.","title":"Why I don't see any metrics or some of the metrics are not working?"},{"location":"faq/#kubectl-is-not-working-in-lens-terminal-what-should-i-do","text":"Lens tries to download correct Kubectl version for the cluster and use that in Lens terminal. Some operating systems (namely Windows) might have restrictions set that prevent downloading and executing binaries from the default location that Lens is using. You can change the directory where Lens downloads the binaries in App Preferences. It's also possible to change the Download mirror to use Azure if default Google is not reachable from your network. If downloading Kubectl is not option for you, you can define path to pre-installed Kubectl on your machine and Lens will use that binary instead.","title":"Kubectl is not working in Lens terminal, what should I do?"},{"location":"faq/#how-can-i-configure-helm-repositories","text":"Lens comes with bundled Helm 3 binary and Lens will add by default bitnami repository if no other repositories are configured. You can add more repositories from Artifact HUB in App preferences. At this moment it is not possible to add private repositories. Those and other public repositories can be added manually via command line.","title":"How can I configure Helm repositories?"},{"location":"faq/#where-can-i-find-application-logs","text":"Lens will store application logs to following locations depending on your operating system: - MacOS: ~/Library/Logs/Lens/ - Windows: %USERPROFILE%\\AppData\\Roaming\\Lens\\logs\\ - Linux: ~/.config/Lens/logs/","title":"Where can I find application logs?"},{"location":"faq/#how-can-i-see-more-verbose-logs","text":"You can start Lens application on debug mode from the command line to see more verbose logs. To start application on debug mode, please provide DEBUG=true environment variable and before starting the application, for example: DEBUG=TRUE /Applications/Lens.app/Contents/MacOS/Lens","title":"How can I see more verbose logs?"},{"location":"getting-started/","text":"Getting Started # Lens is lightweight and simple to install. You'll be up and running in just a few minutes. System Requirements # Review the System Requirements to check if your computer configuration is supported. macOS # Download Lens for macOS. Open the browser's download list and locate the downloaded archive. Select the 'magnifying glass' icon to open the archive in Finder. Double-click Lens-{version}.dmg and drag Lens.app to the Applications folder, making it available in the macOS Launchpad. Add Lens to your Dock by right-clicking on the icon to bring up the context menu and choosing Options , Keep in Dock . Windows # Download the Lens installer for Windows. Once it is downloaded, run the installer Lens-Setup-{version}.exe . This will only take a minute. By default, Lens is installed under C:\\users\\{username}\\AppData\\Local\\Programs\\Lens . Linux # See the Download Lens page for a complete list of available installation options. Snap # Lens is officially distributed as a Snap package in the Snap Store : You can install it by running: sudo snap install kontena-lens --classic Update Cadence # Lens releases a new version each month with new features and important bug fixes. Lens supports auto updating and you will be prompted to install the new release when it becomes available! To stay current with the Lens features, you can review the release notes . Next Steps # Add clusters Watch introductory videos","title":"Getting Started"},{"location":"getting-started/#getting-started","text":"Lens is lightweight and simple to install. You'll be up and running in just a few minutes.","title":"Getting Started"},{"location":"getting-started/#system-requirements","text":"Review the System Requirements to check if your computer configuration is supported.","title":"System Requirements"},{"location":"getting-started/#macos","text":"Download Lens for macOS. Open the browser's download list and locate the downloaded archive. Select the 'magnifying glass' icon to open the archive in Finder. Double-click Lens-{version}.dmg and drag Lens.app to the Applications folder, making it available in the macOS Launchpad. Add Lens to your Dock by right-clicking on the icon to bring up the context menu and choosing Options , Keep in Dock .","title":"macOS"},{"location":"getting-started/#windows","text":"Download the Lens installer for Windows. Once it is downloaded, run the installer Lens-Setup-{version}.exe . This will only take a minute. By default, Lens is installed under C:\\users\\{username}\\AppData\\Local\\Programs\\Lens .","title":"Windows"},{"location":"getting-started/#linux","text":"See the Download Lens page for a complete list of available installation options.","title":"Linux"},{"location":"getting-started/#snap","text":"Lens is officially distributed as a Snap package in the Snap Store : You can install it by running: sudo snap install kontena-lens --classic","title":"Snap"},{"location":"getting-started/#update-cadence","text":"Lens releases a new version each month with new features and important bug fixes. Lens supports auto updating and you will be prompted to install the new release when it becomes available! To stay current with the Lens features, you can review the release notes .","title":"Update Cadence"},{"location":"getting-started/#next-steps","text":"Add clusters Watch introductory videos","title":"Next Steps"},{"location":"getting-started/introductory-videos/","text":"Introductory Videos # Continue your Lens journey with this set of introductory videos! These videos are meant to quickly familiarize you with Lens' various powerful features. Getting started Get Lens Kubernetes IDE Running in 5 Minutes Duration 35 minutes Introducing Lens Lens Kubernetes IDE overview Duration 2 minutes Demo of Mirantis Lens The Best IDE For Kubernetes Duration 10 minutes","title":"Introductory Videos"},{"location":"getting-started/introductory-videos/#introductory-videos","text":"Continue your Lens journey with this set of introductory videos! These videos are meant to quickly familiarize you with Lens' various powerful features.","title":"Introductory Videos"},{"location":"getting-started/preferences/","text":"Preferences # Color Themes # The Color Themes option in Lens preferences lets you set the colors in the Lens user interface to suit your liking. Go to File > Preferences ( Lens > Preferences on Mac). Select your preferred theme from the Color Theme dropdown. Telemetry & Usage Tracking # Lens collects telemetry data, which is used to help us understand how to improve the product. For example, this usage data helps us to debug issues and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data. Please see our privacy statement to learn more. Disable Telemetry Reporting # If you don't wish to send usage data to Mirantis, you can disable the \"Telemetry & Usage Tracking\" in the Lens preferences. Go to File > Preferences ( Lens > Preferences on Mac). Scroll down to Telemetry & Usage Tracking Uncheck Allow Telemetry & Usage Tracking . This will silence all telemetry events from Lens going forward. Telemetry information may have been collected and sent up until the point when you disable this setting.","title":"Preferences"},{"location":"getting-started/preferences/#preferences","text":"","title":"Preferences"},{"location":"getting-started/preferences/#color-themes","text":"The Color Themes option in Lens preferences lets you set the colors in the Lens user interface to suit your liking. Go to File > Preferences ( Lens > Preferences on Mac). Select your preferred theme from the Color Theme dropdown.","title":"Color Themes"},{"location":"getting-started/preferences/#telemetry-usage-tracking","text":"Lens collects telemetry data, which is used to help us understand how to improve the product. For example, this usage data helps us to debug issues and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data. Please see our privacy statement to learn more.","title":"Telemetry & Usage Tracking"},{"location":"getting-started/preferences/#disable-telemetry-reporting","text":"If you don't wish to send usage data to Mirantis, you can disable the \"Telemetry & Usage Tracking\" in the Lens preferences. Go to File > Preferences ( Lens > Preferences on Mac). Scroll down to Telemetry & Usage Tracking Uncheck Allow Telemetry & Usage Tracking . This will silence all telemetry events from Lens going forward. Telemetry information may have been collected and sent up until the point when you disable this setting.","title":"Disable Telemetry Reporting"},{"location":"helm/","text":"Using Helm Charts # Lens has integration to Helm making it easy to install and manage Helm charts and releases in Apps section. Managing Helm Reporistories # Used Helm repositories are possible to configure in the Preferences . Lens app will fetch available Helm repositories from the Artifact HUB and automatically add bitnami repository by default if no other repositories are already configured. If any other repositories are needed to add, those can be added manually via command line. Note! Configured Helm repositories are added globally to user's computer, so other processes can see those as well. Installing a Helm Chart # Lens will list all charts from configured Helm repositries on Apps section. To install a chart, you need to select a chart and click \"Install\" button. Lens will open the chart in the editor where you can select a chart version, target namespace and give optionally a name for the release and configure values for the release. Finally, by clicking \"Install\" button Lens will deploy the chart into the cluster. Updating a Helm Release # To update a Helm release, you can open the release details and modify the release values and click \"Save\" button. To upgrade or downgrade the release, click \"Upgrade\" button in the release details. In the release editor you can select a new chart version and edit the release values if needed and then click \"Upgrade\" or \"Upgrade and Close\" button. Deleting a Helm Release # To delete existing Helm release open the release details and click trash can icon on the top of the panel. Deletion removes all Kubernetes resources created by the Helm release. Note! If the release included any persistent volumes, those are required to remove manually!","title":"Using Helm Charts"},{"location":"helm/#using-helm-charts","text":"Lens has integration to Helm making it easy to install and manage Helm charts and releases in Apps section.","title":"Using Helm Charts"},{"location":"helm/#managing-helm-reporistories","text":"Used Helm repositories are possible to configure in the Preferences . Lens app will fetch available Helm repositories from the Artifact HUB and automatically add bitnami repository by default if no other repositories are already configured. If any other repositories are needed to add, those can be added manually via command line. Note! Configured Helm repositories are added globally to user's computer, so other processes can see those as well.","title":"Managing Helm Reporistories"},{"location":"helm/#installing-a-helm-chart","text":"Lens will list all charts from configured Helm repositries on Apps section. To install a chart, you need to select a chart and click \"Install\" button. Lens will open the chart in the editor where you can select a chart version, target namespace and give optionally a name for the release and configure values for the release. Finally, by clicking \"Install\" button Lens will deploy the chart into the cluster.","title":"Installing a Helm Chart"},{"location":"helm/#updating-a-helm-release","text":"To update a Helm release, you can open the release details and modify the release values and click \"Save\" button. To upgrade or downgrade the release, click \"Upgrade\" button in the release details. In the release editor you can select a new chart version and edit the release values if needed and then click \"Upgrade\" or \"Upgrade and Close\" button.","title":"Updating a Helm Release"},{"location":"helm/#deleting-a-helm-release","text":"To delete existing Helm release open the release details and click trash can icon on the top of the panel. Deletion removes all Kubernetes resources created by the Helm release. Note! If the release included any persistent volumes, those are required to remove manually!","title":"Deleting a Helm Release"},{"location":"support/","text":"Support # Here you will find different ways of getting support for Lens IDE. Community Support # Community Slack - Request for support and help from the Lens community via Slack. Github Issues - Submit your issues and feature requests to Lens IDE via Github. Commercial Support & Services # If you are interested in paid support options, professional services or training, please see the offerings from the following vendors: Mirantis offers commercial support for officially released versions of Lens IDE on MacOS, Windows and Linux operating systems. In addition, Mirantis offers professional services to create proprietary / custom Lens IDE extensions and custom msi packaging to meet enterprise IT policies for software distribution and configuration. Training is also available. If you'd like to get your business listed in here, please contact us via email info@k8slens.dev","title":"Support"},{"location":"support/#support","text":"Here you will find different ways of getting support for Lens IDE.","title":"Support"},{"location":"support/#community-support","text":"Community Slack - Request for support and help from the Lens community via Slack. Github Issues - Submit your issues and feature requests to Lens IDE via Github.","title":"Community Support"},{"location":"support/#commercial-support-services","text":"If you are interested in paid support options, professional services or training, please see the offerings from the following vendors: Mirantis offers commercial support for officially released versions of Lens IDE on MacOS, Windows and Linux operating systems. In addition, Mirantis offers professional services to create proprietary / custom Lens IDE extensions and custom msi packaging to meet enterprise IT policies for software distribution and configuration. Training is also available. If you'd like to get your business listed in here, please contact us via email info@k8slens.dev","title":"Commercial Support & Services"},{"location":"supporting/requirements/","text":"Requirements for Lens # Hardware # Lens is a small download (< 300 MB) and has a disk footprint of 600 MB. Lens is lightweight and should easily run on today's hardware. We recommend: 2 GHz or faster processor 1 GB of RAM Platforms # Lens has been tested on the following platforms: macOS Windows Linux Additional Windows requirements # ... Additional Linux Requirements # ...","title":"Requirements for Lens"},{"location":"supporting/requirements/#requirements-for-lens","text":"","title":"Requirements for Lens"},{"location":"supporting/requirements/#hardware","text":"Lens is a small download (< 300 MB) and has a disk footprint of 600 MB. Lens is lightweight and should easily run on today's hardware. We recommend: 2 GHz or faster processor 1 GB of RAM","title":"Hardware"},{"location":"supporting/requirements/#platforms","text":"Lens has been tested on the following platforms: macOS Windows Linux","title":"Platforms"},{"location":"supporting/requirements/#additional-windows-requirements","text":"...","title":"Additional Windows requirements"},{"location":"supporting/requirements/#additional-linux-requirements","text":"...","title":"Additional Linux Requirements"}]} \ No newline at end of file diff --git a/master/sitemap.xml.gz b/master/sitemap.xml.gz index 99d0e826ed84748d2a6bbbe84075e3c6b995bfd0..891ee9b34df29b6407d8d72762fc619f2b5f63e9 100644 GIT binary patch delta 16 XcmaFB{D7HVzMF$%2j{ts>^B(!FcSr- delta 16 YcmaFB{D7HVzMF&N*r&4_*>5re05#?Yp8x;=