@brycks/core-front 0.3.5 → 0.5.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 (168) hide show
  1. package/dist/components/data/List/List.cjs +1 -1
  2. package/dist/components/data/List/List.cjs.map +1 -1
  3. package/dist/components/data/List/List.js +1 -1
  4. package/dist/components/data/List/List.js.map +1 -1
  5. package/dist/components/data/Table/Table.cjs +1 -1
  6. package/dist/components/data/Table/Table.cjs.map +1 -1
  7. package/dist/components/data/Table/Table.js +196 -166
  8. package/dist/components/data/Table/Table.js.map +1 -1
  9. package/dist/components/data/TreeView/TreeView.cjs +1 -1
  10. package/dist/components/data/TreeView/TreeView.cjs.map +1 -1
  11. package/dist/components/data/TreeView/TreeView.js +1 -1
  12. package/dist/components/data/TreeView/TreeView.js.map +1 -1
  13. package/dist/components/data.cjs +1 -1
  14. package/dist/components/data.js +23 -21
  15. package/dist/components/feedback/Alert/Alert.cjs +1 -1
  16. package/dist/components/feedback/Alert/Alert.cjs.map +1 -1
  17. package/dist/components/feedback/Alert/Alert.js +20 -19
  18. package/dist/components/feedback/Alert/Alert.js.map +1 -1
  19. package/dist/components/feedback/Banner/Banner.cjs +2 -0
  20. package/dist/components/feedback/Banner/Banner.cjs.map +1 -0
  21. package/dist/components/feedback/Banner/Banner.js +77 -0
  22. package/dist/components/feedback/Banner/Banner.js.map +1 -0
  23. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs +2 -0
  24. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs.map +1 -0
  25. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +68 -0
  26. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -0
  27. package/dist/components/feedback/Drawer/Drawer.cjs +2 -2
  28. package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -1
  29. package/dist/components/feedback/Drawer/Drawer.js +58 -57
  30. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  31. package/dist/components/feedback/Modal/Modal.cjs +1 -1
  32. package/dist/components/feedback/Modal/Modal.cjs.map +1 -1
  33. package/dist/components/feedback/Modal/Modal.js +101 -91
  34. package/dist/components/feedback/Modal/Modal.js.map +1 -1
  35. package/dist/components/feedback/Popover/Popover.cjs +2 -2
  36. package/dist/components/feedback/Popover/Popover.cjs.map +1 -1
  37. package/dist/components/feedback/Popover/Popover.js +93 -85
  38. package/dist/components/feedback/Popover/Popover.js.map +1 -1
  39. package/dist/components/feedback/Toast/Toast.cjs +2 -2
  40. package/dist/components/feedback/Toast/Toast.cjs.map +1 -1
  41. package/dist/components/feedback/Toast/Toast.js +102 -93
  42. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  43. package/dist/components/feedback.cjs +1 -1
  44. package/dist/components/feedback.js +17 -13
  45. package/dist/components/feedback.js.map +1 -1
  46. package/dist/components/form/Combobox/Combobox.cjs +2 -2
  47. package/dist/components/form/Combobox/Combobox.cjs.map +1 -1
  48. package/dist/components/form/Combobox/Combobox.js +187 -167
  49. package/dist/components/form/Combobox/Combobox.js.map +1 -1
  50. package/dist/components/form/DateInput/DateInput.cjs +1 -1
  51. package/dist/components/form/DateInput/DateInput.cjs.map +1 -1
  52. package/dist/components/form/DateInput/DateInput.js +2 -2
  53. package/dist/components/form/DateInput/DateInput.js.map +1 -1
  54. package/dist/components/form/DateRangePicker/DateRangePicker.cjs +1 -1
  55. package/dist/components/form/DateRangePicker/DateRangePicker.cjs.map +1 -1
  56. package/dist/components/form/DateRangePicker/DateRangePicker.js +34 -34
  57. package/dist/components/form/DateRangePicker/DateRangePicker.js.map +1 -1
  58. package/dist/components/form/DropZone/DropZone.cjs +1 -1
  59. package/dist/components/form/DropZone/DropZone.cjs.map +1 -1
  60. package/dist/components/form/DropZone/DropZone.js +10 -10
  61. package/dist/components/form/DropZone/DropZone.js.map +1 -1
  62. package/dist/components/form/FileInput/FileInput.cjs +1 -1
  63. package/dist/components/form/FileInput/FileInput.cjs.map +1 -1
  64. package/dist/components/form/FileInput/FileInput.js +1 -1
  65. package/dist/components/form/FileInput/FileInput.js.map +1 -1
  66. package/dist/components/form/FormCard/FormCard.cjs +1 -1
  67. package/dist/components/form/FormCard/FormCard.cjs.map +1 -1
  68. package/dist/components/form/FormCard/FormCard.js +9 -9
  69. package/dist/components/form/FormCard/FormCard.js.map +1 -1
  70. package/dist/components/form/FormField/FormField.cjs +1 -1
  71. package/dist/components/form/FormField/FormField.cjs.map +1 -1
  72. package/dist/components/form/FormField/FormField.js +67 -55
  73. package/dist/components/form/FormField/FormField.js.map +1 -1
  74. package/dist/components/form/MultiSelect/MultiSelect.cjs +1 -1
  75. package/dist/components/form/MultiSelect/MultiSelect.cjs.map +1 -1
  76. package/dist/components/form/MultiSelect/MultiSelect.js +2 -3
  77. package/dist/components/form/MultiSelect/MultiSelect.js.map +1 -1
  78. package/dist/components/form/Radio/Radio.cjs +1 -1
  79. package/dist/components/form/Radio/Radio.cjs.map +1 -1
  80. package/dist/components/form/Radio/Radio.js +20 -20
  81. package/dist/components/form/Radio/Radio.js.map +1 -1
  82. package/dist/components/form/SearchInput/SearchInput.cjs +2 -0
  83. package/dist/components/form/SearchInput/SearchInput.cjs.map +1 -0
  84. package/dist/components/form/SearchInput/SearchInput.js +68 -0
  85. package/dist/components/form/SearchInput/SearchInput.js.map +1 -0
  86. package/dist/components/form/TagInput/TagInput.cjs +1 -1
  87. package/dist/components/form/TagInput/TagInput.cjs.map +1 -1
  88. package/dist/components/form/TagInput/TagInput.js +104 -102
  89. package/dist/components/form/TagInput/TagInput.js.map +1 -1
  90. package/dist/components/form/TimePicker/TimePicker.cjs +1 -1
  91. package/dist/components/form/TimePicker/TimePicker.cjs.map +1 -1
  92. package/dist/components/form/TimePicker/TimePicker.js +29 -30
  93. package/dist/components/form/TimePicker/TimePicker.js.map +1 -1
  94. package/dist/components/form.cjs +1 -1
  95. package/dist/components/form.js +15 -13
  96. package/dist/components/form.js.map +1 -1
  97. package/dist/components/layout/Card/Card.cjs +1 -1
  98. package/dist/components/layout/Card/Card.cjs.map +1 -1
  99. package/dist/components/layout/Card/Card.js +7 -5
  100. package/dist/components/layout/Card/Card.js.map +1 -1
  101. package/dist/components/layout/Collapse/Collapse.cjs.map +1 -1
  102. package/dist/components/layout/Collapse/Collapse.js.map +1 -1
  103. package/dist/components/media/Image/Image.cjs +1 -1
  104. package/dist/components/media/Image/Image.cjs.map +1 -1
  105. package/dist/components/media/Image/Image.js +9 -9
  106. package/dist/components/media/Image/Image.js.map +1 -1
  107. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +1 -1
  108. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -1
  109. package/dist/components/media/ImageThumbnail/ImageThumbnail.js +6 -6
  110. package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -1
  111. package/dist/components/navigation/Accordion/Accordion.cjs +1 -1
  112. package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -1
  113. package/dist/components/navigation/Accordion/Accordion.js +0 -1
  114. package/dist/components/navigation/Accordion/Accordion.js.map +1 -1
  115. package/dist/components/navigation/Menu/Menu.cjs +1 -1
  116. package/dist/components/navigation/Menu/Menu.cjs.map +1 -1
  117. package/dist/components/navigation/Menu/Menu.js +87 -86
  118. package/dist/components/navigation/Menu/Menu.js.map +1 -1
  119. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  120. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  121. package/dist/components/navigation/Pagination/Pagination.js +107 -99
  122. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  123. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs +2 -0
  124. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs.map +1 -0
  125. package/dist/components/navigation/SegmentedControl/SegmentedControl.js +90 -0
  126. package/dist/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
  127. package/dist/components/navigation.cjs +1 -1
  128. package/dist/components/navigation.js +25 -23
  129. package/dist/components/navigation.js.map +1 -1
  130. package/dist/components/utility/Avatar/Avatar.cjs +1 -1
  131. package/dist/components/utility/Avatar/Avatar.cjs.map +1 -1
  132. package/dist/components/utility/Avatar/Avatar.js +18 -18
  133. package/dist/components/utility/Avatar/Avatar.js.map +1 -1
  134. package/dist/components/utility/Badge/Badge.cjs +1 -1
  135. package/dist/components/utility/Badge/Badge.cjs.map +1 -1
  136. package/dist/components/utility/Badge/Badge.js +31 -23
  137. package/dist/components/utility/Badge/Badge.js.map +1 -1
  138. package/dist/components/utility/Kbd/Kbd.cjs +2 -0
  139. package/dist/components/utility/Kbd/Kbd.cjs.map +1 -0
  140. package/dist/components/utility/Kbd/Kbd.js +20 -0
  141. package/dist/components/utility/Kbd/Kbd.js.map +1 -0
  142. package/dist/components/utility/Logo/Logo.cjs +1 -1
  143. package/dist/components/utility/Logo/Logo.cjs.map +1 -1
  144. package/dist/components/utility/Logo/Logo.js +21 -21
  145. package/dist/components/utility/Logo/Logo.js.map +1 -1
  146. package/dist/components/utility.cjs +1 -1
  147. package/dist/components/utility.js +9 -7
  148. package/dist/components/utility.js.map +1 -1
  149. package/dist/data.d.ts +34 -1
  150. package/dist/design-system/themes/ThemeProvider.cjs +1 -1
  151. package/dist/design-system/themes/ThemeProvider.cjs.map +1 -1
  152. package/dist/design-system/themes/ThemeProvider.js +46 -46
  153. package/dist/design-system/themes/ThemeProvider.js.map +1 -1
  154. package/dist/design-system/tokens/zIndex.cjs +1 -1
  155. package/dist/design-system/tokens/zIndex.cjs.map +1 -1
  156. package/dist/design-system/tokens/zIndex.js +2 -0
  157. package/dist/design-system/tokens/zIndex.js.map +1 -1
  158. package/dist/feedback.d.ts +75 -2
  159. package/dist/form.d.ts +41 -0
  160. package/dist/index.cjs +1 -1
  161. package/dist/index.d.ts +213 -3
  162. package/dist/index.js +177 -165
  163. package/dist/index.js.map +1 -1
  164. package/dist/navigation.d.ts +58 -0
  165. package/dist/styles.css +1 -1
  166. package/dist/tokens.d.ts +2 -0
  167. package/dist/utility.d.ts +19 -0
  168. package/package.json +2 -1
@@ -35,17 +35,17 @@ function Oe() {
35
35
  }
36
36
  const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n, o, 1).getDay(), P = (n, o) => !n || !o ? !1 : n.getFullYear() === o.getFullYear() && n.getMonth() === o.getMonth() && n.getDate() === o.getDate(), Ye = (n, o, d) => {
37
37
  if (!o || !d) return !1;
38
- const b = n.getTime();
39
- return b > o.getTime() && b < d.getTime();
38
+ const m = n.getTime();
39
+ return m > o.getTime() && m < d.getTime();
40
40
  }, Z = (n, o, d) => !!(o && n < o || d && n > d), Ae = Te(function({
41
41
  value: o,
42
42
  defaultValue: d = { start: null, end: null },
43
- onChange: b,
43
+ onChange: m,
44
44
  size: W = "md",
45
45
  minDate: M,
46
46
  maxDate: $,
47
47
  placeholder: _ = "Select date range",
48
- disabled: m = !1,
48
+ disabled: b = !1,
49
49
  isInvalid: B = !1,
50
50
  clearable: j = !0,
51
51
  presets: I,
@@ -54,46 +54,46 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
54
54
  className: te,
55
55
  testId: re
56
56
  }, x) {
57
- const [ne, oe] = f(d), [h, k] = f(!1), [F, O] = f(!1), [se, H] = f(() => {
57
+ const [ne, oe] = f(d), [p, k] = f(!1), [F, O] = f(!1), [se, H] = f(() => {
58
58
  const e = o?.start || d.start || /* @__PURE__ */ new Date();
59
59
  return { year: e.getFullYear(), month: e.getMonth() };
60
- }), [S, p] = f(!1), [N, Y] = f(null), D = ze(null), s = o !== void 0 ? o : ne, v = Pe[W], c = y(
60
+ }), [S, h] = f(!1), [N, Y] = f(null), D = ze(null), s = o !== void 0 ? o : ne, v = Pe[W], c = y(
61
61
  (e) => {
62
- o === void 0 && oe(e), b?.(e);
62
+ o === void 0 && oe(e), m?.(e);
63
63
  },
64
- [o, b]
64
+ [o, m]
65
65
  ), ae = y(
66
66
  (e) => {
67
- Z(e, M, $) || (!S || !s.start ? (c({ start: e, end: null }), p(!0)) : (e < s.start ? c({ start: e, end: s.start }) : c({ start: s.start, end: e }), p(!1), k(!1)));
67
+ Z(e, M, $) || (!S || !s.start ? (c({ start: e, end: null }), h(!0)) : (e < s.start ? c({ start: e, end: s.start }) : c({ start: s.start, end: e }), h(!1), k(!1)));
68
68
  },
69
69
  [S, s.start, M, $, c]
70
70
  ), ie = y(
71
71
  (e) => {
72
72
  const i = e.getValue();
73
- c(i), k(!1), p(!1);
73
+ c(i), k(!1), h(!1);
74
74
  },
75
75
  [c]
76
76
  ), le = y(
77
77
  (e) => {
78
- e.stopPropagation(), c({ start: null, end: null }), p(!1);
78
+ e.stopPropagation(), c({ start: null, end: null }), h(!1);
79
79
  },
80
80
  [c]
81
81
  ), de = y(
82
82
  (e) => {
83
- e.key === "Escape" && (k(!1), p(!1));
83
+ e.key === "Escape" && (k(!1), h(!1));
84
84
  },
85
85
  []
86
86
  );
87
87
  Q(() => {
88
- if (!h) return;
88
+ if (!p) return;
89
89
  const e = (i) => {
90
- D.current?.contains(i.target) || (k(!1), p(!1));
90
+ D.current?.contains(i.target) || (k(!1), h(!1));
91
91
  };
92
92
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
93
- }, [h]);
93
+ }, [p]);
94
94
  const [A, ce] = f({ top: 0, left: 0 });
95
95
  Q(() => {
96
- if (!h || !D.current) return;
96
+ if (!p || !D.current) return;
97
97
  const e = () => {
98
98
  const i = D.current.getBoundingClientRect();
99
99
  ce({
@@ -104,7 +104,7 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
104
104
  return e(), window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), () => {
105
105
  window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
106
106
  };
107
- }, [h]);
107
+ }, [p]);
108
108
  const ue = y(() => {
109
109
  H((e) => e.month === 0 ? { year: e.year - 1, month: 11 } : { ...e, month: e.month - 1 });
110
110
  }, []), ge = y(() => {
@@ -176,25 +176,25 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
176
176
  alignItems: "center",
177
177
  width: "100%",
178
178
  height: v.height,
179
- backgroundColor: m ? "var(--brycks-background-muted)" : "var(--brycks-background-default)",
179
+ backgroundColor: b ? "var(--brycks-background-muted)" : "var(--brycks-background-default)",
180
180
  border: `1px solid ${B ? "var(--brycks-error-default)" : F ? "var(--brycks-primary-default)" : "var(--brycks-border-default)"}`,
181
181
  borderRadius: "var(--brycks-radius-md)",
182
182
  transition: `all ${w.fast}ms ${C.easeOut}`,
183
- cursor: m ? "not-allowed" : "pointer",
183
+ cursor: b ? "not-allowed" : "pointer",
184
184
  boxShadow: F ? "var(--brycks-focus-ring)" : void 0,
185
185
  padding: `0 ${v.padding}px`,
186
186
  paddingRight: j && (s.start || s.end) ? r[10] : v.padding
187
- }, he = {
187
+ }, pe = {
188
188
  display: "flex",
189
189
  alignItems: "center",
190
190
  justifyContent: "center",
191
191
  marginRight: r[2],
192
192
  color: "var(--brycks-foreground-muted)"
193
- }, pe = {
193
+ }, he = {
194
194
  flex: 1,
195
195
  fontSize: v.fontSize,
196
196
  color: K ? "var(--brycks-foreground-default)" : "var(--brycks-foreground-muted)"
197
- }, be = {
197
+ }, me = {
198
198
  position: "absolute",
199
199
  right: v.padding,
200
200
  display: "flex",
@@ -206,7 +206,7 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
206
206
  cursor: "pointer",
207
207
  borderRadius: "var(--brycks-radius-sm)",
208
208
  transition: `all ${w.fast}ms ${C.easeOut}`
209
- }, me = {
209
+ }, be = {
210
210
  position: "absolute",
211
211
  top: A.top,
212
212
  left: A.left,
@@ -262,8 +262,8 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
262
262
  height: r[8],
263
263
  fontSize: g.sm,
264
264
  fontWeight: e ? 600 : 400,
265
- color: l ? "var(--brycks-foreground-disabled)" : e ? "white" : "var(--brycks-foreground-default)",
266
- backgroundColor: e ? "var(--brycks-primary-default)" : i ? "var(--brycks-primary-50)" : "transparent",
265
+ color: l ? "var(--brycks-foreground-disabled)" : e ? "var(--brycks-primary-foreground)" : "var(--brycks-foreground-default)",
266
+ backgroundColor: e ? "var(--brycks-primary-default)" : i ? "var(--brycks-primary-muted)" : "transparent",
267
267
  border: T && !e ? "1px solid var(--brycks-border-strong)" : "none",
268
268
  borderRadius: "var(--brycks-radius-md)",
269
269
  cursor: l ? "not-allowed" : "pointer",
@@ -304,24 +304,24 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
304
304
  "div",
305
305
  {
306
306
  role: "button",
307
- tabIndex: m ? -1 : 0,
307
+ tabIndex: b ? -1 : 0,
308
308
  "aria-label": ee,
309
- "aria-expanded": h,
309
+ "aria-expanded": p,
310
310
  "aria-haspopup": "dialog",
311
311
  "aria-invalid": B,
312
312
  style: ye,
313
- onClick: () => !m && k(!0),
313
+ onClick: () => !b && k(!0),
314
314
  onFocus: () => O(!0),
315
315
  onBlur: () => O(!1),
316
316
  children: [
317
- /* @__PURE__ */ t("span", { style: he, children: /* @__PURE__ */ t(Fe, {}) }),
318
- /* @__PURE__ */ t("span", { style: pe, children: K || _ }),
319
- j && (s.start || s.end) && !m && /* @__PURE__ */ t(
317
+ /* @__PURE__ */ t("span", { style: pe, children: /* @__PURE__ */ t(Fe, {}) }),
318
+ /* @__PURE__ */ t("span", { style: he, children: K || _ }),
319
+ j && (s.start || s.end) && !b && /* @__PURE__ */ t(
320
320
  "button",
321
321
  {
322
322
  type: "button",
323
323
  "aria-label": "Clear date range",
324
- style: be,
324
+ style: me,
325
325
  onClick: le,
326
326
  onMouseEnter: (e) => {
327
327
  e.currentTarget.style.backgroundColor = "var(--brycks-background-muted)", e.currentTarget.style.color = "var(--brycks-foreground-default)";
@@ -335,8 +335,8 @@ const He = (n, o) => new Date(n, o + 1, 0).getDate(), Ne = (n, o) => new Date(n,
335
335
  ]
336
336
  }
337
337
  ),
338
- h && Ee(
339
- /* @__PURE__ */ u("div", { role: "dialog", "aria-label": "Date range picker", style: me, children: [
338
+ p && Ee(
339
+ /* @__PURE__ */ u("div", { role: "dialog", "aria-label": "Date range picker", style: be, children: [
340
340
  J(0),
341
341
  J(1),
342
342
  I && I.length > 0 && /* @__PURE__ */ u("div", { style: xe, children: [
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sources":["../../../../src/components/form/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["/**\n * DateRangePicker Component\n *\n * A date range selection component with calendar UI.\n * Supports preset ranges and custom date selection.\n *\n * @module components/form/DateRangePicker\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentPaddingX } from '../../../design-system/primitives'\n\nexport type DateRangePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DateRange {\n start: Date | null\n end: Date | null\n}\n\nexport interface DateRangePreset {\n label: string\n getValue: () => DateRange\n}\n\nexport interface DateRangePickerProps {\n /** Current date range value */\n value?: DateRange\n /** Default date range value (uncontrolled) */\n defaultValue?: DateRange\n /** Callback when date range changes */\n onChange?: (value: DateRange) => void\n /** Component size */\n size?: DateRangePickerSize\n /** Minimum selectable date */\n minDate?: Date\n /** Maximum selectable date */\n maxDate?: Date\n /** Placeholder text */\n placeholder?: string\n /** Whether the input is disabled */\n disabled?: boolean\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Whether to allow clearing */\n clearable?: boolean\n /** Preset date ranges */\n presets?: DateRangePreset[]\n /** Date format display */\n dateFormat?: (date: Date) => string\n /** Label for accessibility */\n 'aria-label'?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateRangePickerSize, { height: number; fontSize: number; padding: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg },\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n\nconst defaultDateFormat = (date: Date): string => {\n return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`\n}\n\nfunction CalendarIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2 6h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 1v3M11 1v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={direction === 'left' ? 'M10 4l-4 4 4 4' : 'M6 4l4 4-4 4'}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst getDaysInMonth = (year: number, month: number): number => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number): number => {\n return new Date(year, month, 1).getDay()\n}\n\nconst isSameDay = (date1: Date | null, date2: Date | null): boolean => {\n if (!date1 || !date2) return false\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n )\n}\n\nconst isInRange = (date: Date, start: Date | null, end: Date | null): boolean => {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate && date < minDate) return true\n if (maxDate && date > maxDate) return true\n return false\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n {\n value: controlledValue,\n defaultValue = { start: null, end: null },\n onChange,\n size = 'md',\n minDate,\n maxDate,\n placeholder = 'Select date range',\n disabled = false,\n isInvalid = false,\n clearable = true,\n presets,\n dateFormat = defaultDateFormat,\n 'aria-label': ariaLabel = 'Select date range',\n className,\n testId,\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState<DateRange>(defaultValue)\n const [isOpen, setIsOpen] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const [viewDate, setViewDate] = useState(() => {\n const initial = controlledValue?.start || defaultValue.start || new Date()\n return { year: initial.getFullYear(), month: initial.getMonth() }\n })\n const [selectingEnd, setSelectingEnd] = useState(false)\n const [hoverDate, setHoverDate] = useState<Date | null>(null)\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n const updateValue = useCallback(\n (newValue: DateRange) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const handleDateClick = useCallback(\n (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return\n\n if (!selectingEnd || !value.start) {\n // Start new selection\n updateValue({ start: date, end: null })\n setSelectingEnd(true)\n } else {\n // Complete selection\n if (date < value.start) {\n updateValue({ start: date, end: value.start })\n } else {\n updateValue({ start: value.start, end: date })\n }\n setSelectingEnd(false)\n setIsOpen(false)\n }\n },\n [selectingEnd, value.start, minDate, maxDate, updateValue]\n )\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const newValue = preset.getValue()\n updateValue(newValue)\n setIsOpen(false)\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n updateValue({ start: null, end: null })\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n },\n []\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const goToPrevMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 0) {\n return { year: prev.year - 1, month: 11 }\n }\n return { ...prev, month: prev.month - 1 }\n })\n }, [])\n\n const goToNextMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 11) {\n return { year: prev.year + 1, month: 0 }\n }\n return { ...prev, month: prev.month + 1 }\n })\n }, [])\n\n // Generate calendar days\n const renderCalendar = (monthOffset: number = 0) => {\n let { year, month } = viewDate\n month += monthOffset\n if (month > 11) {\n month = 0\n year++\n }\n\n const daysInMonth = getDaysInMonth(year, month)\n const firstDay = getFirstDayOfMonth(year, month)\n const days: (Date | null)[] = []\n\n // Empty cells for days before the first day\n for (let i = 0; i < firstDay; i++) {\n days.push(null)\n }\n\n // Days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i))\n }\n\n const effectiveEnd = selectingEnd && hoverDate && value.start && !value.end ? hoverDate : value.end\n\n return (\n <div style={{ flex: 1 }}>\n <div style={calendarHeaderStyle}>\n {monthOffset === 0 && (\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n style={navButtonStyle}\n onClick={goToPrevMonth}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n )}\n <span style={{ fontWeight: 600 }}>\n {MONTHS[month]} {year}\n </span>\n {monthOffset === 1 && (\n <button\n type=\"button\"\n aria-label=\"Next month\"\n style={navButtonStyle}\n onClick={goToNextMonth}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n )}\n </div>\n <div style={daysHeaderStyle}>\n {DAYS.map((day) => (\n <div key={day} style={dayHeaderStyle}>\n {day}\n </div>\n ))}\n </div>\n <div style={daysGridStyle}>\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} style={dayStyle(false, false, false, false)} />\n }\n\n const isStart = isSameDay(date, value.start)\n const isEnd = isSameDay(date, effectiveEnd)\n const isRange = isInRange(date, value.start, effectiveEnd)\n const isDisabled = isDateDisabled(date, minDate, maxDate)\n\n return (\n <button\n key={date.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n style={dayStyle(isStart || isEnd, isRange, isDisabled, isSameDay(date, new Date()))}\n onClick={() => handleDateClick(date)}\n onMouseEnter={() => selectingEnd && setHoverDate(date)}\n onMouseLeave={() => setHoverDate(null)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayValue = value.start && value.end\n ? `${dateFormat(value.start)} - ${dateFormat(value.end)}`\n : value.start\n ? `${dateFormat(value.start)} - ...`\n : ''\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n padding: `0 ${config.padding}px`,\n paddingRight: clearable && (value.start || value.end) ? spacing[10] : config.padding,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: spacing[2],\n color: 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n flex: 1,\n fontSize: config.fontSize,\n color: displayValue ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n }\n\n const clearButtonStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[3],\n display: 'flex',\n gap: spacing[4],\n }\n\n const calendarHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: spacing[2],\n minHeight: spacing[8],\n fontSize: fontSizes.base,\n }\n\n const navButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[7],\n height: spacing[7],\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n color: 'var(--brycks-foreground-default)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const daysHeaderStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n marginBottom: spacing[1],\n }\n\n const dayHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: spacing[7],\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const daysGridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n }\n\n const dayStyle = (isSelected: boolean, isRange: boolean, isDisabled: boolean, isToday: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[8],\n height: spacing[8],\n fontSize: fontSizes.sm,\n fontWeight: isSelected ? 600 : 400,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isSelected\n ? 'white'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isSelected\n ? 'var(--brycks-primary-default)'\n : isRange\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n border: isToday && !isSelected ? '1px solid var(--brycks-border-strong)' : 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const presetsStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[1],\n borderLeft: '1px solid var(--brycks-border-default)',\n paddingLeft: spacing[3],\n minWidth: 140,\n }\n\n const presetButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: `${spacing[2]}px ${spacing[3]}px`,\n fontSize: fontSizes.sm,\n color: 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n textAlign: 'left',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-daterangepicker', `brycks-daterangepicker--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n >\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={isInvalid}\n style={inputWrapperStyle}\n onClick={() => !disabled && setIsOpen(true)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n <span style={iconStyle}>\n <CalendarIcon />\n </span>\n <span style={textStyle}>{displayValue || placeholder}</span>\n {clearable && (value.start || value.end) && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Clear date range\"\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {isOpen &&\n createPortal(\n <div role=\"dialog\" aria-label=\"Date range picker\" style={dropdownStyle}>\n {renderCalendar(0)}\n {renderCalendar(1)}\n {presets && presets.length > 0 && (\n <div style={presetsStyle}>\n <div style={{ fontSize: fontSizes.xs, fontWeight: 600, color: 'var(--brycks-foreground-muted)', marginBottom: spacing[1] }}>\n Presets\n </div>\n {presets.map((preset, index) => (\n <button\n key={index}\n type=\"button\"\n style={presetButtonStyle}\n onClick={() => handlePresetClick(preset)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n </div>,\n document.body\n )}\n </div>\n )\n})\n\nDateRangePicker.displayName = 'DateRangePicker'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","DAYS","MONTHS","defaultDateFormat","date","CalendarIcon","jsxs","jsx","ChevronIcon","direction","ClearIcon","getDaysInMonth","year","month","getFirstDayOfMonth","isSameDay","date1","date2","isInRange","start","end","time","isDateDisabled","minDate","maxDate","DateRangePicker","forwardRef","controlledValue","defaultValue","onChange","size","placeholder","disabled","isInvalid","clearable","presets","dateFormat","ariaLabel","className","testId","ref","internalValue","setInternalValue","useState","isOpen","setIsOpen","isFocused","setIsFocused","viewDate","setViewDate","initial","selectingEnd","setSelectingEnd","hoverDate","setHoverDate","containerRef","useRef","value","config","updateValue","useCallback","newValue","handleDateClick","handlePresetClick","preset","handleClear","handleKeyDown","useEffect","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","goToPrevMonth","prev","goToNextMonth","renderCalendar","monthOffset","daysInMonth","firstDay","days","i","effectiveEnd","calendarHeaderStyle","navButtonStyle","daysHeaderStyle","day","dayHeaderStyle","daysGridStyle","index","dayStyle","isStart","isEnd","isRange","isDisabled","displayValue","containerStyle","inputWrapperStyle","durations","easings","iconStyle","textStyle","clearButtonStyle","dropdownStyle","isSelected","isToday","presetsStyle","presetButtonStyle","node","cx","createPortal"],"mappings":";;;;;;;;AAoEA,MAAMA,KAAiG;AAAA,EACrG,IAAI,EAAE,QAAQC,EAAiB,IAAI,UAAUC,EAAU,OAAO,GAAG,SAASC,EAAkB,GAAA;AAAA,EAC5F,IAAI,EAAE,QAAQF,EAAiB,IAAI,UAAUC,EAAU,MAAM,SAASC,EAAkB,GAAA;AAAA,EACxF,IAAI,EAAE,QAAQF,EAAiB,IAAI,UAAUC,EAAU,IAAI,SAASC,EAAkB,GAAA;AACxF,GAEMC,KAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAChDC,KAAS,CAAC,WAAW,YAAY,SAAS,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU,GAElIC,KAAoB,CAACC,MAClB,GAAGA,EAAK,SAAA,IAAa,CAAC,IAAIA,EAAK,QAAA,CAAS,IAAIA,EAAK,YAAA,CAAa;AAGvE,SAASC,KAAe;AACtB,SACE,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,QAAO,gBAAe,aAAY,OAAM;AAAA,sBACvF,QAAA,EAAK,GAAE,WAAU,QAAO,gBAAe,aAAY,OAAM;AAAA,IAC1D,gBAAAA,EAAC,UAAK,GAAE,iBAAgB,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,EAAA,GACxF;AAEJ;AAEA,SAASC,EAAY,EAAE,WAAAC,KAA8C;AACnE,SACE,gBAAAF,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAGE,MAAc,SAAS,mBAAmB;AAAA,MAC7C,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB;AAEJ;AAEA,SAASC,KAAY;AACnB,SACE,gBAAAH,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ,EAAA,CAC7F;AAEJ;AAEA,MAAMI,KAAiB,CAACC,GAAcC,MAC7B,IAAI,KAAKD,GAAMC,IAAQ,GAAG,CAAC,EAAE,QAAA,GAGhCC,KAAqB,CAACF,GAAcC,MACjC,IAAI,KAAKD,GAAMC,GAAO,CAAC,EAAE,OAAA,GAG5BE,IAAY,CAACC,GAAoBC,MACjC,CAACD,KAAS,CAACC,IAAc,KAE3BD,EAAM,YAAA,MAAkBC,EAAM,YAAA,KAC9BD,EAAM,SAAA,MAAeC,EAAM,cAC3BD,EAAM,QAAA,MAAcC,EAAM,QAAA,GAIxBC,KAAY,CAACd,GAAYe,GAAoBC,MAA8B;AAC/E,MAAI,CAACD,KAAS,CAACC,EAAK,QAAO;AAC3B,QAAMC,IAAOjB,EAAK,QAAA;AAClB,SAAOiB,IAAOF,EAAM,QAAA,KAAaE,IAAOD,EAAI,QAAA;AAC9C,GAEME,IAAiB,CAAClB,GAAYmB,GAAgBC,MAC9C,GAAAD,KAAWnB,IAAOmB,KAClBC,KAAWpB,IAAOoB,IAIXC,KAAkBC,GAAiD,SAC9E;AAAA,EACE,OAAOC;AAAA,EACP,cAAAC,IAAe,EAAE,OAAO,MAAM,KAAK,KAAA;AAAA,EACnC,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAP;AAAA,EACA,SAAAC;AAAA,EACA,aAAAO,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,SAAAC;AAAA,EACA,YAAAC,IAAajC;AAAA,EACb,cAAckC,KAAY;AAAA,EAC1B,WAAAC;AAAA,EACA,QAAAC;AACF,GACAC,GACA;AACA,QAAM,CAACC,IAAeC,EAAgB,IAAIC,EAAoBf,CAAY,GACpE,CAACgB,GAAQC,CAAS,IAAIF,EAAS,EAAK,GACpC,CAACG,GAAWC,CAAY,IAAIJ,EAAS,EAAK,GAC1C,CAACK,IAAUC,CAAW,IAAIN,EAAS,MAAM;AAC7C,UAAMO,IAAUvB,GAAiB,SAASC,EAAa,6BAAa,KAAA;AACpE,WAAO,EAAE,MAAMsB,EAAQ,YAAA,GAAe,OAAOA,EAAQ,WAAS;AAAA,EAChE,CAAC,GACK,CAACC,GAAcC,CAAe,IAAIT,EAAS,EAAK,GAChD,CAACU,GAAWC,CAAY,IAAIX,EAAsB,IAAI,GAEtDY,IAAeC,GAAuB,IAAI,GAE1CC,IAAQ9B,MAAoB,SAAYA,IAAkBc,IAC1DiB,IAAS7D,GAAWiC,CAAI,GAExB6B,IAAcC;AAAA,IAClB,CAACC,MAAwB;AACvB,MAAIlC,MAAoB,UACtBe,GAAiBmB,CAAQ,GAE3BhC,IAAWgC,CAAQ;AAAA,IACrB;AAAA,IACA,CAAClC,GAAiBE,CAAQ;AAAA,EAAA,GAGtBiC,KAAkBF;AAAA,IACtB,CAACxD,MAAe;AACd,MAAIkB,EAAelB,GAAMmB,GAASC,CAAO,MAErC,CAAC2B,KAAgB,CAACM,EAAM,SAE1BE,EAAY,EAAE,OAAOvD,GAAM,KAAK,MAAM,GACtCgD,EAAgB,EAAI,MAGhBhD,IAAOqD,EAAM,QACfE,EAAY,EAAE,OAAOvD,GAAM,KAAKqD,EAAM,OAAO,IAE7CE,EAAY,EAAE,OAAOF,EAAM,OAAO,KAAKrD,GAAM,GAE/CgD,EAAgB,EAAK,GACrBP,EAAU,EAAK;AAAA,IAEnB;AAAA,IACA,CAACM,GAAcM,EAAM,OAAOlC,GAASC,GAASmC,CAAW;AAAA,EAAA,GAGrDI,KAAoBH;AAAA,IACxB,CAACI,MAA4B;AAC3B,YAAMH,IAAWG,EAAO,SAAA;AACxB,MAAAL,EAAYE,CAAQ,GACpBhB,EAAU,EAAK,GACfO,EAAgB,EAAK;AAAA,IACvB;AAAA,IACA,CAACO,CAAW;AAAA,EAAA,GAGRM,KAAcL;AAAA,IAClB,CAAC,MAAwB;AACvB,QAAE,gBAAA,GACFD,EAAY,EAAE,OAAO,MAAM,KAAK,MAAM,GACtCP,EAAgB,EAAK;AAAA,IACvB;AAAA,IACA,CAACO,CAAW;AAAA,EAAA,GAGRO,KAAgBN;AAAA,IACpB,CAAC,MAAqC;AACpC,MAAI,EAAE,QAAQ,aACZf,EAAU,EAAK,GACfO,EAAgB,EAAK;AAAA,IAEzB;AAAA,IACA,CAAA;AAAA,EAAC;AAIH,EAAAe,EAAU,MAAM;AACd,QAAI,CAACvB,EAAQ;AAEb,UAAMwB,IAAc,CAACC,MAAkB;AACrC,MAAKd,EAAa,SAAS,SAASc,EAAE,MAAc,MAClDxB,EAAU,EAAK,GACfO,EAAgB,EAAK;AAAA,IAEzB;AAEA,oBAAS,iBAAiB,aAAagB,CAAW,GAC3C,MAAM,SAAS,oBAAoB,aAAaA,CAAW;AAAA,EACpE,GAAG,CAACxB,CAAM,CAAC;AAGX,QAAM,CAAC0B,GAAkBC,EAAmB,IAAI5B,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG;AAE5E,EAAAwB,EAAU,MAAM;AACd,QAAI,CAACvB,KAAU,CAACW,EAAa,QAAS;AAEtC,UAAMiB,IAAiB,MAAM;AAC3B,YAAMC,IAAOlB,EAAa,QAAS,sBAAA;AACnC,MAAAgB,GAAoB;AAAA,QAClB,KAAKE,EAAK,SAAS,OAAO,UAAUC,EAAQ,CAAC;AAAA,QAC7C,MAAMD,EAAK,OAAO,OAAO;AAAA,MAAA,CAC1B;AAAA,IACH;AAEA,WAAAD,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAc,GAChD,OAAO,iBAAiB,UAAUA,GAAgB,EAAI,GAE/C,MAAM;AACX,aAAO,oBAAoB,UAAUA,CAAc,GACnD,OAAO,oBAAoB,UAAUA,GAAgB,EAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC5B,CAAM,CAAC;AAEX,QAAM+B,KAAgBf,EAAY,MAAM;AACtC,IAAAX,EAAY,CAAC2B,MACPA,EAAK,UAAU,IACV,EAAE,MAAMA,EAAK,OAAO,GAAG,OAAO,GAAA,IAEhC,EAAE,GAAGA,GAAM,OAAOA,EAAK,QAAQ,EAAA,CACvC;AAAA,EACH,GAAG,CAAA,CAAE,GAECC,KAAgBjB,EAAY,MAAM;AACtC,IAAAX,EAAY,CAAC2B,MACPA,EAAK,UAAU,KACV,EAAE,MAAMA,EAAK,OAAO,GAAG,OAAO,EAAA,IAEhC,EAAE,GAAGA,GAAM,OAAOA,EAAK,QAAQ,EAAA,CACvC;AAAA,EACH,GAAG,CAAA,CAAE,GAGCE,IAAiB,CAACC,IAAsB,MAAM;AAClD,QAAI,EAAE,MAAAnE,GAAM,OAAAC,EAAA,IAAUmC;AACtB,IAAAnC,KAASkE,GACLlE,IAAQ,OACVA,IAAQ,GACRD;AAGF,UAAMoE,IAAcrE,GAAeC,GAAMC,CAAK,GACxCoE,KAAWnE,GAAmBF,GAAMC,CAAK,GACzCqE,IAAwB,CAAA;AAG9B,aAASC,IAAI,GAAGA,IAAIF,IAAUE;AAC5B,MAAAD,EAAK,KAAK,IAAI;AAIhB,aAASC,IAAI,GAAGA,KAAKH,GAAaG;AAChC,MAAAD,EAAK,KAAK,IAAI,KAAKtE,GAAMC,GAAOsE,CAAC,CAAC;AAGpC,UAAMC,IAAejC,KAAgBE,KAAaI,EAAM,SAAS,CAACA,EAAM,MAAMJ,IAAYI,EAAM;AAEhG,6BACG,OAAA,EAAI,OAAO,EAAE,MAAM,KAClB,UAAA;AAAA,MAAA,gBAAAnD,EAAC,OAAA,EAAI,OAAO+E,IACT,UAAA;AAAA,QAAAN,MAAgB,KACf,gBAAAxE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,OAAO+E;AAAA,YACP,SAASX;AAAA,YAET,UAAA,gBAAApE,EAACC,GAAA,EAAY,WAAU,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,0BAGjC,QAAA,EAAK,OAAO,EAAE,YAAY,OACxB,UAAA;AAAA,UAAAN,GAAOW,CAAK;AAAA,UAAE;AAAA,UAAED;AAAA,QAAA,GACnB;AAAA,QACCmE,MAAgB,KACf,gBAAAxE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,OAAO+E;AAAA,YACP,SAAST;AAAA,YAET,UAAA,gBAAAtE,EAACC,GAAA,EAAY,WAAU,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACjC,GAEJ;AAAA,MACA,gBAAAD,EAAC,OAAA,EAAI,OAAOgF,IACT,aAAK,IAAI,CAACC,MACT,gBAAAjF,EAAC,SAAc,OAAOkF,IACnB,UAAAD,KADOA,CAEV,CACD,GACH;AAAA,MACA,gBAAAjF,EAAC,SAAI,OAAOmF,IACT,YAAK,IAAI,CAACtF,GAAMuF,OAAU;AACzB,YAAI,CAACvF;AACH,iBAAO,gBAAAG,EAAC,OAAA,EAA2B,OAAOqF,EAAS,IAAO,IAAO,IAAO,EAAK,EAAA,GAA5D,SAASD,EAAK,EAAiD;AAGlF,cAAME,KAAU9E,EAAUX,GAAMqD,EAAM,KAAK,GACrCqC,KAAQ/E,EAAUX,GAAMgF,CAAY,GACpCW,KAAU7E,GAAUd,GAAMqD,EAAM,OAAO2B,CAAY,GACnDY,IAAa1E,EAAelB,GAAMmB,GAASC,CAAO;AAExD,eACE,gBAAAjB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,UAAUyF;AAAA,YACV,OAAOJ,EAASC,MAAWC,IAAOC,IAASC,GAAYjF,EAAUX,GAAM,oBAAI,KAAA,CAAM,CAAC;AAAA,YAClF,SAAS,MAAM0D,GAAgB1D,CAAI;AAAA,YACnC,cAAc,MAAM+C,KAAgBG,EAAalD,CAAI;AAAA,YACrD,cAAc,MAAMkD,EAAa,IAAI;AAAA,YAEpC,YAAK,QAAA;AAAA,UAAQ;AAAA,UARTlD,EAAK,YAAA;AAAA,QAAY;AAAA,MAW5B,CAAC,EAAA,CACH;AAAA,IAAA,GACF;AAAA,EAEJ,GAEM6F,IAAexC,EAAM,SAASA,EAAM,MACtC,GAAGrB,EAAWqB,EAAM,KAAK,CAAC,MAAMrB,EAAWqB,EAAM,GAAG,CAAC,KACrDA,EAAM,QACN,GAAGrB,EAAWqB,EAAM,KAAK,CAAC,WAC1B,IAEEyC,KAAgC;AAAA,IACpC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,EAAA,GAGHC,KAAmC;AAAA,IACvC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQzC,EAAO;AAAA,IACf,iBAAiB1B,IAAW,mCAAmC;AAAA,IAC/D,QAAQ,aACNC,IACI,gCACAa,IACA,kCACA,8BACN;AAAA,IACA,cAAc;AAAA,IACd,YAAY,OAAOsD,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA,IACtD,QAAQrE,IAAW,gBAAgB;AAAA,IACnC,WAAWc,IAAY,6BAA6B;AAAA,IACpD,SAAS,KAAKY,EAAO,OAAO;AAAA,IAC5B,cAAcxB,MAAcuB,EAAM,SAASA,EAAM,OAAOiB,EAAQ,EAAE,IAAIhB,EAAO;AAAA,EAAA,GAGzE4C,KAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,aAAa5B,EAAQ,CAAC;AAAA,IACtB,OAAO;AAAA,EAAA,GAGH6B,KAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,UAAU7C,EAAO;AAAA,IACjB,OAAOuC,IAAe,qCAAqC;AAAA,EAAA,GAGvDO,KAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO9C,EAAO;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAOgB,EAAQ,CAAC;AAAA,IAChB,QAAQA,EAAQ,CAAC;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,OAAO0B,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA,EAAA,GAGlDI,KAA+B;AAAA,IACnC,UAAU;AAAA,IACV,KAAKnC,EAAiB;AAAA,IACtB,MAAMA,EAAiB;AAAA,IACvB,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAASI,EAAQ,CAAC;AAAA,IAClB,SAAS;AAAA,IACT,KAAKA,EAAQ,CAAC;AAAA,EAAA,GAGVW,KAAqC;AAAA,IACzC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,cAAcX,EAAQ,CAAC;AAAA,IACvB,WAAWA,EAAQ,CAAC;AAAA,IACpB,UAAU3E,EAAU;AAAA,EAAA,GAGhBuF,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAOZ,EAAQ,CAAC;AAAA,IAChB,QAAQA,EAAQ,CAAC;AAAA,IACjB,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY,OAAO0B,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA,EAAA,GAGlDd,KAAiC;AAAA,IACrC,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAKb,EAAQ,GAAG;AAAA,IAChB,cAAcA,EAAQ,CAAC;AAAA,EAAA,GAGnBe,KAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,QAAQf,EAAQ,CAAC;AAAA,IACjB,UAAU3E,EAAU;AAAA,IACpB,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGH2F,KAA+B;AAAA,IACnC,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAKhB,EAAQ,GAAG;AAAA,EAAA,GAGZkB,IAAW,CAACc,GAAqBX,GAAkBC,GAAqBW,OAAqC;AAAA,IACjH,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAOjC,EAAQ,CAAC;AAAA,IAChB,QAAQA,EAAQ,CAAC;AAAA,IACjB,UAAU3E,EAAU;AAAA,IACpB,YAAY2G,IAAa,MAAM;AAAA,IAC/B,OAAOV,IACH,sCACAU,IACA,UACA;AAAA,IACJ,iBAAiBA,IACb,kCACAX,IACA,6BACA;AAAA,IACJ,QAAQY,KAAW,CAACD,IAAa,0CAA0C;AAAA,IAC3E,cAAc;AAAA,IACd,QAAQV,IAAa,gBAAgB;AAAA,IACrC,SAASA,IAAa,MAAM;AAAA,IAC5B,YAAY,OAAOI,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA,EAAA,IAGlDO,KAA8B;AAAA,IAClC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKlC,EAAQ,CAAC;AAAA,IACd,YAAY;AAAA,IACZ,aAAaA,EAAQ,CAAC;AAAA,IACtB,UAAU;AAAA,EAAA,GAGNmC,KAAmC;AAAA,IACvC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS,GAAGnC,EAAQ,CAAC,CAAC,MAAMA,EAAQ,CAAC,CAAC;AAAA,IACtC,UAAU3E,EAAU;AAAA,IACpB,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY,OAAOqG,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA,EAAA;AAGxD,SACE,gBAAA/F;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK,CAACwG,MAAS;AACZ,QAAAvD,EAA+D,UAAUuD,GACtE,OAAOtE,KAAQ,aAAYA,EAAIsE,CAAI,IAC9BtE,QAAS,UAAUsE;AAAA,MAC9B;AAAA,MACA,WAAWC,GAAG,0BAA0B,2BAA2BjF,CAAI,IAAIQ,EAAS;AAAA,MACpF,OAAO4D;AAAA,MACP,eAAa3D;AAAA,MACb,WAAW2B;AAAA,MAEX,UAAA;AAAA,QAAA,gBAAA5D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU0B,IAAW,KAAK;AAAA,YAC1B,cAAYK;AAAA,YACZ,iBAAeO;AAAA,YACf,iBAAc;AAAA,YACd,gBAAcX;AAAA,YACd,OAAOkE;AAAA,YACP,SAAS,MAAM,CAACnE,KAAYa,EAAU,EAAI;AAAA,YAC1C,SAAS,MAAME,EAAa,EAAI;AAAA,YAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,YAEhC,UAAA;AAAA,cAAA,gBAAAxC,EAAC,QAAA,EAAK,OAAO+F,IACX,UAAA,gBAAA/F,EAACF,MAAa,GAChB;AAAA,cACA,gBAAAE,EAAC,QAAA,EAAK,OAAOgG,IAAY,eAAgBxE,GAAY;AAAA,cACpDG,MAAcuB,EAAM,SAASA,EAAM,QAAQ,CAACzB,KAC3C,gBAAAzB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,cAAW;AAAA,kBACX,OAAOiG;AAAA,kBACP,SAASvC;AAAA,kBACT,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB,kCACxC,EAAE,cAAc,MAAM,QAAQ;AAAA,kBAChC;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB,eACxC,EAAE,cAAc,MAAM,QAAQ;AAAA,kBAChC;AAAA,kBAEA,4BAACvD,IAAA,CAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACb;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHkC,KACCoE;AAAA,4BACG,OAAA,EAAI,MAAK,UAAS,cAAW,qBAAoB,OAAOP,IACtD,UAAA;AAAA,YAAA3B,EAAe,CAAC;AAAA,YAChBA,EAAe,CAAC;AAAA,YAChB3C,KAAWA,EAAQ,SAAS,KAC3B,gBAAA7B,EAAC,OAAA,EAAI,OAAOsG,IACV,UAAA;AAAA,cAAA,gBAAArG,EAAC,OAAA,EAAI,OAAO,EAAE,UAAUR,EAAU,IAAI,YAAY,KAAK,OAAO,kCAAkC,cAAc2E,EAAQ,CAAC,KAAK,UAAA,WAE5H;AAAA,cACCvC,EAAQ,IAAI,CAAC6B,GAAQ2B,MACpB,gBAAApF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,OAAOsG;AAAA,kBACP,SAAS,MAAM9C,GAAkBC,CAAM;AAAA,kBACvC,cAAc,CAACK,MAAM;AACnB,oBAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBACA,cAAc,CAACA,MAAM;AACnB,oBAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBAEC,UAAAL,EAAO;AAAA,gBAAA;AAAA,gBAXH2B;AAAA,cAAA,CAaR;AAAA,YAAA,EAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UACA,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA;AAGR,CAAC;AAEDlE,GAAgB,cAAc;"}
1
+ {"version":3,"file":"DateRangePicker.js","sources":["../../../../src/components/form/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["/**\n * DateRangePicker Component\n *\n * A date range selection component with calendar UI.\n * Supports preset ranges and custom date selection.\n *\n * @module components/form/DateRangePicker\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentPaddingX } from '../../../design-system/primitives'\n\nexport type DateRangePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DateRange {\n start: Date | null\n end: Date | null\n}\n\nexport interface DateRangePreset {\n label: string\n getValue: () => DateRange\n}\n\nexport interface DateRangePickerProps {\n /** Current date range value */\n value?: DateRange\n /** Default date range value (uncontrolled) */\n defaultValue?: DateRange\n /** Callback when date range changes */\n onChange?: (value: DateRange) => void\n /** Component size */\n size?: DateRangePickerSize\n /** Minimum selectable date */\n minDate?: Date\n /** Maximum selectable date */\n maxDate?: Date\n /** Placeholder text */\n placeholder?: string\n /** Whether the input is disabled */\n disabled?: boolean\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Whether to allow clearing */\n clearable?: boolean\n /** Preset date ranges */\n presets?: DateRangePreset[]\n /** Date format display */\n dateFormat?: (date: Date) => string\n /** Label for accessibility */\n 'aria-label'?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateRangePickerSize, { height: number; fontSize: number; padding: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg },\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n\nconst defaultDateFormat = (date: Date): string => {\n return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`\n}\n\nfunction CalendarIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2 6h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 1v3M11 1v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={direction === 'left' ? 'M10 4l-4 4 4 4' : 'M6 4l4 4-4 4'}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst getDaysInMonth = (year: number, month: number): number => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number): number => {\n return new Date(year, month, 1).getDay()\n}\n\nconst isSameDay = (date1: Date | null, date2: Date | null): boolean => {\n if (!date1 || !date2) return false\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n )\n}\n\nconst isInRange = (date: Date, start: Date | null, end: Date | null): boolean => {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate && date < minDate) return true\n if (maxDate && date > maxDate) return true\n return false\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n {\n value: controlledValue,\n defaultValue = { start: null, end: null },\n onChange,\n size = 'md',\n minDate,\n maxDate,\n placeholder = 'Select date range',\n disabled = false,\n isInvalid = false,\n clearable = true,\n presets,\n dateFormat = defaultDateFormat,\n 'aria-label': ariaLabel = 'Select date range',\n className,\n testId,\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState<DateRange>(defaultValue)\n const [isOpen, setIsOpen] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const [viewDate, setViewDate] = useState(() => {\n const initial = controlledValue?.start || defaultValue.start || new Date()\n return { year: initial.getFullYear(), month: initial.getMonth() }\n })\n const [selectingEnd, setSelectingEnd] = useState(false)\n const [hoverDate, setHoverDate] = useState<Date | null>(null)\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n const updateValue = useCallback(\n (newValue: DateRange) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const handleDateClick = useCallback(\n (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return\n\n if (!selectingEnd || !value.start) {\n // Start new selection\n updateValue({ start: date, end: null })\n setSelectingEnd(true)\n } else {\n // Complete selection\n if (date < value.start) {\n updateValue({ start: date, end: value.start })\n } else {\n updateValue({ start: value.start, end: date })\n }\n setSelectingEnd(false)\n setIsOpen(false)\n }\n },\n [selectingEnd, value.start, minDate, maxDate, updateValue]\n )\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const newValue = preset.getValue()\n updateValue(newValue)\n setIsOpen(false)\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n updateValue({ start: null, end: null })\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n },\n []\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const goToPrevMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 0) {\n return { year: prev.year - 1, month: 11 }\n }\n return { ...prev, month: prev.month - 1 }\n })\n }, [])\n\n const goToNextMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 11) {\n return { year: prev.year + 1, month: 0 }\n }\n return { ...prev, month: prev.month + 1 }\n })\n }, [])\n\n // Generate calendar days\n const renderCalendar = (monthOffset: number = 0) => {\n let { year, month } = viewDate\n month += monthOffset\n if (month > 11) {\n month = 0\n year++\n }\n\n const daysInMonth = getDaysInMonth(year, month)\n const firstDay = getFirstDayOfMonth(year, month)\n const days: (Date | null)[] = []\n\n // Empty cells for days before the first day\n for (let i = 0; i < firstDay; i++) {\n days.push(null)\n }\n\n // Days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i))\n }\n\n const effectiveEnd = selectingEnd && hoverDate && value.start && !value.end ? hoverDate : value.end\n\n return (\n <div style={{ flex: 1 }}>\n <div style={calendarHeaderStyle}>\n {monthOffset === 0 && (\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n style={navButtonStyle}\n onClick={goToPrevMonth}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n )}\n <span style={{ fontWeight: 600 }}>\n {MONTHS[month]} {year}\n </span>\n {monthOffset === 1 && (\n <button\n type=\"button\"\n aria-label=\"Next month\"\n style={navButtonStyle}\n onClick={goToNextMonth}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n )}\n </div>\n <div style={daysHeaderStyle}>\n {DAYS.map((day) => (\n <div key={day} style={dayHeaderStyle}>\n {day}\n </div>\n ))}\n </div>\n <div style={daysGridStyle}>\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} style={dayStyle(false, false, false, false)} />\n }\n\n const isStart = isSameDay(date, value.start)\n const isEnd = isSameDay(date, effectiveEnd)\n const isRange = isInRange(date, value.start, effectiveEnd)\n const isDisabled = isDateDisabled(date, minDate, maxDate)\n\n return (\n <button\n key={date.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n style={dayStyle(isStart || isEnd, isRange, isDisabled, isSameDay(date, new Date()))}\n onClick={() => handleDateClick(date)}\n onMouseEnter={() => selectingEnd && setHoverDate(date)}\n onMouseLeave={() => setHoverDate(null)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayValue = value.start && value.end\n ? `${dateFormat(value.start)} - ${dateFormat(value.end)}`\n : value.start\n ? `${dateFormat(value.start)} - ...`\n : ''\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n padding: `0 ${config.padding}px`,\n paddingRight: clearable && (value.start || value.end) ? spacing[10] : config.padding,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: spacing[2],\n color: 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n flex: 1,\n fontSize: config.fontSize,\n color: displayValue ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n }\n\n const clearButtonStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[3],\n display: 'flex',\n gap: spacing[4],\n }\n\n const calendarHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: spacing[2],\n minHeight: spacing[8],\n fontSize: fontSizes.base,\n }\n\n const navButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[7],\n height: spacing[7],\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n color: 'var(--brycks-foreground-default)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const daysHeaderStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n marginBottom: spacing[1],\n }\n\n const dayHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: spacing[7],\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const daysGridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n }\n\n const dayStyle = (isSelected: boolean, isRange: boolean, isDisabled: boolean, isToday: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[8],\n height: spacing[8],\n fontSize: fontSizes.sm,\n fontWeight: isSelected ? 600 : 400,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isSelected\n ? 'var(--brycks-primary-foreground)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isSelected\n ? 'var(--brycks-primary-default)'\n : isRange\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n border: isToday && !isSelected ? '1px solid var(--brycks-border-strong)' : 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const presetsStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[1],\n borderLeft: '1px solid var(--brycks-border-default)',\n paddingLeft: spacing[3],\n minWidth: 140,\n }\n\n const presetButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: `${spacing[2]}px ${spacing[3]}px`,\n fontSize: fontSizes.sm,\n color: 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n textAlign: 'left',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-daterangepicker', `brycks-daterangepicker--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n >\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={isInvalid}\n style={inputWrapperStyle}\n onClick={() => !disabled && setIsOpen(true)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n <span style={iconStyle}>\n <CalendarIcon />\n </span>\n <span style={textStyle}>{displayValue || placeholder}</span>\n {clearable && (value.start || value.end) && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Clear date range\"\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {isOpen &&\n createPortal(\n <div role=\"dialog\" aria-label=\"Date range picker\" style={dropdownStyle}>\n {renderCalendar(0)}\n {renderCalendar(1)}\n {presets && presets.length > 0 && (\n <div style={presetsStyle}>\n <div style={{ fontSize: fontSizes.xs, fontWeight: 600, color: 'var(--brycks-foreground-muted)', marginBottom: spacing[1] }}>\n Presets\n </div>\n {presets.map((preset, index) => (\n <button\n key={index}\n type=\"button\"\n style={presetButtonStyle}\n onClick={() => handlePresetClick(preset)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n </div>,\n document.body\n )}\n </div>\n )\n})\n\nDateRangePicker.displayName = 'DateRangePicker'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","DAYS","MONTHS","defaultDateFormat","date","CalendarIcon","jsxs","jsx","ChevronIcon","direction","ClearIcon","getDaysInMonth","year","month","getFirstDayOfMonth","isSameDay","date1","date2","isInRange","start","end","time","isDateDisabled","minDate","maxDate","DateRangePicker","forwardRef","controlledValue","defaultValue","onChange","size","placeholder","disabled","isInvalid","clearable","presets","dateFormat","ariaLabel","className","testId","ref","internalValue","setInternalValue","useState","isOpen","setIsOpen","isFocused","setIsFocused","viewDate","setViewDate","initial","selectingEnd","setSelectingEnd","hoverDate","setHoverDate","containerRef","useRef","value","config","updateValue","useCallback","newValue","handleDateClick","handlePresetClick","preset","handleClear","handleKeyDown","useEffect","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","goToPrevMonth","prev","goToNextMonth","renderCalendar","monthOffset","daysInMonth","firstDay","days","i","effectiveEnd","calendarHeaderStyle","navButtonStyle","daysHeaderStyle","day","dayHeaderStyle","daysGridStyle","index","dayStyle","isStart","isEnd","isRange","isDisabled","displayValue","containerStyle","inputWrapperStyle","durations","easings","iconStyle","textStyle","clearButtonStyle","dropdownStyle","isSelected","isToday","presetsStyle","presetButtonStyle","node","cx","createPortal"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),t=require("react"),F=require("../../../utils/styles.cjs"),d=t.forwardRef(function({onFiles:k,accept:g,multiple:i=!0,maxSize:f,disabled:e=!1,children:p,icon:v,helperText:y,error:s,className:b,testId:D},m){const[c,l]=t.useState(!1),a=t.useRef(null),h=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),e||l(!0)},[e]),x=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),l(!1)},[]),C=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),e||l(!0)},[e]),u=t.useCallback(r=>{if(!r||r.length===0)return;let n=Array.from(r);f&&(n=n.filter(E=>E.size<=f)),!i&&n.length>1&&(n=[n[0]]),k?.(n)},[f,i,k]),j=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),l(!1),!e&&u(r.dataTransfer.files)},[e,u]),z=t.useCallback(()=>{e||a.current?.click()},[e]),S=t.useCallback(r=>{u(r.target.files),a.current&&(a.current.value="")},[u]),R=t.useCallback(r=>{(r.key==="Enter"||r.key===" ")&&!e&&(r.preventDefault(),a.current?.click())},[e]),O={padding:"40px 20px",border:`2px dashed ${s?"var(--brycks-error-default)":c?"var(--brycks-primary-default)":"var(--brycks-border-muted)"}`,borderRadius:"var(--brycks-radius-lg)",cursor:e?"not-allowed":"pointer",textAlign:"center",transition:"all var(--brycks-duration-fast) var(--brycks-easing-out)",background:c?"var(--brycks-primary-muted)":"var(--brycks-background-muted)",opacity:e?.5:1},P={display:"flex",justifyContent:"center",marginBottom:12,color:c?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)"},w={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-sm)",fontWeight:500,color:"var(--brycks-foreground-default)",marginBottom:y?4:0},Z={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-xs)",color:"var(--brycks-foreground-muted)"},q={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-xs)",color:"var(--brycks-error-default)",marginTop:8};return o.jsxs("div",{ref:m,className:F.cx("brycks-dropzone",c&&"brycks-dropzone--drag-over",e&&"brycks-dropzone--disabled",s&&"brycks-dropzone--error",b),style:O,onClick:z,onDragEnter:h,onDragLeave:x,onDragOver:C,onDrop:j,onKeyDown:R,role:"button",tabIndex:e?-1:0,"aria-disabled":e,"data-testid":D,children:[o.jsx("input",{ref:a,type:"file",accept:g,multiple:i,onChange:S,style:{display:"none"},"aria-hidden":"true"}),v&&o.jsx("div",{style:P,children:v}),p&&o.jsx("div",{style:w,children:p}),y&&o.jsx("div",{style:Z,children:y}),s&&o.jsx("div",{style:q,children:s})]})});d.displayName="DropZone";exports.DropZone=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),t=require("react"),F=require("../../../utils/styles.cjs"),d=t.forwardRef(function({onFiles:k,accept:g,multiple:i=!0,maxSize:f,disabled:e=!1,children:p,icon:v,helperText:y,error:s,className:b,testId:D},m){const[c,l]=t.useState(!1),a=t.useRef(null),h=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),e||l(!0)},[e]),x=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),l(!1)},[]),C=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),e||l(!0)},[e]),u=t.useCallback(r=>{if(!r||r.length===0)return;let n=Array.from(r);f&&(n=n.filter(E=>E.size<=f)),!i&&n.length>1&&(n=[n[0]]),k?.(n)},[f,i,k]),j=t.useCallback(r=>{r.preventDefault(),r.stopPropagation(),l(!1),!e&&u(r.dataTransfer.files)},[e,u]),z=t.useCallback(()=>{e||a.current?.click()},[e]),S=t.useCallback(r=>{u(r.target.files),a.current&&(a.current.value="")},[u]),R=t.useCallback(r=>{(r.key==="Enter"||r.key===" ")&&!e&&(r.preventDefault(),a.current?.click())},[e]),O={padding:"40px 20px",border:`2px dashed ${s?"var(--brycks-error-default)":c?"var(--brycks-primary-default)":"var(--brycks-border-muted)"}`,borderRadius:"var(--brycks-radius-lg)",cursor:e?"not-allowed":"pointer",textAlign:"center",transition:"all var(--brycks-duration-fast) var(--brycks-ease-out)",background:c?"var(--brycks-primary-muted)":"var(--brycks-background-muted)",opacity:e?.5:1},P={display:"flex",justifyContent:"center",marginBottom:12,color:c?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)"},w={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-sm)",fontWeight:500,color:"var(--brycks-foreground-default)",marginBottom:y?4:0},Z={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-xs)",color:"var(--brycks-foreground-muted)"},q={fontFamily:"var(--brycks-font-sans)",fontSize:"var(--brycks-font-size-xs)",color:"var(--brycks-error-default)",marginTop:8};return o.jsxs("div",{ref:m,className:F.cx("brycks-dropzone",c&&"brycks-dropzone--drag-over",e&&"brycks-dropzone--disabled",s&&"brycks-dropzone--error",b),style:O,onClick:z,onDragEnter:h,onDragLeave:x,onDragOver:C,onDrop:j,onKeyDown:R,role:"button",tabIndex:e?-1:0,"aria-disabled":e,"data-testid":D,children:[o.jsx("input",{ref:a,type:"file",accept:g,multiple:i,onChange:S,style:{display:"none"},"aria-hidden":"true"}),v&&o.jsx("div",{style:P,children:v}),p&&o.jsx("div",{style:w,children:p}),y&&o.jsx("div",{style:Z,children:y}),s&&o.jsx("div",{style:q,children:s})]})});d.displayName="DropZone";exports.DropZone=d;
2
2
  //# sourceMappingURL=DropZone.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.cjs","sources":["../../../../src/components/form/DropZone/DropZone.tsx"],"sourcesContent":["/**\n * DropZone Component\n *\n * File upload area with drag-and-drop support.\n * Provides visual feedback during drag operations.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type DragEvent,\n type ChangeEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport interface DropZoneProps {\n /** Callback when files are selected or dropped */\n onFiles?: (files: File[]) => void\n /** Accepted file types (e.g., \"image/*\", \".pdf,.doc\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Whether the drop zone is disabled */\n disabled?: boolean\n /** Main text content */\n children?: ReactNode\n /** Icon to display */\n icon?: ReactNode\n /** Helper text shown below main content */\n helperText?: string\n /** Error message */\n error?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n function DropZone(\n {\n onFiles,\n accept,\n multiple = true,\n maxSize,\n disabled = false,\n children,\n icon,\n helperText,\n error,\n className,\n testId,\n },\n ref\n ) {\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleDragEnter = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const processFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by size if maxSize is set\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // Take only first file if multiple is false\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onFiles?.(files)\n },\n [maxSize, multiple, onFiles]\n )\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (disabled) return\n\n processFiles(e.dataTransfer.files)\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n processFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n },\n [processFiles]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n fileInputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n padding: '40px 20px',\n border: `2px dashed ${\n error\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-muted)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'center',\n transition: 'all var(--brycks-duration-fast) var(--brycks-easing-out)',\n background: isDragOver\n ? 'var(--brycks-primary-muted)'\n : 'var(--brycks-background-muted)',\n opacity: disabled ? 0.5 : 1,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 12,\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-sm)',\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n marginBottom: helperText ? 4 : 0,\n }\n\n const helperStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const errorStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-error-default)',\n marginTop: 8,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-dropzone',\n isDragOver && 'brycks-dropzone--drag-over',\n disabled && 'brycks-dropzone--disabled',\n error && 'brycks-dropzone--error',\n className\n )}\n style={containerStyle}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n data-testid={testId}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n\n {icon && <div style={iconStyle}>{icon}</div>}\n\n {children && <div style={textStyle}>{children}</div>}\n\n {helperText && <div style={helperStyle}>{helperText}</div>}\n\n {error && <div style={errorStyle}>{error}</div>}\n </div>\n )\n }\n)\n\nDropZone.displayName = 'DropZone'\n"],"names":["DropZone","forwardRef","onFiles","accept","multiple","maxSize","disabled","children","icon","helperText","error","className","testId","ref","isDragOver","setIsDragOver","useState","fileInputRef","useRef","handleDragEnter","useCallback","e","handleDragLeave","handleDragOver","processFiles","fileList","files","file","handleDrop","handleClick","handleChange","handleKeyDown","containerStyle","iconStyle","textStyle","helperStyle","errorStyle","jsxs","cx","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DropZone.cjs","sources":["../../../../src/components/form/DropZone/DropZone.tsx"],"sourcesContent":["/**\n * DropZone Component\n *\n * File upload area with drag-and-drop support.\n * Provides visual feedback during drag operations.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type DragEvent,\n type ChangeEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport interface DropZoneProps {\n /** Callback when files are selected or dropped */\n onFiles?: (files: File[]) => void\n /** Accepted file types (e.g., \"image/*\", \".pdf,.doc\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Whether the drop zone is disabled */\n disabled?: boolean\n /** Main text content */\n children?: ReactNode\n /** Icon to display */\n icon?: ReactNode\n /** Helper text shown below main content */\n helperText?: string\n /** Error message */\n error?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n function DropZone(\n {\n onFiles,\n accept,\n multiple = true,\n maxSize,\n disabled = false,\n children,\n icon,\n helperText,\n error,\n className,\n testId,\n },\n ref\n ) {\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleDragEnter = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const processFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by size if maxSize is set\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // Take only first file if multiple is false\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onFiles?.(files)\n },\n [maxSize, multiple, onFiles]\n )\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (disabled) return\n\n processFiles(e.dataTransfer.files)\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n processFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n },\n [processFiles]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n fileInputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n padding: '40px 20px',\n border: `2px dashed ${\n error\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-muted)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'center',\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\n background: isDragOver\n ? 'var(--brycks-primary-muted)'\n : 'var(--brycks-background-muted)',\n opacity: disabled ? 0.5 : 1,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 12,\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-sm)',\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n marginBottom: helperText ? 4 : 0,\n }\n\n const helperStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const errorStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-error-default)',\n marginTop: 8,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-dropzone',\n isDragOver && 'brycks-dropzone--drag-over',\n disabled && 'brycks-dropzone--disabled',\n error && 'brycks-dropzone--error',\n className\n )}\n style={containerStyle}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n data-testid={testId}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n\n {icon && <div style={iconStyle}>{icon}</div>}\n\n {children && <div style={textStyle}>{children}</div>}\n\n {helperText && <div style={helperStyle}>{helperText}</div>}\n\n {error && <div style={errorStyle}>{error}</div>}\n </div>\n )\n }\n)\n\nDropZone.displayName = 'DropZone'\n"],"names":["DropZone","forwardRef","onFiles","accept","multiple","maxSize","disabled","children","icon","helperText","error","className","testId","ref","isDragOver","setIsDragOver","useState","fileInputRef","useRef","handleDragEnter","useCallback","e","handleDragLeave","handleDragOver","processFiles","fileList","files","file","handleDrop","handleClick","handleChange","handleKeyDown","containerStyle","iconStyle","textStyle","helperStyle","errorStyle","jsxs","cx","jsx"],"mappings":"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"}
@@ -5,7 +5,7 @@ const N = Z(
5
5
  function({
6
6
  onFiles: p,
7
7
  accept: k,
8
- multiple: l = !0,
8
+ multiple: i = !0,
9
9
  maxSize: y,
10
10
  disabled: t = !1,
11
11
  children: v,
@@ -27,25 +27,25 @@ const N = Z(
27
27
  r.preventDefault(), r.stopPropagation(), t || f(!0);
28
28
  },
29
29
  [t]
30
- ), i = e(
30
+ ), l = e(
31
31
  (r) => {
32
32
  if (!r || r.length === 0) return;
33
33
  let o = Array.from(r);
34
- y && (o = o.filter((F) => F.size <= y)), !l && o.length > 1 && (o = [o[0]]), p?.(o);
34
+ y && (o = o.filter((F) => F.size <= y)), !i && o.length > 1 && (o = [o[0]]), p?.(o);
35
35
  },
36
- [y, l, p]
36
+ [y, i, p]
37
37
  ), z = e(
38
38
  (r) => {
39
- r.preventDefault(), r.stopPropagation(), f(!1), !t && i(r.dataTransfer.files);
39
+ r.preventDefault(), r.stopPropagation(), f(!1), !t && l(r.dataTransfer.files);
40
40
  },
41
- [t, i]
41
+ [t, l]
42
42
  ), S = e(() => {
43
43
  t || n.current?.click();
44
44
  }, [t]), C = e(
45
45
  (r) => {
46
- i(r.target.files), n.current && (n.current.value = "");
46
+ l(r.target.files), n.current && (n.current.value = "");
47
47
  },
48
- [i]
48
+ [l]
49
49
  ), w = e(
50
50
  (r) => {
51
51
  (r.key === "Enter" || r.key === " ") && !t && (r.preventDefault(), n.current?.click());
@@ -57,7 +57,7 @@ const N = Z(
57
57
  borderRadius: "var(--brycks-radius-lg)",
58
58
  cursor: t ? "not-allowed" : "pointer",
59
59
  textAlign: "center",
60
- transition: "all var(--brycks-duration-fast) var(--brycks-easing-out)",
60
+ transition: "all var(--brycks-duration-fast) var(--brycks-ease-out)",
61
61
  background: c ? "var(--brycks-primary-muted)" : "var(--brycks-background-muted)",
62
62
  opacity: t ? 0.5 : 1
63
63
  }, P = {
@@ -110,7 +110,7 @@ const N = Z(
110
110
  ref: n,
111
111
  type: "file",
112
112
  accept: k,
113
- multiple: l,
113
+ multiple: i,
114
114
  onChange: C,
115
115
  style: { display: "none" },
116
116
  "aria-hidden": "true"
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.js","sources":["../../../../src/components/form/DropZone/DropZone.tsx"],"sourcesContent":["/**\n * DropZone Component\n *\n * File upload area with drag-and-drop support.\n * Provides visual feedback during drag operations.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type DragEvent,\n type ChangeEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport interface DropZoneProps {\n /** Callback when files are selected or dropped */\n onFiles?: (files: File[]) => void\n /** Accepted file types (e.g., \"image/*\", \".pdf,.doc\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Whether the drop zone is disabled */\n disabled?: boolean\n /** Main text content */\n children?: ReactNode\n /** Icon to display */\n icon?: ReactNode\n /** Helper text shown below main content */\n helperText?: string\n /** Error message */\n error?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n function DropZone(\n {\n onFiles,\n accept,\n multiple = true,\n maxSize,\n disabled = false,\n children,\n icon,\n helperText,\n error,\n className,\n testId,\n },\n ref\n ) {\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleDragEnter = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const processFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by size if maxSize is set\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // Take only first file if multiple is false\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onFiles?.(files)\n },\n [maxSize, multiple, onFiles]\n )\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (disabled) return\n\n processFiles(e.dataTransfer.files)\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n processFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n },\n [processFiles]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n fileInputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n padding: '40px 20px',\n border: `2px dashed ${\n error\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-muted)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'center',\n transition: 'all var(--brycks-duration-fast) var(--brycks-easing-out)',\n background: isDragOver\n ? 'var(--brycks-primary-muted)'\n : 'var(--brycks-background-muted)',\n opacity: disabled ? 0.5 : 1,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 12,\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-sm)',\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n marginBottom: helperText ? 4 : 0,\n }\n\n const helperStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const errorStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-error-default)',\n marginTop: 8,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-dropzone',\n isDragOver && 'brycks-dropzone--drag-over',\n disabled && 'brycks-dropzone--disabled',\n error && 'brycks-dropzone--error',\n className\n )}\n style={containerStyle}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n data-testid={testId}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n\n {icon && <div style={iconStyle}>{icon}</div>}\n\n {children && <div style={textStyle}>{children}</div>}\n\n {helperText && <div style={helperStyle}>{helperText}</div>}\n\n {error && <div style={errorStyle}>{error}</div>}\n </div>\n )\n }\n)\n\nDropZone.displayName = 'DropZone'\n"],"names":["DropZone","forwardRef","onFiles","accept","multiple","maxSize","disabled","children","icon","helperText","error","className","testId","ref","isDragOver","setIsDragOver","useState","fileInputRef","useRef","handleDragEnter","useCallback","e","handleDragLeave","handleDragOver","processFiles","fileList","files","file","handleDrop","handleClick","handleChange","handleKeyDown","containerStyle","iconStyle","textStyle","helperStyle","errorStyle","jsxs","cx","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DropZone.js","sources":["../../../../src/components/form/DropZone/DropZone.tsx"],"sourcesContent":["/**\n * DropZone Component\n *\n * File upload area with drag-and-drop support.\n * Provides visual feedback during drag operations.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type DragEvent,\n type ChangeEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport interface DropZoneProps {\n /** Callback when files are selected or dropped */\n onFiles?: (files: File[]) => void\n /** Accepted file types (e.g., \"image/*\", \".pdf,.doc\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Whether the drop zone is disabled */\n disabled?: boolean\n /** Main text content */\n children?: ReactNode\n /** Icon to display */\n icon?: ReactNode\n /** Helper text shown below main content */\n helperText?: string\n /** Error message */\n error?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n function DropZone(\n {\n onFiles,\n accept,\n multiple = true,\n maxSize,\n disabled = false,\n children,\n icon,\n helperText,\n error,\n className,\n testId,\n },\n ref\n ) {\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleDragEnter = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n },\n [disabled]\n )\n\n const processFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by size if maxSize is set\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // Take only first file if multiple is false\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onFiles?.(files)\n },\n [maxSize, multiple, onFiles]\n )\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (disabled) return\n\n processFiles(e.dataTransfer.files)\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n processFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n },\n [processFiles]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n fileInputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n padding: '40px 20px',\n border: `2px dashed ${\n error\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-muted)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'center',\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\n background: isDragOver\n ? 'var(--brycks-primary-muted)'\n : 'var(--brycks-background-muted)',\n opacity: disabled ? 0.5 : 1,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 12,\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-sm)',\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n marginBottom: helperText ? 4 : 0,\n }\n\n const helperStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const errorStyle: CSSProperties = {\n fontFamily: 'var(--brycks-font-sans)',\n fontSize: 'var(--brycks-font-size-xs)',\n color: 'var(--brycks-error-default)',\n marginTop: 8,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-dropzone',\n isDragOver && 'brycks-dropzone--drag-over',\n disabled && 'brycks-dropzone--disabled',\n error && 'brycks-dropzone--error',\n className\n )}\n style={containerStyle}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n data-testid={testId}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n\n {icon && <div style={iconStyle}>{icon}</div>}\n\n {children && <div style={textStyle}>{children}</div>}\n\n {helperText && <div style={helperStyle}>{helperText}</div>}\n\n {error && <div style={errorStyle}>{error}</div>}\n </div>\n )\n }\n)\n\nDropZone.displayName = 'DropZone'\n"],"names":["DropZone","forwardRef","onFiles","accept","multiple","maxSize","disabled","children","icon","helperText","error","className","testId","ref","isDragOver","setIsDragOver","useState","fileInputRef","useRef","handleDragEnter","useCallback","e","handleDragLeave","handleDragOver","processFiles","fileList","files","file","handleDrop","handleClick","handleChange","handleKeyDown","containerStyle","iconStyle","textStyle","helperStyle","errorStyle","jsxs","cx","jsx"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),n=require("react"),Q=require("../../../utils/styles.cjs"),V={sm:{height:80,fontSize:12,padding:16,iconSize:24},md:{height:120,fontSize:14,padding:24,iconSize:32},lg:{height:160,fontSize:16,padding:32,iconSize:40}};function X({size:f}){return r.jsx("svg",{width:f,height:f,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"})})}const x=n.forwardRef(function({size:h="md",variant:S="dropzone",accept:m,multiple:a=!1,maxSize:y,label:k,description:d,error:p,isInvalid:D=!1,onChange:v,icon:j,disabled:t=!1,className:C,style:z,testId:w,...I},i){const[c,g]=n.useState(!1),[F,b]=n.useState(!1),l=n.useRef(null),o=V[h],R=D||!!p,u=n.useCallback(e=>{if(!e||e.length===0)return;let s=Array.from(e);y&&(s=s.filter(J=>J.size<=y)),!a&&s.length>1&&(s=[s[0]]),v?.(s)},[y,a,v]),O=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),t||g(!0)},[t]),P=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),g(!1)},[]),T=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),g(!1),t||u(e.dataTransfer.files)},[t,u]),W=n.useCallback(e=>{u(e.target.files),l.current&&(l.current.value="")},[u]),q=n.useCallback(()=>{t||l.current?.click()},[t]),A=n.useCallback(e=>{(e.key==="Enter"||e.key===" ")&&!t&&(e.preventDefault(),l.current?.click())},[t]),L={display:"flex",flexDirection:"column",gap:6,...z},M={fontSize:o.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)"},$={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,minHeight:o.height,padding:o.padding,border:`2px dashed ${R?"var(--brycks-error-default)":c||F?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-lg)",backgroundColor:c?"var(--brycks-primary-50)":"var(--brycks-background-muted)",cursor:t?"not-allowed":"pointer",opacity:t?.5:1,transition:"all 150ms ease-out",outline:"none"},B={color:c?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)",transition:"color 150ms ease-out"},E={display:"flex",flexDirection:"column",alignItems:"center",gap:4,textAlign:"center"},K={fontSize:o.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)"},N={fontSize:o.fontSize-2,color:"var(--brycks-foreground-muted)"},H={color:"var(--brycks-primary-default)",fontWeight:500},U={fontSize:o.fontSize-2,color:"var(--brycks-error-default)"},G=a?"Drag files here or click to browse":"Drag a file here or click to browse";return r.jsxs("div",{className:Q.cx("brycks-file-input",`brycks-file-input--${h}`,`brycks-file-input--${S}`,C),style:L,children:[k&&r.jsx("label",{style:M,children:k}),r.jsxs("div",{style:$,onDragOver:O,onDragLeave:P,onDrop:T,onClick:q,onKeyDown:A,onFocus:()=>b(!0),onBlur:()=>b(!1),tabIndex:t?-1:0,role:"button","aria-label":String(d)||G,children:[r.jsx("div",{style:B,children:j||r.jsx(X,{size:o.iconSize})}),r.jsxs("div",{style:E,children:[r.jsx("span",{style:K,children:c?"Drop files here":r.jsxs(r.Fragment,{children:[r.jsx("span",{style:H,children:"Click to browse"})," or drag files here"]})}),d&&r.jsx("span",{style:N,children:d})]})]}),p&&r.jsx("span",{style:U,children:p}),r.jsx("input",{ref:e=>{l.current=e,typeof i=="function"?i(e):i&&(i.current=e)},type:"file",accept:m,multiple:a,disabled:t,onChange:W,style:{display:"none"},"data-testid":w,...I})]})});x.displayName="FileInput";exports.FileInput=x;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("react"),Q=require("../../../utils/styles.cjs"),V={sm:{height:80,fontSize:12,padding:16,iconSize:24},md:{height:120,fontSize:14,padding:24,iconSize:32},lg:{height:160,fontSize:16,padding:32,iconSize:40}};function X({size:f}){return t.jsx("svg",{width:f,height:f,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"})})}const x=n.forwardRef(function({size:h="md",variant:S="dropzone",accept:m,multiple:a=!1,maxSize:d,label:k,description:y,error:p,isInvalid:D=!1,onChange:v,icon:j,disabled:r=!1,className:C,style:z,testId:w,...I},i){const[c,g]=n.useState(!1),[F,b]=n.useState(!1),l=n.useRef(null),o=V[h],R=D||!!p,u=n.useCallback(e=>{if(!e||e.length===0)return;let s=Array.from(e);d&&(s=s.filter(J=>J.size<=d)),!a&&s.length>1&&(s=[s[0]]),v?.(s)},[d,a,v]),O=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),r||g(!0)},[r]),P=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),g(!1)},[]),T=n.useCallback(e=>{e.preventDefault(),e.stopPropagation(),g(!1),r||u(e.dataTransfer.files)},[r,u]),W=n.useCallback(e=>{u(e.target.files),l.current&&(l.current.value="")},[u]),q=n.useCallback(()=>{r||l.current?.click()},[r]),A=n.useCallback(e=>{(e.key==="Enter"||e.key===" ")&&!r&&(e.preventDefault(),l.current?.click())},[r]),L={display:"flex",flexDirection:"column",gap:6,...z},M={fontSize:o.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)"},$={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,minHeight:o.height,padding:o.padding,border:`2px dashed ${R?"var(--brycks-error-default)":c||F?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-lg)",backgroundColor:c?"var(--brycks-primary-muted)":"var(--brycks-background-muted)",cursor:r?"not-allowed":"pointer",opacity:r?.5:1,transition:"all 150ms ease-out",outline:"none"},B={color:c?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)",transition:"color 150ms ease-out"},E={display:"flex",flexDirection:"column",alignItems:"center",gap:4,textAlign:"center"},K={fontSize:o.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)"},N={fontSize:o.fontSize-2,color:"var(--brycks-foreground-muted)"},H={color:"var(--brycks-primary-default)",fontWeight:500},U={fontSize:o.fontSize-2,color:"var(--brycks-error-default)"},G=a?"Drag files here or click to browse":"Drag a file here or click to browse";return t.jsxs("div",{className:Q.cx("brycks-file-input",`brycks-file-input--${h}`,`brycks-file-input--${S}`,C),style:L,children:[k&&t.jsx("label",{style:M,children:k}),t.jsxs("div",{style:$,onDragOver:O,onDragLeave:P,onDrop:T,onClick:q,onKeyDown:A,onFocus:()=>b(!0),onBlur:()=>b(!1),tabIndex:r?-1:0,role:"button","aria-label":String(y)||G,children:[t.jsx("div",{style:B,children:j||t.jsx(X,{size:o.iconSize})}),t.jsxs("div",{style:E,children:[t.jsx("span",{style:K,children:c?"Drop files here":t.jsxs(t.Fragment,{children:[t.jsx("span",{style:H,children:"Click to browse"})," or drag files here"]})}),y&&t.jsx("span",{style:N,children:y})]})]}),p&&t.jsx("span",{style:U,children:p}),t.jsx("input",{ref:e=>{l.current=e,typeof i=="function"?i(e):i&&(i.current=e)},type:"file",accept:m,multiple:a,disabled:r,onChange:W,style:{display:"none"},"data-testid":w,...I})]})});x.displayName="FileInput";exports.FileInput=x;
2
2
  //# sourceMappingURL=FileInput.cjs.map