@webiny/admin-ui 6.3.0-beta.2 → 6.3.0-beta.4

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 (134) hide show
  1. package/Accordion/components/AccordionItemAction.d.ts +1 -1
  2. package/Accordion/components/AccordionItemAction.js.map +1 -1
  3. package/Calendar/Calendar.d.ts +25 -0
  4. package/Calendar/Calendar.js +45 -0
  5. package/Calendar/Calendar.js.map +1 -0
  6. package/Calendar/calendarClassNames.d.ts +2 -0
  7. package/Calendar/calendarClassNames.js +33 -0
  8. package/Calendar/calendarClassNames.js.map +1 -0
  9. package/Calendar/index.d.ts +1 -0
  10. package/Calendar/index.js +3 -0
  11. package/Calendar/index.js.map +1 -0
  12. package/CodeEditor/CodeEditorPrimitive.js +1 -1
  13. package/CodeEditor/CodeEditorPrimitive.js.map +1 -1
  14. package/DatePicker/DatePicker.d.ts +24 -0
  15. package/DatePicker/DatePicker.js +46 -0
  16. package/DatePicker/DatePicker.js.map +1 -0
  17. package/DatePicker/DatePicker.mdx +153 -0
  18. package/DatePicker/DatePicker.stories.d.ts +25 -0
  19. package/DatePicker/DatePicker.stories.js +365 -0
  20. package/DatePicker/DatePicker.stories.js.map +1 -0
  21. package/DatePicker/index.d.ts +2 -0
  22. package/DatePicker/index.js +4 -0
  23. package/DatePicker/index.js.map +1 -0
  24. package/DatePicker/primitives/DateOnlyPicker.d.ts +4 -0
  25. package/DatePicker/primitives/DateOnlyPicker.js +78 -0
  26. package/DatePicker/primitives/DateOnlyPicker.js.map +1 -0
  27. package/DatePicker/primitives/DatePickerPrimitive.d.ts +22 -0
  28. package/DatePicker/primitives/DatePickerPrimitive.js +46 -0
  29. package/DatePicker/primitives/DatePickerPrimitive.js.map +1 -0
  30. package/DatePicker/primitives/DateRangePicker.d.ts +4 -0
  31. package/DatePicker/primitives/DateRangePicker.js +69 -0
  32. package/DatePicker/primitives/DateRangePicker.js.map +1 -0
  33. package/DatePicker/primitives/DateTimePicker.d.ts +7 -0
  34. package/DatePicker/primitives/DateTimePicker.js +129 -0
  35. package/DatePicker/primitives/DateTimePicker.js.map +1 -0
  36. package/DatePicker/primitives/MonthPicker.d.ts +4 -0
  37. package/DatePicker/primitives/MonthPicker.js +60 -0
  38. package/DatePicker/primitives/MonthPicker.js.map +1 -0
  39. package/DatePicker/primitives/MultipleDatesPicker.d.ts +4 -0
  40. package/DatePicker/primitives/MultipleDatesPicker.js +73 -0
  41. package/DatePicker/primitives/MultipleDatesPicker.js.map +1 -0
  42. package/DatePicker/primitives/MultipleMonthsPicker.d.ts +4 -0
  43. package/DatePicker/primitives/MultipleMonthsPicker.js +85 -0
  44. package/DatePicker/primitives/MultipleMonthsPicker.js.map +1 -0
  45. package/DatePicker/primitives/MultipleYearsPicker.d.ts +4 -0
  46. package/DatePicker/primitives/MultipleYearsPicker.js +75 -0
  47. package/DatePicker/primitives/MultipleYearsPicker.js.map +1 -0
  48. package/DatePicker/primitives/TimeOnlyPicker.d.ts +4 -0
  49. package/DatePicker/primitives/TimeOnlyPicker.js +24 -0
  50. package/DatePicker/primitives/TimeOnlyPicker.js.map +1 -0
  51. package/DatePicker/primitives/WeekPicker.d.ts +4 -0
  52. package/DatePicker/primitives/WeekPicker.js +97 -0
  53. package/DatePicker/primitives/WeekPicker.js.map +1 -0
  54. package/DatePicker/primitives/YearPicker.d.ts +4 -0
  55. package/DatePicker/primitives/YearPicker.js +54 -0
  56. package/DatePicker/primitives/YearPicker.js.map +1 -0
  57. package/DatePicker/primitives/components/DatePickerTrigger.d.ts +13 -0
  58. package/DatePicker/primitives/components/DatePickerTrigger.js +45 -0
  59. package/DatePicker/primitives/components/DatePickerTrigger.js.map +1 -0
  60. package/DatePicker/primitives/components/MonthGrid.d.ts +7 -0
  61. package/DatePicker/primitives/components/MonthGrid.js +23 -0
  62. package/DatePicker/primitives/components/MonthGrid.js.map +1 -0
  63. package/DatePicker/primitives/components/SelectedTagsList.d.ts +11 -0
  64. package/DatePicker/primitives/components/SelectedTagsList.js +23 -0
  65. package/DatePicker/primitives/components/SelectedTagsList.js.map +1 -0
  66. package/DatePicker/primitives/components/TimePicker.d.ts +13 -0
  67. package/DatePicker/primitives/components/TimePicker.js +33 -0
  68. package/DatePicker/primitives/components/TimePicker.js.map +1 -0
  69. package/DatePicker/primitives/components/YearGrid.d.ts +8 -0
  70. package/DatePicker/primitives/components/YearGrid.js +46 -0
  71. package/DatePicker/primitives/components/YearGrid.js.map +1 -0
  72. package/DatePicker/primitives/components/YearStepper.d.ts +7 -0
  73. package/DatePicker/primitives/components/YearStepper.js +36 -0
  74. package/DatePicker/primitives/components/YearStepper.js.map +1 -0
  75. package/DatePicker/primitives/components/index.d.ts +6 -0
  76. package/DatePicker/primitives/components/index.js +8 -0
  77. package/DatePicker/primitives/components/index.js.map +1 -0
  78. package/DatePicker/primitives/index.d.ts +1 -0
  79. package/DatePicker/primitives/index.js +3 -0
  80. package/DatePicker/primitives/index.js.map +1 -0
  81. package/DatePicker/utils/constants.d.ts +3 -0
  82. package/DatePicker/utils/constants.js +5 -0
  83. package/DatePicker/utils/constants.js.map +1 -0
  84. package/DatePicker/utils/dateHelpers.d.ts +24 -0
  85. package/DatePicker/utils/dateHelpers.js +184 -0
  86. package/DatePicker/utils/dateHelpers.js.map +1 -0
  87. package/DatePicker/utils/index.d.ts +3 -0
  88. package/DatePicker/utils/index.js +5 -0
  89. package/DatePicker/utils/index.js.map +1 -0
  90. package/DatePicker/utils/types.d.ts +81 -0
  91. package/DatePicker/utils/types.js +3 -0
  92. package/DatePicker/utils/types.js.map +1 -0
  93. package/Dialog/Dialog.d.ts +1 -0
  94. package/Dialog/Dialog.js +9 -3
  95. package/Dialog/Dialog.js.map +1 -1
  96. package/Dialog/components/DialogBody.d.ts +2 -2
  97. package/Dialog/components/DialogBody.js +10 -3
  98. package/Dialog/components/DialogBody.js.map +1 -1
  99. package/Dialog/components/DialogContent.d.ts +3 -0
  100. package/Dialog/components/DialogContent.js +11 -4
  101. package/Dialog/components/DialogContent.js.map +1 -1
  102. package/FilePicker/FilePicker.d.ts +1 -1
  103. package/FilePicker/FilePicker.js.map +1 -1
  104. package/FilePicker/FilePicker.stories.js +4 -5
  105. package/FilePicker/FilePicker.stories.js.map +1 -1
  106. package/FilePicker/domains/FileItem.js +2 -0
  107. package/FilePicker/domains/FileItem.js.map +1 -1
  108. package/List/components/ListItemAction.d.ts +1 -1
  109. package/List/components/ListItemAction.js.map +1 -1
  110. package/List/components/ListItemHandle.d.ts +1 -1
  111. package/List/components/ListItemHandle.js.map +1 -1
  112. package/MultiFilePicker/MultiFilePicker.stories.js +4 -5
  113. package/MultiFilePicker/MultiFilePicker.stories.js.map +1 -1
  114. package/RangeSlider/primitives/RangeSliderPrimitive.js +1 -1
  115. package/RangeSlider/primitives/RangeSliderPrimitive.js.map +1 -1
  116. package/Sidebar/Sidebar.js +1 -1
  117. package/Sidebar/Sidebar.js.map +1 -1
  118. package/Sidebar/components/SidebarContent.js +1 -1
  119. package/Sidebar/components/SidebarContent.js.map +1 -1
  120. package/Sidebar/components/items/SidebarMenuRootButton.js +1 -1
  121. package/Sidebar/components/items/SidebarMenuRootButton.js.map +1 -1
  122. package/Sidebar/components/items/SidebarMenuRootItem.js +2 -1
  123. package/Sidebar/components/items/SidebarMenuRootItem.js.map +1 -1
  124. package/Sidebar/components/items/SidebarMenuSubButton.js +1 -1
  125. package/Sidebar/components/items/SidebarMenuSubButton.js.map +1 -1
  126. package/Tabs/Tabs.js +1 -1
  127. package/Tabs/Tabs.js.map +1 -1
  128. package/exports/admin/ui.d.ts +1 -0
  129. package/exports/admin/ui.js +2 -0
  130. package/exports/admin/ui.js.map +1 -1
  131. package/index.d.ts +2 -0
  132. package/index.js +2 -0
  133. package/index.js.map +1 -1
  134. package/package.json +19 -15
@@ -0,0 +1,69 @@
1
+ import React, { useState } from "react";
2
+ import { format } from "date-fns";
3
+ import { Calendar } from "../../Calendar/index.js";
4
+ import { PopoverPrimitive } from "../../Popover/index.js";
5
+ import { formatDateForDisplay } from "../utils/dateHelpers.js";
6
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
7
+ const toDateStr = d => format(d, "yyyy-MM-dd");
8
+ const DateRangePicker = ({
9
+ value,
10
+ onChange,
11
+ placeholder,
12
+ disabled,
13
+ size,
14
+ variant,
15
+ invalid,
16
+ weekStartsOn,
17
+ onOpenChange,
18
+ className,
19
+ displayFormat
20
+ }) => {
21
+ const [open, setOpen] = useState(false);
22
+ const handleOpenChange = isOpen => {
23
+ setOpen(isOpen);
24
+ if (onOpenChange) {
25
+ onOpenChange(isOpen);
26
+ }
27
+ };
28
+ const displayValue = formatDateForDisplay(value, "dateRange", displayFormat);
29
+ const handleRangeSelect = range => {
30
+ if (onChange) {
31
+ if (range?.from) {
32
+ onChange({
33
+ from: toDateStr(range.from),
34
+ to: range.to ? toDateStr(range.to) : undefined
35
+ });
36
+ } else {
37
+ onChange(undefined);
38
+ }
39
+ }
40
+ };
41
+ const selected = value?.from ? {
42
+ from: new Date(value.from),
43
+ to: value.to ? new Date(value.to) : undefined
44
+ } : undefined;
45
+ return /*#__PURE__*/React.createElement("div", {
46
+ className: className
47
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
48
+ open: open,
49
+ onOpenChange: handleOpenChange
50
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
51
+ displayValue: displayValue,
52
+ placeholder: placeholder ?? "Pick a date range",
53
+ disabled: disabled,
54
+ size: size,
55
+ variant: variant,
56
+ invalid: invalid
57
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
58
+ align: "start"
59
+ }, /*#__PURE__*/React.createElement(Calendar, {
60
+ mode: "range",
61
+ selected: selected,
62
+ onSelect: handleRangeSelect,
63
+ numberOfMonths: 2,
64
+ weekStartsOn: weekStartsOn
65
+ }))));
66
+ };
67
+ export { DateRangePicker };
68
+
69
+ //# sourceMappingURL=DateRangePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","format","Calendar","PopoverPrimitive","formatDateForDisplay","DatePickerTrigger","toDateStr","d","DateRangePicker","value","onChange","placeholder","disabled","size","variant","invalid","weekStartsOn","onOpenChange","className","displayFormat","open","setOpen","handleOpenChange","isOpen","displayValue","handleRangeSelect","range","from","to","undefined","selected","Date","createElement","Content","align","mode","onSelect","numberOfMonths"],"sources":["DateRangePicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { format } from \"date-fns\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Calendar } from \"~/Calendar/index.js\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport type { DateRangePickerProps } from \"../utils/types.js\";\nimport { formatDateForDisplay } from \"../utils/dateHelpers.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\n\nconst toDateStr = (d: Date) => format(d, \"yyyy-MM-dd\");\n\nconst DateRangePicker = ({\n value,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n weekStartsOn,\n onOpenChange,\n className,\n displayFormat\n}: DateRangePickerProps) => {\n const [open, setOpen] = useState(false);\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const displayValue = formatDateForDisplay(value, \"dateRange\", displayFormat);\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n if (onChange) {\n if (range?.from) {\n onChange({\n from: toDateStr(range.from),\n to: range.to ? toDateStr(range.to) : undefined\n });\n } else {\n onChange(undefined);\n }\n }\n };\n\n const selected: DateRange | undefined = value?.from\n ? { from: new Date(value.from), to: value.to ? new Date(value.to) : undefined }\n : undefined;\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick a date range\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <Calendar\n mode=\"range\"\n selected={selected}\n onSelect={handleRangeSelect}\n numberOfMonths={2}\n weekStartsOn={weekStartsOn}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n </div>\n );\n};\n\nexport { DateRangePicker };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,QAAQ;AACjB,SAASC,gBAAgB;AAEzB,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAE1B,MAAMC,SAAS,GAAIC,CAAO,IAAKN,MAAM,CAACM,CAAC,EAAE,YAAY,CAAC;AAEtD,MAAMC,eAAe,GAAGA,CAAC;EACrBC,KAAK;EACLC,QAAQ;EACRC,WAAW;EACXC,QAAQ;EACRC,IAAI;EACJC,OAAO;EACPC,OAAO;EACPC,YAAY;EACZC,YAAY;EACZC,SAAS;EACTC;AACkB,CAAC,KAAK;EACxB,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGrB,QAAQ,CAAC,KAAK,CAAC;EAEvC,MAAMsB,gBAAgB,GAAIC,MAAe,IAAK;IAC1CF,OAAO,CAACE,MAAM,CAAC;IACf,IAAIN,YAAY,EAAE;MACdA,YAAY,CAACM,MAAM,CAAC;IACxB;EACJ,CAAC;EAED,MAAMC,YAAY,GAAGpB,oBAAoB,CAACK,KAAK,EAAE,WAAW,EAAEU,aAAa,CAAC;EAE5E,MAAMM,iBAAiB,GAAIC,KAA4B,IAAK;IACxD,IAAIhB,QAAQ,EAAE;MACV,IAAIgB,KAAK,EAAEC,IAAI,EAAE;QACbjB,QAAQ,CAAC;UACLiB,IAAI,EAAErB,SAAS,CAACoB,KAAK,CAACC,IAAI,CAAC;UAC3BC,EAAE,EAAEF,KAAK,CAACE,EAAE,GAAGtB,SAAS,CAACoB,KAAK,CAACE,EAAE,CAAC,GAAGC;QACzC,CAAC,CAAC;MACN,CAAC,MAAM;QACHnB,QAAQ,CAACmB,SAAS,CAAC;MACvB;IACJ;EACJ,CAAC;EAED,MAAMC,QAA+B,GAAGrB,KAAK,EAAEkB,IAAI,GAC7C;IAAEA,IAAI,EAAE,IAAII,IAAI,CAACtB,KAAK,CAACkB,IAAI,CAAC;IAAEC,EAAE,EAAEnB,KAAK,CAACmB,EAAE,GAAG,IAAIG,IAAI,CAACtB,KAAK,CAACmB,EAAE,CAAC,GAAGC;EAAU,CAAC,GAC7EA,SAAS;EAEf,oBACI9B,KAAA,CAAAiC,aAAA;IAAKd,SAAS,EAAEA;EAAU,gBACtBnB,KAAA,CAAAiC,aAAA,CAAC7B,gBAAgB;IAACiB,IAAI,EAAEA,IAAK;IAACH,YAAY,EAAEK;EAAiB,gBACzDvB,KAAA,CAAAiC,aAAA,CAAC3B,iBAAiB;IACdmB,YAAY,EAAEA,YAAa;IAC3Bb,WAAW,EAAEA,WAAW,IAAI,mBAAoB;IAChDC,QAAQ,EAAEA,QAAS;IACnBC,IAAI,EAAEA,IAAK;IACXC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA;EAAQ,CACpB,CAAC,eACFhB,KAAA,CAAAiC,aAAA,CAAC7B,gBAAgB,CAAC8B,OAAO;IAACC,KAAK,EAAC;EAAO,gBACnCnC,KAAA,CAAAiC,aAAA,CAAC9B,QAAQ;IACLiC,IAAI,EAAC,OAAO;IACZL,QAAQ,EAAEA,QAAS;IACnBM,QAAQ,EAAEX,iBAAkB;IAC5BY,cAAc,EAAE,CAAE;IAClBrB,YAAY,EAAEA;EAAa,CAC9B,CACqB,CACZ,CACjB,CAAC;AAEd,CAAC;AAED,SAASR,eAAe","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import type { DateTimeLocalPickerProps, DateTimeTzPickerProps } from "../utils/types.js";
3
+ type DateTimePickerInternalProps = (DateTimeLocalPickerProps | DateTimeTzPickerProps) & {
4
+ withTimezone: boolean;
5
+ };
6
+ declare const DateTimePicker: ({ value, onChange, placeholder, disabled, size, variant, invalid, weekStartsOn, onOpenChange, className, withTimezone, displayFormat }: DateTimePickerInternalProps) => React.JSX.Element;
7
+ export { DateTimePicker };
@@ -0,0 +1,129 @@
1
+ import React, { useState } from "react";
2
+ import { format } from "date-fns";
3
+ import { UTC_TIMEZONES } from "@webiny/utils";
4
+ import { Calendar } from "../../Calendar/index.js";
5
+ import { PopoverPrimitive } from "../../Popover/index.js";
6
+ import { SelectPrimitive } from "../../Select/index.js";
7
+ import { extractTimezone, formatDateForDisplay, formatTimeValue, getLocalTimezone, parseTimeValue, toIsoWithTz } from "../utils/dateHelpers.js";
8
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
9
+ import { TimePicker } from "./components/TimePicker.js";
10
+ const timezoneOptions = UTC_TIMEZONES.map(tz => ({
11
+ value: tz.value,
12
+ label: tz.label
13
+ }));
14
+ function parseToDate(value) {
15
+ if (!value) {
16
+ return undefined;
17
+ }
18
+ const d = new Date(value);
19
+ if (Number.isNaN(d.getTime())) {
20
+ return undefined;
21
+ }
22
+ return d;
23
+ }
24
+ const DateTimePicker = ({
25
+ value,
26
+ onChange,
27
+ placeholder,
28
+ disabled,
29
+ size,
30
+ variant,
31
+ invalid,
32
+ weekStartsOn,
33
+ onOpenChange,
34
+ className,
35
+ withTimezone,
36
+ displayFormat
37
+ }) => {
38
+ const [open, setOpen] = useState(false);
39
+ const existingTz = withTimezone && value ? extractTimezone(value) : undefined;
40
+ const [timezone, setTimezone] = useState(existingTz || getLocalTimezone());
41
+ const handleOpenChange = isOpen => {
42
+ setOpen(isOpen);
43
+ if (onOpenChange) {
44
+ onOpenChange(isOpen);
45
+ }
46
+ };
47
+ const currentDate = parseToDate(value);
48
+ const displayValue = withTimezone ? formatDateForDisplay(value, "dateTimeTz", displayFormat) : formatDateForDisplay(value, "dateTimeLocal", displayFormat);
49
+ const timeValue = currentDate ? formatTimeValue(currentDate) : "";
50
+ const emitChange = (date, tz) => {
51
+ if (!onChange) {
52
+ return;
53
+ }
54
+ if (withTimezone) {
55
+ onChange(toIsoWithTz(date, tz || timezone));
56
+ } else {
57
+ onChange(format(date, "yyyy-MM-dd'T'HH:mm:ss"));
58
+ }
59
+ };
60
+ const handleDateSelect = date => {
61
+ if (!date) {
62
+ return;
63
+ }
64
+ if (currentDate) {
65
+ date.setHours(currentDate.getHours(), currentDate.getMinutes());
66
+ }
67
+ emitChange(date);
68
+ };
69
+ const handleTimeChange = time => {
70
+ if (!time) {
71
+ return;
72
+ }
73
+ const parsed = parseTimeValue(time);
74
+ if (!parsed) {
75
+ return;
76
+ }
77
+ const base = currentDate ? new Date(currentDate) : new Date();
78
+ base.setHours(parsed.hours, parsed.minutes, 0, 0);
79
+ emitChange(base);
80
+ };
81
+ const handleTimezoneChange = tz => {
82
+ setTimezone(tz);
83
+ if (currentDate) {
84
+ emitChange(currentDate, tz);
85
+ }
86
+ };
87
+ return /*#__PURE__*/React.createElement("div", {
88
+ className: className
89
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
90
+ open: open,
91
+ onOpenChange: handleOpenChange
92
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
93
+ displayValue: displayValue,
94
+ placeholder: placeholder ?? "Pick date & time",
95
+ disabled: disabled,
96
+ size: size,
97
+ variant: variant,
98
+ invalid: invalid
99
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
100
+ align: "start"
101
+ }, /*#__PURE__*/React.createElement("div", {
102
+ className: "flex flex-col gap-sm"
103
+ }, /*#__PURE__*/React.createElement(Calendar, {
104
+ mode: "single",
105
+ selected: currentDate,
106
+ onSelect: handleDateSelect,
107
+ weekStartsOn: weekStartsOn
108
+ }), /*#__PURE__*/React.createElement("div", {
109
+ className: "flex gap-sm px-md pb-md"
110
+ }, /*#__PURE__*/React.createElement("div", {
111
+ className: "flex-1"
112
+ }, /*#__PURE__*/React.createElement(TimePicker, {
113
+ value: timeValue,
114
+ onChange: handleTimeChange,
115
+ disabled: disabled,
116
+ size: "md"
117
+ })), withTimezone && /*#__PURE__*/React.createElement("div", {
118
+ className: "flex-1"
119
+ }, /*#__PURE__*/React.createElement(SelectPrimitive, {
120
+ value: timezone,
121
+ onChange: handleTimezoneChange,
122
+ options: timezoneOptions,
123
+ disabled: disabled,
124
+ size: "md"
125
+ })))))));
126
+ };
127
+ export { DateTimePicker };
128
+
129
+ //# sourceMappingURL=DateTimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","format","UTC_TIMEZONES","Calendar","PopoverPrimitive","SelectPrimitive","extractTimezone","formatDateForDisplay","formatTimeValue","getLocalTimezone","parseTimeValue","toIsoWithTz","DatePickerTrigger","TimePicker","timezoneOptions","map","tz","value","label","parseToDate","undefined","d","Date","Number","isNaN","getTime","DateTimePicker","onChange","placeholder","disabled","size","variant","invalid","weekStartsOn","onOpenChange","className","withTimezone","displayFormat","open","setOpen","existingTz","timezone","setTimezone","handleOpenChange","isOpen","currentDate","displayValue","timeValue","emitChange","date","handleDateSelect","setHours","getHours","getMinutes","handleTimeChange","time","parsed","base","hours","minutes","handleTimezoneChange","createElement","Content","align","mode","selected","onSelect","options"],"sources":["DateTimePicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { UTC_TIMEZONES } from \"@webiny/utils\";\nimport { Calendar } from \"~/Calendar/index.js\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport { SelectPrimitive } from \"~/Select/index.js\";\nimport type { DateTimeLocalPickerProps, DateTimeTzPickerProps } from \"../utils/types.js\";\nimport {\n extractTimezone,\n formatDateForDisplay,\n formatTimeValue,\n getLocalTimezone,\n parseTimeValue,\n toIsoWithTz\n} from \"../utils/dateHelpers.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\nimport { TimePicker } from \"./components/TimePicker.js\";\n\ntype DateTimePickerInternalProps = (DateTimeLocalPickerProps | DateTimeTzPickerProps) & {\n withTimezone: boolean;\n};\n\nconst timezoneOptions = UTC_TIMEZONES.map(tz => ({ value: tz.value, label: tz.label }));\n\nfunction parseToDate(value: string | undefined): Date | undefined {\n if (!value) {\n return undefined;\n }\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) {\n return undefined;\n }\n return d;\n}\n\nconst DateTimePicker = ({\n value,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n weekStartsOn,\n onOpenChange,\n className,\n withTimezone,\n displayFormat\n}: DateTimePickerInternalProps) => {\n const [open, setOpen] = useState(false);\n\n const existingTz = withTimezone && value ? extractTimezone(value as string) : undefined;\n const [timezone, setTimezone] = useState(existingTz || getLocalTimezone());\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const currentDate = parseToDate(value);\n\n const displayValue = withTimezone\n ? formatDateForDisplay(value, \"dateTimeTz\", displayFormat)\n : formatDateForDisplay(value, \"dateTimeLocal\", displayFormat);\n\n const timeValue = currentDate ? formatTimeValue(currentDate) : \"\";\n\n const emitChange = (date: Date, tz?: string) => {\n if (!onChange) {\n return;\n }\n if (withTimezone) {\n onChange(toIsoWithTz(date, tz || timezone));\n } else {\n onChange(format(date, \"yyyy-MM-dd'T'HH:mm:ss\"));\n }\n };\n\n const handleDateSelect = (date: Date | undefined) => {\n if (!date) {\n return;\n }\n if (currentDate) {\n date.setHours(currentDate.getHours(), currentDate.getMinutes());\n }\n emitChange(date);\n };\n\n const handleTimeChange = (time: string | undefined) => {\n if (!time) {\n return;\n }\n const parsed = parseTimeValue(time);\n if (!parsed) {\n return;\n }\n const base = currentDate ? new Date(currentDate) : new Date();\n base.setHours(parsed.hours, parsed.minutes, 0, 0);\n emitChange(base);\n };\n\n const handleTimezoneChange = (tz: string) => {\n setTimezone(tz);\n if (currentDate) {\n emitChange(currentDate, tz);\n }\n };\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick date & time\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <div className=\"flex flex-col gap-sm\">\n <Calendar\n mode=\"single\"\n selected={currentDate}\n onSelect={handleDateSelect}\n weekStartsOn={weekStartsOn}\n />\n <div className=\"flex gap-sm px-md pb-md\">\n <div className=\"flex-1\">\n <TimePicker\n value={timeValue}\n onChange={handleTimeChange}\n disabled={disabled}\n size=\"md\"\n />\n </div>\n {withTimezone && (\n <div className=\"flex-1\">\n <SelectPrimitive\n value={timezone}\n onChange={handleTimezoneChange}\n options={timezoneOptions}\n disabled={disabled}\n size=\"md\"\n />\n </div>\n )}\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n </div>\n );\n};\n\nexport { DateTimePicker };\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { MonthPickerProps } from "../utils/types.js";
3
+ declare const MonthPicker: ({ value, onChange, placeholder, disabled, size, variant, invalid, onOpenChange, className, displayFormat }: MonthPickerProps) => React.JSX.Element;
4
+ export { MonthPicker };
@@ -0,0 +1,60 @@
1
+ import React, { useState } from "react";
2
+ import { PopoverPrimitive } from "../../Popover/index.js";
3
+ import { formatDateForDisplay, formatMonthValue, parseMonthValue } from "../utils/dateHelpers.js";
4
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
5
+ import { YearStepper } from "./components/YearStepper.js";
6
+ import { MonthGrid } from "./components/MonthGrid.js";
7
+ const MonthPicker = ({
8
+ value,
9
+ onChange,
10
+ placeholder,
11
+ disabled,
12
+ size,
13
+ variant,
14
+ invalid,
15
+ onOpenChange,
16
+ className,
17
+ displayFormat
18
+ }) => {
19
+ const parsed = value ? parseMonthValue(value) : undefined;
20
+ const [open, setOpen] = useState(false);
21
+ const [viewYear, setViewYear] = useState(parsed?.year ?? new Date().getFullYear());
22
+ const handleOpenChange = isOpen => {
23
+ setOpen(isOpen);
24
+ if (onOpenChange) {
25
+ onOpenChange(isOpen);
26
+ }
27
+ };
28
+ const displayValue = formatDateForDisplay(value, "month", displayFormat);
29
+ const handleMonthSelect = month => {
30
+ if (onChange) {
31
+ onChange(formatMonthValue(viewYear, month));
32
+ }
33
+ handleOpenChange(false);
34
+ };
35
+ const selectedMonths = parsed && parsed.year === viewYear ? [parsed.month] : [];
36
+ return /*#__PURE__*/React.createElement("div", {
37
+ className: className
38
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
39
+ open: open,
40
+ onOpenChange: handleOpenChange
41
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
42
+ displayValue: displayValue,
43
+ placeholder: placeholder ?? "Pick a month",
44
+ disabled: disabled,
45
+ size: size,
46
+ variant: variant,
47
+ invalid: invalid
48
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
49
+ align: "start"
50
+ }, /*#__PURE__*/React.createElement(YearStepper, {
51
+ year: viewYear,
52
+ onYearChange: setViewYear
53
+ }), /*#__PURE__*/React.createElement(MonthGrid, {
54
+ selectedMonths: selectedMonths,
55
+ onSelectMonth: handleMonthSelect
56
+ }))));
57
+ };
58
+ export { MonthPicker };
59
+
60
+ //# sourceMappingURL=MonthPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","PopoverPrimitive","formatDateForDisplay","formatMonthValue","parseMonthValue","DatePickerTrigger","YearStepper","MonthGrid","MonthPicker","value","onChange","placeholder","disabled","size","variant","invalid","onOpenChange","className","displayFormat","parsed","undefined","open","setOpen","viewYear","setViewYear","year","Date","getFullYear","handleOpenChange","isOpen","displayValue","handleMonthSelect","month","selectedMonths","createElement","Content","align","onYearChange","onSelectMonth"],"sources":["MonthPicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport type { MonthPickerProps } from \"../utils/types.js\";\nimport { formatDateForDisplay, formatMonthValue, parseMonthValue } from \"../utils/dateHelpers.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\nimport { YearStepper } from \"./components/YearStepper.js\";\nimport { MonthGrid } from \"./components/MonthGrid.js\";\n\nconst MonthPicker = ({\n value,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n onOpenChange,\n className,\n displayFormat\n}: MonthPickerProps) => {\n const parsed = value ? parseMonthValue(value) : undefined;\n const [open, setOpen] = useState(false);\n const [viewYear, setViewYear] = useState(parsed?.year ?? new Date().getFullYear());\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const displayValue = formatDateForDisplay(value, \"month\", displayFormat);\n\n const handleMonthSelect = (month: number) => {\n if (onChange) {\n onChange(formatMonthValue(viewYear, month));\n }\n handleOpenChange(false);\n };\n\n const selectedMonths = parsed && parsed.year === viewYear ? [parsed.month] : [];\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick a month\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <YearStepper year={viewYear} onYearChange={setViewYear} />\n <MonthGrid selectedMonths={selectedMonths} onSelectMonth={handleMonthSelect} />\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n </div>\n );\n};\n\nexport { MonthPicker };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,gBAAgB;AAEzB,SAASC,oBAAoB,EAAEC,gBAAgB,EAAEC,eAAe;AAChE,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,SAAS;AAElB,MAAMC,WAAW,GAAGA,CAAC;EACjBC,KAAK;EACLC,QAAQ;EACRC,WAAW;EACXC,QAAQ;EACRC,IAAI;EACJC,OAAO;EACPC,OAAO;EACPC,YAAY;EACZC,SAAS;EACTC;AACc,CAAC,KAAK;EACpB,MAAMC,MAAM,GAAGV,KAAK,GAAGL,eAAe,CAACK,KAAK,CAAC,GAAGW,SAAS;EACzD,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGtB,QAAQ,CAAC,KAAK,CAAC;EACvC,MAAM,CAACuB,QAAQ,EAAEC,WAAW,CAAC,GAAGxB,QAAQ,CAACmB,MAAM,EAAEM,IAAI,IAAI,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;EAElF,MAAMC,gBAAgB,GAAIC,MAAe,IAAK;IAC1CP,OAAO,CAACO,MAAM,CAAC;IACf,IAAIb,YAAY,EAAE;MACdA,YAAY,CAACa,MAAM,CAAC;IACxB;EACJ,CAAC;EAED,MAAMC,YAAY,GAAG5B,oBAAoB,CAACO,KAAK,EAAE,OAAO,EAAES,aAAa,CAAC;EAExE,MAAMa,iBAAiB,GAAIC,KAAa,IAAK;IACzC,IAAItB,QAAQ,EAAE;MACVA,QAAQ,CAACP,gBAAgB,CAACoB,QAAQ,EAAES,KAAK,CAAC,CAAC;IAC/C;IACAJ,gBAAgB,CAAC,KAAK,CAAC;EAC3B,CAAC;EAED,MAAMK,cAAc,GAAGd,MAAM,IAAIA,MAAM,CAACM,IAAI,KAAKF,QAAQ,GAAG,CAACJ,MAAM,CAACa,KAAK,CAAC,GAAG,EAAE;EAE/E,oBACIjC,KAAA,CAAAmC,aAAA;IAAKjB,SAAS,EAAEA;EAAU,gBACtBlB,KAAA,CAAAmC,aAAA,CAACjC,gBAAgB;IAACoB,IAAI,EAAEA,IAAK;IAACL,YAAY,EAAEY;EAAiB,gBACzD7B,KAAA,CAAAmC,aAAA,CAAC7B,iBAAiB;IACdyB,YAAY,EAAEA,YAAa;IAC3BnB,WAAW,EAAEA,WAAW,IAAI,cAAe;IAC3CC,QAAQ,EAAEA,QAAS;IACnBC,IAAI,EAAEA,IAAK;IACXC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA;EAAQ,CACpB,CAAC,eACFhB,KAAA,CAAAmC,aAAA,CAACjC,gBAAgB,CAACkC,OAAO;IAACC,KAAK,EAAC;EAAO,gBACnCrC,KAAA,CAAAmC,aAAA,CAAC5B,WAAW;IAACmB,IAAI,EAAEF,QAAS;IAACc,YAAY,EAAEb;EAAY,CAAE,CAAC,eAC1DzB,KAAA,CAAAmC,aAAA,CAAC3B,SAAS;IAAC0B,cAAc,EAAEA,cAAe;IAACK,aAAa,EAAEP;EAAkB,CAAE,CACxD,CACZ,CACjB,CAAC;AAEd,CAAC;AAED,SAASvB,WAAW","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { MultipleDatesPickerProps } from "../utils/types.js";
3
+ declare const MultipleDatesPicker: ({ value: valueProp, onChange, placeholder, disabled, size, variant, invalid, weekStartsOn, onOpenChange, className }: MultipleDatesPickerProps) => React.JSX.Element;
4
+ export { MultipleDatesPicker };
@@ -0,0 +1,73 @@
1
+ import React, { useState } from "react";
2
+ import { format } from "date-fns";
3
+ import { Calendar } from "../../Calendar/index.js";
4
+ import { PopoverPrimitive } from "../../Popover/index.js";
5
+ import { formatDateForDisplay } from "../utils/dateHelpers.js";
6
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
7
+ import { SelectedTagsList } from "./components/SelectedTagsList.js";
8
+ const toDateStr = d => format(d, "yyyy-MM-dd");
9
+ const MultipleDatesPicker = ({
10
+ value: valueProp,
11
+ onChange,
12
+ placeholder,
13
+ disabled,
14
+ size,
15
+ variant,
16
+ invalid,
17
+ weekStartsOn,
18
+ onOpenChange,
19
+ className
20
+ }) => {
21
+ const value = valueProp ?? [];
22
+ const [open, setOpen] = useState(false);
23
+ const handleOpenChange = isOpen => {
24
+ setOpen(isOpen);
25
+ if (onOpenChange) {
26
+ onOpenChange(isOpen);
27
+ }
28
+ };
29
+ const displayValue = formatDateForDisplay(value, "multipleDates");
30
+ const selectedDates = value.map(s => new Date(s));
31
+ const handleSelect = dates => {
32
+ if (onChange) {
33
+ const sorted = [...(dates ?? [])].sort((a, b) => a.getTime() - b.getTime());
34
+ onChange(sorted.map(toDateStr));
35
+ }
36
+ };
37
+ const handleRemove = key => {
38
+ if (onChange) {
39
+ onChange(value.filter(d => d !== key));
40
+ }
41
+ };
42
+ const tagItems = value.map(d => ({
43
+ key: d,
44
+ label: format(new Date(d), "MMM d, yyyy")
45
+ }));
46
+ return /*#__PURE__*/React.createElement("div", {
47
+ className: className
48
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
49
+ open: open,
50
+ onOpenChange: handleOpenChange
51
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
52
+ displayValue: displayValue,
53
+ placeholder: placeholder ?? "Pick dates",
54
+ disabled: disabled,
55
+ size: size,
56
+ variant: variant,
57
+ invalid: invalid
58
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
59
+ align: "start"
60
+ }, /*#__PURE__*/React.createElement(Calendar, {
61
+ mode: "multiple",
62
+ selected: selectedDates,
63
+ onSelect: handleSelect,
64
+ weekStartsOn: weekStartsOn
65
+ }))), /*#__PURE__*/React.createElement(SelectedTagsList, {
66
+ items: tagItems,
67
+ onRemove: handleRemove,
68
+ disabled: disabled
69
+ }));
70
+ };
71
+ export { MultipleDatesPicker };
72
+
73
+ //# sourceMappingURL=MultipleDatesPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","format","Calendar","PopoverPrimitive","formatDateForDisplay","DatePickerTrigger","SelectedTagsList","toDateStr","d","MultipleDatesPicker","value","valueProp","onChange","placeholder","disabled","size","variant","invalid","weekStartsOn","onOpenChange","className","open","setOpen","handleOpenChange","isOpen","displayValue","selectedDates","map","s","Date","handleSelect","dates","sorted","sort","a","b","getTime","handleRemove","key","filter","tagItems","label","createElement","Content","align","mode","selected","onSelect","items","onRemove"],"sources":["MultipleDatesPicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { Calendar } from \"~/Calendar/index.js\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport type { MultipleDatesPickerProps } from \"../utils/types.js\";\nimport { formatDateForDisplay } from \"../utils/dateHelpers.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\nimport { SelectedTagsList } from \"./components/SelectedTagsList.js\";\n\nconst toDateStr = (d: Date) => format(d, \"yyyy-MM-dd\");\n\nconst MultipleDatesPicker = ({\n value: valueProp,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n weekStartsOn,\n onOpenChange,\n className\n}: MultipleDatesPickerProps) => {\n const value = valueProp ?? [];\n const [open, setOpen] = useState(false);\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const displayValue = formatDateForDisplay(value, \"multipleDates\");\n\n const selectedDates = value.map(s => new Date(s));\n\n const handleSelect = (dates: Date[] | undefined) => {\n if (onChange) {\n const sorted = [...(dates ?? [])].sort((a, b) => a.getTime() - b.getTime());\n onChange(sorted.map(toDateStr));\n }\n };\n\n const handleRemove = (key: string) => {\n if (onChange) {\n onChange(value.filter(d => d !== key));\n }\n };\n\n const tagItems = value.map(d => ({\n key: d,\n label: format(new Date(d), \"MMM d, yyyy\")\n }));\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick dates\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <Calendar\n mode=\"multiple\"\n selected={selectedDates}\n onSelect={handleSelect}\n weekStartsOn={weekStartsOn}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n <SelectedTagsList items={tagItems} onRemove={handleRemove} disabled={disabled} />\n </div>\n );\n};\n\nexport { MultipleDatesPicker };\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { MultipleMonthsPickerProps } from "../utils/types.js";
3
+ declare const MultipleMonthsPicker: ({ value: valueProp, onChange, placeholder, disabled, size, variant, invalid, onOpenChange, className }: MultipleMonthsPickerProps) => React.JSX.Element;
4
+ export { MultipleMonthsPicker };
@@ -0,0 +1,85 @@
1
+ import React, { useState } from "react";
2
+ import { PopoverPrimitive } from "../../Popover/index.js";
3
+ import { formatDateForDisplay, formatMonthValue, parseMonthValue } from "../utils/dateHelpers.js";
4
+ import { MONTH_NAMES_SHORT } from "../utils/constants.js";
5
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
6
+ import { YearStepper } from "./components/YearStepper.js";
7
+ import { MonthGrid } from "./components/MonthGrid.js";
8
+ import { SelectedTagsList } from "./components/SelectedTagsList.js";
9
+ const MultipleMonthsPicker = ({
10
+ value: valueProp,
11
+ onChange,
12
+ placeholder,
13
+ disabled,
14
+ size,
15
+ variant,
16
+ invalid,
17
+ onOpenChange,
18
+ className
19
+ }) => {
20
+ const value = valueProp ?? [];
21
+ const [open, setOpen] = useState(false);
22
+ const [viewYear, setViewYear] = useState(new Date().getFullYear());
23
+ const handleOpenChange = isOpen => {
24
+ setOpen(isOpen);
25
+ if (onOpenChange) {
26
+ onOpenChange(isOpen);
27
+ }
28
+ };
29
+ const displayValue = formatDateForDisplay(value, "multipleMonths");
30
+ const handleMonthSelect = month => {
31
+ if (!onChange) {
32
+ return;
33
+ }
34
+ const monthValue = formatMonthValue(viewYear, month);
35
+ if (value.includes(monthValue)) {
36
+ onChange(value.filter(v => v !== monthValue));
37
+ } else {
38
+ const next = [...value, monthValue];
39
+ next.sort();
40
+ onChange(next);
41
+ }
42
+ };
43
+ const handleRemove = key => {
44
+ if (onChange) {
45
+ onChange(value.filter(v => v !== key));
46
+ }
47
+ };
48
+ const selectedMonthsInView = value.map(v => parseMonthValue(v)).filter(p => p !== undefined && p.year === viewYear).map(p => p.month);
49
+ const tagItems = value.map(v => {
50
+ const parsed = parseMonthValue(v);
51
+ const label = parsed ? `${MONTH_NAMES_SHORT[parsed.month]} ${parsed.year}` : v;
52
+ return {
53
+ key: v,
54
+ label
55
+ };
56
+ });
57
+ return /*#__PURE__*/React.createElement("div", {
58
+ className: className
59
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
60
+ open: open,
61
+ onOpenChange: handleOpenChange
62
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
63
+ displayValue: displayValue,
64
+ placeholder: placeholder ?? "Pick months",
65
+ disabled: disabled,
66
+ size: size,
67
+ variant: variant,
68
+ invalid: invalid
69
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
70
+ align: "start"
71
+ }, /*#__PURE__*/React.createElement(YearStepper, {
72
+ year: viewYear,
73
+ onYearChange: setViewYear
74
+ }), /*#__PURE__*/React.createElement(MonthGrid, {
75
+ selectedMonths: selectedMonthsInView,
76
+ onSelectMonth: handleMonthSelect
77
+ }))), /*#__PURE__*/React.createElement(SelectedTagsList, {
78
+ items: tagItems,
79
+ onRemove: handleRemove,
80
+ disabled: disabled
81
+ }));
82
+ };
83
+ export { MultipleMonthsPicker };
84
+
85
+ //# sourceMappingURL=MultipleMonthsPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","PopoverPrimitive","formatDateForDisplay","formatMonthValue","parseMonthValue","MONTH_NAMES_SHORT","DatePickerTrigger","YearStepper","MonthGrid","SelectedTagsList","MultipleMonthsPicker","value","valueProp","onChange","placeholder","disabled","size","variant","invalid","onOpenChange","className","open","setOpen","viewYear","setViewYear","Date","getFullYear","handleOpenChange","isOpen","displayValue","handleMonthSelect","month","monthValue","includes","filter","v","next","sort","handleRemove","key","selectedMonthsInView","map","p","undefined","year","tagItems","parsed","label","createElement","Content","align","onYearChange","selectedMonths","onSelectMonth","items","onRemove"],"sources":["MultipleMonthsPicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport type { MultipleMonthsPickerProps } from \"../utils/types.js\";\nimport { formatDateForDisplay, formatMonthValue, parseMonthValue } from \"../utils/dateHelpers.js\";\nimport { MONTH_NAMES_SHORT } from \"../utils/constants.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\nimport { YearStepper } from \"./components/YearStepper.js\";\nimport { MonthGrid } from \"./components/MonthGrid.js\";\nimport { SelectedTagsList } from \"./components/SelectedTagsList.js\";\n\nconst MultipleMonthsPicker = ({\n value: valueProp,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n onOpenChange,\n className\n}: MultipleMonthsPickerProps) => {\n const value = valueProp ?? [];\n const [open, setOpen] = useState(false);\n const [viewYear, setViewYear] = useState(new Date().getFullYear());\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const displayValue = formatDateForDisplay(value, \"multipleMonths\");\n\n const handleMonthSelect = (month: number) => {\n if (!onChange) {\n return;\n }\n const monthValue = formatMonthValue(viewYear, month);\n if (value.includes(monthValue)) {\n onChange(value.filter(v => v !== monthValue));\n } else {\n const next = [...value, monthValue];\n next.sort();\n onChange(next);\n }\n };\n\n const handleRemove = (key: string) => {\n if (onChange) {\n onChange(value.filter(v => v !== key));\n }\n };\n\n const selectedMonthsInView = value\n .map(v => parseMonthValue(v))\n .filter((p): p is { year: number; month: number } => p !== undefined && p.year === viewYear)\n .map(p => p.month);\n\n const tagItems = value.map(v => {\n const parsed = parseMonthValue(v);\n const label = parsed ? `${MONTH_NAMES_SHORT[parsed.month]} ${parsed.year}` : v;\n return { key: v, label };\n });\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick months\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <YearStepper year={viewYear} onYearChange={setViewYear} />\n <MonthGrid\n selectedMonths={selectedMonthsInView}\n onSelectMonth={handleMonthSelect}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n <SelectedTagsList items={tagItems} onRemove={handleRemove} disabled={disabled} />\n </div>\n );\n};\n\nexport { MultipleMonthsPicker };\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { MultipleYearsPickerProps } from "../utils/types.js";
3
+ declare const MultipleYearsPicker: ({ value: valueProp, onChange, placeholder, disabled, size, variant, invalid, yearRange, onOpenChange, className }: MultipleYearsPickerProps) => React.JSX.Element;
4
+ export { MultipleYearsPicker };
@@ -0,0 +1,75 @@
1
+ import React, { useState } from "react";
2
+ import { PopoverPrimitive } from "../../Popover/index.js";
3
+ import { formatDateForDisplay } from "../utils/dateHelpers.js";
4
+ import { DatePickerTrigger } from "./components/DatePickerTrigger.js";
5
+ import { YearGrid } from "./components/YearGrid.js";
6
+ import { SelectedTagsList } from "./components/SelectedTagsList.js";
7
+ const MultipleYearsPicker = ({
8
+ value: valueProp,
9
+ onChange,
10
+ placeholder,
11
+ disabled,
12
+ size,
13
+ variant,
14
+ invalid,
15
+ yearRange,
16
+ onOpenChange,
17
+ className
18
+ }) => {
19
+ const value = valueProp ?? [];
20
+ const [open, setOpen] = useState(false);
21
+ const handleOpenChange = isOpen => {
22
+ setOpen(isOpen);
23
+ if (onOpenChange) {
24
+ onOpenChange(isOpen);
25
+ }
26
+ };
27
+ const displayValue = formatDateForDisplay(value, "multipleYears");
28
+ const handleYearSelect = year => {
29
+ if (!onChange) {
30
+ return;
31
+ }
32
+ if (value.includes(year)) {
33
+ onChange(value.filter(v => v !== year));
34
+ } else {
35
+ const next = [...value, year];
36
+ next.sort((a, b) => a - b);
37
+ onChange(next);
38
+ }
39
+ };
40
+ const handleRemove = key => {
41
+ if (onChange) {
42
+ onChange(value.filter(v => String(v) !== key));
43
+ }
44
+ };
45
+ const tagItems = value.map(y => ({
46
+ key: String(y),
47
+ label: String(y)
48
+ }));
49
+ return /*#__PURE__*/React.createElement("div", {
50
+ className: className
51
+ }, /*#__PURE__*/React.createElement(PopoverPrimitive, {
52
+ open: open,
53
+ onOpenChange: handleOpenChange
54
+ }, /*#__PURE__*/React.createElement(DatePickerTrigger, {
55
+ displayValue: displayValue,
56
+ placeholder: placeholder ?? "Pick years",
57
+ disabled: disabled,
58
+ size: size,
59
+ variant: variant,
60
+ invalid: invalid
61
+ }), /*#__PURE__*/React.createElement(PopoverPrimitive.Content, {
62
+ align: "start"
63
+ }, /*#__PURE__*/React.createElement(YearGrid, {
64
+ selectedYears: value,
65
+ onSelectYear: handleYearSelect,
66
+ yearRange: yearRange
67
+ }))), /*#__PURE__*/React.createElement(SelectedTagsList, {
68
+ items: tagItems,
69
+ onRemove: handleRemove,
70
+ disabled: disabled
71
+ }));
72
+ };
73
+ export { MultipleYearsPicker };
74
+
75
+ //# sourceMappingURL=MultipleYearsPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","PopoverPrimitive","formatDateForDisplay","DatePickerTrigger","YearGrid","SelectedTagsList","MultipleYearsPicker","value","valueProp","onChange","placeholder","disabled","size","variant","invalid","yearRange","onOpenChange","className","open","setOpen","handleOpenChange","isOpen","displayValue","handleYearSelect","year","includes","filter","v","next","sort","a","b","handleRemove","key","String","tagItems","map","y","label","createElement","Content","align","selectedYears","onSelectYear","items","onRemove"],"sources":["MultipleYearsPicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { PopoverPrimitive } from \"~/Popover/index.js\";\nimport type { MultipleYearsPickerProps } from \"../utils/types.js\";\nimport { formatDateForDisplay } from \"../utils/dateHelpers.js\";\nimport { DatePickerTrigger } from \"./components/DatePickerTrigger.js\";\nimport { YearGrid } from \"./components/YearGrid.js\";\nimport { SelectedTagsList } from \"./components/SelectedTagsList.js\";\n\nconst MultipleYearsPicker = ({\n value: valueProp,\n onChange,\n placeholder,\n disabled,\n size,\n variant,\n invalid,\n yearRange,\n onOpenChange,\n className\n}: MultipleYearsPickerProps) => {\n const value = valueProp ?? [];\n const [open, setOpen] = useState(false);\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (onOpenChange) {\n onOpenChange(isOpen);\n }\n };\n\n const displayValue = formatDateForDisplay(value, \"multipleYears\");\n\n const handleYearSelect = (year: number) => {\n if (!onChange) {\n return;\n }\n if (value.includes(year)) {\n onChange(value.filter(v => v !== year));\n } else {\n const next = [...value, year];\n next.sort((a, b) => a - b);\n onChange(next);\n }\n };\n\n const handleRemove = (key: string) => {\n if (onChange) {\n onChange(value.filter(v => String(v) !== key));\n }\n };\n\n const tagItems = value.map(y => ({\n key: String(y),\n label: String(y)\n }));\n\n return (\n <div className={className}>\n <PopoverPrimitive open={open} onOpenChange={handleOpenChange}>\n <DatePickerTrigger\n displayValue={displayValue}\n placeholder={placeholder ?? \"Pick years\"}\n disabled={disabled}\n size={size}\n variant={variant}\n invalid={invalid}\n />\n <PopoverPrimitive.Content align=\"start\">\n <YearGrid\n selectedYears={value}\n onSelectYear={handleYearSelect}\n yearRange={yearRange}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive>\n <SelectedTagsList items={tagItems} onRemove={handleRemove} disabled={disabled} />\n </div>\n );\n};\n\nexport { MultipleYearsPicker };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,gBAAgB;AAEzB,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAC1B,SAASC,QAAQ;AACjB,SAASC,gBAAgB;AAEzB,MAAMC,mBAAmB,GAAGA,CAAC;EACzBC,KAAK,EAAEC,SAAS;EAChBC,QAAQ;EACRC,WAAW;EACXC,QAAQ;EACRC,IAAI;EACJC,OAAO;EACPC,OAAO;EACPC,SAAS;EACTC,YAAY;EACZC;AACsB,CAAC,KAAK;EAC5B,MAAMV,KAAK,GAAGC,SAAS,IAAI,EAAE;EAC7B,MAAM,CAACU,IAAI,EAAEC,OAAO,CAAC,GAAGnB,QAAQ,CAAC,KAAK,CAAC;EAEvC,MAAMoB,gBAAgB,GAAIC,MAAe,IAAK;IAC1CF,OAAO,CAACE,MAAM,CAAC;IACf,IAAIL,YAAY,EAAE;MACdA,YAAY,CAACK,MAAM,CAAC;IACxB;EACJ,CAAC;EAED,MAAMC,YAAY,GAAGpB,oBAAoB,CAACK,KAAK,EAAE,eAAe,CAAC;EAEjE,MAAMgB,gBAAgB,GAAIC,IAAY,IAAK;IACvC,IAAI,CAACf,QAAQ,EAAE;MACX;IACJ;IACA,IAAIF,KAAK,CAACkB,QAAQ,CAACD,IAAI,CAAC,EAAE;MACtBf,QAAQ,CAACF,KAAK,CAACmB,MAAM,CAACC,CAAC,IAAIA,CAAC,KAAKH,IAAI,CAAC,CAAC;IAC3C,CAAC,MAAM;MACH,MAAMI,IAAI,GAAG,CAAC,GAAGrB,KAAK,EAAEiB,IAAI,CAAC;MAC7BI,IAAI,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;MAC1BtB,QAAQ,CAACmB,IAAI,CAAC;IAClB;EACJ,CAAC;EAED,MAAMI,YAAY,GAAIC,GAAW,IAAK;IAClC,IAAIxB,QAAQ,EAAE;MACVA,QAAQ,CAACF,KAAK,CAACmB,MAAM,CAACC,CAAC,IAAIO,MAAM,CAACP,CAAC,CAAC,KAAKM,GAAG,CAAC,CAAC;IAClD;EACJ,CAAC;EAED,MAAME,QAAQ,GAAG5B,KAAK,CAAC6B,GAAG,CAACC,CAAC,KAAK;IAC7BJ,GAAG,EAAEC,MAAM,CAACG,CAAC,CAAC;IACdC,KAAK,EAAEJ,MAAM,CAACG,CAAC;EACnB,CAAC,CAAC,CAAC;EAEH,oBACItC,KAAA,CAAAwC,aAAA;IAAKtB,SAAS,EAAEA;EAAU,gBACtBlB,KAAA,CAAAwC,aAAA,CAACtC,gBAAgB;IAACiB,IAAI,EAAEA,IAAK;IAACF,YAAY,EAAEI;EAAiB,gBACzDrB,KAAA,CAAAwC,aAAA,CAACpC,iBAAiB;IACdmB,YAAY,EAAEA,YAAa;IAC3BZ,WAAW,EAAEA,WAAW,IAAI,YAAa;IACzCC,QAAQ,EAAEA,QAAS;IACnBC,IAAI,EAAEA,IAAK;IACXC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA;EAAQ,CACpB,CAAC,eACFf,KAAA,CAAAwC,aAAA,CAACtC,gBAAgB,CAACuC,OAAO;IAACC,KAAK,EAAC;EAAO,gBACnC1C,KAAA,CAAAwC,aAAA,CAACnC,QAAQ;IACLsC,aAAa,EAAEnC,KAAM;IACrBoC,YAAY,EAAEpB,gBAAiB;IAC/BR,SAAS,EAAEA;EAAU,CACxB,CACqB,CACZ,CAAC,eACnBhB,KAAA,CAAAwC,aAAA,CAAClC,gBAAgB;IAACuC,KAAK,EAAET,QAAS;IAACU,QAAQ,EAAEb,YAAa;IAACrB,QAAQ,EAAEA;EAAS,CAAE,CAC/E,CAAC;AAEd,CAAC;AAED,SAASL,mBAAmB","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { TimeOnlyPickerProps } from "../utils/types.js";
3
+ declare const TimeOnlyPicker: ({ value, onChange, disabled, size, variant, invalid, className }: TimeOnlyPickerProps) => React.JSX.Element;
4
+ export { TimeOnlyPicker };