@bethinkpl/design-system 44.0.0 → 45.0.0
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.css +1 -1
- package/dist/design-system.js +9623 -9592
- package/dist/design-system.js.map +1 -1
- package/dist/lib/js/components/Buttons/IconButton/IconButton.vue.d.ts +1 -1
- package/dist/lib/js/components/Callout/Callout.consts.d.ts +32 -0
- package/dist/lib/js/components/{ActionContent/ActionContent.vue.d.ts → Callout/Callout.vue.d.ts} +17 -6
- package/dist/lib/js/components/Callout/index.d.ts +4 -0
- package/dist/lib/js/components/DatePickers/DateBox/DateBox.vue.d.ts +1 -1
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.vue.d.ts +5 -5
- package/dist/lib/js/components/DatePickers/DateRangePicker/DateRangePicker.vue.d.ts +2 -2
- package/dist/lib/js/components/Divider/Divider.vue.d.ts +1 -1
- package/dist/lib/js/components/Drawer/DrawerDivider/DrawerDivider.vue.d.ts +1 -1
- package/dist/lib/js/components/Drawer/DrawerSection/DrawerSection.vue.d.ts +4 -4
- package/dist/lib/js/components/Drawer/DrawerTile/DrawerTile.vue.d.ts +4 -4
- package/dist/lib/js/components/Dropdown/Dropdown.vue.d.ts +1 -1
- package/dist/lib/js/components/Form/FormField/FormField.utils.d.ts +1 -1
- package/dist/lib/js/components/Form/InputField/InputField.vue.d.ts +2 -2
- package/dist/lib/js/components/Form/PasswordField/PasswordField.vue.d.ts +2 -2
- package/dist/lib/js/components/Form/SelectField/SelectField.vue.d.ts +2 -2
- package/dist/lib/js/components/Form/TextAreaField/TextAreaField.vue.d.ts +2 -2
- package/dist/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue.d.ts +5 -5
- package/dist/lib/js/components/Headers/PageHeader/PageHeader.vue.d.ts +1 -1
- package/dist/lib/js/components/Headers/SectionHeader/SectionHeader.vue.d.ts +3 -3
- package/dist/lib/js/components/IconText/IconText.vue.d.ts +1 -1
- package/dist/lib/js/components/Image/Image.vue.d.ts +1 -1
- package/dist/lib/js/components/Menu/MenuDivider/MenuDivider.vue.d.ts +1 -1
- package/dist/lib/js/components/Modals/Modal/Modal.vue.d.ts +2 -2
- package/dist/lib/js/components/Modals/ModalDialog/ModalDialog.vue.d.ts +2 -2
- package/dist/lib/js/components/Pagination/Pagination.vue.d.ts +2 -2
- package/dist/lib/js/components/RichList/BasicRichListItem/BasicRichListItem.vue.d.ts +7 -7
- package/dist/lib/js/components/RichList/RichListItem/RichListItem.vue.d.ts +3 -3
- package/dist/lib/js/components/SelectList/SelectListItemDivider/SelectListItemDivider.vue.d.ts +1 -1
- package/dist/lib/js/components/Skeleton/Skeleton.vue.d.ts +1 -1
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionOpenEnded/SurveyQuestionOpenEnded.vue.d.ts +3 -3
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionScale/SurveyQuestionScale.vue.d.ts +3 -3
- package/dist/lib/js/components/Tile/Tile.sb.shared.d.ts +2 -2
- package/dist/lib/js/components/Tile/Tile.vue.d.ts +2 -2
- package/dist/lib/js/components/Toggles/ToggleButton/ToggleButton.vue.d.ts +1 -1
- package/dist/lib/js/index.d.ts +2 -1
- package/lib/js/components/Callout/Callout.consts.ts +25 -0
- package/lib/js/components/Callout/Callout.spec.ts +257 -0
- package/lib/js/components/Callout/Callout.stories.ts +209 -0
- package/lib/js/components/Callout/Callout.vue +161 -0
- package/lib/js/components/Callout/index.ts +4 -0
- package/lib/js/components/Cards/Card/Card.vue +1 -1
- package/lib/js/components/Form/PasswordField/PasswordField.vue +1 -1
- package/lib/js/index.ts +2 -1
- package/package.json +1 -1
- package/dist/lib/js/components/ActionContent/index.d.ts +0 -3
- package/lib/js/components/ActionContent/ActionContent.spec.ts +0 -99
- package/lib/js/components/ActionContent/ActionContent.stories.ts +0 -141
- package/lib/js/components/ActionContent/ActionContent.vue +0 -104
- package/lib/js/components/ActionContent/index.ts +0 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="ds-callout"
|
|
4
|
+
:class="{
|
|
5
|
+
'-ds-layout-vertical': layout === CALLOUT_LAYOUTS.VERTICAL,
|
|
6
|
+
'-ds-layout-horizontal': layout === CALLOUT_LAYOUTS.HORIZONTAL,
|
|
7
|
+
'-ds-actions-vertical': isActionVertical,
|
|
8
|
+
}"
|
|
9
|
+
>
|
|
10
|
+
<div class="ds-callout__content">
|
|
11
|
+
<ds-feature-icon
|
|
12
|
+
class="ds-callout__icon"
|
|
13
|
+
:icon="icon"
|
|
14
|
+
:color="iconColor"
|
|
15
|
+
:size="featureIconSize"
|
|
16
|
+
double-background
|
|
17
|
+
/>
|
|
18
|
+
<ds-text-group
|
|
19
|
+
class="ds-callout__text"
|
|
20
|
+
:eyebrow-text="eyebrowText"
|
|
21
|
+
:is-eyebrow-text-uppercase="false"
|
|
22
|
+
:main-text="mainText"
|
|
23
|
+
:supporting-text="supportingText"
|
|
24
|
+
:size="textGroupSize"
|
|
25
|
+
:align="textGroupAlign"
|
|
26
|
+
:main-text-color="mainTextColor"
|
|
27
|
+
:is-interactive="false"
|
|
28
|
+
/>
|
|
29
|
+
</div>
|
|
30
|
+
<div v-if="$slots.actions || buttonLabel" class="ds-callout__actions">
|
|
31
|
+
<slot name="actions">
|
|
32
|
+
<ds-button
|
|
33
|
+
:color="BUTTON_COLORS.PRIMARY"
|
|
34
|
+
:type="BUTTON_TYPES.FILLED"
|
|
35
|
+
:size="BUTTON_SIZES.SMALL"
|
|
36
|
+
:radius="BUTTON_RADIUSES.ROUNDED"
|
|
37
|
+
:icon-left="buttonIcon"
|
|
38
|
+
@click="$emit('button-clicked', $event)"
|
|
39
|
+
>{{ buttonLabel }}</ds-button
|
|
40
|
+
>
|
|
41
|
+
</slot>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<style lang="scss" scoped>
|
|
47
|
+
@import '../../../styles/settings/spacings';
|
|
48
|
+
|
|
49
|
+
.ds-callout {
|
|
50
|
+
$self: &;
|
|
51
|
+
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: $space-8;
|
|
55
|
+
width: 100%;
|
|
56
|
+
|
|
57
|
+
&.-ds-layout-horizontal:not(.-ds-actions-vertical) {
|
|
58
|
+
align-items: center;
|
|
59
|
+
flex-direction: row;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&__content {
|
|
63
|
+
display: flex;
|
|
64
|
+
|
|
65
|
+
#{$self}.-ds-layout-vertical & {
|
|
66
|
+
align-items: center;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
gap: $space-4;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#{$self}.-ds-layout-horizontal & {
|
|
72
|
+
align-items: center;
|
|
73
|
+
flex: 1 1 auto;
|
|
74
|
+
gap: $space-6;
|
|
75
|
+
min-width: 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&__actions {
|
|
80
|
+
display: flex;
|
|
81
|
+
gap: $space-8;
|
|
82
|
+
|
|
83
|
+
#{$self}.-ds-layout-vertical & {
|
|
84
|
+
justify-content: center;
|
|
85
|
+
width: 100%;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#{$self}.-ds-actions-vertical & {
|
|
89
|
+
align-items: stretch;
|
|
90
|
+
flex-direction: column;
|
|
91
|
+
width: 100%;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
</style>
|
|
96
|
+
|
|
97
|
+
<script setup lang="ts">
|
|
98
|
+
import { computed } from 'vue';
|
|
99
|
+
import DsFeatureIcon from '../Icons/FeatureIcon';
|
|
100
|
+
import { FEATURE_ICON_SIZES } from '../Icons/FeatureIcon/FeatureIcon.consts';
|
|
101
|
+
import DsTextGroup from '../TextGroup/TextGroup.vue';
|
|
102
|
+
import { TEXT_GROUP_ALIGNS, TEXT_GROUP_SIZES } from '../TextGroup/TextGroup.consts';
|
|
103
|
+
import DsButton, { BUTTON_RADIUSES } from '../Buttons/Button';
|
|
104
|
+
import { BUTTON_COLORS, BUTTON_SIZES, BUTTON_TYPES } from '../Buttons/Button/Button.consts';
|
|
105
|
+
import { IconItem } from '../Icons/Icon';
|
|
106
|
+
import {
|
|
107
|
+
CALLOUT_ICON_COLORS,
|
|
108
|
+
CALLOUT_LAYOUTS,
|
|
109
|
+
CALLOUT_MAIN_TEXT_COLORS,
|
|
110
|
+
CALLOUT_SIZES,
|
|
111
|
+
CalloutIconColor,
|
|
112
|
+
CalloutLayout,
|
|
113
|
+
CalloutMainTextColor,
|
|
114
|
+
CalloutSize,
|
|
115
|
+
} from './Callout.consts';
|
|
116
|
+
|
|
117
|
+
const {
|
|
118
|
+
layout = CALLOUT_LAYOUTS.VERTICAL,
|
|
119
|
+
size = CALLOUT_SIZES.MEDIUM,
|
|
120
|
+
iconColor = CALLOUT_ICON_COLORS.PRIMARY,
|
|
121
|
+
eyebrowText = null,
|
|
122
|
+
mainText = null,
|
|
123
|
+
supportingText = null,
|
|
124
|
+
mainTextColor = CALLOUT_MAIN_TEXT_COLORS.PRIMARY,
|
|
125
|
+
buttonLabel = null,
|
|
126
|
+
buttonIcon = null,
|
|
127
|
+
isActionVertical = false,
|
|
128
|
+
} = defineProps<{
|
|
129
|
+
icon: IconItem;
|
|
130
|
+
layout?: CalloutLayout;
|
|
131
|
+
size?: CalloutSize;
|
|
132
|
+
iconColor?: CalloutIconColor;
|
|
133
|
+
eyebrowText?: string | null;
|
|
134
|
+
mainText?: string | null;
|
|
135
|
+
supportingText?: string | null;
|
|
136
|
+
mainTextColor?: CalloutMainTextColor;
|
|
137
|
+
buttonLabel?: string | null;
|
|
138
|
+
buttonIcon?: IconItem | null;
|
|
139
|
+
isActionVertical?: boolean;
|
|
140
|
+
}>();
|
|
141
|
+
|
|
142
|
+
defineEmits<{
|
|
143
|
+
'button-clicked': [e: Event];
|
|
144
|
+
}>();
|
|
145
|
+
|
|
146
|
+
defineSlots<{
|
|
147
|
+
actions?: () => any;
|
|
148
|
+
}>();
|
|
149
|
+
|
|
150
|
+
const featureIconSize = computed(() =>
|
|
151
|
+
size === CALLOUT_SIZES.LARGE ? FEATURE_ICON_SIZES.LARGE : FEATURE_ICON_SIZES.MEDIUM,
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
const textGroupSize = computed(() =>
|
|
155
|
+
size === CALLOUT_SIZES.SMALL ? TEXT_GROUP_SIZES.MEDIUM : TEXT_GROUP_SIZES.LARGE,
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
const textGroupAlign = computed(() =>
|
|
159
|
+
layout === CALLOUT_LAYOUTS.VERTICAL ? TEXT_GROUP_ALIGNS.CENTER : TEXT_GROUP_ALIGNS.LEFT,
|
|
160
|
+
);
|
|
161
|
+
</script>
|
package/lib/js/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { default as DsActionContent } from './components/ActionContent';
|
|
2
1
|
export { default as Avatar } from './components/Avatar';
|
|
3
2
|
export * from './components/Avatar/Avatar.consts';
|
|
4
3
|
export { default as Badge } from './components/Badge';
|
|
@@ -15,6 +14,8 @@ export * from './components/Buttons/Button/Button.consts';
|
|
|
15
14
|
export { default as ToggleButton } from './components/Toggles/ToggleButton';
|
|
16
15
|
export { default as DsToggleButton } from './components/Toggles/ToggleButton';
|
|
17
16
|
export * from './components/Toggles/ToggleButton/ToggleButton.consts';
|
|
17
|
+
export { default as DsCallout } from './components/Callout';
|
|
18
|
+
export * from './components/Callout/Callout.consts';
|
|
18
19
|
export { default as Card } from './components/Cards/Card/';
|
|
19
20
|
export * from './components/Cards/Card';
|
|
20
21
|
export { default as DsCard } from './components/Cards/Card';
|
package/package.json
CHANGED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { mount } from '@vue/test-utils';
|
|
3
|
-
import { h } from 'vue';
|
|
4
|
-
import ActionContent from './ActionContent.vue';
|
|
5
|
-
import DsFeatureIcon from '../Icons/FeatureIcon';
|
|
6
|
-
import DsButton from '../Buttons/Button';
|
|
7
|
-
import { ICONS } from '../Icons/Icon';
|
|
8
|
-
|
|
9
|
-
describe('ActionContent', () => {
|
|
10
|
-
it('renders', () => {
|
|
11
|
-
const wrapper = mount(ActionContent);
|
|
12
|
-
|
|
13
|
-
expect(wrapper.exists()).toBe(true);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('renders the feature icon when icon is provided', () => {
|
|
17
|
-
const wrapper = mount(ActionContent, {
|
|
18
|
-
props: {
|
|
19
|
-
icon: ICONS.FA_COMMENT_DOTS,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
expect(wrapper.findComponent(DsFeatureIcon).exists()).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('does not render the feature icon when icon is not provided', () => {
|
|
27
|
-
const wrapper = mount(ActionContent);
|
|
28
|
-
|
|
29
|
-
expect(wrapper.findComponent(DsFeatureIcon).exists()).toBe(false);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('passes main and supporting text to the text group', () => {
|
|
33
|
-
const wrapper = mount(ActionContent, {
|
|
34
|
-
props: {
|
|
35
|
-
mainText: 'Main text',
|
|
36
|
-
supportingText: 'Supporting text',
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
expect(wrapper.find('.ds-actionContent__text').text()).toContain('Main text');
|
|
41
|
-
expect(wrapper.find('.ds-actionContent__text').text()).toContain('Supporting text');
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('renders a default primary button with the button label and icon', () => {
|
|
45
|
-
const wrapper = mount(ActionContent, {
|
|
46
|
-
props: {
|
|
47
|
-
buttonLabel: 'Confirm',
|
|
48
|
-
buttonIcon: ICONS.FA_COMMENT_DOTS,
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const button = wrapper.findComponent(DsButton);
|
|
53
|
-
expect(button.exists()).toBe(true);
|
|
54
|
-
expect(button.text()).toBe('Confirm');
|
|
55
|
-
expect(button.props('iconLeft')).toStrictEqual(ICONS.FA_COMMENT_DOTS);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('emits button-clicked when the default button is clicked', async () => {
|
|
59
|
-
const wrapper = mount(ActionContent, {
|
|
60
|
-
props: {
|
|
61
|
-
buttonLabel: 'Confirm',
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
await wrapper.findComponent(DsButton).trigger('click');
|
|
66
|
-
|
|
67
|
-
expect(wrapper.emitted('button-clicked')).toHaveLength(1);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('renders the actions slot instead of the default button', () => {
|
|
71
|
-
const wrapper = mount(ActionContent, {
|
|
72
|
-
props: {
|
|
73
|
-
buttonLabel: 'Default button',
|
|
74
|
-
},
|
|
75
|
-
slots: {
|
|
76
|
-
actions: () => h('span', { class: 'custom-action' }, 'Custom action'),
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
expect(wrapper.find('.custom-action').exists()).toBe(true);
|
|
81
|
-
expect(wrapper.findComponent(DsButton).exists()).toBe(false);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('adds the vertical modifier when isActionVertical is set', () => {
|
|
85
|
-
const wrapper = mount(ActionContent, {
|
|
86
|
-
props: {
|
|
87
|
-
isActionVertical: true,
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
expect(wrapper.find('.ds-actionContent__actions').classes()).toContain('-ds-vertical');
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('does not add the vertical modifier by default', () => {
|
|
95
|
-
const wrapper = mount(ActionContent);
|
|
96
|
-
|
|
97
|
-
expect(wrapper.find('.ds-actionContent__actions').classes()).not.toContain('-ds-vertical');
|
|
98
|
-
});
|
|
99
|
-
});
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import ActionContent from './ActionContent.vue';
|
|
2
|
-
import DsButton from '../Buttons/Button';
|
|
3
|
-
import { BUTTON_COLORS, BUTTON_SIZES, BUTTON_TYPES } from '../Buttons/Button/Button.consts';
|
|
4
|
-
import { ICONS } from '../Icons/Icon';
|
|
5
|
-
|
|
6
|
-
import { Args, ArgTypes, Meta, StoryFn } from '@storybook/vue3';
|
|
7
|
-
import { toRefs } from 'vue';
|
|
8
|
-
|
|
9
|
-
export default {
|
|
10
|
-
title: 'Components/ActionContent',
|
|
11
|
-
component: ActionContent,
|
|
12
|
-
} as Meta<typeof ActionContent>;
|
|
13
|
-
|
|
14
|
-
const StoryTemplate: StoryFn<typeof ActionContent> = (args) => {
|
|
15
|
-
return {
|
|
16
|
-
components: { ActionContent },
|
|
17
|
-
setup() {
|
|
18
|
-
return {
|
|
19
|
-
...toRefs(args),
|
|
20
|
-
ICONS,
|
|
21
|
-
};
|
|
22
|
-
},
|
|
23
|
-
template: `
|
|
24
|
-
<action-content
|
|
25
|
-
:icon="ICONS[icon]"
|
|
26
|
-
:main-text="mainText"
|
|
27
|
-
:supporting-text="supportingText"
|
|
28
|
-
:button-label="buttonLabel"
|
|
29
|
-
:button-icon="ICONS[buttonIcon]"
|
|
30
|
-
:is-action-vertical="isActionVertical"
|
|
31
|
-
>
|
|
32
|
-
<template v-if="actions" #actions><span v-html="actions" /></template>
|
|
33
|
-
</action-content>`,
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export const Interactive = StoryTemplate.bind({});
|
|
38
|
-
|
|
39
|
-
const args = {
|
|
40
|
-
icon: 'FA_COMMENT_DOTS',
|
|
41
|
-
mainText: 'Main text tutaj sobie będzie',
|
|
42
|
-
supportingText: 'Supporting text tutaj będzie',
|
|
43
|
-
buttonLabel: 'Button label',
|
|
44
|
-
buttonIcon: null,
|
|
45
|
-
isActionVertical: false,
|
|
46
|
-
actions: '',
|
|
47
|
-
} as Args;
|
|
48
|
-
|
|
49
|
-
const argTypes = {
|
|
50
|
-
icon: {
|
|
51
|
-
control: 'select',
|
|
52
|
-
options: [null, ...Object.keys(ICONS)],
|
|
53
|
-
},
|
|
54
|
-
mainText: {
|
|
55
|
-
control: 'text',
|
|
56
|
-
},
|
|
57
|
-
supportingText: {
|
|
58
|
-
control: 'text',
|
|
59
|
-
},
|
|
60
|
-
buttonLabel: {
|
|
61
|
-
control: 'text',
|
|
62
|
-
},
|
|
63
|
-
buttonIcon: {
|
|
64
|
-
control: 'select',
|
|
65
|
-
options: [null, ...Object.keys(ICONS)],
|
|
66
|
-
},
|
|
67
|
-
isActionVertical: {
|
|
68
|
-
control: 'boolean',
|
|
69
|
-
},
|
|
70
|
-
actions: {
|
|
71
|
-
control: 'text',
|
|
72
|
-
},
|
|
73
|
-
} as ArgTypes;
|
|
74
|
-
|
|
75
|
-
Interactive.argTypes = argTypes;
|
|
76
|
-
Interactive.args = args;
|
|
77
|
-
|
|
78
|
-
Interactive.parameters = {
|
|
79
|
-
design: {
|
|
80
|
-
type: 'figma',
|
|
81
|
-
url: 'https://www.figma.com/design/uLBrJvVwTYzuch6VnDOBlL/INI-188---Dyskusje-2.0-NEW?node-id=4001-152961&m=dev',
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const WithActionsSlotTemplate: StoryFn<typeof ActionContent> = (args) => {
|
|
86
|
-
return {
|
|
87
|
-
components: { ActionContent, DsButton },
|
|
88
|
-
setup() {
|
|
89
|
-
return {
|
|
90
|
-
...toRefs(args),
|
|
91
|
-
ICONS,
|
|
92
|
-
BUTTON_COLORS,
|
|
93
|
-
BUTTON_SIZES,
|
|
94
|
-
BUTTON_TYPES,
|
|
95
|
-
};
|
|
96
|
-
},
|
|
97
|
-
template: `
|
|
98
|
-
<action-content
|
|
99
|
-
:icon="ICONS[icon]"
|
|
100
|
-
:main-text="mainText"
|
|
101
|
-
:supporting-text="supportingText"
|
|
102
|
-
:is-action-vertical="isActionVertical"
|
|
103
|
-
>
|
|
104
|
-
<template #actions>
|
|
105
|
-
<ds-button
|
|
106
|
-
:color="BUTTON_COLORS.NEUTRAL"
|
|
107
|
-
:type="BUTTON_TYPES.OUTLINED"
|
|
108
|
-
:size="BUTTON_SIZES.SMALL"
|
|
109
|
-
>Cancel</ds-button>
|
|
110
|
-
<ds-button
|
|
111
|
-
:color="BUTTON_COLORS.PRIMARY"
|
|
112
|
-
:type="BUTTON_TYPES.FILLED"
|
|
113
|
-
:size="BUTTON_SIZES.SMALL"
|
|
114
|
-
>Confirm</ds-button>
|
|
115
|
-
</template>
|
|
116
|
-
</action-content>`,
|
|
117
|
-
};
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
export const WithActionsSlot = WithActionsSlotTemplate.bind({});
|
|
121
|
-
|
|
122
|
-
WithActionsSlot.argTypes = {
|
|
123
|
-
icon: argTypes.icon,
|
|
124
|
-
mainText: argTypes.mainText,
|
|
125
|
-
supportingText: argTypes.supportingText,
|
|
126
|
-
isActionVertical: argTypes.isActionVertical,
|
|
127
|
-
} as ArgTypes;
|
|
128
|
-
|
|
129
|
-
WithActionsSlot.args = {
|
|
130
|
-
icon: 'FA_COMMENT_DOTS',
|
|
131
|
-
mainText: 'Main text tutaj sobie będzie',
|
|
132
|
-
supportingText: 'Supporting text tutaj będzie',
|
|
133
|
-
isActionVertical: false,
|
|
134
|
-
} as Args;
|
|
135
|
-
|
|
136
|
-
WithActionsSlot.parameters = {
|
|
137
|
-
design: {
|
|
138
|
-
type: 'figma',
|
|
139
|
-
url: 'https://www.figma.com/design/uLBrJvVwTYzuch6VnDOBlL/INI-188---Dyskusje-2.0-NEW?node-id=4001-152961&m=dev',
|
|
140
|
-
},
|
|
141
|
-
};
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="ds-actionContent">
|
|
3
|
-
<div class="ds-actionContent__content">
|
|
4
|
-
<ds-feature-icon
|
|
5
|
-
v-if="icon"
|
|
6
|
-
class="ds-actionContent__icon"
|
|
7
|
-
:icon="icon"
|
|
8
|
-
:color="FEATURE_ICON_COLOR.PRIMARY"
|
|
9
|
-
:size="FEATURE_ICON_SIZES.MEDIUM"
|
|
10
|
-
double-background
|
|
11
|
-
/>
|
|
12
|
-
<ds-text-group
|
|
13
|
-
class="ds-actionContent__text"
|
|
14
|
-
:eyebrow-text="null"
|
|
15
|
-
:main-text="mainText"
|
|
16
|
-
:supporting-text="supportingText"
|
|
17
|
-
:size="TEXT_GROUP_SIZES.LARGE"
|
|
18
|
-
:align="TEXT_GROUP_ALIGNS.CENTER"
|
|
19
|
-
:main-text-color="TEXT_GROUP_MAIN_TEXT_COLORS.PRIMARY"
|
|
20
|
-
:is-interactive="false"
|
|
21
|
-
/>
|
|
22
|
-
</div>
|
|
23
|
-
<div class="ds-actionContent__actions" :class="{ '-ds-vertical': isActionVertical }">
|
|
24
|
-
<slot name="actions">
|
|
25
|
-
<ds-button
|
|
26
|
-
:color="BUTTON_COLORS.PRIMARY"
|
|
27
|
-
:type="BUTTON_TYPES.FILLED"
|
|
28
|
-
:size="BUTTON_SIZES.SMALL"
|
|
29
|
-
:radius="BUTTON_RADIUSES.ROUNDED"
|
|
30
|
-
:icon-left="buttonIcon"
|
|
31
|
-
@click="$emit('button-clicked')"
|
|
32
|
-
>{{ buttonLabel }}</ds-button
|
|
33
|
-
>
|
|
34
|
-
</slot>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</template>
|
|
38
|
-
|
|
39
|
-
<style lang="scss" scoped>
|
|
40
|
-
@import '../../../styles/settings/spacings';
|
|
41
|
-
|
|
42
|
-
.ds-actionContent {
|
|
43
|
-
display: flex;
|
|
44
|
-
flex-direction: column;
|
|
45
|
-
gap: $space-8;
|
|
46
|
-
width: 100%;
|
|
47
|
-
|
|
48
|
-
&__content {
|
|
49
|
-
align-items: center;
|
|
50
|
-
display: flex;
|
|
51
|
-
flex-direction: column;
|
|
52
|
-
gap: $space-4;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
&__actions {
|
|
56
|
-
display: flex;
|
|
57
|
-
gap: $space-8;
|
|
58
|
-
justify-content: center;
|
|
59
|
-
|
|
60
|
-
&.-ds-vertical {
|
|
61
|
-
align-items: stretch;
|
|
62
|
-
flex-direction: column;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
</style>
|
|
67
|
-
|
|
68
|
-
<script setup lang="ts">
|
|
69
|
-
import DsFeatureIcon from '../Icons/FeatureIcon';
|
|
70
|
-
import { FEATURE_ICON_COLOR, FEATURE_ICON_SIZES } from '../Icons/FeatureIcon/FeatureIcon.consts';
|
|
71
|
-
import DsTextGroup from '../TextGroup/TextGroup.vue';
|
|
72
|
-
import {
|
|
73
|
-
TEXT_GROUP_ALIGNS,
|
|
74
|
-
TEXT_GROUP_MAIN_TEXT_COLORS,
|
|
75
|
-
TEXT_GROUP_SIZES,
|
|
76
|
-
} from '../TextGroup/TextGroup.consts';
|
|
77
|
-
import DsButton, { BUTTON_RADIUSES } from '../Buttons/Button';
|
|
78
|
-
import { BUTTON_COLORS, BUTTON_SIZES, BUTTON_TYPES } from '../Buttons/Button/Button.consts';
|
|
79
|
-
import { IconItem } from '../Icons/Icon';
|
|
80
|
-
|
|
81
|
-
const {
|
|
82
|
-
icon = null,
|
|
83
|
-
mainText = null,
|
|
84
|
-
supportingText = null,
|
|
85
|
-
buttonLabel,
|
|
86
|
-
buttonIcon = null,
|
|
87
|
-
isActionVertical = false,
|
|
88
|
-
} = defineProps<{
|
|
89
|
-
icon?: IconItem | null;
|
|
90
|
-
mainText?: string | null;
|
|
91
|
-
supportingText?: string | null;
|
|
92
|
-
buttonLabel?: string;
|
|
93
|
-
buttonIcon?: IconItem | null;
|
|
94
|
-
isActionVertical?: boolean;
|
|
95
|
-
}>();
|
|
96
|
-
|
|
97
|
-
defineEmits<{
|
|
98
|
-
(e: 'button-clicked'): void;
|
|
99
|
-
}>();
|
|
100
|
-
|
|
101
|
-
defineSlots<{
|
|
102
|
-
actions?: () => any;
|
|
103
|
-
}>();
|
|
104
|
-
</script>
|