@gitlab/ui 129.1.0 → 129.1.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/dist/components/base/table/table.js +4 -2
- package/dist/index.css +2 -2
- package/dist/index.css.map +1 -1
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +4 -3
- package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +4 -2
- package/dist/vendor/bootstrap-vue/src/utils/props.js +2 -32
- package/package.json +2 -2
- package/src/components/base/form/form_input/form_input.scss +215 -0
- package/src/components/base/table/table.vue +7 -0
- package/src/scss/bootstrap_vue.scss +0 -1
- package/src/vendor/bootstrap-vue/src/_variables.scss +1 -1
- package/src/vendor/bootstrap-vue/src/components/index.scss +0 -1
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +3 -2
- package/src/vendor/bootstrap-vue/src/mixins/form-text.js +4 -2
- package/src/vendor/bootstrap-vue/src/utils/props.js +1 -33
- package/src/vendor/bootstrap-vue/src/components/form-input/_form-input.scss +0 -219
- package/src/vendor/bootstrap-vue/src/components/form-input/index.scss +0 -1
|
@@ -6,10 +6,10 @@ import { RX_DIGITS, RX_SPACES } from '../../../constants/regex';
|
|
|
6
6
|
import { concat } from '../../../utils/array';
|
|
7
7
|
import { cloneDeep } from '../../../utils/clone-deep';
|
|
8
8
|
import { identity } from '../../../utils/identity';
|
|
9
|
-
import { isString, isRegExp
|
|
9
|
+
import { isFunction, isString, isRegExp } from '../../../utils/inspect';
|
|
10
10
|
import { looseEqual } from '../../../utils/loose-equal';
|
|
11
11
|
import { toInteger } from '../../../utils/number';
|
|
12
|
-
import { makeProp
|
|
12
|
+
import { makeProp } from '../../../utils/props';
|
|
13
13
|
import { escapeRegExp } from '../../../utils/string';
|
|
14
14
|
import { warn } from '../../../utils/warn';
|
|
15
15
|
import { stringifyRecordValues } from './stringify-record-values';
|
|
@@ -81,7 +81,8 @@ const filteringMixin = extend({
|
|
|
81
81
|
const {
|
|
82
82
|
filterFunction
|
|
83
83
|
} = this;
|
|
84
|
-
|
|
84
|
+
// `filterFunction` is an optional Function prop with no default
|
|
85
|
+
return isFunction(filterFunction) ? filterFunction : null;
|
|
85
86
|
},
|
|
86
87
|
// Returns the records in `localItems` that match the filter criteria
|
|
87
88
|
// Returns the original `localItems` array if not sorting
|
|
@@ -7,7 +7,8 @@ import { mathMax } from '../utils/math';
|
|
|
7
7
|
import { makeModelMixin } from '../utils/model';
|
|
8
8
|
import { toInteger, toFloat } from '../utils/number';
|
|
9
9
|
import { sortKeys } from '../utils/object';
|
|
10
|
-
import {
|
|
10
|
+
import { isFunction } from '../utils/inspect';
|
|
11
|
+
import { makeProp } from '../utils/props';
|
|
11
12
|
import { toString } from '../utils/string';
|
|
12
13
|
|
|
13
14
|
// --- Constants ---
|
|
@@ -78,7 +79,8 @@ const formTextMixin = extend({
|
|
|
78
79
|
return mathMax(toInteger(this.debounce, 0), 0);
|
|
79
80
|
},
|
|
80
81
|
hasFormatter() {
|
|
81
|
-
|
|
82
|
+
// `formatter` is an optional Function prop with no default
|
|
83
|
+
return isFunction(this.formatter);
|
|
82
84
|
}
|
|
83
85
|
},
|
|
84
86
|
watch: {
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PROP_TYPE_ANY } from '../constants/props';
|
|
2
|
-
import { cloneDeep } from './clone-deep';
|
|
3
|
-
import { getComponentConfig } from './config';
|
|
4
2
|
import { identity } from './identity';
|
|
5
|
-
import { isUndefined, isObject, isArray
|
|
3
|
+
import { isUndefined, isObject, isArray } from './inspect';
|
|
6
4
|
import { hasOwnProperty, clone, keys } from './object';
|
|
7
5
|
import { upperFirst } from './string';
|
|
8
6
|
|
|
@@ -66,32 +64,4 @@ const pluckProps = function (keysToPluck, objToPluck) {
|
|
|
66
64
|
}, {});
|
|
67
65
|
};
|
|
68
66
|
|
|
69
|
-
|
|
70
|
-
// Replaces the current `default` key of each prop with a `getComponentConfig()`
|
|
71
|
-
// call that falls back to the current default value of the prop
|
|
72
|
-
const makePropConfigurable = (prop, key, componentKey) => ({
|
|
73
|
-
...cloneDeep(prop),
|
|
74
|
-
default: function bvConfigurablePropDefault() {
|
|
75
|
-
const value = getComponentConfig(componentKey, key, prop.default);
|
|
76
|
-
return isFunction(value) ? value() : value;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Make a props object configurable by global configuration
|
|
81
|
-
// Replaces the current `default` key of each prop with a `getComponentConfig()`
|
|
82
|
-
// call that falls back to the current default value of the prop
|
|
83
|
-
const makePropsConfigurable = (props, componentKey) => keys(props).reduce((result, key) => ({
|
|
84
|
-
...result,
|
|
85
|
-
[key]: makePropConfigurable(props[key], key, componentKey)
|
|
86
|
-
}), {});
|
|
87
|
-
|
|
88
|
-
// Get function name we use in `makePropConfigurable()`
|
|
89
|
-
// for the prop default value override to compare
|
|
90
|
-
// against in `hasPropFunction()`
|
|
91
|
-
const configurablePropDefaultFnName = makePropConfigurable({}, '', '').default.name;
|
|
92
|
-
|
|
93
|
-
// Detect wether the given value is currently a function
|
|
94
|
-
// and isn't the props default function
|
|
95
|
-
const hasPropFunction = fn => isFunction(fn) && fn.name && fn.name !== configurablePropDefaultFnName;
|
|
96
|
-
|
|
97
|
-
export { copyProps, hasPropFunction, makeProp, makePropConfigurable, makePropsConfigurable, pluckProps, suffixPropName };
|
|
67
|
+
export { copyProps, makeProp, pluckProps, suffixPropName };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gitlab/ui",
|
|
3
|
-
"version": "129.1.
|
|
3
|
+
"version": "129.1.2",
|
|
4
4
|
"description": "GitLab UI Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"echarts": "^5.6.0",
|
|
71
71
|
"gridstack": "^12.4.2",
|
|
72
72
|
"iframe-resizer": "^4.4.5",
|
|
73
|
-
"lodash-es": "^4.17.
|
|
73
|
+
"lodash-es": "^4.17.23",
|
|
74
74
|
"popper.js": "^1.16.1",
|
|
75
75
|
"portal-vue": "2.1.7",
|
|
76
76
|
"vue-functional-data-merge": "^3.1.0",
|
|
@@ -1,3 +1,218 @@
|
|
|
1
|
+
@use "sass:color";
|
|
2
|
+
|
|
3
|
+
// Bootstrap v4.x does not have special styling for color input
|
|
4
|
+
// So we define some basic styles to compensate
|
|
5
|
+
input[type="color"].form-control {
|
|
6
|
+
height: $input-height;
|
|
7
|
+
// We use the smaller padding to make the color block larger
|
|
8
|
+
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
input[type="color"].form-control.form-control-sm,
|
|
12
|
+
.input-group-sm input[type="color"].form-control {
|
|
13
|
+
height: $input-height-sm;
|
|
14
|
+
// We use the smaller padding to make the color block larger
|
|
15
|
+
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
input[type="color"].form-control.form-control-lg,
|
|
19
|
+
.input-group-lg input[type="color"].form-control {
|
|
20
|
+
height: $input-height-lg;
|
|
21
|
+
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
input[type="color"].form-control:disabled {
|
|
25
|
+
// Disabled styling needs to be a bit different than regular inputs
|
|
26
|
+
background-color: $gl-color-neutral-500;
|
|
27
|
+
opacity: $btn-disabled-opacity;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// --- Base `.input-group > .custom-range` styling (no PR yet on Bootstrap v4) ---
|
|
31
|
+
.input-group {
|
|
32
|
+
> .custom-range {
|
|
33
|
+
position: relative;
|
|
34
|
+
flex: 1 1 auto;
|
|
35
|
+
width: 1%;
|
|
36
|
+
margin-bottom: 0;
|
|
37
|
+
|
|
38
|
+
+ .form-control,
|
|
39
|
+
+ .form-control-plaintext,
|
|
40
|
+
+ .custom-select,
|
|
41
|
+
+ .custom-range,
|
|
42
|
+
+ .custom-file {
|
|
43
|
+
margin-left: -$input-border-width;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
> .form-control,
|
|
48
|
+
> .form-control-plaintext,
|
|
49
|
+
> .custom-select,
|
|
50
|
+
> .custom-range,
|
|
51
|
+
> .custom-file {
|
|
52
|
+
+ .custom-range {
|
|
53
|
+
margin-left: -$input-border-width;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
> .custom-range:focus {
|
|
58
|
+
z-index: 3;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
> .custom-range {
|
|
62
|
+
&:not(:last-child) {
|
|
63
|
+
@include border-right-radius(0);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&:not(:first-child) {
|
|
67
|
+
@include border-left-radius(0);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
> .custom-range {
|
|
72
|
+
padding: 0 $input-padding-x;
|
|
73
|
+
background-color: $input-bg;
|
|
74
|
+
background-clip: padding-box;
|
|
75
|
+
border: $input-border-width solid $input-border-color;
|
|
76
|
+
height: $input-height;
|
|
77
|
+
|
|
78
|
+
@if $enable-rounded {
|
|
79
|
+
border-radius: $input-border-radius;
|
|
80
|
+
} @else {
|
|
81
|
+
border-radius: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@include box-shadow($input-box-shadow);
|
|
85
|
+
@include transition($input-transition);
|
|
86
|
+
// Bootstrap v4.3.2 has deprecated this mixin
|
|
87
|
+
// @include form-control-focus();
|
|
88
|
+
// So we manually add its content here
|
|
89
|
+
&:focus {
|
|
90
|
+
color: $input-focus-color; // only needed for fallback to text input
|
|
91
|
+
background-color: $input-focus-bg;
|
|
92
|
+
border-color: $input-focus-border-color;
|
|
93
|
+
outline: 0;
|
|
94
|
+
@if $enable-shadows {
|
|
95
|
+
box-shadow: $input-box-shadow, $input-focus-box-shadow;
|
|
96
|
+
} @else {
|
|
97
|
+
box-shadow: $input-focus-box-shadow;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&:disabled,
|
|
102
|
+
&[readonly] {
|
|
103
|
+
background-color: $input-disabled-bg;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.input-group-lg > .custom-range {
|
|
109
|
+
height: $input-height-lg;
|
|
110
|
+
padding: 0 $input-padding-x-lg;
|
|
111
|
+
@include border-radius($input-border-radius-lg);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.input-group-sm > .custom-range {
|
|
115
|
+
height: $input-height-sm;
|
|
116
|
+
padding: 0 $input-padding-x-sm;
|
|
117
|
+
@include border-radius($input-border-radius-sm);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// <gl-form-input> custom-range validation styling
|
|
121
|
+
// Mixin for generating `.input-group .custom-range` validation styling
|
|
122
|
+
@mixin custom-range-validation-state($state, $color) {
|
|
123
|
+
.input-group .custom-range {
|
|
124
|
+
.was-validated &:#{$state},
|
|
125
|
+
&.is-#{$state} {
|
|
126
|
+
border-color: $color;
|
|
127
|
+
|
|
128
|
+
&:focus {
|
|
129
|
+
border-color: $color;
|
|
130
|
+
box-shadow: 0 0 0 $input-focus-width rgba($color, 0.25);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.custom-range {
|
|
136
|
+
.was-validated &:#{$state},
|
|
137
|
+
&.is-#{$state} {
|
|
138
|
+
// Pseudo-elements must be split across multiple rulesets to have an affect
|
|
139
|
+
&:focus {
|
|
140
|
+
&::-webkit-slider-thumb {
|
|
141
|
+
box-shadow:
|
|
142
|
+
0 0 0 1px $body-bg,
|
|
143
|
+
0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&::-moz-range-thumb {
|
|
147
|
+
box-shadow:
|
|
148
|
+
0 0 0 1px $body-bg,
|
|
149
|
+
0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&::-ms-thumb {
|
|
153
|
+
box-shadow:
|
|
154
|
+
0 0 0 1px $body-bg,
|
|
155
|
+
0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&::-webkit-slider-thumb {
|
|
160
|
+
background-color: $color;
|
|
161
|
+
background-image: none;
|
|
162
|
+
|
|
163
|
+
&:active {
|
|
164
|
+
background-color: color.adjust($color, $lightness: 35%);
|
|
165
|
+
background-image: none;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
&::-webkit-slider-runnable-track {
|
|
170
|
+
background-color: rgba($color, 0.35);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
&::-moz-range-thumb {
|
|
174
|
+
background-color: $color;
|
|
175
|
+
background-image: none;
|
|
176
|
+
|
|
177
|
+
&:active {
|
|
178
|
+
background-color: color.adjust($color, $lightness: 35%);
|
|
179
|
+
background-image: none;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
&::-moz-range-track {
|
|
184
|
+
background: rgba($color, 0.35);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
~ .#{$state}-feedback,
|
|
188
|
+
~ .#{$state}-tooltip {
|
|
189
|
+
display: block;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
&::-ms-thumb {
|
|
193
|
+
background-color: $color;
|
|
194
|
+
background-image: none;
|
|
195
|
+
|
|
196
|
+
&:active {
|
|
197
|
+
background-color: color.adjust($color, $lightness: 35%);
|
|
198
|
+
background-image: none;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
&::-ms-track-lower {
|
|
203
|
+
background: rgba($color, 0.35);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
&::-ms-track-upper {
|
|
207
|
+
background: rgba($color, 0.35);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@include custom-range-validation-state("valid", $form-feedback-valid-color);
|
|
214
|
+
@include custom-range-validation-state("invalid", $form-feedback-invalid-color);
|
|
215
|
+
|
|
1
216
|
.gl-form-input,
|
|
2
217
|
.gl-form-input.form-control {
|
|
3
218
|
appearance: none;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { BTable } from '../../../vendor/bootstrap-vue/src/components/table/table';
|
|
3
3
|
import { logWarning, isDev } from '../../../utils/utils';
|
|
4
|
+
import GlLoadingIcon from '../loading_icon/loading_icon.vue';
|
|
4
5
|
import { tableFullSlots, tableFullProps, glTableLiteWarning } from './constants';
|
|
5
6
|
|
|
6
7
|
const shouldUseFullTable = ({ $attrs, $scopedSlots }) => {
|
|
@@ -16,6 +17,7 @@ export default {
|
|
|
16
17
|
name: 'GlTable',
|
|
17
18
|
components: {
|
|
18
19
|
BTable,
|
|
20
|
+
GlLoadingIcon,
|
|
19
21
|
},
|
|
20
22
|
inheritAttrs: false,
|
|
21
23
|
props: {
|
|
@@ -163,6 +165,11 @@ export default {
|
|
|
163
165
|
</template>
|
|
164
166
|
</div>
|
|
165
167
|
</template>
|
|
168
|
+
<template #table-busy>
|
|
169
|
+
<slot name="table-busy">
|
|
170
|
+
<gl-loading-icon size="lg" />
|
|
171
|
+
</slot>
|
|
172
|
+
</template>
|
|
166
173
|
<template #empty="scope">
|
|
167
174
|
<slot name="empty" v-bind="scope">
|
|
168
175
|
<p class="gl-mb-0 gl-py-2 gl-text-subtle">{{ scope.emptyText }}</p>
|
|
@@ -7,7 +7,6 @@ $bv-enable-popover-variants: false;
|
|
|
7
7
|
@import "../vendor/bootstrap-vue/src/utilities.scss";
|
|
8
8
|
|
|
9
9
|
@import "../vendor/bootstrap-vue/src/components/dropdown/index.scss";
|
|
10
|
-
@import "../vendor/bootstrap-vue/src/components/form-input/index.scss";
|
|
11
10
|
@import "../vendor/bootstrap-vue/src/components/form-radio/index.scss";
|
|
12
11
|
@import "../vendor/bootstrap-vue/src/components/modal/index.scss";
|
|
13
12
|
@import "../vendor/bootstrap-vue/src/components/popover/index.scss";
|
|
@@ -15,7 +15,7 @@ import { identity } from '../../../utils/identity'
|
|
|
15
15
|
import { isFunction, isString, isRegExp } from '../../../utils/inspect'
|
|
16
16
|
import { looseEqual } from '../../../utils/loose-equal'
|
|
17
17
|
import { toInteger } from '../../../utils/number'
|
|
18
|
-
import {
|
|
18
|
+
import { makeProp } from '../../../utils/props'
|
|
19
19
|
import { escapeRegExp } from '../../../utils/string'
|
|
20
20
|
import { warn } from '../../../utils/warn'
|
|
21
21
|
import { stringifyRecordValues } from './stringify-record-values'
|
|
@@ -78,7 +78,8 @@ export const filteringMixin = extend({
|
|
|
78
78
|
localFilterFn() {
|
|
79
79
|
// Return `null` to signal to use internal filter function
|
|
80
80
|
const { filterFunction } = this
|
|
81
|
-
|
|
81
|
+
// `filterFunction` is an optional Function prop with no default
|
|
82
|
+
return isFunction(filterFunction) ? filterFunction : null
|
|
82
83
|
},
|
|
83
84
|
// Returns the records in `localItems` that match the filter criteria
|
|
84
85
|
// Returns the original `localItems` array if not sorting
|
|
@@ -18,7 +18,8 @@ import { mathMax } from '../utils/math'
|
|
|
18
18
|
import { makeModelMixin } from '../utils/model'
|
|
19
19
|
import { toInteger, toFloat } from '../utils/number'
|
|
20
20
|
import { sortKeys } from '../utils/object'
|
|
21
|
-
import {
|
|
21
|
+
import { isFunction } from '../utils/inspect'
|
|
22
|
+
import { makeProp } from '../utils/props'
|
|
22
23
|
import { toString } from '../utils/string'
|
|
23
24
|
|
|
24
25
|
// --- Constants ---
|
|
@@ -93,7 +94,8 @@ export const formTextMixin = extend({
|
|
|
93
94
|
return mathMax(toInteger(this.debounce, 0), 0)
|
|
94
95
|
},
|
|
95
96
|
hasFormatter() {
|
|
96
|
-
|
|
97
|
+
// `formatter` is an optional Function prop with no default
|
|
98
|
+
return isFunction(this.formatter)
|
|
97
99
|
}
|
|
98
100
|
},
|
|
99
101
|
watch: {
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PROP_TYPE_ANY } from '../constants/props'
|
|
2
|
-
import { cloneDeep } from './clone-deep'
|
|
3
|
-
import { getComponentConfig } from './config'
|
|
4
2
|
import { identity } from './identity'
|
|
5
|
-
import { isArray,
|
|
3
|
+
import { isArray, isObject, isUndefined } from './inspect'
|
|
6
4
|
import { clone, hasOwnProperty, keys } from './object'
|
|
7
5
|
import { upperFirst } from './string'
|
|
8
6
|
|
|
@@ -60,33 +58,3 @@ export const pluckProps = (keysToPluck, objToPluck, transformFn = identity) =>
|
|
|
60
58
|
memo[transformFn(prop)] = objToPluck[prop]
|
|
61
59
|
return memo
|
|
62
60
|
}, {})
|
|
63
|
-
|
|
64
|
-
// Make a prop object configurable by global configuration
|
|
65
|
-
// Replaces the current `default` key of each prop with a `getComponentConfig()`
|
|
66
|
-
// call that falls back to the current default value of the prop
|
|
67
|
-
export const makePropConfigurable = (prop, key, componentKey) => ({
|
|
68
|
-
...cloneDeep(prop),
|
|
69
|
-
default: function bvConfigurablePropDefault() {
|
|
70
|
-
const value = getComponentConfig(componentKey, key, prop.default)
|
|
71
|
-
return isFunction(value) ? value() : value
|
|
72
|
-
}
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
// Make a props object configurable by global configuration
|
|
76
|
-
// Replaces the current `default` key of each prop with a `getComponentConfig()`
|
|
77
|
-
// call that falls back to the current default value of the prop
|
|
78
|
-
export const makePropsConfigurable = (props, componentKey) =>
|
|
79
|
-
keys(props).reduce(
|
|
80
|
-
(result, key) => ({ ...result, [key]: makePropConfigurable(props[key], key, componentKey) }),
|
|
81
|
-
{}
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
// Get function name we use in `makePropConfigurable()`
|
|
85
|
-
// for the prop default value override to compare
|
|
86
|
-
// against in `hasPropFunction()`
|
|
87
|
-
const configurablePropDefaultFnName = makePropConfigurable({}, '', '').default.name
|
|
88
|
-
|
|
89
|
-
// Detect wether the given value is currently a function
|
|
90
|
-
// and isn't the props default function
|
|
91
|
-
export const hasPropFunction = fn =>
|
|
92
|
-
isFunction(fn) && fn.name && fn.name !== configurablePropDefaultFnName
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
@use 'sass:color';
|
|
2
|
-
|
|
3
|
-
// Temporary fix for cssnano bug: https://github.com/cssnano/cssnano/issues/712
|
|
4
|
-
// By moving center to last value in `background-position` property
|
|
5
|
-
// See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2599
|
|
6
|
-
@if $enable-validation-icons {
|
|
7
|
-
.form-control {
|
|
8
|
-
.was-validated &:invalid,
|
|
9
|
-
.was-validated &:valid,
|
|
10
|
-
&.is-invalid,
|
|
11
|
-
&.is-valid {
|
|
12
|
-
background-position: right $input-height-inner-quarter center;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// Bootstrap v4.x does not have special styling for color input
|
|
18
|
-
// So we define some basic styles to compensate
|
|
19
|
-
input[type="color"].form-control {
|
|
20
|
-
height: $input-height;
|
|
21
|
-
// We use the smaller padding to make the color block larger
|
|
22
|
-
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
input[type="color"].form-control.form-control-sm,
|
|
26
|
-
.input-group-sm input[type="color"].form-control {
|
|
27
|
-
height: $input-height-sm;
|
|
28
|
-
// We use the smaller padding to make the color block larger
|
|
29
|
-
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
input[type="color"].form-control.form-control-lg,
|
|
33
|
-
.input-group-lg input[type="color"].form-control {
|
|
34
|
-
height: $input-height-lg;
|
|
35
|
-
padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
input[type="color"].form-control:disabled {
|
|
39
|
-
// Disabled styling needs to be a bit different than regular inputs
|
|
40
|
-
background-color: $gray-500;
|
|
41
|
-
opacity: $btn-disabled-opacity;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// --- Base `.input-group > .custom-range` styling (no PR yet on Bootstrap v4) ---
|
|
45
|
-
.input-group {
|
|
46
|
-
> .custom-range {
|
|
47
|
-
position: relative;
|
|
48
|
-
flex: 1 1 auto;
|
|
49
|
-
width: 1%;
|
|
50
|
-
margin-bottom: 0;
|
|
51
|
-
|
|
52
|
-
+ .form-control,
|
|
53
|
-
+ .form-control-plaintext,
|
|
54
|
-
+ .custom-select,
|
|
55
|
-
+ .custom-range,
|
|
56
|
-
+ .custom-file {
|
|
57
|
-
margin-left: -$input-border-width;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
> .form-control,
|
|
62
|
-
> .form-control-plaintext,
|
|
63
|
-
> .custom-select,
|
|
64
|
-
> .custom-range,
|
|
65
|
-
> .custom-file {
|
|
66
|
-
+ .custom-range {
|
|
67
|
-
margin-left: -$input-border-width;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
> .custom-range:focus {
|
|
72
|
-
z-index: 3;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
> .custom-range {
|
|
76
|
-
&:not(:last-child) {
|
|
77
|
-
@include border-right-radius(0);
|
|
78
|
-
}
|
|
79
|
-
&:not(:first-child) {
|
|
80
|
-
@include border-left-radius(0);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
> .custom-range {
|
|
85
|
-
height: $input-height;
|
|
86
|
-
padding: 0 $input-padding-x;
|
|
87
|
-
background-color: $input-bg;
|
|
88
|
-
background-clip: padding-box;
|
|
89
|
-
border: $input-border-width solid $input-border-color;
|
|
90
|
-
height: $input-height;
|
|
91
|
-
|
|
92
|
-
@if $enable-rounded {
|
|
93
|
-
border-radius: $input-border-radius;
|
|
94
|
-
} @else {
|
|
95
|
-
border-radius: 0;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
@include box-shadow($input-box-shadow);
|
|
99
|
-
@include transition($input-transition);
|
|
100
|
-
// Bootstrap v4.3.2 has deprecated this mixin
|
|
101
|
-
// @include form-control-focus();
|
|
102
|
-
// So we manually add its content here
|
|
103
|
-
&:focus {
|
|
104
|
-
color: $input-focus-color; // only needed for fallback to text input
|
|
105
|
-
background-color: $input-focus-bg;
|
|
106
|
-
border-color: $input-focus-border-color;
|
|
107
|
-
outline: 0;
|
|
108
|
-
@if $enable-shadows {
|
|
109
|
-
box-shadow: $input-box-shadow, $input-focus-box-shadow;
|
|
110
|
-
} @else {
|
|
111
|
-
box-shadow: $input-focus-box-shadow;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
&:disabled,
|
|
116
|
-
&[readonly] {
|
|
117
|
-
background-color: $input-disabled-bg;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.input-group-lg > .custom-range {
|
|
123
|
-
height: $input-height-lg;
|
|
124
|
-
padding: 0 $input-padding-x-lg;
|
|
125
|
-
@include border-radius($input-border-radius-lg);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.input-group-sm > .custom-range {
|
|
129
|
-
height: $input-height-sm;
|
|
130
|
-
padding: 0 $input-padding-x-sm;
|
|
131
|
-
@include border-radius($input-border-radius-sm);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// --- <b-form-input>: custom-range validation styling - valid (no PR yet for Bootstrap v4.2) ---
|
|
135
|
-
// Mixin for generating `.input-group .custom-range` validation styling
|
|
136
|
-
@mixin bv-custom-range-validation-state($state, $color) {
|
|
137
|
-
.input-group .custom-range {
|
|
138
|
-
.was-validated &:#{$state},
|
|
139
|
-
&.is-#{$state} {
|
|
140
|
-
border-color: $color;
|
|
141
|
-
|
|
142
|
-
&:focus {
|
|
143
|
-
border-color: $color;
|
|
144
|
-
box-shadow: 0 0 0 $input-focus-width rgba($color, 0.25);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.custom-range {
|
|
150
|
-
.was-validated &:#{$state},
|
|
151
|
-
&.is-#{$state} {
|
|
152
|
-
// Pseudo-elements must be split across multiple rulesets to have an affect
|
|
153
|
-
&:focus {
|
|
154
|
-
&::-webkit-slider-thumb {
|
|
155
|
-
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
156
|
-
}
|
|
157
|
-
&::-moz-range-thumb {
|
|
158
|
-
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
159
|
-
}
|
|
160
|
-
&::-ms-thumb {
|
|
161
|
-
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width color.adjust($color, $lightness: 35%);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
&::-webkit-slider-thumb {
|
|
166
|
-
background-color: $color;
|
|
167
|
-
background-image: none;
|
|
168
|
-
|
|
169
|
-
&:active {
|
|
170
|
-
background-color: color.adjust($color, $lightness: 35%);
|
|
171
|
-
background-image: none;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
&::-webkit-slider-runnable-track {
|
|
176
|
-
background-color: rgba($color, 0.35);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
&::-moz-range-thumb {
|
|
180
|
-
background-color: $color;
|
|
181
|
-
background-image: none;
|
|
182
|
-
|
|
183
|
-
&:active {
|
|
184
|
-
background-color: color.adjust($color, $lightness: 35%);
|
|
185
|
-
background-image: none;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
&::-moz-range-track {
|
|
190
|
-
background: rgba($color, 0.35);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
~ .#{$state}-feedback,
|
|
194
|
-
~ .#{$state}-tooltip {
|
|
195
|
-
display: block;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
&::-ms-thumb {
|
|
199
|
-
background-color: $color;
|
|
200
|
-
background-image: none;
|
|
201
|
-
|
|
202
|
-
&:active {
|
|
203
|
-
background-color: color.adjust($color, $lightness: 35%);
|
|
204
|
-
background-image: none;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
&::-ms-track-lower {
|
|
209
|
-
background: rgba($color, 0.35);
|
|
210
|
-
}
|
|
211
|
-
&::-ms-track-upper {
|
|
212
|
-
background: rgba($color, 0.35);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
@include bv-custom-range-validation-state("valid", $form-feedback-valid-color);
|
|
219
|
-
@include bv-custom-range-validation-state("invalid", $form-feedback-invalid-color);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@import "form-input";
|