@medusajs/ui 2.0.0 → 2.1.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/cjs/components/button/button.js +8 -8
- package/dist/cjs/components/button/button.js.map +1 -1
- package/dist/cjs/components/calendar/calendar.js +1 -1
- package/dist/cjs/components/calendar/calendar.js.map +1 -1
- package/dist/cjs/components/checkbox/checkbox.js +1 -1
- package/dist/cjs/components/checkbox/checkbox.js.map +1 -1
- package/dist/cjs/components/command-bar/command-bar.js +5 -5
- package/dist/cjs/components/command-bar/command-bar.js.map +1 -1
- package/dist/cjs/components/currency-input/currency-input.js +10 -6
- package/dist/cjs/components/currency-input/currency-input.js.map +1 -1
- package/dist/cjs/components/date-picker/date-picker.js +139 -67
- package/dist/cjs/components/date-picker/date-picker.js.map +1 -1
- package/dist/cjs/components/dropdown-menu/dropdown-menu.js +7 -7
- package/dist/cjs/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/cjs/components/icon-button/icon-button.js +8 -8
- package/dist/cjs/components/icon-button/icon-button.js.map +1 -1
- package/dist/cjs/components/input/input.js +1 -1
- package/dist/cjs/components/input/input.js.map +1 -1
- package/dist/cjs/components/radio-group/radio-group.d.ts +5 -0
- package/dist/cjs/components/radio-group/radio-group.js +25 -4
- package/dist/cjs/components/radio-group/radio-group.js.map +1 -1
- package/dist/cjs/components/select/select.js +3 -7
- package/dist/cjs/components/select/select.js.map +1 -1
- package/dist/cjs/components/table/table.js +3 -4
- package/dist/cjs/components/table/table.js.map +1 -1
- package/dist/cjs/components/text/text.d.ts +1 -0
- package/dist/cjs/components/text/text.js +64 -7
- package/dist/cjs/components/text/text.js.map +1 -1
- package/dist/cjs/components/textarea/textarea.js +1 -1
- package/dist/cjs/components/textarea/textarea.js.map +1 -1
- package/dist/cjs/components/time-input/time-input.js +1 -1
- package/dist/cjs/components/time-input/time-input.js.map +1 -1
- package/dist/esm/components/button/button.js +8 -8
- package/dist/esm/components/button/button.js.map +1 -1
- package/dist/esm/components/calendar/calendar.js +1 -1
- package/dist/esm/components/calendar/calendar.js.map +1 -1
- package/dist/esm/components/checkbox/checkbox.js +1 -1
- package/dist/esm/components/checkbox/checkbox.js.map +1 -1
- package/dist/esm/components/command-bar/command-bar.js +5 -5
- package/dist/esm/components/command-bar/command-bar.js.map +1 -1
- package/dist/esm/components/currency-input/currency-input.js +10 -6
- package/dist/esm/components/currency-input/currency-input.js.map +1 -1
- package/dist/esm/components/date-picker/date-picker.js +139 -67
- package/dist/esm/components/date-picker/date-picker.js.map +1 -1
- package/dist/esm/components/dropdown-menu/dropdown-menu.js +7 -7
- package/dist/esm/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/esm/components/icon-button/icon-button.js +8 -8
- package/dist/esm/components/icon-button/icon-button.js.map +1 -1
- package/dist/esm/components/input/input.js +1 -1
- package/dist/esm/components/input/input.js.map +1 -1
- package/dist/esm/components/radio-group/radio-group.d.ts +5 -0
- package/dist/esm/components/radio-group/radio-group.js +25 -4
- package/dist/esm/components/radio-group/radio-group.js.map +1 -1
- package/dist/esm/components/select/select.js +4 -8
- package/dist/esm/components/select/select.js.map +1 -1
- package/dist/esm/components/table/table.js +3 -4
- package/dist/esm/components/table/table.js.map +1 -1
- package/dist/esm/components/text/text.d.ts +1 -0
- package/dist/esm/components/text/text.js +64 -7
- package/dist/esm/components/text/text.js.map +1 -1
- package/dist/esm/components/textarea/textarea.js +1 -1
- package/dist/esm/components/textarea/textarea.js.map +1 -1
- package/dist/esm/components/time-input/time-input.js +1 -1
- package/dist/esm/components/time-input/time-input.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency-input.js","sourceRoot":"","sources":["../../../../src/components/currency-input/currency-input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAgB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,qBAAqB,GAAG,GAAG,CAC/B,GAAG,CACD,2BAA2B,EAC3B,
|
|
1
|
+
{"version":3,"file":"currency-input.js","sourceRoot":"","sources":["../../../../src/components/currency-input/currency-input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAgB,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,qBAAqB,GAAG,GAAG,CAC/B,GAAG,CACD,2BAA2B,EAC3B,mJAAmJ,EACnJ,qDAAqD,CACtD,EACD;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,4BAA4B;SACpC;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;KACb;CACF,CACF,CAAA;AAYD,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CACpC,CACE,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EACzE,GAAG,EACH,EAAE;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAA;IAErD,KAAK,CAAC,mBAAmB,CACvB,GAAG,EACH,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CACvB,CAAA;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAE9C,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAwC,EAAE,EAAE;QAC3C,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,KAAK,CAAC,CAAA;SACjB;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAA;IAED,OAAO,CACL,6BACE,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;aACzB;QACH,CAAC,EACD,SAAS,EAAE,GAAG,CACZ,oDAAoD,EACpD,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,EAC/B;YACE,+GAA+G,EAC7G,QAAQ;YACV,qDAAqD,EACnD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK;SAClC,EACD,SAAS,CACV;QAED,8BACE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE;gBACtB,UAAU,EAAE,IAAI,KAAK,MAAM;gBAC3B,UAAU,EAAE,IAAI,KAAK,OAAO;aAC7B,CAAC,EACF,IAAI,EAAC,cAAc;YAEnB,oBAAC,IAAI,IACH,SAAS,EAAE,GAAG,CACZ,4DAA4D,EAC5D;oBACE,qBAAqB,EAAE,QAAQ;iBAChC,CACF,IAEA,IAAI,CACA,CACF;QACP,oBAAC,SAAS,IACR,SAAS,EAAC,0GAA0G,EACpH,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,GAAG,EAAE,QAAQ,KACT,KAAK,GACT;QACF,8BACE,SAAS,EAAE,GAAG,CAAC,+BAA+B,EAAE;gBAC9C,UAAU,EAAE,IAAI,KAAK,MAAM;gBAC3B,UAAU,EAAE,IAAI,KAAK,OAAO;aAC7B,CAAC,EACF,IAAI,EAAC,cAAc;YAEnB,oBAAC,IAAI,IACH,SAAS,EAAE,GAAG,CAAC,kDAAkD,EAAE;oBACjE,qBAAqB,EAAE,QAAQ;iBAChC,CAAC,IAED,MAAM,CACF,CACF,CACH,CACP,CAAA;AACH,CAAC,CACF,CAAA;AACD,aAAa,CAAC,WAAW,GAAG,eAAe,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,CAAA","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport Primitive from \"react-currency-input-field\"\n\nimport { Text } from \"@/components/text\"\nimport { clx } from \"@/utils/clx\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nconst currencyInputVariants = cva(\n clx(\n \"flex items-center gap-x-1\",\n \"bg-ui-bg-field hover:bg-ui-bg-field-hover shadow-buttons-neutral placeholder-ui-fg-muted text-ui-fg-base transition-fg relative w-full rounded-md\",\n \"focus-within:shadow-borders-interactive-with-active\"\n ),\n {\n variants: {\n size: {\n base: \"txt-compact-medium h-10 px-3\",\n small: \"txt-compact-small h-8 px-2\",\n },\n },\n defaultVariants: {\n size: \"base\",\n },\n }\n)\n\ninterface CurrencyInputProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof Primitive>,\n \"prefix\" | \"suffix\" | \"size\"\n >,\n VariantProps<typeof currencyInputVariants> {\n symbol: string\n code: string\n}\n\nconst CurrencyInput = React.forwardRef<HTMLInputElement, CurrencyInputProps>(\n (\n { size = \"base\", symbol, code, disabled, onInvalid, className, ...props },\n ref\n ) => {\n const innerRef = React.useRef<HTMLInputElement>(null)\n\n React.useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => innerRef.current\n )\n\n const [valid, setValid] = React.useState(true)\n\n const onInnerInvalid = React.useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n setValid(event.currentTarget.validity.valid)\n\n if (onInvalid) {\n onInvalid(event)\n }\n },\n [onInvalid]\n )\n\n return (\n <div\n onClick={() => {\n if (innerRef.current) {\n innerRef.current.focus()\n }\n }}\n className={clx(\n \"w-full cursor-text justify-between overflow-hidden\",\n currencyInputVariants({ size }),\n {\n \"text-ui-fg-disabled !bg-ui-bg-disabled !shadow-buttons-neutral !placeholder-ui-fg-disabled cursor-not-allowed\":\n disabled,\n \"!shadow-borders-error invalid:!shadow-borders-error\":\n props[\"aria-invalid\"] || !valid,\n },\n className\n )}\n >\n <span\n className={clx(\"w-fit\", {\n \"py-[9px]\": size === \"base\",\n \"py-[5px]\": size === \"small\",\n })}\n role=\"presentation\"\n >\n <Text\n className={clx(\n \"text-ui-fg-muted pointer-events-none select-none uppercase\",\n {\n \"text-ui-fg-disabled\": disabled,\n }\n )}\n >\n {code}\n </Text>\n </span>\n <Primitive\n className=\"h-full min-w-0 flex-1 appearance-none bg-transparent text-right outline-none disabled:cursor-not-allowed\"\n disabled={disabled}\n onInvalid={onInnerInvalid}\n ref={innerRef}\n {...props}\n />\n <span\n className={clx(\"w-fit min-w-[16px] text-right\", {\n \"py-[9px]\": size === \"base\",\n \"py-[5px]\": size === \"small\",\n })}\n role=\"presentation\"\n >\n <Text\n className={clx(\"text-ui-fg-muted pointer-events-none select-none\", {\n \"text-ui-fg-disabled\": disabled,\n })}\n >\n {symbol}\n </Text>\n </span>\n </div>\n )\n }\n)\nCurrencyInput.displayName = \"CurrencyInput\"\n\nexport { CurrencyInput }\n"]}
|
|
@@ -10,11 +10,11 @@ import { TimeInput } from "../time-input";
|
|
|
10
10
|
import { clx } from "../../utils/clx";
|
|
11
11
|
import { isBrowserLocaleClockType24h } from "../../utils/is-browser-locale-hour-cycle-24h";
|
|
12
12
|
import { cva } from "class-variance-authority";
|
|
13
|
-
const displayVariants = cva(clx("text-ui-fg-base bg-ui-bg-field
|
|
13
|
+
const displayVariants = cva(clx("text-ui-fg-base bg-ui-bg-field transition-fg shadow-buttons-neutral flex w-full items-center gap-x-2 rounded-md outline-none", "hover:bg-ui-bg-field-hover", "focus:shadow-borders-interactive-with-active data-[state=open]:shadow-borders-interactive-with-active", "disabled:bg-ui-bg-disabled disabled:text-ui-fg-disabled disabled:shadow-buttons-neutral", "aria-[invalid=true]:!shadow-borders-error"), {
|
|
14
14
|
variants: {
|
|
15
15
|
size: {
|
|
16
|
-
base: "
|
|
17
|
-
small: "
|
|
16
|
+
base: "txt-compact-medium h-10 px-3 py-2.5",
|
|
17
|
+
small: "txt-compact-small h-8 px-2 py-1.5",
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
defaultVariants: {
|
|
@@ -107,12 +107,11 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
|
|
|
107
107
|
const [open, setOpen] = React.useState(false);
|
|
108
108
|
const [date, setDate] = React.useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
|
|
109
109
|
const [month, setMonth] = React.useState(date);
|
|
110
|
-
const time = React.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}, [date]);
|
|
110
|
+
const [time, setTime] = React.useState(value
|
|
111
|
+
? new Time(value.getHours(), value.getMinutes())
|
|
112
|
+
: defaultValue
|
|
113
|
+
? new Time(defaultValue.getHours(), defaultValue.getMinutes())
|
|
114
|
+
: new Time(0, 0));
|
|
116
115
|
const initialDate = React.useMemo(() => {
|
|
117
116
|
return date;
|
|
118
117
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -135,23 +134,57 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
|
|
|
135
134
|
}
|
|
136
135
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
137
136
|
}, [open]);
|
|
138
|
-
const
|
|
137
|
+
const onCancel = () => {
|
|
139
138
|
setDate(initialDate);
|
|
139
|
+
setTime(new Time(0, 0));
|
|
140
140
|
setOpen(false);
|
|
141
141
|
};
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
const onDateChange = (date) => {
|
|
143
|
+
const newDate = date;
|
|
144
|
+
if (showTimePicker) {
|
|
145
|
+
/**
|
|
146
|
+
* If the time is cleared, and the date is
|
|
147
|
+
* changed then we want to reset the time.
|
|
148
|
+
*/
|
|
149
|
+
if (newDate && !time) {
|
|
150
|
+
setTime(new Time(0, 0));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* If the time is set, and the date is changed
|
|
154
|
+
* then we want to update the date with the
|
|
155
|
+
* time.
|
|
156
|
+
*/
|
|
157
|
+
if (newDate && time) {
|
|
158
|
+
newDate.setHours(time.hour);
|
|
159
|
+
newDate.setMinutes(time.minute);
|
|
160
|
+
}
|
|
161
|
+
setDate(newDate);
|
|
162
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newDate);
|
|
163
|
+
}
|
|
145
164
|
};
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
165
|
+
const onTimeChange = (time) => {
|
|
166
|
+
setTime(time);
|
|
167
|
+
if (!date) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const newDate = new Date(date.getTime());
|
|
171
|
+
if (!time) {
|
|
172
|
+
/**
|
|
173
|
+
* When a segment of the time input is cleared,
|
|
174
|
+
* it will return `null` as the value is no longer
|
|
175
|
+
* a valid time. In this case, we want to set the
|
|
176
|
+
* time to for the date, effectivly resetting the
|
|
177
|
+
* input field.
|
|
178
|
+
*/
|
|
179
|
+
newDate.setHours(0);
|
|
180
|
+
newDate.setMinutes(0);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
149
183
|
newDate.setHours(time.hour);
|
|
150
184
|
newDate.setMinutes(time.minute);
|
|
151
|
-
newDate.setSeconds(time.second);
|
|
152
|
-
setDate(newDate);
|
|
153
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(newDate);
|
|
154
185
|
}
|
|
186
|
+
setDate(newDate);
|
|
187
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newDate);
|
|
155
188
|
};
|
|
156
189
|
const formattedDate = React.useMemo(() => {
|
|
157
190
|
if (!date) {
|
|
@@ -166,13 +199,13 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
|
|
|
166
199
|
React.createElement("div", { className: "flex items-start" },
|
|
167
200
|
presets && presets.length > 0 && (React.createElement("div", { className: "relative h-full w-[160px] border-r" },
|
|
168
201
|
React.createElement("div", { className: "absolute inset-0 overflow-y-scroll p-3" },
|
|
169
|
-
React.createElement(PresetContainer, { currentValue: date, presets: presets, onSelect:
|
|
202
|
+
React.createElement(PresetContainer, { currentValue: date, presets: presets, onSelect: onDateChange })))),
|
|
170
203
|
React.createElement("div", null,
|
|
171
|
-
React.createElement(CalendarPrimitive, { mode: "single", month: month, onMonthChange: setMonth, selected: date, onSelect:
|
|
204
|
+
React.createElement(CalendarPrimitive, { mode: "single", month: month, onMonthChange: setMonth, selected: date, onSelect: onDateChange, disabled: disabled, ...props }),
|
|
172
205
|
showTimePicker && (React.createElement("div", { className: "border-ui-border-base border-t p-3" },
|
|
173
|
-
React.createElement(TimeInput, { "aria-label": "Time", onChange:
|
|
206
|
+
React.createElement(TimeInput, { "aria-label": "Time", onChange: onTimeChange, isDisabled: !date, value: time, isRequired: props.required }))),
|
|
174
207
|
React.createElement("div", { className: "border-ui-border-base flex items-center gap-x-2 border-t p-3" },
|
|
175
|
-
React.createElement(Button, { variant: "secondary", className: "w-full", type: "button", onClick:
|
|
208
|
+
React.createElement(Button, { variant: "secondary", className: "w-full", type: "button", onClick: onCancel }, "Cancel"),
|
|
176
209
|
React.createElement(Button, { variant: "primary", className: "w-full", type: "button", onClick: () => setOpen(false) }, "Apply"))))))));
|
|
177
210
|
};
|
|
178
211
|
const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTimePicker, presets, disabled, className, ...props }) => {
|
|
@@ -180,17 +213,16 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
|
|
|
180
213
|
const [open, setOpen] = React.useState(false);
|
|
181
214
|
const [range, setRange] = React.useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
|
|
182
215
|
const [month, setMonth] = React.useState(range === null || range === void 0 ? void 0 : range.from);
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}, [range]);
|
|
216
|
+
const [startTime, setStartTime] = React.useState((value === null || value === void 0 ? void 0 : value.from)
|
|
217
|
+
? new Time(value.from.getHours(), value.from.getMinutes())
|
|
218
|
+
: (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.from)
|
|
219
|
+
? new Time(defaultValue.from.getHours(), defaultValue.from.getMinutes())
|
|
220
|
+
: new Time(0, 0));
|
|
221
|
+
const [endTime, setEndTime] = React.useState((value === null || value === void 0 ? void 0 : value.to)
|
|
222
|
+
? new Time(value.to.getHours(), value.to.getMinutes())
|
|
223
|
+
: (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.to)
|
|
224
|
+
? new Time(defaultValue.to.getHours(), defaultValue.to.getMinutes())
|
|
225
|
+
: new Time(0, 0));
|
|
194
226
|
const initialRange = React.useMemo(() => {
|
|
195
227
|
return range;
|
|
196
228
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -213,15 +245,42 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
|
|
|
213
245
|
}
|
|
214
246
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
215
247
|
}, [open]);
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
248
|
+
const onRangeChange = (range) => {
|
|
249
|
+
const newRange = range;
|
|
250
|
+
if (showTimePicker) {
|
|
251
|
+
if ((newRange === null || newRange === void 0 ? void 0 : newRange.from) && !startTime) {
|
|
252
|
+
setStartTime(new Time(0, 0));
|
|
253
|
+
}
|
|
254
|
+
if ((newRange === null || newRange === void 0 ? void 0 : newRange.to) && !endTime) {
|
|
255
|
+
setEndTime(new Time(0, 0));
|
|
256
|
+
}
|
|
257
|
+
if ((newRange === null || newRange === void 0 ? void 0 : newRange.from) && startTime) {
|
|
258
|
+
newRange.from.setHours(startTime.hour);
|
|
259
|
+
newRange.from.setMinutes(startTime.minute);
|
|
260
|
+
}
|
|
261
|
+
if ((newRange === null || newRange === void 0 ? void 0 : newRange.to) && endTime) {
|
|
262
|
+
newRange.to.setHours(endTime.hour);
|
|
263
|
+
newRange.to.setMinutes(endTime.minute);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
setRange(newRange);
|
|
267
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newRange);
|
|
219
268
|
};
|
|
220
|
-
const
|
|
269
|
+
const onCancel = () => {
|
|
221
270
|
setRange(initialRange);
|
|
271
|
+
setStartTime(new Time(0, 0));
|
|
272
|
+
setEndTime(new Time(0, 0));
|
|
222
273
|
setOpen(false);
|
|
223
274
|
};
|
|
224
|
-
const
|
|
275
|
+
const onTimeChange = (time, pos) => {
|
|
276
|
+
switch (pos) {
|
|
277
|
+
case "start":
|
|
278
|
+
setStartTime(time);
|
|
279
|
+
break;
|
|
280
|
+
case "end":
|
|
281
|
+
setEndTime(time);
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
225
284
|
if (!range) {
|
|
226
285
|
return;
|
|
227
286
|
}
|
|
@@ -230,8 +289,14 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
|
|
|
230
289
|
return;
|
|
231
290
|
}
|
|
232
291
|
const newDate = new Date(range.from.getTime());
|
|
233
|
-
|
|
234
|
-
|
|
292
|
+
if (!time) {
|
|
293
|
+
newDate.setHours(0);
|
|
294
|
+
newDate.setMinutes(0);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
newDate.setHours(time.hour);
|
|
298
|
+
newDate.setMinutes(time.minute);
|
|
299
|
+
}
|
|
235
300
|
setRange({
|
|
236
301
|
...range,
|
|
237
302
|
from: newDate,
|
|
@@ -242,8 +307,14 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
|
|
|
242
307
|
return;
|
|
243
308
|
}
|
|
244
309
|
const newDate = new Date(range.to.getTime());
|
|
245
|
-
|
|
246
|
-
|
|
310
|
+
if (!time) {
|
|
311
|
+
newDate.setHours(0);
|
|
312
|
+
newDate.setMinutes(0);
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
newDate.setHours(time.hour);
|
|
316
|
+
newDate.setMinutes(time.minute);
|
|
317
|
+
}
|
|
247
318
|
setRange({
|
|
248
319
|
...range,
|
|
249
320
|
to: newDate,
|
|
@@ -259,30 +330,31 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
|
|
|
259
330
|
return (React.createElement(Primitives.Root, { open: open, onOpenChange: setOpen },
|
|
260
331
|
React.createElement(Display, { placeholder: "Pick a date", disabled: disabled, className: className, "aria-required": props.required || props["aria-required"], "aria-invalid": props["aria-invalid"], "aria-label": props["aria-label"], "aria-labelledby": props["aria-labelledby"], size: size }, displayRange),
|
|
261
332
|
React.createElement(Flyout, null,
|
|
262
|
-
React.createElement("div", { className: "flex
|
|
263
|
-
|
|
264
|
-
React.createElement("div", { className: "
|
|
265
|
-
React.createElement(
|
|
266
|
-
|
|
267
|
-
React.createElement(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
React.createElement("div", { className: "
|
|
272
|
-
React.createElement("
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
React.createElement("
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
React.createElement("
|
|
280
|
-
React.createElement("
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
React.createElement(
|
|
285
|
-
|
|
333
|
+
React.createElement("div", { className: "flex" },
|
|
334
|
+
React.createElement("div", { className: "flex items-start" },
|
|
335
|
+
presets && presets.length > 0 && (React.createElement("div", { className: "relative h-full w-[160px] border-r" },
|
|
336
|
+
React.createElement("div", { className: "absolute inset-0 overflow-y-scroll p-3" },
|
|
337
|
+
React.createElement(PresetContainer, { currentValue: range, presets: presets, onSelect: onRangeChange })))),
|
|
338
|
+
React.createElement("div", null,
|
|
339
|
+
React.createElement(CalendarPrimitive, { mode: "range", selected: range, onSelect: onRangeChange, month: month, onMonthChange: setMonth, numberOfMonths: 2, disabled: disabled, classNames: {
|
|
340
|
+
months: "flex flex-row divide-x divide-ui-border-base",
|
|
341
|
+
}, ...props }),
|
|
342
|
+
showTimePicker && (React.createElement("div", { className: "border-ui-border-base flex items-center justify-evenly gap-x-3 border-t p-3" },
|
|
343
|
+
React.createElement("div", { className: "flex flex-1 items-center gap-x-2" },
|
|
344
|
+
React.createElement("span", { className: "text-ui-fg-subtle" }, "Start:"),
|
|
345
|
+
React.createElement(TimeInput, { value: startTime, onChange: (v) => onTimeChange(v, "start"), "aria-label": "Start date time", isDisabled: !(range === null || range === void 0 ? void 0 : range.from), isRequired: props.required })),
|
|
346
|
+
React.createElement(Minus, { className: "text-ui-fg-muted" }),
|
|
347
|
+
React.createElement("div", { className: "flex flex-1 items-center gap-x-2" },
|
|
348
|
+
React.createElement("span", { className: "text-ui-fg-subtle" }, "End:"),
|
|
349
|
+
React.createElement(TimeInput, { value: endTime, onChange: (v) => onTimeChange(v, "end"), "aria-label": "End date time", isDisabled: !(range === null || range === void 0 ? void 0 : range.to), isRequired: props.required })))),
|
|
350
|
+
React.createElement("div", { className: "flex items-center justify-between border-t p-3" },
|
|
351
|
+
React.createElement("p", { className: clx("text-ui-fg-subtle txt-compact-small-plus") },
|
|
352
|
+
React.createElement("span", { className: "text-ui-fg-muted" }, "Range:"),
|
|
353
|
+
" ",
|
|
354
|
+
displayRange),
|
|
355
|
+
React.createElement("div", { className: "flex items-center gap-x-2" },
|
|
356
|
+
React.createElement(Button, { variant: "secondary", type: "button", onClick: onCancel }, "Cancel"),
|
|
357
|
+
React.createElement(Button, { variant: "primary", type: "button", onClick: () => setOpen(false) }, "Apply")))))))));
|
|
286
358
|
};
|
|
287
359
|
const validatePresets = (presets, rules) => {
|
|
288
360
|
const { toYear, fromYear, fromMonth, toMonth, fromDay, toDay } = rules;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../../../src/components/date-picker/date-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport { Time } from \"@internationalized/date\"\nimport { Calendar as CalendarIcon, Minus } from \"@medusajs/icons\"\nimport * as Primitives from \"@radix-ui/react-popover\"\nimport { TimeValue } from \"@react-aria/datepicker\"\nimport { format } from \"date-fns\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/button\"\nimport { Calendar as CalendarPrimitive } from \"@/components/calendar\"\nimport { TimeInput } from \"@/components/time-input\"\nimport type { DateRange } from \"@/types\"\nimport { clx } from \"@/utils/clx\"\nimport { isBrowserLocaleClockType24h } from \"@/utils/is-browser-locale-hour-cycle-24h\"\nimport { cva } from \"class-variance-authority\"\n\nconst displayVariants = cva(\n clx(\n \"text-ui-fg-base bg-ui-bg-field border-ui-border-base transition-fg shadow-buttons-neutral flex w-full items-center gap-x-2 rounded-md border outline-none\",\n \"hover:bg-ui-bg-field-hover\",\n \"focus:border-ui-border-interactive focus:shadow-borders-active data-[state=open]:shadow-borders-active data-[state=open]:border-ui-border-interactive\",\n \"disabled:bg-ui-bg-disabled disabled:text-ui-fg-disabled disabled:shadow-none\",\n \"aria-[invalid=true]:!border-ui-border-error aria-[invalid=true]:!shadow-borders-error\"\n ),\n {\n variants: {\n size: {\n base: \"text-compact-small txt-compact-medium h-10 px-3 py-[9px]\",\n small: \"text-compact-medium txt-compact-small h-8 px-2 py-[5px]\",\n },\n },\n defaultVariants: {\n size: \"base\",\n },\n }\n)\n\nconst Display = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n placeholder?: string\n size?: \"small\" | \"base\"\n }\n>(({ className, children, placeholder, size = \"base\", ...props }, ref) => {\n return (\n <Primitives.Trigger asChild>\n <button\n ref={ref}\n className={clx(displayVariants({ size }), className)}\n {...props}\n >\n <CalendarIcon className=\"text-ui-fg-muted\" />\n <span className=\"flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-left\">\n {children ? (\n children\n ) : placeholder ? (\n <span className=\"text-ui-fg-muted\">{placeholder}</span>\n ) : null}\n </span>\n </button>\n </Primitives.Trigger>\n )\n})\nDisplay.displayName = \"DatePicker.Display\"\n\nconst Flyout = React.forwardRef<\n React.ElementRef<typeof Primitives.Content>,\n React.ComponentProps<typeof Primitives.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <Primitives.Portal>\n <Primitives.Content\n ref={ref}\n sideOffset={8}\n align=\"center\"\n className={clx(\n \"txt-compact-small shadow-elevation-flyout bg-ui-bg-base w-fit rounded-lg\",\n \"animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n >\n {children}\n </Primitives.Content>\n </Primitives.Portal>\n )\n})\nFlyout.displayName = \"DatePicker.Flyout\"\n\ninterface Preset {\n label: string\n}\n\ninterface DatePreset extends Preset {\n date: Date\n}\n\ninterface DateRangePreset extends Preset {\n dateRange: DateRange\n}\n\ntype PresetContainerProps<TPreset extends Preset, TValue> = {\n presets: TPreset[] | TPreset[]\n onSelect: (value: TValue) => void\n currentValue?: TValue\n}\n\nconst PresetContainer = <TPreset extends Preset, TValue>({\n presets,\n onSelect,\n currentValue,\n}: PresetContainerProps<TPreset, TValue>) => {\n const isDateRangePresets = (preset: any): preset is DateRangePreset => {\n return \"dateRange\" in preset\n }\n\n const isDatePresets = (preset: any): preset is DatePreset => {\n return \"date\" in preset\n }\n\n const handleClick = (preset: TPreset) => {\n if (isDateRangePresets(preset)) {\n onSelect(preset.dateRange as TValue)\n } else if (isDatePresets(preset)) {\n onSelect(preset.date as TValue)\n }\n }\n\n const compareDates = (date1: Date, date2: Date) => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n )\n }\n\n const compareRanges = (range1: DateRange, range2: DateRange) => {\n const from1 = range1.from\n const from2 = range2.from\n\n let equalFrom = false\n\n if (from1 && from2) {\n const sameFrom = compareDates(from1, from2)\n\n if (sameFrom) {\n equalFrom = true\n }\n }\n\n const to1 = range1.to\n const to2 = range2.to\n\n let equalTo = false\n\n if (to1 && to2) {\n const sameTo = compareDates(to1, to2)\n\n if (sameTo) {\n equalTo = true\n }\n }\n\n return equalFrom && equalTo\n }\n\n const matchesCurrent = (preset: TPreset) => {\n if (isDateRangePresets(preset)) {\n const value = currentValue as DateRange | undefined\n\n return value && compareRanges(value, preset.dateRange)\n } else if (isDatePresets(preset)) {\n const value = currentValue as Date | undefined\n\n return value && compareDates(value, preset.date)\n }\n\n return false\n }\n\n return (\n <ul className=\"flex flex-col items-start\">\n {presets.map((preset, index) => {\n return (\n <li key={index} className=\"w-full\">\n <button\n className={clx(\n \"txt-compact-small-plus w-full overflow-hidden text-ellipsis whitespace-nowrap rounded-md p-2 text-left\",\n \"text-ui-fg-subtle hover:bg-ui-bg-base-hover outline-none transition-all\",\n \"focus:bg-ui-bg-base-hover\",\n {\n \"!bg-ui-bg-base-pressed\": matchesCurrent(preset),\n }\n )}\n onClick={() => handleClick(preset)}\n aria-label={`Select ${preset.label}`}\n >\n {preset.label}\n </button>\n </li>\n )\n })}\n </ul>\n )\n}\n\nconst formatDate = (date: Date, includeTime?: boolean) => {\n const usesAmPm = !isBrowserLocaleClockType24h()\n\n if (includeTime) {\n if (usesAmPm) {\n return format(date, \"MMM d, yyyy h:mm a\")\n }\n\n return format(date, \"MMM d, yyyy HH:mm\")\n }\n\n return format(date, \"MMM d, yyyy\")\n}\n\ntype CalendarProps = {\n fromYear?: number\n toYear?: number\n fromMonth?: Date\n toMonth?: Date\n fromDay?: Date\n toDay?: Date\n fromDate?: Date\n toDate?: Date\n}\n\ninterface PickerProps extends CalendarProps {\n className?: string\n disabled?: boolean\n required?: boolean\n size?: \"small\" | \"base\"\n showTimePicker?: boolean\n id?: string\n \"aria-invalid\"?: boolean\n \"aria-label\"?: string\n \"aria-labelledby\"?: string\n \"aria-required\"?: boolean\n}\n\ninterface SingleProps extends PickerProps {\n presets?: DatePreset[]\n defaultValue?: Date\n value?: Date\n onChange?: (date: Date | undefined) => void\n}\n\nconst SingleDatePicker = ({\n defaultValue,\n value,\n size = \"base\",\n onChange,\n presets,\n showTimePicker,\n disabled,\n className,\n ...props\n}: SingleProps) => {\n const [open, setOpen] = React.useState(false)\n const [date, setDate] = React.useState<Date | undefined>(\n value ?? defaultValue ?? undefined\n )\n const [month, setMonth] = React.useState<Date | undefined>(date)\n\n const time: TimeValue = React.useMemo(() => {\n const hour = date?.getHours() ?? 0\n const minute = date?.getMinutes() ?? 0\n\n return new Time(hour, minute, 0)\n }, [date])\n\n const initialDate = React.useMemo(() => {\n return date\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n /**\n * Update the date when the value changes.\n */\n React.useEffect(() => {\n setDate(value ?? defaultValue ?? undefined)\n }, [value, defaultValue])\n\n React.useEffect(() => {\n if (date) {\n setMonth(date)\n }\n }, [date])\n\n React.useEffect(() => {\n if (!open) {\n setMonth(date)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleCancel = () => {\n setDate(initialDate)\n setOpen(false)\n }\n\n const handleDateChange = (date: Date | undefined) => {\n setDate(date)\n onChange?.(date)\n }\n\n const handleTimeChange = (time: TimeValue) => {\n if (date) {\n const newDate = new Date(date.getTime())\n\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n newDate.setSeconds(time.second)\n\n setDate(newDate)\n onChange?.(newDate)\n }\n }\n\n const formattedDate = React.useMemo(() => {\n if (!date) {\n return null\n }\n\n return formatDate(date, showTimePicker)\n }, [date, showTimePicker])\n\n return (\n <Primitives.Root open={open} onOpenChange={setOpen}>\n <Display\n placeholder=\"Pick a date\"\n disabled={disabled}\n className={className}\n aria-required={props.required || props[\"aria-required\"]}\n aria-invalid={props[\"aria-invalid\"]}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n size={size}\n >\n {formattedDate}\n </Display>\n <Flyout>\n <div className=\"flex\">\n <div className=\"flex items-start\">\n {presets && presets.length > 0 && (\n <div className=\"relative h-full w-[160px] border-r\">\n <div className=\"absolute inset-0 overflow-y-scroll p-3\">\n <PresetContainer\n currentValue={date}\n presets={presets}\n onSelect={handleDateChange}\n />\n </div>\n </div>\n )}\n <div>\n <CalendarPrimitive\n mode=\"single\"\n month={month}\n onMonthChange={setMonth}\n selected={date}\n onSelect={handleDateChange}\n disabled={disabled}\n {...props}\n />\n {showTimePicker && (\n <div className=\"border-ui-border-base border-t p-3\">\n <TimeInput\n aria-label=\"Time\"\n onChange={handleTimeChange}\n isDisabled={!date}\n value={time}\n isRequired={props.required}\n />\n </div>\n )}\n <div className=\"border-ui-border-base flex items-center gap-x-2 border-t p-3\">\n <Button\n variant=\"secondary\"\n className=\"w-full\"\n type=\"button\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n className=\"w-full\"\n type=\"button\"\n onClick={() => setOpen(false)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n </div>\n </Flyout>\n </Primitives.Root>\n )\n}\n\ninterface RangeProps extends PickerProps {\n presets?: DateRangePreset[]\n defaultValue?: DateRange\n value?: DateRange\n onChange?: (dateRange: DateRange | undefined) => void\n}\n\nconst RangeDatePicker = ({\n defaultValue,\n value,\n onChange,\n size = \"base\",\n showTimePicker,\n presets,\n disabled,\n className,\n ...props\n}: RangeProps) => {\n const [open, setOpen] = React.useState(false)\n const [range, setRange] = React.useState<DateRange | undefined>(\n value ?? defaultValue ?? undefined\n )\n const [month, setMonth] = React.useState<Date | undefined>(range?.from)\n\n const time = React.useMemo(() => {\n const startHour = range?.from?.getHours() ?? 0\n const startMinute = range?.from?.getMinutes() ?? 0\n\n const endHour = range?.to?.getHours() ?? 0\n const endMinute = range?.to?.getMinutes() ?? 0\n\n return {\n start: new Time(startHour, startMinute, 0),\n end: new Time(endHour, endMinute, 0),\n }\n }, [range])\n\n const initialRange = React.useMemo(() => {\n return range\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n /**\n * Update the range when the value changes.\n */\n React.useEffect(() => {\n setRange(value ?? defaultValue ?? undefined)\n }, [value, defaultValue])\n\n React.useEffect(() => {\n if (range) {\n setMonth(range.from)\n }\n }, [range])\n\n React.useEffect(() => {\n if (!open) {\n setMonth(range?.from)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleRangeChange = (range: DateRange | undefined) => {\n setRange(range)\n onChange?.(range)\n }\n\n const handleCancel = () => {\n setRange(initialRange)\n setOpen(false)\n }\n\n const handleTimeChange = (time: TimeValue, pos: \"start\" | \"end\") => {\n if (!range) {\n return\n }\n\n if (pos === \"start\") {\n if (!range.from) {\n return\n }\n\n const newDate = new Date(range.from.getTime())\n\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n\n setRange({\n ...range,\n from: newDate,\n })\n }\n\n if (pos === \"end\") {\n if (!range.to) {\n return\n }\n\n const newDate = new Date(range.to.getTime())\n\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n\n setRange({\n ...range,\n to: newDate,\n })\n }\n }\n\n const displayRange = React.useMemo(() => {\n if (!range) {\n return null\n }\n\n return `${range.from ? formatDate(range.from, showTimePicker) : \"\"} - ${\n range.to ? formatDate(range.to, showTimePicker) : \"\"\n }`\n }, [range, showTimePicker])\n\n return (\n <Primitives.Root open={open} onOpenChange={setOpen}>\n <Display\n placeholder=\"Pick a date\"\n disabled={disabled}\n className={className}\n aria-required={props.required || props[\"aria-required\"]}\n aria-invalid={props[\"aria-invalid\"]}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n size={size}\n >\n {displayRange}\n </Display>\n <Flyout>\n <div className=\"flex items-start\">\n {presets && presets.length > 0 && (\n <div className=\"relative h-full w-[160px] border-r\">\n <div className=\"absolute inset-0 overflow-y-scroll p-3\">\n <PresetContainer\n currentValue={range}\n presets={presets}\n onSelect={handleRangeChange}\n />\n </div>\n </div>\n )}\n <div>\n <CalendarPrimitive\n mode=\"range\"\n selected={range}\n onSelect={handleRangeChange}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n disabled={disabled}\n classNames={{\n months: \"flex flex-row divide-x divide-ui-border-base\",\n }}\n {...props}\n />\n {showTimePicker && (\n <div className=\"border-ui-border-base flex items-center justify-evenly gap-x-3 border-t p-3\">\n <div className=\"flex flex-1 items-center gap-x-2\">\n <span className=\"text-ui-fg-subtle\">Start:</span>\n <TimeInput\n value={time.start}\n onChange={(v) => handleTimeChange(v, \"start\")}\n aria-label=\"Start date time\"\n isDisabled={!range?.from}\n isRequired={props.required}\n />\n </div>\n <Minus className=\"text-ui-fg-muted\" />\n <div className=\"flex flex-1 items-center gap-x-2\">\n <span className=\"text-ui-fg-subtle\">End:</span>\n <TimeInput\n value={time.end}\n onChange={(v) => handleTimeChange(v, \"end\")}\n aria-label=\"End date time\"\n isDisabled={!range?.to}\n isRequired={props.required}\n />\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between border-t p-3\">\n <p className={clx(\"text-ui-fg-subtle txt-compact-small-plus\")}>\n <span className=\"text-ui-fg-muted\">Range:</span> {displayRange}\n </p>\n <div className=\"flex items-center gap-x-2\">\n <Button\n variant=\"secondary\"\n type=\"button\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n type=\"button\"\n onClick={() => setOpen(false)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n </div>\n </Flyout>\n </Primitives.Root>\n )\n}\n\ntype DatePickerProps = (\n | {\n mode?: \"single\"\n presets?: DatePreset[]\n defaultValue?: Date\n value?: Date\n onChange?: (date: Date | undefined) => void\n }\n | {\n mode: \"range\"\n presets?: DateRangePreset[]\n defaultValue?: DateRange\n value?: DateRange\n onChange?: (dateRange: DateRange | undefined) => void\n }\n) &\n PickerProps\n\nconst validatePresets = (\n presets: DateRangePreset[] | DatePreset[],\n rules: PickerProps\n) => {\n const { toYear, fromYear, fromMonth, toMonth, fromDay, toDay } = rules\n\n if (presets && presets.length > 0) {\n const fromYearToUse = fromYear\n const toYearToUse = toYear\n\n presets.forEach((preset) => {\n if (\"date\" in preset) {\n const presetYear = preset.date.getFullYear()\n\n if (fromYear && presetYear < fromYear) {\n throw new Error(\n `Preset ${preset.label} is before fromYear ${fromYearToUse}.`\n )\n }\n\n if (toYear && presetYear > toYear) {\n throw new Error(\n `Preset ${preset.label} is after toYear ${toYearToUse}.`\n )\n }\n\n if (fromMonth) {\n const presetMonth = preset.date.getMonth()\n\n if (presetMonth < fromMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label} is before fromMonth ${fromMonth}.`\n )\n }\n }\n\n if (toMonth) {\n const presetMonth = preset.date.getMonth()\n\n if (presetMonth > toMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label} is after toMonth ${toMonth}.`\n )\n }\n }\n\n if (fromDay) {\n const presetDay = preset.date.getDate()\n\n if (presetDay < fromDay.getDate()) {\n throw new Error(\n `Preset ${preset.label} is before fromDay ${fromDay}.`\n )\n }\n }\n\n if (toDay) {\n const presetDay = preset.date.getDate()\n\n if (presetDay > toDay.getDate()) {\n throw new Error(\n `Preset ${preset.label} is after toDay ${format(\n toDay,\n \"MMM dd, yyyy\"\n )}.`\n )\n }\n }\n }\n\n if (\"dateRange\" in preset) {\n const presetFromYear = preset.dateRange.from?.getFullYear()\n const presetToYear = preset.dateRange.to?.getFullYear()\n\n if (presetFromYear && fromYear && presetFromYear < fromYear) {\n throw new Error(\n `Preset ${preset.label}'s 'from' is before fromYear ${fromYearToUse}.`\n )\n }\n\n if (presetToYear && toYear && presetToYear > toYear) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toYear ${toYearToUse}.`\n )\n }\n\n if (fromMonth) {\n const presetMonth = preset.dateRange.from?.getMonth()\n\n if (presetMonth && presetMonth < fromMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label}'s 'from' is before fromMonth ${format(\n fromMonth,\n \"MMM, yyyy\"\n )}.`\n )\n }\n }\n\n if (toMonth) {\n const presetMonth = preset.dateRange.to?.getMonth()\n\n if (presetMonth && presetMonth > toMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toMonth ${format(\n toMonth,\n \"MMM, yyyy\"\n )}.`\n )\n }\n }\n\n if (fromDay) {\n const presetDay = preset.dateRange.from?.getDate()\n\n if (presetDay && presetDay < fromDay.getDate()) {\n throw new Error(\n `Preset ${\n preset.dateRange.from\n }'s 'from' is before fromDay ${format(fromDay, \"MMM dd, yyyy\")}.`\n )\n }\n }\n\n if (toDay) {\n const presetDay = preset.dateRange.to?.getDate()\n\n if (presetDay && presetDay > toDay.getDate()) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toDay ${format(\n toDay,\n \"MMM dd, yyyy\"\n )}.`\n )\n }\n }\n }\n })\n }\n}\n\nconst DatePicker = ({ mode = \"single\", ...props }: DatePickerProps) => {\n if (props.presets) {\n validatePresets(props.presets, props)\n }\n\n if (mode === \"single\") {\n return <SingleDatePicker {...(props as SingleProps)} />\n }\n\n return <RangeDatePicker {...(props as RangeProps)} />\n}\n\nexport { DatePicker }\n"]}
|
|
1
|
+
{"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../../../src/components/date-picker/date-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport { Time } from \"@internationalized/date\"\nimport { Calendar as CalendarIcon, Minus } from \"@medusajs/icons\"\nimport * as Primitives from \"@radix-ui/react-popover\"\nimport { TimeValue } from \"@react-aria/datepicker\"\nimport { format } from \"date-fns\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/button\"\nimport { Calendar as CalendarPrimitive } from \"@/components/calendar\"\nimport { TimeInput } from \"@/components/time-input\"\nimport type { DateRange } from \"@/types\"\nimport { clx } from \"@/utils/clx\"\nimport { isBrowserLocaleClockType24h } from \"@/utils/is-browser-locale-hour-cycle-24h\"\nimport { cva } from \"class-variance-authority\"\n\nconst displayVariants = cva(\n clx(\n \"text-ui-fg-base bg-ui-bg-field transition-fg shadow-buttons-neutral flex w-full items-center gap-x-2 rounded-md outline-none\",\n \"hover:bg-ui-bg-field-hover\",\n \"focus:shadow-borders-interactive-with-active data-[state=open]:shadow-borders-interactive-with-active\",\n \"disabled:bg-ui-bg-disabled disabled:text-ui-fg-disabled disabled:shadow-buttons-neutral\",\n \"aria-[invalid=true]:!shadow-borders-error\"\n ),\n {\n variants: {\n size: {\n base: \"txt-compact-medium h-10 px-3 py-2.5\",\n small: \"txt-compact-small h-8 px-2 py-1.5\",\n },\n },\n defaultVariants: {\n size: \"base\",\n },\n }\n)\n\nconst Display = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n placeholder?: string\n size?: \"small\" | \"base\"\n }\n>(({ className, children, placeholder, size = \"base\", ...props }, ref) => {\n return (\n <Primitives.Trigger asChild>\n <button\n ref={ref}\n className={clx(displayVariants({ size }), className)}\n {...props}\n >\n <CalendarIcon className=\"text-ui-fg-muted\" />\n <span className=\"flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-left\">\n {children ? (\n children\n ) : placeholder ? (\n <span className=\"text-ui-fg-muted\">{placeholder}</span>\n ) : null}\n </span>\n </button>\n </Primitives.Trigger>\n )\n})\nDisplay.displayName = \"DatePicker.Display\"\n\nconst Flyout = React.forwardRef<\n React.ElementRef<typeof Primitives.Content>,\n React.ComponentProps<typeof Primitives.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <Primitives.Portal>\n <Primitives.Content\n ref={ref}\n sideOffset={8}\n align=\"center\"\n className={clx(\n \"txt-compact-small shadow-elevation-flyout bg-ui-bg-base w-fit rounded-lg\",\n \"animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n >\n {children}\n </Primitives.Content>\n </Primitives.Portal>\n )\n})\nFlyout.displayName = \"DatePicker.Flyout\"\n\ninterface Preset {\n label: string\n}\n\ninterface DatePreset extends Preset {\n date: Date\n}\n\ninterface DateRangePreset extends Preset {\n dateRange: DateRange\n}\n\ntype PresetContainerProps<TPreset extends Preset, TValue> = {\n presets: TPreset[] | TPreset[]\n onSelect: (value: TValue) => void\n currentValue?: TValue\n}\n\nconst PresetContainer = <TPreset extends Preset, TValue>({\n presets,\n onSelect,\n currentValue,\n}: PresetContainerProps<TPreset, TValue>) => {\n const isDateRangePresets = (preset: any): preset is DateRangePreset => {\n return \"dateRange\" in preset\n }\n\n const isDatePresets = (preset: any): preset is DatePreset => {\n return \"date\" in preset\n }\n\n const handleClick = (preset: TPreset) => {\n if (isDateRangePresets(preset)) {\n onSelect(preset.dateRange as TValue)\n } else if (isDatePresets(preset)) {\n onSelect(preset.date as TValue)\n }\n }\n\n const compareDates = (date1: Date, date2: Date) => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n )\n }\n\n const compareRanges = (range1: DateRange, range2: DateRange) => {\n const from1 = range1.from\n const from2 = range2.from\n\n let equalFrom = false\n\n if (from1 && from2) {\n const sameFrom = compareDates(from1, from2)\n\n if (sameFrom) {\n equalFrom = true\n }\n }\n\n const to1 = range1.to\n const to2 = range2.to\n\n let equalTo = false\n\n if (to1 && to2) {\n const sameTo = compareDates(to1, to2)\n\n if (sameTo) {\n equalTo = true\n }\n }\n\n return equalFrom && equalTo\n }\n\n const matchesCurrent = (preset: TPreset) => {\n if (isDateRangePresets(preset)) {\n const value = currentValue as DateRange | undefined\n\n return value && compareRanges(value, preset.dateRange)\n } else if (isDatePresets(preset)) {\n const value = currentValue as Date | undefined\n\n return value && compareDates(value, preset.date)\n }\n\n return false\n }\n\n return (\n <ul className=\"flex flex-col items-start\">\n {presets.map((preset, index) => {\n return (\n <li key={index} className=\"w-full\">\n <button\n className={clx(\n \"txt-compact-small-plus w-full overflow-hidden text-ellipsis whitespace-nowrap rounded-md p-2 text-left\",\n \"text-ui-fg-subtle hover:bg-ui-bg-base-hover outline-none transition-all\",\n \"focus:bg-ui-bg-base-hover\",\n {\n \"!bg-ui-bg-base-pressed\": matchesCurrent(preset),\n }\n )}\n onClick={() => handleClick(preset)}\n aria-label={`Select ${preset.label}`}\n >\n {preset.label}\n </button>\n </li>\n )\n })}\n </ul>\n )\n}\n\nconst formatDate = (date: Date, includeTime?: boolean) => {\n const usesAmPm = !isBrowserLocaleClockType24h()\n\n if (includeTime) {\n if (usesAmPm) {\n return format(date, \"MMM d, yyyy h:mm a\")\n }\n\n return format(date, \"MMM d, yyyy HH:mm\")\n }\n\n return format(date, \"MMM d, yyyy\")\n}\n\ntype CalendarProps = {\n fromYear?: number\n toYear?: number\n fromMonth?: Date\n toMonth?: Date\n fromDay?: Date\n toDay?: Date\n fromDate?: Date\n toDate?: Date\n}\n\ninterface PickerProps extends CalendarProps {\n className?: string\n disabled?: boolean\n required?: boolean\n size?: \"small\" | \"base\"\n showTimePicker?: boolean\n id?: string\n \"aria-invalid\"?: boolean\n \"aria-label\"?: string\n \"aria-labelledby\"?: string\n \"aria-required\"?: boolean\n}\n\ninterface SingleProps extends PickerProps {\n presets?: DatePreset[]\n defaultValue?: Date\n value?: Date\n onChange?: (date: Date | undefined) => void\n}\n\nconst SingleDatePicker = ({\n defaultValue,\n value,\n size = \"base\",\n onChange,\n presets,\n showTimePicker,\n disabled,\n className,\n ...props\n}: SingleProps) => {\n const [open, setOpen] = React.useState(false)\n const [date, setDate] = React.useState<Date | undefined>(\n value ?? defaultValue ?? undefined\n )\n const [month, setMonth] = React.useState<Date | undefined>(date)\n\n const [time, setTime] = React.useState<TimeValue>(\n value\n ? new Time(value.getHours(), value.getMinutes())\n : defaultValue\n ? new Time(defaultValue.getHours(), defaultValue.getMinutes())\n : new Time(0, 0)\n )\n\n const initialDate = React.useMemo(() => {\n return date\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n /**\n * Update the date when the value changes.\n */\n React.useEffect(() => {\n setDate(value ?? defaultValue ?? undefined)\n }, [value, defaultValue])\n\n React.useEffect(() => {\n if (date) {\n setMonth(date)\n }\n }, [date])\n\n React.useEffect(() => {\n if (!open) {\n setMonth(date)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const onCancel = () => {\n setDate(initialDate)\n setTime(new Time(0, 0))\n setOpen(false)\n }\n\n const onDateChange = (date: Date | undefined) => {\n const newDate = date\n\n if (showTimePicker) {\n /**\n * If the time is cleared, and the date is\n * changed then we want to reset the time.\n */\n if (newDate && !time) {\n setTime(new Time(0, 0))\n }\n\n /**\n * If the time is set, and the date is changed\n * then we want to update the date with the\n * time.\n */\n if (newDate && time) {\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n }\n\n setDate(newDate)\n onChange?.(newDate)\n }\n }\n\n const onTimeChange = (time: TimeValue) => {\n setTime(time)\n\n if (!date) {\n return\n }\n\n const newDate = new Date(date.getTime())\n\n if (!time) {\n /**\n * When a segment of the time input is cleared,\n * it will return `null` as the value is no longer\n * a valid time. In this case, we want to set the\n * time to for the date, effectivly resetting the\n * input field.\n */\n newDate.setHours(0)\n newDate.setMinutes(0)\n } else {\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n }\n\n setDate(newDate)\n onChange?.(newDate)\n }\n\n const formattedDate = React.useMemo(() => {\n if (!date) {\n return null\n }\n\n return formatDate(date, showTimePicker)\n }, [date, showTimePicker])\n\n return (\n <Primitives.Root open={open} onOpenChange={setOpen}>\n <Display\n placeholder=\"Pick a date\"\n disabled={disabled}\n className={className}\n aria-required={props.required || props[\"aria-required\"]}\n aria-invalid={props[\"aria-invalid\"]}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n size={size}\n >\n {formattedDate}\n </Display>\n <Flyout>\n <div className=\"flex\">\n <div className=\"flex items-start\">\n {presets && presets.length > 0 && (\n <div className=\"relative h-full w-[160px] border-r\">\n <div className=\"absolute inset-0 overflow-y-scroll p-3\">\n <PresetContainer\n currentValue={date}\n presets={presets}\n onSelect={onDateChange}\n />\n </div>\n </div>\n )}\n <div>\n <CalendarPrimitive\n mode=\"single\"\n month={month}\n onMonthChange={setMonth}\n selected={date}\n onSelect={onDateChange}\n disabled={disabled}\n {...props}\n />\n {showTimePicker && (\n <div className=\"border-ui-border-base border-t p-3\">\n <TimeInput\n aria-label=\"Time\"\n onChange={onTimeChange}\n isDisabled={!date}\n value={time}\n isRequired={props.required}\n />\n </div>\n )}\n <div className=\"border-ui-border-base flex items-center gap-x-2 border-t p-3\">\n <Button\n variant=\"secondary\"\n className=\"w-full\"\n type=\"button\"\n onClick={onCancel}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n className=\"w-full\"\n type=\"button\"\n onClick={() => setOpen(false)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n </div>\n </Flyout>\n </Primitives.Root>\n )\n}\n\ninterface RangeProps extends PickerProps {\n presets?: DateRangePreset[]\n defaultValue?: DateRange\n value?: DateRange\n onChange?: (dateRange: DateRange | undefined) => void\n}\n\nconst RangeDatePicker = ({\n defaultValue,\n value,\n onChange,\n size = \"base\",\n showTimePicker,\n presets,\n disabled,\n className,\n ...props\n}: RangeProps) => {\n const [open, setOpen] = React.useState(false)\n const [range, setRange] = React.useState<DateRange | undefined>(\n value ?? defaultValue ?? undefined\n )\n const [month, setMonth] = React.useState<Date | undefined>(range?.from)\n\n const [startTime, setStartTime] = React.useState<TimeValue>(\n value?.from\n ? new Time(value.from.getHours(), value.from.getMinutes())\n : defaultValue?.from\n ? new Time(defaultValue.from.getHours(), defaultValue.from.getMinutes())\n : new Time(0, 0)\n )\n const [endTime, setEndTime] = React.useState<TimeValue>(\n value?.to\n ? new Time(value.to.getHours(), value.to.getMinutes())\n : defaultValue?.to\n ? new Time(defaultValue.to.getHours(), defaultValue.to.getMinutes())\n : new Time(0, 0)\n )\n\n const initialRange = React.useMemo(() => {\n return range\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n /**\n * Update the range when the value changes.\n */\n React.useEffect(() => {\n setRange(value ?? defaultValue ?? undefined)\n }, [value, defaultValue])\n\n React.useEffect(() => {\n if (range) {\n setMonth(range.from)\n }\n }, [range])\n\n React.useEffect(() => {\n if (!open) {\n setMonth(range?.from)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const onRangeChange = (range: DateRange | undefined) => {\n const newRange = range\n\n if (showTimePicker) {\n if (newRange?.from && !startTime) {\n setStartTime(new Time(0, 0))\n }\n\n if (newRange?.to && !endTime) {\n setEndTime(new Time(0, 0))\n }\n\n if (newRange?.from && startTime) {\n newRange.from.setHours(startTime.hour)\n newRange.from.setMinutes(startTime.minute)\n }\n\n if (newRange?.to && endTime) {\n newRange.to.setHours(endTime.hour)\n newRange.to.setMinutes(endTime.minute)\n }\n }\n\n setRange(newRange)\n onChange?.(newRange)\n }\n\n const onCancel = () => {\n setRange(initialRange)\n setStartTime(new Time(0, 0))\n setEndTime(new Time(0, 0))\n setOpen(false)\n }\n\n const onTimeChange = (time: TimeValue, pos: \"start\" | \"end\") => {\n switch (pos) {\n case \"start\":\n setStartTime(time)\n break\n case \"end\":\n setEndTime(time)\n break\n }\n\n if (!range) {\n return\n }\n\n if (pos === \"start\") {\n if (!range.from) {\n return\n }\n\n const newDate = new Date(range.from.getTime())\n\n if (!time) {\n newDate.setHours(0)\n newDate.setMinutes(0)\n } else {\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n }\n\n setRange({\n ...range,\n from: newDate,\n })\n }\n\n if (pos === \"end\") {\n if (!range.to) {\n return\n }\n\n const newDate = new Date(range.to.getTime())\n\n if (!time) {\n newDate.setHours(0)\n newDate.setMinutes(0)\n } else {\n newDate.setHours(time.hour)\n newDate.setMinutes(time.minute)\n }\n\n setRange({\n ...range,\n to: newDate,\n })\n }\n }\n\n const displayRange = React.useMemo(() => {\n if (!range) {\n return null\n }\n\n return `${range.from ? formatDate(range.from, showTimePicker) : \"\"} - ${\n range.to ? formatDate(range.to, showTimePicker) : \"\"\n }`\n }, [range, showTimePicker])\n\n return (\n <Primitives.Root open={open} onOpenChange={setOpen}>\n <Display\n placeholder=\"Pick a date\"\n disabled={disabled}\n className={className}\n aria-required={props.required || props[\"aria-required\"]}\n aria-invalid={props[\"aria-invalid\"]}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n size={size}\n >\n {displayRange}\n </Display>\n <Flyout>\n <div className=\"flex\">\n <div className=\"flex items-start\">\n {presets && presets.length > 0 && (\n <div className=\"relative h-full w-[160px] border-r\">\n <div className=\"absolute inset-0 overflow-y-scroll p-3\">\n <PresetContainer\n currentValue={range}\n presets={presets}\n onSelect={onRangeChange}\n />\n </div>\n </div>\n )}\n <div>\n <CalendarPrimitive\n mode=\"range\"\n selected={range}\n onSelect={onRangeChange}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n disabled={disabled}\n classNames={{\n months: \"flex flex-row divide-x divide-ui-border-base\",\n }}\n {...props}\n />\n {showTimePicker && (\n <div className=\"border-ui-border-base flex items-center justify-evenly gap-x-3 border-t p-3\">\n <div className=\"flex flex-1 items-center gap-x-2\">\n <span className=\"text-ui-fg-subtle\">Start:</span>\n <TimeInput\n value={startTime}\n onChange={(v) => onTimeChange(v, \"start\")}\n aria-label=\"Start date time\"\n isDisabled={!range?.from}\n isRequired={props.required}\n />\n </div>\n <Minus className=\"text-ui-fg-muted\" />\n <div className=\"flex flex-1 items-center gap-x-2\">\n <span className=\"text-ui-fg-subtle\">End:</span>\n <TimeInput\n value={endTime}\n onChange={(v) => onTimeChange(v, \"end\")}\n aria-label=\"End date time\"\n isDisabled={!range?.to}\n isRequired={props.required}\n />\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between border-t p-3\">\n <p className={clx(\"text-ui-fg-subtle txt-compact-small-plus\")}>\n <span className=\"text-ui-fg-muted\">Range:</span>{\" \"}\n {displayRange}\n </p>\n <div className=\"flex items-center gap-x-2\">\n <Button variant=\"secondary\" type=\"button\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n type=\"button\"\n onClick={() => setOpen(false)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Flyout>\n </Primitives.Root>\n )\n}\n\ntype DatePickerProps = (\n | {\n mode?: \"single\"\n presets?: DatePreset[]\n defaultValue?: Date\n value?: Date\n onChange?: (date: Date | undefined) => void\n }\n | {\n mode: \"range\"\n presets?: DateRangePreset[]\n defaultValue?: DateRange\n value?: DateRange\n onChange?: (dateRange: DateRange | undefined) => void\n }\n) &\n PickerProps\n\nconst validatePresets = (\n presets: DateRangePreset[] | DatePreset[],\n rules: PickerProps\n) => {\n const { toYear, fromYear, fromMonth, toMonth, fromDay, toDay } = rules\n\n if (presets && presets.length > 0) {\n const fromYearToUse = fromYear\n const toYearToUse = toYear\n\n presets.forEach((preset) => {\n if (\"date\" in preset) {\n const presetYear = preset.date.getFullYear()\n\n if (fromYear && presetYear < fromYear) {\n throw new Error(\n `Preset ${preset.label} is before fromYear ${fromYearToUse}.`\n )\n }\n\n if (toYear && presetYear > toYear) {\n throw new Error(\n `Preset ${preset.label} is after toYear ${toYearToUse}.`\n )\n }\n\n if (fromMonth) {\n const presetMonth = preset.date.getMonth()\n\n if (presetMonth < fromMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label} is before fromMonth ${fromMonth}.`\n )\n }\n }\n\n if (toMonth) {\n const presetMonth = preset.date.getMonth()\n\n if (presetMonth > toMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label} is after toMonth ${toMonth}.`\n )\n }\n }\n\n if (fromDay) {\n const presetDay = preset.date.getDate()\n\n if (presetDay < fromDay.getDate()) {\n throw new Error(\n `Preset ${preset.label} is before fromDay ${fromDay}.`\n )\n }\n }\n\n if (toDay) {\n const presetDay = preset.date.getDate()\n\n if (presetDay > toDay.getDate()) {\n throw new Error(\n `Preset ${preset.label} is after toDay ${format(\n toDay,\n \"MMM dd, yyyy\"\n )}.`\n )\n }\n }\n }\n\n if (\"dateRange\" in preset) {\n const presetFromYear = preset.dateRange.from?.getFullYear()\n const presetToYear = preset.dateRange.to?.getFullYear()\n\n if (presetFromYear && fromYear && presetFromYear < fromYear) {\n throw new Error(\n `Preset ${preset.label}'s 'from' is before fromYear ${fromYearToUse}.`\n )\n }\n\n if (presetToYear && toYear && presetToYear > toYear) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toYear ${toYearToUse}.`\n )\n }\n\n if (fromMonth) {\n const presetMonth = preset.dateRange.from?.getMonth()\n\n if (presetMonth && presetMonth < fromMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label}'s 'from' is before fromMonth ${format(\n fromMonth,\n \"MMM, yyyy\"\n )}.`\n )\n }\n }\n\n if (toMonth) {\n const presetMonth = preset.dateRange.to?.getMonth()\n\n if (presetMonth && presetMonth > toMonth.getMonth()) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toMonth ${format(\n toMonth,\n \"MMM, yyyy\"\n )}.`\n )\n }\n }\n\n if (fromDay) {\n const presetDay = preset.dateRange.from?.getDate()\n\n if (presetDay && presetDay < fromDay.getDate()) {\n throw new Error(\n `Preset ${\n preset.dateRange.from\n }'s 'from' is before fromDay ${format(fromDay, \"MMM dd, yyyy\")}.`\n )\n }\n }\n\n if (toDay) {\n const presetDay = preset.dateRange.to?.getDate()\n\n if (presetDay && presetDay > toDay.getDate()) {\n throw new Error(\n `Preset ${preset.label}'s 'to' is after toDay ${format(\n toDay,\n \"MMM dd, yyyy\"\n )}.`\n )\n }\n }\n }\n })\n }\n}\n\nconst DatePicker = ({ mode = \"single\", ...props }: DatePickerProps) => {\n if (props.presets) {\n validatePresets(props.presets, props)\n }\n\n if (mode === \"single\") {\n return <SingleDatePicker {...(props as SingleProps)} />\n }\n\n return <RangeDatePicker {...(props as RangeProps)} />\n}\n\nexport { DatePicker }\n"]}
|
|
@@ -17,21 +17,21 @@ const SubMenuTrigger = React.forwardRef(({ className, children, ...props }, ref)
|
|
|
17
17
|
children,
|
|
18
18
|
React.createElement(ChevronRightMini, { className: "ml-auto" }))));
|
|
19
19
|
SubMenuTrigger.displayName = "DropdownMenu.SubMenuTrigger";
|
|
20
|
-
const SubMenuContent = React.forwardRef(({ className, ...props }, ref) => (React.createElement(Primitives.Portal, null,
|
|
21
|
-
React.createElement(Primitives.SubContent, { ref: ref, className: clx("bg-ui-bg-base text-ui-fg-base shadow-elevation-flyout min-w-[8rem] overflow-hidden rounded-lg border p-1", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className), ...props }))));
|
|
20
|
+
const SubMenuContent = React.forwardRef(({ className, collisionPadding = 8, ...props }, ref) => (React.createElement(Primitives.Portal, null,
|
|
21
|
+
React.createElement(Primitives.SubContent, { ref: ref, collisionPadding: collisionPadding, className: clx("bg-ui-bg-base text-ui-fg-base shadow-elevation-flyout max-h-[var(--radix-popper-available-height)] min-w-[8rem] overflow-hidden rounded-lg border p-1", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className), ...props }))));
|
|
22
22
|
SubMenuContent.displayName = "DropdownMenu.SubMenuContent";
|
|
23
|
-
const Content = React.forwardRef(({ className, sideOffset = 8, align = "start", ...props }, ref) => (React.createElement(Primitives.Portal, null,
|
|
24
|
-
React.createElement(Primitives.Content, { ref: ref, sideOffset: sideOffset, align: align, className: clx("bg-ui-bg-base text-ui-fg-base shadow-elevation-flyout min-w-[
|
|
23
|
+
const Content = React.forwardRef(({ className, sideOffset = 8, collisionPadding = 8, align = "start", ...props }, ref) => (React.createElement(Primitives.Portal, null,
|
|
24
|
+
React.createElement(Primitives.Content, { ref: ref, sideOffset: sideOffset, align: align, collisionPadding: collisionPadding, className: clx("bg-ui-bg-base text-ui-fg-base shadow-elevation-flyout max-h-[var(--radix-popper-available-height)] min-w-[220px] overflow-hidden rounded-lg p-1", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className), ...props }))));
|
|
25
25
|
Content.displayName = "DropdownMenu.Content";
|
|
26
|
-
const Item = React.forwardRef(({ className, ...props }, ref) => (React.createElement(Primitives.Item, { ref: ref, className: clx("bg-ui-bg-base focus:bg-ui-bg-base-pressed text-ui-fg-base data-[disabled]:text-ui-fg-disabled txt-compact-small relative flex cursor-
|
|
26
|
+
const Item = React.forwardRef(({ className, ...props }, ref) => (React.createElement(Primitives.Item, { ref: ref, className: clx("bg-ui-bg-base focus:bg-ui-bg-base-pressed text-ui-fg-base data-[disabled]:text-ui-fg-disabled txt-compact-small relative flex cursor-pointer select-none items-center rounded-md px-3 py-2 outline-none transition-colors data-[disabled]:pointer-events-none", className), ...props })));
|
|
27
27
|
Item.displayName = "DropdownMenu.Item";
|
|
28
|
-
const CheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => (React.createElement(Primitives.CheckboxItem, { ref: ref, className: clx("focus:bg-ui-bg-base-pressed text-ui-fg-base data-[disabled]:text-ui-fg-disabled relative flex cursor-
|
|
28
|
+
const CheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => (React.createElement(Primitives.CheckboxItem, { ref: ref, className: clx("focus:bg-ui-bg-base-pressed text-ui-fg-base data-[disabled]:text-ui-fg-disabled relative flex cursor-pointer select-none items-center rounded-md py-2 pl-10 pr-3 text-sm outline-none transition-colors data-[disabled]:pointer-events-none", className), checked: checked, ...props },
|
|
29
29
|
React.createElement("span", { className: "absolute left-3 flex h-5 w-5 items-center justify-center" },
|
|
30
30
|
React.createElement(Primitives.ItemIndicator, null,
|
|
31
31
|
React.createElement(CheckMini, null))),
|
|
32
32
|
children)));
|
|
33
33
|
CheckboxItem.displayName = "DropdownMenu.CheckboxItem";
|
|
34
|
-
const RadioItem = React.forwardRef(({ className, children, ...props }, ref) => (React.createElement(Primitives.RadioItem, { ref: ref, className: clx("focus:bg-ui-bg-base-pressed hover:bg-ui-base-hover bg-ui-bg-base txt-compact-small relative flex cursor-
|
|
34
|
+
const RadioItem = React.forwardRef(({ className, children, ...props }, ref) => (React.createElement(Primitives.RadioItem, { ref: ref, className: clx("focus:bg-ui-bg-base-pressed hover:bg-ui-base-hover bg-ui-bg-base txt-compact-small relative flex cursor-pointer select-none items-center rounded-md py-2 pl-10 pr-3 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[state=checked]:font-medium data-[disabled]:opacity-50", className), ...props },
|
|
35
35
|
React.createElement("span", { className: "absolute left-3 flex h-5 w-5 items-center justify-center" },
|
|
36
36
|
React.createElement(Primitives.ItemIndicator, null,
|
|
37
37
|
React.createElement(EllipseMiniSolid, { className: "text-ui-fg-base" }))),
|