@addsign/moje-agenda-shared-lib 2.0.58 → 2.0.60

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.
@@ -46,9 +46,8 @@ const FileInput = ({
46
46
  useEffect(() => {
47
47
  if (initialFile) {
48
48
  setFileData(initialFile);
49
- onFileChanged({ target: { name, value: initialFile.id.toString() } });
50
49
  }
51
- }, [initialFile, onFileChanged, name]);
50
+ }, [initialFile]);
52
51
  const onDrop = useCallback(
53
52
  async (acceptedFiles) => {
54
53
  if (acceptedFiles.length > 0) {
@@ -121,7 +120,7 @@ const FileInput = ({
121
120
  /* @__PURE__ */ jsx(
122
121
  "div",
123
122
  {
124
- className: `self-stretch px-3 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border ${isFocused && !((_a = errors[name]) == null ? void 0 : _a.message) ? "outline-4 outline-indigo-200 outline-offset-0 border-indigo-300" : ""} ${isFocused && ((_b = errors[name]) == null ? void 0 : _b.message) ? "outline-4 outline-red-200 outline-offset-0 border-none" : ""} ${!isFocused && ((_c = errors[name]) == null ? void 0 : _c.message) ? "border-red-200" : ""} ${disabled ? "bg-gray-100" : "bg-transparent"}`,
123
+ className: `self-stretch px-2 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border ${isFocused && !((_a = errors[name]) == null ? void 0 : _a.message) ? "outline-4 outline-indigo-200 outline-offset-0 border-indigo-300" : ""} ${isFocused && ((_b = errors[name]) == null ? void 0 : _b.message) ? "outline-4 outline-red-200 outline-offset-0 border-none" : ""} ${!isFocused && ((_c = errors[name]) == null ? void 0 : _c.message) ? "border-red-200" : ""} ${disabled ? "bg-gray-100" : "bg-transparent"}`,
125
124
  onFocus: () => setIsFocused(true),
126
125
  onBlur: () => setIsFocused(false),
127
126
  children: /* @__PURE__ */ jsx("div", { className: "flex relative grow shrink basis-0 min-h-5 lg:min-h-[32px] justify-start items-stretch gap-2 max-w-full ", children: !fileData ? /* @__PURE__ */ jsxs(
@@ -134,7 +133,7 @@ const FileInput = ({
134
133
  /* @__PURE__ */ jsx("p", { className: "text-gray-500", children: isDragActive ? "Sem přetáhněte soubor" : "Klikněte pro nahrání, nebo nahrajte přetažením souboru" })
135
134
  ]
136
135
  }
137
- ) : /* @__PURE__ */ jsxs("div", { className: "w-full flex items-center justify-between p-2", children: [
136
+ ) : /* @__PURE__ */ jsxs("div", { className: "w-full flex items-center justify-between", children: [
138
137
  /* @__PURE__ */ jsxs("div", { className: " flex", children: [
139
138
  /* @__PURE__ */ jsx(MdInsertDriveFile, { style: { fontSize: "2rem" } }),
140
139
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.js","sources":["../../../lib/components/form/FileInput.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { handleErrors, useFederationContext } from \"../../main\";\r\nimport { MdDeleteOutline, MdInsertDriveFile } from \"react-icons/md\";\r\nimport { AxiosError } from \"axios\";\r\n\r\nexport interface FileData {\r\n id: number;\r\n mimeType: string;\r\n size: number;\r\n filename: string;\r\n createdByEmpId: string;\r\n created: string;\r\n}\r\n\r\ninterface FileInputProps {\r\n name: string;\r\n label?: string;\r\n initialFile?: FileData;\r\n onFileChanged: (e: any) => void;\r\n required?: boolean;\r\n description?: string;\r\n disabled?: boolean;\r\n errors?: { [key: string]: { message: string } };\r\n attachmentName?: string;\r\n}\r\n\r\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\r\n\r\nconst FileInput: React.FC<FileInputProps> = ({\r\n initialFile,\r\n onFileChanged,\r\n label,\r\n name,\r\n required,\r\n description,\r\n disabled,\r\n errors = {},\r\n attachmentName,\r\n}) => {\r\n const [fileData, setFileData] = useState<FileData | null>(\r\n initialFile || null\r\n );\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const federationContext = useFederationContext();\r\n useEffect(() => {\r\n if (initialFile) {\r\n setFileData(initialFile);\r\n onFileChanged({ target: { name, value: initialFile.id.toString() } });\r\n }\r\n }, [initialFile, onFileChanged, name]);\r\n\r\n const onDrop = useCallback(\r\n async (acceptedFiles: File[]) => {\r\n\r\n if (acceptedFiles.length > 0) {\r\n const file = acceptedFiles[0];\r\n\r\n if (file.size > MAX_FILE_SIZE) {\r\n // Handle the case when the file size is exceeded\r\n federationContext.emitter.emit(\"message\", {\r\n title: \"Velikost souboru byla překročena\",\r\n message: `Maximální povolená velikost je ${MAX_FILE_SIZE / (1024 * 1024)} MB.`,\r\n classes: \"bg-danger \",\r\n timeout: 0,\r\n type: \"error\",\r\n });\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const response = await federationContext.apiClient.post<FileData>(\r\n \"/files/upload\",\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n params: attachmentName ? { attachmentName } : undefined,\r\n }\r\n );\r\n setFileData(response.data);\r\n onFileChanged({\r\n target: { name, value: response.data.id.toString() },\r\n });\r\n setIsFocused(false);\r\n } catch (error) {\r\n handleErrors(error as AxiosError, federationContext.emitter);\r\n console.error(\"There was an error!\", error);\r\n }\r\n }\r\n },\r\n [\r\n federationContext.apiClient,\r\n federationContext.emitter,\r\n onFileChanged,\r\n name,\r\n attachmentName,\r\n ]\r\n );\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n disabled,\r\n multiple: false,\r\n });\r\n\r\n const handleRemove = () => {\r\n setFileData(null);\r\n onFileChanged({ target: { name, value: null } });\r\n };\r\n\r\n return (\r\n <div className=\"w-full min-h-30 flex-col justify-start items-start gap-1.5 inline-flex sharedLibrary\">\r\n <div className=\"self-stretch flex-col justify-start items-start gap-1.5 flex\">\r\n {label && (\r\n <label\r\n className=\"text-slate-700 text-sm leading-tight font-medium\"\r\n htmlFor={name}\r\n >\r\n {label} {required ? \"*\" : \"\"}\r\n </label>\r\n )}\r\n <div\r\n className={\r\n `self-stretch px-3 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border` +\r\n ` ${\r\n isFocused && !errors[name]?.message\r\n ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300\"\r\n : \"\"\r\n }` +\r\n ` ${\r\n isFocused && errors[name]?.message\r\n ? \"outline-4 outline-red-200 outline-offset-0 border-none\"\r\n : \"\"\r\n } ` +\r\n ` ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} ` +\r\n ` ${disabled ? \"bg-gray-100\" : \"bg-transparent\"}`\r\n }\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n >\r\n <div className=\"flex relative grow shrink basis-0 min-h-5 lg:min-h-[32px] justify-start items-stretch gap-2 max-w-full \">\r\n {!fileData ? (\r\n <div\r\n {...getRootProps()}\r\n className={`w-full p-4 border-dashed border-2 rounded-lg text-center ${\r\n isDragActive\r\n ? \"border-indigo-300 bg-indigo-50\"\r\n : \"border-gray-300\"\r\n }`}\r\n >\r\n <input {...getInputProps()} id={name} />\r\n <p className=\"text-gray-500\">\r\n {isDragActive\r\n ? \"Sem přetáhněte soubor\"\r\n : \"Klikněte pro nahrání, nebo nahrajte přetažením souboru\"}\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"w-full flex items-center justify-between p-2\">\r\n <div className=\" flex\">\r\n <MdInsertDriveFile style={{ fontSize: \"2rem\" }} />\r\n <a\r\n href={`/api/files/download/${fileData.id}`}\r\n className=\"pl-2 text-left underline text-primary\"\r\n target=\"_blank\"\r\n >\r\n {fileData.filename}\r\n </a>\r\n </div>\r\n {!disabled && (\r\n <div\r\n onClick={handleRemove}\r\n className=\"text-gray-600 cursor-pointer hover:text-primary hover:bg-gray-200 rounded-full ml-4\"\r\n >\r\n <MdDeleteOutline\r\n style={{ fontSize: \"1.5rem\", margin: \"15px\" }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {description && (\r\n <div\r\n className=\"HintText self-stretch text-slate-600 text-sm font-normal leading-tight\"\r\n id={name + \":description\"}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n {errors[name] && (\r\n <div\r\n className=\"HintText self-stretch text-red-600 text-sm font-normal leading-tight\"\r\n id={name + \":error\"}\r\n >\r\n {errors[name]?.message}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FileInput;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileInput.js","sources":["../../../lib/components/form/FileInput.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { handleErrors, useFederationContext } from \"../../main\";\r\nimport { MdDeleteOutline, MdInsertDriveFile } from \"react-icons/md\";\r\nimport { AxiosError } from \"axios\";\r\n\r\nexport interface FileData {\r\n id: number;\r\n mimeType: string;\r\n size: number;\r\n filename: string;\r\n createdByEmpId: string;\r\n created: string;\r\n}\r\n\r\ninterface FileInputProps {\r\n name: string;\r\n label?: string;\r\n initialFile?: FileData;\r\n onFileChanged: (e: any) => void;\r\n required?: boolean;\r\n description?: string;\r\n disabled?: boolean;\r\n errors?: { [key: string]: { message: string } };\r\n attachmentName?: string;\r\n}\r\n\r\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\r\n\r\nconst FileInput: React.FC<FileInputProps> = ({\r\n initialFile,\r\n onFileChanged,\r\n label,\r\n name,\r\n required,\r\n description,\r\n disabled,\r\n errors = {},\r\n attachmentName,\r\n}) => {\r\n const [fileData, setFileData] = useState<FileData | null>(\r\n initialFile || null\r\n );\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const federationContext = useFederationContext();\r\n useEffect(() => {\r\n if (initialFile) {\r\n setFileData(initialFile);\r\n }\r\n }, [initialFile]);\r\n\r\n const onDrop = useCallback(\r\n async (acceptedFiles: File[]) => {\r\n if (acceptedFiles.length > 0) {\r\n const file = acceptedFiles[0];\r\n\r\n if (file.size > MAX_FILE_SIZE) {\r\n // Handle the case when the file size is exceeded\r\n federationContext.emitter.emit(\"message\", {\r\n title: \"Velikost souboru byla překročena\",\r\n message: `Maximální povolená velikost je ${MAX_FILE_SIZE / (1024 * 1024)} MB.`,\r\n classes: \"bg-danger \",\r\n timeout: 0,\r\n type: \"error\",\r\n });\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const response = await federationContext.apiClient.post<FileData>(\r\n \"/files/upload\",\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n params: attachmentName ? { attachmentName } : undefined,\r\n }\r\n );\r\n setFileData(response.data);\r\n onFileChanged({\r\n target: { name, value: response.data.id.toString() },\r\n });\r\n setIsFocused(false);\r\n } catch (error) {\r\n handleErrors(error as AxiosError, federationContext.emitter);\r\n console.error(\"There was an error!\", error);\r\n }\r\n }\r\n },\r\n [\r\n federationContext.apiClient,\r\n federationContext.emitter,\r\n onFileChanged,\r\n name,\r\n attachmentName,\r\n ]\r\n );\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n disabled,\r\n multiple: false,\r\n });\r\n\r\n const handleRemove = () => {\r\n setFileData(null);\r\n onFileChanged({ target: { name, value: null } });\r\n };\r\n\r\n return (\r\n <div className=\"w-full min-h-30 flex-col justify-start items-start gap-1.5 inline-flex sharedLibrary\">\r\n <div className=\"self-stretch flex-col justify-start items-start gap-1.5 flex\">\r\n {label && (\r\n <label\r\n className=\"text-slate-700 text-sm leading-tight font-medium\"\r\n htmlFor={name}\r\n >\r\n {label} {required ? \"*\" : \"\"}\r\n </label>\r\n )}\r\n <div\r\n className={\r\n `self-stretch px-2 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border` +\r\n ` ${\r\n isFocused && !errors[name]?.message\r\n ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300\"\r\n : \"\"\r\n }` +\r\n ` ${\r\n isFocused && errors[name]?.message\r\n ? \"outline-4 outline-red-200 outline-offset-0 border-none\"\r\n : \"\"\r\n } ` +\r\n ` ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} ` +\r\n ` ${disabled ? \"bg-gray-100\" : \"bg-transparent\"}`\r\n }\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n >\r\n <div className=\"flex relative grow shrink basis-0 min-h-5 lg:min-h-[32px] justify-start items-stretch gap-2 max-w-full \">\r\n {!fileData ? (\r\n <div\r\n {...getRootProps()}\r\n className={`w-full p-4 border-dashed border-2 rounded-lg text-center ${\r\n isDragActive\r\n ? \"border-indigo-300 bg-indigo-50\"\r\n : \"border-gray-300\"\r\n }`}\r\n >\r\n <input {...getInputProps()} id={name} />\r\n <p className=\"text-gray-500\">\r\n {isDragActive\r\n ? \"Sem přetáhněte soubor\"\r\n : \"Klikněte pro nahrání, nebo nahrajte přetažením souboru\"}\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"w-full flex items-center justify-between\">\r\n <div className=\" flex\">\r\n <MdInsertDriveFile style={{ fontSize: \"2rem\" }} />\r\n <a\r\n href={`/api/files/download/${fileData.id}`}\r\n className=\"pl-2 text-left underline text-primary\"\r\n target=\"_blank\"\r\n >\r\n {fileData.filename}\r\n </a>\r\n </div>\r\n {!disabled && (\r\n <div\r\n onClick={handleRemove}\r\n className=\"text-gray-600 cursor-pointer hover:text-primary hover:bg-gray-200 rounded-full ml-4\"\r\n >\r\n <MdDeleteOutline\r\n style={{ fontSize: \"1.5rem\", margin: \"15px\" }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {description && (\r\n <div\r\n className=\"HintText self-stretch text-slate-600 text-sm font-normal leading-tight\"\r\n id={name + \":description\"}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n {errors[name] && (\r\n <div\r\n className=\"HintText self-stretch text-red-600 text-sm font-normal leading-tight\"\r\n id={name + \":error\"}\r\n >\r\n {errors[name]?.message}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FileInput;\r\n"],"names":[],"mappings":"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"}
@@ -163,13 +163,14 @@ const DateTimePicker = forwardRef(
163
163
  const minutes = i % 2 === 0 ? "00" : "30";
164
164
  return `${hours.toString().padStart(2, "0")}:${minutes}`;
165
165
  });
166
- return /* @__PURE__ */ jsxs(Popover, { children: [
166
+ return /* @__PURE__ */ jsxs(Popover, { open: disabled ? false : void 0, children: [
167
167
  /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: cn("relative w-full", className), children: [
168
168
  /* @__PURE__ */ jsx(
169
169
  Input,
170
170
  {
171
171
  ref,
172
172
  type: "text",
173
+ disabled,
173
174
  value: inputValue || "",
174
175
  onChange: handleInputChange,
175
176
  onBlur: handleInputBlur,
@@ -182,7 +183,7 @@ const DateTimePicker = forwardRef(
182
183
  }
183
184
  ),
184
185
  /* @__PURE__ */ jsx(CalendarClock, { className: "absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
185
- clearable && disabled && inputValue && /* @__PURE__ */ jsxs(
186
+ clearable && !disabled && inputValue && /* @__PURE__ */ jsxs(
186
187
  Button,
187
188
  {
188
189
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePicker.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/calendar-clock.js","../../../node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/date-fns/set.mjs","../../../lib/components/ui/DateTimePicker.tsx"],"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","/**\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 Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=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","import { format, parse, isValid, set } from \"date-fns\";\r\nimport { CalendarClockIcon, Clock, XIcon } from \"lucide-react\";\r\n\r\nimport { Button } from \"./button\";\r\nimport { Calendar } from \"./Calendar\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\r\nimport { cn } from \"../../utils/utils\";\r\nimport React, { forwardRef, useEffect } from \"react\";\r\nimport { Input } from \"./input\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"./select\";\r\nimport { PopoverClose } from \"@radix-ui/react-popover\";\r\n\r\nconst DATE_FORMAT = \"dd.MM.yyyy HH:mm\";\r\n\r\ninterface DateTimePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date | undefined | null) => void;\r\n className?: string;\r\n placeholder?: string;\r\n clearable?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\n// Helper function to round to the nearest half-hour\r\nconst roundToNearestHalfHour = (date: Date) => {\r\n const minutes = date.getMinutes();\r\n const roundedMinutes = minutes < 15 ? 0 : minutes < 45 ? 30 : 60;\r\n return set(date, {\r\n seconds: 0,\r\n milliseconds: 0,\r\n minutes: roundedMinutes,\r\n hours: roundedMinutes === 60 ? date.getHours() + 1 : date.getHours(),\r\n });\r\n};\r\n\r\nconst DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>(\r\n (\r\n {\r\n value,\r\n onChange,\r\n className,\r\n clearable = true,\r\n placeholder,\r\n disabled,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [dateTime, setDateTime] = React.useState<Date | null>(value || null);\r\n const [inputValue, setInputValue] = React.useState<string | null>(\"\");\r\n\r\n useEffect(() => {\r\n if (value) {\r\n const roundedDate = roundToNearestHalfHour(value);\r\n setDateTime(roundedDate);\r\n setInputValue(format(roundedDate, DATE_FORMAT));\r\n } else {\r\n setDateTime(null);\r\n setInputValue(\"\");\r\n }\r\n }, [value]);\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n event.stopPropagation ? event.stopPropagation() : null; // Stop bubbling to prevent interference with other components\r\n console.log(\r\n \"%clibcomponentsateTimePicker.tsx:71 event\",\r\n \"color: #007acc;\",\r\n event\r\n );\r\n setInputValue(event.target.value);\r\n const parsedDateTime = parse(event.target.value, DATE_FORMAT, new Date());\r\n\r\n if (isValid(parsedDateTime)) {\r\n setDateTime(parsedDateTime);\r\n onChange?.(parsedDateTime);\r\n setInputValue(format(parsedDateTime, DATE_FORMAT));\r\n } else {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleInputBlur = () => {\r\n if (inputValue === \"\") {\r\n setDateTime(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const parsedDateTime = parse(inputValue || \"\", DATE_FORMAT, new Date());\r\n if (isValid(parsedDateTime)) {\r\n setDateTime(parsedDateTime);\r\n onChange?.(parsedDateTime);\r\n setInputValue(format(parsedDateTime, DATE_FORMAT));\r\n } else {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleDateSelect = (selectedDate: Date | undefined | null) => {\r\n if (selectedDate) {\r\n const newDateTime = dateTime\r\n ? set(dateTime, {\r\n year: selectedDate.getFullYear(),\r\n month: selectedDate.getMonth(),\r\n date: selectedDate.getDate(),\r\n })\r\n : set(selectedDate, { hours: 12, minutes: 0 });\r\n setDateTime(newDateTime);\r\n onChange?.(newDateTime);\r\n setInputValue(format(newDateTime, DATE_FORMAT));\r\n } else {\r\n setDateTime(null);\r\n setInputValue(\"\");\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleTimeSelect = (time: string) => {\r\n const [hours, minutes] = time.split(\":\").map(Number);\r\n\r\n const newDateTime = set(dateTime ?? new Date(), { hours, minutes });\r\n setDateTime(newDateTime);\r\n onChange?.(newDateTime);\r\n setInputValue(format(newDateTime, DATE_FORMAT));\r\n };\r\n\r\n const handleClear = () => {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n };\r\n\r\n const timeOptions = Array.from({ length: 48 }, (_, i) => {\r\n const hours = Math.floor(i / 2);\r\n const minutes = i % 2 === 0 ? \"00\" : \"30\";\r\n return `${hours.toString().padStart(2, \"0\")}:${minutes}`;\r\n });\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <div className={cn(\"relative w-full\", className)}>\r\n <Input\r\n ref={ref}\r\n type=\"text\"\r\n value={inputValue || \"\"}\r\n onChange={handleInputChange}\r\n onBlur={handleInputBlur}\r\n placeholder={placeholder}\r\n className={cn(\r\n \"w-full pl-8 pr-8\",\r\n !dateTime && \"text-muted-foreground\"\r\n )}\r\n {...props}\r\n />\r\n <CalendarClockIcon className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\r\n {clearable && disabled && inputValue && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 h-4 w-4 p-0\"\r\n onClick={handleClear}\r\n >\r\n <XIcon className=\"h-4 w-4 text-muted-foreground\" />\r\n <span className=\"sr-only\">Smazat datum a čas</span>\r\n </Button>\r\n )}\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"single\"\r\n selected={dateTime || undefined}\r\n onSelect={handleDateSelect}\r\n initialFocus\r\n />\r\n <div className=\"p-3 border-t border-border\">\r\n <div className=\"flex items-center justify-between\">\r\n <Select\r\n onValueChange={handleTimeSelect}\r\n value={dateTime ? format(dateTime, \"HH:mm\") : undefined}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Zvolte čas\">\r\n {dateTime ? (\r\n <div className=\"flex items-center\">\r\n <Clock className=\"mr-2 h-4 w-4\" />\r\n {format(dateTime, \"HH:mm\")}\r\n </div>\r\n ) : (\r\n \"Zvolte čas\"\r\n )}\r\n </SelectValue>\r\n </SelectTrigger>\r\n <SelectContent>\r\n {timeOptions.map((time) => (\r\n <SelectItem key={time} value={time}>\r\n {time}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <PopoverClose asChild>\r\n <Button className=\"ml-2 px-3\">OK</Button>\r\n </PopoverClose>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n }\r\n);\r\n\r\nDateTimePicker.displayName = \"DateTimePicker\";\r\n\r\nexport default DateTimePicker;\r\n"],"names":["React","CalendarClockIcon","XIcon"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"DateTimePicker.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/calendar-clock.js","../../../node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/date-fns/set.mjs","../../../lib/components/ui/DateTimePicker.tsx"],"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","/**\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 Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=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","import { format, parse, isValid, set } from \"date-fns\";\r\nimport { CalendarClockIcon, Clock, XIcon } from \"lucide-react\";\r\n\r\nimport { Button } from \"./button\";\r\nimport { Calendar } from \"./Calendar\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\r\nimport { cn } from \"../../utils/utils\";\r\nimport React, { forwardRef, useEffect } from \"react\";\r\nimport { Input } from \"./input\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"./select\";\r\nimport { PopoverClose } from \"@radix-ui/react-popover\";\r\n\r\nconst DATE_FORMAT = \"dd.MM.yyyy HH:mm\";\r\n\r\ninterface DateTimePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date | undefined | null) => void;\r\n className?: string;\r\n placeholder?: string;\r\n clearable?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\n// Helper function to round to the nearest half-hour\r\nconst roundToNearestHalfHour = (date: Date) => {\r\n const minutes = date.getMinutes();\r\n const roundedMinutes = minutes < 15 ? 0 : minutes < 45 ? 30 : 60;\r\n return set(date, {\r\n seconds: 0,\r\n milliseconds: 0,\r\n minutes: roundedMinutes,\r\n hours: roundedMinutes === 60 ? date.getHours() + 1 : date.getHours(),\r\n });\r\n};\r\n\r\nconst DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>(\r\n (\r\n {\r\n value,\r\n onChange,\r\n className,\r\n clearable = true,\r\n placeholder,\r\n disabled,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [dateTime, setDateTime] = React.useState<Date | null>(value || null);\r\n const [inputValue, setInputValue] = React.useState<string | null>(\"\");\r\n\r\n useEffect(() => {\r\n if (value) {\r\n const roundedDate = roundToNearestHalfHour(value);\r\n setDateTime(roundedDate);\r\n setInputValue(format(roundedDate, DATE_FORMAT));\r\n } else {\r\n setDateTime(null);\r\n setInputValue(\"\");\r\n }\r\n }, [value]);\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n event.stopPropagation ? event.stopPropagation() : null; // Stop bubbling to prevent interference with other components\r\n console.log(\r\n \"%clibcomponentsateTimePicker.tsx:71 event\",\r\n \"color: #007acc;\",\r\n event\r\n );\r\n setInputValue(event.target.value);\r\n const parsedDateTime = parse(event.target.value, DATE_FORMAT, new Date());\r\n\r\n if (isValid(parsedDateTime)) {\r\n setDateTime(parsedDateTime);\r\n onChange?.(parsedDateTime);\r\n setInputValue(format(parsedDateTime, DATE_FORMAT));\r\n } else {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleInputBlur = () => {\r\n if (inputValue === \"\") {\r\n setDateTime(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const parsedDateTime = parse(inputValue || \"\", DATE_FORMAT, new Date());\r\n if (isValid(parsedDateTime)) {\r\n setDateTime(parsedDateTime);\r\n onChange?.(parsedDateTime);\r\n setInputValue(format(parsedDateTime, DATE_FORMAT));\r\n } else {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleDateSelect = (selectedDate: Date | undefined | null) => {\r\n if (selectedDate) {\r\n const newDateTime = dateTime\r\n ? set(dateTime, {\r\n year: selectedDate.getFullYear(),\r\n month: selectedDate.getMonth(),\r\n date: selectedDate.getDate(),\r\n })\r\n : set(selectedDate, { hours: 12, minutes: 0 });\r\n setDateTime(newDateTime);\r\n onChange?.(newDateTime);\r\n setInputValue(format(newDateTime, DATE_FORMAT));\r\n } else {\r\n setDateTime(null);\r\n setInputValue(\"\");\r\n onChange?.(null);\r\n }\r\n };\r\n\r\n const handleTimeSelect = (time: string) => {\r\n const [hours, minutes] = time.split(\":\").map(Number);\r\n\r\n const newDateTime = set(dateTime ?? new Date(), { hours, minutes });\r\n setDateTime(newDateTime);\r\n onChange?.(newDateTime);\r\n setInputValue(format(newDateTime, DATE_FORMAT));\r\n };\r\n\r\n const handleClear = () => {\r\n setInputValue(\"\");\r\n setDateTime(null);\r\n onChange?.(null);\r\n };\r\n\r\n const timeOptions = Array.from({ length: 48 }, (_, i) => {\r\n const hours = Math.floor(i / 2);\r\n const minutes = i % 2 === 0 ? \"00\" : \"30\";\r\n return `${hours.toString().padStart(2, \"0\")}:${minutes}`;\r\n });\r\n\r\n return (\r\n <Popover open={disabled ? false : undefined}>\r\n <PopoverTrigger asChild>\r\n <div className={cn(\"relative w-full\", className)}>\r\n <Input\r\n ref={ref}\r\n type=\"text\"\r\n disabled={disabled}\r\n value={inputValue || \"\"}\r\n onChange={handleInputChange}\r\n onBlur={handleInputBlur}\r\n placeholder={placeholder}\r\n className={cn(\r\n \"w-full pl-8 pr-8\",\r\n !dateTime && \"text-muted-foreground\"\r\n )}\r\n {...props}\r\n />\r\n <CalendarClockIcon className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\r\n {clearable && !disabled && inputValue && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 h-4 w-4 p-0\"\r\n onClick={handleClear}\r\n >\r\n <XIcon className=\"h-4 w-4 text-muted-foreground\" />\r\n <span className=\"sr-only\">Smazat datum a čas</span>\r\n </Button>\r\n )}\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"single\"\r\n selected={dateTime || undefined}\r\n onSelect={handleDateSelect}\r\n initialFocus\r\n />\r\n <div className=\"p-3 border-t border-border\">\r\n <div className=\"flex items-center justify-between\">\r\n <Select\r\n onValueChange={handleTimeSelect}\r\n value={dateTime ? format(dateTime, \"HH:mm\") : undefined}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder=\"Zvolte čas\">\r\n {dateTime ? (\r\n <div className=\"flex items-center\">\r\n <Clock className=\"mr-2 h-4 w-4\" />\r\n {format(dateTime, \"HH:mm\")}\r\n </div>\r\n ) : (\r\n \"Zvolte čas\"\r\n )}\r\n </SelectValue>\r\n </SelectTrigger>\r\n <SelectContent>\r\n {timeOptions.map((time) => (\r\n <SelectItem key={time} value={time}>\r\n {time}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <PopoverClose asChild>\r\n <Button className=\"ml-2 px-3\">OK</Button>\r\n </PopoverClose>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n }\r\n);\r\n\r\nDateTimePicker.displayName = \"DateTimePicker\";\r\n\r\nexport default DateTimePicker;\r\n"],"names":["React","CalendarClockIcon","XIcon"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -47,13 +47,11 @@ const FileInput: React.FC<FileInputProps> = ({
47
47
  useEffect(() => {
48
48
  if (initialFile) {
49
49
  setFileData(initialFile);
50
- onFileChanged({ target: { name, value: initialFile.id.toString() } });
51
- }
52
- }, [initialFile, onFileChanged, name]);
50
+ }
51
+ }, [initialFile]);
53
52
 
54
53
  const onDrop = useCallback(
55
54
  async (acceptedFiles: File[]) => {
56
-
57
55
  if (acceptedFiles.length > 0) {
58
56
  const file = acceptedFiles[0];
59
57
 
@@ -127,7 +125,7 @@ const FileInput: React.FC<FileInputProps> = ({
127
125
  )}
128
126
  <div
129
127
  className={
130
- `self-stretch px-3 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border` +
128
+ `self-stretch px-2 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border` +
131
129
  ` ${
132
130
  isFocused && !errors[name]?.message
133
131
  ? "outline-4 outline-indigo-200 outline-offset-0 border-indigo-300"
@@ -162,7 +160,7 @@ const FileInput: React.FC<FileInputProps> = ({
162
160
  </p>
163
161
  </div>
164
162
  ) : (
165
- <div className="w-full flex items-center justify-between p-2">
163
+ <div className="w-full flex items-center justify-between">
166
164
  <div className=" flex">
167
165
  <MdInsertDriveFile style={{ fontSize: "2rem" }} />
168
166
  <a
@@ -147,12 +147,13 @@ const DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>(
147
147
  });
148
148
 
149
149
  return (
150
- <Popover>
150
+ <Popover open={disabled ? false : undefined}>
151
151
  <PopoverTrigger asChild>
152
152
  <div className={cn("relative w-full", className)}>
153
153
  <Input
154
154
  ref={ref}
155
155
  type="text"
156
+ disabled={disabled}
156
157
  value={inputValue || ""}
157
158
  onChange={handleInputChange}
158
159
  onBlur={handleInputBlur}
@@ -164,7 +165,7 @@ const DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>(
164
165
  {...props}
165
166
  />
166
167
  <CalendarClockIcon className="absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
167
- {clearable && disabled && inputValue && (
168
+ {clearable && !disabled && inputValue && (
168
169
  <Button
169
170
  type="button"
170
171
  variant="ghost"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@addsign/moje-agenda-shared-lib",
3
3
  "private": false,
4
- "version": "2.0.58",
4
+ "version": "2.0.60",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
7
7
  "types": "dist/main.d.ts",