@bethinkpl/design-system 41.1.5 → 43.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.
Files changed (73) hide show
  1. package/dist/design-system.css +1 -1
  2. package/dist/design-system.js +16800 -13061
  3. package/dist/design-system.js.map +1 -1
  4. package/dist/lib/js/components/Buttons/IconButton/IconButton.vue.d.ts +2 -0
  5. package/dist/lib/js/components/Cards/Card/Card.consts.d.ts +14 -0
  6. package/dist/lib/js/components/Cards/Card/Card.vue.d.ts +10 -5
  7. package/dist/lib/js/components/Cards/CardExpandable/CardExpandable.vue.d.ts +35 -15
  8. package/dist/lib/js/components/DatePickers/DateBox/DateBox.vue.d.ts +2 -0
  9. package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.vue.d.ts +2 -0
  10. package/dist/lib/js/components/DatePickers/DateRangePicker/DateRangePicker.vue.d.ts +2 -0
  11. package/dist/lib/js/components/Drawer/DrawerSection/DrawerSection.vue.d.ts +6 -0
  12. package/dist/lib/js/components/Form/InputField/useInputFieldWithinForm.d.ts +1 -1
  13. package/dist/lib/js/components/Form/RadioButton/RadioButton.vue.d.ts +2 -0
  14. package/dist/lib/js/components/Form/SelectField/SelectField.types.d.ts +26 -0
  15. package/dist/lib/js/components/Form/SelectField/SelectField.utils.d.ts +7 -0
  16. package/dist/lib/js/components/Form/SelectField/SelectField.vue.d.ts +107 -0
  17. package/dist/lib/js/components/Form/SelectField/SelectFieldOption.vue.d.ts +19 -0
  18. package/dist/lib/js/components/Form/SelectField/index.d.ts +4 -0
  19. package/dist/lib/js/components/Form/SelectField/useSelectFieldWithinForm.d.ts +8 -0
  20. package/dist/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue.d.ts +4 -0
  21. package/dist/lib/js/components/Headers/SectionHeader/SectionHeader.vue.d.ts +4 -0
  22. package/dist/lib/js/components/Icons/Icon/Icon.consts.d.ts +2 -0
  23. package/dist/lib/js/components/Modals/Modal/Modal.vue.d.ts +4 -0
  24. package/dist/lib/js/components/Modals/ModalDialog/ModalDialog.vue.d.ts +4 -0
  25. package/dist/lib/js/components/Pagination/Pagination.vue.d.ts +6 -0
  26. package/dist/lib/js/components/ProgressBar/ProgressBar.vue.d.ts +2 -0
  27. package/dist/lib/js/components/ProgressDonutChart/ProgressDonutChart.vue.d.ts +2 -0
  28. package/dist/lib/js/components/RichList/BasicRichListItem/BasicRichListItem.vue.d.ts +2 -0
  29. package/dist/lib/js/components/RichList/RichListItem/RichListItem.vue.d.ts +2 -0
  30. package/dist/lib/js/components/SelectList/SelectListItem/SelectListItem.vue.d.ts +2 -0
  31. package/dist/lib/js/components/SelectList/SelectListItemToggle/SelectListItemToggle.vue.d.ts +2 -0
  32. package/dist/lib/js/components/Statuses/AccessStatus/AccessStatus.vue.d.ts +2 -0
  33. package/dist/lib/js/components/Statuses/BlockadeStatus/BlockadeStatus.vue.d.ts +2 -0
  34. package/dist/lib/js/components/SurveyQuestions/SurveyQuestionOpenEnded/SurveyQuestionOpenEnded.vue.d.ts +1009 -169
  35. package/dist/lib/js/components/SurveyQuestions/SurveyQuestionScale/SurveyQuestionScale.vue.d.ts +1000 -160
  36. package/dist/lib/js/components/Switch/Switch.vue.d.ts +2 -0
  37. package/dist/lib/js/components/Tile/Tile.sb.shared.d.ts +2 -0
  38. package/dist/lib/js/components/Toast/Toast.vue.d.ts +33 -15
  39. package/dist/lib/js/components/Toggles/ToggleButton/ToggleButton.vue.d.ts +2 -0
  40. package/dist/lib/js/composables/useFormFieldWithinForm.d.ts +3 -3
  41. package/dist/lib/js/icons/fontawesome.d.ts +2 -0
  42. package/dist/lib/js/index.d.ts +2 -1
  43. package/lib/js/components/Cards/Card/Card.consts.ts +18 -0
  44. package/lib/js/components/Cards/Card/Card.spec.ts +159 -33
  45. package/lib/js/components/Cards/Card/Card.stories.ts +21 -2
  46. package/lib/js/components/Cards/Card/Card.vue +90 -23
  47. package/lib/js/components/Dropdown/Dropdown.vue +6 -10
  48. package/lib/js/components/Form/Form.stories.ts +15 -1
  49. package/lib/js/components/Form/SelectField/SelectField.spec.ts +495 -0
  50. package/lib/js/components/Form/SelectField/SelectField.stories.ts +287 -0
  51. package/lib/js/components/Form/SelectField/SelectField.types.ts +65 -0
  52. package/lib/js/components/Form/SelectField/SelectField.utils.ts +83 -0
  53. package/lib/js/components/Form/SelectField/SelectField.vue +342 -0
  54. package/lib/js/components/Form/SelectField/SelectFieldOption.vue +51 -0
  55. package/lib/js/components/Form/SelectField/index.ts +5 -0
  56. package/lib/js/components/Form/SelectField/useSelectFieldWithinForm.ts +27 -0
  57. package/lib/js/components/SelectList/SelectListItem/SelectListItem.spec.ts +77 -0
  58. package/lib/js/components/SelectList/SelectListItem/SelectListItem.vue +4 -1
  59. package/lib/js/components/SurveyQuestions/SurveyQuestionOpenEnded/SurveyQuestionOpenEnded.vue +7 -12
  60. package/lib/js/components/SurveyQuestions/SurveyQuestionScale/SurveyQuestionScale.vue +7 -12
  61. package/lib/js/composables/useFormFieldWithinForm.ts +4 -4
  62. package/lib/js/icons/fontawesome.ts +4 -0
  63. package/lib/js/index.ts +2 -1
  64. package/lib/js/styles/Shadows/Shadows.stories.scss +16 -0
  65. package/lib/js/styles/Shadows/Shadows.stories.ts +4 -0
  66. package/lib/styles/mixins/_dropdown-surface.scss +24 -0
  67. package/lib/styles/settings/_shadows.scss +18 -0
  68. package/package.json +1 -1
  69. package/dist/lib/js/components/Modal/Modal.vue.d.ts +0 -395
  70. package/dist/lib/js/components/Modal/index.d.ts +0 -3
  71. package/lib/js/components/Modal/Modal.spec.ts +0 -58
  72. package/lib/js/components/Modal/Modal.vue +0 -137
  73. package/lib/js/components/Modal/index.ts +0 -3
@@ -3,12 +3,17 @@
3
3
  :class="[
4
4
  'ds-card',
5
5
  {
6
+ '-ds-paddingMedium': paddingSize === CARD_PADDING_SIZES.MEDIUM,
6
7
  '-ds-paddingLarge': paddingSize === CARD_PADDING_SIZES.LARGE,
7
8
  '-ds-leftRibbon':
8
9
  hasRibbon && !hasLoadingBar && ribbonPosition === CARD_RIBBON_POSITIONS.LEFT,
9
- '-ds-flat': isFlat,
10
- '-ds-noRadius': !hasRadius,
11
- '-ds-backgroundNeutral': backgroundColor === CARD_BACKGROUND_COLORS.NEUTRAL,
10
+ '-ds-elevationTop': effectiveElevation === CARD_ELEVATIONS.TOP,
11
+ '-ds-elevationNone': effectiveElevation === CARD_ELEVATIONS.NONE,
12
+ '-ds-radiusTop': effectiveRadius === CARD_RADIUSES.TOP,
13
+ '-ds-radiusNone': effectiveRadius === CARD_RADIUSES.NONE,
14
+ '-ds-backgroundNeutral':
15
+ effectiveBackgroundColor === CARD_BACKGROUND_COLORS.NEUTRAL,
16
+ '-ds-backgroundNone': effectiveBackgroundColor === CARD_BACKGROUND_COLORS.NONE,
12
17
  },
13
18
  ]"
14
19
  >
@@ -80,23 +85,36 @@
80
85
  $root: &;
81
86
  $card-border-radius: $radius-m;
82
87
 
88
+ background-color: $color-default-background;
89
+ border-radius: $card-border-radius;
90
+ box-shadow: $shadow-s;
83
91
  display: flex;
84
92
  flex-direction: column;
85
93
  position: relative;
86
94
  width: inherit;
87
95
 
88
- &:not(.-ds-flat) {
89
- background-color: $color-default-background;
90
- border-radius: $card-border-radius;
91
- box-shadow: $shadow-s;
96
+ &.-ds-backgroundNeutral {
97
+ background-color: $color-neutral-background;
98
+ }
92
99
 
93
- &.-ds-backgroundNeutral {
94
- background-color: $color-neutral-background;
95
- }
100
+ &.-ds-backgroundNone {
101
+ background-color: transparent;
102
+ }
96
103
 
97
- &.-ds-noRadius {
98
- border-radius: 0;
99
- }
104
+ &.-ds-elevationTop {
105
+ box-shadow: $shadow-top-s;
106
+ }
107
+
108
+ &.-ds-elevationNone {
109
+ box-shadow: none;
110
+ }
111
+
112
+ &.-ds-radiusTop {
113
+ border-radius: $card-border-radius $card-border-radius 0 0;
114
+ }
115
+
116
+ &.-ds-radiusNone {
117
+ border-radius: 0;
100
118
  }
101
119
 
102
120
  &.-ds-leftRibbon {
@@ -127,6 +145,10 @@
127
145
  &.-ds-withPadding {
128
146
  padding: $space-8;
129
147
 
148
+ #{$root}.-ds-paddingMedium & {
149
+ padding: $space-12 $space-12 $space-8;
150
+ }
151
+
130
152
  #{$root}.-ds-paddingLarge & {
131
153
  padding: $space-16 $space-16 $space-8;
132
154
  }
@@ -137,6 +159,10 @@
137
159
  &.-ds-withHorizontalMargin {
138
160
  margin: 0 $space-8;
139
161
 
162
+ #{$root}.-ds-paddingMedium & {
163
+ margin: 0 $space-12;
164
+ }
165
+
140
166
  #{$root}.-ds-paddingLarge & {
141
167
  margin: 0 $space-16;
142
168
  }
@@ -149,6 +175,10 @@
149
175
  &.-ds-withPadding {
150
176
  padding: $space-8;
151
177
 
178
+ #{$root}.-ds-paddingMedium & {
179
+ padding: $space-8 $space-12;
180
+ }
181
+
152
182
  #{$root}.-ds-paddingLarge & {
153
183
  padding: $space-8 $space-16;
154
184
  }
@@ -164,6 +194,10 @@
164
194
  &.-ds-withPadding {
165
195
  padding: 0 $space-8 $space-8;
166
196
 
197
+ #{$root}.-ds-paddingMedium & {
198
+ padding: 0 $space-12 $space-12;
199
+ }
200
+
167
201
  #{$root}.-ds-paddingLarge & {
168
202
  padding: 0 $space-16 $space-16;
169
203
  }
@@ -176,20 +210,21 @@
176
210
  display: flex;
177
211
  flex-shrink: 0;
178
212
 
179
- #{$root}:not(.-ds-flat) & {
213
+ #{$root}:not(.-ds-radiusNone) & {
180
214
  border-top-left-radius: $card-border-radius;
181
215
  border-top-right-radius: $card-border-radius;
182
216
  overflow: hidden;
183
217
  }
184
218
 
185
- #{$root}:not(.-ds-flat).-ds-leftRibbon & {
186
- border-bottom-left-radius: $card-border-radius;
219
+ #{$root}:not(.-ds-radiusNone).-ds-leftRibbon & {
187
220
  border-top-left-radius: $card-border-radius;
188
221
  border-top-right-radius: 0;
189
222
  }
190
223
 
191
- #{$root}:not(.-ds-flat).-ds-noRadius & {
192
- border-radius: 0;
224
+ // a left ribbon spans the full height of the card, so its bottom corner is
225
+ // only rounded when the card itself is rounded at the bottom
226
+ #{$root}:not(.-ds-radiusNone):not(.-ds-radiusTop).-ds-leftRibbon & {
227
+ border-bottom-left-radius: $card-border-radius;
193
228
  }
194
229
 
195
230
  .-ds-leftRibbon & {
@@ -213,13 +248,18 @@ import DsDivider from '../../Divider/Divider.vue';
213
248
  import DsLoadingBar, { LOADING_BAR_COLORS, LoadingBarColors } from '../../LoadingBar';
214
249
  import DsContainerRibbon from '../../ContainerRibbon/ContainerRibbon.vue';
215
250
  import { CONTAINER_RIBBON_LAYOUTS, CONTAINER_RIBBON_RADIUSES } from '../../ContainerRibbon';
251
+ import { RemovedProp } from '../../../utils/type.utils';
216
252
  import {
217
253
  CARD_BACKGROUND_COLORS,
254
+ CARD_ELEVATIONS,
255
+ CARD_RADIUSES,
218
256
  CARD_RIBBON_COLORS,
219
257
  CARD_RIBBON_POSITIONS,
220
258
  CARD_RIBBON_SIZES,
221
259
  CARD_PADDING_SIZES,
222
260
  CardBackgroundColor,
261
+ CardElevation,
262
+ CardRadius,
223
263
  CardRibbonColors,
224
264
  CardRibbonPositions,
225
265
  CardRibbonSizes,
@@ -234,8 +274,10 @@ const {
234
274
  paddingSize = CARD_PADDING_SIZES.SMALL,
235
275
  dividerUnderHeader = false,
236
276
  hasRibbon = false,
237
- hasRadius = true,
277
+ elevation = CARD_ELEVATIONS.DEFAULT,
278
+ radius = CARD_RADIUSES.ALL,
238
279
  backgroundColor = CARD_BACKGROUND_COLORS.DEFAULT,
280
+ isFlat = false,
239
281
  ribbonPosition = CARD_RIBBON_POSITIONS.TOP,
240
282
  ribbonSize = CARD_RIBBON_SIZES.MEDIUM,
241
283
  ribbonColor = CARD_RIBBON_COLORS.NEUTRAL_HEAVY,
@@ -243,7 +285,6 @@ const {
243
285
  hasLoadingBar = false,
244
286
  loadingBarColor = LOADING_BAR_COLORS.NEUTRAL_HEAVY,
245
287
  loadingBarTime = '0',
246
- isFlat = false,
247
288
  isContentScrollable = false,
248
289
  } = defineProps<{
249
290
  contentHasPadding?: boolean;
@@ -252,8 +293,15 @@ const {
252
293
  paddingSize?: CardPaddingSize;
253
294
  dividerUnderHeader?: boolean;
254
295
  hasRibbon?: boolean;
255
- hasRadius?: boolean;
296
+ elevation?: CardElevation;
297
+ radius?: CardRadius;
256
298
  backgroundColor?: CardBackgroundColor;
299
+ /**
300
+ * Shorthand for `elevation="none"`, `radius="none"` and `background-color="none"`.
301
+ * An axis explicitly set to a non-default value still wins over `isFlat`,
302
+ * so `is-flat radius="top"` keeps the top corners rounded.
303
+ */
304
+ isFlat?: boolean;
257
305
  ribbonPosition?: CardRibbonPositions;
258
306
  ribbonSize?: CardRibbonSizes;
259
307
  ribbonColor?: CardRibbonColors;
@@ -261,8 +309,10 @@ const {
261
309
  hasLoadingBar?: boolean;
262
310
  loadingBarColor?: LoadingBarColors;
263
311
  loadingBarTime?: string;
264
- isFlat?: boolean;
265
312
  isContentScrollable?: boolean;
313
+ // Removed props kept as removal markers so existing usages fail type-checking.
314
+ /** @deprecated renamed to `radius` (all | top | none) */
315
+ hasRadius?: RemovedProp<'renamed to radius'>;
266
316
  }>();
267
317
 
268
318
  defineSlots<{
@@ -280,12 +330,29 @@ const ribbonLayout = computed(() => {
280
330
  return layoutMap[ribbonPosition] || CONTAINER_RIBBON_LAYOUTS.HORIZONTAL;
281
331
  });
282
332
 
333
+ // `isFlat` is a shorthand that lowers the defaults of the three visual axes to `none`.
334
+ // An axis explicitly set to a non-default value still wins, so `isFlat` combines with
335
+ // e.g. `radius="top"`.
336
+ const effectiveElevation = computed(() =>
337
+ isFlat && elevation === CARD_ELEVATIONS.DEFAULT ? CARD_ELEVATIONS.NONE : elevation,
338
+ );
339
+
340
+ const effectiveRadius = computed(() =>
341
+ isFlat && radius === CARD_RADIUSES.ALL ? CARD_RADIUSES.NONE : radius,
342
+ );
343
+
344
+ const effectiveBackgroundColor = computed(() =>
345
+ isFlat && backgroundColor === CARD_BACKGROUND_COLORS.DEFAULT
346
+ ? CARD_BACKGROUND_COLORS.NONE
347
+ : backgroundColor,
348
+ );
349
+
283
350
  const ribbonRadius = computed(() => {
284
351
  const ribbonPositionToRibbonRadiusMap = {
285
352
  [CARD_RIBBON_POSITIONS.TOP]: CONTAINER_RIBBON_RADIUSES.BOTTOM,
286
353
  [CARD_RIBBON_POSITIONS.LEFT]: CONTAINER_RIBBON_RADIUSES.RIGHT,
287
354
  };
288
- return hasRibbonRadius && (isFlat || !hasRadius)
355
+ return hasRibbonRadius && effectiveRadius.value === CARD_RADIUSES.NONE
289
356
  ? ribbonPositionToRibbonRadiusMap[ribbonPosition]
290
357
  : CONTAINER_RIBBON_RADIUSES.NONE;
291
358
  });
@@ -36,30 +36,26 @@
36
36
  </template>
37
37
 
38
38
  <style lang="scss" scoped>
39
- @import '../../../../lib/styles/settings/colors/tokens';
40
- @import '../../../../lib/styles/settings/radiuses';
41
39
  @import '../../../../lib/styles/settings/spacings';
42
- @import '../../../../lib/styles/settings/shadows';
40
+ @import '../../../../lib/styles/mixins/dropdown-surface';
43
41
 
44
42
  .ds-dropdown {
45
- background-color: $color-default-background;
43
+ @include dropdownSurface;
44
+
45
+ // Resets for the styles vue-popperjs ships in vue-popper.css.
46
46
  border: 0;
47
47
  border-radius: 0;
48
- box-shadow: $shadow-m;
49
48
  max-width: 100%;
50
49
  min-width: 128px;
51
- overflow: hidden;
52
50
  padding: 0;
53
51
  text-align: left;
54
52
 
55
53
  &.-ds-radiusBottom {
56
- border-bottom-left-radius: $radius-s;
57
- border-bottom-right-radius: $radius-s;
54
+ @include dropdownSurfaceRadiusBottom;
58
55
  }
59
56
 
60
57
  &.-ds-radiusTop {
61
- border-top-left-radius: $radius-s;
62
- border-top-right-radius: $radius-s;
58
+ @include dropdownSurfaceRadiusTop;
63
59
  }
64
60
 
65
61
  &[x-placement^='bottom'] {
@@ -6,6 +6,7 @@ import { useForm } from 'vee-validate';
6
6
  import { toTypedSchema } from '@vee-validate/zod';
7
7
  import { array, object, string } from 'zod';
8
8
  import CheckboxGroupField from './CheckboxGroupField/CheckboxGroupField.vue';
9
+ import SelectField from './SelectField';
9
10
  import Button from '../Buttons/Button';
10
11
 
11
12
  export default {
@@ -14,16 +15,18 @@ export default {
14
15
  } as Meta<any>;
15
16
 
16
17
  export const SimpleForm = () => ({
17
- components: { InputField, CheckboxGroupField, Checkbox, Button },
18
+ components: { InputField, CheckboxGroupField, Checkbox, SelectField, Button },
18
19
  setup: () => {
19
20
  const { handleSubmit } = useForm({
20
21
  initialValues: {
21
22
  fullName: '',
23
+ country: '',
22
24
  newsletterTopics: [],
23
25
  },
24
26
  validationSchema: toTypedSchema(
25
27
  object({
26
28
  fullName: string().min(1, 'Imię i nazwisko jest wymagane'),
29
+ country: string().min(1, 'Kraj jest wymagany'),
27
30
  newsletterTopics: array(string()).min(
28
31
  1,
29
32
  'Wybierz przynajmniej jeden temat newslettera',
@@ -43,11 +46,22 @@ export const SimpleForm = () => ({
43
46
 
44
47
  return {
45
48
  onSubmit,
49
+ countryOptions: [
50
+ { value: 'pl', label: 'Polska' },
51
+ { value: 'de', label: 'Niemcy' },
52
+ { value: 'cz', label: 'Czechy' },
53
+ ],
46
54
  };
47
55
  },
48
56
  template: `
49
57
  <form @submit.prevent="onSubmit" style="display: flex; flex-direction: column; gap: 16px; max-width: 400px;">
50
58
  <InputField label="Imię i nazwisko" name="fullName" />
59
+ <SelectField
60
+ label="Kraj"
61
+ name="country"
62
+ placeholder="Wybierz kraj"
63
+ :options="countryOptions"
64
+ />
51
65
  <CheckboxGroupField label="Jakie tematy newslettera Cię interesują?" name="newsletterTopics">
52
66
  <template #field>
53
67
  <Checkbox value="technology">Technologia</Checkbox>