@mirohq/design-system-calendar 0.1.0-calendar-component.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/main.js ADDED
@@ -0,0 +1,709 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var designSystem = require('@mirohq/design-system');
6
+ var designSystemStitches = require('@mirohq/design-system-stitches');
7
+ var React = require('react');
8
+ var reactAria = require('react-aria');
9
+ var date = require('@internationalized/date');
10
+ var reactStately = require('react-stately');
11
+ var designSystemFlex = require('@mirohq/design-system-flex');
12
+ var designSystemIcons = require('@mirohq/design-system-icons');
13
+ var designSystemUtils = require('@mirohq/design-system-utils');
14
+ var designSystemButton = require('@mirohq/design-system-button');
15
+ var designSystemPrimitive = require('@mirohq/design-system-primitive');
16
+
17
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
18
+
19
+ function _interopNamespace(e) {
20
+ if (e && e.__esModule) return e;
21
+ var n = Object.create(null);
22
+ if (e) {
23
+ Object.keys(e).forEach(function (k) {
24
+ if (k !== 'default') {
25
+ var d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: function () { return e[k]; }
29
+ });
30
+ }
31
+ });
32
+ }
33
+ n["default"] = e;
34
+ return Object.freeze(n);
35
+ }
36
+
37
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
38
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
39
+
40
+ const StyledDataSegment = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
41
+ color: "$text-neutrals-subtle",
42
+ "&[data-value]": {
43
+ color: "$text-neutrals"
44
+ },
45
+ "& span": {
46
+ pointerEvents: "none",
47
+ "&[data-placeholder]": {
48
+ display: "none",
49
+ height: "0",
50
+ color: "$text-neutrals-subtle"
51
+ }
52
+ }
53
+ });
54
+
55
+ const FieldDateSegment = React__default["default"].forwardRef(({ segment, state }) => {
56
+ const ref = React.useRef(null);
57
+ const { segmentProps } = reactAria.useDateSegment(segment, state, ref);
58
+ return /* @__PURE__ */ React__default["default"].createElement(StyledDataSegment, {
59
+ ...segmentProps,
60
+ ref,
61
+ "data-value": state.value !== null ? "" : void 0
62
+ }, /* @__PURE__ */ React__default["default"].createElement("span", {
63
+ "aria-hidden": "true",
64
+ "data-placeholder": !segment.isPlaceholder ? "" : void 0
65
+ }, segment.placeholder), segment.isPlaceholder ? "" : segment.text);
66
+ });
67
+ const TextField = (props) => {
68
+ const ref = React.useRef(null);
69
+ const { locale } = reactAria.useLocale();
70
+ const state = reactStately.useDateFieldState({
71
+ ...props,
72
+ isReadOnly: true,
73
+ locale,
74
+ createCalendar: date.createCalendar
75
+ });
76
+ const { fieldProps } = reactAria.useDateField(props, state, ref);
77
+ return /* @__PURE__ */ React__default["default"].createElement(designSystemFlex.Flex, {
78
+ ...fieldProps,
79
+ ref
80
+ }, state.segments.map((segment, i) => /* @__PURE__ */ React__default["default"].createElement(FieldDateSegment, {
81
+ key: i,
82
+ segment,
83
+ state
84
+ })));
85
+ };
86
+
87
+ const StyledButton = designSystemStitches.styled(designSystemPrimitive.Primitive.button, {
88
+ padding: "0",
89
+ background: "transparent",
90
+ border: "none",
91
+ cursor: "pointer",
92
+ color: "$text-neutrals",
93
+ "&[disabled]": {
94
+ cursor: "not-allowed"
95
+ }
96
+ });
97
+ const StyledFieldButton = designSystemStitches.styled(designSystemPrimitive.Primitive.button, {
98
+ padding: "0",
99
+ background: "transparent",
100
+ border: "none",
101
+ cursor: "pointer",
102
+ square: "28px",
103
+ "&[disabled]": {
104
+ cursor: "not-allowed"
105
+ },
106
+ "& svg": {
107
+ color: "$text-neutrals-subtle",
108
+ square: "22px"
109
+ },
110
+ "&[data-custom]": {
111
+ width: "100%",
112
+ height: "unset"
113
+ }
114
+ });
115
+
116
+ const Button = React__default["default"].forwardRef((props, forwardRef) => {
117
+ const ref = React.useRef(null);
118
+ const { buttonProps } = reactAria.useButton(props, ref);
119
+ const { focusProps } = reactAria.useFocusRing();
120
+ const { children } = props;
121
+ const refs = designSystemUtils.mergeRefs([ref, forwardRef]);
122
+ return /* @__PURE__ */ React__default["default"].createElement(StyledButton, {
123
+ ...reactAria.mergeProps(buttonProps, focusProps),
124
+ ref: refs
125
+ }, children);
126
+ });
127
+ const FieldButton = (props) => {
128
+ const ref = React.useRef(null);
129
+ const { buttonProps } = reactAria.useButton(props, ref);
130
+ const { customButton = false, children } = props;
131
+ return /* @__PURE__ */ React__default["default"].createElement(StyledFieldButton, {
132
+ "data-custom": customButton ? "" : void 0,
133
+ ...buttonProps,
134
+ ref
135
+ }, children);
136
+ };
137
+
138
+ const Popover = (props) => {
139
+ const ref = React__namespace.useRef(null);
140
+ const { state, children } = props;
141
+ const { dialogProps } = reactAria.useDialog(props, ref);
142
+ const { popoverProps, underlayProps } = reactAria.usePopover(
143
+ {
144
+ ...props,
145
+ popoverRef: ref
146
+ },
147
+ state
148
+ );
149
+ return /* @__PURE__ */ React__namespace.createElement(reactAria.Overlay, null, /* @__PURE__ */ React__namespace.createElement("div", {
150
+ ...underlayProps
151
+ }), /* @__PURE__ */ React__namespace.createElement("div", {
152
+ ...popoverProps,
153
+ ref
154
+ }, /* @__PURE__ */ React__namespace.createElement(reactAria.DismissButton, {
155
+ onDismiss: state.close
156
+ }), /* @__PURE__ */ React__namespace.createElement("div", {
157
+ ...dialogProps,
158
+ ref
159
+ }, children), /* @__PURE__ */ React__namespace.createElement(reactAria.DismissButton, {
160
+ onDismiss: state.close
161
+ })));
162
+ };
163
+
164
+ const StyledRangePicker = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
165
+ display: "inline-block"
166
+ });
167
+ const StyledRangePickerInput$1 = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
168
+ display: "flex",
169
+ alignItems: "center",
170
+ padding: "$100",
171
+ paddingLeft: "$150",
172
+ border: "1px solid $border-neutrals",
173
+ borderRadius: "$50",
174
+ background: "$background-neutrals",
175
+ color: "$text-neutrals",
176
+ minWidth: "230px",
177
+ "&:hover": {
178
+ border: "1px solid $border-primary-hover",
179
+ cursor: "pointer"
180
+ }
181
+ });
182
+ const StyledRangePickerInputContent$1 = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
183
+ display: "flex",
184
+ alignItems: "center",
185
+ fontSize: "$200",
186
+ lineHeight: "24px",
187
+ width: "100%"
188
+ });
189
+
190
+ const StyledPredefinedRanges = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
191
+ display: "flex",
192
+ flexDirection: "column",
193
+ borderRight: "1px solid $border-neutrals",
194
+ padding: "$300 $200 0 $200",
195
+ "& button": {
196
+ background: "transparent",
197
+ border: "none",
198
+ fontSize: "$200",
199
+ padding: "0 0 0 $100",
200
+ textAlign: "left",
201
+ lineHeight: "24px",
202
+ color: "$text-neutrals",
203
+ marginBottom: "$150",
204
+ borderRadius: "$50",
205
+ minWidth: "125px",
206
+ cursor: "pointer",
207
+ "&:hover": {
208
+ backgroundColor: "$background-primary-prominent-hover",
209
+ color: "$text-primary-inverted",
210
+ fontWeight: "600"
211
+ }
212
+ }
213
+ });
214
+
215
+ const PredefinedRanges = React__default["default"].forwardRef(({ range, onClick }, forwardRef) => /* @__PURE__ */ React__default["default"].createElement(StyledPredefinedRanges, {
216
+ ref: forwardRef
217
+ }, range == null ? void 0 : range.map((date, i) => /* @__PURE__ */ React__default["default"].createElement("button", {
218
+ key: i,
219
+ type: "button",
220
+ onClick: () => onClick(date)
221
+ }, date.label))));
222
+
223
+ const StyledBody = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
224
+ display: "inline-block",
225
+ background: "$background-neutrals"
226
+ });
227
+ const StyledBodyContent = designSystemStitches.styled(designSystem.Flex, {
228
+ margin: "0 auto",
229
+ boxShadow: "$100",
230
+ background: "$background-neutrals",
231
+ borderRadius: "$100"
232
+ });
233
+ const StyledGridContent = designSystemStitches.styled(designSystem.Flex, {
234
+ paddingBottom: "$200",
235
+ "& [data-left-calendar]": {
236
+ paddingLeft: "$200",
237
+ paddingRight: "$100"
238
+ },
239
+ "& [data-right-calendar]": {
240
+ paddingLeft: "$100",
241
+ paddingRight: "$200"
242
+ }
243
+ });
244
+ const StyledBodyContentLeft = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
245
+ paddingLeft: "$200",
246
+ paddingRight: "$100"
247
+ });
248
+ const StyledBodyContentRight = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
249
+ paddingLeft: "$100",
250
+ paddingRight: "$200"
251
+ });
252
+ const StyledClearContent = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
253
+ padding: "$200",
254
+ borderTop: "1px solid $border-neutrals"
255
+ });
256
+
257
+ const StyledHeaderTitle = designSystemStitches.styled(designSystem.Flex, {
258
+ justifyContent: "center",
259
+ flex: "3",
260
+ color: "$text-neutrals"
261
+ });
262
+ const StyledHeader = designSystemStitches.styled(designSystem.Flex, {
263
+ padding: "0 $200",
264
+ color: "$text-neutrals"
265
+ });
266
+
267
+ const Header = ({
268
+ state,
269
+ prevButtonProps,
270
+ nextButtonProps,
271
+ visibleMonths
272
+ }) => {
273
+ const monthDateFormatter = reactAria.useDateFormatter({
274
+ month: "long",
275
+ year: "numeric",
276
+ timeZone: state.timeZone
277
+ });
278
+ return /* @__PURE__ */ React__default["default"].createElement(StyledHeader, null, /* @__PURE__ */ React__default["default"].createElement(Button, {
279
+ ...prevButtonProps
280
+ }, /* @__PURE__ */ React__default["default"].createElement(designSystemIcons.IconChevronLeft, null)), /* @__PURE__ */ React__default["default"].createElement(StyledHeaderTitle, null, /* @__PURE__ */ React__default["default"].createElement("h2", null, monthDateFormatter.format(
281
+ state.visibleRange.start.toDate(state.timeZone)
282
+ ))), visibleMonths !== void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledHeaderTitle, null, /* @__PURE__ */ React__default["default"].createElement("h2", null, monthDateFormatter.format(
283
+ state.visibleRange.start.add({ months: 1 }).toDate(state.timeZone)
284
+ ))), /* @__PURE__ */ React__default["default"].createElement(Button, {
285
+ ...nextButtonProps
286
+ }, /* @__PURE__ */ React__default["default"].createElement(designSystemIcons.IconChevronRight, null)));
287
+ };
288
+
289
+ const StyledCellContent = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
290
+ square: "28px",
291
+ display: "flex",
292
+ alignItems: "center",
293
+ justifyContent: "center",
294
+ borderRadius: "$50",
295
+ color: "$text-neutrals",
296
+ "&[data-today]": {
297
+ color: "$text-primary"
298
+ },
299
+ "&[data-weekend]": {
300
+ color: "$text-neutrals-subtle"
301
+ },
302
+ "&[data-selected-middle]": {
303
+ color: "$text-neutrals"
304
+ },
305
+ "&[data-selection]": {
306
+ borderRadius: "$50",
307
+ background: "$background-primary-prominent-selected",
308
+ color: "$text-primary-inverted",
309
+ fontWeight: "600"
310
+ },
311
+ "&[data-disabled]": {
312
+ textDecoration: "line-through",
313
+ color: "$text-neutrals-disabled"
314
+ }
315
+ });
316
+ const StyledCell = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
317
+ square: "36px",
318
+ cursor: "pointer",
319
+ display: "flex",
320
+ alignItems: "center",
321
+ justifyContent: "center",
322
+ "&:hover": {
323
+ background: "$background-primary-subtle-hover",
324
+ [`& ${StyledCellContent}`]: {
325
+ background: "$background-primary-prominent-hover",
326
+ color: "$text-primary-inverted"
327
+ }
328
+ },
329
+ "&[data-selected]": {
330
+ background: "$background-primary-subtle-hover"
331
+ },
332
+ "&[data-selection-start]": {
333
+ borderBottomLeftRadius: "$lg",
334
+ borderTopLeftRadius: "$lg"
335
+ },
336
+ "&[data-selection-end]": {
337
+ borderBottomRightRadius: "$lg",
338
+ borderTopRightRadius: "$lg"
339
+ },
340
+ "&[data-hidden]": {
341
+ display: "none"
342
+ },
343
+ "&[data-disabled]": {
344
+ cursor: "not-allowed",
345
+ "&:hover": {
346
+ background: "transparent",
347
+ [`& ${StyledCellContent}`]: {
348
+ background: "transparent",
349
+ color: "$text-neutrals-disabled"
350
+ }
351
+ }
352
+ }
353
+ });
354
+
355
+ const Cell = React__default["default"].forwardRef(
356
+ (props, forwardRef) => {
357
+ const { state, date: date$1, currentMonth } = props;
358
+ const ref = React.useRef(null);
359
+ const { cellProps, buttonProps, isSelected, isDisabled, formattedDate } = reactAria.useCalendarCell({ date: date$1 }, state, ref);
360
+ const isOutsideMonth = !date.isSameMonth(currentMonth, date$1);
361
+ const isSelectionStart = state.highlightedRange !== void 0 && state.highlightedRange !== null ? date.isSameDay(date$1, state.highlightedRange.start) : isSelected;
362
+ const isSelectionEnd = state.highlightedRange !== void 0 && state.highlightedRange !== null ? date.isSameDay(date$1, state.highlightedRange.end) : isSelected;
363
+ const { locale } = reactAria.useLocale();
364
+ const dayOfWeek = date.getDayOfWeek(date$1, locale);
365
+ const isWeekendDay = date.isWeekend(date$1, locale);
366
+ const isRoundedLeft = isSelected && (isSelectionStart || dayOfWeek === 0 || date$1.day === 1);
367
+ const isRoundedRight = isSelected && (isSelectionEnd || dayOfWeek === 6 || date$1.day === date$1.calendar.getDaysInMonth(date$1));
368
+ const { focusProps } = reactAria.useFocusRing();
369
+ return /* @__PURE__ */ React__default["default"].createElement("td", {
370
+ ...cellProps
371
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledCell, {
372
+ ...reactAria.mergeProps(buttonProps, focusProps),
373
+ ref: forwardRef,
374
+ "data-selected": isSelected ? "" : void 0,
375
+ "data-selection-start": isRoundedLeft ? "" : void 0,
376
+ "data-selection-end": isRoundedRight ? "" : void 0,
377
+ "data-disabled": isDisabled ? "" : void 0,
378
+ "data-hidden": isOutsideMonth ? "" : void 0
379
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledCellContent, {
380
+ "data-selected-middle": isSelected && !(isSelectionStart || isSelectionEnd) ? "" : void 0,
381
+ "data-selection": isSelectionStart || isSelectionEnd ? "" : void 0,
382
+ "data-disabled": isDisabled ? "" : void 0,
383
+ "data-today": date.isToday(date$1, date.getLocalTimeZone()) ? "" : void 0,
384
+ "data-weekend": isWeekendDay ? "" : void 0
385
+ }, formattedDate)));
386
+ }
387
+ );
388
+
389
+ const StyledGrid = designSystemStitches.styled(designSystemPrimitive.Primitive.table, {
390
+ borderCollapse: "separate",
391
+ borderSpacing: " 0 $50"
392
+ });
393
+ const StyledDays = designSystemStitches.styled(designSystemPrimitive.Primitive.th, {
394
+ square: "36px",
395
+ color: "$text-neutrals"
396
+ });
397
+
398
+ const Grid = React__default["default"].forwardRef(
399
+ (props, forwardRef) => {
400
+ const { locale } = reactAria.useLocale();
401
+ const { state, offset = {} } = props;
402
+ const startDate = state.visibleRange.start.add(offset);
403
+ const { gridProps, headerProps, weekDays } = reactAria.useCalendarGrid(
404
+ props,
405
+ state
406
+ );
407
+ const weeksInMonth = date.getWeeksInMonth(startDate, locale);
408
+ return /* @__PURE__ */ React__default["default"].createElement(StyledGrid, {
409
+ ref: forwardRef,
410
+ ...gridProps,
411
+ cellPadding: "0"
412
+ }, /* @__PURE__ */ React__default["default"].createElement("thead", {
413
+ ...headerProps
414
+ }, /* @__PURE__ */ React__default["default"].createElement("tr", null, weekDays.map((day, i) => /* @__PURE__ */ React__default["default"].createElement(StyledDays, {
415
+ key: i
416
+ }, /* @__PURE__ */ React__default["default"].createElement("div", null, day))))), /* @__PURE__ */ React__default["default"].createElement("tbody", null, Array.from(Array(weeksInMonth).keys()).map((weekIndex) => /* @__PURE__ */ React__default["default"].createElement("tr", {
417
+ key: weekIndex
418
+ }, state.getDatesInWeek(weekIndex, startDate).map(
419
+ (date, i) => date !== null ? /* @__PURE__ */ React__default["default"].createElement(Cell, {
420
+ key: i,
421
+ state,
422
+ date,
423
+ currentMonth: startDate
424
+ }) : /* @__PURE__ */ React__default["default"].createElement("td", {
425
+ key: i
426
+ })
427
+ )))));
428
+ }
429
+ );
430
+
431
+ const RangePicker = React__default["default"].forwardRef((props, forwardRef) => {
432
+ const {
433
+ predefinedRanges,
434
+ minDate,
435
+ maxDate,
436
+ visibleMonths,
437
+ clearString,
438
+ children,
439
+ defaultOpen,
440
+ onClear
441
+ } = props;
442
+ const state = reactStately.useDateRangePickerState(
443
+ props
444
+ );
445
+ const ref = React.useRef(null);
446
+ const { locale } = reactAria.useLocale();
447
+ const { groupProps, startFieldProps, endFieldProps, buttonProps } = reactAria.useDateRangePicker(
448
+ {
449
+ ...props,
450
+ isOpen: defaultOpen
451
+ },
452
+ state,
453
+ ref
454
+ );
455
+ const change = (value) => {
456
+ state.setValue(value);
457
+ state.close();
458
+ };
459
+ const rangeState = reactStately.useRangeCalendarState({
460
+ ...props,
461
+ visibleDuration: visibleMonths,
462
+ minValue: minDate,
463
+ maxValue: maxDate,
464
+ autoFocus: true,
465
+ onFocusChange: focus,
466
+ onChange: change,
467
+ locale,
468
+ createCalendar: date.createCalendar
469
+ });
470
+ const { calendarProps, prevButtonProps, nextButtonProps } = reactAria.useRangeCalendar(
471
+ props,
472
+ rangeState,
473
+ ref
474
+ );
475
+ const rangeClick = React.useCallback(
476
+ (selectedRange) => {
477
+ if (selectedRange.range !== void 0) {
478
+ state.setValue(selectedRange.range);
479
+ rangeState.setValue(selectedRange.range);
480
+ }
481
+ },
482
+ [rangeState, state]
483
+ );
484
+ const clear = () => {
485
+ state.setValue({ start: null, end: null });
486
+ if (onClear !== void 0) {
487
+ onClear();
488
+ state.close();
489
+ }
490
+ };
491
+ const refs = designSystemUtils.mergeRefs([ref, forwardRef]);
492
+ return /* @__PURE__ */ React__default["default"].createElement(StyledRangePicker, {
493
+ ref: refs
494
+ }, children === void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledRangePickerInput$1, {
495
+ ...groupProps,
496
+ ref
497
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledRangePickerInputContent$1, null, /* @__PURE__ */ React__default["default"].createElement(TextField, {
498
+ ...startFieldProps
499
+ }), /* @__PURE__ */ React__default["default"].createElement("span", {
500
+ "aria-hidden": "true"
501
+ }, "\u2013"), /* @__PURE__ */ React__default["default"].createElement(TextField, {
502
+ ...endFieldProps
503
+ }), /* @__PURE__ */ React__default["default"].createElement(designSystemFlex.Flex, {
504
+ css: { marginLeft: "auto" }
505
+ }, /* @__PURE__ */ React__default["default"].createElement(FieldButton, {
506
+ ...buttonProps
507
+ }, /* @__PURE__ */ React__default["default"].createElement(designSystemIcons.IconCalendarBlank, null))))), children !== null && /* @__PURE__ */ React__default["default"].createElement("div", {
508
+ ...groupProps,
509
+ ref
510
+ }, /* @__PURE__ */ React__default["default"].createElement(FieldButton, {
511
+ ...buttonProps,
512
+ customButton: true
513
+ }, children)), state.isOpen && /* @__PURE__ */ React__default["default"].createElement(Popover, {
514
+ triggerRef: ref,
515
+ state,
516
+ placement: "bottom start"
517
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledBody, {
518
+ ref: refs
519
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledBodyContent, null, predefinedRanges !== void 0 && /* @__PURE__ */ React__default["default"].createElement(PredefinedRanges, {
520
+ range: predefinedRanges,
521
+ onClick: rangeClick
522
+ }), /* @__PURE__ */ React__default["default"].createElement(designSystemFlex.Flex, {
523
+ direction: "column",
524
+ ...calendarProps
525
+ }, /* @__PURE__ */ React__default["default"].createElement(Header, {
526
+ state: rangeState,
527
+ prevButtonProps,
528
+ nextButtonProps,
529
+ visibleMonths
530
+ }), /* @__PURE__ */ React__default["default"].createElement(StyledGridContent, null, /* @__PURE__ */ React__default["default"].createElement(StyledBodyContentLeft, null, /* @__PURE__ */ React__default["default"].createElement(Grid, {
531
+ state: rangeState
532
+ })), visibleMonths !== void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledBodyContentRight, null, /* @__PURE__ */ React__default["default"].createElement(Grid, {
533
+ onChange: change,
534
+ state: rangeState,
535
+ offset: { months: 1 }
536
+ }))), onClear !== void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledClearContent, null, /* @__PURE__ */ React__default["default"].createElement(designSystemButton.Button, {
537
+ size: "medium",
538
+ type: "button",
539
+ onClick: clear,
540
+ disabled: rangeState.value === null
541
+ }, clearString)))))));
542
+ });
543
+
544
+ const StyledRangePickerInput = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
545
+ display: "flex",
546
+ alignItems: "center",
547
+ padding: "$100",
548
+ paddingLeft: "$150",
549
+ border: "1px solid $border-neutrals",
550
+ borderRadius: "$50",
551
+ background: "$background-neutrals",
552
+ color: "$text-neutrals",
553
+ minWidth: "230px",
554
+ "&:hover": {
555
+ border: "1px solid $border-primary-hover",
556
+ cursor: "pointer"
557
+ }
558
+ });
559
+ const StyledRangePickerInputContent = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
560
+ display: "flex",
561
+ alignItems: "center",
562
+ fontSize: "$200",
563
+ lineHeight: "24px",
564
+ width: "100%"
565
+ });
566
+ const StyledDatePicker = designSystemStitches.styled(designSystemPrimitive.Primitive.div, {
567
+ display: "inline-block"
568
+ });
569
+
570
+ const DatePickerBody = React__default["default"].forwardRef((props, forwardRef) => {
571
+ const {
572
+ predefinedRanges,
573
+ visibleMonths,
574
+ onClear,
575
+ minDate,
576
+ maxDate,
577
+ clearString
578
+ } = props;
579
+ const { locale } = reactAria.useLocale();
580
+ const state = reactStately.useCalendarState({
581
+ ...props,
582
+ visibleDuration: visibleMonths,
583
+ minValue: minDate,
584
+ maxValue: maxDate,
585
+ locale,
586
+ createCalendar: date.createCalendar
587
+ });
588
+ const ref = React.useRef(null);
589
+ const { calendarProps, prevButtonProps, nextButtonProps } = reactAria.useCalendar(
590
+ props,
591
+ state
592
+ );
593
+ const dateClick = React.useCallback(
594
+ (selectedRange) => {
595
+ if (selectedRange.date !== void 0)
596
+ state.setValue(selectedRange.date);
597
+ },
598
+ [state]
599
+ );
600
+ const refs = designSystemUtils.mergeRefs([ref, forwardRef]);
601
+ return /* @__PURE__ */ React__default["default"].createElement(StyledBody, {
602
+ ref: refs
603
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledBodyContent, {
604
+ ...calendarProps
605
+ }, predefinedRanges !== void 0 && /* @__PURE__ */ React__default["default"].createElement(PredefinedRanges, {
606
+ range: predefinedRanges,
607
+ onClick: dateClick
608
+ }), /* @__PURE__ */ React__default["default"].createElement(designSystem.Flex, {
609
+ direction: "column"
610
+ }, /* @__PURE__ */ React__default["default"].createElement(Header, {
611
+ state,
612
+ prevButtonProps,
613
+ nextButtonProps,
614
+ visibleMonths
615
+ }), /* @__PURE__ */ React__default["default"].createElement(StyledGridContent, null, /* @__PURE__ */ React__default["default"].createElement(StyledBodyContentLeft, null, /* @__PURE__ */ React__default["default"].createElement(Grid, {
616
+ state
617
+ })), visibleMonths !== void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledBodyContentRight, null, /* @__PURE__ */ React__default["default"].createElement(Grid, {
618
+ state,
619
+ offset: { months: 1 }
620
+ }))), onClear !== void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledClearContent, null, /* @__PURE__ */ React__default["default"].createElement(designSystemButton.Button, {
621
+ size: "medium",
622
+ onClick: onClear,
623
+ disabled: state.value === null
624
+ }, clearString)))));
625
+ });
626
+
627
+ const DatePicker = React__default["default"].forwardRef((props, forwardRef) => {
628
+ const {
629
+ picker,
630
+ predefinedRanges,
631
+ visibleMonths,
632
+ defaultValue,
633
+ minDate,
634
+ maxDate,
635
+ children,
636
+ clearString,
637
+ defaultOpen,
638
+ onClear
639
+ } = props;
640
+ const ref = React.useRef(null);
641
+ const refs = designSystem.mergeRefs([ref, forwardRef]);
642
+ const state = reactStately.useDatePickerState(props);
643
+ const { groupProps, fieldProps, buttonProps, calendarProps } = reactAria.useDatePicker(
644
+ { ...props, isOpen: defaultOpen },
645
+ state,
646
+ ref
647
+ );
648
+ const clearState = () => {
649
+ state.setValue(null);
650
+ if (onClear !== void 0) {
651
+ onClear();
652
+ }
653
+ };
654
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, picker === "single" ? /* @__PURE__ */ React__default["default"].createElement(StyledDatePicker, {
655
+ ref: refs
656
+ }, children === void 0 && /* @__PURE__ */ React__default["default"].createElement(StyledRangePickerInput, {
657
+ ...groupProps,
658
+ ref
659
+ }, /* @__PURE__ */ React__default["default"].createElement(StyledRangePickerInputContent, null, /* @__PURE__ */ React__default["default"].createElement(TextField, {
660
+ ...fieldProps
661
+ }), /* @__PURE__ */ React__default["default"].createElement(designSystemFlex.Flex, {
662
+ css: { marginLeft: "auto" }
663
+ }, /* @__PURE__ */ React__default["default"].createElement(FieldButton, {
664
+ ...buttonProps
665
+ }, /* @__PURE__ */ React__default["default"].createElement(designSystemIcons.IconCalendarBlank, null))))), children !== void 0 && /* @__PURE__ */ React__default["default"].createElement("div", {
666
+ ...groupProps,
667
+ ref
668
+ }, /* @__PURE__ */ React__default["default"].createElement(FieldButton, {
669
+ ...buttonProps,
670
+ customButton: true
671
+ }, children)), state.isOpen && /* @__PURE__ */ React__default["default"].createElement(Popover, {
672
+ triggerRef: ref,
673
+ state,
674
+ placement: "bottom start"
675
+ }, /* @__PURE__ */ React__default["default"].createElement(DatePickerBody, {
676
+ ...calendarProps,
677
+ defaultValue,
678
+ predefinedRanges,
679
+ visibleMonths,
680
+ onClear: clearState,
681
+ minDate,
682
+ maxDate,
683
+ clearString
684
+ }))) : /* @__PURE__ */ React__default["default"].createElement(DatePickerBody, {
685
+ ...calendarProps,
686
+ defaultValue,
687
+ predefinedRanges,
688
+ visibleMonths,
689
+ onClear: onClear !== void 0 ? clearState : void 0,
690
+ minDate,
691
+ maxDate,
692
+ clearString: onClear !== void 0 ? clearString : void 0
693
+ }));
694
+ });
695
+
696
+ const StyledCalendar = designSystemStitches.styled(designSystem.Primitive.div, {});
697
+ const Calendar = React__default["default"].forwardRef(({ picker, defaultValue, ...props }, forwardRef) => /* @__PURE__ */ React__default["default"].createElement(StyledCalendar, {
698
+ ref: forwardRef
699
+ }, picker === "range" ? /* @__PURE__ */ React__default["default"].createElement(RangePicker, {
700
+ defaultValue,
701
+ ...props
702
+ }) : /* @__PURE__ */ React__default["default"].createElement(DatePicker, {
703
+ defaultValue,
704
+ ...props,
705
+ picker
706
+ })));
707
+
708
+ exports.Calendar = Calendar;
709
+ //# sourceMappingURL=main.js.map