@bethinkpl/design-system 26.13.0 → 26.14.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/.github/workflows/build-dist-on-trigger.yml +19 -3
- package/dist/design-system.umd.cjs +17 -17
- package/dist/design-system.umd.cjs.map +1 -1
- package/dist/lib/js/components/Avatar/Avatar.vue.d.ts +2 -0
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.composables.d.ts +4 -1
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.vue.d.ts +535 -8
- package/dist/lib/js/components/DatePickers/DateRangePicker/DateRangePicker.vue.d.ts +6 -2
- package/dist/lib/js/components/Dropdown/Dropdown.vue.d.ts +1 -1
- package/dist/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue.d.ts +2 -2
- package/dist/lib/js/components/Pagination/Pagination.vue.d.ts +1 -1
- package/dist/lib/js/components/RichList/BasicRichListItem/BasicRichListItem.vue.d.ts +1 -1
- package/dist/lib/js/components/RichList/RichListItem/RichListItem.vue.d.ts +1 -1
- package/dist/lib/js/components/TextGroup/TextGroup.vue.d.ts +1 -1
- package/dist/lib/js/components/Toggles/CounterToggle/CounterToggle.vue.d.ts +1 -1
- package/dist/lib/js/components/Tooltip/Tooltip.vue.d.ts +1 -1
- package/docs/assets/Avatar-DUThlKLV.js +1 -0
- package/docs/assets/Avatar.stories-Dwgdl1h5.js +38 -0
- package/docs/assets/{BasicRichListItem-CEiYZukO.js → BasicRichListItem-B1E5DYkk.js} +1 -1
- package/docs/assets/{BasicRichListItem.stories-BEJ0NthN.js → BasicRichListItem.stories-D3ZlEF1v.js} +1 -1
- package/docs/assets/{Color-ERTF36HU-6VQes8GD.js → Color-ERTF36HU-ojyWSIYl.js} +1 -1
- package/docs/assets/{DateBox.stories-DQkN-NA-.js → DateBox.stories-20DXKTY7.js} +1 -1
- package/docs/assets/DatePicker-C7cFT9b-.js +2 -0
- package/docs/assets/{DatePicker.stories-BuPRHUPO.js → DatePicker.stories-DDTo9Sqz.js} +2 -2
- package/docs/assets/DateRangePicker-UzTV3CI5.js +1 -0
- package/docs/assets/{DateRangePicker.stories-U0CpMcdr.js → DateRangePicker.stories-UO39Me0h.js} +1 -1
- package/docs/assets/{DocsRenderer-CFRXHY34-BtI7lPJt.js → DocsRenderer-CFRXHY34-CXWz8i_c.js} +5 -5
- package/docs/assets/{GroupRichListItem-8v8vJXgH.js → GroupRichListItem-onOADtuh.js} +1 -1
- package/docs/assets/{GroupRichListItem.stories-KjZ2JDho.js → GroupRichListItem.stories-BXIoUT_x.js} +1 -1
- package/docs/assets/{RichListItem.stories-B66Eh4Ya.js → RichListItem.stories-BljlBlCr.js} +1 -1
- package/docs/assets/{SelectionTile-CTk2qsoq.js → SelectionTile-DTFNomSh.js} +1 -1
- package/docs/assets/{SelectionTile.stories-BQdf1ZAm.js → SelectionTile.stories-Dy-SD0ba.js} +1 -1
- package/docs/assets/{iframe-D0_R78Pi.js → iframe-Bp0Qg1rC.js} +6 -6
- package/docs/assets/{index-_KmMzH9C.js → index-DD7sagXV.js} +1 -1
- package/docs/assets/{index-CmxKferx.js → index-DYIFlNCs.js} +1 -1
- package/docs/assets/{preview-BVg41aHH.js → preview-Bq1TajdW.js} +1 -1
- package/docs/assets/{preview-bQNvU0Tw.js → preview-DQNre2-F.js} +2 -2
- package/docs/iframe.html +1 -1
- package/docs/project.json +1 -1
- package/lib/js/components/Avatar/Avatar.spec.ts +16 -0
- package/lib/js/components/Avatar/Avatar.stories.ts +4 -0
- package/lib/js/components/Avatar/Avatar.vue +23 -5
- package/lib/js/components/DatePickers/DatePicker/DatePicker.composables.ts +30 -12
- package/lib/js/components/DatePickers/DatePicker/DatePicker.stories.ts +5 -5
- package/lib/js/components/DatePickers/DatePicker/DatePicker.vue +38 -26
- package/lib/js/components/DatePickers/DateRangePicker/DateRangePicker.stories.ts +3 -3
- package/lib/js/components/DatePickers/DateRangePicker/DateRangePicker.vue +26 -24
- package/lib/js/components/RichList/RichListItem/RichListItem.vue +20 -17
- package/package.json +1 -1
- package/docs/assets/Avatar-U_7Z6nZ2.js +0 -1
- package/docs/assets/Avatar.stories-CVysqINz.js +0 -37
- package/docs/assets/DatePicker-Dfk2S4XE.js +0 -2
- package/docs/assets/DateRangePicker-C591NaMz.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DocsRenderer-CFRXHY34-
|
|
2
|
-
import{_ as s}from"./iframe-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DocsRenderer-CFRXHY34-CXWz8i_c.js","./iframe-Bp0Qg1rC.js","./_commonjsHelpers-Chg3vePA.js","./index-vG0co4wr.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as s}from"./iframe-Bp0Qg1rC.js";import"../sb-preview/runtime.js";const{global:_}=__STORYBOOK_MODULE_GLOBAL__;var o,i=Object.entries((o=_.TAGS_OPTIONS)!=null?o:{}).reduce((e,r)=>{let[t,a]=r;return a.excludeFromDocsStories&&(e[t]=!0),e},{}),d={docs:{renderer:async()=>{let{DocsRenderer:e}=await s(()=>import("./DocsRenderer-CFRXHY34-CXWz8i_c.js").then(r=>r.am),__vite__mapDeps([0,1,2,3]),import.meta.url);return new e},stories:{filter:e=>{var r;return(e.tags||[]).filter(t=>i[t]).length===0&&!((r=e.parameters.docs)!=null&&r.disable)}}}};export{d as parameters};
|
package/docs/iframe.html
CHANGED
|
@@ -510,7 +510,7 @@
|
|
|
510
510
|
</script>
|
|
511
511
|
<link rel="stylesheet" href="./preview.css">
|
|
512
512
|
|
|
513
|
-
<script type="module" crossorigin src="./assets/iframe-
|
|
513
|
+
<script type="module" crossorigin src="./assets/iframe-Bp0Qg1rC.js"></script>
|
|
514
514
|
</head>
|
|
515
515
|
|
|
516
516
|
<body>
|
package/docs/project.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1747724156754,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":true,"refCount":0,"testPackages":{"@types/jest":"29.5.13","@vue/vue3-jest":"29.2.2","jest":"29.7.0","jest-environment-jsdom":"29.7.0","ts-jest":"29.0.5"},"packageManager":{"type":"yarn","version":"1.22.22"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/vue3-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/vue3","portableStoriesFileCount":2,"storybookVersion":"8.3.4","storybookVersionSpecifier":"^8.3.4","language":"typescript","storybookPackages":{"@storybook/vue3":{"version":"8.3.4"},"@storybook/vue3-vite":{"version":"8.3.4"},"eslint-plugin-storybook":{"version":"0.8.0"},"storybook":{"version":"8.3.4"}},"addons":{"@storybook/addon-actions":{"version":"8.3.4"},"@storybook/addon-designs":{"version":"8.0.3"},"@storybook/addon-docs":{"version":"8.3.4"},"@storybook/addon-controls":{"version":"8.3.4"},"@storybook/addon-storysource":{"version":"8.3.4"},"@storybook/addon-viewport":{"version":"8.3.4"}}}
|
|
@@ -214,4 +214,20 @@ describe('Avatar', () => {
|
|
|
214
214
|
expect(accessStatusElement.exists()).toBe(true);
|
|
215
215
|
expect(accessStatusElement.find('img').attributes('src')).toBe(teamMemberImageUrl);
|
|
216
216
|
});
|
|
217
|
+
|
|
218
|
+
it('should pass activityStatusTooltip to the tooltip component', () => {
|
|
219
|
+
const tooltipText = 'Active now';
|
|
220
|
+
const wrapper = mount(Avatar, {
|
|
221
|
+
props: {
|
|
222
|
+
size: AVATAR_SIZES.MEDIUM,
|
|
223
|
+
username: 'Dariusz Chrapek',
|
|
224
|
+
activityStatus: AVATAR_ACTIVITY_STATUSES.ACTIVE,
|
|
225
|
+
activityStatusTooltip: tooltipText,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
const tooltip = wrapper.findComponent({ name: 'Tooltip' });
|
|
230
|
+
expect(tooltip.exists()).toBe(true);
|
|
231
|
+
expect(tooltip.props('text')).toBe(tooltipText);
|
|
232
|
+
});
|
|
217
233
|
});
|
|
@@ -41,6 +41,9 @@ const meta: Meta<typeof Avatar> = {
|
|
|
41
41
|
},
|
|
42
42
|
options: [undefined, ...Object.values(AVATAR_ACTIVITY_STATUSES)],
|
|
43
43
|
},
|
|
44
|
+
activityStatusTooltip: {
|
|
45
|
+
control: 'text',
|
|
46
|
+
},
|
|
44
47
|
},
|
|
45
48
|
};
|
|
46
49
|
export default meta;
|
|
@@ -54,6 +57,7 @@ export const Interactive: Story = {
|
|
|
54
57
|
avatarUrl:
|
|
55
58
|
'https://wiecejnizlek.pl/wp-content/uploads/2021/08/Dariusz_Chrapek-uai-2996x2996-1-scaled.jpeg',
|
|
56
59
|
teamMemberImageUrl: 'https://lek.wiecejnizlek.pl/images/lek/logo-badge.svg',
|
|
60
|
+
activityStatusTooltip: 'Active now',
|
|
57
61
|
},
|
|
58
62
|
};
|
|
59
63
|
|
|
@@ -20,11 +20,21 @@
|
|
|
20
20
|
<span v-else class="ds-avatar__initials">{{ initials }}</span>
|
|
21
21
|
</div>
|
|
22
22
|
<div v-if="activityStatus" class="ds-avatar__activityStatus">
|
|
23
|
-
<ds-
|
|
24
|
-
:
|
|
25
|
-
|
|
26
|
-
:
|
|
27
|
-
|
|
23
|
+
<ds-tooltip
|
|
24
|
+
:key="activityStatusTooltip"
|
|
25
|
+
class="ds-avatar__activityStatusTooltip"
|
|
26
|
+
:text="activityStatusTooltip"
|
|
27
|
+
:is-disabled="!activityStatusTooltip"
|
|
28
|
+
is-pointer-visible
|
|
29
|
+
:placement="TOOLTIP_PLACEMENTS.BOTTOM"
|
|
30
|
+
:is-hidden-on-mobile="false"
|
|
31
|
+
>
|
|
32
|
+
<ds-badge
|
|
33
|
+
:color="activityStatusColor"
|
|
34
|
+
:elevation="BADGE_ELEVATIONS.X_SMALL"
|
|
35
|
+
:size="activityStatusSize"
|
|
36
|
+
/>
|
|
37
|
+
</ds-tooltip>
|
|
28
38
|
</div>
|
|
29
39
|
<div v-if="accessStatus" class="ds-avatar__accessStatus">
|
|
30
40
|
<ds-badge
|
|
@@ -169,6 +179,11 @@
|
|
|
169
179
|
top: -3px;
|
|
170
180
|
}
|
|
171
181
|
}
|
|
182
|
+
|
|
183
|
+
&__activityStatusTooltip {
|
|
184
|
+
align-items: center;
|
|
185
|
+
display: flex;
|
|
186
|
+
}
|
|
172
187
|
}
|
|
173
188
|
</style>
|
|
174
189
|
|
|
@@ -184,6 +199,7 @@ import {
|
|
|
184
199
|
import DsBadge, { BADGE_ELEVATIONS, BADGE_SIZES, BADGE_COLORS } from '../Badge';
|
|
185
200
|
import { computed } from 'vue';
|
|
186
201
|
import { ICONS } from '../Icons/Icon';
|
|
202
|
+
import DsTooltip, { TOOLTIP_PLACEMENTS } from '../Tooltip';
|
|
187
203
|
|
|
188
204
|
const {
|
|
189
205
|
size = AVATAR_SIZES.X_SMALL,
|
|
@@ -192,6 +208,7 @@ const {
|
|
|
192
208
|
activityStatus,
|
|
193
209
|
accessStatus,
|
|
194
210
|
teamMemberImageUrl,
|
|
211
|
+
activityStatusTooltip,
|
|
195
212
|
} = defineProps<{
|
|
196
213
|
username: string;
|
|
197
214
|
avatarUrl?: string;
|
|
@@ -199,6 +216,7 @@ const {
|
|
|
199
216
|
activityStatus?: AvatarActivityStatus;
|
|
200
217
|
accessStatus?: AvatarAccessStatus;
|
|
201
218
|
teamMemberImageUrl?: string;
|
|
219
|
+
activityStatusTooltip?: string;
|
|
202
220
|
}>();
|
|
203
221
|
|
|
204
222
|
const { initials, initialBackgroundColor } = useInitials();
|
|
@@ -20,6 +20,7 @@ export interface DatePickerComposablesProps {
|
|
|
20
20
|
interface InitFlatpickrPrams {
|
|
21
21
|
props: DatePickerComposablesProps;
|
|
22
22
|
onChange: (dates: Array<Date>) => void;
|
|
23
|
+
onClose: () => void;
|
|
23
24
|
defaultDates: Date | Array<Date>;
|
|
24
25
|
mode: 'single' | 'range';
|
|
25
26
|
}
|
|
@@ -31,6 +32,8 @@ interface InitFlatpickr {
|
|
|
31
32
|
dateRangePickerRef: HTMLElement,
|
|
32
33
|
updatePositionBasedOnScrollableSelector: string,
|
|
33
34
|
) => Promise<DatePickerInstance | undefined>;
|
|
35
|
+
destroyDatePicker: () => void;
|
|
36
|
+
updateDatePicker: () => void;
|
|
34
37
|
isOpen: Ref<boolean>;
|
|
35
38
|
toggle: () => void;
|
|
36
39
|
}
|
|
@@ -38,6 +41,7 @@ interface InitFlatpickr {
|
|
|
38
41
|
export function initFlatpickr({
|
|
39
42
|
props,
|
|
40
43
|
onChange,
|
|
44
|
+
onClose,
|
|
41
45
|
defaultDates,
|
|
42
46
|
mode = 'single',
|
|
43
47
|
}: InitFlatpickrPrams): InitFlatpickr {
|
|
@@ -82,6 +86,10 @@ export function initFlatpickr({
|
|
|
82
86
|
onClose: [
|
|
83
87
|
() => {
|
|
84
88
|
isOpen.value = false;
|
|
89
|
+
// setTimeout is needed to ensure that the date picker is closed before the onClose callback is called
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
onClose();
|
|
92
|
+
});
|
|
85
93
|
},
|
|
86
94
|
],
|
|
87
95
|
onOpen: [
|
|
@@ -113,9 +121,13 @@ export function initFlatpickr({
|
|
|
113
121
|
return datePicker;
|
|
114
122
|
};
|
|
115
123
|
|
|
116
|
-
|
|
124
|
+
const destroyDatePicker = () => {
|
|
117
125
|
datePicker?.destroy();
|
|
118
126
|
datePicker = null;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
onUnmounted(() => {
|
|
130
|
+
destroyDatePicker();
|
|
119
131
|
});
|
|
120
132
|
|
|
121
133
|
watch(
|
|
@@ -142,26 +154,32 @@ export function initFlatpickr({
|
|
|
142
154
|
watch(
|
|
143
155
|
[() => props.date, () => props.startDate, () => props.endDate],
|
|
144
156
|
() => {
|
|
145
|
-
|
|
146
|
-
updateDatePickerDates(props.date);
|
|
147
|
-
} else if (props.startDate && props.endDate) {
|
|
148
|
-
updateDatePickerDates([props.startDate, props.endDate]);
|
|
149
|
-
} else if (props.startDate && !props.endDate) {
|
|
150
|
-
updateDatePickerDates(props.startDate);
|
|
151
|
-
} else if (!props.startDate && props.endDate) {
|
|
152
|
-
updateDatePickerDates(props.endDate);
|
|
153
|
-
} else {
|
|
154
|
-
datePicker?.clear(false);
|
|
155
|
-
}
|
|
157
|
+
updateDatePicker();
|
|
156
158
|
},
|
|
157
159
|
{
|
|
158
160
|
flush: 'post', // Ensure updates happen after DOM changes
|
|
159
161
|
},
|
|
160
162
|
);
|
|
161
163
|
|
|
164
|
+
const updateDatePicker = () => {
|
|
165
|
+
if (props.date) {
|
|
166
|
+
updateDatePickerDates(props.date);
|
|
167
|
+
} else if (props.startDate && props.endDate) {
|
|
168
|
+
updateDatePickerDates([props.startDate, props.endDate]);
|
|
169
|
+
} else if (props.startDate && !props.endDate) {
|
|
170
|
+
updateDatePickerDates(props.startDate);
|
|
171
|
+
} else if (!props.startDate && props.endDate) {
|
|
172
|
+
updateDatePickerDates(props.endDate);
|
|
173
|
+
} else {
|
|
174
|
+
datePicker?.clear(false);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
162
178
|
return {
|
|
163
179
|
datePicker,
|
|
164
180
|
createDatePicker,
|
|
181
|
+
destroyDatePicker,
|
|
182
|
+
updateDatePicker,
|
|
165
183
|
isOpen,
|
|
166
184
|
toggle: () => {
|
|
167
185
|
datePicker?.toggle();
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useArgs } from '@storybook/preview-api';
|
|
2
|
+
import { Args, ArgTypes, Meta, StoryFn } from '@storybook/vue3';
|
|
3
|
+
import { ICONS } from '../../Icons/Icon';
|
|
4
|
+
import DsSwitch from '../../Switch';
|
|
2
5
|
import {
|
|
3
6
|
DATE_PICKER_CALENDAR_POSITIONS,
|
|
4
7
|
DATE_PICKER_COLORS,
|
|
5
8
|
DATE_PICKER_STATES,
|
|
6
9
|
DATE_PICKER_TRIGGER_TYPES,
|
|
7
10
|
} from './DatePicker.consts';
|
|
8
|
-
import
|
|
9
|
-
import { ICONS } from '../../Icons/Icon';
|
|
10
|
-
import DsSwitch from '../../Switch';
|
|
11
|
-
import { useArgs } from '@storybook/preview-api';
|
|
11
|
+
import DatePicker from './DatePicker.vue';
|
|
12
12
|
|
|
13
13
|
export default {
|
|
14
14
|
title: 'Components/DatePickers/DatePicker',
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
:eyebrow-text="eyebrowText"
|
|
33
33
|
:additional-text-max-width="TILE_ADDITIONAL_TEXT_MAX_WIDTHS.MEDIUM"
|
|
34
34
|
has-border
|
|
35
|
-
@click="toggle"
|
|
35
|
+
@click.stop.prevent="toggle"
|
|
36
36
|
/>
|
|
37
37
|
</template>
|
|
38
38
|
<date-box
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
:state="state"
|
|
46
46
|
:color="color"
|
|
47
47
|
:is-open="isOpen"
|
|
48
|
-
@click="toggle"
|
|
48
|
+
@click.stop.prevent="toggle"
|
|
49
49
|
/>
|
|
50
50
|
|
|
51
51
|
<span v-if="showErrorMessage" class="ds-datePicker__errorMessage">
|
|
@@ -138,12 +138,25 @@
|
|
|
138
138
|
</style>
|
|
139
139
|
|
|
140
140
|
<script lang="ts">
|
|
141
|
-
import { defineComponent, PropType, Ref, ref, toRaw
|
|
141
|
+
import { defineComponent, PropType, Ref, ref, toRaw } from 'vue';
|
|
142
|
+
|
|
143
|
+
import { Instance as DatePickerInstance } from 'flatpickr/dist/types/instance';
|
|
142
144
|
|
|
143
|
-
import DsTile, { TILE_ADDITIONAL_TEXT_MAX_WIDTHS, TILE_BORDER_COLORS } from '../../Tile';
|
|
144
145
|
import { IconItem, ICONS } from '../../Icons/Icon';
|
|
146
|
+
import DsTile, {
|
|
147
|
+
TILE_ADDITIONAL_TEXT_MAX_WIDTHS,
|
|
148
|
+
TILE_BORDER_COLORS,
|
|
149
|
+
TileColors,
|
|
150
|
+
TileStates,
|
|
151
|
+
} from '../../Tile';
|
|
145
152
|
import DateBox from '../DateBox';
|
|
146
153
|
|
|
154
|
+
import {
|
|
155
|
+
localFullDateWithShortMonthName,
|
|
156
|
+
localWeekdayName,
|
|
157
|
+
} from '../../../../../tools/importers/helpers/dates';
|
|
158
|
+
import { capitalizeFirstLetter } from '../../../../../tools/importers/helpers/modifiers';
|
|
159
|
+
import { DatePickerComposablesProps, initFlatpickr } from './DatePicker.composables';
|
|
147
160
|
import {
|
|
148
161
|
DATE_PICKER_CALENDAR_POSITIONS,
|
|
149
162
|
DATE_PICKER_COLORS,
|
|
@@ -154,12 +167,6 @@ import {
|
|
|
154
167
|
DatePickerStates,
|
|
155
168
|
DatePickerTriggerTypes,
|
|
156
169
|
} from './DatePicker.consts';
|
|
157
|
-
import { capitalizeFirstLetter } from '../../../../../tools/importers/helpers/modifiers';
|
|
158
|
-
import { DatePickerComposablesProps, initFlatpickr } from './DatePicker.composables';
|
|
159
|
-
import {
|
|
160
|
-
localFullDateWithShortMonthName,
|
|
161
|
-
localWeekdayName,
|
|
162
|
-
} from '../../../../../tools/importers/helpers/dates';
|
|
163
170
|
|
|
164
171
|
export default defineComponent({
|
|
165
172
|
name: 'DatePicker',
|
|
@@ -255,6 +262,7 @@ export default defineComponent({
|
|
|
255
262
|
},
|
|
256
263
|
{ emit },
|
|
257
264
|
) {
|
|
265
|
+
const flatpickrInstance = ref<DatePickerInstance | null>(null);
|
|
258
266
|
const flatpickrInputRef = ref<HTMLInputElement>() as Ref<HTMLInputElement>;
|
|
259
267
|
const datePickerRef = ref<HTMLDivElement>() as Ref<HTMLDivElement>;
|
|
260
268
|
|
|
@@ -262,31 +270,32 @@ export default defineComponent({
|
|
|
262
270
|
emit('update:date', event[0]);
|
|
263
271
|
};
|
|
264
272
|
|
|
273
|
+
const onClose = () => {
|
|
274
|
+
destroyDatePicker();
|
|
275
|
+
flatpickrInstance.value = null;
|
|
276
|
+
};
|
|
277
|
+
|
|
265
278
|
const {
|
|
266
279
|
isOpen,
|
|
267
280
|
toggle: toggleDatePicker,
|
|
268
281
|
createDatePicker,
|
|
282
|
+
destroyDatePicker,
|
|
283
|
+
updateDatePicker,
|
|
269
284
|
} = initFlatpickr({
|
|
270
285
|
props,
|
|
271
286
|
onChange,
|
|
287
|
+
onClose,
|
|
272
288
|
defaultDates: props.date ?? new Date(),
|
|
273
289
|
mode: 'single',
|
|
274
290
|
});
|
|
275
|
-
watch([() => props.isInteractive, () => props.state], async () => {
|
|
276
|
-
if (props.isInteractive && props.state === DATE_PICKER_STATES.DEFAULT) {
|
|
277
|
-
await createDatePicker(
|
|
278
|
-
flatpickrInputRef.value,
|
|
279
|
-
datePickerRef.value,
|
|
280
|
-
props.updatePositionBasedOnScrollableSelector,
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
291
|
|
|
285
292
|
return {
|
|
293
|
+
flatpickrInstance,
|
|
286
294
|
flatpickrInputRef,
|
|
287
295
|
datePickerRef,
|
|
288
296
|
isOpen,
|
|
289
297
|
toggleDatePicker,
|
|
298
|
+
updateDatePicker,
|
|
290
299
|
createDatePicker,
|
|
291
300
|
DATE_PICKER_CALENDAR_POSITIONS: Object.freeze(DATE_PICKER_CALENDAR_POSITIONS),
|
|
292
301
|
DATE_PICKER_COLORS: Object.freeze(DATE_PICKER_COLORS),
|
|
@@ -340,18 +349,21 @@ export default defineComponent({
|
|
|
340
349
|
return this.helpMessage !== null;
|
|
341
350
|
},
|
|
342
351
|
},
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
await this.createDatePicker(
|
|
352
|
+
methods: {
|
|
353
|
+
async bindFlatpickrInstance() {
|
|
354
|
+
this.flatpickrInstance = await this.createDatePicker(
|
|
346
355
|
this.flatpickrInputRef,
|
|
347
356
|
this.datePickerRef,
|
|
348
357
|
this.updatePositionBasedOnScrollableSelector,
|
|
349
358
|
);
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
toggle() {
|
|
359
|
+
this.updateDatePicker();
|
|
360
|
+
},
|
|
361
|
+
async toggle() {
|
|
354
362
|
if (this.isInteractive && this.state === DATE_PICKER_STATES.DEFAULT) {
|
|
363
|
+
if (!this.flatpickrInstance) {
|
|
364
|
+
await this.bindFlatpickrInstance();
|
|
365
|
+
}
|
|
366
|
+
|
|
355
367
|
this.toggleDatePicker();
|
|
356
368
|
}
|
|
357
369
|
},
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useArgs } from '@storybook/preview-api';
|
|
2
2
|
import { Args, ArgTypes, Meta, StoryObj } from '@storybook/vue3';
|
|
3
|
+
import { ComponentProps } from 'vue-component-type-helpers';
|
|
3
4
|
import { ICONS } from '../../Icons/Icon';
|
|
4
5
|
import {
|
|
5
6
|
DATE_PICKER_CALENDAR_POSITIONS,
|
|
6
7
|
DATE_PICKER_COLORS,
|
|
7
8
|
DATE_PICKER_STATES,
|
|
8
9
|
} from '../DatePicker';
|
|
9
|
-
import
|
|
10
|
-
import { useArgs } from '@storybook/preview-api';
|
|
10
|
+
import DateRangePicker from './DateRangePicker.vue';
|
|
11
11
|
|
|
12
12
|
type DateRangePickerProps = ComponentProps<typeof DateRangePicker>;
|
|
13
13
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
:state="state"
|
|
12
12
|
:color="color"
|
|
13
13
|
:is-open="isOpen"
|
|
14
|
-
@click="toggle"
|
|
14
|
+
@click.stop.prevent="toggle"
|
|
15
15
|
/>
|
|
16
16
|
|
|
17
17
|
<span v-if="errorMessage" class="ds-dateRangePicker__errorMessage">
|
|
@@ -48,9 +48,10 @@
|
|
|
48
48
|
</style>
|
|
49
49
|
|
|
50
50
|
<script lang="ts">
|
|
51
|
-
import
|
|
51
|
+
import { Instance as DatePickerInstance } from 'flatpickr/dist/types/instance';
|
|
52
|
+
import { defineComponent, PropType, Ref, ref, toRaw } from 'vue';
|
|
52
53
|
import { IconItem, ICONS } from '../../Icons/Icon';
|
|
53
|
-
import
|
|
54
|
+
import DateBox from '../DateBox';
|
|
54
55
|
import {
|
|
55
56
|
DATE_PICKER_CALENDAR_POSITIONS,
|
|
56
57
|
DATE_PICKER_COLORS,
|
|
@@ -146,6 +147,7 @@ export default defineComponent({
|
|
|
146
147
|
},
|
|
147
148
|
{ emit },
|
|
148
149
|
) {
|
|
150
|
+
const flatpickrInstance = ref<DatePickerInstance | null>(null);
|
|
149
151
|
const dateRangePickerRef = ref() as Ref<HTMLDivElement>;
|
|
150
152
|
const flatpickrInputRef = ref() as Ref<HTMLInputElement>;
|
|
151
153
|
|
|
@@ -156,55 +158,55 @@ export default defineComponent({
|
|
|
156
158
|
emit('update:date', { startDate: event[0], endDate: event[1] });
|
|
157
159
|
};
|
|
158
160
|
|
|
161
|
+
const onClose = () => {
|
|
162
|
+
destroyDatePicker();
|
|
163
|
+
flatpickrInstance.value = null;
|
|
164
|
+
};
|
|
165
|
+
|
|
159
166
|
const {
|
|
160
167
|
isOpen,
|
|
161
168
|
toggle: toggleDatePicker,
|
|
162
169
|
createDatePicker,
|
|
170
|
+
destroyDatePicker,
|
|
171
|
+
updateDatePicker,
|
|
163
172
|
} = initFlatpickr({
|
|
164
173
|
props,
|
|
165
174
|
onChange,
|
|
175
|
+
onClose,
|
|
166
176
|
defaultDates: [props.startDate, props.endDate],
|
|
167
177
|
mode: 'range',
|
|
168
178
|
});
|
|
169
179
|
|
|
170
|
-
watch(
|
|
171
|
-
[() => props.isInteractive, () => props.state],
|
|
172
|
-
async () => {
|
|
173
|
-
if (props.isInteractive && props.state === DATE_PICKER_STATES.DEFAULT) {
|
|
174
|
-
await createDatePicker(
|
|
175
|
-
flatpickrInputRef.value,
|
|
176
|
-
dateRangePickerRef.value,
|
|
177
|
-
props.updatePositionBasedOnScrollableSelector,
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
{ flush: 'post' },
|
|
182
|
-
);
|
|
183
|
-
|
|
184
180
|
return {
|
|
185
181
|
dateRangePickerRef,
|
|
186
182
|
flatpickrInputRef,
|
|
187
183
|
isOpen,
|
|
188
184
|
toggleDatePicker,
|
|
189
185
|
createDatePicker,
|
|
186
|
+
destroyDatePicker,
|
|
187
|
+
updateDatePicker,
|
|
190
188
|
DATE_PICKER_CALENDAR_POSITIONS: Object.freeze(DATE_PICKER_CALENDAR_POSITIONS),
|
|
191
189
|
DATE_PICKER_COLORS: Object.freeze(DATE_PICKER_COLORS),
|
|
192
190
|
DATE_PICKER_STATES: Object.freeze(DATE_PICKER_STATES),
|
|
193
191
|
DATE_PICKER_TRIGGER_TYPES: Object.freeze(DATE_PICKER_TRIGGER_TYPES),
|
|
194
192
|
};
|
|
195
193
|
},
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
await this.createDatePicker(
|
|
194
|
+
methods: {
|
|
195
|
+
async bindFlatpickrInstance() {
|
|
196
|
+
this.flatpickrInstance = await this.createDatePicker(
|
|
199
197
|
this.flatpickrInputRef,
|
|
200
198
|
this.dateRangePickerRef,
|
|
201
199
|
this.updatePositionBasedOnScrollableSelector,
|
|
202
200
|
);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
toggle() {
|
|
201
|
+
this.updateDatePicker();
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
async toggle() {
|
|
207
205
|
if (this.isInteractive && this.state === DATE_PICKER_STATES.DEFAULT) {
|
|
206
|
+
if (!this.flatpickrInstance) {
|
|
207
|
+
await this.bindFlatpickrInstance();
|
|
208
|
+
}
|
|
209
|
+
|
|
208
210
|
this.toggleDatePicker();
|
|
209
211
|
}
|
|
210
212
|
},
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
@import '../../../../styles/settings/media-queries';
|
|
82
82
|
@import '../../../../styles/settings/radiuses';
|
|
83
83
|
@import '../../../../styles/settings/spacings';
|
|
84
|
+
@import '../../../../styles/settings/borders';
|
|
84
85
|
@import '../../../../styles/settings/shadows';
|
|
85
86
|
@import '../../../../styles/settings/icons';
|
|
86
87
|
@import './border-colors';
|
|
@@ -127,7 +128,7 @@ $rich-list-item-media-horizontal-height: 80px;
|
|
|
127
128
|
align-items: center;
|
|
128
129
|
flex-direction: initial;
|
|
129
130
|
justify-content: initial;
|
|
130
|
-
padding: 0 $space-4xs;
|
|
131
|
+
padding: 0 $space-4xs 0 calc($space-4xs - $border-xs);
|
|
131
132
|
|
|
132
133
|
#{$root}__container {
|
|
133
134
|
align-self: initial;
|
|
@@ -297,27 +298,29 @@ $rich-list-item-media-horizontal-height: 80px;
|
|
|
297
298
|
cursor: pointer;
|
|
298
299
|
pointer-events: initial;
|
|
299
300
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
.-ds-dimmable {
|
|
301
|
+
@media #{breakpoint-s()} {
|
|
302
|
+
&.-ds-flat {
|
|
303
|
+
&:hover {
|
|
305
304
|
opacity: 1;
|
|
305
|
+
|
|
306
|
+
.-ds-dimmable {
|
|
307
|
+
opacity: 1;
|
|
308
|
+
}
|
|
306
309
|
}
|
|
307
310
|
}
|
|
308
|
-
}
|
|
309
311
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
312
|
+
&:not(.-ds-dimmed):hover {
|
|
313
|
+
&.-ds-default {
|
|
314
|
+
@each $color, $value in $rich-list-item-background-colors {
|
|
315
|
+
&.-ds-background-#{$color} {
|
|
316
|
+
background-color: map-get($value, 'hover');
|
|
317
|
+
}
|
|
315
318
|
}
|
|
316
319
|
}
|
|
317
|
-
}
|
|
318
320
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
+
&.-ds-flat {
|
|
322
|
+
background: $color-neutral-background-ghost-hovered;
|
|
323
|
+
}
|
|
321
324
|
}
|
|
322
325
|
}
|
|
323
326
|
|
|
@@ -474,8 +477,9 @@ $rich-list-item-media-horizontal-height: 80px;
|
|
|
474
477
|
</style>
|
|
475
478
|
|
|
476
479
|
<script lang="ts">
|
|
477
|
-
import
|
|
480
|
+
import { defineComponent, PropType, toRaw } from 'vue';
|
|
478
481
|
import DsDivider from '../../../components/Divider';
|
|
482
|
+
import DsCheckbox from '../../../components/Form/Checkbox/Checkbox.vue';
|
|
479
483
|
import DsIcon, {
|
|
480
484
|
ICON_COLORS,
|
|
481
485
|
ICON_SIZES,
|
|
@@ -483,7 +487,6 @@ import DsIcon, {
|
|
|
483
487
|
IconItem,
|
|
484
488
|
ICONS,
|
|
485
489
|
} from '../../../components/Icons/Icon';
|
|
486
|
-
import { defineComponent, PropType, toRaw } from 'vue';
|
|
487
490
|
import {
|
|
488
491
|
RICH_LIST_ITEM_BACKGROUND_COLOR,
|
|
489
492
|
RICH_LIST_ITEM_BORDER_COLOR,
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as G,q as i,c as u,a as b,j as k,u as e,s as p,k as I,g as v,n as h,o}from"./vue.esm-bundler-DmkhfO_9.js";import{c as M,B as C,b as l,a as s}from"./Badge-DSmH78WU.js";import{I as d}from"./Icon-BPz80dqH.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";const a={XX_SMALL:"xx-small",X_SMALL:"x-small",SMALL:"small",MEDIUM:"medium",LARGE:"large",X_LARGE:"x-large"},_={ACTIVE:"active",INACTIVE:"inactive"},c={ACTIVE:"active",INACTIVE:"inactive",AWAITING:"awaiting",BLOCKED:"blocked",TEAM_MEMBER:"team-member"},q=["src","alt"],w={key:1,class:"ds-avatar__initials"},K={key:0,class:"ds-avatar__activityStatus"},F={key:1,class:"ds-avatar__accessStatus"},f=G({__name:"Avatar",props:{username:{},avatarUrl:{},size:{default:()=>a.X_SMALL},activityStatus:{},accessStatus:{},teamMemberImageUrl:{}},setup(r){const{initials:g,initialBackgroundColor:y}=V(),{accessStatusColor:T,accessStatusIcon:U,accessStatusSize:z,accessStatusImage:R}=B(),{activityStatusColor:X,activityStatusSize:N}=D();function V(){const t=["#1abc9c","#2ecc71","#3498db","#9b59b6","#34495e","#16a085","#27ae60","#2980b9","#8e44ad","#2c3e50","#f1c40f","#e67e22","#e74c3c","#f39c12","#d35400","#c0392b"];function n(A){const[m,E]=A.split(/\s+/);return m&&E?`${m[0]}${E[0]}`.toUpperCase():m.substring(0,2).toUpperCase()}const S=i(()=>{if(r.avatarUrl)return;const A=(r.username.charCodeAt(0)-65)%16;return t[A]});return{initials:i(()=>n(r.username)),initialBackgroundColor:S}}function B(){const t=i(()=>{switch(r.accessStatus){case c.ACTIVE:return l.SUCCESS;case c.INACTIVE:case c.AWAITING:return l.NEUTRAL;case c.BLOCKED:return l.DANGER;default:return}}),n=i(()=>{switch(r.accessStatus){case c.ACTIVE:return d.FA_UNLOCK_KEYHOLE;case c.BLOCKED:case c.INACTIVE:return d.FA_LOCK_KEYHOLE;case c.AWAITING:return d.FA_HOURGLASS_START;default:return}}),S=i(()=>{switch(r.size){case a.XX_SMALL:return s.SMALL;case a.X_SMALL:return s.SMALL;case a.SMALL:return s.SMALL;case a.MEDIUM:return s.MEDIUM;case a.LARGE:return s.MEDIUM;case a.X_LARGE:default:return s.X_LARGE}}),L=i(()=>{if(r.accessStatus===c.TEAM_MEMBER)return r.teamMemberImageUrl});return{accessStatusColor:t,accessStatusIcon:n,accessStatusSize:S,accessStatusImage:L}}function D(){const t=i(()=>{switch(r.activityStatus){case _.ACTIVE:return l.SUCCESS;default:case _.INACTIVE:return l.NEUTRAL}}),n=i(()=>{switch(r.size){case a.XX_SMALL:return s.X_SMALL;case a.X_SMALL:return s.SMALL;case a.SMALL:return s.SMALL;case a.MEDIUM:return s.MEDIUM;case a.LARGE:return s.MEDIUM;case a.X_LARGE:default:return s.MEDIUM}});return{activityStatusColor:t,activityStatusSize:n}}return(t,n)=>(o(),u("div",{class:h(["ds-avatar",{"-ds-xx-small":t.size===e(a).XX_SMALL,"-ds-x-small":t.size===e(a).X_SMALL,"-ds-small":t.size===e(a).SMALL,"-ds-medium":t.size===e(a).MEDIUM,"-ds-large":t.size===e(a).LARGE,"-ds-x-large":t.size===e(a).X_LARGE}])},[b("div",{class:"ds-avatar__content",style:p({backgroundColor:e(y)})},[t.avatarUrl?(o(),u("img",{key:0,src:t.avatarUrl,alt:t.username,class:"ds-avatar__image"},null,8,q)):(o(),u("span",w,k(e(g)),1))],4),t.activityStatus?(o(),u("div",K,[I(e(C),{color:e(X),elevation:e(M).X_SMALL,size:e(N)},null,8,["color","elevation","size"])])):v("",!0),t.accessStatus?(o(),u("div",F,[I(e(C),{color:e(T),elevation:e(M).SMALL,icon:e(U),size:e(z),"image-url":e(R)},null,8,["color","elevation","icon","size","image-url"])])):v("",!0)],2))}}),x=O(f,[["__scopeId","data-v-e662d6a3"]]);f.__docgenInfo={exportName:"default",displayName:"Avatar",description:"",tags:{},props:[{name:"username",required:!0,type:{name:"string"}},{name:"avatarUrl",required:!1,type:{name:"string"}},{name:"size",required:!1,type:{name:"AvatarSize"}},{name:"activityStatus",required:!1,type:{name:"AvatarActivityStatus"}},{name:"accessStatus",required:!1,type:{name:"AvatarAccessStatus"}},{name:"teamMemberImageUrl",required:!1,type:{name:"string"}}],sourceFiles:["/home/runner/work/design-system/design-system/lib/js/components/Avatar/Avatar.vue"]};export{x as A,a,c as b,_ as c};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import{A as o,a as r,b as k,c as m}from"./Avatar-U_7Z6nZ2.js";import"./vue.esm-bundler-DmkhfO_9.js";import"./Badge-DSmH78WU.js";import"./Icon-BPz80dqH.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";const v={title:"Components/Avatar",component:o,render:s=>({components:{Avatar:o},setup(){return{args:s}},template:'<Avatar v-bind="args" />'}),argTypes:{size:{control:"select",options:Object.values(r)},accessStatus:{control:{type:"select",labels:{undefined:"None (undefined)"}},options:[void 0,...Object.values(k)]},activityStatus:{control:{type:"select",labels:{undefined:"None (undefined)"}},options:[void 0,...Object.values(m)]}}},e={args:{size:r.X_SMALL,username:"Dariusz Chrapek",avatarUrl:"https://wiecejnizlek.pl/wp-content/uploads/2021/08/Dariusz_Chrapek-uai-2996x2996-1-scaled.jpeg",teamMemberImageUrl:"https://lek.wiecejnizlek.pl/images/lek/logo-badge.svg"}};e.parameters={design:{type:"figma",url:"https://www.figma.com/design/izQdYyiBR1GQgFkaOIfIJI/LMS---DS-Components?node-id=12364-12175&t=UpUoIm9oCAaH4dEp-4"}};const a={render:s=>({components:{Avatar:o},setup(){return{args:s,names:["Arkadiusz Kowalski","Bartosz Nowak","Cezary Kowalczyk","Dariusz Chrapek","Edward Nowak","Feliks Kowalski","Grzegorz Nowak","Henryk Kowalczyk","Ireneusz Nowak","Jacek Kowalski","Kamil Nowak","Leszek Kowalczyk","Marek Nowak","Norbert Kowalski","Oskar Nowak","Piotr Kowalczyk"]}},template:'<div style="display: flex; gap: 12px; flex-wrap: wrap;"><div v-for="name in names"><Avatar v-bind="args" :username="name" /></div></div>'}),argTypes:{size:{control:"select",options:Object.values(r)},username:{control:!1},avatarUrl:{control:!1}},args:{size:r.X_SMALL,teamMemberImageUrl:"https://lek.wiecejnizlek.pl/images/lek/logo-badge.svg"}};var t,l,i;e.parameters={...e.parameters,docs:{...(t=e.parameters)==null?void 0:t.docs,source:{originalSource:`{
|
|
2
|
-
args: {
|
|
3
|
-
size: AVATAR_SIZES.X_SMALL,
|
|
4
|
-
username: 'Dariusz Chrapek',
|
|
5
|
-
avatarUrl: 'https://wiecejnizlek.pl/wp-content/uploads/2021/08/Dariusz_Chrapek-uai-2996x2996-1-scaled.jpeg',
|
|
6
|
-
teamMemberImageUrl: 'https://lek.wiecejnizlek.pl/images/lek/logo-badge.svg'
|
|
7
|
-
}
|
|
8
|
-
}`,...(i=(l=e.parameters)==null?void 0:l.docs)==null?void 0:i.source}}};var n,p,c;a.parameters={...a.parameters,docs:{...(n=a.parameters)==null?void 0:n.docs,source:{originalSource:`{
|
|
9
|
-
render: (args: AvatarProps) => ({
|
|
10
|
-
components: {
|
|
11
|
-
Avatar
|
|
12
|
-
},
|
|
13
|
-
setup() {
|
|
14
|
-
return {
|
|
15
|
-
args,
|
|
16
|
-
names: ['Arkadiusz Kowalski', 'Bartosz Nowak', 'Cezary Kowalczyk', 'Dariusz Chrapek', 'Edward Nowak', 'Feliks Kowalski', 'Grzegorz Nowak', 'Henryk Kowalczyk', 'Ireneusz Nowak', 'Jacek Kowalski', 'Kamil Nowak', 'Leszek Kowalczyk', 'Marek Nowak', 'Norbert Kowalski', 'Oskar Nowak', 'Piotr Kowalczyk']
|
|
17
|
-
};
|
|
18
|
-
},
|
|
19
|
-
template: \`<div style="display: flex; gap: 12px; flex-wrap: wrap;"><div v-for="name in names"><Avatar v-bind="args" :username="name" /></div></div>\`
|
|
20
|
-
}),
|
|
21
|
-
argTypes: {
|
|
22
|
-
size: {
|
|
23
|
-
control: 'select',
|
|
24
|
-
options: Object.values(AVATAR_SIZES)
|
|
25
|
-
},
|
|
26
|
-
username: {
|
|
27
|
-
control: false
|
|
28
|
-
},
|
|
29
|
-
avatarUrl: {
|
|
30
|
-
control: false
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
args: {
|
|
34
|
-
size: AVATAR_SIZES.X_SMALL,
|
|
35
|
-
teamMemberImageUrl: 'https://lek.wiecejnizlek.pl/images/lek/logo-badge.svg'
|
|
36
|
-
}
|
|
37
|
-
}`,...(c=(p=a.parameters)==null?void 0:p.docs)==null?void 0:c.source}}};const A=["Interactive","Colors"];export{a as Colors,e as Interactive,A as __namedExportsOrder,v as default};
|