@medusajs/ui 1.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.
Files changed (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/dist/cjs/components/badge/badge.d.ts +16 -5
  4. package/dist/cjs/components/badge/badge.js +20 -31
  5. package/dist/cjs/components/badge/badge.js.map +1 -1
  6. package/dist/cjs/components/button/button.d.ts +1 -2
  7. package/dist/cjs/components/button/button.js +12 -40
  8. package/dist/cjs/components/button/button.js.map +1 -1
  9. package/dist/cjs/components/calendar/calendar.js +5 -5
  10. package/dist/cjs/components/calendar/calendar.js.map +1 -1
  11. package/dist/cjs/components/checkbox/checkbox.js +1 -1
  12. package/dist/cjs/components/checkbox/checkbox.js.map +1 -1
  13. package/dist/cjs/components/code-block/code-block.d.ts +3 -5
  14. package/dist/cjs/components/code-block/code-block.js +19 -19
  15. package/dist/cjs/components/code-block/code-block.js.map +1 -1
  16. package/dist/cjs/components/command-bar/command-bar.d.ts +22 -0
  17. package/dist/cjs/components/command-bar/command-bar.js +63 -0
  18. package/dist/cjs/components/command-bar/command-bar.js.map +1 -0
  19. package/dist/cjs/components/command-bar/index.d.ts +1 -0
  20. package/dist/cjs/components/command-bar/index.js +5 -0
  21. package/dist/cjs/components/command-bar/index.js.map +1 -0
  22. package/dist/cjs/components/container/container.d.ts +1 -1
  23. package/dist/cjs/components/container/container.js.map +1 -1
  24. package/dist/cjs/components/currency-input/currency-input.d.ts +21 -0
  25. package/dist/cjs/components/currency-input/currency-input.js +58 -0
  26. package/dist/cjs/components/currency-input/currency-input.js.map +1 -0
  27. package/dist/cjs/components/currency-input/index.d.ts +1 -0
  28. package/dist/cjs/components/currency-input/index.js +5 -0
  29. package/dist/cjs/components/currency-input/index.js.map +1 -0
  30. package/dist/cjs/components/date-picker/date-picker.d.ts +1 -1
  31. package/dist/cjs/components/date-picker/date-picker.js +138 -52
  32. package/dist/cjs/components/date-picker/date-picker.js.map +1 -1
  33. package/dist/cjs/components/drawer/drawer.d.ts +13 -15
  34. package/dist/cjs/components/drawer/drawer.js +53 -44
  35. package/dist/cjs/components/drawer/drawer.js.map +1 -1
  36. package/dist/cjs/components/dropdown-menu/dropdown-menu.js +7 -7
  37. package/dist/cjs/components/dropdown-menu/dropdown-menu.js.map +1 -1
  38. package/dist/cjs/components/focus-modal/focus-modal.d.ts +9 -12
  39. package/dist/cjs/components/focus-modal/focus-modal.js +39 -35
  40. package/dist/cjs/components/focus-modal/focus-modal.js.map +1 -1
  41. package/dist/cjs/components/heading/heading.js +3 -3
  42. package/dist/cjs/components/heading/heading.js.map +1 -1
  43. package/dist/cjs/components/hint/hint.d.ts +1 -1
  44. package/dist/cjs/components/icon-badge/icon-badge.d.ts +20 -0
  45. package/dist/cjs/components/icon-badge/icon-badge.js +24 -0
  46. package/dist/cjs/components/icon-badge/icon-badge.js.map +1 -0
  47. package/dist/cjs/components/icon-badge/index.d.ts +1 -0
  48. package/dist/cjs/components/icon-badge/index.js +5 -0
  49. package/dist/cjs/components/icon-badge/index.js.map +1 -0
  50. package/dist/cjs/components/icon-button/icon-button.d.ts +21 -0
  51. package/dist/cjs/components/icon-button/icon-button.js +48 -0
  52. package/dist/cjs/components/icon-button/icon-button.js.map +1 -0
  53. package/dist/cjs/components/icon-button/index.d.ts +1 -0
  54. package/dist/cjs/components/icon-button/index.js +5 -0
  55. package/dist/cjs/components/icon-button/index.js.map +1 -0
  56. package/dist/cjs/components/input/input.js +6 -6
  57. package/dist/cjs/components/input/input.js.map +1 -1
  58. package/dist/cjs/components/kbd/kbd.d.ts +1 -1
  59. package/dist/cjs/components/kbd/kbd.js +4 -3
  60. package/dist/cjs/components/kbd/kbd.js.map +1 -1
  61. package/dist/cjs/components/progress-accordion/index.d.ts +1 -0
  62. package/dist/cjs/components/progress-accordion/index.js +5 -0
  63. package/dist/cjs/components/progress-accordion/index.js.map +1 -0
  64. package/dist/cjs/components/progress-accordion/progress-accordion.d.ts +19 -0
  65. package/dist/cjs/components/progress-accordion/progress-accordion.js +54 -0
  66. package/dist/cjs/components/progress-accordion/progress-accordion.js.map +1 -0
  67. package/dist/cjs/components/progress-tabs/index.d.ts +1 -0
  68. package/dist/cjs/components/progress-tabs/index.js +5 -0
  69. package/dist/cjs/components/progress-tabs/index.js.map +1 -0
  70. package/dist/cjs/components/progress-tabs/progress-tabs.d.ts +15 -0
  71. package/dist/cjs/components/progress-tabs/progress-tabs.js +46 -0
  72. package/dist/cjs/components/progress-tabs/progress-tabs.js.map +1 -0
  73. package/dist/cjs/components/prompt/prompt.js +3 -3
  74. package/dist/cjs/components/prompt/prompt.js.map +1 -1
  75. package/dist/cjs/components/radio-group/radio-group.d.ts +5 -0
  76. package/dist/cjs/components/radio-group/radio-group.js +25 -4
  77. package/dist/cjs/components/radio-group/radio-group.js.map +1 -1
  78. package/dist/cjs/components/select/select.js +4 -8
  79. package/dist/cjs/components/select/select.js.map +1 -1
  80. package/dist/cjs/components/status-badge/index.d.ts +1 -0
  81. package/dist/cjs/components/status-badge/index.js +5 -0
  82. package/dist/cjs/components/status-badge/index.js.map +1 -0
  83. package/dist/cjs/components/status-badge/status-badge.d.ts +6 -0
  84. package/dist/cjs/components/status-badge/status-badge.js +23 -0
  85. package/dist/cjs/components/status-badge/status-badge.js.map +1 -0
  86. package/dist/cjs/components/switch/switch.js +1 -1
  87. package/dist/cjs/components/switch/switch.js.map +1 -1
  88. package/dist/cjs/components/table/table.js +6 -7
  89. package/dist/cjs/components/table/table.js.map +1 -1
  90. package/dist/cjs/components/tabs/index.d.ts +1 -0
  91. package/dist/cjs/components/tabs/index.js +5 -0
  92. package/dist/cjs/components/tabs/index.js.map +1 -0
  93. package/dist/cjs/components/tabs/tabs.d.ts +11 -0
  94. package/dist/cjs/components/tabs/tabs.js +25 -0
  95. package/dist/cjs/components/tabs/tabs.js.map +1 -0
  96. package/dist/cjs/components/text/text.d.ts +1 -0
  97. package/dist/cjs/components/text/text.js +64 -7
  98. package/dist/cjs/components/text/text.js.map +1 -1
  99. package/dist/cjs/components/textarea/textarea.js +1 -1
  100. package/dist/cjs/components/textarea/textarea.js.map +1 -1
  101. package/dist/cjs/components/time-input/time-input.js +1 -1
  102. package/dist/cjs/components/time-input/time-input.js.map +1 -1
  103. package/dist/cjs/components/toast/toast.js +1 -1
  104. package/dist/cjs/components/toast/toast.js.map +1 -1
  105. package/dist/cjs/components/tooltip/tooltip.js +1 -1
  106. package/dist/cjs/components/tooltip/tooltip.js.map +1 -1
  107. package/dist/cjs/index.d.ts +9 -0
  108. package/dist/cjs/index.js +20 -1
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/types.d.ts +5 -0
  111. package/dist/cjs/types.js +3 -0
  112. package/dist/cjs/types.js.map +1 -0
  113. package/dist/esm/components/badge/badge.d.ts +16 -5
  114. package/dist/esm/components/badge/badge.js +19 -31
  115. package/dist/esm/components/badge/badge.js.map +1 -1
  116. package/dist/esm/components/button/button.d.ts +1 -2
  117. package/dist/esm/components/button/button.js +12 -40
  118. package/dist/esm/components/button/button.js.map +1 -1
  119. package/dist/esm/components/calendar/calendar.js +5 -5
  120. package/dist/esm/components/calendar/calendar.js.map +1 -1
  121. package/dist/esm/components/checkbox/checkbox.js +1 -1
  122. package/dist/esm/components/checkbox/checkbox.js.map +1 -1
  123. package/dist/esm/components/code-block/code-block.d.ts +3 -5
  124. package/dist/esm/components/code-block/code-block.js +7 -7
  125. package/dist/esm/components/code-block/code-block.js.map +1 -1
  126. package/dist/esm/components/command-bar/command-bar.d.ts +22 -0
  127. package/dist/esm/components/command-bar/command-bar.js +59 -0
  128. package/dist/esm/components/command-bar/command-bar.js.map +1 -0
  129. package/dist/esm/components/command-bar/index.d.ts +1 -0
  130. package/dist/esm/components/command-bar/index.js +2 -0
  131. package/dist/esm/components/command-bar/index.js.map +1 -0
  132. package/dist/esm/components/container/container.d.ts +1 -1
  133. package/dist/esm/components/container/container.js.map +1 -1
  134. package/dist/esm/components/currency-input/currency-input.d.ts +21 -0
  135. package/dist/esm/components/currency-input/currency-input.js +54 -0
  136. package/dist/esm/components/currency-input/currency-input.js.map +1 -0
  137. package/dist/esm/components/currency-input/index.d.ts +1 -0
  138. package/dist/esm/components/currency-input/index.js +2 -0
  139. package/dist/esm/components/currency-input/index.js.map +1 -0
  140. package/dist/esm/components/date-picker/date-picker.d.ts +1 -1
  141. package/dist/esm/components/date-picker/date-picker.js +139 -53
  142. package/dist/esm/components/date-picker/date-picker.js.map +1 -1
  143. package/dist/esm/components/drawer/drawer.d.ts +13 -15
  144. package/dist/esm/components/drawer/drawer.js +53 -44
  145. package/dist/esm/components/drawer/drawer.js.map +1 -1
  146. package/dist/esm/components/dropdown-menu/dropdown-menu.js +7 -7
  147. package/dist/esm/components/dropdown-menu/dropdown-menu.js.map +1 -1
  148. package/dist/esm/components/focus-modal/focus-modal.d.ts +9 -12
  149. package/dist/esm/components/focus-modal/focus-modal.js +39 -35
  150. package/dist/esm/components/focus-modal/focus-modal.js.map +1 -1
  151. package/dist/esm/components/heading/heading.js +3 -3
  152. package/dist/esm/components/heading/heading.js.map +1 -1
  153. package/dist/esm/components/hint/hint.d.ts +1 -1
  154. package/dist/esm/components/icon-badge/icon-badge.d.ts +20 -0
  155. package/dist/esm/components/icon-badge/icon-badge.js +20 -0
  156. package/dist/esm/components/icon-badge/icon-badge.js.map +1 -0
  157. package/dist/esm/components/icon-badge/index.d.ts +1 -0
  158. package/dist/esm/components/icon-badge/index.js +2 -0
  159. package/dist/esm/components/icon-badge/index.js.map +1 -0
  160. package/dist/esm/components/icon-button/icon-button.d.ts +21 -0
  161. package/dist/esm/components/icon-button/icon-button.js +43 -0
  162. package/dist/esm/components/icon-button/icon-button.js.map +1 -0
  163. package/dist/esm/components/icon-button/index.d.ts +1 -0
  164. package/dist/esm/components/icon-button/index.js +2 -0
  165. package/dist/esm/components/icon-button/index.js.map +1 -0
  166. package/dist/esm/components/input/input.js +6 -6
  167. package/dist/esm/components/input/input.js.map +1 -1
  168. package/dist/esm/components/kbd/kbd.d.ts +1 -1
  169. package/dist/esm/components/kbd/kbd.js +4 -3
  170. package/dist/esm/components/kbd/kbd.js.map +1 -1
  171. package/dist/esm/components/progress-accordion/index.d.ts +1 -0
  172. package/dist/esm/components/progress-accordion/index.js +2 -0
  173. package/dist/esm/components/progress-accordion/index.js.map +1 -0
  174. package/dist/esm/components/progress-accordion/progress-accordion.d.ts +19 -0
  175. package/dist/esm/components/progress-accordion/progress-accordion.js +50 -0
  176. package/dist/esm/components/progress-accordion/progress-accordion.js.map +1 -0
  177. package/dist/esm/components/progress-tabs/index.d.ts +1 -0
  178. package/dist/esm/components/progress-tabs/index.js +2 -0
  179. package/dist/esm/components/progress-tabs/index.js.map +1 -0
  180. package/dist/esm/components/progress-tabs/progress-tabs.d.ts +15 -0
  181. package/dist/esm/components/progress-tabs/progress-tabs.js +42 -0
  182. package/dist/esm/components/progress-tabs/progress-tabs.js.map +1 -0
  183. package/dist/esm/components/prompt/prompt.js +3 -3
  184. package/dist/esm/components/prompt/prompt.js.map +1 -1
  185. package/dist/esm/components/radio-group/radio-group.d.ts +5 -0
  186. package/dist/esm/components/radio-group/radio-group.js +25 -4
  187. package/dist/esm/components/radio-group/radio-group.js.map +1 -1
  188. package/dist/esm/components/select/select.js +5 -9
  189. package/dist/esm/components/select/select.js.map +1 -1
  190. package/dist/esm/components/status-badge/index.d.ts +1 -0
  191. package/dist/esm/components/status-badge/index.js +2 -0
  192. package/dist/esm/components/status-badge/index.js.map +1 -0
  193. package/dist/esm/components/status-badge/status-badge.d.ts +6 -0
  194. package/dist/esm/components/status-badge/status-badge.js +19 -0
  195. package/dist/esm/components/status-badge/status-badge.js.map +1 -0
  196. package/dist/esm/components/switch/switch.js +1 -1
  197. package/dist/esm/components/switch/switch.js.map +1 -1
  198. package/dist/esm/components/table/table.js +6 -7
  199. package/dist/esm/components/table/table.js.map +1 -1
  200. package/dist/esm/components/tabs/index.d.ts +1 -0
  201. package/dist/esm/components/tabs/index.js +2 -0
  202. package/dist/esm/components/tabs/index.js.map +1 -0
  203. package/dist/esm/components/tabs/tabs.d.ts +11 -0
  204. package/dist/esm/components/tabs/tabs.js +21 -0
  205. package/dist/esm/components/tabs/tabs.js.map +1 -0
  206. package/dist/esm/components/text/text.d.ts +1 -0
  207. package/dist/esm/components/text/text.js +64 -7
  208. package/dist/esm/components/text/text.js.map +1 -1
  209. package/dist/esm/components/textarea/textarea.js +1 -1
  210. package/dist/esm/components/textarea/textarea.js.map +1 -1
  211. package/dist/esm/components/time-input/time-input.js +1 -1
  212. package/dist/esm/components/time-input/time-input.js.map +1 -1
  213. package/dist/esm/components/toast/toast.js +1 -1
  214. package/dist/esm/components/toast/toast.js.map +1 -1
  215. package/dist/esm/components/tooltip/tooltip.js +1 -1
  216. package/dist/esm/components/tooltip/tooltip.js.map +1 -1
  217. package/dist/esm/index.d.ts +9 -0
  218. package/dist/esm/index.js +10 -0
  219. package/dist/esm/index.js.map +1 -1
  220. package/dist/esm/types.d.ts +5 -0
  221. package/dist/esm/types.js +2 -0
  222. package/dist/esm/types.js.map +1 -0
  223. package/package.json +13 -6
@@ -5,16 +5,16 @@ import * as Primitives from "@radix-ui/react-popover";
5
5
  import { format } from "date-fns";
6
6
  import * as React from "react";
7
7
  import { Button } from "../button";
8
- import { Calendar } from "../calendar";
8
+ import { Calendar as CalendarPrimitive } from "../calendar";
9
9
  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 border-ui-border-base transition-fg shadow-buttons-neutral flex w-full items-center gap-x-2 rounded-md border outline-none", "hover:bg-ui-bg-field-hover", "focus:border-ui-border-interactive focus:shadow-borders-active data-[state=open]:shadow-borders-active data-[state=open]:border-ui-border-interactive", "disabled:bg-ui-bg-disabled disabled:text-ui-fg-disabled disabled:shadow-none", "aria-[invalid=true]:!border-ui-border-error aria-[invalid=true]:!shadow-borders-error"), {
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: "text-compact-small txt-compact-medium h-10 px-3 py-[9px]",
17
- small: "text-compact-medium txt-compact-small h-8 px-2 py-[5px]",
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: {
@@ -24,12 +24,13 @@ const displayVariants = cva(clx("text-ui-fg-base bg-ui-bg-field border-ui-border
24
24
  const Display = React.forwardRef(({ className, children, placeholder, size = "base", ...props }, ref) => {
25
25
  return (React.createElement(Primitives.Trigger, { asChild: true },
26
26
  React.createElement("button", { ref: ref, className: clx(displayVariants({ size }), className), ...props },
27
- React.createElement(CalendarIcon, { className: "text-ui-fg-muted h-5 w-5" }),
28
- React.createElement("span", { className: "w-full overflow-hidden text-ellipsis whitespace-nowrap text-left" }, children ? (children) : placeholder ? (React.createElement("span", { className: "text-ui-fg-muted" }, placeholder)) : null))));
27
+ React.createElement(CalendarIcon, { className: "text-ui-fg-muted" }),
28
+ React.createElement("span", { className: "flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-left" }, children ? (children) : placeholder ? (React.createElement("span", { className: "text-ui-fg-muted" }, placeholder)) : null))));
29
29
  });
30
30
  Display.displayName = "DatePicker.Display";
31
31
  const Flyout = React.forwardRef(({ className, children, ...props }, ref) => {
32
- return (React.createElement(Primitives.Content, { ref: ref, sideOffset: 8, align: "center", className: clx("txt-compact-small shadow-elevation-flyout bg-ui-bg-base z-30 rounded-lg", "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", "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 }, children));
32
+ return (React.createElement(Primitives.Portal, null,
33
+ React.createElement(Primitives.Content, { ref: ref, sideOffset: 8, align: "center", className: clx("txt-compact-small shadow-elevation-flyout bg-ui-bg-base w-fit rounded-lg", "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", "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 }, children)));
33
34
  });
34
35
  Flyout.displayName = "DatePicker.Flyout";
35
36
  const PresetContainer = ({ presets, onSelect, currentValue, }) => {
@@ -106,16 +107,22 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
106
107
  const [open, setOpen] = React.useState(false);
107
108
  const [date, setDate] = React.useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
108
109
  const [month, setMonth] = React.useState(date);
109
- const time = React.useMemo(() => {
110
- var _a, _b;
111
- const hour = (_a = date === null || date === void 0 ? void 0 : date.getHours()) !== null && _a !== void 0 ? _a : 0;
112
- const minute = (_b = date === null || date === void 0 ? void 0 : date.getMinutes()) !== null && _b !== void 0 ? _b : 0;
113
- return new Time(hour, minute, 0);
114
- }, [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));
115
115
  const initialDate = React.useMemo(() => {
116
116
  return date;
117
117
  // eslint-disable-next-line react-hooks/exhaustive-deps
118
118
  }, [open]);
119
+ /**
120
+ * Update the date when the value changes.
121
+ */
122
+ React.useEffect(() => {
123
+ var _a;
124
+ setDate((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
125
+ }, [value, defaultValue]);
119
126
  React.useEffect(() => {
120
127
  if (date) {
121
128
  setMonth(date);
@@ -127,23 +134,57 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
127
134
  }
128
135
  // eslint-disable-next-line react-hooks/exhaustive-deps
129
136
  }, [open]);
130
- const handleCancel = () => {
137
+ const onCancel = () => {
131
138
  setDate(initialDate);
139
+ setTime(new Time(0, 0));
132
140
  setOpen(false);
133
141
  };
134
- const handleDateChange = (date) => {
135
- setDate(date);
136
- onChange === null || onChange === void 0 ? void 0 : onChange(date);
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
+ }
137
164
  };
138
- const handleTimeChange = (time) => {
139
- if (date) {
140
- const newDate = new Date(date.getTime());
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 {
141
183
  newDate.setHours(time.hour);
142
184
  newDate.setMinutes(time.minute);
143
- newDate.setSeconds(time.second);
144
- setDate(newDate);
145
- onChange === null || onChange === void 0 ? void 0 : onChange(newDate);
146
185
  }
186
+ setDate(newDate);
187
+ onChange === null || onChange === void 0 ? void 0 : onChange(newDate);
147
188
  };
148
189
  const formattedDate = React.useMemo(() => {
149
190
  if (!date) {
@@ -158,13 +199,13 @@ const SingleDatePicker = ({ defaultValue, value, size = "base", onChange, preset
158
199
  React.createElement("div", { className: "flex items-start" },
159
200
  presets && presets.length > 0 && (React.createElement("div", { className: "relative h-full w-[160px] border-r" },
160
201
  React.createElement("div", { className: "absolute inset-0 overflow-y-scroll p-3" },
161
- React.createElement(PresetContainer, { currentValue: date, presets: presets, onSelect: handleDateChange })))),
202
+ React.createElement(PresetContainer, { currentValue: date, presets: presets, onSelect: onDateChange })))),
162
203
  React.createElement("div", null,
163
- React.createElement(Calendar, { mode: "single", month: month, onMonthChange: setMonth, selected: date, onSelect: handleDateChange, disabled: disabled, ...props }),
204
+ React.createElement(CalendarPrimitive, { mode: "single", month: month, onMonthChange: setMonth, selected: date, onSelect: onDateChange, disabled: disabled, ...props }),
164
205
  showTimePicker && (React.createElement("div", { className: "border-ui-border-base border-t p-3" },
165
- React.createElement(TimeInput, { "aria-label": "Time", onChange: handleTimeChange, isDisabled: !date, value: time, isRequired: props.required }))),
206
+ React.createElement(TimeInput, { "aria-label": "Time", onChange: onTimeChange, isDisabled: !date, value: time, isRequired: props.required }))),
166
207
  React.createElement("div", { className: "border-ui-border-base flex items-center gap-x-2 border-t p-3" },
167
- React.createElement(Button, { variant: "secondary", className: "w-full", type: "button", onClick: handleCancel }, "Cancel"),
208
+ React.createElement(Button, { variant: "secondary", className: "w-full", type: "button", onClick: onCancel }, "Cancel"),
168
209
  React.createElement(Button, { variant: "primary", className: "w-full", type: "button", onClick: () => setOpen(false) }, "Apply"))))))));
169
210
  };
170
211
  const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTimePicker, presets, disabled, className, ...props }) => {
@@ -172,21 +213,27 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
172
213
  const [open, setOpen] = React.useState(false);
173
214
  const [range, setRange] = React.useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
174
215
  const [month, setMonth] = React.useState(range === null || range === void 0 ? void 0 : range.from);
175
- const time = React.useMemo(() => {
176
- var _a, _b, _c, _d, _e, _f, _g, _h;
177
- const startHour = (_b = (_a = range === null || range === void 0 ? void 0 : range.from) === null || _a === void 0 ? void 0 : _a.getHours()) !== null && _b !== void 0 ? _b : 0;
178
- const startMinute = (_d = (_c = range === null || range === void 0 ? void 0 : range.from) === null || _c === void 0 ? void 0 : _c.getMinutes()) !== null && _d !== void 0 ? _d : 0;
179
- const endHour = (_f = (_e = range === null || range === void 0 ? void 0 : range.to) === null || _e === void 0 ? void 0 : _e.getHours()) !== null && _f !== void 0 ? _f : 0;
180
- const endMinute = (_h = (_g = range === null || range === void 0 ? void 0 : range.to) === null || _g === void 0 ? void 0 : _g.getMinutes()) !== null && _h !== void 0 ? _h : 0;
181
- return {
182
- start: new Time(startHour, startMinute, 0),
183
- end: new Time(endHour, endMinute, 0),
184
- };
185
- }, [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));
186
226
  const initialRange = React.useMemo(() => {
187
227
  return range;
188
228
  // eslint-disable-next-line react-hooks/exhaustive-deps
189
229
  }, [open]);
230
+ /**
231
+ * Update the range when the value changes.
232
+ */
233
+ React.useEffect(() => {
234
+ var _a;
235
+ setRange((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : undefined);
236
+ }, [value, defaultValue]);
190
237
  React.useEffect(() => {
191
238
  if (range) {
192
239
  setMonth(range.from);
@@ -198,15 +245,42 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
198
245
  }
199
246
  // eslint-disable-next-line react-hooks/exhaustive-deps
200
247
  }, [open]);
201
- const handleRangeChange = (range) => {
202
- setRange(range);
203
- onChange === null || onChange === void 0 ? void 0 : onChange(range);
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);
204
268
  };
205
- const handleCancel = () => {
269
+ const onCancel = () => {
206
270
  setRange(initialRange);
271
+ setStartTime(new Time(0, 0));
272
+ setEndTime(new Time(0, 0));
207
273
  setOpen(false);
208
274
  };
209
- const handleTimeChange = (time, pos) => {
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
+ }
210
284
  if (!range) {
211
285
  return;
212
286
  }
@@ -215,8 +289,14 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
215
289
  return;
216
290
  }
217
291
  const newDate = new Date(range.from.getTime());
218
- newDate.setHours(time.hour);
219
- newDate.setMinutes(time.minute);
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
+ }
220
300
  setRange({
221
301
  ...range,
222
302
  from: newDate,
@@ -227,8 +307,14 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
227
307
  return;
228
308
  }
229
309
  const newDate = new Date(range.to.getTime());
230
- newDate.setHours(time.hour);
231
- newDate.setMinutes(time.minute);
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
+ }
232
318
  setRange({
233
319
  ...range,
234
320
  to: newDate,
@@ -248,26 +334,26 @@ const RangeDatePicker = ({ defaultValue, value, onChange, size = "base", showTim
248
334
  React.createElement("div", { className: "flex items-start" },
249
335
  presets && presets.length > 0 && (React.createElement("div", { className: "relative h-full w-[160px] border-r" },
250
336
  React.createElement("div", { className: "absolute inset-0 overflow-y-scroll p-3" },
251
- React.createElement(PresetContainer, { currentValue: range, presets: presets, onSelect: handleRangeChange })))),
337
+ React.createElement(PresetContainer, { currentValue: range, presets: presets, onSelect: onRangeChange })))),
252
338
  React.createElement("div", null,
253
- React.createElement(Calendar, { mode: "range", selected: range, onSelect: handleRangeChange, month: month, onMonthChange: setMonth, numberOfMonths: 2, disabled: disabled, classNames: {
254
- months: "flex flex-col sm:flex-row divide-y sm:divide-y-0 sm:divide-x divide-ui-border-base",
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",
255
341
  }, ...props }),
256
342
  showTimePicker && (React.createElement("div", { className: "border-ui-border-base flex items-center justify-evenly gap-x-3 border-t p-3" },
257
343
  React.createElement("div", { className: "flex flex-1 items-center gap-x-2" },
258
344
  React.createElement("span", { className: "text-ui-fg-subtle" }, "Start:"),
259
- React.createElement(TimeInput, { value: time.start, onChange: (v) => handleTimeChange(v, "start"), "aria-label": "Start date time", isDisabled: !(range === null || range === void 0 ? void 0 : range.from), isRequired: props.required })),
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 })),
260
346
  React.createElement(Minus, { className: "text-ui-fg-muted" }),
261
347
  React.createElement("div", { className: "flex flex-1 items-center gap-x-2" },
262
348
  React.createElement("span", { className: "text-ui-fg-subtle" }, "End:"),
263
- React.createElement(TimeInput, { value: time.end, onChange: (v) => handleTimeChange(v, "end"), "aria-label": "End date time", isDisabled: !(range === null || range === void 0 ? void 0 : range.to), isRequired: props.required })))),
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 })))),
264
350
  React.createElement("div", { className: "flex items-center justify-between border-t p-3" },
265
351
  React.createElement("p", { className: clx("text-ui-fg-subtle txt-compact-small-plus") },
266
352
  React.createElement("span", { className: "text-ui-fg-muted" }, "Range:"),
267
353
  " ",
268
354
  displayRange),
269
355
  React.createElement("div", { className: "flex items-center gap-x-2" },
270
- React.createElement(Button, { variant: "secondary", type: "button", onClick: handleCancel }, "Cancel"),
356
+ React.createElement(Button, { variant: "secondary", type: "button", onClick: onCancel }, "Cancel"),
271
357
  React.createElement(Button, { variant: "primary", type: "button", onClick: () => setOpen(false) }, "Apply")))))))));
272
358
  };
273
359
  const validatePresets = (presets, 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\"\nimport type { DateRange } from \"react-day-picker\"\n\nimport { Button } from \"@/components/button\"\nimport { Calendar } from \"@/components/calendar\"\nimport { TimeInput } from \"@/components/time-input\"\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 h-5 w-5\" />\n <span className=\"w-full 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.Content\n ref={ref}\n sideOffset={8}\n align=\"center\"\n className={clx(\n \"txt-compact-small shadow-elevation-flyout bg-ui-bg-base z-30 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 )\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 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 <Calendar\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 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\">\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 <Calendar\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:\n \"flex flex-col sm:flex-row divide-y sm:divide-y-0 sm: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>{\" \"}\n {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 </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"]}
@@ -1,21 +1,19 @@
1
- import * as Primitives from "@radix-ui/react-dialog";
1
+ import * as DrawerPrimitives from "@radix-ui/react-dialog";
2
2
  import * as React from "react";
3
- export declare const Drawer: React.FC<Primitives.DialogProps> & {
4
- Body: {
5
- ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
6
- displayName: string;
7
- };
8
- Close: React.ForwardRefExoticComponent<Primitives.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
9
- Content: React.ForwardRefExoticComponent<Omit<Primitives.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
- Description: React.ForwardRefExoticComponent<Omit<Primitives.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
3
+ declare const Drawer: {
4
+ (props: React.ComponentPropsWithoutRef<typeof DrawerPrimitives.Root>): React.JSX.Element;
5
+ displayName: string;
6
+ } & {
7
+ Body: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ Close: React.ForwardRefExoticComponent<Omit<DrawerPrimitives.DialogCloseProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
9
+ Content: React.ForwardRefExoticComponent<Omit<DrawerPrimitives.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ Description: React.ForwardRefExoticComponent<Omit<DrawerPrimitives.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
11
11
  Footer: {
12
12
  ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
13
13
  displayName: string;
14
14
  };
15
- Header: {
16
- ({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
17
- displayName: string;
18
- };
19
- Title: React.ForwardRefExoticComponent<Omit<Primitives.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
20
- Trigger: React.ForwardRefExoticComponent<Primitives.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
15
+ Header: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
16
+ Title: React.ForwardRefExoticComponent<Omit<DrawerPrimitives.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
17
+ Trigger: React.ForwardRefExoticComponent<Omit<DrawerPrimitives.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
21
18
  };
19
+ export { Drawer };