@frontify/fondue 12.0.0-beta.346 → 12.0.0-beta.347
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.
|
@@ -5,103 +5,103 @@ import { forwardRef as _, useState as F } from "react";
|
|
|
5
5
|
import G from "react-datepicker";
|
|
6
6
|
import "./DatePicker.css.es.js";
|
|
7
7
|
import { DatePickerTrigger as H } from "./DatePickerTrigger.es.js";
|
|
8
|
-
import { Validation as
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
8
|
+
import { Validation as K } from "../../utilities/validation.es.js";
|
|
9
|
+
import V from "../../foundation/Icon/Generated/IconCaretLeftDouble.es.js";
|
|
10
|
+
import Y from "../../foundation/Icon/Generated/IconCaretLeft.es.js";
|
|
11
|
+
import $ from "../../foundation/Icon/Generated/IconCaretRight.es.js";
|
|
12
|
+
import q from "../../foundation/Icon/Generated/IconCaretRightDouble.es.js";
|
|
13
13
|
import { Button as i } from "../Button/Button.es.js";
|
|
14
|
-
import { ButtonStyle as
|
|
15
|
-
const
|
|
14
|
+
import { ButtonStyle as o, ButtonSize as s, ButtonEmphasis as n } from "../Button/ButtonTypes.es.js";
|
|
15
|
+
const J = 40, Q = (d, a) => d === "single" ? a < /* @__PURE__ */ new Date() ? "past-date" : "future-date" : "range-day", U = _(
|
|
16
16
|
({
|
|
17
17
|
placeHolder: d = "Select a date",
|
|
18
18
|
isClearable: a,
|
|
19
|
-
shouldCloseOnSelect:
|
|
19
|
+
shouldCloseOnSelect: C,
|
|
20
20
|
onChange: u,
|
|
21
21
|
onOpen: l,
|
|
22
22
|
onClose: m,
|
|
23
|
-
onBlur:
|
|
24
|
-
onKeyDown:
|
|
25
|
-
dateFormat:
|
|
26
|
-
value:
|
|
27
|
-
startDate:
|
|
28
|
-
endDate:
|
|
29
|
-
minDate:
|
|
30
|
-
maxDate:
|
|
31
|
-
validation:
|
|
32
|
-
customTrigger:
|
|
33
|
-
customHeader:
|
|
34
|
-
children:
|
|
35
|
-
hasPopperArrow:
|
|
36
|
-
preventOpenOnFocus:
|
|
37
|
-
filterDate:
|
|
23
|
+
onBlur: k,
|
|
24
|
+
onKeyDown: z,
|
|
25
|
+
dateFormat: M = "MMM dd, yyyy",
|
|
26
|
+
value: x,
|
|
27
|
+
startDate: S,
|
|
28
|
+
endDate: I,
|
|
29
|
+
minDate: N,
|
|
30
|
+
maxDate: R,
|
|
31
|
+
validation: b = K.Default,
|
|
32
|
+
customTrigger: P,
|
|
33
|
+
customHeader: W,
|
|
34
|
+
children: B,
|
|
35
|
+
hasPopperArrow: O = !0,
|
|
36
|
+
preventOpenOnFocus: j = !1,
|
|
37
|
+
filterDate: v = () => !0,
|
|
38
38
|
variant: w = "single",
|
|
39
39
|
"data-test-id": A = "date-picker"
|
|
40
|
-
},
|
|
41
|
-
const [
|
|
40
|
+
}, E) => {
|
|
41
|
+
const [h, g] = F(!1);
|
|
42
42
|
return /* @__PURE__ */ e("div", { "data-test-id": A, children: /* @__PURE__ */ e(
|
|
43
43
|
G,
|
|
44
44
|
{
|
|
45
45
|
calendarClassName: "tw-rounded-sm tw-border tw-border-line-x-strong react-datepicker-wrap",
|
|
46
|
-
selected:
|
|
47
|
-
startDate:
|
|
48
|
-
endDate:
|
|
49
|
-
minDate:
|
|
50
|
-
maxDate:
|
|
46
|
+
selected: x,
|
|
47
|
+
startDate: S,
|
|
48
|
+
endDate: I,
|
|
49
|
+
minDate: N,
|
|
50
|
+
maxDate: R,
|
|
51
51
|
calendarStartDay: 1,
|
|
52
52
|
onChange: u,
|
|
53
|
-
onKeyDown:
|
|
54
|
-
onBlur:
|
|
53
|
+
onKeyDown: h ? void 0 : z,
|
|
54
|
+
onBlur: k,
|
|
55
55
|
selectsRange: w === "range",
|
|
56
|
-
showPopperArrow:
|
|
57
|
-
preventOpenOnFocus:
|
|
58
|
-
filterDate:
|
|
59
|
-
customInput:
|
|
56
|
+
showPopperArrow: O,
|
|
57
|
+
preventOpenOnFocus: j,
|
|
58
|
+
filterDate: v,
|
|
59
|
+
customInput: P ?? /* @__PURE__ */ e(
|
|
60
60
|
H,
|
|
61
61
|
{
|
|
62
|
-
isCalendarOpen:
|
|
62
|
+
isCalendarOpen: h,
|
|
63
63
|
isClearable: a,
|
|
64
64
|
placeHolder: d,
|
|
65
|
-
validation:
|
|
65
|
+
validation: b,
|
|
66
66
|
onDateChanged: u
|
|
67
67
|
}
|
|
68
68
|
),
|
|
69
|
-
ref:
|
|
69
|
+
ref: E,
|
|
70
70
|
formatWeekDay: (t) => t.slice(0, 1),
|
|
71
71
|
isClearable: a,
|
|
72
|
-
dateFormat:
|
|
72
|
+
dateFormat: M,
|
|
73
73
|
onCalendarClose: () => {
|
|
74
|
-
|
|
74
|
+
g(!1), m == null || m();
|
|
75
75
|
},
|
|
76
76
|
onCalendarOpen: () => {
|
|
77
|
-
|
|
77
|
+
g(!0), l == null || l();
|
|
78
78
|
},
|
|
79
|
-
shouldCloseOnSelect:
|
|
79
|
+
shouldCloseOnSelect: C,
|
|
80
80
|
dayClassName: (t) => Q(w, t),
|
|
81
81
|
popperProps: {
|
|
82
82
|
strategy: "fixed"
|
|
83
83
|
},
|
|
84
|
-
renderCustomHeader: ({ date: t, decreaseMonth: c, increaseMonth: p, increaseYear:
|
|
85
|
-
|
|
84
|
+
renderCustomHeader: ({ date: t, decreaseMonth: c, increaseMonth: p, increaseYear: D, decreaseYear: y }) => /* @__PURE__ */ f("div", { className: "tw-flex tw-flex-col tw-gap-3", children: [
|
|
85
|
+
W,
|
|
86
86
|
/* @__PURE__ */ f("div", { className: "tw-flex tw-justify-between tw-pb-4 tw-px-0", children: [
|
|
87
87
|
/* @__PURE__ */ e(
|
|
88
88
|
i,
|
|
89
89
|
{
|
|
90
|
-
style:
|
|
91
|
-
size:
|
|
92
|
-
onClick:
|
|
90
|
+
style: o.Default,
|
|
91
|
+
size: s.Medium,
|
|
92
|
+
onClick: y,
|
|
93
93
|
emphasis: n.Weak,
|
|
94
|
-
icon: /* @__PURE__ */ e(
|
|
94
|
+
icon: /* @__PURE__ */ e(V, { size: r.Size20 })
|
|
95
95
|
}
|
|
96
96
|
),
|
|
97
97
|
/* @__PURE__ */ e(
|
|
98
98
|
i,
|
|
99
99
|
{
|
|
100
|
-
style:
|
|
101
|
-
size:
|
|
100
|
+
style: o.Default,
|
|
101
|
+
size: s.Medium,
|
|
102
102
|
onClick: c,
|
|
103
103
|
emphasis: n.Weak,
|
|
104
|
-
icon: /* @__PURE__ */ e(
|
|
104
|
+
icon: /* @__PURE__ */ e(Y, { size: r.Size20 })
|
|
105
105
|
}
|
|
106
106
|
),
|
|
107
107
|
/* @__PURE__ */ f("p", { className: "tw-font-sans tw-font-semibold tw-grow tw-self-center", children: [
|
|
@@ -112,21 +112,21 @@ const K = 40, Q = (d, a) => d === "single" ? a < /* @__PURE__ */ new Date() ? "p
|
|
|
112
112
|
/* @__PURE__ */ e(
|
|
113
113
|
i,
|
|
114
114
|
{
|
|
115
|
-
style:
|
|
116
|
-
size:
|
|
115
|
+
style: o.Default,
|
|
116
|
+
size: s.Medium,
|
|
117
117
|
onClick: p,
|
|
118
118
|
emphasis: n.Weak,
|
|
119
|
-
icon: /* @__PURE__ */ e(
|
|
119
|
+
icon: /* @__PURE__ */ e($, { size: r.Size20 })
|
|
120
120
|
}
|
|
121
121
|
),
|
|
122
122
|
/* @__PURE__ */ e(
|
|
123
123
|
i,
|
|
124
124
|
{
|
|
125
|
-
style:
|
|
126
|
-
size:
|
|
127
|
-
onClick:
|
|
125
|
+
style: o.Default,
|
|
126
|
+
size: s.Medium,
|
|
127
|
+
onClick: D,
|
|
128
128
|
emphasis: n.Weak,
|
|
129
|
-
icon: /* @__PURE__ */ e(
|
|
129
|
+
icon: /* @__PURE__ */ e(q, { size: r.Size20 })
|
|
130
130
|
}
|
|
131
131
|
)
|
|
132
132
|
] })
|
|
@@ -136,12 +136,12 @@ const K = 40, Q = (d, a) => d === "single" ? a < /* @__PURE__ */ new Date() ? "p
|
|
|
136
136
|
name: "arrow",
|
|
137
137
|
options: {
|
|
138
138
|
padding: ({ popper: t, reference: c, placement: p }) => ({
|
|
139
|
-
[`${p.includes("end") ? "left" : "right"}`]: Math.max(t.width, Math.min(t.width, c.width)) -
|
|
139
|
+
[`${p.includes("end") ? "left" : "right"}`]: Math.max(t.width, Math.min(t.width, c.width)) - J
|
|
140
140
|
})
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
],
|
|
144
|
-
children:
|
|
144
|
+
children: B
|
|
145
145
|
}
|
|
146
146
|
) });
|
|
147
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.es.js","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Button, ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button';\nimport { IconSize } from '@foundation/Icon/IconSize';\nimport { format, getYear } from 'date-fns';\nimport { KeyboardEvent, ReactNode, forwardRef, useState } from 'react';\nimport DatepickerComponent, { ReactDatePicker } from 'react-datepicker';\nimport './DatePicker.css';\nimport { DatePickerTrigger } from './DatePickerTrigger';\nimport { IconCaretLeft, IconCaretLeftDouble, IconCaretRight, IconCaretRightDouble } from '@foundation/Icon/Generated';\nimport { Validation } from '@utilities/validation';\n\nconst ARROW_PADDING_CORRECTION = 40;\n\ntype SingleDatePickerProps = {\n variant?: 'single';\n onChange: (date: Date | null) => void;\n startDate?: null;\n endDate?: null;\n};\n\ntype RangeDatePickerProps = {\n variant: 'range';\n onChange: (date: [Date | null, Date | null] | null) => void;\n startDate: Date | null;\n endDate: Date | null;\n};\n\nexport type DatePickerProps = {\n placeHolder?: string;\n isClearable?: boolean;\n shouldCloseOnSelect?: boolean;\n dateFormat?: string;\n /** @description when the variant is of type 'range', the value should be the startDate */\n value?: Date | null;\n minDate?: Date;\n maxDate?: Date;\n validation?: Validation;\n customTrigger?: ReactNode;\n customHeader?: ReactNode;\n children?: ReactNode;\n hasPopperArrow?: boolean;\n preventOpenOnFocus?: boolean;\n filterDate?: (date: Date) => boolean;\n onOpen?: () => void;\n onClose?: () => void;\n onBlur?: () => void;\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n 'data-test-id'?: string;\n} & (SingleDatePickerProps | RangeDatePickerProps);\n\nconst getDayClasses = (variant: DatePickerProps['variant'], date: Date) => {\n if (variant === 'single') {\n return date < new Date() ? 'past-date' : 'future-date';\n }\n return 'range-day';\n};\n\nexport type ReactDatePickerRef = ReactDatePicker<never, boolean>;\n\nexport const DatePicker = forwardRef<ReactDatePicker<never, boolean>, DatePickerProps>(\n (\n {\n placeHolder = 'Select a date',\n isClearable,\n shouldCloseOnSelect,\n onChange,\n onOpen,\n onClose,\n onBlur,\n onKeyDown,\n dateFormat = 'MMM dd, yyyy',\n value,\n startDate,\n endDate,\n minDate,\n maxDate,\n validation = Validation.Default,\n customTrigger,\n customHeader,\n children,\n hasPopperArrow = true,\n preventOpenOnFocus = false,\n filterDate = () => true,\n variant = 'single',\n 'data-test-id': dataTestId = 'date-picker',\n },\n ref,\n ) => {\n const [isCalendarOpen, setIsCalendarOpen] = useState<boolean>(false);\n\n const handleOpen = () => {\n setIsCalendarOpen(true);\n onOpen?.();\n };\n\n const handleClose = () => {\n setIsCalendarOpen(false);\n onClose?.();\n };\n\n return (\n <div data-test-id={dataTestId}>\n <DatepickerComponent\n calendarClassName=\"tw-rounded-sm tw-border tw-border-line-x-strong react-datepicker-wrap\"\n selected={value}\n startDate={startDate}\n endDate={endDate}\n minDate={minDate}\n maxDate={maxDate}\n calendarStartDay={1}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n selectsRange={variant === 'range'}\n showPopperArrow={hasPopperArrow}\n preventOpenOnFocus={preventOpenOnFocus}\n filterDate={filterDate}\n customInput={\n customTrigger ?? (\n <DatePickerTrigger\n isCalendarOpen={isCalendarOpen}\n isClearable={isClearable}\n placeHolder={placeHolder}\n validation={validation}\n onDateChanged={onChange}\n />\n )\n }\n ref={ref}\n formatWeekDay={(day) => day.slice(0, 1)}\n isClearable={isClearable}\n dateFormat={dateFormat}\n onCalendarClose={handleClose}\n onCalendarOpen={handleOpen}\n shouldCloseOnSelect={shouldCloseOnSelect}\n dayClassName={(date) => getDayClasses(variant, date)}\n popperProps={{\n strategy: 'fixed',\n }}\n renderCustomHeader={({ date, decreaseMonth, increaseMonth, increaseYear, decreaseYear }) => (\n <div className=\"tw-flex tw-flex-col tw-gap-3\">\n {customHeader}\n <div className=\"tw-flex tw-justify-between tw-pb-4 tw-px-0\">\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeftDouble size={IconSize.Size20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeft size={IconSize.Size20} />}\n />\n <p className=\"tw-font-sans tw-font-semibold tw-grow tw-self-center\">\n {format(date, 'MMMM')} {getYear(date)}\n </p>\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRight size={IconSize.Size20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRightDouble size={IconSize.Size20} />}\n />\n </div>\n </div>\n )}\n popperModifiers={[\n {\n name: 'arrow',\n options: {\n padding: ({ popper, reference, placement }) => {\n const side = placement.includes('end') ? 'left' : 'right';\n const padding = {\n [`${side}`]:\n Math.max(popper.width, Math.min(popper.width, reference.width)) -\n ARROW_PADDING_CORRECTION,\n };\n\n return padding;\n },\n },\n },\n ]}\n >\n {children}\n </DatepickerComponent>\n </div>\n );\n },\n);\n\nDatePicker.displayName = 'FondueDatePicker';\n"],"names":["ARROW_PADDING_CORRECTION","getDayClasses","variant","date","DatePicker","forwardRef","placeHolder","isClearable","shouldCloseOnSelect","onChange","onOpen","onClose","onBlur","onKeyDown","dateFormat","value","startDate","endDate","minDate","maxDate","validation","Validation","customTrigger","customHeader","children","hasPopperArrow","preventOpenOnFocus","filterDate","dataTestId","ref","isCalendarOpen","setIsCalendarOpen","useState","jsx","DatepickerComponent","DatePickerTrigger","day","decreaseMonth","increaseMonth","increaseYear","decreaseYear","jsxs","Button","ButtonStyle","ButtonSize","ButtonEmphasis","IconCaretLeftDouble","IconSize","IconCaretLeft","format","getYear","IconCaretRight","IconCaretRightDouble","popper","reference","placement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker.es.js","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Button, ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button';\nimport { IconSize } from '@foundation/Icon/IconSize';\nimport { format, getYear } from 'date-fns';\nimport { KeyboardEvent, ReactNode, forwardRef, useState } from 'react';\nimport DatepickerComponent, { ReactDatePicker } from 'react-datepicker';\nimport './DatePicker.css';\nimport { DatePickerTrigger } from './DatePickerTrigger';\nimport { IconCaretLeft, IconCaretLeftDouble, IconCaretRight, IconCaretRightDouble } from '@foundation/Icon/Generated';\nimport { Validation } from '@utilities/validation';\n\nconst ARROW_PADDING_CORRECTION = 40;\n\ntype SingleDatePickerProps = {\n variant?: 'single';\n onChange: (date: Date | null) => void;\n startDate?: null;\n endDate?: null;\n};\n\ntype RangeDatePickerProps = {\n variant: 'range';\n onChange: (date: [Date | null, Date | null] | null) => void;\n startDate: Date | null;\n endDate: Date | null;\n};\n\nexport type DatePickerProps = {\n placeHolder?: string;\n isClearable?: boolean;\n shouldCloseOnSelect?: boolean;\n dateFormat?: string;\n /** @description when the variant is of type 'range', the value should be the startDate */\n value?: Date | null;\n minDate?: Date;\n maxDate?: Date;\n validation?: Validation;\n customTrigger?: ReactNode;\n customHeader?: ReactNode;\n children?: ReactNode;\n hasPopperArrow?: boolean;\n preventOpenOnFocus?: boolean;\n filterDate?: (date: Date) => boolean;\n onOpen?: () => void;\n onClose?: () => void;\n onBlur?: () => void;\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n 'data-test-id'?: string;\n} & (SingleDatePickerProps | RangeDatePickerProps);\n\nconst getDayClasses = (variant: DatePickerProps['variant'], date: Date) => {\n if (variant === 'single') {\n return date < new Date() ? 'past-date' : 'future-date';\n }\n return 'range-day';\n};\n\nexport type ReactDatePickerRef = ReactDatePicker<never, boolean>;\n\nexport const DatePicker = forwardRef<ReactDatePicker<never, boolean>, DatePickerProps>(\n (\n {\n placeHolder = 'Select a date',\n isClearable,\n shouldCloseOnSelect,\n onChange,\n onOpen,\n onClose,\n onBlur,\n onKeyDown,\n dateFormat = 'MMM dd, yyyy',\n value,\n startDate,\n endDate,\n minDate,\n maxDate,\n validation = Validation.Default,\n customTrigger,\n customHeader,\n children,\n hasPopperArrow = true,\n preventOpenOnFocus = false,\n filterDate = () => true,\n variant = 'single',\n 'data-test-id': dataTestId = 'date-picker',\n },\n ref,\n ) => {\n const [isCalendarOpen, setIsCalendarOpen] = useState<boolean>(false);\n\n const handleOpen = () => {\n setIsCalendarOpen(true);\n onOpen?.();\n };\n\n const handleClose = () => {\n setIsCalendarOpen(false);\n onClose?.();\n };\n\n return (\n <div data-test-id={dataTestId}>\n <DatepickerComponent\n calendarClassName=\"tw-rounded-sm tw-border tw-border-line-x-strong react-datepicker-wrap\"\n selected={value}\n startDate={startDate}\n endDate={endDate}\n minDate={minDate}\n maxDate={maxDate}\n calendarStartDay={1}\n onChange={onChange}\n onKeyDown={isCalendarOpen ? undefined : onKeyDown}\n onBlur={onBlur}\n selectsRange={variant === 'range'}\n showPopperArrow={hasPopperArrow}\n preventOpenOnFocus={preventOpenOnFocus}\n filterDate={filterDate}\n customInput={\n customTrigger ?? (\n <DatePickerTrigger\n isCalendarOpen={isCalendarOpen}\n isClearable={isClearable}\n placeHolder={placeHolder}\n validation={validation}\n onDateChanged={onChange}\n />\n )\n }\n ref={ref}\n formatWeekDay={(day) => day.slice(0, 1)}\n isClearable={isClearable}\n dateFormat={dateFormat}\n onCalendarClose={handleClose}\n onCalendarOpen={handleOpen}\n shouldCloseOnSelect={shouldCloseOnSelect}\n dayClassName={(date) => getDayClasses(variant, date)}\n popperProps={{\n strategy: 'fixed',\n }}\n renderCustomHeader={({ date, decreaseMonth, increaseMonth, increaseYear, decreaseYear }) => (\n <div className=\"tw-flex tw-flex-col tw-gap-3\">\n {customHeader}\n <div className=\"tw-flex tw-justify-between tw-pb-4 tw-px-0\">\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeftDouble size={IconSize.Size20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeft size={IconSize.Size20} />}\n />\n <p className=\"tw-font-sans tw-font-semibold tw-grow tw-self-center\">\n {format(date, 'MMMM')} {getYear(date)}\n </p>\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRight size={IconSize.Size20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRightDouble size={IconSize.Size20} />}\n />\n </div>\n </div>\n )}\n popperModifiers={[\n {\n name: 'arrow',\n options: {\n padding: ({ popper, reference, placement }) => {\n const side = placement.includes('end') ? 'left' : 'right';\n const padding = {\n [`${side}`]:\n Math.max(popper.width, Math.min(popper.width, reference.width)) -\n ARROW_PADDING_CORRECTION,\n };\n\n return padding;\n },\n },\n },\n ]}\n >\n {children}\n </DatepickerComponent>\n </div>\n );\n },\n);\n\nDatePicker.displayName = 'FondueDatePicker';\n"],"names":["ARROW_PADDING_CORRECTION","getDayClasses","variant","date","DatePicker","forwardRef","placeHolder","isClearable","shouldCloseOnSelect","onChange","onOpen","onClose","onBlur","onKeyDown","dateFormat","value","startDate","endDate","minDate","maxDate","validation","Validation","customTrigger","customHeader","children","hasPopperArrow","preventOpenOnFocus","filterDate","dataTestId","ref","isCalendarOpen","setIsCalendarOpen","useState","jsx","DatepickerComponent","DatePickerTrigger","day","decreaseMonth","increaseMonth","increaseYear","decreaseYear","jsxs","Button","ButtonStyle","ButtonSize","ButtonEmphasis","IconCaretLeftDouble","IconSize","IconCaretLeft","format","getYear","IconCaretRight","IconCaretRightDouble","popper","reference","placement"],"mappings":"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"}
|