@bethinkpl/design-system 22.0.2 → 22.0.4
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/design-system.umd.js +423 -46
- package/dist/design-system.umd.js.map +1 -1
- package/dist/lib/js/components/Banner/Banner.vue.d.ts +1 -0
- package/dist/lib/js/components/Buttons/Button/Button.vue.d.ts +1 -0
- package/dist/lib/js/components/Buttons/IconButton/IconButton.vue.d.ts +1 -0
- package/dist/lib/js/components/Cards/Card/Card.consts.d.ts +22 -0
- package/dist/lib/js/components/Cards/Card/Card.vue.d.ts +36 -0
- package/dist/lib/js/components/Cards/CardExpandable/CardExpandable.vue.d.ts +4 -1
- package/dist/lib/js/components/Chip/Chip.vue.d.ts +1 -0
- package/dist/lib/js/components/Drawer/DrawerListItemGroup/DrawerListItemGroup.vue.d.ts +3 -4
- package/dist/lib/js/components/Drawer/DrawerSection/DrawerSection.vue.d.ts +3 -289
- package/dist/lib/js/components/Drawer/DrawerTile/DrawerTile.vue.d.ts +3 -63
- package/dist/lib/js/components/Form/Checkbox/Checkbox.vue.d.ts +1 -0
- package/dist/lib/js/components/Form/RadioButton/RadioButton.vue.d.ts +1 -0
- package/dist/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue.d.ts +1 -0
- package/dist/lib/js/components/Headers/SectionHeader/SectionHeader.vue.d.ts +1 -0
- package/dist/lib/js/components/Icons/Icon/Icon.consts.d.ts +1 -0
- package/dist/lib/js/components/LoadingBar/LoadingBar.consts.d.ts +16 -0
- package/dist/lib/js/components/LoadingBar/LoadingBar.stories.d.ts +5 -0
- package/dist/lib/js/components/LoadingBar/LoadingBar.vue.d.ts +31 -0
- package/dist/lib/js/components/LoadingBar/index.d.ts +3 -0
- package/dist/lib/js/components/Modal/Modal.vue.d.ts +1 -0
- package/dist/lib/js/components/Modals/Modal/Modal.vue.d.ts +1 -0
- package/dist/lib/js/components/Outline/OutlineItem/OutlineItem.vue.d.ts +1 -0
- package/dist/lib/js/components/Pagination/Pagination.vue.d.ts +1 -0
- package/dist/lib/js/components/ProgressBar/ProgressBar.vue.d.ts +1 -0
- package/dist/lib/js/components/ProgressDonutChart/ProgressDonutChart.vue.d.ts +1 -0
- package/dist/lib/js/components/RichList/RichListItem/RichListItem.vue.d.ts +1 -0
- package/dist/lib/js/components/SelectionTile/SelectionTile.vue.d.ts +1 -0
- package/dist/lib/js/components/Statuses/AccessStatus/AccessStatus.vue.d.ts +1 -0
- package/dist/lib/js/components/Statuses/BlockadeStatus/BlockadeStatus.vue.d.ts +1 -0
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionOpenEnded/SurveyQuestionOpenEnded.vue.d.ts +1 -0
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionScale/SurveyQuestionScale.vue.d.ts +1 -0
- package/dist/lib/js/components/Switch/Switch.vue.d.ts +1 -0
- package/dist/lib/js/components/Tile/Tile.sb.shared.d.ts +1 -0
- package/dist/lib/js/components/Tile/Tile.vue.d.ts +1 -0
- package/dist/lib/js/components/Toggles/ToggleButton/ToggleButton.vue.d.ts +1 -0
- package/dist/lib/js/icons/fontawesome.d.ts +1 -0
- package/dist/lib/js/index.d.ts +2 -0
- package/docs/405.28e06a67.iframe.bundle.js +2 -0
- package/docs/iframe.html +1 -1
- package/docs/main.c3efc488.iframe.bundle.js +1 -0
- package/docs/project.json +1 -1
- package/lib/js/components/Cards/Card/Card.consts.ts +28 -0
- package/lib/js/components/Cards/Card/Card.spec.ts +9 -0
- package/lib/js/components/Cards/Card/Card.stories.ts +36 -3
- package/lib/js/components/Cards/Card/Card.vue +157 -3
- package/lib/js/components/Cards/CardExpandable/CardExpandable.vue +1 -3
- package/lib/js/components/LoadingBar/LoadingBar.consts.ts +20 -0
- package/lib/js/components/LoadingBar/LoadingBar.stories.ts +45 -0
- package/lib/js/components/LoadingBar/LoadingBar.vue +114 -0
- package/lib/js/components/LoadingBar/index.ts +4 -0
- package/lib/js/icons/fontawesome.ts +2 -0
- package/lib/js/index.ts +2 -0
- package/lib/styles/settings/_borders.scss +5 -0
- package/package.json +1 -1
- package/docs/3.9151d012.iframe.bundle.js +0 -2
- package/docs/main.6d41ae2b.iframe.bundle.js +0 -1
- /package/docs/{3.9151d012.iframe.bundle.js.LICENSE.txt → 405.28e06a67.iframe.bundle.js.LICENSE.txt} +0 -0
package/docs/project.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1717609800966,"builder":{"name":"webpack5"},"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":false,"hasStorybookEslint":true,"refCount":0,"metaFramework":{"name":"vue-cli","packageName":"@vue/cli-service","version":"5.0.8"},"packageManager":{"type":"yarn","version":"1.22.22"},"storybookVersion":"6.5.13","language":"typescript","storybookPackages":{"@storybook/builder-webpack5":{"version":"6.5.13"},"@storybook/manager-webpack5":{"version":"6.5.13"},"@storybook/vue3":{"version":"6.5.13"},"eslint-plugin-storybook":{"version":"0.6.6"}},"framework":{"name":"vue3"},"addons":{"@storybook/addon-actions":{"version":"6.5.16"},"@storybook/addon-docs":{"version":"6.5.15"},"@storybook/addon-controls":{"version":"6.5.15"},"@storybook/addon-storysource":{"version":"6.5.15"},"@storybook/addon-viewport":{"version":"6.5.15"},"storybook-addon-designs":{"version":"6.3.1"}}}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Value } from '../../../utils/type.utils';
|
|
2
|
+
|
|
3
|
+
export const CARD_BORDER_COLORS = {
|
|
4
|
+
NEUTRAL_HEAVY: 'neutralHeavy',
|
|
5
|
+
NEUTRAL_STRONG: 'neutralStrong',
|
|
6
|
+
SUCCESS: 'success',
|
|
7
|
+
WARNING: 'warning',
|
|
8
|
+
DANGER: 'danger',
|
|
9
|
+
INFO: 'info',
|
|
10
|
+
TRANSPARENT: 'transparent',
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type CardBorderColors = Value<typeof CARD_BORDER_COLORS>;
|
|
14
|
+
|
|
15
|
+
export const CARD_BORDER_SIZES = {
|
|
16
|
+
SMALL: 'small',
|
|
17
|
+
MEDIUM: 'medium',
|
|
18
|
+
LARGE: 'large',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type CardBorderSizes = Value<typeof CARD_BORDER_SIZES>;
|
|
22
|
+
|
|
23
|
+
export const CARD_BORDER_POSITIONS = {
|
|
24
|
+
TOP: 'top',
|
|
25
|
+
LEFT: 'left',
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type CardBorderPositions = Value<typeof CARD_BORDER_POSITIONS>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { shallowMount } from '@vue/test-utils';
|
|
2
2
|
|
|
3
3
|
import Card from './Card.vue';
|
|
4
|
+
import { CARD_BORDER_COLORS, CARD_BORDER_POSITIONS, CARD_BORDER_SIZES } from './Card.consts';
|
|
5
|
+
import { LOADING_BAR_COLORS } from '../../LoadingBar';
|
|
4
6
|
|
|
5
7
|
describe('Card', () => {
|
|
6
8
|
const createComponent = ({
|
|
@@ -14,6 +16,13 @@ describe('Card', () => {
|
|
|
14
16
|
props: {
|
|
15
17
|
headerHasPadding,
|
|
16
18
|
dividerUnderHeader,
|
|
19
|
+
hasBorder: false,
|
|
20
|
+
borderSize: CARD_BORDER_SIZES.MEDIUM,
|
|
21
|
+
borderColor: CARD_BORDER_COLORS.NEUTRAL_HEAVY,
|
|
22
|
+
borderPosition: CARD_BORDER_POSITIONS.TOP,
|
|
23
|
+
hasLoadingBar: false,
|
|
24
|
+
loadingBarColor: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
25
|
+
loadingBarTime: '0',
|
|
17
26
|
},
|
|
18
27
|
slots: {
|
|
19
28
|
...(headerSlot !== '' && { header: headerSlot }),
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import Card from './Card.vue';
|
|
2
2
|
|
|
3
3
|
import { Args, ArgTypes, Meta, StoryFn } from '@storybook/vue3';
|
|
4
|
+
import { CARD_BORDER_COLORS, CARD_BORDER_POSITIONS, CARD_BORDER_SIZES } from './Card.consts';
|
|
5
|
+
import { LOADING_BAR_COLORS } from '../../LoadingBar';
|
|
4
6
|
|
|
5
7
|
export default {
|
|
6
8
|
title: 'Components/Cards/Card',
|
|
@@ -12,8 +14,16 @@ const StoryTemplate: StoryFn<typeof Card> = (args) => ({
|
|
|
12
14
|
setup() {
|
|
13
15
|
return { ...args };
|
|
14
16
|
},
|
|
15
|
-
template:
|
|
16
|
-
|
|
17
|
+
template: `<card :header-has-padding="headerHasPadding"
|
|
18
|
+
:divider-under-header="dividerUnderHeader"
|
|
19
|
+
:has-border="hasBorder"
|
|
20
|
+
:border-position="borderPosition"
|
|
21
|
+
:border-size="borderSize"
|
|
22
|
+
:border-color="borderColor"
|
|
23
|
+
:has-loading-bar="hasLoadingBar"
|
|
24
|
+
:loading-bar-color="loadingBarColor"
|
|
25
|
+
:loading-bar-time="loadingBarTime"
|
|
26
|
+
>
|
|
17
27
|
<template v-if="header" #header>
|
|
18
28
|
<div v-html="header" />
|
|
19
29
|
</template>
|
|
@@ -23,7 +33,7 @@ const StoryTemplate: StoryFn<typeof Card> = (args) => ({
|
|
|
23
33
|
<template v-if="footer" #footer>
|
|
24
34
|
<div v-html="footer" />
|
|
25
35
|
</template>
|
|
26
|
-
|
|
36
|
+
</card>`,
|
|
27
37
|
});
|
|
28
38
|
|
|
29
39
|
export const Interactive = StoryTemplate.bind({});
|
|
@@ -31,6 +41,13 @@ export const Interactive = StoryTemplate.bind({});
|
|
|
31
41
|
const args = {
|
|
32
42
|
headerHasPadding: false,
|
|
33
43
|
dividerUnderHeader: false,
|
|
44
|
+
hasBorder: false,
|
|
45
|
+
borderPosition: CARD_BORDER_POSITIONS.TOP,
|
|
46
|
+
borderSize: CARD_BORDER_SIZES.LARGE,
|
|
47
|
+
borderColor: CARD_BORDER_COLORS.NEUTRAL_HEAVY,
|
|
48
|
+
hasLoadingBar: false,
|
|
49
|
+
loadingBarColor: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
50
|
+
loadingBarTime: '0',
|
|
34
51
|
} as Args;
|
|
35
52
|
|
|
36
53
|
const argTypes = {
|
|
@@ -40,6 +57,22 @@ const argTypes = {
|
|
|
40
57
|
defaultValue: 'content slot that supports <b>HTML markup</b>',
|
|
41
58
|
},
|
|
42
59
|
footer: { control: { type: 'text' }, defaultValue: 'footer slot' },
|
|
60
|
+
borderPosition: {
|
|
61
|
+
control: { type: 'select', options: Object.values(CARD_BORDER_POSITIONS) },
|
|
62
|
+
defaultValue: CARD_BORDER_POSITIONS.TOP,
|
|
63
|
+
},
|
|
64
|
+
borderSize: {
|
|
65
|
+
control: { type: 'select', options: Object.values(CARD_BORDER_SIZES) },
|
|
66
|
+
defaultValue: CARD_BORDER_SIZES.LARGE,
|
|
67
|
+
},
|
|
68
|
+
borderColor: {
|
|
69
|
+
control: { type: 'select', options: Object.values(CARD_BORDER_COLORS) },
|
|
70
|
+
defaultValue: CARD_BORDER_COLORS.NEUTRAL_HEAVY,
|
|
71
|
+
},
|
|
72
|
+
loadingBarColor: {
|
|
73
|
+
control: { type: 'select', options: Object.values(LOADING_BAR_COLORS) },
|
|
74
|
+
defaultValue: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
75
|
+
},
|
|
43
76
|
} as ArgTypes;
|
|
44
77
|
|
|
45
78
|
Interactive.argTypes = argTypes;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
2
|
+
<div
|
|
3
|
+
:class="{
|
|
4
|
+
'ds-card': true,
|
|
5
|
+
[borderColorClass]: true,
|
|
6
|
+
[borderSizeClass]: true,
|
|
7
|
+
'-ds-top-border': hasTopBoarder,
|
|
8
|
+
'-ds-left-border': hasLeftBoarder,
|
|
9
|
+
}"
|
|
10
|
+
>
|
|
11
|
+
<ds-loading-bar
|
|
12
|
+
v-if="hasLoadingBar"
|
|
13
|
+
class="ds-card__loadingBar"
|
|
14
|
+
:time="loadingBarTime"
|
|
15
|
+
:color="loadingBarColor"
|
|
16
|
+
:size="borderSize"
|
|
17
|
+
/>
|
|
3
18
|
<div
|
|
4
19
|
v-if="$slots.header"
|
|
5
20
|
class="ds-card__header"
|
|
@@ -23,12 +38,85 @@
|
|
|
23
38
|
@import '../../../../styles/settings/spacings';
|
|
24
39
|
@import '../../../../styles/settings/shadows';
|
|
25
40
|
@import '../../../../styles/settings/radiuses';
|
|
41
|
+
@import '../../../../styles/settings/borders';
|
|
26
42
|
@import '../../../../styles/settings/colors/tokens';
|
|
27
43
|
|
|
28
44
|
.ds-card {
|
|
45
|
+
$root: &;
|
|
46
|
+
|
|
29
47
|
background-color: $color-default-background;
|
|
30
48
|
border-radius: $radius-m;
|
|
31
49
|
box-shadow: $shadow-s;
|
|
50
|
+
position: relative;
|
|
51
|
+
width: inherit;
|
|
52
|
+
|
|
53
|
+
&.-ds-top-border {
|
|
54
|
+
border-top: $border-l transparent solid;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&.-ds-left-border {
|
|
58
|
+
border-left: $border-l transparent solid;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&.-ds-border-size-small {
|
|
62
|
+
border-radius: $radius-xs;
|
|
63
|
+
border-width: $border-s;
|
|
64
|
+
|
|
65
|
+
#{$root}__loadingBar {
|
|
66
|
+
border-radius: $radius-xs $radius-xs 0 0;
|
|
67
|
+
top: -$border-s;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&.-ds-border-size-medium {
|
|
72
|
+
border-radius: $radius-s;
|
|
73
|
+
border-width: $border-m;
|
|
74
|
+
|
|
75
|
+
#{$root}__loadingBar {
|
|
76
|
+
border-radius: $radius-s $radius-s 0 0;
|
|
77
|
+
top: -$border-m;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&.-ds-border-size-large {
|
|
82
|
+
border-radius: $radius-m;
|
|
83
|
+
border-width: $border-l;
|
|
84
|
+
|
|
85
|
+
#{$root}__loadingBar {
|
|
86
|
+
border-radius: $radius-m $radius-m 0 0;
|
|
87
|
+
top: -$border-l;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&.-ds-border-color-neutralHeavy {
|
|
92
|
+
border-color: $color-neutral-border-heavy;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
&.-ds-border-color-neutralStrong {
|
|
96
|
+
border-color: $color-neutral-border-strong;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
&.-ds-border-color-success {
|
|
100
|
+
border-color: $color-success-border;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&.-ds-border-color-warning {
|
|
104
|
+
border-color: $color-warning-border;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&.-ds-border-color-danger {
|
|
108
|
+
border-color: $color-danger-border;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&.-ds-border-color-info {
|
|
112
|
+
border-color: $color-info-border;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&__loadingBar {
|
|
116
|
+
overflow: hidden;
|
|
117
|
+
position: absolute;
|
|
118
|
+
width: 100%;
|
|
119
|
+
}
|
|
32
120
|
|
|
33
121
|
&__header {
|
|
34
122
|
&.-ds-withPadding {
|
|
@@ -49,11 +137,21 @@
|
|
|
49
137
|
</style>
|
|
50
138
|
|
|
51
139
|
<script lang="ts">
|
|
52
|
-
import
|
|
140
|
+
import { PropType } from 'vue';
|
|
53
141
|
|
|
142
|
+
import DsDivider from '../../Divider/Divider.vue';
|
|
143
|
+
import DsLoadingBar, { LOADING_BAR_COLORS, LoadingBarColors } from '../../LoadingBar';
|
|
144
|
+
import {
|
|
145
|
+
CARD_BORDER_COLORS,
|
|
146
|
+
CARD_BORDER_POSITIONS,
|
|
147
|
+
CARD_BORDER_SIZES,
|
|
148
|
+
CardBorderColors,
|
|
149
|
+
CardBorderPositions,
|
|
150
|
+
CardBorderSizes,
|
|
151
|
+
} from './Card.consts';
|
|
54
152
|
export default {
|
|
55
153
|
name: 'Card',
|
|
56
|
-
components: { DsDivider },
|
|
154
|
+
components: { DsDivider, DsLoadingBar },
|
|
57
155
|
props: {
|
|
58
156
|
headerHasPadding: {
|
|
59
157
|
type: Boolean,
|
|
@@ -63,6 +161,62 @@ export default {
|
|
|
63
161
|
type: Boolean,
|
|
64
162
|
default: false,
|
|
65
163
|
},
|
|
164
|
+
hasBorder: {
|
|
165
|
+
type: Boolean,
|
|
166
|
+
default: false,
|
|
167
|
+
},
|
|
168
|
+
borderPosition: {
|
|
169
|
+
type: String as PropType<CardBorderPositions>,
|
|
170
|
+
default: CARD_BORDER_POSITIONS.TOP,
|
|
171
|
+
},
|
|
172
|
+
borderSize: {
|
|
173
|
+
type: String as PropType<CardBorderSizes>,
|
|
174
|
+
default: CARD_BORDER_SIZES.LARGE,
|
|
175
|
+
},
|
|
176
|
+
borderColor: {
|
|
177
|
+
type: String as PropType<CardBorderColors>,
|
|
178
|
+
default: CARD_BORDER_COLORS.NEUTRAL_HEAVY,
|
|
179
|
+
},
|
|
180
|
+
hasLoadingBar: {
|
|
181
|
+
type: Boolean,
|
|
182
|
+
default: false,
|
|
183
|
+
},
|
|
184
|
+
loadingBarColor: {
|
|
185
|
+
type: String as PropType<LoadingBarColors>,
|
|
186
|
+
default: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
187
|
+
},
|
|
188
|
+
loadingBarTime: {
|
|
189
|
+
type: String,
|
|
190
|
+
default: '0',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
computed: {
|
|
195
|
+
hasLeftBoarder() {
|
|
196
|
+
return (
|
|
197
|
+
this.hasBorder &&
|
|
198
|
+
this.borderPosition === CARD_BORDER_POSITIONS.LEFT &&
|
|
199
|
+
!this.hasLoadingBar
|
|
200
|
+
);
|
|
201
|
+
},
|
|
202
|
+
hasTopBoarder() {
|
|
203
|
+
return (
|
|
204
|
+
(this.hasBorder && this.borderPosition === CARD_BORDER_POSITIONS.TOP) ||
|
|
205
|
+
this.hasLoadingBar
|
|
206
|
+
);
|
|
207
|
+
},
|
|
208
|
+
borderColorClass() {
|
|
209
|
+
if (this.hasLoadingBar) {
|
|
210
|
+
return '-ds-border-color-transparent';
|
|
211
|
+
}
|
|
212
|
+
return `-ds-border-color-${this.borderColor}`;
|
|
213
|
+
},
|
|
214
|
+
borderSizeClass() {
|
|
215
|
+
if (!this.hasBorder && !this.hasLoadingBar) {
|
|
216
|
+
return '';
|
|
217
|
+
}
|
|
218
|
+
return `-ds-border-size-${this.borderSize}`;
|
|
219
|
+
},
|
|
66
220
|
},
|
|
67
221
|
};
|
|
68
222
|
</script>
|
|
@@ -104,9 +104,7 @@ export default {
|
|
|
104
104
|
default: false,
|
|
105
105
|
},
|
|
106
106
|
},
|
|
107
|
-
|
|
108
|
-
// eslint-disable-next-line vue/require-emit-validator
|
|
109
|
-
emits: ['update:isExpanded'],
|
|
107
|
+
emits: { 'update:isExpanded': (payload: Boolean) => true },
|
|
110
108
|
data() {
|
|
111
109
|
return {
|
|
112
110
|
isExpandedInternal: false,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Value } from '../../utils/type.utils';
|
|
2
|
+
|
|
3
|
+
export const LOADING_BAR_COLORS = {
|
|
4
|
+
NEUTRAL_HEAVY: 'neutralHeavy',
|
|
5
|
+
NEUTRAL_STRONG: 'neutralStrong',
|
|
6
|
+
SUCCESS: 'success',
|
|
7
|
+
WARNING: 'warning',
|
|
8
|
+
DANGER: 'danger',
|
|
9
|
+
INFO: 'info',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type LoadingBarColors = Value<typeof LOADING_BAR_COLORS>;
|
|
13
|
+
|
|
14
|
+
export const LOADING_BAR_SIZES = {
|
|
15
|
+
SMALL: 'small',
|
|
16
|
+
MEDIUM: 'medium',
|
|
17
|
+
LARGE: 'large',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type LoadingBarSizes = Value<typeof LOADING_BAR_SIZES>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Args, ArgTypes, Meta, StoryFn } from '@storybook/vue3';
|
|
2
|
+
import LoadingBar from './LoadingBar.vue';
|
|
3
|
+
import { LOADING_BAR_COLORS, LOADING_BAR_SIZES } from './LoadingBar.consts';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Components/LoadingBar',
|
|
7
|
+
component: LoadingBar,
|
|
8
|
+
} as Meta<typeof LoadingBar>;
|
|
9
|
+
|
|
10
|
+
const StoryTemplate: StoryFn<typeof LoadingBar> = (args) => ({
|
|
11
|
+
components: { DsLoadingBar: LoadingBar },
|
|
12
|
+
setup() {
|
|
13
|
+
return { ...args };
|
|
14
|
+
},
|
|
15
|
+
template: `<ds-loading-bar :size="size" :color="color" :time="time" />`,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const Interactive = StoryTemplate.bind({});
|
|
19
|
+
|
|
20
|
+
const args = {
|
|
21
|
+
size: LOADING_BAR_SIZES.LARGE,
|
|
22
|
+
color: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
23
|
+
time: '5',
|
|
24
|
+
} as Args;
|
|
25
|
+
|
|
26
|
+
const argTypes = {
|
|
27
|
+
size: {
|
|
28
|
+
control: { type: 'select', options: Object.values(LOADING_BAR_SIZES) },
|
|
29
|
+
defaultValue: LOADING_BAR_SIZES.LARGE,
|
|
30
|
+
},
|
|
31
|
+
color: {
|
|
32
|
+
control: { type: 'select', options: Object.values(LOADING_BAR_COLORS) },
|
|
33
|
+
defaultValue: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
34
|
+
},
|
|
35
|
+
} as ArgTypes;
|
|
36
|
+
|
|
37
|
+
Interactive.argTypes = argTypes;
|
|
38
|
+
Interactive.args = args;
|
|
39
|
+
|
|
40
|
+
Interactive.parameters = {
|
|
41
|
+
design: {
|
|
42
|
+
type: 'figma',
|
|
43
|
+
url: 'https://www.figma.com/design/izQdYyiBR1GQgFkaOIfIJI/LMS---DS-Components?node-id=8375-32853',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="ds-loadingBar" :class="[sizeClassName]">
|
|
3
|
+
<span
|
|
4
|
+
:class="['ds-loadingBar__loader', `-ds-border-color-${color}`]"
|
|
5
|
+
:style="loadingBarStyles"
|
|
6
|
+
/>
|
|
7
|
+
</div>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<style scoped lang="scss">
|
|
11
|
+
@import '../../../styles/settings/colors/tokens';
|
|
12
|
+
@import '../../../styles/settings/borders';
|
|
13
|
+
|
|
14
|
+
.ds-loadingBar {
|
|
15
|
+
background-color: $color-neutral-background;
|
|
16
|
+
display: flex;
|
|
17
|
+
|
|
18
|
+
&.-ds-size-small {
|
|
19
|
+
height: $border-s;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&.-ds-size-medium {
|
|
23
|
+
height: $border-m;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&.-ds-size-large {
|
|
27
|
+
height: $border-l;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&__loader {
|
|
31
|
+
width: 0;
|
|
32
|
+
|
|
33
|
+
&.-ds-border-color-neutralHeavy {
|
|
34
|
+
background-color: $color-neutral-border-heavy;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&.-ds-border-color-neutralStrong {
|
|
38
|
+
background-color: $color-neutral-border-strong;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&.-ds-border-color-success {
|
|
42
|
+
background-color: $color-success-border;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&.-ds-border-color-warning {
|
|
46
|
+
background-color: $color-warning-border;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&.-ds-border-color-danger {
|
|
50
|
+
background-color: $color-danger-border;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&.-ds-border-color-info {
|
|
54
|
+
background-color: $color-info-border;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
|
|
60
|
+
<script lang="ts">
|
|
61
|
+
import { PropType } from 'vue';
|
|
62
|
+
import {
|
|
63
|
+
LOADING_BAR_COLORS,
|
|
64
|
+
LOADING_BAR_SIZES,
|
|
65
|
+
LoadingBarColors,
|
|
66
|
+
LoadingBarSizes,
|
|
67
|
+
} from './LoadingBar.consts';
|
|
68
|
+
|
|
69
|
+
export default {
|
|
70
|
+
name: 'LoadingBar',
|
|
71
|
+
props: {
|
|
72
|
+
color: {
|
|
73
|
+
type: String as PropType<LoadingBarColors>,
|
|
74
|
+
default: LOADING_BAR_COLORS.NEUTRAL_HEAVY,
|
|
75
|
+
},
|
|
76
|
+
size: {
|
|
77
|
+
type: String as PropType<LoadingBarSizes>,
|
|
78
|
+
default: LOADING_BAR_SIZES.LARGE,
|
|
79
|
+
},
|
|
80
|
+
time: {
|
|
81
|
+
type: String,
|
|
82
|
+
required: true,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
data() {
|
|
86
|
+
return {
|
|
87
|
+
intervalId: 0,
|
|
88
|
+
width: 0,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
computed: {
|
|
92
|
+
sizeClassName() {
|
|
93
|
+
return `-ds-size-${this.size}`;
|
|
94
|
+
},
|
|
95
|
+
loadingBarStyles() {
|
|
96
|
+
return {
|
|
97
|
+
width: `${this.width}%`,
|
|
98
|
+
transition: `width ${this.time}s linear`,
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
mounted() {
|
|
103
|
+
if (this.time === '0') {
|
|
104
|
+
this.width = 100;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// without postponing the width change, the transition won't work,
|
|
108
|
+
// and the loading bar is 100% width right away
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
this.width = 100;
|
|
111
|
+
}, 0);
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
</script>
|
|
@@ -56,6 +56,7 @@ import { faCommentDots } from '@fortawesome/pro-regular-svg-icons/faCommentDots'
|
|
|
56
56
|
import { faComments } from '@fortawesome/pro-regular-svg-icons/faComments';
|
|
57
57
|
import { faCompress } from '@fortawesome/pro-regular-svg-icons/faCompress';
|
|
58
58
|
import { faCopy } from '@fortawesome/pro-regular-svg-icons/faCopy';
|
|
59
|
+
import { faCreditCard } from '@fortawesome/pro-regular-svg-icons/faCreditCard';
|
|
59
60
|
import { faEarthAmericas } from '@fortawesome/pro-regular-svg-icons/faEarthAmericas';
|
|
60
61
|
import { faEllipsis } from '@fortawesome/pro-regular-svg-icons/faEllipsis';
|
|
61
62
|
import { faEllipsisVertical } from '@fortawesome/pro-regular-svg-icons/faEllipsisVertical';
|
|
@@ -259,6 +260,7 @@ export const FONTAWESOME_ICONS = {
|
|
|
259
260
|
FA_COMMENTS_QUESTION_CHECK: faCommentsQuestionCheck,
|
|
260
261
|
FA_COMPRESS: faCompress,
|
|
261
262
|
FA_COPY: faCopy,
|
|
263
|
+
FA_CREDIT_CARD: faCreditCard,
|
|
262
264
|
FA_DOT_CIRCLE_SOLID: fasCircleDot,
|
|
263
265
|
FA_EARTH_AMERICAS: faEarthAmericas,
|
|
264
266
|
FA_ELLIPSIS: faEllipsis,
|
package/lib/js/index.ts
CHANGED
|
@@ -69,6 +69,8 @@ export { default as SelectListSectionTitle } from './components/SelectList/Selec
|
|
|
69
69
|
export * from './components/SelectList/SelectListItem/SelectListItem.consts';
|
|
70
70
|
export { default as SelectionTile } from './components/SelectionTile';
|
|
71
71
|
export * from './components/SelectionTile';
|
|
72
|
+
export { default as LoadingBar } from './components/LoadingBar';
|
|
73
|
+
export * from './components/LoadingBar';
|
|
72
74
|
export { default as PopOver } from './components/PopOver';
|
|
73
75
|
export * from './components/PopOver/PopOver.consts';
|
|
74
76
|
export { default as Dropdown } from './components/Dropdown';
|