@nethserver/ns8-ui-lib 0.1.7 → 0.1.10

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.
@@ -12,118 +12,130 @@
12
12
  >
13
13
  {{ label }}
14
14
  </label>
15
- <!-- unlimited checkbox -->
16
- <NsCheckbox
17
- v-if="showUnlimited"
18
- :label="unlimitedLabel"
19
- v-model="internalUnlimited"
20
- :disabled="disabled"
21
- value="checkUnlimited"
22
- class="is-unlimited"
23
- />
24
- <div :class="`${carbonPrefix}--slider-container`">
25
- <span
26
- v-if="internalMinLabel"
27
- :class="`${carbonPrefix}--slider__range-label`"
28
- >{{ internalMinLabel }}</span
29
- >
30
- <div
31
- :class="[
32
- `${carbonPrefix}--slider`,
33
- {
34
- [`${carbonPrefix}--slider--disabled`]:
35
- disabled || internalUnlimited,
36
- },
37
- ]"
38
- data-slider
39
- data-slider-input-box="#slider-input-box"
40
- >
41
- <div
42
- :class="`${carbonPrefix}--slider__track`"
43
- @click="onTrackClick"
44
- ref="track"
45
- ></div>
46
- <div
47
- :class="`${carbonPrefix}--slider__filled-track`"
48
- :style="`width: ${percentage};`"
49
- ></div>
15
+ <!-- unlimited/limited radio buttons -->
16
+ <template v-if="showUnlimited">
17
+ <cv-radio-group vertical :class="{ 'no-mg-bottom': internalUnlimited }">
18
+ <cv-radio-button
19
+ :name="'radio-group-' + uid"
20
+ :label="unlimitedLabel"
21
+ value="unlimited"
22
+ v-model="radioValue"
23
+ :disabled="disabled"
24
+ />
25
+ <cv-radio-button
26
+ :name="'radio-group-' + uid"
27
+ :label="limitedLabel"
28
+ value="limited"
29
+ v-model="radioValue"
30
+ :disabled="disabled"
31
+ />
32
+ </cv-radio-group>
33
+ </template>
34
+ <div v-show="!internalUnlimited">
35
+ <div :class="`${carbonPrefix}--slider-container`">
36
+ <span
37
+ v-if="internalMinLabel"
38
+ :class="`${carbonPrefix}--slider__range-label`"
39
+ >{{ internalMinLabel }}</span
40
+ >
50
41
  <div
51
42
  :class="[
52
- `${carbonPrefix}--slider__thumb`,
43
+ `${carbonPrefix}--slider`,
53
44
  {
54
- [`${carbonPrefix}--slider__thumb--clicked`]: animateClick,
45
+ [`${carbonPrefix}--slider--disabled`]:
46
+ disabled || internalUnlimited,
55
47
  },
56
48
  ]"
57
- tabindex="0"
58
- :aria-labelledby="labelId"
59
- :style="`left: ${percentage};`"
60
- ref="thumb"
61
- @keydown.up.right.prevent="onUp"
62
- @keydown.down.left.prevent="onDown"
63
- @mousedown="onStartDrag"
64
- ></div>
49
+ data-slider
50
+ data-slider-input-box="#slider-input-box"
51
+ >
52
+ <div
53
+ :class="`${carbonPrefix}--slider__track`"
54
+ @click="onTrackClick"
55
+ ref="track"
56
+ ></div>
57
+ <div
58
+ :class="`${carbonPrefix}--slider__filled-track`"
59
+ :style="`width: ${percentage};`"
60
+ ></div>
61
+ <div
62
+ :class="[
63
+ `${carbonPrefix}--slider__thumb`,
64
+ {
65
+ [`${carbonPrefix}--slider__thumb--clicked`]: animateClick,
66
+ },
67
+ ]"
68
+ tabindex="0"
69
+ :aria-labelledby="labelId"
70
+ :style="`left: ${percentage};`"
71
+ ref="thumb"
72
+ @keydown.up.right.prevent="onUp"
73
+ @keydown.down.left.prevent="onDown"
74
+ @mousedown="onStartDrag"
75
+ ></div>
76
+ <input
77
+ :id="uid"
78
+ :class="`${carbonPrefix}--slider__input`"
79
+ type="range"
80
+ :step="step"
81
+ :min="min"
82
+ :max="max"
83
+ ref="range"
84
+ />
85
+ </div>
86
+ <span
87
+ v-if="internalMaxLabel"
88
+ :class="`${carbonPrefix}--slider__range-label`"
89
+ >{{ internalMaxLabel }}</span
90
+ >
65
91
  <input
66
- :id="uid"
67
- :class="`${carbonPrefix}--slider__input`"
68
- type="range"
69
- :step="step"
70
- :min="min"
71
- :max="max"
72
- ref="range"
92
+ type="number"
93
+ :class="[
94
+ `${carbonPrefix}--text-input ${carbonPrefix}--slider-text-input`,
95
+ {
96
+ [`${carbonPrefix}--text-input--light`]: isLight,
97
+ [`${carbonPrefix}--text-input--invalid`]: isInvalid,
98
+ [`${carbonPrefix}--text-input--warning`]: isWarn,
99
+ },
100
+ ,
101
+ 'range-input',
102
+ ]"
103
+ :placeholder="min"
104
+ v-model="internalValue"
105
+ @change="onChange"
106
+ ref="inputBox"
107
+ @keydown.up.prevent="onUp"
108
+ @keydown.down.prevent="onDown"
109
+ :disabled="disabled || internalUnlimited"
73
110
  />
111
+ <!-- MiB/GiB toggle -->
112
+ <cv-radio-group v-if="showMibGibToggle" class="mib-gib">
113
+ <cv-radio-button
114
+ v-model="internalByteUnit"
115
+ name="group-mib-gib"
116
+ label="MiB"
117
+ value="mib"
118
+ :disabled="disabled || internalUnlimited"
119
+ />
120
+ <cv-radio-button
121
+ v-model="internalByteUnit"
122
+ name="group-mib-gib"
123
+ label="GiB"
124
+ value="gib"
125
+ :disabled="disabled || internalUnlimited"
126
+ />
127
+ </cv-radio-group>
74
128
  </div>
75
- <span
76
- v-if="internalMaxLabel"
77
- :class="`${carbonPrefix}--slider__range-label`"
78
- >{{ internalMaxLabel }}</span
79
- >
80
- <input
81
- type="number"
82
- :class="[
83
- `${carbonPrefix}--text-input ${carbonPrefix}--slider-text-input`,
84
- {
85
- [`${carbonPrefix}--text-input--light`]: isLight,
86
- [`${carbonPrefix}--text-input--invalid`]: isInvalid,
87
- [`${carbonPrefix}--text-input--warning`]: isWarn,
88
- },
89
- ,
90
- 'range-input',
91
- ]"
92
- :placeholder="min"
93
- v-model="internalValue"
94
- @change="onChange"
95
- ref="inputBox"
96
- @keydown.up.prevent="onUp"
97
- @keydown.down.prevent="onDown"
129
+ <!-- human readable label -->
130
+ <NsTag
131
+ v-if="showHumanReadableLabel && !internalUnlimited"
132
+ :label="humanReadableLabel"
133
+ :kind="tagKind"
98
134
  :disabled="disabled || internalUnlimited"
99
- />
100
- <!-- MiB/GiB toggle -->
101
- <cv-radio-group v-if="showMibGibToggle" class="mib-gib">
102
- <cv-radio-button
103
- v-model="internalByteUnit"
104
- name="group-mib-gib"
105
- label="MiB"
106
- value="mib"
107
- :disabled="disabled || internalUnlimited"
108
- />
109
- <cv-radio-button
110
- v-model="internalByteUnit"
111
- name="group-mib-gib"
112
- label="GiB"
113
- value="gib"
114
- :disabled="disabled || internalUnlimited"
115
- />
116
- </cv-radio-group>
135
+ class="human-label"
136
+ >
137
+ </NsTag>
117
138
  </div>
118
- <!-- human readable label -->
119
- <NsTag
120
- v-if="showHumanReadableLabel && !internalUnlimited"
121
- :label="humanReadableLabel"
122
- :kind="tagKind"
123
- :disabled="disabled || internalUnlimited"
124
- class="human-label"
125
- >
126
- </NsTag>
127
139
  </div>
128
140
  <div :class="`${carbonPrefix}--form-requirement`" v-if="isInvalid">
129
141
  <slot name="invalid-message">{{ invalidMessage }}</slot>
@@ -175,6 +187,7 @@ export default {
175
187
  isUnlimited: { type: Boolean, default: false },
176
188
  byteUnit: { type: String, default: "gib" },
177
189
  unlimitedLabel: { type: String, default: "Unlimited" },
190
+ limitedLabel: { type: String, default: "Limited" },
178
191
  showHumanReadableLabel: { type: Boolean, default: false },
179
192
  showMibGibToggle: { type: Boolean, default: false },
180
193
  tagKind: { type: String, default: "high-contrast" },
@@ -192,9 +205,9 @@ export default {
192
205
  dragStartX: 0,
193
206
  dragStartValue: 0,
194
207
  percentage: "0%",
195
- internalUnlimited: false,
196
208
  internalByteUnit: "gib",
197
209
  isInvalid: false,
210
+ radioValue: "limited",
198
211
  };
199
212
  },
200
213
  computed: {
@@ -220,9 +233,12 @@ export default {
220
233
  return this.mibFormat(this.internalValue);
221
234
  }
222
235
  },
236
+ internalUnlimited() {
237
+ return this.radioValue === "unlimited";
238
+ },
223
239
  },
224
240
  created() {
225
- this.internalUnlimited = this.isUnlimited;
241
+ this.radioValue = this.isUnlimited ? "unlimited" : "limited";
226
242
  this.internalByteUnit = this.byteUnit;
227
243
  },
228
244
  mounted() {
@@ -257,7 +273,7 @@ export default {
257
273
  });
258
274
  },
259
275
  isUnlimited() {
260
- this.internalUnlimited = this.isUnlimited;
276
+ this.radioValue = this.isUnlimited ? "unlimited" : "limited";
261
277
  },
262
278
  internalUnlimited() {
263
279
  if (this.internalUnlimited) {
@@ -438,11 +454,6 @@ export default {
438
454
  </script>
439
455
 
440
456
  <style scoped lang="scss">
441
- .is-unlimited {
442
- margin-top: 0.5rem !important;
443
- margin-bottom: 0.5rem !important;
444
- }
445
-
446
457
  .range-input {
447
458
  margin-top: 0.5rem !important;
448
459
  }
@@ -456,6 +467,10 @@ export default {
456
467
  .human-label {
457
468
  margin-top: 1rem;
458
469
  }
470
+
471
+ .ns-byte-slider .cv-radio-group.bx--form-item {
472
+ margin-bottom: 0.5rem;
473
+ }
459
474
  </style>
460
475
 
461
476
  <style lang="scss">
@@ -12,101 +12,113 @@
12
12
  >
13
13
  {{ label }}
14
14
  </label>
15
- <!-- unlimited checkbox -->
16
- <NsCheckbox
17
- v-if="showUnlimited"
18
- :label="unlimitedLabel"
19
- v-model="internalUnlimited"
20
- :disabled="disabled"
21
- value="checkUnlimited"
22
- class="is-unlimited"
23
- />
24
- <div :class="`${carbonPrefix}--slider-container`">
25
- <span
26
- v-if="internalMinLabel"
27
- :class="`${carbonPrefix}--slider__range-label`"
28
- >{{ internalMinLabel }}</span
29
- >
30
- <div
31
- :class="[
32
- `${carbonPrefix}--slider`,
33
- {
34
- [`${carbonPrefix}--slider--disabled`]:
35
- disabled || internalUnlimited,
36
- },
37
- ]"
38
- data-slider
39
- data-slider-input-box="#slider-input-box"
40
- >
41
- <div
42
- :class="`${carbonPrefix}--slider__track`"
43
- @click="onTrackClick"
44
- ref="track"
45
- ></div>
46
- <div
47
- :class="`${carbonPrefix}--slider__filled-track`"
48
- :style="`width: ${percentage};`"
49
- ></div>
15
+ <!-- unlimited/limited radio buttons -->
16
+ <template v-if="showUnlimited">
17
+ <cv-radio-group vertical :class="{ 'no-mg-bottom': internalUnlimited }">
18
+ <cv-radio-button
19
+ :name="'radio-group-' + uid"
20
+ :label="unlimitedLabel"
21
+ value="unlimited"
22
+ v-model="radioValue"
23
+ :disabled="disabled"
24
+ />
25
+ <cv-radio-button
26
+ :name="'radio-group-' + uid"
27
+ :label="limitedLabel"
28
+ value="limited"
29
+ v-model="radioValue"
30
+ :disabled="disabled"
31
+ />
32
+ </cv-radio-group>
33
+ </template>
34
+ <div v-show="!internalUnlimited">
35
+ <div :class="`${carbonPrefix}--slider-container`">
36
+ <span
37
+ v-if="internalMinLabel"
38
+ :class="`${carbonPrefix}--slider__range-label`"
39
+ >{{ internalMinLabel }}</span
40
+ >
50
41
  <div
51
42
  :class="[
52
- `${carbonPrefix}--slider__thumb`,
43
+ `${carbonPrefix}--slider`,
53
44
  {
54
- [`${carbonPrefix}--slider__thumb--clicked`]: animateClick,
45
+ [`${carbonPrefix}--slider--disabled`]:
46
+ disabled || internalUnlimited,
55
47
  },
56
48
  ]"
57
- tabindex="0"
58
- :aria-labelledby="labelId"
59
- :style="`left: ${percentage};`"
60
- ref="thumb"
61
- @keydown.up.right.prevent="onUp"
62
- @keydown.down.left.prevent="onDown"
63
- @mousedown="onStartDrag"
64
- ></div>
49
+ data-slider
50
+ data-slider-input-box="#slider-input-box"
51
+ >
52
+ <div
53
+ :class="`${carbonPrefix}--slider__track`"
54
+ @click="onTrackClick"
55
+ ref="track"
56
+ ></div>
57
+ <div
58
+ :class="`${carbonPrefix}--slider__filled-track`"
59
+ :style="`width: ${percentage};`"
60
+ ></div>
61
+ <div
62
+ :class="[
63
+ `${carbonPrefix}--slider__thumb`,
64
+ {
65
+ [`${carbonPrefix}--slider__thumb--clicked`]: animateClick,
66
+ },
67
+ ]"
68
+ tabindex="0"
69
+ :aria-labelledby="labelId"
70
+ :style="`left: ${percentage};`"
71
+ ref="thumb"
72
+ @keydown.up.right.prevent="onUp"
73
+ @keydown.down.left.prevent="onDown"
74
+ @mousedown="onStartDrag"
75
+ ></div>
76
+ <input
77
+ :id="uid"
78
+ :class="`${carbonPrefix}--slider__input`"
79
+ type="range"
80
+ :step="step"
81
+ :min="min"
82
+ :max="max"
83
+ ref="range"
84
+ />
85
+ </div>
86
+ <span
87
+ v-if="internalMaxLabel"
88
+ :class="`${carbonPrefix}--slider__range-label`"
89
+ >{{ internalMaxLabel }}</span
90
+ >
65
91
  <input
66
- :id="uid"
67
- :class="`${carbonPrefix}--slider__input`"
68
- type="range"
69
- :step="step"
70
- :min="min"
71
- :max="max"
72
- ref="range"
92
+ type="number"
93
+ :class="[
94
+ `${carbonPrefix}--text-input ${carbonPrefix}--slider-text-input`,
95
+ {
96
+ [`${carbonPrefix}--text-input--light`]: isLight,
97
+ [`${carbonPrefix}--text-input--invalid`]: isInvalid,
98
+ [`${carbonPrefix}--text-input--warning`]: isWarn,
99
+ },
100
+ ,
101
+ 'range-input',
102
+ ]"
103
+ :placeholder="min"
104
+ v-model="internalValue"
105
+ @change="onChange"
106
+ ref="inputBox"
107
+ @keydown.up.prevent="onUp"
108
+ @keydown.down.prevent="onDown"
109
+ :disabled="disabled || internalUnlimited"
73
110
  />
111
+ <span
112
+ :class="[
113
+ `unit-label`,
114
+ {
115
+ [`${carbonPrefix}--label--disabled`]:
116
+ disabled || internalUnlimited,
117
+ },
118
+ ]"
119
+ >{{ unitLabel }}</span
120
+ >
74
121
  </div>
75
- <span
76
- v-if="internalMaxLabel"
77
- :class="`${carbonPrefix}--slider__range-label`"
78
- >{{ internalMaxLabel }}</span
79
- >
80
- <input
81
- type="number"
82
- :class="[
83
- `${carbonPrefix}--text-input ${carbonPrefix}--slider-text-input`,
84
- {
85
- [`${carbonPrefix}--text-input--light`]: isLight,
86
- [`${carbonPrefix}--text-input--invalid`]: isInvalid,
87
- [`${carbonPrefix}--text-input--warning`]: isWarn,
88
- },
89
- ,
90
- 'range-input',
91
- ]"
92
- :placeholder="min"
93
- v-model="internalValue"
94
- @change="onChange"
95
- ref="inputBox"
96
- @keydown.up.prevent="onUp"
97
- @keydown.down.prevent="onDown"
98
- :disabled="disabled || internalUnlimited"
99
- />
100
- <span
101
- :class="[
102
- `unit-label`,
103
- {
104
- [`${carbonPrefix}--label--disabled`]:
105
- disabled || internalUnlimited,
106
- },
107
- ]"
108
- >{{ unitLabel }}</span
109
- >
110
122
  </div>
111
123
  </div>
112
124
  <div :class="`${carbonPrefix}--form-requirement`" v-if="isInvalid">
@@ -158,6 +170,7 @@ export default {
158
170
  showUnlimited: { type: Boolean, default: false },
159
171
  isUnlimited: { type: Boolean, default: false },
160
172
  unlimitedLabel: { type: String, default: "Unlimited" },
173
+ limitedLabel: { type: String, default: "Limited" },
161
174
  invalidMessage: { type: String, default: "" },
162
175
  unitLabel: { type: String, default: "" },
163
176
  },
@@ -173,8 +186,8 @@ export default {
173
186
  dragStartX: 0,
174
187
  dragStartValue: 0,
175
188
  percentage: "0%",
176
- internalUnlimited: false,
177
189
  isInvalid: false,
190
+ radioValue: "limited",
178
191
  };
179
192
  },
180
193
  computed: {
@@ -192,9 +205,12 @@ export default {
192
205
  // default to 4 fro multiplier
193
206
  return isNaN(intMultiplier) ? 4 : Math.max(intMultiplier, 1);
194
207
  },
208
+ internalUnlimited() {
209
+ return this.radioValue === "unlimited";
210
+ },
195
211
  },
196
212
  created() {
197
- this.internalUnlimited = this.isUnlimited;
213
+ this.radioValue = this.isUnlimited ? "unlimited" : "limited";
198
214
  },
199
215
  mounted() {
200
216
  this.$refs.range.value = this.value;
@@ -228,7 +244,7 @@ export default {
228
244
  });
229
245
  },
230
246
  isUnlimited() {
231
- this.internalUnlimited = this.isUnlimited;
247
+ this.radioValue = this.isUnlimited ? "unlimited" : "limited";
232
248
  },
233
249
  internalUnlimited() {
234
250
  if (this.internalUnlimited) {
@@ -364,11 +380,6 @@ export default {
364
380
  </script>
365
381
 
366
382
  <style scoped lang="scss">
367
- .is-unlimited {
368
- margin-top: 0.5rem !important;
369
- margin-bottom: 0.5rem !important;
370
- }
371
-
372
383
  .range-input {
373
384
  margin-top: 0.5rem !important;
374
385
  }
@@ -377,6 +388,10 @@ export default {
377
388
  margin-top: 0.5rem !important;
378
389
  margin-left: 1rem;
379
390
  }
391
+
392
+ .ns-slider .cv-radio-group.bx--form-item {
393
+ margin-bottom: 0.5rem;
394
+ }
380
395
  </style>
381
396
 
382
397
  <style lang="scss">