dashboard-shell-shell 3.0.5-test.3 → 3.0.5-test.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/assets/icons/iconfont.css +4 -1
  2. package/assets/images/pl/dark/logo.png +0 -0
  3. package/assets/styles/all.scss +21 -1
  4. package/assets/styles/base/_variables.scss +5 -5
  5. package/assets/styles/fonts/_icons.scss +3 -2
  6. package/assets/styles/global/_button.scss +8 -8
  7. package/assets/styles/global/_select.scss +1 -1
  8. package/assets/styles/global/_tooltip.scss +9 -5
  9. package/assets/styles/themes/_light.scss +3 -1
  10. package/assets/styles/vendor/vue-select.scss +2 -1
  11. package/assets/translations/zh-hans.yaml +150 -13
  12. package/components/ActionDropdown.vue +1 -1
  13. package/components/ButtonDropdown.vue +3 -1
  14. package/components/CodeMirror.vue +6 -4
  15. package/components/ContainerResourceLimit.vue +2 -2
  16. package/components/CopyToClipboard.vue +15 -0
  17. package/components/Drawer/Chrome.vue +2 -2
  18. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
  19. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
  20. package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
  21. package/components/ExplorerMembers.vue +28 -4
  22. package/components/GlobalRoleBindings.vue +48 -112
  23. package/components/PodSecurityAdmission.vue +2 -2
  24. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
  25. package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
  26. package/components/Resource/Detail/Metadata/index.vue +3 -1
  27. package/components/Resource/Detail/TitleBar/Title.vue +4 -3
  28. package/components/Resource/Detail/TitleBar/Top.vue +2 -0
  29. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  30. package/components/Resource/Detail/TitleBar/index.vue +123 -25
  31. package/components/ResourceDetail/Masthead/index.vue +1 -1
  32. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  33. package/components/ResourceDetail/Masthead/legacy.vue +239 -167
  34. package/components/ResourceDetail/legacy.vue +44 -28
  35. package/components/ResourceList/Masthead.vue +14 -15
  36. package/components/SideNav.vue +21 -21
  37. package/components/SortableTable/THead.vue +21 -1
  38. package/components/SortableTable/index.vue +21 -6
  39. package/components/Tabbed/index.vue +6 -1
  40. package/components/auth/Principal.vue +42 -13
  41. package/components/auth/RoleDetailEdit.vue +11 -7
  42. package/components/breadcrumb/index.vue +119 -0
  43. package/components/form/ArrayList.vue +164 -147
  44. package/components/form/ArrayListGrouped.vue +3 -1
  45. package/components/form/ChangePassword.vue +1 -1
  46. package/components/form/Command.vue +4 -5
  47. package/components/form/Conditions.vue +15 -1
  48. package/components/form/Footer.vue +1 -0
  49. package/components/form/HealthCheck.vue +0 -2
  50. package/components/form/HookOption.vue +87 -58
  51. package/components/form/InputWithSelect.vue +8 -7
  52. package/components/form/KeyValue.vue +20 -2
  53. package/components/form/LabeledSelect.vue +6 -3
  54. package/components/form/Labels.vue +2 -2
  55. package/components/form/MatchExpressions.vue +3 -4
  56. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  57. package/components/form/Members/ClusterPermissionsEditor.vue +5 -5
  58. package/components/form/Members/MembershipEditor.vue +2 -2
  59. package/components/form/NameNsDescription.vue +1 -1
  60. package/components/form/Networking.vue +6 -9
  61. package/components/form/NodeAffinity.vue +29 -28
  62. package/components/form/PodAffinity.vue +23 -23
  63. package/components/form/Probe.vue +15 -11
  64. package/components/form/ResourceQuota/Namespace.vue +4 -4
  65. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  66. package/components/form/ResourceQuota/Project.vue +4 -4
  67. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  68. package/components/form/ResourceSelector.vue +1 -1
  69. package/components/form/Security.vue +1 -3
  70. package/components/form/Select.vue +6 -1
  71. package/components/form/ServiceNameSelect.vue +2 -5
  72. package/components/form/ServicePorts.vue +149 -75
  73. package/components/form/Taints.vue +2 -1
  74. package/components/form/Tolerations.vue +12 -9
  75. package/components/form/ValueFromResource.vue +110 -96
  76. package/components/form/WorkloadPorts.vue +143 -123
  77. package/components/formatter/WorkloadHealthScale.vue +4 -3
  78. package/components/nav/Group.vue +6 -0
  79. package/components/nav/Header.vue +7 -4
  80. package/components/nav/NamespaceFilter.vue +15 -21
  81. package/components/nav/TopLevelMenu.vue +99 -125
  82. package/components/nav/Type.vue +15 -3
  83. package/config/menuRouteMap.js +10 -0
  84. package/config/product/explorer.js +5 -1
  85. package/config/router/navigation-guards/index.js +61 -3
  86. package/detail/node.vue +28 -23
  87. package/dialog/AddCustomBadgeDialog.vue +17 -9
  88. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  89. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  90. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  91. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  92. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  93. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  94. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  95. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  96. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  97. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  98. package/edit/configmap.vue +4 -0
  99. package/edit/networking.k8s.io.ingress/Certificate.vue +7 -5
  100. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  101. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  102. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  103. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  104. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  105. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  106. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  107. package/edit/persistentvolume/index.vue +3 -1
  108. package/edit/persistentvolumeclaim.vue +2 -0
  109. package/edit/secret/index.vue +2 -2
  110. package/edit/service.vue +4 -1
  111. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  112. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  113. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  114. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  115. package/edit/workload/Job.vue +31 -34
  116. package/edit/workload/Upgrading.vue +5 -5
  117. package/edit/workload/index.vue +22 -18
  118. package/edit/workload/storage/Mount.vue +1 -0
  119. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  120. package/edit/workload/storage/azureDisk.vue +14 -10
  121. package/edit/workload/storage/azureFile.vue +9 -7
  122. package/edit/workload/storage/csi/index.vue +6 -9
  123. package/edit/workload/storage/emptyDir.vue +7 -5
  124. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  125. package/edit/workload/storage/hostPath.vue +7 -5
  126. package/edit/workload/storage/nfs.vue +8 -6
  127. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  128. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  129. package/edit/workload/storage/secret.vue +9 -6
  130. package/edit/workload/storage/vsphereVolume.vue +11 -7
  131. package/initialize/app-extended.js +7 -1
  132. package/models/provisioning.cattle.io.cluster.js +19 -18
  133. package/package.json +1 -1
  134. package/pages/account/index.vue +95 -115
  135. package/pages/auth/setup.vue +35 -16
  136. package/pages/c/_cluster/auth/roles/index.vue +38 -5
  137. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  138. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  139. package/pages/home.vue +3 -4
  140. package/pkg/tsconfig.json +9 -9
  141. package/pkg/vue.config.js +1 -1
  142. package/plugins/dashboard-store/resource-class.js +28 -27
  143. package/rancher-components/BadgeState/BadgeState.vue +33 -52
  144. package/rancher-components/Banner/Banner.vue +4 -1
  145. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  146. package/rancher-components/RcDropdown/RcDropdownMenu.vue +8 -7
  147. package/scripts/publish-shell.sh +1 -1
  148. package/store/i18n.js +4 -0
  149. package/store/type-map.js +1 -1
  150. package/types/shell/index.d.ts +4 -30
  151. package/utils/error.js +3 -1
  152. package/utils/errorTranslate.json +351 -2
  153. package/vue.config.js +1 -1
@@ -160,7 +160,7 @@ export default {
160
160
  <div class="row">
161
161
  <div
162
162
  data-testid="input-probe-kind"
163
- class="col span-11-of-23"
163
+ class="span-9-of-23"
164
164
  >
165
165
  <LabeledSelect
166
166
  v-model:value="kind"
@@ -240,7 +240,7 @@ export default {
240
240
  </div>
241
241
  </div>
242
242
 
243
- <div class="col span-1-of-13">
243
+ <div class="span-1-of-13">
244
244
  <hr
245
245
  v-if="kind && kind!=='none'"
246
246
  :style="{'position':'relative', 'margin':'0px'}"
@@ -252,12 +252,12 @@ export default {
252
252
  <!-- none -->
253
253
  <div
254
254
  v-if="!isNone"
255
- class="col span-11-of-23"
255
+ class="span-11-of-23 ml-30"
256
256
  >
257
257
  <div class="row">
258
258
  <div
259
259
  data-testid="input-probe-periodSeconds"
260
- class="col span-4"
260
+ class="col"
261
261
  >
262
262
  <UnitInput
263
263
  v-model:value="probe.periodSeconds"
@@ -269,9 +269,12 @@ export default {
269
269
  @update:value="update"
270
270
  />
271
271
  </div>
272
+ </div>
273
+
274
+ <div class="row">
272
275
  <div
273
276
  data-testid="input-probe-initialDelaySeconds"
274
- class="col span-4"
277
+ class="col"
275
278
  >
276
279
  <UnitInput
277
280
  v-model:value="probe.initialDelaySeconds"
@@ -283,9 +286,11 @@ export default {
283
286
  @update:value="update"
284
287
  />
285
288
  </div>
289
+ </div>
290
+ <div class="row">
286
291
  <div
287
292
  data-testid="input-probe-timeoutSeconds"
288
- class="col span-4"
293
+ class="col"
289
294
  >
290
295
  <UnitInput
291
296
  v-model:value="probe.timeoutSeconds"
@@ -299,12 +304,10 @@ export default {
299
304
  </div>
300
305
  </div>
301
306
 
302
- <div class="spacer-small" />
303
-
304
307
  <div class="row">
305
308
  <div
306
309
  data-testid="input-probe-successThreshold"
307
- class="col span-6"
310
+ class="col"
308
311
  >
309
312
  <LabeledInput
310
313
  v-model:value.number="probe.successThreshold"
@@ -316,9 +319,11 @@ export default {
316
319
  @update:value="update"
317
320
  />
318
321
  </div>
322
+ </div>
323
+ <div class="row">
319
324
  <div
320
325
  data-testid="input-probe-failureThreshold"
321
- class="col span-6"
326
+ class="col"
322
327
  >
323
328
  <LabeledInput
324
329
  v-model:value.number="probe.failureThreshold"
@@ -333,7 +338,6 @@ export default {
333
338
  </div>
334
339
 
335
340
  <template v-if="kind === 'HTTP' || kind === 'HTTPS'">
336
- <div class="spacer-small" />
337
341
 
338
342
  <div class="row">
339
343
  <div class="col span-12">
@@ -72,13 +72,13 @@ export default {
72
72
  <template>
73
73
  <div>
74
74
  <div class="headers mb-10">
75
- <div style="width: 400px;">
75
+ <div style="width: 450px;">
76
76
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
77
77
  </div>
78
- <div style="width: 400px;">
78
+ <div style="width: 450px;">
79
79
  <label>{{ t('resourceQuota.headers.projectResourceAvailability') }}</label>
80
80
  </div>
81
- <div style="width: 500px;">
81
+ <div style="width: 450px;">
82
82
  <label>{{ t('resourceQuota.headers.limit') }}</label>
83
83
  </div>
84
84
  </div>
@@ -101,7 +101,7 @@ export default {
101
101
  .headers {
102
102
  display: flex;
103
103
  flex-direction: row;
104
- justify-content: space-between;
104
+ justify-content: left;
105
105
  align-items: center;
106
106
  border-bottom: 1px solid var(--border);
107
107
  height: 30px;
@@ -175,13 +175,15 @@ export default {
175
175
  v-if="typeOption"
176
176
  class="rowNew"
177
177
  >
178
- <Select
179
- :mode="mode"
180
- :value="type"
181
- :disabled="true"
182
- :options="types"
183
- />
184
- <div class="resource-availability">
178
+ <div style="width: 450px;">
179
+ <Select
180
+ :mode="mode"
181
+ :value="type"
182
+ :disabled="true"
183
+ :options="types"
184
+ />
185
+ </div>
186
+ <div style="width: 450px;" class="resource-availability">
185
187
  <PercentageBar
186
188
  v-clean-tooltip="tooltip"
187
189
  class="percentage-bar"
@@ -190,7 +192,7 @@ export default {
190
192
  :color-stops="{'100': '--primary'}"
191
193
  />
192
194
  </div>
193
- <div style="width: 500px;">
195
+ <div style="width: 450px;">
194
196
  <UnitInput
195
197
  :value="value.limit[type]"
196
198
  :mode="mode"
@@ -212,7 +214,7 @@ export default {
212
214
  .rowNew {
213
215
  margin-bottom: 10px;
214
216
  display: flex;
215
- justify-content: space-between;
217
+ justify-content: left;
216
218
 
217
219
  & > * {
218
220
  width: 400px;
@@ -57,14 +57,14 @@ export default {
57
57
  </script>
58
58
  <template>
59
59
  <div>
60
- <div style="justify-content: right;" class="headers mb-10">
61
- <div style="width: 400px;">
60
+ <div style="justify-content: left;" class="headers mb-10">
61
+ <div style="width: 450px;">
62
62
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
63
63
  </div>
64
- <div style="width: 400px;">
64
+ <div style="width: 450px;">
65
65
  <label>{{ t('resourceQuota.headers.projectLimit') }}</label>
66
66
  </div>
67
- <div style="width: 400px;">
67
+ <div style="width: 450px;">
68
68
  <label>{{ t('resourceQuota.headers.namespaceDefaultLimit') }}</label>
69
69
  </div>
70
70
  </div>
@@ -72,41 +72,47 @@ export default {
72
72
  v-if="typeOption"
73
73
  class="rowNew"
74
74
  >
75
- <Select
76
- :value="type"
77
- :mode="mode"
78
- :options="types"
79
- data-testid="projectrow-type-input"
80
- @update:value="updateType($event)"
81
- />
82
- <UnitInput
83
- :value="resourceQuotaLimit[type]"
84
- :mode="mode"
85
- :placeholder="typeOption.placeholder"
86
- :increment="typeOption.increment"
87
- :input-exponent="typeOption.inputExponent"
88
- :base-unit="typeOption.baseUnit"
89
- :output-modifier="true"
90
- data-testid="projectrow-project-quota-input"
91
- @update:value="updateQuotaLimit('resourceQuota', type, $event)"
92
- />
93
- <UnitInput
94
- :value="namespaceDefaultResourceQuotaLimit[type]"
95
- :mode="mode"
96
- :placeholder="typeOption.placeholder"
97
- :increment="typeOption.increment"
98
- :input-exponent="typeOption.inputExponent"
99
- :base-unit="typeOption.baseUnit"
100
- :output-modifier="true"
101
- data-testid="projectrow-namespace-quota-input"
102
- @update:value="updateQuotaLimit('namespaceDefaultResourceQuota', type, $event)"
103
- />
75
+ <div style="width: 450px;">
76
+ <Select
77
+ :value="type"
78
+ :mode="mode"
79
+ :options="types"
80
+ data-testid="projectrow-type-input"
81
+ @update:value="updateType($event)"
82
+ />
83
+ </div>
84
+ <div style="width: 450px;">
85
+ <UnitInput
86
+ :value="resourceQuotaLimit[type]"
87
+ :mode="mode"
88
+ :placeholder="typeOption.placeholder"
89
+ :increment="typeOption.increment"
90
+ :input-exponent="typeOption.inputExponent"
91
+ :base-unit="typeOption.baseUnit"
92
+ :output-modifier="true"
93
+ data-testid="projectrow-project-quota-input"
94
+ @update:value="updateQuotaLimit('resourceQuota', type, $event)"
95
+ />
96
+ </div>
97
+ <div style="width: 450px;">
98
+ <UnitInput
99
+ :value="namespaceDefaultResourceQuotaLimit[type]"
100
+ :mode="mode"
101
+ :placeholder="typeOption.placeholder"
102
+ :increment="typeOption.increment"
103
+ :input-exponent="typeOption.inputExponent"
104
+ :base-unit="typeOption.baseUnit"
105
+ :output-modifier="true"
106
+ data-testid="projectrow-namespace-quota-input"
107
+ @update:value="updateQuotaLimit('namespaceDefaultResourceQuota', type, $event)"
108
+ />
109
+ </div>
104
110
  </div>
105
111
  </template>
106
112
 
107
113
  <style lang='scss' scoped>
108
114
  .rowNew {
109
115
  display: flex;
110
- justify-content: space-between;
116
+ justify-content: left;
111
117
  }
112
118
  </style>
@@ -125,7 +125,7 @@ export default {
125
125
  </div>
126
126
  </div>
127
127
  <div class="row">
128
- <div class="col span-12">
128
+ <div class="span-12">
129
129
  <Banner :color="(matchingResources.none ? 'warning' : 'success')">
130
130
  <span v-clean-html="t('generic.selectors.matchingResources.matchesSome', matchingResources)" />
131
131
  </Banner>
@@ -157,7 +157,6 @@ export default {
157
157
  </div>
158
158
  </div>
159
159
  </div>
160
- <div class="spacer" />
161
160
 
162
161
  <div>
163
162
  <div class="row">
@@ -191,11 +190,10 @@ export default {
191
190
  </div>
192
191
  </div>
193
192
  </div>
194
- <div class="spacer" />
195
193
 
196
194
  <div
197
195
  data-testid="input-security-runAsUser"
198
- class="row mb-10"
196
+ class="row"
199
197
  >
200
198
  <div class="col span-6">
201
199
  <LabeledInput
@@ -392,6 +392,10 @@ export default {
392
392
  .unlabeled-select {
393
393
  position: relative;
394
394
 
395
+ :deep() .vs__actions:after {
396
+ // padding-top: 2px;
397
+ }
398
+
395
399
  :deep() .v-select.select-input-view {
396
400
  .vs__actions {
397
401
  visibility: hidden;
@@ -409,7 +413,8 @@ export default {
409
413
 
410
414
  :deep() .vs__selected-options {
411
415
  display: flex;
412
- margin: 3px;
416
+ align-items: center;
417
+ margin: 0px;
413
418
 
414
419
  .vs__selected {
415
420
  width: initial;
@@ -120,11 +120,8 @@ export default {
120
120
 
121
121
  <template>
122
122
  <div>
123
- <div class="spacer" />
124
- <div class="row mb-10">
125
- <h3 class="col span-6">
126
- {{ t('workload.serviceAccountName.label') }}
127
- </h3>
123
+ <div class="row mb-10 mt-40">
124
+ <h3>{{ t('workload.serviceAccountName.label') }}</h3>
128
125
  </div>
129
126
  <div class="row span-6">
130
127
  <LabeledSelect
@@ -125,7 +125,7 @@ export default {
125
125
  <template>
126
126
  <div>
127
127
  <div v-if="rows.length">
128
- <div
128
+ <!-- <div
129
129
  class="ports-headers"
130
130
  :class="{'show-protocol':showProtocol, 'show-node-port':showNodePort}"
131
131
  >
@@ -169,77 +169,13 @@ export default {
169
169
  v-if="showRemove"
170
170
  class="remove"
171
171
  />
172
- </div>
172
+ </div> -->
173
173
  <div
174
174
  v-for="(row, idx) in rows"
175
175
  :key="idx"
176
176
  class="ports-row"
177
177
  :class="{'show-protocol':showProtocol, 'show-node-port':showNodePort}"
178
178
  >
179
- <div
180
- v-if="padLeft"
181
- class="left"
182
- />
183
- <div class="port-name">
184
- <span v-if="isView">{{ row.name }}</span>
185
- <input
186
- v-else
187
- ref="port-name"
188
- v-model.number="row.name"
189
- type="text"
190
- :placeholder="t('servicePorts.rules.name.placeholder')"
191
- @input="queueUpdate"
192
- >
193
- </div>
194
- <div class="port">
195
- <span v-if="isView">{{ row.port }}</span>
196
- <input
197
- v-else
198
- ref="port"
199
- v-model.number="row.port"
200
- type="number"
201
- min="1"
202
- max="65535"
203
- :placeholder="t('servicePorts.rules.listening.placeholder')"
204
- @input="queueUpdate"
205
- >
206
- </div>
207
- <div
208
- v-if="showProtocol"
209
- class="port-protocol"
210
- >
211
- <span v-if="isView">{{ row.protocol }}</span>
212
- <Select
213
- v-else
214
- v-model:value="row.protocol"
215
- :options="protocolOptions"
216
- @update:value="queueUpdate"
217
- />
218
- </div>
219
- <div class="target-port">
220
- <span v-if="isView">{{ row.targetPort }}</span>
221
- <input
222
- v-else
223
- v-model="row.targetPort"
224
- :placeholder="t('servicePorts.rules.target.placeholder')"
225
- @input="queueUpdate"
226
- >
227
- </div>
228
- <div
229
- v-if="showNodePort"
230
- class="node-port"
231
- >
232
- <span v-if="isView">{{ row.nodePort }}</span>
233
- <input
234
- v-else
235
- v-model.number="row.nodePort"
236
- type="number"
237
- min="1"
238
- max="65535"
239
- :placeholder="t('servicePorts.rules.node.placeholder')"
240
- @input="queueUpdate"
241
- >
242
- </div>
243
179
  <div
244
180
  v-if="showRemove"
245
181
  class="remove"
@@ -252,7 +188,106 @@ export default {
252
188
  <t k="generic.remove" />
253
189
  </button>
254
190
  </div>
191
+ <div class="flex">
192
+ <span class="port-name">
193
+ <t k="servicePorts.rules.name.label" />
194
+ </span>
195
+ <div class="port-name">
196
+ <span v-if="isView">{{ row.name }}</span>
197
+ <input
198
+ v-else
199
+ ref="port-name"
200
+ v-model.number="row.name"
201
+ type="text"
202
+ :placeholder="t('servicePorts.rules.name.placeholder')"
203
+ @input="queueUpdate"
204
+ >
205
+ </div>
206
+ </div>
207
+ <div class="flex">
208
+ <span class="port">
209
+ <t k="servicePorts.rules.listening.label" />
210
+ <i
211
+ v-clean-tooltip="t('servicesPage.listeningPorts')"
212
+ class="icon icon-info flex"
213
+ />
214
+ <span class="text-error">*</span>
215
+ </span>
216
+ <div class="port">
217
+ <span v-if="isView">{{ row.port }}</span>
218
+ <input
219
+ v-else
220
+ ref="port"
221
+ v-model.number="row.port"
222
+ type="number"
223
+ min="1"
224
+ max="65535"
225
+ :placeholder="t('servicePorts.rules.listening.placeholder')"
226
+ @input="queueUpdate"
227
+ >
228
+ </div>
229
+ </div>
230
+ <div class="flex" v-if="showProtocol">
231
+ <span
232
+ class="port-protocol"
233
+ >
234
+ <t k="servicePorts.rules.protocol.label" />
235
+ </span>
236
+ <div
237
+ class="port-protocol"
238
+ >
239
+ <span v-if="isView">{{ row.protocol }}</span>
240
+ <Select
241
+ v-else
242
+ v-model:value="row.protocol"
243
+ :options="protocolOptions"
244
+ @update:value="queueUpdate"
245
+ />
246
+ </div>
247
+ </div>
248
+ <div class="flex">
249
+ <span class="target-port">
250
+ <t k="servicePorts.rules.target.label" />
251
+ <i
252
+ v-clean-tooltip="t('servicesPage.targetPorts')"
253
+ class="icon icon-info flex"
254
+ />
255
+ <span class="text-error">*</span>
256
+
257
+ </span>
258
+ <div class="target-port">
259
+ <span v-if="isView">{{ row.targetPort }}</span>
260
+ <input
261
+ v-else
262
+ v-model="row.targetPort"
263
+ :placeholder="t('servicePorts.rules.target.placeholder')"
264
+ @input="queueUpdate"
265
+ >
266
+ </div>
267
+ </div>
268
+ <div class="flex" v-if="showNodePort">
269
+ <span
270
+ class="node-port"
271
+ >
272
+ <t k="servicePorts.rules.node.label" />
273
+ </span>
274
+ <div
275
+ class="node-port"
276
+ >
277
+ <span v-if="isView">{{ row.nodePort }}</span>
278
+ <input
279
+ v-else
280
+ v-model.number="row.nodePort"
281
+ type="number"
282
+ min="1"
283
+ max="65535"
284
+ :placeholder="t('servicePorts.rules.node.placeholder')"
285
+ @input="queueUpdate"
286
+ >
287
+ </div>
288
+ </div>
255
289
  <Error
290
+ style="margin-bottom: 24px;"
256
291
  :value="{...row, idx}"
257
292
  :rules="rules"
258
293
  />
@@ -286,22 +321,60 @@ export default {
286
321
  }
287
322
 
288
323
  .ports-headers, .ports-row{
289
- display: grid;
290
- grid-column-gap: $column-gutter;
291
- margin-bottom: 10px;
324
+ // display: grid;
325
+ // grid-column-gap: $column-gutter;
326
+ // margin-bottom: 10px;
327
+ // align-items: center;
328
+ display: flex;
329
+ flex-direction: column;
330
+
331
+ // &.show-protocol{
332
+ // grid-template-columns: 23% 23% 10% 15% 15% 10%;
333
+ // &:not(.show-node-port){
334
+ // grid-template-columns: 31% 31% 10% 15% 10%;
335
+ // }
336
+ // }
337
+ // &.show-node-port:not(.show-protocol){
338
+ // grid-template-columns: 28% 28% 15% 15% 10%;
339
+ // }
340
+ }
341
+ .flex{
342
+ display: flex;
292
343
  align-items: center;
344
+ margin-bottom: 24px;
345
+ >span:nth-child(1){
346
+ min-width: 160px;
347
+ height: 32px;
348
+ display: flex;
349
+ align-items: center;
350
+ }
293
351
 
294
- &.show-protocol{
295
- grid-template-columns: 23% 23% 10% 15% 15% 10%;
296
- &:not(.show-node-port){
297
- grid-template-columns: 31% 31% 10% 15% 10%;
352
+ .port-name:not(span){
353
+ width: 400px;
354
+
355
+ }
356
+ .port:not(span){
357
+ width: 400px;
358
+ INPUT{
359
+ height: 32px;
360
+ padding-left: 11px;
298
361
  }
299
362
  }
300
- &.show-node-port:not(.show-protocol){
301
- grid-template-columns: 28% 28% 15% 15% 10%;
363
+ .target-port:not(span){
364
+ width: 400px;
365
+ }
366
+ .node-port:not(span){
367
+ width: 400px;
368
+ INPUT{
369
+ height: 32px;
370
+ padding-left: 11px;
371
+ }
302
372
  }
303
373
  }
304
374
 
375
+ .flex:nth-last-child{
376
+ margin-bottom: 0px;
377
+ }
305
378
  .ports-headers {
306
379
  color: var(--input-label);
307
380
  }
@@ -312,6 +385,7 @@ export default {
312
385
 
313
386
  .remove BUTTON {
314
387
  padding: 0px;
388
+ min-width: auto;
315
389
  }
316
390
 
317
391
  .ports-row {
@@ -112,6 +112,7 @@ export default {
112
112
 
113
113
  <style lang="scss" scoped>
114
114
  .compact-select {
115
- height: 40px;
115
+ height: 32px;
116
+ overflow: hidden;
116
117
  }
117
118
  </style>