@rancher/shell 0.3.16 → 0.3.17

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 (144) hide show
  1. package/assets/images/wechat-qr-code.jpg +0 -0
  2. package/assets/translations/en-us.yaml +69 -14
  3. package/assets/translations/zh-hans.yaml +87 -7
  4. package/chart/__tests__/S3.test.ts +50 -0
  5. package/chart/rancher-backup/S3.vue +21 -0
  6. package/chart/rancher-backup/index.vue +4 -0
  7. package/components/CommunityLinks.vue +1 -0
  8. package/components/FileDiff.vue +92 -85
  9. package/components/ResourceDetail/index.vue +4 -12
  10. package/components/ResourceList/index.vue +1 -1
  11. package/components/ResourceTable.vue +50 -2
  12. package/components/YamlEditor.vue +1 -0
  13. package/components/auth/RoleDetailEdit.vue +1 -0
  14. package/components/form/NameNsDescription.vue +28 -12
  15. package/components/form/NodeAffinity.vue +2 -2
  16. package/components/form/PodAffinity.vue +2 -2
  17. package/components/form/ResourceTabs/index.vue +8 -2
  18. package/components/form/Select.vue +16 -0
  19. package/components/form/__tests__/NodeAffinity.test.ts +38 -0
  20. package/components/form/__tests__/PodAffinity.test.ts +46 -0
  21. package/components/formatter/ClusterLink.vue +8 -4
  22. package/components/formatter/ImageName.vue +23 -0
  23. package/components/formatter/PodImages.vue +7 -1
  24. package/components/formatter/__tests__/ClusterLink.test.ts +101 -0
  25. package/components/nav/Header.vue +2 -2
  26. package/config/__test__/home-links.test.ts +62 -0
  27. package/config/home-links.js +15 -3
  28. package/config/labels-annotations.js +5 -1
  29. package/config/router.js +0 -4
  30. package/config/settings.ts +4 -0
  31. package/config/table-headers.js +6 -5
  32. package/config/uiplugins.js +50 -5
  33. package/core/plugin-helpers.js +20 -12
  34. package/core/plugin.ts +9 -0
  35. package/core/plugins.js +1 -1
  36. package/core/types-provisioning.ts +253 -0
  37. package/core/types.ts +17 -3
  38. package/detail/autoscaling.horizontalpodautoscaler/index.vue +50 -1
  39. package/detail/node.vue +6 -6
  40. package/detail/pod.vue +2 -6
  41. package/detail/provisioning.cattle.io.cluster.vue +46 -7
  42. package/detail/workload/index.vue +9 -9
  43. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +62 -0
  44. package/edit/auth/github.vue +1 -0
  45. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +130 -0
  46. package/edit/autoscaling.horizontalpodautoscaler/index.vue +79 -0
  47. package/edit/fleet.cattle.io.gitrepo.vue +18 -1
  48. package/edit/namespace.vue +9 -1
  49. package/edit/networking.k8s.io.ingress/RulePath.vue +0 -2
  50. package/edit/provisioning.cattle.io.cluster/AgentConfiguration.vue +1 -30
  51. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +79 -1
  52. package/edit/provisioning.cattle.io.cluster/index.vue +52 -0
  53. package/edit/provisioning.cattle.io.cluster/rke2.vue +330 -150
  54. package/edit/ui.cattle.io.navlink.vue +2 -1
  55. package/initialize/App.js +3 -13
  56. package/initialize/layouts.ts +26 -0
  57. package/list/provisioning.cattle.io.cluster.vue +8 -1
  58. package/middleware/authenticated.js +93 -5
  59. package/mixins/brand.js +39 -3
  60. package/mixins/child-hook.js +2 -2
  61. package/mixins/create-edit-view/impl.js +2 -2
  62. package/models/fleet.cattle.io.gitrepo.js +1 -0
  63. package/models/provisioning.cattle.io.cluster.js +9 -1
  64. package/package.json +2 -2
  65. package/pages/about.vue +8 -2
  66. package/pages/auth/login.vue +1 -1
  67. package/pages/auth/logout.vue +11 -3
  68. package/pages/c/_cluster/apps/charts/index.vue +5 -2
  69. package/pages/c/_cluster/apps/charts/install.vue +5 -0
  70. package/pages/c/_cluster/explorer/index.vue +1 -10
  71. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +177 -0
  72. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +19 -3
  73. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +90 -21
  74. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +107 -37
  75. package/pages/c/_cluster/uiplugins/index.vue +155 -44
  76. package/pages/docs/_doc.vue +9 -3
  77. package/pages/home.vue +5 -5
  78. package/pages/support/index.vue +10 -4
  79. package/pkg/auto-import.js +1 -1
  80. package/plugins/clean-tooltip-directive.js +1 -1
  81. package/plugins/dashboard-store/resource-class.js +35 -2
  82. package/plugins/plugin.js +9 -1
  83. package/rancher-components/BadgeState/BadgeState.vue +5 -1
  84. package/rancher-components/Banner/Banner.test.ts +51 -1
  85. package/rancher-components/Banner/Banner.vue +134 -53
  86. package/rancher-components/Card/Card.vue +24 -7
  87. package/rancher-components/Form/Checkbox/Checkbox.test.ts +20 -29
  88. package/rancher-components/Form/Checkbox/Checkbox.vue +45 -20
  89. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +2 -8
  90. package/rancher-components/Form/LabeledInput/LabeledInput.vue +22 -10
  91. package/rancher-components/Form/Radio/RadioButton.vue +30 -13
  92. package/rancher-components/Form/Radio/RadioGroup.vue +26 -7
  93. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -6
  94. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +25 -38
  95. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +23 -11
  96. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +19 -5
  97. package/rancher-components/StringList/StringList.test.ts +453 -49
  98. package/rancher-components/StringList/StringList.vue +44 -26
  99. package/scripts/extension/publish +2 -2
  100. package/scripts/typegen.sh +1 -0
  101. package/server/server-middleware.js +4 -12
  102. package/store/index.js +13 -0
  103. package/store/prefs.js +0 -3
  104. package/store/type-map.js +17 -29
  105. package/types/shell/index.d.ts +236 -83
  106. package/utils/kube.js +9 -0
  107. package/utils/object.js +27 -0
  108. package/utils/settings.ts +2 -2
  109. package/vue.config.js +3 -2
  110. package/components/.DS_Store +0 -0
  111. package/components/__tests__/.DS_Store +0 -0
  112. package/creators/pkg/package-lock.json +0 -37
  113. package/pages/safeMode.vue +0 -17
  114. package/rancher-components/components/BadgeState/BadgeState.spec.ts +0 -12
  115. package/rancher-components/components/BadgeState/BadgeState.vue +0 -111
  116. package/rancher-components/components/BadgeState/index.ts +0 -1
  117. package/rancher-components/components/Banner/Banner.test.ts +0 -63
  118. package/rancher-components/components/Banner/Banner.vue +0 -244
  119. package/rancher-components/components/Banner/index.ts +0 -1
  120. package/rancher-components/components/Card/Card.vue +0 -167
  121. package/rancher-components/components/Card/index.ts +0 -1
  122. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +0 -68
  123. package/rancher-components/components/Form/Checkbox/Checkbox.vue +0 -420
  124. package/rancher-components/components/Form/Checkbox/index.ts +0 -1
  125. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +0 -23
  126. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +0 -355
  127. package/rancher-components/components/Form/LabeledInput/index.ts +0 -1
  128. package/rancher-components/components/Form/Radio/RadioButton.vue +0 -287
  129. package/rancher-components/components/Form/Radio/RadioGroup.vue +0 -254
  130. package/rancher-components/components/Form/Radio/index.ts +0 -2
  131. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +0 -170
  132. package/rancher-components/components/Form/TextArea/index.ts +0 -1
  133. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +0 -94
  134. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +0 -149
  135. package/rancher-components/components/Form/ToggleSwitch/index.ts +0 -1
  136. package/rancher-components/components/Form/index.ts +0 -5
  137. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -151
  138. package/rancher-components/components/LabeledTooltip/index.ts +0 -1
  139. package/rancher-components/components/StringList/StringList.test.ts +0 -484
  140. package/rancher-components/components/StringList/StringList.vue +0 -611
  141. package/rancher-components/components/StringList/index.ts +0 -1
  142. package/yarn-error.log +0 -196
  143. /package/rancher-components/{components/Card → Card}/Card.test.ts +0 -0
  144. /package/rancher-components/{components/Form → Form}/Radio/RadioButton.test.ts +0 -0
@@ -1,355 +0,0 @@
1
- <script lang="ts">
2
- import Vue, { VueConstructor } from 'vue';
3
- import CompactInput from '@shell/mixins/compact-input';
4
- import LabeledFormElement from '@shell/mixins/labeled-form-element';
5
- import TextAreaAutoGrow from '@components/Form/TextArea/TextAreaAutoGrow.vue';
6
- import LabeledTooltip from '@components/LabeledTooltip/LabeledTooltip.vue';
7
- import { escapeHtml } from '@shell/utils/string';
8
- import cronstrue from 'cronstrue';
9
- import { isValidCron } from 'cron-validator';
10
- import { debounce } from 'lodash';
11
-
12
- export default (
13
- Vue as VueConstructor<Vue & InstanceType<typeof LabeledFormElement> & InstanceType<typeof CompactInput>>
14
- ).extend({
15
- components: { LabeledTooltip, TextAreaAutoGrow },
16
- mixins: [LabeledFormElement, CompactInput],
17
-
18
- props: {
19
- /**
20
- * The type of the Labeled Input.
21
- * @values text, cron, multiline, multiline-password
22
- */
23
- type: {
24
- type: String,
25
- default: 'text'
26
- },
27
-
28
- /**
29
- * The status class of the Labeled Input and tooltip.
30
- * @values info, success, warning, error
31
- */
32
- status: {
33
- type: String,
34
- default: null
35
- },
36
-
37
- /**
38
- * The sub-label for the Labeled Input.
39
- */
40
- subLabel: {
41
- type: String,
42
- default: null
43
- },
44
-
45
- /**
46
- * The tooltip to display for the Labeled Input.
47
- */
48
- tooltip: {
49
- default: null,
50
- type: [String, Object]
51
- },
52
-
53
- /**
54
- * Renders the tooltip when hovering the cursor over the Labeled Input.
55
- */
56
- hoverTooltip: {
57
- type: Boolean,
58
- default: true
59
- },
60
-
61
- /**
62
- * Disables the password manager prompt to save the contents of the Labeled
63
- * Input.
64
- */
65
- ignorePasswordManagers: {
66
- default: false,
67
- type: Boolean
68
- },
69
-
70
- /**
71
- * The max length of the Labeled Input.
72
- */
73
- maxlength: {
74
- type: Number,
75
- default: null
76
- },
77
-
78
- /**
79
- * Hides arrows on the Labeled Input.
80
- * @deprecated This doesn't appear to be in use for Labeled Input.
81
- */
82
- hideArrows: {
83
- type: Boolean,
84
- default: false
85
- },
86
-
87
- /**
88
- * Optionally delay on input while typing.
89
- */
90
- delay: {
91
- type: Number,
92
- default: 0
93
- }
94
- },
95
-
96
- data() {
97
- return {
98
- updated: false,
99
- validationErrors: ''
100
- };
101
- },
102
-
103
- computed: {
104
- /**
105
- * Determines if the Labeled Input @input event should be debounced.
106
- */
107
- onInput(): ((value: string) => void) | void {
108
- return this.delay ? debounce(this.delayInput, this.delay) : this.delayInput;
109
- },
110
-
111
- /**
112
- * Determines if the Labeled Input should display a label.
113
- */
114
- hasLabel(): boolean {
115
- return this.isCompact ? false : !!this.label || !!this.labelKey || !!this.$slots.label;
116
- },
117
-
118
- /**
119
- * Determines if the Labeled Input should display a tooltip.
120
- */
121
- hasTooltip(): boolean {
122
- return !!this.tooltip || !!this.tooltipKey;
123
- },
124
-
125
- tooltipValue(): string | undefined {
126
- if (this.hasTooltip) {
127
- return this.tooltipKey ? this.t(this.tooltipKey) : this.tooltip;
128
- }
129
-
130
- return undefined;
131
- },
132
-
133
- /**
134
- * Determines if the Labeled Input makes use of the suffix slot.
135
- */
136
- hasSuffix(): boolean {
137
- return !!this.$slots.suffix;
138
- },
139
-
140
- /**
141
- * Determines if the Labeled Input should display a cron hint.
142
- */
143
- cronHint(): string | undefined {
144
- if (this.type !== 'cron' || !this.value) {
145
- return;
146
- }
147
- if (!isValidCron(this.value)) {
148
- return this.t('generic.invalidCron');
149
- }
150
- try {
151
- const hint = cronstrue.toString(this.value);
152
-
153
- return hint;
154
- } catch (e) {
155
- return this.t('generic.invalidCron');
156
- }
157
- },
158
-
159
- /**
160
- * The placeholder value for the Labeled Input.
161
- */
162
- _placeholder(): string {
163
- if (this.placeholder) {
164
- return this.placeholder.toString();
165
- }
166
- if (this.placeholderKey) {
167
- return this.t(this.placeholderKey);
168
- }
169
-
170
- return '';
171
- },
172
-
173
- /**
174
- * The max length for the Labeled Input.
175
- */
176
- _maxlength(): number | null {
177
- if (this.type === 'text' && this.maxlength) {
178
- return this.maxlength;
179
- }
180
-
181
- return null;
182
- },
183
- },
184
-
185
- methods: {
186
- /**
187
- * Attempts to give the Labeled Input focus.
188
- */
189
- focus(): void {
190
- const comp = this.$refs.value as HTMLInputElement;
191
-
192
- if (comp) {
193
- comp.focus();
194
- }
195
- },
196
-
197
- /**
198
- * Attempts to select the Labeled Input.
199
- * @deprecated
200
- */
201
- select(): void {
202
- const comp = this.$refs.value as HTMLInputElement;
203
-
204
- if (comp) {
205
- comp.select();
206
- }
207
- },
208
-
209
- /**
210
- * Emit on input with delay. Note: Arrow function is avoided due context
211
- * binding.
212
- */
213
- delayInput(value: string): void {
214
- this.$emit('input', value);
215
- },
216
-
217
- /**
218
- * Handles the behavior of the Labeled Input when given focus.
219
- * @see labeled-form-element.ts mixin for onFocusLabeled()
220
- */
221
- onFocus(): void {
222
- this.onFocusLabeled();
223
- },
224
-
225
- /**
226
- * Handles the behavior of the Labeled Input when blurred and emits the blur
227
- * event.
228
- * @see labeled-form-element.ts mixin for onBlurLabeled()
229
- */
230
- onBlur(event: string): void {
231
- this.$emit('blur', event);
232
- this.onBlurLabeled();
233
- },
234
-
235
- escapeHtml
236
- }
237
- });
238
- </script>
239
-
240
- <template>
241
- <div
242
- :class="{
243
- 'labeled-input': true,
244
- focused,
245
- [mode]: true,
246
- disabled: isDisabled,
247
- [status]: status,
248
- suffix: hasSuffix,
249
- 'has-tooltip': hasTooltip,
250
- 'compact-input': isCompact,
251
- hideArrows
252
- }"
253
- >
254
- <slot name="label">
255
- <label v-if="hasLabel">
256
- <t
257
- v-if="labelKey"
258
- :k="labelKey"
259
- />
260
- <template v-else-if="label">{{ label }}</template>
261
-
262
- <span
263
- v-if="requiredField"
264
- class="required"
265
- >*</span>
266
- </label>
267
- </slot>
268
-
269
- <slot name="prefix" />
270
-
271
- <slot name="field">
272
- <TextAreaAutoGrow
273
- v-if="type === 'multiline' || type === 'multiline-password'"
274
- ref="value"
275
- v-bind="$attrs"
276
- :maxlength="_maxlength"
277
- :disabled="isDisabled"
278
- :value="value"
279
- :placeholder="_placeholder"
280
- autocapitalize="off"
281
- :class="{ conceal: type === 'multiline-password' }"
282
- @input="onInput($event)"
283
- @focus="onFocus"
284
- @blur="onBlur"
285
- />
286
- <input
287
- v-else
288
- ref="value"
289
- :class="{ 'no-label': !hasLabel }"
290
- v-bind="$attrs"
291
- :maxlength="_maxlength"
292
- :disabled="isDisabled"
293
- :type="type === 'cron' ? 'text' : type"
294
- :value="value"
295
- :placeholder="_placeholder"
296
- autocomplete="off"
297
- autocapitalize="off"
298
- :data-lpignore="ignorePasswordManagers"
299
- @input="onInput($event.target.value)"
300
- @focus="onFocus"
301
- @blur="onBlur"
302
- >
303
- </slot>
304
-
305
- <slot name="suffix" />
306
- <LabeledTooltip
307
- v-if="hasTooltip && !focused"
308
- :hover="hoverTooltip"
309
- :value="tooltipValue"
310
- :status="status"
311
- />
312
- <LabeledTooltip
313
- v-if="!!validationMessage"
314
- :hover="hoverTooltip"
315
- :value="validationMessage"
316
- />
317
- <label
318
- v-if="cronHint"
319
- class="cron-label"
320
- >{{ cronHint }}</label>
321
- <label
322
- v-if="subLabel"
323
- class="sub-label"
324
- >{{ subLabel }}</label>
325
- </div>
326
- </template>
327
- <style scoped lang="scss">
328
- .labeled-input.view {
329
- input {
330
- text-overflow: ellipsis;
331
- }
332
- }
333
-
334
- .hideArrows {
335
- /* Hide arrows on number input when it overlaps with the unit */
336
- /* Chrome, Safari, Edge, Opera */
337
- input::-webkit-outer-spin-button,
338
- input::-webkit-inner-spin-button {
339
- -webkit-appearance: none;
340
- margin: 0;
341
- }
342
-
343
- /* Firefox */
344
- input[type=number] {
345
- -moz-appearance: textfield;
346
- }
347
- }
348
- </style>
349
- <style>
350
- .validation-message {
351
- padding: 5px;
352
- position: absolute;
353
- bottom: -35px;
354
- }
355
- </style>
@@ -1 +0,0 @@
1
- export { default as LabeledInput } from './LabeledInput.vue';
@@ -1,287 +0,0 @@
1
- <script lang="ts">
2
- import Vue from 'vue';
3
- import { _VIEW } from '@shell/config/query-params';
4
-
5
- export default Vue.extend({
6
- props: {
7
- /**
8
- * The name of the input, for grouping.
9
- */
10
- name: {
11
- type: String,
12
- default: ''
13
- },
14
-
15
- /**
16
- * The value for this option.
17
- */
18
- val: {
19
- required: true,
20
- validator: () => true
21
- },
22
-
23
- /**
24
- * The selected value.
25
- */
26
- value: {
27
- required: true,
28
- validator: () => true
29
- },
30
-
31
- /**
32
- * The label shown next to the radio.
33
- */
34
- label: {
35
- type: String,
36
- default: ''
37
- },
38
-
39
- /**
40
- * Disable the radio.
41
- */
42
- disabled: {
43
- type: Boolean,
44
- default: false
45
- },
46
-
47
- /**
48
- * The radio editing mode.
49
- * @values _EDIT, _VIEW
50
- */
51
- mode: {
52
- type: String,
53
- default: 'edit'
54
- },
55
-
56
- /**
57
- * The i18n key to use for the radio description.
58
- */
59
- descriptionKey: {
60
- type: String,
61
- default: null
62
- },
63
-
64
- /**
65
- * The radio description.
66
- */
67
- description: {
68
- type: String,
69
- default: null
70
- }
71
- },
72
-
73
- data() {
74
- return { isChecked: this.value === this.val };
75
- },
76
-
77
- computed: {
78
- /**
79
- * Determines if the radio is disabled.
80
- */
81
- isDisabled(): boolean {
82
- return this.mode === _VIEW || this.disabled;
83
- },
84
-
85
- /**
86
- * Determines if the label for the radio should be muted.
87
- */
88
- muteLabel(): boolean {
89
- // Don't mute the label if the mode is view and the button is checked
90
- return this.disabled && !(this.mode === _VIEW && this.isChecked);
91
- },
92
-
93
- /**
94
- * Determines if the description slot is in use.
95
- */
96
- hasDescriptionSlot(): boolean {
97
- return !!this.$slots.description;
98
- },
99
-
100
- hasLabelSlot(): boolean {
101
- return !!this.$slots.label || !!this.$scopedSlots.label;
102
- }
103
- },
104
-
105
- watch: {
106
- value(neu) {
107
- this.isChecked = this.val === neu;
108
- if (this.isChecked) {
109
- (this.$refs.custom as HTMLElement).focus();
110
- }
111
- }
112
- },
113
-
114
- methods: {
115
- /**
116
- * Emits the input event.
117
- */
118
- clicked({ target }: { target?: HTMLElement }) {
119
- if (this.isDisabled || target?.tagName === 'A') {
120
- return;
121
- }
122
-
123
- this.$emit('input', this.val);
124
- }
125
- }
126
- });
127
- </script>
128
-
129
- <template>
130
- <label
131
- :class="{'disabled': isDisabled, 'radio-container': true}"
132
- @keydown.enter="clicked($event)"
133
- @keydown.space="clicked($event)"
134
- @click.stop="clicked($event)"
135
- >
136
- <input
137
- :id="_uid+'-radio'"
138
- :disabled="isDisabled"
139
- :name="name"
140
- :value="''+val"
141
- :checked="isChecked"
142
- type="radio"
143
- :tabindex="-1"
144
- @click.stop.prevent
145
- >
146
- <span
147
- ref="custom"
148
- :class="[ isDisabled ? 'text-muted' : '', 'radio-custom']"
149
- :tabindex="isDisabled ? -1 : 0"
150
- :aria-label="label"
151
- :aria-checked="isChecked"
152
- role="radio"
153
- />
154
- <div class="labeling">
155
- <label
156
- :class="[ muteLabel ? 'text-muted' : '', 'radio-label', 'm-0']"
157
- :for="name"
158
- >
159
- <slot
160
- v-if="hasLabelSlot"
161
- name="label"
162
- >
163
- <!-- slot content -->
164
- </slot>
165
- <span
166
- v-else-if="label"
167
- v-clean-html="label"
168
- />
169
- </label>
170
- <div
171
- v-if="descriptionKey || description"
172
- class="radio-button-outer-container-description"
173
- >
174
- <t
175
- v-if="descriptionKey"
176
- :k="descriptionKey"
177
- />
178
- <template v-else-if="description">
179
- {{ description }}
180
- </template>
181
- </div>
182
- <div
183
- v-else-if="hasDescriptionSlot"
184
- class="radio-button-outer-container-description"
185
- >
186
- <slot name="description" />
187
- </div>
188
- </div>
189
- </label>
190
- </template>
191
-
192
- <style lang='scss'>
193
- $fontColor: var(--input-label);
194
-
195
- .radio-view {
196
- display: flex;
197
- flex-direction: column;
198
- LABEL {
199
- color: var(--input-label);
200
- }
201
- }
202
-
203
- .radio-group {
204
- .text-label {
205
- display: block;
206
- padding-bottom: 5px;
207
- }
208
- }
209
-
210
- .radio-container {
211
- position: relative;
212
- display: inline-flex;
213
- align-items: flex-start;
214
- margin: 0;
215
- user-select: none;
216
- border-radius: var(--border-radius);
217
- padding-bottom: 5px;
218
-
219
- &,
220
- .radio-label,
221
- .radio-button-outer-container-description {
222
- cursor: pointer;
223
- }
224
-
225
- &.disabled,
226
- &.disabled .radio-label,
227
- &.disabled .radio-button-outer-container-description {
228
- cursor: not-allowed
229
- }
230
-
231
- .radio-custom {
232
- height: 14px;
233
- width: 14px;
234
- min-height: 14px;
235
- min-width: 14px;
236
- background-color: var(--input-bg);
237
- border-radius: 50%;
238
- transition: all 0.3s ease-out;
239
- border: 1.5px solid var(--border);
240
- margin-top: 5px;
241
-
242
- &:focus {
243
- outline: none;
244
- border-radius: 50%;
245
- }
246
- }
247
-
248
- input {
249
- display: none;
250
- }
251
-
252
- .radio-custom {
253
- &[aria-checked="true"] {
254
- background-color: var(--primary);
255
- -webkit-transform: rotate(0deg) scale(1);
256
- -ms-transform: rotate(0deg) scale(1);
257
- transform: rotate(0deg) scale(1);
258
- opacity:1;
259
- border: 1.5px solid var(--primary);
260
-
261
- // Ensure that checked radio buttons are muted but still visibly selected when muted
262
- &.text-muted {
263
- opacity: .25;
264
- }
265
- }
266
- }
267
-
268
- input:disabled ~ .radio-custom:not([aria-checked="true"]) {
269
- background-color: var(--disabled-bg);
270
- opacity: .25;
271
- }
272
-
273
- .radio-button-outer-container-description {
274
- color: $fontColor;
275
- font-size: 11px;
276
- margin-top: 5px;
277
- }
278
-
279
- .labeling {
280
- display: inline-flex;
281
- flex-direction: column;
282
-
283
- margin: 3px 10px 0px 5px;
284
- }
285
- }
286
-
287
- </style>