@alauda-fe/network 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +10 -2
- package/esm2022/lib/components/certificate-status/component.mjs +7 -6
- package/esm2022/lib/components/fixed-ip/component.mjs +134 -91
- package/esm2022/lib/components/loadbalancer-spec-form/component.mjs +57 -57
- package/esm2022/lib/components/service-annotations-form/annotations.component.mjs +136 -142
- package/esm2022/lib/components/service-annotations-form-item/annotations.component.mjs +24 -25
- package/esm2022/lib/components/service-form/component.mjs +34 -33
- package/esm2022/lib/components/service-form/fieldset/component.mjs +92 -95
- package/esm2022/lib/directives/subnet-validator.directive.mjs +5 -5
- package/esm2022/lib/features/network-policy/components/add-peer-rule-handler/component.mjs +69 -0
- package/esm2022/lib/features/network-policy/components/ip-block-display/component.mjs +54 -0
- package/esm2022/lib/features/network-policy/components/label-selector-display/component.mjs +117 -0
- package/esm2022/lib/features/network-policy/components/peer-container/component.mjs +81 -0
- package/esm2022/lib/features/network-policy/components/pod-review/component.mjs +250 -0
- package/esm2022/lib/features/network-policy/components/rule-table/component.mjs +269 -0
- package/esm2022/lib/features/network-policy/form/network-policy/component.mjs +429 -0
- package/esm2022/lib/features/network-policy/form/network-policy-ip-block/component.mjs +102 -0
- package/esm2022/lib/features/network-policy/form/network-policy-peer/component.mjs +247 -0
- package/esm2022/lib/features/network-policy/form/network-policy-ports/component.mjs +161 -0
- package/esm2022/lib/features/network-policy/form/network-policy-remote-except-input/component.mjs +128 -0
- package/esm2022/lib/features/network-policy/form/network-policy-rule/component.mjs +142 -0
- package/esm2022/lib/services/alb-api.service.mjs +26 -6
- package/esm2022/lib/services/certificate-api.service.mjs +4 -4
- package/esm2022/lib/services/network-util.service.mjs +18 -4
- package/esm2022/lib/services/subnet-util.service.mjs +121 -0
- package/esm2022/lib/types/alb-exports.mjs +1 -1
- package/esm2022/lib/types/k8s-exports.mjs +2 -1
- package/esm2022/lib/types/metallb-exports.mjs +2 -0
- package/esm2022/lib/types/resource-definition.mjs +28 -2
- package/esm2022/lib/utils/alb-exports.mjs +1 -1
- package/esm2022/lib/utils/cidr-exports.mjs +3 -3
- package/esm2022/lib/utils/common-exports.mjs +22 -0
- package/esm2022/lib/utils/service-exports.mjs +1 -1
- package/esm2022/lib/utils/validators-exports.mjs +44 -0
- package/index.d.ts +9 -1
- package/lib/components/fixed-ip/component.d.ts +10 -3
- package/lib/components/service-annotations-form/annotations.component.d.ts +6 -6
- package/lib/components/service-annotations-form-item/annotations.component.d.ts +1 -1
- package/lib/components/service-form/component.d.ts +1 -1
- package/lib/features/network-policy/components/add-peer-rule-handler/component.d.ts +8 -0
- package/lib/features/network-policy/components/ip-block-display/component.d.ts +7 -0
- package/lib/features/network-policy/components/label-selector-display/component.d.ts +13 -0
- package/lib/features/network-policy/components/peer-container/component.d.ts +18 -0
- package/lib/features/network-policy/components/pod-review/component.d.ts +37 -0
- package/lib/features/network-policy/components/rule-table/component.d.ts +21 -0
- package/lib/features/network-policy/form/network-policy/component.d.ts +70 -0
- package/lib/features/network-policy/form/network-policy-ip-block/component.d.ts +23 -0
- package/lib/features/network-policy/form/network-policy-peer/component.d.ts +43 -0
- package/lib/features/network-policy/form/network-policy-ports/component.d.ts +17 -0
- package/lib/features/network-policy/form/network-policy-remote-except-input/component.d.ts +23 -0
- package/lib/features/network-policy/form/network-policy-rule/component.d.ts +28 -0
- package/lib/services/alb-api.service.d.ts +4 -2
- package/lib/services/network-util.service.d.ts +1 -0
- package/lib/services/subnet-util.service.d.ts +25 -0
- package/lib/types/alb-exports.d.ts +23 -0
- package/lib/types/k8s-exports.d.ts +51 -1
- package/lib/types/metallb-exports.d.ts +65 -0
- package/lib/types/resource-definition.d.ts +143 -0
- package/lib/utils/common-exports.d.ts +5 -0
- package/lib/utils/validators-exports.d.ts +16 -0
- package/package.json +9 -4
- package/styles.css +1 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { KubernetesResource, LabelSelector } from '@alauda-fe/common';
|
|
2
|
+
export interface BGPPeerSpec {
|
|
3
|
+
myASN: number;
|
|
4
|
+
peerASN: number;
|
|
5
|
+
peerAddress: string;
|
|
6
|
+
bfdProfile?: string;
|
|
7
|
+
ebgpMultiHop?: boolean;
|
|
8
|
+
holdTime?: string;
|
|
9
|
+
keepaliveTime?: string;
|
|
10
|
+
nodeSelectors?: LabelSelector[];
|
|
11
|
+
password?: string;
|
|
12
|
+
peerPort?: number;
|
|
13
|
+
routerID?: string;
|
|
14
|
+
sourceAddress?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface BGPPeer extends KubernetesResource {
|
|
17
|
+
kind: 'BGPPeer';
|
|
18
|
+
spec: BGPPeerSpec;
|
|
19
|
+
}
|
|
20
|
+
export interface BGPAdvertisement extends KubernetesResource {
|
|
21
|
+
kind: 'BGPAdvertisement';
|
|
22
|
+
spec: {
|
|
23
|
+
aggregationLength?: number;
|
|
24
|
+
aggregationLengthV6?: number;
|
|
25
|
+
communities?: string[];
|
|
26
|
+
ipAddressPoolSelectors?: LabelSelector;
|
|
27
|
+
ipAddressPools?: string[];
|
|
28
|
+
localPref?: number;
|
|
29
|
+
nodeSelectors?: LabelSelector[];
|
|
30
|
+
peers: string[];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface IPAddressPool extends KubernetesResource {
|
|
34
|
+
kind: 'IPAddressPool';
|
|
35
|
+
spec: {
|
|
36
|
+
addresses: string[];
|
|
37
|
+
autoAssign?: boolean;
|
|
38
|
+
avoidBuggyIPs?: boolean;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface L2Advertisement extends KubernetesResource {
|
|
42
|
+
kind: 'L2Advertisement';
|
|
43
|
+
spec: {
|
|
44
|
+
ipAddressPools: [string];
|
|
45
|
+
nodeSelectors: LabelSelector[];
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface IpPoolUsedIp {
|
|
49
|
+
ip: string;
|
|
50
|
+
nodeIp: string;
|
|
51
|
+
services: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface IpPoolUsage extends KubernetesResource {
|
|
54
|
+
apiVersion: 'metallb.io/v1beta1';
|
|
55
|
+
kind: 'IPAddressPoolUsage';
|
|
56
|
+
status: {
|
|
57
|
+
used: number;
|
|
58
|
+
available: number;
|
|
59
|
+
usedIps: IpPoolUsedIp[];
|
|
60
|
+
ipv4available: number;
|
|
61
|
+
ipv4used: number;
|
|
62
|
+
ipv6used: number;
|
|
63
|
+
ipv6available: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
@@ -8,6 +8,120 @@ export declare const NetworkResourceDefinitions: {
|
|
|
8
8
|
readonly type: "ips";
|
|
9
9
|
readonly apiGroup: "kubeovn.io";
|
|
10
10
|
};
|
|
11
|
+
readonly L2_ADVERTISEMENT: {
|
|
12
|
+
readonly apiGroup: "metallb.io";
|
|
13
|
+
readonly apiVersion: "v1beta1";
|
|
14
|
+
readonly type: "l2advertisements";
|
|
15
|
+
};
|
|
16
|
+
readonly IP_POOL: {
|
|
17
|
+
readonly apiGroup: "metallb.io";
|
|
18
|
+
readonly apiVersion: "v1beta1";
|
|
19
|
+
readonly type: "ipaddresspools";
|
|
20
|
+
};
|
|
21
|
+
readonly BGP_PEER: {
|
|
22
|
+
readonly apiGroup: "metallb.io";
|
|
23
|
+
readonly apiVersion: "v1beta2";
|
|
24
|
+
readonly type: "bgppeers";
|
|
25
|
+
};
|
|
26
|
+
readonly BGP_ADVERTISEMENT: {
|
|
27
|
+
readonly apiGroup: "metallb.io";
|
|
28
|
+
readonly apiVersion: "v1beta1";
|
|
29
|
+
readonly type: "bgpadvertisements";
|
|
30
|
+
};
|
|
31
|
+
readonly INTER_CONNECTION_SUBNET: {
|
|
32
|
+
readonly type: "interconnectionsubnets";
|
|
33
|
+
readonly apiGroup: "kubeovn.io";
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare const INNER_NETWORK_RESOURCE_TYPES: {
|
|
37
|
+
readonly SUBNET_KUBE_OVN: "SUBNET_KUBE_OVN";
|
|
38
|
+
readonly SUBNET_KUBE_OVN_IP: "SUBNET_KUBE_OVN_IP";
|
|
39
|
+
readonly L2_ADVERTISEMENT: "L2_ADVERTISEMENT";
|
|
40
|
+
readonly IP_POOL: "IP_POOL";
|
|
41
|
+
readonly BGP_PEER: "BGP_PEER";
|
|
42
|
+
readonly BGP_ADVERTISEMENT: "BGP_ADVERTISEMENT";
|
|
43
|
+
readonly INTER_CONNECTION_SUBNET: "INTER_CONNECTION_SUBNET";
|
|
44
|
+
readonly ALAUDA_LOADBALANCER2: "ALAUDA_LOADBALANCER2";
|
|
45
|
+
readonly ALB2: "ALB2";
|
|
46
|
+
readonly HELM_REQUEST: "HELM_REQUEST";
|
|
47
|
+
readonly HELM_REQUEST_V1: "HELM_REQUEST_V1";
|
|
48
|
+
readonly DEPLOYMENT: "DEPLOYMENT";
|
|
49
|
+
readonly DAEMONSET: "DAEMONSET";
|
|
50
|
+
readonly STATEFULSET: "STATEFULSET";
|
|
51
|
+
readonly FRONTEND: "FRONTEND";
|
|
52
|
+
readonly RULE: "RULE";
|
|
53
|
+
readonly POD: "POD";
|
|
54
|
+
readonly PODS_EXEC: "PODS_EXEC";
|
|
55
|
+
readonly PODS_ROOT_EXEC: "PODS_ROOT_EXEC";
|
|
56
|
+
readonly CONFIG_MAP: "CONFIG_MAP";
|
|
57
|
+
readonly ALERT_TEMPLATE: "ALERT_TEMPLATE";
|
|
58
|
+
readonly APPLICATION: "APPLICATION";
|
|
59
|
+
readonly APPLICATION_HISTORY: "APPLICATION_HISTORY";
|
|
60
|
+
readonly CLUSTER: "CLUSTER";
|
|
61
|
+
readonly CLUSTER_VIEW: "CLUSTER_VIEW";
|
|
62
|
+
readonly DAEMON_SET: "DAEMON_SET";
|
|
63
|
+
readonly STATEFUL_SET: "STATEFUL_SET";
|
|
64
|
+
readonly DOMAIN: "DOMAIN";
|
|
65
|
+
readonly FEATURE: "FEATURE";
|
|
66
|
+
readonly ALAUDA_FEATURE_GATE: "ALAUDA_FEATURE_GATE";
|
|
67
|
+
readonly CLUSTER_ALAUDA_FEATURE_GATE: "CLUSTER_ALAUDA_FEATURE_GATE";
|
|
68
|
+
readonly HORIZONTAL_POD_AUTOSCALER: "HORIZONTAL_POD_AUTOSCALER";
|
|
69
|
+
readonly LOG: "LOG";
|
|
70
|
+
readonly PROJECT: "PROJECT";
|
|
71
|
+
readonly PROMETHEUS_RULE: "PROMETHEUS_RULE";
|
|
72
|
+
readonly ALERT_HISTORY: "ALERT_HISTORY";
|
|
73
|
+
readonly SELF_SUBJECT_ACCESS_REVIEW: "SELF_SUBJECT_ACCESS_REVIEW";
|
|
74
|
+
readonly VIEW: "VIEW";
|
|
75
|
+
readonly SERVICE: "SERVICE";
|
|
76
|
+
readonly LIMIT_RANGE: "LIMIT_RANGE";
|
|
77
|
+
readonly SECRET: "SECRET";
|
|
78
|
+
readonly PRODUCT: "PRODUCT";
|
|
79
|
+
readonly CRON_JOB: "CRON_JOB";
|
|
80
|
+
readonly ADVANCED_CRON_JOB: "ADVANCED_CRON_JOB";
|
|
81
|
+
readonly JOB: "JOB";
|
|
82
|
+
readonly INGRESS: "INGRESS";
|
|
83
|
+
readonly PERSISTENT_VOLUME_CLAIM: "PERSISTENT_VOLUME_CLAIM";
|
|
84
|
+
readonly NAMESPACE: "NAMESPACE";
|
|
85
|
+
readonly NODE: "NODE";
|
|
86
|
+
readonly NODE_METRICS: "NODE_METRICS";
|
|
87
|
+
readonly PV: "PV";
|
|
88
|
+
readonly CRD: "CRD";
|
|
89
|
+
readonly CHART_REPO: "CHART_REPO";
|
|
90
|
+
readonly CHART: "CHART";
|
|
91
|
+
readonly NETWORK_POLICY: "NETWORK_POLICY";
|
|
92
|
+
readonly SERVICE_ACCOUNT: "SERVICE_ACCOUNT";
|
|
93
|
+
readonly REPLICA_SET: "REPLICA_SET";
|
|
94
|
+
readonly POD_SECURITY_POLICY: "POD_SECURITY_POLICY";
|
|
95
|
+
readonly NAMESPACE_OVERVIEW: "NAMESPACE_OVERVIEW";
|
|
96
|
+
readonly CSP: "CSP";
|
|
97
|
+
readonly RESOURCE_QUOTA: "RESOURCE_QUOTA";
|
|
98
|
+
readonly CLUSTER_NETWORK_POLICY: "CLUSTER_NETWORK_POLICY";
|
|
99
|
+
readonly PROJECT_QUOTA: "PROJECT_QUOTA";
|
|
100
|
+
readonly TKE_CLUSTER: "TKE_CLUSTER";
|
|
101
|
+
readonly TKE_MACHINE: "TKE_MACHINE";
|
|
102
|
+
readonly MACHINE: "MACHINE";
|
|
103
|
+
readonly NODE_GROUP: "NODE_GROUP";
|
|
104
|
+
readonly CLUSTERSERVICEVERSION: "CLUSTERSERVICEVERSION";
|
|
105
|
+
readonly TENANT: "TENANT";
|
|
106
|
+
readonly SUBSCRIPTION: "SUBSCRIPTION";
|
|
107
|
+
readonly PACKAGE_MANIFEST: "PACKAGE_MANIFEST";
|
|
108
|
+
readonly BUCKET_CLASS: "BUCKET_CLASS";
|
|
109
|
+
readonly PRODUCT_CONFIG: "PRODUCT_CONFIG";
|
|
110
|
+
readonly STORAGE_CLASS: "STORAGE_CLASS";
|
|
111
|
+
readonly VOLUME_SNAPSHOT_CLASS: "VOLUME_SNAPSHOT_CLASS";
|
|
112
|
+
readonly PRODUCT_BASE: "PRODUCT_BASE";
|
|
113
|
+
readonly MODULE_INFO: "MODULE_INFO";
|
|
114
|
+
readonly PRODUCT_ENTRY: "PRODUCT_ENTRY";
|
|
115
|
+
readonly PRODUCT_DOCS_ENTRY: "PRODUCT_DOCS_ENTRY";
|
|
116
|
+
readonly SERVICEMESH_GROUP: "SERVICEMESH_GROUP";
|
|
117
|
+
readonly CLUSTER_MODULE: "CLUSTER_MODULE";
|
|
118
|
+
readonly USER_BINDING: "USER_BINDING";
|
|
119
|
+
readonly BATCH_ACTION: "BATCH_ACTION";
|
|
120
|
+
readonly EVENT: "EVENT";
|
|
121
|
+
readonly SERVICE_MONITOR: "SERVICE_MONITOR";
|
|
122
|
+
readonly OAM_APPLICATION: "OAM_APPLICATION";
|
|
123
|
+
readonly ARGOCD_APPLICATION_SET: "ARGOCD_APPLICATION_SET";
|
|
124
|
+
readonly ARGOCD_APPLICATION: "ARGOCD_APPLICATION";
|
|
11
125
|
};
|
|
12
126
|
export declare const NETWORK_RESOURCE_DEFINITIONS: {
|
|
13
127
|
readonly SUBNET_KUBE_OVN: {
|
|
@@ -18,8 +132,37 @@ export declare const NETWORK_RESOURCE_DEFINITIONS: {
|
|
|
18
132
|
readonly type: "ips";
|
|
19
133
|
readonly apiGroup: "kubeovn.io";
|
|
20
134
|
};
|
|
135
|
+
readonly L2_ADVERTISEMENT: {
|
|
136
|
+
readonly apiGroup: "metallb.io";
|
|
137
|
+
readonly apiVersion: "v1beta1";
|
|
138
|
+
readonly type: "l2advertisements";
|
|
139
|
+
};
|
|
140
|
+
readonly IP_POOL: {
|
|
141
|
+
readonly apiGroup: "metallb.io";
|
|
142
|
+
readonly apiVersion: "v1beta1";
|
|
143
|
+
readonly type: "ipaddresspools";
|
|
144
|
+
};
|
|
145
|
+
readonly BGP_PEER: {
|
|
146
|
+
readonly apiGroup: "metallb.io";
|
|
147
|
+
readonly apiVersion: "v1beta2";
|
|
148
|
+
readonly type: "bgppeers";
|
|
149
|
+
};
|
|
150
|
+
readonly BGP_ADVERTISEMENT: {
|
|
151
|
+
readonly apiGroup: "metallb.io";
|
|
152
|
+
readonly apiVersion: "v1beta1";
|
|
153
|
+
readonly type: "bgpadvertisements";
|
|
154
|
+
};
|
|
155
|
+
readonly INTER_CONNECTION_SUBNET: {
|
|
156
|
+
readonly type: "interconnectionsubnets";
|
|
157
|
+
readonly apiGroup: "kubeovn.io";
|
|
158
|
+
};
|
|
21
159
|
};
|
|
22
160
|
export declare const NETWORK_RESOURCE_TYPES: {
|
|
23
161
|
readonly SUBNET_KUBE_OVN: "SUBNET_KUBE_OVN";
|
|
24
162
|
readonly SUBNET_KUBE_OVN_IP: "SUBNET_KUBE_OVN_IP";
|
|
163
|
+
readonly L2_ADVERTISEMENT: "L2_ADVERTISEMENT";
|
|
164
|
+
readonly IP_POOL: "IP_POOL";
|
|
165
|
+
readonly BGP_PEER: "BGP_PEER";
|
|
166
|
+
readonly BGP_ADVERTISEMENT: "BGP_ADVERTISEMENT";
|
|
167
|
+
readonly INTER_CONNECTION_SUBNET: "INTER_CONNECTION_SUBNET";
|
|
25
168
|
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TranslateService } from '@alauda-fe/common';
|
|
2
|
+
import { AbstractControl, ValidationErrors } from '@angular/forms';
|
|
3
|
+
export declare const getHostPrefixErrorMapper: (translate: TranslateService) => {
|
|
4
|
+
hostPrefixExtensivePosition: string;
|
|
5
|
+
hostPrefixPattern: string;
|
|
6
|
+
maxlength: string;
|
|
7
|
+
hostPrefixIncludeDotError: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const getHostPrefixErrorMapper$: (translate: TranslateService) => import("rxjs").Observable<{
|
|
10
|
+
hostPrefixExtensivePosition: string;
|
|
11
|
+
hostPrefixPattern: string;
|
|
12
|
+
maxlength: string;
|
|
13
|
+
hostPrefixIncludeDotError: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const hostPrefixValidator: (hostPrefixCtrl: AbstractControl) => ValidationErrors;
|
|
16
|
+
export declare const getHostPrefixCompleteValidators: (domainLength: number) => import("@angular/forms").ValidatorFn[];
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alauda-fe/network",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@alauda-fe/common": "^1.0.2",
|
|
7
|
+
"@alauda-fe/i18n": "1.0.4",
|
|
7
8
|
"@alauda/ui": "^7.2.0",
|
|
8
9
|
"@angular/common": "^16.2.3",
|
|
9
10
|
"@angular/core": "^16.2.3",
|
|
@@ -13,7 +14,13 @@
|
|
|
13
14
|
"ng-resource-form-util": "^6.1.0",
|
|
14
15
|
"rxjs": "^7.8.1"
|
|
15
16
|
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"tslib": "^2.6.2"
|
|
19
|
+
},
|
|
16
20
|
"sideEffects": false,
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
17
24
|
"module": "esm2022/alauda-fe-network.mjs",
|
|
18
25
|
"typings": "index.d.ts",
|
|
19
26
|
"exports": {
|
|
@@ -21,12 +28,10 @@
|
|
|
21
28
|
"default": "./package.json"
|
|
22
29
|
},
|
|
23
30
|
".": {
|
|
31
|
+
"types": "./index.d.ts",
|
|
24
32
|
"esm2022": "./esm2022/alauda-fe-network.mjs",
|
|
25
33
|
"esm": "./esm2022/alauda-fe-network.mjs",
|
|
26
34
|
"default": "./esm2022/alauda-fe-network.mjs"
|
|
27
35
|
}
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"tslib": "^2.6.2"
|
|
31
36
|
}
|
|
32
37
|
}
|
package/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v3.4.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.\!tw-visible{visibility:visible!important}.tw-invisible{visibility:hidden}.tw-fixed{position:fixed}.tw-absolute{position:absolute}.tw-relative{position:relative}.tw-left-0{left:0}.tw-right-\[12px\]{right:12px}.tw-right-\[16px\]{right:16px}.tw-top-0{top:0}.tw-top-\[12px\]{top:12px}.tw-z-10{z-index:10}.tw-mx-8{margin-left:8px;margin-right:8px}.tw-my-16{margin-bottom:16px;margin-top:16px}.tw-my-4{margin-bottom:4px;margin-top:4px}.\!tw-ml-0{margin-left:0!important}.\!tw-mr-8{margin-right:8px!important}.\!tw-mt-16{margin-top:16px!important}.tw-mb-12{margin-bottom:12px}.tw-mb-16{margin-bottom:16px}.tw-mb-2{margin-bottom:2px}.tw-mb-20{margin-bottom:20px}.tw-mb-4{margin-bottom:4px}.tw-mb-8{margin-bottom:8px}.tw-ml-12{margin-left:12px}.tw-ml-16{margin-left:16px}.tw-ml-20{margin-left:20px}.tw-ml-24{margin-left:24px}.tw-ml-32{margin-left:32px}.tw-ml-6{margin-left:6px}.tw-ml-8{margin-left:8px}.tw-ml-\[-4px\]{margin-left:-4px}.tw-ml-\[34px\]{margin-left:34px}.tw-ml-\[4px\]{margin-left:4px}.tw-mr-0{margin-right:0}.tw-mr-16{margin-right:16px}.tw-mr-4{margin-right:4px}.tw-mr-6{margin-right:6px}.tw-mr-8{margin-right:8px}.tw-mr-\[4px\]{margin-right:4px}.tw-mt-0{margin-top:0}.tw-mt-16{margin-top:16px}.tw-mt-20{margin-top:20px}.tw-mt-4{margin-top:4px}.tw-mt-8{margin-top:8px}.tw-line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}.tw-block{display:block}.\!tw-flex{display:flex!important}.tw-flex{display:flex}.tw-inline-flex{display:inline-flex}.tw-hidden{display:none}.\!tw-h-\[20px\]{height:20px!important}.tw-h-0{height:0}.tw-h-1\/2{height:50%}.tw-h-\[100\%\]{height:100%}.tw-h-\[100vh\]{height:100vh}.tw-h-\[200px\]{height:200px}.tw-h-\[22px\]{height:22px}.tw-h-\[600px\]{height:600px}.tw-h-\[8px\]{height:8px}.tw-h-full{height:100%}.\!tw-min-h-\[48px\]{min-height:48px!important}.tw-min-h-0{min-height:0}.tw-min-h-\[360px\]{min-height:360px}.tw-min-h-screen{min-height:100vh}.\!tw-w-\[20px\]{width:20px!important}.tw-w-\[100\%\]{width:100%}.tw-w-\[135px\]{width:135px}.tw-w-\[150px\]{width:150px}.tw-w-\[160px\]{width:160px}.tw-w-\[200px\]{width:200px}.tw-w-\[260px\]{width:260px}.tw-w-\[950px\]{width:950px}.tw-w-fit{width:-moz-fit-content;width:fit-content}.tw-w-full{width:100%}.tw-min-w-0{min-width:0}.tw-min-w-\[100px\]{min-width:100px}.tw-min-w-\[135px\]{min-width:135px}.tw-min-w-\[160px\]{min-width:160px}.tw-min-w-\[220px\]{min-width:220px}.tw-min-w-\[260px\]{min-width:260px}.tw-min-w-\[50px\]{min-width:50px}.tw-max-w-\[400px\]{max-width:400px}.tw-max-w-\[45\%\]{max-width:45%}.tw-flex-1{flex:1 1 0%}.tw-flex-\[1\]{flex:1}.tw-flex-\[2\]{flex:2}.tw-flex-shrink-0{flex-shrink:0}.\!tw-cursor-move{cursor:move!important}.tw-cursor-move{cursor:move}.tw-cursor-pointer{cursor:pointer}.tw-select-none{user-select:none}.tw-list-disc{list-style-type:disc}.tw-flex-row{flex-direction:row}.tw-flex-col{flex-direction:column}.tw-flex-wrap{flex-wrap:wrap}.tw-items-start{align-items:flex-start}.tw-items-center{align-items:center}.tw-justify-start{justify-content:flex-start}.tw-justify-end{justify-content:flex-end}.tw-justify-center{justify-content:center}.tw-justify-between{justify-content:space-between}.tw-space-y-\[8px\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(8px*var(--tw-space-y-reverse));margin-top:calc(8px*(1 - var(--tw-space-y-reverse)))}.tw-overflow-auto{overflow:auto}.tw-overflow-hidden{overflow:hidden}.tw-overflow-y-auto{overflow-y:auto}.tw-overflow-x-hidden{overflow-x:hidden}.tw-overflow-ellipsis,.tw-text-ellipsis{text-overflow:ellipsis}.tw-whitespace-nowrap{white-space:nowrap}.tw-break-words{overflow-wrap:break-word}.tw-break-all{word-break:break-all}.tw-rounded-\[50\%\]{border-radius:50%}.tw-rounded-l{border-radius:var(--aui-border-radius-l)}.tw-rounded-sm{border-radius:.125rem}.tw-rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.\!tw-border-0{border-width:0!important}.tw-bg-n-10{background-color:rgb(var(--aui-color-n-10))}.tw-bg-n-6{background-color:rgb(var(--aui-color-n-6))}.tw-bg-n-8{background-color:rgb(var(--aui-color-n-8))}.tw-bg-n-9{background-color:rgb(var(--aui-color-n-9))}.tw-bg-p-6{background-color:rgb(var(--aui-color-p-6))}.tw-p-12{padding:12px}.tw-p-16{padding:16px}.tw-p-20{padding:20px}.tw-p-\[12px_16px\]{padding:12px 16px}.\!tw-px-0{padding-left:0!important;padding-right:0!important}.\!tw-py-14{padding-bottom:14px!important;padding-top:14px!important}.\!tw-py-8{padding-bottom:8px!important;padding-top:8px!important}.tw-px-12{padding-left:12px;padding-right:12px}.tw-px-16{padding-left:16px;padding-right:16px}.tw-px-4{padding-left:4px;padding-right:4px}.tw-px-8{padding-left:8px;padding-right:8px}.tw-py-4{padding-bottom:4px;padding-top:4px}.tw-py-8{padding-bottom:8px;padding-top:8px}.\!tw-pb-14{padding-bottom:14px!important}.\!tw-pt-14{padding-top:14px!important}.tw-pb-12{padding-bottom:12px}.tw-pb-\[40px\]{padding-bottom:40px}.tw-pl-8{padding-left:8px}.tw-pr-16{padding-right:16px}.tw-pr-20{padding-right:20px}.tw-pt-12{padding-top:12px}.tw-pt-\[40px\]{padding-top:40px}.tw-text-center{text-align:center}.\!tw-align-top{vertical-align:top!important}.\!tw-text-s{font-size:var(--aui-font-size-s)!important}.tw-text-\[12px\]{font-size:12px}.tw-text-l{font-size:var(--aui-font-size-l)}.tw-text-m{font-size:var(--aui-font-size-m)}.tw-text-s{font-size:var(--aui-font-size-s)}.tw-font-bold{font-weight:var(--aui-font-weight-bold)}.tw-font-bolder{font-weight:var(--aui-font-weight-bolder)}.tw-leading-m{line-height:var(--aui-line-height-m)}.\!tw-text-n-2{color:rgb(var(--aui-color-n-2))!important}.tw-text-help-text{color:rgb(var(--aui-color-help-text))}.tw-text-main-text{color:rgb(var(--aui-color-main-text))}.tw-text-n-2{color:rgb(var(--aui-color-n-2))}.tw-text-n-4{color:rgb(var(--aui-color-n-4))}.tw-text-p-2{color:rgb(var(--aui-color-p-2))}.tw-text-primary{color:rgb(var(--aui-color-primary))}.tw-text-red{color:rgb(var(--aui-color-red))}.tw-text-yellow{color:rgb(var(--aui-color-yellow))}.tw-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.tw-icon-l{font-size:var(--aui-icon-size-l)}.tw-icon-m{font-size:var(--aui-icon-size-m)}.tw-leading-text-xl{font-size:var(--aui-font-size-xl);line-height:var(--aui-line-height-xl)}.hover\:\!tw-text-primary:hover{color:rgb(var(--aui-color-primary))!important}.hover\:tw-text-primary:hover{color:rgb(var(--aui-color-primary))}html:not([lang|=zh]) .lang-not-zh\:\!tw-w-\[230px\]{width:230px!important}@media (min-width:1280px){.vw1280\:tw-ml-\[40px\]{margin-left:40px}.vw1280\:tw-mr-20{margin-right:20px}}
|