dashboard-shell-shell 1.0.113 → 1.0.114

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 (119) hide show
  1. package/components/ActionDropdown.vue +1 -1
  2. package/components/ActionMenu.vue +2 -2
  3. package/components/ActionMenuShell.vue +0 -1
  4. package/components/AppModal.vue +6 -78
  5. package/components/AssignTo.vue +11 -25
  6. package/components/AsyncButton.vue +7 -24
  7. package/components/BannerGraphic.vue +0 -1
  8. package/components/ButtonDropdown.vue +4 -26
  9. package/components/ButtonGroup.vue +0 -4
  10. package/components/ButtonMultiAction.vue +0 -1
  11. package/components/CommunityLinks.vue +3 -3
  12. package/components/ConsumptionGauge.vue +5 -24
  13. package/components/CopyToClipboardText.vue +1 -2
  14. package/components/CruResource.vue +7 -12
  15. package/components/CruResourceFooter.vue +2 -2
  16. package/components/DashboardOptions.vue +15 -21
  17. package/components/DetailText.vue +0 -5
  18. package/components/DisableAuthProviderModal.vue +0 -1
  19. package/components/ExplorerMembers.vue +1 -1
  20. package/components/ExplorerProjectsNamespaces.vue +14 -56
  21. package/components/FixedBanner.vue +12 -19
  22. package/components/GlobalRoleBindings.vue +1 -5
  23. package/components/GrafanaDashboard.vue +4 -4
  24. package/components/GrowlManager.vue +1 -4
  25. package/components/HardwareResourceGauge.vue +3 -39
  26. package/components/InfoBox.vue +3 -3
  27. package/components/InputOrDisplay.vue +2 -28
  28. package/components/LabelValue.vue +1 -16
  29. package/components/LandingPagePreference.vue +3 -5
  30. package/components/LocaleSelector.vue +93 -39
  31. package/components/ModalWithCard.vue +0 -2
  32. package/components/MoveModal.vue +0 -1
  33. package/components/PromptChangePassword.vue +1 -1
  34. package/components/PromptModal.vue +2 -15
  35. package/components/PromptRemove.vue +8 -28
  36. package/components/PromptRestore.vue +0 -1
  37. package/components/ResourceCancelModal.vue +0 -1
  38. package/components/ResourceDetail/Masthead.vue +43 -188
  39. package/components/ResourceDetail/__tests__/Masthead.test.ts +1 -5
  40. package/components/ResourceDetail/index.vue +14 -49
  41. package/components/ResourceList/Masthead.vue +18 -80
  42. package/components/ResourceTable.vue +19 -60
  43. package/components/SideNav.vue +12 -32
  44. package/components/SortableTable/THead.vue +5 -34
  45. package/components/SortableTable/actions.js +1 -1
  46. package/components/SortableTable/index.vue +142 -649
  47. package/components/SortableTable/paging.js +28 -36
  48. package/components/SortableTable/selection.js +11 -0
  49. package/components/Tabbed/Tab.vue +3 -3
  50. package/components/Tabbed/index.vue +26 -44
  51. package/components/Wizard.vue +2 -2
  52. package/components/__tests__/AsyncButton.test.ts +2 -2
  53. package/components/__tests__/FixedBanner.test.ts +3 -3
  54. package/components/auth/Principal.vue +3 -10
  55. package/components/auth/__tests__/RoleDetailEdit.test.ts +2 -3
  56. package/components/form/ArrayList.vue +85 -123
  57. package/components/form/ArrayListGrouped.vue +2 -10
  58. package/components/form/Command.vue +15 -6
  59. package/components/form/EnvVars.vue +8 -16
  60. package/components/form/Footer.vue +5 -8
  61. package/components/form/HealthCheck.vue +3 -3
  62. package/components/form/HookOption.vue +16 -11
  63. package/components/form/KeyValue.vue +7 -16
  64. package/components/form/LabeledSelect.vue +76 -59
  65. package/components/form/LifecycleHooks.vue +3 -3
  66. package/components/form/MatchExpressions.vue +12 -35
  67. package/components/form/NameNsDescription.vue +115 -147
  68. package/components/form/Networking.vue +12 -20
  69. package/components/form/NodeAffinity.vue +23 -31
  70. package/components/form/NodeScheduling.vue +3 -13
  71. package/components/form/Password.vue +5 -11
  72. package/components/form/PodAffinity.vue +44 -43
  73. package/components/form/Probe.vue +66 -68
  74. package/components/form/ResourceQuota/Project.vue +1 -5
  75. package/components/form/ResourceSelector.vue +9 -7
  76. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +3 -6
  77. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +1 -12
  78. package/components/form/SSHKnownHosts/index.vue +2 -16
  79. package/components/form/Security.vue +56 -54
  80. package/components/form/Select.vue +7 -41
  81. package/components/form/ShellInput.vue +1 -5
  82. package/components/form/Tolerations.vue +1 -5
  83. package/components/form/UnitInput.vue +2 -2
  84. package/components/form/ValueFromResource.vue +121 -134
  85. package/components/form/WorkloadPorts.vue +18 -18
  86. package/components/form/__tests__/ArrayList.test.ts +2 -5
  87. package/components/form/__tests__/MatchExpressions.test.ts +12 -12
  88. package/components/form/__tests__/NameNsDescription.test.ts +14 -115
  89. package/components/form/__tests__/Probe.test.ts +8 -12
  90. package/components/form/__tests__/SSHKnownHosts.test.ts +0 -11
  91. package/components/form/__tests__/Select.test.ts +0 -37
  92. package/components/form/__tests__/UnitInput.test.ts +5 -4
  93. package/components/formatter/BadgeStateFormatter.vue +5 -8
  94. package/components/formatter/ExtensionCache.vue +74 -0
  95. package/components/formatter/InternalExternalIP.vue +0 -2
  96. package/components/formatter/Port.vue +24 -0
  97. package/components/formatter/SecretData.vue +7 -20
  98. package/components/formatter/SecretType.vue +41 -0
  99. package/components/nav/Favorite.vue +1 -5
  100. package/components/nav/Group.vue +27 -60
  101. package/components/nav/Header.vue +13 -39
  102. package/components/nav/Jump.vue +0 -7
  103. package/components/nav/NamespaceFilter.vue +8 -14
  104. package/components/nav/Pinned.vue +1 -1
  105. package/components/nav/TopLevelMenu.vue +17 -5
  106. package/components/nav/Type.vue +35 -32
  107. package/components/nav/__tests__/TopLevelMenu.test.ts +40 -0
  108. package/components/templates/blank.vue +1 -4
  109. package/components/templates/default.vue +0 -8
  110. package/components/templates/home.vue +1 -10
  111. package/components/templates/plain.vue +1 -10
  112. package/package.json +1 -1
  113. package/components/ActionDropdownShell.vue +0 -71
  114. package/components/DotState.vue +0 -84
  115. package/components/ModalManager.vue +0 -55
  116. package/components/SlideInPanelManager.vue +0 -126
  117. package/components/StatusBadge.vue +0 -77
  118. package/components/__tests__/ModalManager.spec.ts +0 -176
  119. package/components/__tests__/SlideInPanelManager.spec.ts +0 -166
@@ -1,5 +1,4 @@
1
1
  <script>
2
- import { ref, watch, computed } from 'vue';
3
2
  import debounce from 'lodash/debounce';
4
3
  import { _EDIT, _VIEW } from '@shell/config/query-params';
5
4
  import { removeAt } from '@shell/utils/array';
@@ -95,87 +94,22 @@ export default {
95
94
  // we only want functions in the rules array
96
95
  validator: (rules) => rules.every((rule) => ['function'].includes(typeof rule))
97
96
  },
98
- a11yLabel: {
99
- type: String,
100
- default: '',
101
- },
102
- componentTestid: {
103
- type: String,
104
- default: 'array-list',
105
- }
106
97
  },
107
-
108
- setup(props, { emit }) {
109
- const input = (Array.isArray(props.value) ? props.value : []).slice();
110
- const rows = ref([]);
98
+ data() {
99
+ const input = (Array.isArray(this.value) ? this.value : []).slice();
100
+ const rows = [];
111
101
 
112
102
  for ( const value of input ) {
113
- rows.value.push({ value });
103
+ rows.push({ value });
114
104
  }
115
- if ( !rows.value.length && props.initialEmptyRow ) {
116
- const value = props.defaultAddValue ? clone(props.defaultAddValue) : '';
105
+ if ( !rows.length && this.initialEmptyRow ) {
106
+ const value = this.defaultAddValue ? clone(this.defaultAddValue) : '';
117
107
 
118
- rows.value.push({ value });
108
+ rows.push({ value });
119
109
  }
120
110
 
121
- const isView = computed(() => {
122
- return props.mode === _VIEW;
123
- });
124
-
125
- /**
126
- * Cleanup rows and emit input
127
- */
128
- const update = () => {
129
- if ( isView.value ) {
130
- return;
131
- }
132
- const out = [];
133
-
134
- for ( const row of rows.value ) {
135
- const trim = !props.valueMultiline && (typeof row.value === 'string');
136
- const value = trim ? row.value.trim() : row.value;
137
-
138
- if ( typeof value !== 'undefined' ) {
139
- out.push(value);
140
- }
141
- }
142
- emit('update:value', out);
143
- };
144
-
145
- const lastUpdateWasFromValue = ref(false);
146
- const queueUpdate = debounce(update, 50);
147
-
148
- watch(
149
- rows,
150
- () => {
151
- // lastUpdateWasFromValue is used to break a cycle where when rows are updated
152
- // this was called which then forced rows to updated again
153
- if (!lastUpdateWasFromValue.value) {
154
- queueUpdate();
155
- }
156
- lastUpdateWasFromValue.value = false;
157
- },
158
- { deep: true }
159
- );
160
-
161
- watch(
162
- () => props.value,
163
- () => {
164
- lastUpdateWasFromValue.value = true;
165
- rows.value = (props.value || []).map((v) => ({ value: v }));
166
- },
167
- { deep: true }
168
- );
169
-
170
- return {
171
- rows,
172
- lastUpdateWasFromValue,
173
- queueUpdate,
174
- isView,
175
- update,
176
- };
111
+ return { rows, lastUpdateWasFromValue: false };
177
112
  },
178
-
179
113
  computed: {
180
114
  _addLabel() {
181
115
  return this.addLabel || this.t('generic.add');
@@ -183,6 +117,10 @@ export default {
183
117
  _removeLabel() {
184
118
  return this.removeLabel || this.t('generic.remove');
185
119
  },
120
+
121
+ isView() {
122
+ return this.mode === _VIEW;
123
+ },
186
124
  showAdd() {
187
125
  return this.addAllowed;
188
126
  },
@@ -203,7 +141,29 @@ export default {
203
141
  return !this.valueMultiline && this.protip;
204
142
  }
205
143
  },
144
+ watch: {
145
+ value: {
146
+ deep: true,
147
+ handler() {
148
+ this.lastUpdateWasFromValue = true;
149
+ this.rows = (this.value || []).map((v) => ({ value: v }));
150
+ }
151
+ },
152
+
153
+ rows: {
154
+ deep: true,
155
+ handler(newValue, oldValue) {
156
+ // lastUpdateWasFromValue is used to break a cycle where when rows are updated
157
+ // this was called which then forced rows to updated again
158
+ if (!this.lastUpdateWasFromValue) {
159
+ this.queueUpdate();
160
+ }
161
+ this.lastUpdateWasFromValue = false;
162
+ }
163
+ }
164
+ },
206
165
  created() {
166
+ this.queueUpdate = debounce(this.update, 50);
207
167
  },
208
168
  methods: {
209
169
  add() {
@@ -229,6 +189,26 @@ export default {
229
189
  this.queueUpdate();
230
190
  },
231
191
 
192
+ /**
193
+ * Cleanup rows and emit input
194
+ */
195
+ update() {
196
+ if ( this.isView ) {
197
+ return;
198
+ }
199
+ const out = [];
200
+
201
+ for ( const row of this.rows ) {
202
+ const trim = !this.valueMultiline && (typeof row.value === 'string');
203
+ const value = trim ? row.value.trim() : row.value;
204
+
205
+ if ( typeof value !== 'undefined' ) {
206
+ out.push(value);
207
+ }
208
+ }
209
+ this.$emit('update:value', out);
210
+ },
211
+
232
212
  /**
233
213
  * Handle paste event, e.g. split multiple lines in rows
234
214
  */
@@ -274,32 +254,7 @@ export default {
274
254
  </h3>
275
255
  </slot>
276
256
  </div>
277
- <div
278
- v-if="showAdd && !isView"
279
- class="footer"
280
- >
281
- <slot
282
- v-if="showAdd"
283
- name="add"
284
- :add="add"
285
- >
286
- <button
287
- type="button"
288
- class="btn role-primary add"
289
- :disabled="loading || disableAdd"
290
- :data-testid="`${componentTestid}-button`"
291
- :aria-label="_addLabel"
292
- role="button"
293
- @click="add()"
294
- >
295
- <i
296
- class="mr-5 icon"
297
- :class="loading ? ['icon-lg', 'icon-spinner','icon-spin']: [addIcon]"
298
- />
299
- {{ _addLabel }}
300
- </button>
301
- </slot>
302
- </div>
257
+
303
258
  <template v-if="rows.length">
304
259
  <div v-if="showHeader">
305
260
  <slot name="column-headers">
@@ -311,7 +266,7 @@ export default {
311
266
  <div
312
267
  v-for="(row, idx) in rows"
313
268
  :key="idx"
314
- :data-testid="`${componentTestid}-box${ idx }`"
269
+ :data-testid="`array-list-box${ idx }`"
315
270
  class="box"
316
271
  >
317
272
  <slot
@@ -335,7 +290,7 @@ export default {
335
290
  v-if="valueMultiline"
336
291
  ref="value"
337
292
  v-model:value="row.value"
338
- :data-testid="`${componentTestid}-textarea-${idx}`"
293
+ :data-testid="`textarea-${idx}`"
339
294
  :placeholder="valuePlaceholder"
340
295
  :mode="mode"
341
296
  :disabled="disabled"
@@ -346,7 +301,7 @@ export default {
346
301
  v-else-if="rules.length > 0"
347
302
  ref="value"
348
303
  v-model:value="row.value"
349
- :data-testid="`${componentTestid}-labeled-input-${idx}`"
304
+ :data-testid="`labeled-input-${idx}`"
350
305
  :placeholder="valuePlaceholder"
351
306
  :disabled="isView || disabled"
352
307
  :rules="rules"
@@ -358,10 +313,9 @@ export default {
358
313
  v-else
359
314
  ref="value"
360
315
  v-model="row.value"
361
- :data-testid="`${componentTestid}-input-${idx}`"
316
+ :data-testid="`input-${idx}`"
362
317
  :placeholder="valuePlaceholder"
363
318
  :disabled="isView || disabled"
364
- :aria-label="a11yLabel ? a11yLabel : undefined"
365
319
  @paste="onPaste(idx, $event)"
366
320
  >
367
321
  </slot>
@@ -381,9 +335,7 @@ export default {
381
335
  type="button"
382
336
  :disabled="isView"
383
337
  class="btn role-link"
384
- :data-testid="`${componentTestid}-remove-item-${idx}`"
385
- :aria-label="`${_removeLabel} ${idx + 1}`"
386
- role="button"
338
+ :data-testid="`remove-item-${idx}`"
387
339
  @click="remove(row, idx)"
388
340
  >
389
341
  {{ _removeLabel }}
@@ -402,7 +354,30 @@ export default {
402
354
  </div>
403
355
  </slot>
404
356
  </div>
405
-
357
+ <div
358
+ v-if="showAdd && !isView"
359
+ class="footer mt-20"
360
+ >
361
+ <slot
362
+ v-if="showAdd"
363
+ name="add"
364
+ :add="add"
365
+ >
366
+ <button
367
+ type="button"
368
+ class="btn role-tertiary add"
369
+ :disabled="loading || disableAdd"
370
+ data-testid="array-list-button"
371
+ @click="add()"
372
+ >
373
+ <i
374
+ class="mr-5 icon"
375
+ :class="loading ? ['icon-lg', 'icon-spinner','icon-spin']: [addIcon]"
376
+ />
377
+ {{ _addLabel }}
378
+ </button>
379
+ </slot>
380
+ </div>
406
381
  </div>
407
382
  </template>
408
383
 
@@ -423,12 +398,7 @@ export default {
423
398
  .value {
424
399
  flex: 1;
425
400
  INPUT {
426
- height: $input-height;
427
- border: solid var(--border-width) var(--input-border);
428
- padding: 4px 11px;
429
- &:hover{
430
- box-shadow: 0 4px 6px 0 var(--input-border-box-shadow);
431
- }
401
+ height: $unlabeled-input-height;
432
402
  }
433
403
  }
434
404
  }
@@ -436,7 +406,6 @@ export default {
436
406
  text-align: right;
437
407
  }
438
408
  .footer {
439
- margin-bottom: 24px;
440
409
  .protip {
441
410
  float: right;
442
411
  padding: 5px 0;
@@ -446,11 +415,4 @@ export default {
446
415
  .required {
447
416
  color: var(--error);
448
417
  }
449
- :deep() .labeled-input.compact-input{
450
- padding: 0px;
451
- }
452
- :deep() .box{
453
- margin-bottom: 10px;
454
- }
455
-
456
418
  </style>
@@ -127,16 +127,8 @@ export default {
127
127
  & > .remove {
128
128
  position: absolute;
129
129
 
130
- top: 10px;
131
- right: 10px;
132
- & > .close{
133
- width: 32px;
134
- min-width: 32px !important;
135
- color: var(--body-text);
136
- &:hover{
137
- color: var(--link);
138
- }
139
- }
130
+ top: 0;
131
+ right: 0;
140
132
  }
141
133
 
142
134
  & > .info-box {
@@ -43,14 +43,23 @@ export default {
43
43
  },
44
44
 
45
45
  data() {
46
+ const {
47
+ command,
48
+ args,
49
+ workingDir,
50
+ stdin = false,
51
+ stdinOnce = false,
52
+ tty = false,
53
+ } = this.value;
54
+
46
55
  return {
47
- args: this.value.args,
48
- command: this.value.command,
56
+ args,
57
+ command,
49
58
  commandOptions: ['No', 'Once', 'Yes'],
50
- stdin: this.value.stdin || false,
51
- stdinOnce: this.value.stdin || false,
52
- tty: this.value.tty || false,
53
- workingDir: this.value.workingDir,
59
+ stdin,
60
+ stdinOnce,
61
+ tty,
62
+ workingDir,
54
63
  };
55
64
  },
56
65
 
@@ -39,10 +39,14 @@ export default {
39
39
  },
40
40
 
41
41
  data() {
42
+ const { env = [], envFrom = [] } = this.value;
43
+
44
+ const allEnv = [...env, ...envFrom].map((row) => {
45
+ return { value: row, id: randomStr(4) };
46
+ });
47
+
42
48
  return {
43
- env: [],
44
- envFrom: [],
45
- allEnv: [],
49
+ env, envFrom, allEnv
46
50
  };
47
51
  },
48
52
 
@@ -59,18 +63,7 @@ export default {
59
63
  }
60
64
  }
61
65
  },
62
-
63
66
  created() {
64
- const { env = [], envFrom = [] } = this.value;
65
-
66
- const allEnv = [...env, ...envFrom].map((row) => {
67
- return { value: row, id: randomStr(4) };
68
- });
69
-
70
- this.env = env;
71
- this.envFrom = envFrom;
72
- this.allEnv = allEnv;
73
-
74
67
  this.queueUpdate = debounce(this.update, 500);
75
68
  },
76
69
 
@@ -114,8 +107,7 @@ export default {
114
107
  <div :style="{'width':'100%'}">
115
108
  <div
116
109
  v-for="(row, i) in allEnv"
117
- :key="row.id"
118
- :data-testid="`env-var-row-${i}`"
110
+ :key="i"
119
111
  >
120
112
  <ValueFromResource
121
113
  v-model:value="row.value"
@@ -91,10 +91,9 @@ export default defineComponent({
91
91
 
92
92
  <style lang='scss'>
93
93
  .buttons {
94
- /* display: grid;
94
+ display: grid;
95
95
  grid-template-areas: "left right";
96
- grid-template-columns: "min-content auto"; */
97
- display: flex;
96
+ grid-template-columns: "min-content auto";
98
97
 
99
98
  .left {
100
99
  grid-area: left;
@@ -106,13 +105,11 @@ export default defineComponent({
106
105
  }
107
106
 
108
107
  .right {
109
- /* grid-area: right;
110
- text-align: right; */
111
- display: flex;
108
+ grid-area: right;
109
+ text-align: right;
112
110
 
113
111
  .btn, button {
114
- /* margin: 0 0 0 $column-gutter; */
115
- margin: 0 10px 0 0px;
112
+ margin: 0 0 0 $column-gutter;
116
113
  }
117
114
  }
118
115
  }
@@ -18,10 +18,10 @@ export default {
18
18
  },
19
19
 
20
20
  data() {
21
+ const { readinessProbe, livenessProbe, startupProbe } = this.value;
22
+
21
23
  return {
22
- readinessProbe: this.value.readinessProbe,
23
- livenessProbe: this.value.livenessProbe,
24
- startupProbe: this.value.startupProbe,
24
+ readinessProbe, livenessProbe, startupProbe
25
25
  };
26
26
  },
27
27
 
@@ -28,18 +28,23 @@ export default {
28
28
  },
29
29
 
30
30
  data() {
31
+ const selectHook = null;
32
+
33
+ const defaultExec = { exec: { command: [] } };
34
+ const defaultHttpGet = {
35
+ httpGet: {
36
+ host: '',
37
+ path: '',
38
+ port: null,
39
+ scheme: '',
40
+ httpHeaders: null
41
+ }
42
+ };
43
+
31
44
  return {
32
- selectHook: null,
33
- defaultExec: { exec: { command: [] } },
34
- defaultHttpGet: {
35
- httpGet: {
36
- host: '',
37
- path: '',
38
- port: null,
39
- scheme: '',
40
- httpHeaders: null
41
- }
42
- },
45
+ selectHook,
46
+ defaultExec,
47
+ defaultHttpGet,
43
48
  schemeOptions: ['HTTP', 'HTTPS']
44
49
  };
45
50
  },
@@ -277,7 +277,7 @@ export default {
277
277
  const gap = this.canRemove ? ' 50px' : '';
278
278
  const size = 2 + this.extraColumns.length;
279
279
 
280
- return `grid-template-columns: repeat(${ size }, 400px)${ gap };`;
280
+ return `grid-template-columns: repeat(${ size }, 1fr)${ gap };`;
281
281
  },
282
282
  usedKeyOptions() {
283
283
  return this.rows.map((row) => row[this.keyName]);
@@ -760,7 +760,7 @@ export default {
760
760
  :disabled="disabled || isProtected(row.key)"
761
761
  :mode="mode"
762
762
  :placeholder="_valuePlaceholder"
763
- :min-height="32"
763
+ :min-height="40"
764
764
  :spellcheck="false"
765
765
  :aria-label="t('generic.ariaLabel.value', {index: i})"
766
766
  @update:value="queueUpdate"
@@ -823,7 +823,7 @@ export default {
823
823
  type="button"
824
824
  role="button"
825
825
  :disabled="isView || isProtected(row.key) || disabled"
826
- :aria-label="`${removeLabel || t('generic.remove')} ${ i+1 }`"
826
+ :aria-label="removeLabel || t('generic.remove')"
827
827
  class="btn role-link"
828
828
  @click="remove(i)"
829
829
  >
@@ -837,7 +837,7 @@ export default {
837
837
  </div>
838
838
  <div
839
839
  v-if="(addAllowed || readAllowed) && !isView"
840
- class="footer mt-10"
840
+ class="footer mt-20"
841
841
  >
842
842
  <slot
843
843
  name="add"
@@ -880,8 +880,8 @@ export default {
880
880
  }
881
881
  .kv-container {
882
882
  display: grid;
883
- /* align-items: center; */
884
- column-gap: 10px;
883
+ align-items: center;
884
+ column-gap: 20px;
885
885
  label {
886
886
  margin-bottom: 0;
887
887
  }
@@ -905,9 +905,6 @@ export default {
905
905
  }
906
906
  &.value textarea {
907
907
  padding: 10px 10px 10px 10px;
908
- min-height:32px;
909
- line-height: 12px;
910
- border: solid var(--border-width) var(--input-border);
911
908
  }
912
909
 
913
910
  .text-monospace:not(.conceal) {
@@ -946,14 +943,8 @@ export default {
946
943
  }
947
944
  }
948
945
  input {
949
- height: 32px;
946
+ height: 40px;
950
947
  line-height: 1;
951
- border: solid var(--border-width) var(--input-border);
952
- padding: 4px 11px;
953
- &:hover{
954
- border: solid var(--border-width) var(--input-border);
955
- box-shadow: 0 4px 6px 0 var(--input-border-box-shadow);
956
- }
957
948
  }
958
949
  .footer {
959
950
  .protip {