@pareto-engineering/design-system 4.0.0-alpha.74 → 4.0.0-alpha.76

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 (30) hide show
  1. package/dist/cjs/a/AnimatedGradient/styles.scss +1 -0
  2. package/dist/cjs/a/BlurOverlay/styles.scss +2 -0
  3. package/dist/cjs/a/DatePicker/DatePicker.js +162 -0
  4. package/dist/cjs/a/DatePicker/index.js +13 -0
  5. package/dist/cjs/a/DatePicker/styles.scss +380 -0
  6. package/dist/cjs/a/XMLEditor/XMLEditor.js +5 -0
  7. package/dist/cjs/a/index.js +8 -1
  8. package/dist/cjs/f/fields/SelectInput/common/Multiple/Multiple.js +1 -3
  9. package/dist/cjs/f/fields/SelectInput/common/Single/Single.js +3 -3
  10. package/dist/es/a/AnimatedGradient/styles.scss +1 -0
  11. package/dist/es/a/BlurOverlay/styles.scss +2 -0
  12. package/dist/es/a/DatePicker/DatePicker.js +154 -0
  13. package/dist/es/a/DatePicker/index.js +2 -0
  14. package/dist/es/a/DatePicker/styles.scss +380 -0
  15. package/dist/es/a/XMLEditor/XMLEditor.js +5 -0
  16. package/dist/es/a/index.js +2 -1
  17. package/dist/es/f/fields/SelectInput/common/Multiple/Multiple.js +1 -3
  18. package/dist/es/f/fields/SelectInput/common/Single/Single.js +1 -1
  19. package/package.json +3 -2
  20. package/src/stories/a/DatePicker.stories.jsx +96 -0
  21. package/src/ui/a/AnimatedGradient/styles.scss +1 -0
  22. package/src/ui/a/BlurOverlay/styles.scss +2 -0
  23. package/src/ui/a/DatePicker/DatePicker.jsx +201 -0
  24. package/src/ui/a/DatePicker/index.js +2 -0
  25. package/src/ui/a/DatePicker/styles.scss +380 -0
  26. package/src/ui/a/XMLEditor/XMLEditor.jsx +6 -0
  27. package/src/ui/a/index.js +1 -0
  28. package/src/ui/f/fields/SelectInput/common/Multiple/Multiple.jsx +1 -3
  29. package/src/ui/f/fields/SelectInput/common/Single/Single.jsx +1 -1
  30. package/tests/__snapshots__/Storyshots.test.js.snap +8231 -0
@@ -0,0 +1,154 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ /* @pareto-engineering/generator-front 1.0.12 */
3
+ import * as React from 'react';
4
+ import { DayPicker } from 'react-day-picker';
5
+ import { format } from 'date-fns';
6
+ import PropTypes from 'prop-types';
7
+ import styleNames from '@pareto-engineering/bem/exports';
8
+ import "./styles.scss";
9
+
10
+ // Local Definitions
11
+
12
+ const baseClassName = styleNames.base;
13
+ const componentClassName = 'date-picker';
14
+
15
+ /**
16
+ * This is the component description.
17
+ */
18
+ const DatePickerWrapper = ({
19
+ id,
20
+ className: userClassName,
21
+ style,
22
+ mode,
23
+ selected,
24
+ setSelection,
25
+ fromMonth,
26
+ toDate,
27
+ customFooter,
28
+ timeFrom,
29
+ setTimeFrom,
30
+ timeTo,
31
+ setTimeTo,
32
+ dateFormat,
33
+ showDebugger,
34
+ ...otherProps
35
+ }) => {
36
+ const convertFooterText = selection => {
37
+ if (mode === 'single') {
38
+ return format(selection, dateFormat);
39
+ }
40
+ if (mode === 'multiple') {
41
+ return selection.map(date => format(date, dateFormat)).join(', ');
42
+ }
43
+ if (mode === 'range') {
44
+ return selection.from && selection.to ? `${format(selection.from, dateFormat)} - ${format(selection.to, dateFormat)}` : 'Please pick an additional day.';
45
+ }
46
+ return null;
47
+ };
48
+ return /*#__PURE__*/React.createElement("div", {
49
+ id: id,
50
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
51
+ style: style
52
+ }, /*#__PURE__*/React.createElement(DayPicker, _extends({
53
+ mode: mode,
54
+ selected: selected,
55
+ onSelect: setSelection,
56
+ fromMonth: fromMonth,
57
+ toDate: toDate,
58
+ showOutsideDays: true,
59
+ footer: customFooter || /*#__PURE__*/React.createElement("div", {
60
+ className: "default-footer"
61
+ }, setTimeFrom && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
62
+ className: "time-label s-1"
63
+ }, /*#__PURE__*/React.createElement("span", {
64
+ className: "icon"
65
+ }, "C"), "\xA0 Time"), /*#__PURE__*/React.createElement("div", {
66
+ className: `time-inputs${timeTo ? ' multiple' : ''}`
67
+ }, /*#__PURE__*/React.createElement("input", {
68
+ className: "s-1",
69
+ type: "time",
70
+ value: timeFrom,
71
+ onChange: e => setTimeFrom(e.target.value)
72
+ }), setTimeTo && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
73
+ className: "icon s-2"
74
+ }, "r"), /*#__PURE__*/React.createElement("input", {
75
+ className: "s-1",
76
+ type: "time",
77
+ value: timeTo,
78
+ onChange: e => setTimeTo(e.target.value)
79
+ })))), /*#__PURE__*/React.createElement("p", {
80
+ className: "s-1 footer-text"
81
+ }, selected && convertFooterText(selected)))
82
+ }, otherProps)), showDebugger && /*#__PURE__*/React.createElement("div", {
83
+ className: "debugger"
84
+ }, /*#__PURE__*/React.createElement("pre", null, JSON.stringify(selected, null, 2))));
85
+ };
86
+ DatePickerWrapper.propTypes = {
87
+ /**
88
+ * The HTML id for this element
89
+ */
90
+ id: PropTypes.string,
91
+ /**
92
+ * The HTML class names for this element
93
+ */
94
+ className: PropTypes.string,
95
+ /**
96
+ * The React-written, css properties for this element.
97
+ */
98
+ style: PropTypes.objectOf(PropTypes.string),
99
+ /**
100
+ * The mode for this date picker.
101
+ */
102
+ mode: PropTypes.oneOf(['single', 'multiple', 'range']),
103
+ /**
104
+ * The current selection.
105
+ */
106
+ // eslint-disable-next-line react/forbid-prop-types
107
+ selected: PropTypes.objectOf(PropTypes.any).isRequired,
108
+ /**
109
+ * The function to update the selection.
110
+ */
111
+ setSelection: PropTypes.func.isRequired,
112
+ /**
113
+ * The earliest month to display.
114
+ */
115
+ fromMonth: PropTypes.instanceOf(Date),
116
+ /**
117
+ * The latest month to display.
118
+ */
119
+ toDate: PropTypes.instanceOf(Date),
120
+ /**
121
+ * Custom footer component.
122
+ */
123
+ customFooter: PropTypes.node,
124
+ /**
125
+ * The start time.
126
+ */
127
+ timeFrom: PropTypes.string,
128
+ /**
129
+ * The function to update the start time.
130
+ */
131
+ setTimeFrom: PropTypes.func,
132
+ /**
133
+ * The end time.
134
+ */
135
+ timeTo: PropTypes.string,
136
+ /**
137
+ * The function to update the end time.
138
+ */
139
+ setTimeTo: PropTypes.func,
140
+ /**
141
+ * The date format.
142
+ */
143
+ dateFormat: PropTypes.string,
144
+ /**
145
+ * Show the debugger.
146
+ */
147
+ showDebugger: PropTypes.bool
148
+ };
149
+ DatePickerWrapper.defaultProps = {
150
+ mode: 'single',
151
+ dateFormat: 'PPP',
152
+ showDebugger: false
153
+ };
154
+ export default DatePickerWrapper;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as DatePicker } from "./DatePicker";
@@ -0,0 +1,380 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ /* stylelint-disable max-nesting-depth -- needed here */
3
+ /* stylelint-disable selector-class-pattern -- needed here */
4
+ /* stylelint-disable selector-max-compound-selectors -- needed here */
5
+ /* stylelint-disable declaration-no-important -- needed here */
6
+ /* stylelint-disable font-weight-notation -- needed here */
7
+ /* stylelint-disable declaration-block-no-duplicate-properties -- needed here */
8
+
9
+ @use "@pareto-engineering/bem";
10
+
11
+ $default-background: var(--background-far);
12
+ $default-border: var(--theme-default-input-border);
13
+ $default-input-border-radius: var(--theme-default-input-border-radius);
14
+ $default-padding: .55em .75em;
15
+ $default-spacing-size: calc(var(--gap) / 2);
16
+ $rdp-cell-size: 40px;
17
+ $rdp-caption-font-size: 1em;
18
+ $rdp-accent-color: var(--hard-interactive);
19
+ $rdp-outline: 2px solid var(--hard-interactive);
20
+ $rdp-selected-color: var(--on-interactive);
21
+
22
+ .#{bem.$base}.date-picker {
23
+ /* Hide elements for devices that are not screen readers */
24
+ .rdp-vhidden {
25
+ appearance: none;
26
+ appearance: none;
27
+ appearance: none;
28
+ background: transparent;
29
+ border: 0;
30
+ border: 0 !important;
31
+ box-sizing: border-box;
32
+ clip: rect(1px, 1px, 1px, 1px) !important;
33
+ height: 1px !important;
34
+ margin: 0;
35
+ overflow: hidden !important;
36
+ padding: 0;
37
+ padding: 0 !important;
38
+ position: absolute !important;
39
+ top: 0;
40
+ width: 1px !important;
41
+ }
42
+
43
+ /* Buttons */
44
+ .rdp-button_reset {
45
+ appearance: none;
46
+ appearance: none;
47
+ appearance: none;
48
+ background: none;
49
+ color: inherit;
50
+ cursor: default;
51
+ font: inherit;
52
+ margin: 0;
53
+ padding: 0;
54
+ position: relative;
55
+ }
56
+
57
+ .rdp-button_reset:focus-visible {
58
+ /* Make sure to reset outline only when :focus-visible is supported */
59
+ outline: none;
60
+ }
61
+
62
+ .rdp-button {
63
+ border: 2px solid transparent;
64
+ }
65
+
66
+ .rdp-button[disabled]:not(.rdp-day_selected) {
67
+ opacity: .25;
68
+ }
69
+
70
+ .rdp-button:not([disabled]) {
71
+ cursor: pointer;
72
+ }
73
+
74
+ .rdp-button:focus-visible:not([disabled]) {
75
+ background-color: $default-background;
76
+ border: $rdp-outline;
77
+ color: inherit;
78
+ }
79
+
80
+ .rdp-button:hover:not([disabled]):not(.rdp-day_selected) {
81
+ background-color: $default-background;
82
+ }
83
+
84
+ .rdp-months {
85
+ display: flex;
86
+ }
87
+
88
+ .rdp-month {
89
+ margin: 0 1em;
90
+ }
91
+
92
+ .rdp-month:first-child {
93
+ margin-left: 0;
94
+ }
95
+
96
+ .rdp-month:last-child {
97
+ margin-right: 0;
98
+ }
99
+
100
+ .rdp-table {
101
+ background-color: $default-background;
102
+ border-collapse: collapse;
103
+ margin: 0;
104
+ max-width: calc($rdp-cell-size * 7);
105
+ }
106
+
107
+ .rdp-with_weeknumber .rdp-table {
108
+ border-collapse: collapse;
109
+ max-width: calc($rdp-cell-size * 8);
110
+ }
111
+
112
+ .rdp-caption {
113
+ align-items: center;
114
+ background-color: $default-background;
115
+ display: flex;
116
+ justify-content: space-between;
117
+ padding: 0;
118
+ text-align: left;
119
+ }
120
+
121
+ .rdp-multiple_months .rdp-caption {
122
+ display: block;
123
+ position: relative;
124
+ text-align: center;
125
+ }
126
+
127
+ .rdp-caption_dropdowns {
128
+ display: inline-flex;
129
+ position: relative;
130
+ }
131
+
132
+ .rdp-caption_label {
133
+ align-items: center;
134
+ border: 0;
135
+ border: 2px solid transparent;
136
+ color: var(--heading);
137
+ display: inline-flex;
138
+ font-family: inherit;
139
+ font-size: $rdp-caption-font-size;
140
+ font-weight: bold;
141
+ margin: 0;
142
+ padding: 0 .25em;
143
+ position: relative;
144
+ white-space: nowrap;
145
+ z-index: 1;
146
+ }
147
+
148
+ .rdp-nav {
149
+ white-space: nowrap;
150
+ }
151
+
152
+ .rdp-multiple_months .rdp-caption_start .rdp-nav {
153
+ left: 0;
154
+ position: absolute;
155
+ top: 50%;
156
+ transform: translateY(-50%);
157
+ }
158
+
159
+ .rdp-multiple_months .rdp-caption_end .rdp-nav {
160
+ position: absolute;
161
+ right: 0;
162
+ top: 50%;
163
+ transform: translateY(-50%);
164
+ }
165
+
166
+ .rdp-nav_button {
167
+ align-items: center;
168
+ border-radius: 100%;
169
+ display: inline-flex;
170
+ height: $rdp-cell-size;
171
+ justify-content: center;
172
+ padding: .25em;
173
+ width: $rdp-cell-size;
174
+ }
175
+
176
+ /* ---------- */
177
+
178
+ /* Dropdowns */
179
+
180
+ /* ---------- */
181
+
182
+ .rdp-dropdown_year,
183
+ .rdp-dropdown_month {
184
+ align-items: center;
185
+ display: inline-flex;
186
+ position: relative;
187
+ }
188
+
189
+ .rdp-dropdown {
190
+ appearance: none;
191
+ background-color: transparent;
192
+ border: none;
193
+ bottom: 0;
194
+ cursor: inherit;
195
+ font-family: inherit;
196
+ font-size: inherit;
197
+ left: 0;
198
+ line-height: inherit;
199
+ margin: 0;
200
+ opacity: 0;
201
+ padding: 0;
202
+ position: absolute;
203
+ top: 0;
204
+ width: 100%;
205
+ z-index: 2;
206
+ }
207
+
208
+ .rdp-dropdown[disabled] {
209
+ color: unset;
210
+ opacity: unset;
211
+ }
212
+
213
+ .rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label {
214
+ background-color: $default-background;
215
+ border: $rdp-outline;
216
+ border-radius: 6px;
217
+ }
218
+
219
+ .rdp-dropdown_icon {
220
+ margin: 0 0 0 5px;
221
+ }
222
+
223
+ .rdp-head {
224
+ border: 0;
225
+ }
226
+
227
+ .rdp-head_row,
228
+ .rdp-row {
229
+ height: 100%;
230
+ }
231
+
232
+ .rdp-head_cell {
233
+ font-size: .75em;
234
+ font-weight: 700;
235
+ height: 100%;
236
+ height: $rdp-cell-size;
237
+ padding: 0;
238
+ text-align: center;
239
+ text-transform: uppercase;
240
+ vertical-align: middle;
241
+ }
242
+
243
+ .rdp-tbody {
244
+ border: 0;
245
+ }
246
+
247
+ .rdp-tfoot {
248
+ margin: .5em;
249
+
250
+ .default-footer {
251
+ display: flex;
252
+ flex-direction: column;
253
+
254
+ >.footer-text {
255
+ align-self: center;
256
+ }
257
+
258
+ >.time-label {
259
+ align-items: center;
260
+ align-self: first baseline;
261
+ color: var(--heading);
262
+ display: flex;
263
+ margin: 0;
264
+ padding: $default-spacing-size;
265
+ }
266
+
267
+ >.time-inputs {
268
+ :not(.multiple) {
269
+ margin-left: $default-spacing-size;
270
+ }
271
+
272
+ &.multiple {
273
+ align-items: center;
274
+ align-self: center;
275
+ display: flex;
276
+ gap: $default-spacing-size;
277
+ }
278
+
279
+ >input[type="time"] {
280
+ background-color: $default-background;
281
+ border: $default-border;
282
+ border-radius: $default-input-border-radius;
283
+ color: var(--paragraph);
284
+ outline: none;
285
+ padding: $default-padding;
286
+
287
+ &::-webkit-calendar-picker-indicator {
288
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyMCAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5IDEuNUwxMCAxMC41TDEgMS41IiBzdHJva2U9IiM0QzRENTMiIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=");
289
+ background-position: calc(100% - $default-spacing-size / 2);
290
+ background-repeat: no-repeat;
291
+ background-size: $default-spacing-size;
292
+ }
293
+ }
294
+ }
295
+ }
296
+ }
297
+
298
+ .rdp-cell {
299
+ height: 100%;
300
+ height: $rdp-cell-size;
301
+ padding: 0;
302
+ text-align: center;
303
+ width: $rdp-cell-size;
304
+ }
305
+
306
+ .rdp-weeknumber {
307
+ font-size: .75em;
308
+ }
309
+
310
+ .rdp-weeknumber,
311
+ .rdp-day {
312
+ align-items: center;
313
+ border: 2px solid transparent;
314
+ border-radius: 100%;
315
+ box-sizing: border-box;
316
+ display: flex;
317
+ height: $rdp-cell-size;
318
+ justify-content: center;
319
+ margin: 0;
320
+ max-width: $rdp-cell-size;
321
+ overflow: hidden;
322
+ width: $rdp-cell-size;
323
+ }
324
+
325
+ .rdp-day_today:not(.rdp-day_outside) {
326
+ font-weight: bold;
327
+ }
328
+
329
+ .rdp-day_selected,
330
+ .rdp-day_selected:focus-visible,
331
+ .rdp-day_selected:hover {
332
+ background-color: $rdp-accent-color;
333
+ color: $rdp-selected-color;
334
+ opacity: 1;
335
+ }
336
+
337
+ .rdp-day_outside {
338
+ opacity: .5;
339
+ }
340
+
341
+ .rdp-day_selected:focus-visible {
342
+ /* Since the background is the same use again the outline */
343
+ outline: $rdp-outline;
344
+ outline-offset: 2px;
345
+ z-index: 1;
346
+ }
347
+
348
+ .rdp:not([dir="rtl"]) .rdp-day_range_start:not(.rdp-day_range_end) {
349
+ border-bottom-right-radius: 0;
350
+ border-top-right-radius: 0;
351
+ }
352
+
353
+ .rdp:not([dir="rtl"]) .rdp-day_range_end:not(.rdp-day_range_start) {
354
+ border-bottom-left-radius: 0;
355
+ border-top-left-radius: 0;
356
+ }
357
+
358
+ .rdp[dir="rtl"] .rdp-day_range_start:not(.rdp-day_range_end) {
359
+ border-bottom-left-radius: 0;
360
+ border-top-left-radius: 0;
361
+ }
362
+
363
+ .rdp[dir="rtl"] .rdp-day_range_end:not(.rdp-day_range_start) {
364
+ border-bottom-right-radius: 0;
365
+ border-top-right-radius: 0;
366
+ }
367
+
368
+ .rdp-day_range_end.rdp-day_range_start {
369
+ border-radius: 100%;
370
+ }
371
+
372
+ .rdp-day_range_middle {
373
+ background-color: var(--interactive);
374
+ border-radius: 0;
375
+ }
376
+
377
+ .rdp-nav_icon {
378
+ color: var(--ui-icons);
379
+ }
380
+ }
@@ -27,6 +27,7 @@ const XMLEditor = ({
27
27
  gutterWidth,
28
28
  config,
29
29
  onChange,
30
+ onBlur,
30
31
  stopPropagationKeys
31
32
  }) => {
32
33
  const editorRef = useRef();
@@ -36,6 +37,10 @@ const XMLEditor = ({
36
37
  extensions: [keymap.of(defaultKeymap), indentOnInput(), lineNumbers(), bracketMatching(), foldGutter(), drawSelection(), highlightActiveLine(), highlightActiveLineGutter(), highlightSpecialChars(), dropCursor(), rectangularSelection(), crosshairCursor(), xml(), theme, EditorState.readOnly.of(readOnly), EditorView.updateListener.of(view => {
37
38
  onChange(view);
38
39
  // view.state.doc.toString() to receive the current content in the editor.
40
+ }), EditorView.focusChangeEffect.of((state, focused) => {
41
+ if (!focused) {
42
+ onBlur?.(state);
43
+ }
39
44
  }), EditorView.domEventHandlers({
40
45
  keydown(e) {
41
46
  if (stopPropagationKeys?.includes(e.key)) {
@@ -24,4 +24,5 @@ export { TextSteps } from "./TextSteps";
24
24
  export { Removable } from "./Removable";
25
25
  export { ToggleSwitch } from "./ToggleSwitch";
26
26
  export { XMLEditor } from "./XMLEditor";
27
- export { LexicalPreview } from "./LexicalPreview";
27
+ export { LexicalPreview } from "./LexicalPreview";
28
+ export { DatePicker } from "./DatePicker";
@@ -138,9 +138,7 @@ const Multiple = ({
138
138
  }
139
139
  });
140
140
  useEffect(() => {
141
- if (selectedItems?.length > 0) {
142
- setValue(selectedItems);
143
- }
141
+ setValue(selectedItems);
144
142
  }, [selectedItems]);
145
143
  useEffect(() => {
146
144
  if (value?.length > 0 && (testIfArraysAreUnique(value, selectedItems) || testIfArraysAreUnique(selectedItems, value))) {
@@ -5,7 +5,7 @@ import { useField } from 'formik';
5
5
  import PropTypes from 'prop-types';
6
6
  import styleNames from '@pareto-engineering/bem/exports';
7
7
  import { LoadingCircle } from "../../../../../a";
8
- import { FormLabel, FormDescription } from "../../../../../../../dist/cjs";
8
+ import { FormLabel, FormDescription } from "../../../..";
9
9
 
10
10
  // Local Definitions
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pareto-engineering/design-system",
3
- "version": "4.0.0-alpha.74",
3
+ "version": "4.0.0-alpha.76",
4
4
  "description": "",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/es/index.js",
@@ -66,6 +66,7 @@
66
66
  "lodash": "^4.17.21",
67
67
  "prop-types": "^15.8.1",
68
68
  "react": "^18.2.0",
69
+ "react-day-picker": "^8.10.0",
69
70
  "react-dom": "^18.2.0",
70
71
  "react-helmet-async": "^1.3.0",
71
72
  "react-relay": "^15.0.0",
@@ -73,5 +74,5 @@
73
74
  "relay-test-utils": "^15.0.0"
74
75
  },
75
76
  "browserslist": "> 2%",
76
- "gitHead": "81827866347e056b8fb3ba1cb7c6e6f22c5eddbb"
77
+ "gitHead": "b2057b76a09837c3812774840044a057ca1c25f3"
77
78
  }
@@ -0,0 +1,96 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ import * as React from 'react'
3
+
4
+ import { useState } from 'react'
5
+
6
+ import { DatePicker } from 'ui'
7
+
8
+ export default {
9
+ title :'a/DatePicker',
10
+ component :DatePicker,
11
+ decorators:[
12
+ // storyfn => <div className="">{ storyfn() }</div>,
13
+ ],
14
+ argTypes:{
15
+ mode:{
16
+ control:{
17
+ type :'select',
18
+ options:['single', 'multiple', 'range'],
19
+ },
20
+ },
21
+ dateFormat:{
22
+ control:{
23
+ type:'text',
24
+ },
25
+ },
26
+ showDebugger:{
27
+ control:{
28
+ type:'boolean',
29
+ },
30
+ },
31
+ },
32
+ }
33
+
34
+ const today = new Date('2024-03-01T12:00:00Z')
35
+
36
+ const Template = (args) => {
37
+ const [value, setValue] = useState()
38
+
39
+ return (
40
+ <DatePicker
41
+ selected={value}
42
+ setSelection={setValue}
43
+ {...args}
44
+ today={today}
45
+ />
46
+ )
47
+ }
48
+
49
+ const TimeTemplate = ({ timeMode, ...args }) => {
50
+ const [value, setValue] = useState()
51
+ const [timeFrom, setTimeFrom] = useState('00:00')
52
+ const [timeTo, setTimeTo] = useState('23:59')
53
+
54
+ return (
55
+ <DatePicker
56
+ selected={value}
57
+ setSelection={setValue}
58
+ timeFrom={timeFrom}
59
+ setTimeFrom={setTimeFrom}
60
+ timeTo={timeMode === 'multiple' ? timeTo : undefined}
61
+ setTimeTo={timeMode === 'multiple' ? setTimeTo : undefined}
62
+ today={today}
63
+ {...args}
64
+ />
65
+ )
66
+ }
67
+
68
+ export const Base = Template.bind({})
69
+ Base.args = {}
70
+
71
+ export const MultipleSelection = Template.bind({})
72
+ MultipleSelection.args = {
73
+ mode:'multiple',
74
+ }
75
+
76
+ export const RangeSelection = Template.bind({})
77
+ RangeSelection.args = {
78
+ mode:'range',
79
+ }
80
+
81
+ export const TimeSelection = TimeTemplate.bind({})
82
+ TimeSelection.args = {
83
+ mode :'single',
84
+ timeMode:'single',
85
+ }
86
+
87
+ export const TimeRangeSelection = TimeTemplate.bind({})
88
+ TimeRangeSelection.args = {
89
+ mode :'range',
90
+ timeMode:'multiple',
91
+ }
92
+
93
+ export const WithCustomFooter = Template.bind({})
94
+ WithCustomFooter.args = {
95
+ customFooter:<div>Custom footer</div>,
96
+ }
@@ -7,6 +7,7 @@
7
7
  --gradient-color-2: var(--soft-background-mesh);
8
8
  --gradient-color-3: var(--background-mesh);
9
9
  --gradient-color-4: var(--soft-background-mesh);
10
+ background-color: var(--background-mesh);
10
11
  height: 100%;
11
12
  left: 0;
12
13
  top: 0;