@addsign/moje-agenda-shared-lib 2.0.79 → 2.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/style.css +8 -0
- package/dist/components/Attachments.js +1 -0
- package/dist/components/Attachments.js.map +1 -1
- package/dist/components/datatable/DataTable.js +1 -0
- package/dist/components/datatable/DataTable.js.map +1 -1
- package/dist/components/datatable/DataTableServer.js +9 -0
- package/dist/components/datatable/DataTableServer.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBar.js +1 -0
- package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBarServer.js +1 -0
- package/dist/components/form/AutocompleteSearchBarServer.js.map +1 -1
- package/dist/components/form/FileInput.js +1 -0
- package/dist/components/form/FileInput.js.map +1 -1
- package/dist/components/form/FileInputForm.js +1 -0
- package/dist/components/form/FileInputForm.js.map +1 -1
- package/dist/components/form/FileInputFormMultiple.js +1 -0
- package/dist/components/form/FileInputFormMultiple.js.map +1 -1
- package/dist/components/form/FileInputMultiple.js +1 -0
- package/dist/components/form/FileInputMultiple.js.map +1 -1
- package/dist/components/form/FormField.js +1 -0
- package/dist/components/form/FormField.js.map +1 -1
- package/dist/components/form/PositionsSelectorSingle.js +1 -0
- package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
- package/dist/components/form/SelectField.js +1 -0
- package/dist/components/form/SelectField.js.map +1 -1
- package/dist/components/layout/Neoptimizovano.js +1 -0
- package/dist/components/layout/Neoptimizovano.js.map +1 -1
- package/dist/components/profiles/ProfileOverview.js +1 -0
- package/dist/components/profiles/ProfileOverview.js.map +1 -1
- package/dist/components/ui/DateTimePicker.js +3 -44
- package/dist/components/ui/DateTimePicker.js.map +1 -1
- package/dist/components/ui/DateTimePicker2.d.ts +14 -0
- package/dist/components/ui/DateTimePicker2.js +196 -0
- package/dist/components/ui/DateTimePicker2.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +4 -2
- package/dist/main.js.map +1 -1
- package/dist/set-BOUTbzpR.js +49 -0
- package/dist/set-BOUTbzpR.js.map +1 -0
- package/lib/components/datatable/DataTableServer.tsx +11 -0
- package/lib/components/ui/DateTimePicker2.tsx +242 -0
- package/lib/main.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { c as createLucideIcon } from "./createLucideIcon-KSoQd4Wi.js";
|
|
2
|
+
import { t as toDate, c as constructFrom, s as setMonth } from "./Calendar-DWT4e7Th.js";
|
|
3
|
+
/**
|
|
4
|
+
* @license lucide-react v0.456.0 - ISC
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the ISC license.
|
|
7
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
const CalendarClock = createLucideIcon("CalendarClock", [
|
|
10
|
+
["path", { d: "M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5", key: "1osxxc" }],
|
|
11
|
+
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
12
|
+
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
13
|
+
["path", { d: "M3 10h5", key: "r794hk" }],
|
|
14
|
+
["path", { d: "M17.5 17.5 16 16.3V14", key: "akvzfd" }],
|
|
15
|
+
["circle", { cx: "16", cy: "16", r: "6", key: "qoo3c4" }]
|
|
16
|
+
]);
|
|
17
|
+
function set(date, values) {
|
|
18
|
+
let _date = toDate(date);
|
|
19
|
+
if (isNaN(+_date)) {
|
|
20
|
+
return constructFrom(date, NaN);
|
|
21
|
+
}
|
|
22
|
+
if (values.year != null) {
|
|
23
|
+
_date.setFullYear(values.year);
|
|
24
|
+
}
|
|
25
|
+
if (values.month != null) {
|
|
26
|
+
_date = setMonth(_date, values.month);
|
|
27
|
+
}
|
|
28
|
+
if (values.date != null) {
|
|
29
|
+
_date.setDate(values.date);
|
|
30
|
+
}
|
|
31
|
+
if (values.hours != null) {
|
|
32
|
+
_date.setHours(values.hours);
|
|
33
|
+
}
|
|
34
|
+
if (values.minutes != null) {
|
|
35
|
+
_date.setMinutes(values.minutes);
|
|
36
|
+
}
|
|
37
|
+
if (values.seconds != null) {
|
|
38
|
+
_date.setSeconds(values.seconds);
|
|
39
|
+
}
|
|
40
|
+
if (values.milliseconds != null) {
|
|
41
|
+
_date.setMilliseconds(values.milliseconds);
|
|
42
|
+
}
|
|
43
|
+
return _date;
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
CalendarClock as C,
|
|
47
|
+
set as s
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=set-BOUTbzpR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-BOUTbzpR.js","sources":["../node_modules/lucide-react/dist/esm/icons/calendar-clock.js","../node_modules/date-fns/set.mjs"],"sourcesContent":["/**\n * @license lucide-react v0.456.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CalendarClock = createLucideIcon(\"CalendarClock\", [\n [\"path\", { d: \"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5\", key: \"1osxxc\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M3 10h5\", key: \"r794hk\" }],\n [\"path\", { d: \"M17.5 17.5 16 16.3V14\", key: \"akvzfd\" }],\n [\"circle\", { cx: \"16\", cy: \"16\", r: \"6\", key: \"qoo3c4\" }]\n]);\n\nexport { CalendarClock as default };\n//# sourceMappingURL=calendar-clock.js.map\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { setMonth } from \"./setMonth.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name set\n * @category Common Helpers\n * @summary Set date values to a given date.\n *\n * @description\n * Set date values to a given date.\n *\n * Sets time values to date from object `values`.\n * A value is not set if it is undefined or null or doesn't exist in `values`.\n *\n * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts\n * to use native `Date#setX` methods. If you use this function, you may not want to include the\n * other `setX` functions that date-fns provides if you are concerned about the bundle size.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param values - The date values to be set\n *\n * @returns The new date with options set\n *\n * @example\n * // Transform 1 September 2014 into 20 October 2015 in a single line:\n * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })\n * //=> Tue Oct 20 2015 00:00:00\n *\n * @example\n * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:\n * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })\n * //=> Mon Sep 01 2014 12:23:45\n */\n\nexport function set(date, values) {\n let _date = toDate(date);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(+_date)) {\n return constructFrom(date, NaN);\n }\n\n if (values.year != null) {\n _date.setFullYear(values.year);\n }\n\n if (values.month != null) {\n _date = setMonth(_date, values.month);\n }\n\n if (values.date != null) {\n _date.setDate(values.date);\n }\n\n if (values.hours != null) {\n _date.setHours(values.hours);\n }\n\n if (values.minutes != null) {\n _date.setMinutes(values.minutes);\n }\n\n if (values.seconds != null) {\n _date.setSeconds(values.seconds);\n }\n\n if (values.milliseconds != null) {\n _date.setMilliseconds(values.milliseconds);\n }\n\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default set;\n"],"names":[],"mappings":";;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAAC,gBAAgB,iBAAiB,iBAAiB;AAAA,EACtD,CAAC,QAAQ,EAAE,GAAG,gEAAgE,KAAK,SAAQ,CAAE;AAAA,EAC7F,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,UAAU,KAAK,SAAQ,CAAE;AAAA,EACvC,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,yBAAyB,KAAK,SAAQ,CAAE;AAAA,EACtD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAC1D,CAAC;ACqBM,SAAS,IAAI,MAAM,QAAQ;AAChC,MAAI,QAAQ,OAAO,IAAI;AAGvB,MAAI,MAAM,CAAC,KAAK,GAAG;AACjB,WAAO,cAAc,MAAM,GAAG;AAAA,EAC/B;AAED,MAAI,OAAO,QAAQ,MAAM;AACvB,UAAM,YAAY,OAAO,IAAI;AAAA,EAC9B;AAED,MAAI,OAAO,SAAS,MAAM;AACxB,YAAQ,SAAS,OAAO,OAAO,KAAK;AAAA,EACrC;AAED,MAAI,OAAO,QAAQ,MAAM;AACvB,UAAM,QAAQ,OAAO,IAAI;AAAA,EAC1B;AAED,MAAI,OAAO,SAAS,MAAM;AACxB,UAAM,SAAS,OAAO,KAAK;AAAA,EAC5B;AAED,MAAI,OAAO,WAAW,MAAM;AAC1B,UAAM,WAAW,OAAO,OAAO;AAAA,EAChC;AAED,MAAI,OAAO,WAAW,MAAM;AAC1B,UAAM,WAAW,OAAO,OAAO;AAAA,EAChC;AAED,MAAI,OAAO,gBAAgB,MAAM;AAC/B,UAAM,gBAAgB,OAAO,YAAY;AAAA,EAC1C;AAED,SAAO;AACT;","x_google_ignoreList":[0,1]}
|
|
@@ -343,6 +343,17 @@ function DataTableServer<T extends DataTableInternalItems>({
|
|
|
343
343
|
}
|
|
344
344
|
}, [id]);
|
|
345
345
|
|
|
346
|
+
// Pokud sortConfig.sortParam neodpovídá žádnému sloupci (např. po změně
|
|
347
|
+
// definice tabulky), resetuj sortConfig – jinak by API vrátilo 500 s
|
|
348
|
+
// "Filter error: sortBy field not defined" kvůli staré hodnotě v localStorage.
|
|
349
|
+
useEffect(() => {
|
|
350
|
+
if (!sortConfig?.sortParam) return;
|
|
351
|
+
const exists = columns.some((c) => c.sortParam === sortConfig.sortParam);
|
|
352
|
+
if (!exists) {
|
|
353
|
+
setSortConfig(null);
|
|
354
|
+
}
|
|
355
|
+
}, [columns, sortConfig]);
|
|
356
|
+
|
|
346
357
|
useEffect(() => {
|
|
347
358
|
const currentFilterDeps = [columns, federationContext.apiClient];
|
|
348
359
|
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { format, parse, isValid, set } from "date-fns";
|
|
2
|
+
import { CalendarClockIcon, XIcon } from "lucide-react";
|
|
3
|
+
|
|
4
|
+
import { Button } from "./button";
|
|
5
|
+
import { Calendar } from "./Calendar";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger } from "./popover";
|
|
7
|
+
import { ScrollArea } from "./ScrollArea";
|
|
8
|
+
import { cn } from "../../utils/utils";
|
|
9
|
+
import React, { forwardRef, useEffect } from "react";
|
|
10
|
+
import { Input } from "./input";
|
|
11
|
+
import { PopoverClose } from "@radix-ui/react-popover";
|
|
12
|
+
|
|
13
|
+
const DATE_FORMAT = "dd.MM.yyyy HH:mm";
|
|
14
|
+
|
|
15
|
+
interface DateTimePicker2Props {
|
|
16
|
+
value?: Date;
|
|
17
|
+
onChange?: (date: Date | undefined | null) => void;
|
|
18
|
+
className?: string;
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
clearable?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
/** Granularita minut (musí dělit 60 beze zbytku). Default 5. */
|
|
23
|
+
minuteStep?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const roundToNearestStep = (date: Date, stepMinutes: number) => {
|
|
27
|
+
const totalMinutes = date.getHours() * 60 + date.getMinutes();
|
|
28
|
+
const rounded = Math.round(totalMinutes / stepMinutes) * stepMinutes;
|
|
29
|
+
return set(date, {
|
|
30
|
+
seconds: 0,
|
|
31
|
+
milliseconds: 0,
|
|
32
|
+
hours: Math.floor(rounded / 60),
|
|
33
|
+
minutes: rounded % 60,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const DateTimePicker2 = forwardRef<HTMLInputElement, DateTimePicker2Props>(
|
|
38
|
+
(
|
|
39
|
+
{
|
|
40
|
+
value,
|
|
41
|
+
onChange,
|
|
42
|
+
className,
|
|
43
|
+
clearable = true,
|
|
44
|
+
placeholder,
|
|
45
|
+
disabled,
|
|
46
|
+
minuteStep = 5,
|
|
47
|
+
...props
|
|
48
|
+
},
|
|
49
|
+
ref
|
|
50
|
+
) => {
|
|
51
|
+
const [dateTime, setDateTime] = React.useState<Date | null>(value || null);
|
|
52
|
+
const [inputValue, setInputValue] = React.useState<string | null>("");
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (value) {
|
|
56
|
+
const roundedDate = roundToNearestStep(value, minuteStep);
|
|
57
|
+
setDateTime(roundedDate);
|
|
58
|
+
setInputValue(format(roundedDate, DATE_FORMAT));
|
|
59
|
+
} else {
|
|
60
|
+
setDateTime(null);
|
|
61
|
+
setInputValue("");
|
|
62
|
+
}
|
|
63
|
+
}, [value, minuteStep]);
|
|
64
|
+
|
|
65
|
+
const hours = React.useMemo(
|
|
66
|
+
() => Array.from({ length: 24 }, (_, i) => i),
|
|
67
|
+
[]
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const minutes = React.useMemo(() => {
|
|
71
|
+
const count = Math.floor(60 / minuteStep);
|
|
72
|
+
return Array.from({ length: count }, (_, i) => i * minuteStep);
|
|
73
|
+
}, [minuteStep]);
|
|
74
|
+
|
|
75
|
+
const commit = (newDate: Date | null) => {
|
|
76
|
+
setDateTime(newDate);
|
|
77
|
+
onChange?.(newDate);
|
|
78
|
+
setInputValue(newDate ? format(newDate, DATE_FORMAT) : "");
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
82
|
+
event.stopPropagation?.();
|
|
83
|
+
setInputValue(event.target.value);
|
|
84
|
+
const parsedDateTime = parse(event.target.value, DATE_FORMAT, new Date());
|
|
85
|
+
|
|
86
|
+
if (isValid(parsedDateTime)) {
|
|
87
|
+
setDateTime(parsedDateTime);
|
|
88
|
+
onChange?.(parsedDateTime);
|
|
89
|
+
setInputValue(format(parsedDateTime, DATE_FORMAT));
|
|
90
|
+
} else {
|
|
91
|
+
setInputValue("");
|
|
92
|
+
setDateTime(null);
|
|
93
|
+
onChange?.(null);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const handleInputBlur = () => {
|
|
98
|
+
if (inputValue === "") {
|
|
99
|
+
setDateTime(null);
|
|
100
|
+
onChange?.(null);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const parsedDateTime = parse(inputValue || "", DATE_FORMAT, new Date());
|
|
105
|
+
if (isValid(parsedDateTime)) {
|
|
106
|
+
setDateTime(parsedDateTime);
|
|
107
|
+
onChange?.(parsedDateTime);
|
|
108
|
+
setInputValue(format(parsedDateTime, DATE_FORMAT));
|
|
109
|
+
} else {
|
|
110
|
+
setInputValue("");
|
|
111
|
+
setDateTime(null);
|
|
112
|
+
onChange?.(null);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const handleDateSelect = (selectedDate: Date | undefined | null) => {
|
|
117
|
+
if (selectedDate) {
|
|
118
|
+
const newDateTime = dateTime
|
|
119
|
+
? set(dateTime, {
|
|
120
|
+
year: selectedDate.getFullYear(),
|
|
121
|
+
month: selectedDate.getMonth(),
|
|
122
|
+
date: selectedDate.getDate(),
|
|
123
|
+
})
|
|
124
|
+
: set(selectedDate, { hours: 12, minutes: 0, seconds: 0, milliseconds: 0 });
|
|
125
|
+
commit(newDateTime);
|
|
126
|
+
} else {
|
|
127
|
+
commit(null);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const handleHourSelect = (hour: number) => {
|
|
132
|
+
const base = dateTime ?? set(new Date(), { minutes: 0, seconds: 0, milliseconds: 0 });
|
|
133
|
+
const newDateTime = set(base, { hours: hour, seconds: 0, milliseconds: 0 });
|
|
134
|
+
commit(newDateTime);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const handleMinuteSelect = (minute: number) => {
|
|
138
|
+
const base = dateTime ?? set(new Date(), { seconds: 0, milliseconds: 0 });
|
|
139
|
+
const newDateTime = set(base, { minutes: minute, seconds: 0, milliseconds: 0 });
|
|
140
|
+
commit(newDateTime);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const handleClear = () => {
|
|
144
|
+
commit(null);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<Popover open={disabled ? false : undefined}>
|
|
149
|
+
<PopoverTrigger asChild>
|
|
150
|
+
<div className={cn("relative w-full", className)}>
|
|
151
|
+
<Input
|
|
152
|
+
ref={ref}
|
|
153
|
+
type="text"
|
|
154
|
+
disabled={disabled}
|
|
155
|
+
value={inputValue || ""}
|
|
156
|
+
onChange={handleInputChange}
|
|
157
|
+
onBlur={handleInputBlur}
|
|
158
|
+
placeholder={placeholder}
|
|
159
|
+
className={cn(
|
|
160
|
+
"w-full pl-8 pr-8",
|
|
161
|
+
!dateTime && "text-muted-foreground"
|
|
162
|
+
)}
|
|
163
|
+
{...props}
|
|
164
|
+
/>
|
|
165
|
+
<CalendarClockIcon className="absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
|
|
166
|
+
{clearable && !disabled && inputValue && (
|
|
167
|
+
<Button
|
|
168
|
+
type="button"
|
|
169
|
+
variant="ghost"
|
|
170
|
+
size="icon"
|
|
171
|
+
className="absolute right-2 top-1/2 -translate-y-1/2 h-4 w-4 p-0"
|
|
172
|
+
onClick={handleClear}
|
|
173
|
+
>
|
|
174
|
+
<XIcon className="h-4 w-4 text-muted-foreground" />
|
|
175
|
+
<span className="sr-only">Smazat datum a čas</span>
|
|
176
|
+
</Button>
|
|
177
|
+
)}
|
|
178
|
+
</div>
|
|
179
|
+
</PopoverTrigger>
|
|
180
|
+
<PopoverContent className="w-auto p-0" align="start">
|
|
181
|
+
<div className="flex">
|
|
182
|
+
<Calendar
|
|
183
|
+
mode="single"
|
|
184
|
+
selected={dateTime || undefined}
|
|
185
|
+
onSelect={handleDateSelect}
|
|
186
|
+
initialFocus
|
|
187
|
+
/>
|
|
188
|
+
<div className="flex h-[300px] divide-x border-l border-border">
|
|
189
|
+
<ScrollArea className="w-16">
|
|
190
|
+
<div className="flex flex-col p-2">
|
|
191
|
+
{hours.map((hour) => (
|
|
192
|
+
<Button
|
|
193
|
+
key={hour}
|
|
194
|
+
size="icon"
|
|
195
|
+
variant={
|
|
196
|
+
dateTime && dateTime.getHours() === hour
|
|
197
|
+
? "default"
|
|
198
|
+
: "ghost"
|
|
199
|
+
}
|
|
200
|
+
className="w-full shrink-0 aspect-square"
|
|
201
|
+
onClick={() => handleHourSelect(hour)}
|
|
202
|
+
>
|
|
203
|
+
{hour.toString().padStart(2, "0")}
|
|
204
|
+
</Button>
|
|
205
|
+
))}
|
|
206
|
+
</div>
|
|
207
|
+
</ScrollArea>
|
|
208
|
+
<ScrollArea className="w-16">
|
|
209
|
+
<div className="flex flex-col p-2">
|
|
210
|
+
{minutes.map((minute) => (
|
|
211
|
+
<Button
|
|
212
|
+
key={minute}
|
|
213
|
+
size="icon"
|
|
214
|
+
variant={
|
|
215
|
+
dateTime && dateTime.getMinutes() === minute
|
|
216
|
+
? "default"
|
|
217
|
+
: "ghost"
|
|
218
|
+
}
|
|
219
|
+
className="w-full shrink-0 aspect-square"
|
|
220
|
+
onClick={() => handleMinuteSelect(minute)}
|
|
221
|
+
>
|
|
222
|
+
{minute.toString().padStart(2, "0")}
|
|
223
|
+
</Button>
|
|
224
|
+
))}
|
|
225
|
+
</div>
|
|
226
|
+
</ScrollArea>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
<div className="flex justify-end p-2 border-t border-border">
|
|
230
|
+
<PopoverClose asChild>
|
|
231
|
+
<Button className="px-3">OK</Button>
|
|
232
|
+
</PopoverClose>
|
|
233
|
+
</div>
|
|
234
|
+
</PopoverContent>
|
|
235
|
+
</Popover>
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
DateTimePicker2.displayName = "DateTimePicker2";
|
|
241
|
+
|
|
242
|
+
export default DateTimePicker2;
|
package/lib/main.ts
CHANGED
|
@@ -79,4 +79,5 @@ export { Button as ButtonCN, buttonVariants } from "./components/ui/button.tsx";
|
|
|
79
79
|
|
|
80
80
|
export { Calendar as CalendarCn } from "./components/ui/Calendar.tsx";
|
|
81
81
|
export { default as DateTimePicker } from "./components/ui/DateTimePicker.tsx";
|
|
82
|
+
export { default as DateTimePicker2 } from "./components/ui/DateTimePicker2.tsx";
|
|
82
83
|
export { default as DatePicker } from "./components/ui/DatePicker.tsx";
|