@addsign/moje-agenda-shared-lib 2.0.65 → 2.0.67

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 (59) hide show
  1. package/dist/Calendar-DWT4e7Th.js.map +1 -1
  2. package/dist/Combination-DmhTQmbL.js +996 -0
  3. package/dist/Combination-DmhTQmbL.js.map +1 -0
  4. package/dist/Dialog-3u5-ws89.js +424 -0
  5. package/dist/Dialog-3u5-ws89.js.map +1 -0
  6. package/dist/Dialog-CCrUyF91.js.map +1 -1
  7. package/dist/assets/style.css +0 -3
  8. package/dist/components/datatable/DataTableServer.js +254 -245
  9. package/dist/components/datatable/DataTableServer.js.map +1 -1
  10. package/dist/components/form/FileInputForm.d.ts +14 -0
  11. package/dist/components/form/FileInputForm.js +173 -0
  12. package/dist/components/form/FileInputForm.js.map +1 -0
  13. package/dist/components/form/FileInputFormMultiple.d.ts +16 -0
  14. package/dist/components/form/FileInputFormMultiple.js +240 -0
  15. package/dist/components/form/FileInputFormMultiple.js.map +1 -0
  16. package/dist/components/form/FileInputFull.d.ts +17 -0
  17. package/dist/components/form/FileInputFull.js +188 -0
  18. package/dist/components/form/FileInputFull.js.map +1 -0
  19. package/dist/components/form/FileInputFullMultiple.d.ts +19 -0
  20. package/dist/components/form/FileInputFullMultiple.js +226 -0
  21. package/dist/components/form/FileInputFullMultiple.js.map +1 -0
  22. package/dist/components/ui/Combobox.js.map +1 -1
  23. package/dist/components/ui/checkbox.js.map +1 -1
  24. package/dist/components/ui/command.js.map +1 -1
  25. package/dist/components/ui/multi-select.js +6 -3
  26. package/dist/components/ui/multi-select.js.map +1 -1
  27. package/dist/components/ui/radioGroup.js.map +1 -1
  28. package/dist/components/ui/toast.js.map +1 -1
  29. package/dist/handleErrors-B2be_Hgy.js +31615 -0
  30. package/dist/handleErrors-B2be_Hgy.js.map +1 -0
  31. package/dist/handleErrors-P52guX3U.js +32 -0
  32. package/dist/handleErrors-P52guX3U.js.map +1 -0
  33. package/dist/index-BikTN7j8.js +2266 -0
  34. package/dist/index-BikTN7j8.js.map +1 -0
  35. package/dist/main.d.ts +2 -0
  36. package/dist/main.js +34 -30
  37. package/dist/main.js.map +1 -1
  38. package/dist/popover-BLI2Jq-c.js +319 -0
  39. package/dist/popover-BLI2Jq-c.js.map +1 -0
  40. package/dist/popover-CcrzvSk7.js.map +1 -1
  41. package/dist/tslib.es6-e8r3nMQ9.js +172 -0
  42. package/dist/tslib.es6-e8r3nMQ9.js.map +1 -0
  43. package/dist/types.d.ts +1 -0
  44. package/dist/types.js.map +1 -1
  45. package/lib/components/datatable/DataTableServer.tsx +14 -23
  46. package/lib/components/form/FileInputForm.tsx +184 -0
  47. package/lib/components/form/FileInputFormMultiple.tsx +220 -0
  48. package/lib/components/ui/Calendar.tsx +0 -2
  49. package/lib/components/ui/Combobox.tsx +0 -2
  50. package/lib/components/ui/Dialog.tsx +0 -2
  51. package/lib/components/ui/checkbox.tsx +0 -2
  52. package/lib/components/ui/command.tsx +0 -2
  53. package/lib/components/ui/multi-select.tsx +10 -4
  54. package/lib/components/ui/popover.tsx +0 -2
  55. package/lib/components/ui/radioGroup.tsx +0 -2
  56. package/lib/components/ui/toast.tsx +0 -1
  57. package/lib/main.ts +2 -0
  58. package/lib/types.ts +1 -0
  59. package/package.json +1 -2
@@ -0,0 +1,188 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from "react";
3
+ import { u as useDropzone } from "../../index-qqHvAsVd.js";
4
+ import "../../tailwind-l0sNRNKZ.js";
5
+ import { d as MdInsertDriveFile, e as MdDeleteOutline } from "../../index-CrfjcbOs.js";
6
+ import { cn } from "../../utils/utils.js";
7
+ import "../ui/input.js";
8
+ import "../ui/multi-select.js";
9
+ import "../ui/select.js";
10
+ import "../../index.esm-ifS8v9eQ.js";
11
+ import "../../jspdf.plugin.autotable-7hp3hM-a.js";
12
+ import "../../contexts/FederationContext.js";
13
+ import { useFederationContext } from "../../contexts/useFederationContext.js";
14
+ import { handleErrors } from "../../utils/handleErrors.js";
15
+ import "../../Dialog-CCrUyF91.js";
16
+ import "../ui/ScrollArea.js";
17
+ import "../ui/form.js";
18
+ import "../ui/radioGroup.js";
19
+ import "../ui/command.js";
20
+ import "../ui/Combobox.js";
21
+ import "../ui/tooltip.js";
22
+ import "../ui/separator.js";
23
+ import "../ui/textarea.js";
24
+ import "../ui/checkbox.js";
25
+ import "../ui/button.js";
26
+ import "../../Calendar-DWT4e7Th.js";
27
+ import "../ui/DateTimePicker.js";
28
+ import "../ui/DatePicker.js";
29
+ const MAX_FILE_SIZE = 1024 * 1024;
30
+ const FileInputFull = ({
31
+ value,
32
+ onFileChanged,
33
+ label,
34
+ name,
35
+ required,
36
+ description,
37
+ disabled,
38
+ attachmentName,
39
+ attachmentType,
40
+ hasError
41
+ }) => {
42
+ const [fileData, setFileData] = useState(value || null);
43
+ const [isFocused, setIsFocused] = useState(false);
44
+ const federationContext = useFederationContext();
45
+ useEffect(() => {
46
+ setFileData(value || null);
47
+ }, [value]);
48
+ const onDrop = useCallback(
49
+ async (acceptedFiles) => {
50
+ if (acceptedFiles.length > 0) {
51
+ const file = acceptedFiles[0];
52
+ if (file.size > MAX_FILE_SIZE) {
53
+ federationContext.emitter.emit("message", {
54
+ title: "Velikost souboru byla překročena",
55
+ message: `Maximální povolená velikost je ${MAX_FILE_SIZE / (1024 * 1024)} MB.`,
56
+ classes: "bg-danger ",
57
+ timeout: 0,
58
+ type: "error"
59
+ });
60
+ return;
61
+ }
62
+ const formData = new FormData();
63
+ const dataObject = {
64
+ ...attachmentName && { attachmentName },
65
+ ...attachmentType && { attachmentType }
66
+ };
67
+ formData.append(
68
+ "data",
69
+ new Blob([JSON.stringify(dataObject)], { type: "application/json" })
70
+ );
71
+ formData.append("file", file);
72
+ try {
73
+ const response = await federationContext.apiClient.post(
74
+ "/files/upload",
75
+ formData,
76
+ {
77
+ headers: {
78
+ "Content-Type": "multipart/form-data"
79
+ }
80
+ }
81
+ );
82
+ const uploadedFile = response.data;
83
+ setFileData(uploadedFile);
84
+ onFileChanged(uploadedFile);
85
+ setIsFocused(false);
86
+ } catch (error) {
87
+ handleErrors(error, federationContext.emitter);
88
+ console.error("There was an error!", error);
89
+ }
90
+ }
91
+ },
92
+ [
93
+ federationContext.apiClient,
94
+ federationContext.emitter,
95
+ onFileChanged,
96
+ attachmentName,
97
+ attachmentType
98
+ ]
99
+ );
100
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
101
+ onDrop,
102
+ disabled,
103
+ multiple: false
104
+ });
105
+ const handleRemove = () => {
106
+ setFileData(null);
107
+ onFileChanged(null);
108
+ };
109
+ return /* @__PURE__ */ jsxs("div", { className: "w-full min-h-30 flex-col justify-start items-start gap-1.5 inline-flex sharedLibrary", children: [
110
+ /* @__PURE__ */ jsxs("div", { className: "self-stretch flex-col justify-start items-start gap-1.5 flex", children: [
111
+ label && /* @__PURE__ */ jsxs(
112
+ "label",
113
+ {
114
+ className: "text-slate-700 text-sm leading-tight font-medium",
115
+ htmlFor: name,
116
+ children: [
117
+ label,
118
+ " ",
119
+ required ? "*" : ""
120
+ ]
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsx(
124
+ "div",
125
+ {
126
+ className: cn(
127
+ `self-stretch px-2 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border`,
128
+ isFocused && !hasError && "outline-4 outline-indigo-200 outline-offset-0 border-indigo-300",
129
+ hasError && "outline-4 outline-red-200 outline-offset-0 border-none",
130
+ !isFocused && hasError && "border-red-200 ",
131
+ disabled ? "bg-gray-100" : "bg-transparent"
132
+ ),
133
+ onFocus: () => setIsFocused(true),
134
+ onBlur: () => setIsFocused(false),
135
+ 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(
136
+ "div",
137
+ {
138
+ ...getRootProps(),
139
+ className: `w-full p-4 border-dashed border-2 rounded-lg text-center ${isDragActive ? "border-indigo-300 bg-indigo-50" : "border-gray-300"}`,
140
+ children: [
141
+ /* @__PURE__ */ jsx("input", { ...getInputProps(), id: name }),
142
+ /* @__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" })
143
+ ]
144
+ }
145
+ ) : /* @__PURE__ */ jsxs("div", { className: "w-full flex items-center justify-between", children: [
146
+ /* @__PURE__ */ jsxs("div", { className: " flex", children: [
147
+ /* @__PURE__ */ jsx(MdInsertDriveFile, { style: { fontSize: "2rem" } }),
148
+ /* @__PURE__ */ jsx(
149
+ "a",
150
+ {
151
+ href: `/api/files/download/${fileData.id}`,
152
+ className: "pl-2 text-left underline text-primary",
153
+ target: "_blank",
154
+ children: fileData.filename
155
+ }
156
+ )
157
+ ] }),
158
+ !disabled && /* @__PURE__ */ jsx(
159
+ "div",
160
+ {
161
+ onClick: handleRemove,
162
+ className: "text-gray-600 cursor-pointer hover:text-primary hover:bg-gray-200 rounded-full ml-4",
163
+ children: /* @__PURE__ */ jsx(
164
+ MdDeleteOutline,
165
+ {
166
+ style: { fontSize: "1.5rem", margin: "15px" }
167
+ }
168
+ )
169
+ }
170
+ )
171
+ ] }) })
172
+ }
173
+ )
174
+ ] }),
175
+ description && /* @__PURE__ */ jsx(
176
+ "div",
177
+ {
178
+ className: "HintText self-stretch text-slate-600 text-sm font-normal leading-tight",
179
+ id: name + ":description",
180
+ children: description
181
+ }
182
+ )
183
+ ] });
184
+ };
185
+ export {
186
+ FileInputFull as default
187
+ };
188
+ //# sourceMappingURL=FileInputFull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileInputFull.js","sources":["../../../lib/components/form/FileInputFull.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\nimport { cn } from \"../../utils/utils\";\r\nimport { IAttachment } from \"../../types\";\r\n\r\nexport interface FileInputFullProps {\r\n name: string;\r\n label?: string;\r\n value?: IAttachment | null;\r\n onFileChanged: (file: IAttachment | null) => void;\r\n required?: boolean;\r\n description?: string;\r\n disabled?: boolean;\r\n attachmentName?: string;\r\n attachmentType?: string;\r\n hasError?: boolean;\r\n}\r\n\r\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\r\n\r\nconst FileInputFull: React.FC<FileInputFullProps> = ({\r\n value,\r\n onFileChanged,\r\n label,\r\n name,\r\n required,\r\n description,\r\n disabled,\r\n attachmentName,\r\n attachmentType,\r\n hasError,\r\n}) => {\r\n const [fileData, setFileData] = useState<IAttachment | null>(value || null);\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const federationContext = useFederationContext();\r\n\r\n useEffect(() => {\r\n setFileData(value || null);\r\n }, [value]);\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\r\n // Add the JSON data object\r\n const dataObject = {\r\n ...(attachmentName && { attachmentName }),\r\n ...(attachmentType && { attachmentType }),\r\n };\r\n\r\n formData.append(\r\n \"data\",\r\n new Blob([JSON.stringify(dataObject)], { type: \"application/json\" })\r\n );\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const response = await federationContext.apiClient.post<IAttachment>(\r\n \"/files/upload\",\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n }\r\n );\r\n const uploadedFile = response.data;\r\n setFileData(uploadedFile);\r\n onFileChanged(uploadedFile);\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 attachmentName,\r\n attachmentType,\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(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={cn(\r\n `self-stretch px-2 py-2 rounded-lg justify-start items-center gap-2 inline-flex outline-none border`,\r\n isFocused &&\r\n !hasError &&\r\n \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300\",\r\n\r\n hasError &&\r\n \"outline-4 outline-red-200 outline-offset-0 border-none\",\r\n !isFocused && hasError && \"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 </div>\r\n );\r\n};\r\n\r\nexport default FileInputFull;\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { IAttachment } from '../../types';
3
+
4
+ interface FileInputFullMultipleProps {
5
+ name: string;
6
+ label?: string;
7
+ value?: IAttachment[];
8
+ onFilesChanged: (files: IAttachment[]) => void;
9
+ required?: boolean;
10
+ description?: string;
11
+ disabled?: boolean;
12
+ initialFilesReadOnly?: boolean;
13
+ initialFileIds?: number[];
14
+ attachmentName?: string;
15
+ attachmentType?: string;
16
+ hasError?: boolean;
17
+ }
18
+ declare const FileInputFullMultiple: React.FC<FileInputFullMultipleProps>;
19
+ export default FileInputFullMultiple;
@@ -0,0 +1,226 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from "react";
3
+ import { u as useDropzone } from "../../index-qqHvAsVd.js";
4
+ import { d as MdInsertDriveFile, e as MdDeleteOutline } from "../../index-CrfjcbOs.js";
5
+ import "../../tailwind-l0sNRNKZ.js";
6
+ import { cn } from "../../utils/utils.js";
7
+ import "../ui/input.js";
8
+ import "../ui/multi-select.js";
9
+ import "../ui/select.js";
10
+ import "../../index.esm-ifS8v9eQ.js";
11
+ import "../../jspdf.plugin.autotable-7hp3hM-a.js";
12
+ import "../../contexts/FederationContext.js";
13
+ import { useFederationContext } from "../../contexts/useFederationContext.js";
14
+ import { handleErrors } from "../../utils/handleErrors.js";
15
+ import "../../Dialog-CCrUyF91.js";
16
+ import "../ui/ScrollArea.js";
17
+ import "../ui/form.js";
18
+ import "../ui/radioGroup.js";
19
+ import "../ui/command.js";
20
+ import "../ui/Combobox.js";
21
+ import "../ui/tooltip.js";
22
+ import "../ui/separator.js";
23
+ import "../ui/textarea.js";
24
+ import "../ui/checkbox.js";
25
+ import "../ui/button.js";
26
+ import "../../Calendar-DWT4e7Th.js";
27
+ import "../ui/DateTimePicker.js";
28
+ import "../ui/DatePicker.js";
29
+ const MAX_FILE_SIZE = 1024 * 1024;
30
+ const FileInputFullMultiple = ({
31
+ value = [],
32
+ onFilesChanged,
33
+ label,
34
+ name,
35
+ required,
36
+ description,
37
+ disabled,
38
+ initialFilesReadOnly = true,
39
+ initialFileIds = [],
40
+ attachmentName,
41
+ attachmentType,
42
+ hasError
43
+ }) => {
44
+ const [fileDataList, setFileDataList] = useState(
45
+ value.map((file) => ({
46
+ ...file,
47
+ readonly: initialFilesReadOnly && initialFileIds.includes(file.id)
48
+ }))
49
+ );
50
+ const federationContext = useFederationContext();
51
+ console.log(
52
+ "%clibcomponents\formFileInputFullMultiple.tsx:51 initialFileIds",
53
+ "color: #007acc;",
54
+ initialFileIds
55
+ );
56
+ useEffect(() => {
57
+ if (!value || value.length === 0) {
58
+ setFileDataList([]);
59
+ return;
60
+ }
61
+ setFileDataList(
62
+ value.map((file) => ({
63
+ ...file,
64
+ readonly: initialFilesReadOnly && initialFileIds.includes(file.id)
65
+ }))
66
+ );
67
+ }, [value, initialFilesReadOnly, initialFileIds]);
68
+ const onDrop = useCallback(
69
+ async (acceptedFiles) => {
70
+ const uploadedFiles = await Promise.all(
71
+ acceptedFiles.map(async (file) => {
72
+ if (file.size > MAX_FILE_SIZE) {
73
+ federationContext.emitter.emit("message", {
74
+ title: "Velikost souboru byla překročena",
75
+ message: `Maximální povolená velikost je ${MAX_FILE_SIZE / (1024 * 1024)} MB.`,
76
+ classes: "bg-danger ",
77
+ timeout: 0,
78
+ type: "error"
79
+ });
80
+ return null;
81
+ }
82
+ const formData = new FormData();
83
+ const dataObject = {
84
+ ...attachmentName && { attachmentName },
85
+ ...attachmentType && { attachmentType }
86
+ };
87
+ formData.append(
88
+ "data",
89
+ new Blob([JSON.stringify(dataObject)], { type: "application/json" })
90
+ );
91
+ formData.append("file", file);
92
+ try {
93
+ const response = await federationContext.apiClient.post(
94
+ "/files/upload",
95
+ formData,
96
+ {
97
+ headers: {
98
+ "Content-Type": "multipart/form-data"
99
+ }
100
+ }
101
+ );
102
+ return response.data;
103
+ } catch (error) {
104
+ handleErrors(error, federationContext.emitter);
105
+ console.error("There was an error!", error);
106
+ return null;
107
+ }
108
+ })
109
+ );
110
+ const validFiles = uploadedFiles.filter(
111
+ (file) => file !== null
112
+ );
113
+ const updatedFileDataList = [...fileDataList, ...validFiles];
114
+ setFileDataList(updatedFileDataList);
115
+ onFilesChanged(updatedFileDataList);
116
+ },
117
+ [
118
+ federationContext,
119
+ fileDataList,
120
+ onFilesChanged,
121
+ attachmentName,
122
+ attachmentType
123
+ ]
124
+ );
125
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
126
+ onDrop,
127
+ disabled
128
+ });
129
+ const handleRemove = (fileId) => {
130
+ const updatedFileDataList = fileDataList.filter(
131
+ (file) => file.id !== fileId
132
+ );
133
+ setFileDataList(updatedFileDataList);
134
+ onFilesChanged(updatedFileDataList);
135
+ };
136
+ if (disabled === true && fileDataList.length === 0) {
137
+ return null;
138
+ }
139
+ return /* @__PURE__ */ jsxs("div", { className: "w-full min-h-30 flex-col justify-start items-start gap-1.5 inline-flex sharedLibrary", children: [
140
+ /* @__PURE__ */ jsxs("div", { className: "self-stretch flex-col justify-start items-start gap-1.5 flex", children: [
141
+ label && /* @__PURE__ */ jsxs(
142
+ "label",
143
+ {
144
+ className: "text-slate-700 text-sm leading-tight font-medium",
145
+ htmlFor: name,
146
+ children: [
147
+ label,
148
+ " ",
149
+ required ? "*" : ""
150
+ ]
151
+ }
152
+ ),
153
+ /* @__PURE__ */ jsxs(
154
+ "div",
155
+ {
156
+ className: cn(
157
+ `self-stretch px-3 py-2 rounded-lg justify-start items-center gap-2 outline-none border bg-transparent `,
158
+ hasError && "outline-4 outline-red-200 outline-offset-0 border-none ",
159
+ disabled ? "bg-gray-100" : "bg-transparent"
160
+ ),
161
+ children: [
162
+ !disabled && /* @__PURE__ */ jsxs(
163
+ "div",
164
+ {
165
+ ...getRootProps(),
166
+ className: `w-full p-4 border-dashed cursor-pointer
167
+ border-2 rounded-lg text-center hover:bg-gray-100
168
+ ${isDragActive ? "border-indigo-300 bg-indigo-50" : "border-gray-300"}`,
169
+ children: [
170
+ /* @__PURE__ */ jsx("input", { ...getInputProps(), id: name }),
171
+ /* @__PURE__ */ jsx("p", { className: "text-gray-500", children: isDragActive ? "Sem přetáhněte soubory" : "Klikněte pro nahrání, nebo nahrajte přetažením souborů" })
172
+ ]
173
+ }
174
+ ),
175
+ /* @__PURE__ */ jsx("div", { className: "w-full", children: fileDataList.map((file) => /* @__PURE__ */ jsxs(
176
+ "div",
177
+ {
178
+ className: "w-full flex items-center justify-between py-2 border-b ",
179
+ children: [
180
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center content-center", children: [
181
+ /* @__PURE__ */ jsx(MdInsertDriveFile, { style: { fontSize: "2rem" } }),
182
+ /* @__PURE__ */ jsx(
183
+ "a",
184
+ {
185
+ href: `/api/files/download/${file.id}`,
186
+ className: "pl-2 text-left underline text-primary",
187
+ target: "_blank",
188
+ children: file.filename
189
+ }
190
+ )
191
+ ] }),
192
+ !disabled && file.readonly !== true && /* @__PURE__ */ jsx(
193
+ "div",
194
+ {
195
+ onClick: () => handleRemove(file.id),
196
+ className: "text-gray-600 cursor-pointer hover:text-primary hover:bg-gray-200 rounded-full ml-4",
197
+ children: /* @__PURE__ */ jsx(
198
+ MdDeleteOutline,
199
+ {
200
+ style: { fontSize: "1.5rem", margin: "10px" }
201
+ }
202
+ )
203
+ }
204
+ )
205
+ ]
206
+ },
207
+ file.id
208
+ )) })
209
+ ]
210
+ }
211
+ )
212
+ ] }),
213
+ description && /* @__PURE__ */ jsx(
214
+ "div",
215
+ {
216
+ className: "HintText self-stretch text-slate-600 text-sm font-normal leading-tight",
217
+ id: name + ":description",
218
+ children: description
219
+ }
220
+ )
221
+ ] });
222
+ };
223
+ export {
224
+ FileInputFullMultiple as default
225
+ };
226
+ //# sourceMappingURL=FileInputFullMultiple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileInputFullMultiple.js","sources":["../../../lib/components/form/FileInputFullMultiple.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { MdDeleteOutline, MdInsertDriveFile } from \"react-icons/md\";\r\nimport { IAttachment } from \"../../types\";\r\nimport { handleErrors, useFederationContext } from \"../../main\";\r\nimport { AxiosError } from \"axios\";\r\nimport { cn } from \"../../utils/utils\";\r\n\r\ninterface FileInputFullMultipleProps {\r\n name: string;\r\n label?: string;\r\n value?: IAttachment[];\r\n onFilesChanged: (files: IAttachment[]) => void;\r\n required?: boolean;\r\n description?: string;\r\n disabled?: boolean;\r\n initialFilesReadOnly?: boolean;\r\n initialFileIds?: number[];\r\n attachmentName?: string;\r\n attachmentType?: string;\r\n hasError?: boolean;\r\n}\r\n\r\ninterface IAttachmentReadOnly extends IAttachment {\r\n readonly?: boolean;\r\n}\r\n\r\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\r\n\r\nconst FileInputFullMultiple: React.FC<FileInputFullMultipleProps> = ({\r\n value = [],\r\n onFilesChanged,\r\n label,\r\n name,\r\n required,\r\n description,\r\n disabled,\r\n initialFilesReadOnly = true,\r\n initialFileIds = [],\r\n attachmentName,\r\n attachmentType,\r\n hasError,\r\n}) => {\r\n const [fileDataList, setFileDataList] = useState<IAttachmentReadOnly[]>(\r\n value.map((file) => ({\r\n ...file,\r\n readonly: initialFilesReadOnly && initialFileIds.includes(file.id),\r\n }))\r\n );\r\n const federationContext = useFederationContext();\r\n console.log(\r\n \"%clibcomponents\\formFileInputFullMultiple.tsx:51 initialFileIds\",\r\n \"color: #007acc;\",\r\n initialFileIds\r\n );\r\n useEffect(() => {\r\n if (!value || value.length === 0) {\r\n setFileDataList([]);\r\n return;\r\n }\r\n\r\n setFileDataList(\r\n value.map((file) => ({\r\n ...file,\r\n readonly: initialFilesReadOnly && initialFileIds.includes(file.id),\r\n }))\r\n );\r\n }, [value, initialFilesReadOnly, initialFileIds]);\r\n\r\n const onDrop = useCallback(\r\n async (acceptedFiles: File[]) => {\r\n const uploadedFiles = await Promise.all(\r\n acceptedFiles.map(async (file) => {\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\r\n return null;\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n // Add the JSON data object\r\n const dataObject = {\r\n ...(attachmentName && { attachmentName }),\r\n ...(attachmentType && { attachmentType }),\r\n };\r\n\r\n formData.append(\r\n \"data\",\r\n new Blob([JSON.stringify(dataObject)], { type: \"application/json\" })\r\n );\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const response =\r\n await federationContext.apiClient.post<IAttachment>(\r\n \"/files/upload\",\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n }\r\n );\r\n return response.data;\r\n } catch (error) {\r\n handleErrors(error as AxiosError, federationContext.emitter);\r\n console.error(\"There was an error!\", error);\r\n return null;\r\n }\r\n })\r\n );\r\n\r\n const validFiles = uploadedFiles.filter(\r\n (file) => file !== null\r\n ) as IAttachment[];\r\n const updatedFileDataList = [...fileDataList, ...validFiles];\r\n setFileDataList(updatedFileDataList);\r\n onFilesChanged(updatedFileDataList);\r\n },\r\n [\r\n federationContext,\r\n fileDataList,\r\n onFilesChanged,\r\n attachmentName,\r\n attachmentType,\r\n ]\r\n );\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n disabled,\r\n });\r\n\r\n const handleRemove = (fileId: number) => {\r\n const updatedFileDataList = fileDataList.filter(\r\n (file) => file.id !== fileId\r\n );\r\n setFileDataList(updatedFileDataList);\r\n onFilesChanged(updatedFileDataList);\r\n };\r\n\r\n if (disabled === true && fileDataList.length === 0) {\r\n return 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={cn(\r\n `self-stretch px-3 py-2 rounded-lg justify-start items-center gap-2 outline-none border bg-transparent `,\r\n hasError &&\r\n \"outline-4 outline-red-200 outline-offset-0 border-none \",\r\n disabled ? \"bg-gray-100\" : \"bg-transparent\"\r\n )}\r\n >\r\n {!disabled && (\r\n <div\r\n {...getRootProps()}\r\n className={`w-full p-4 border-dashed cursor-pointer \r\n border-2 rounded-lg text-center hover:bg-gray-100\r\n ${isDragActive ? \"border-indigo-300 bg-indigo-50\" : \"border-gray-300\"}`}\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 soubory\"\r\n : \"Klikněte pro nahrání, nebo nahrajte přetažením souborů\"}\r\n </p>\r\n </div>\r\n )}\r\n <div className=\"w-full\">\r\n {fileDataList.map((file) => (\r\n <div\r\n key={file.id}\r\n className=\"w-full flex items-center justify-between py-2 border-b \"\r\n >\r\n <div className=\"flex items-center content-center\">\r\n <MdInsertDriveFile style={{ fontSize: \"2rem\" }} />\r\n <a\r\n href={`/api/files/download/${file.id}`}\r\n className=\"pl-2 text-left underline text-primary\"\r\n target=\"_blank\"\r\n >\r\n {file.filename}\r\n </a>\r\n </div>\r\n {!disabled && file.readonly !== true && (\r\n <div\r\n onClick={() => handleRemove(file.id)}\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: \"10px\" }}\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 </div>\r\n );\r\n};\r\n\r\nexport default FileInputFullMultiple;\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js","../../../node_modules/lucide-react/dist/esm/icons/plus.js","../../../lib/components/ui/Combobox.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 ChevronsUpDown = createLucideIcon(\"ChevronsUpDown\", [\n [\"path\", { d: \"m7 15 5 5 5-5\", key: \"1hf1tw\" }],\n [\"path\", { d: \"m7 9 5-5 5 5\", key: \"sgt6xg\" }]\n]);\n\nexport { ChevronsUpDown as default };\n//# sourceMappingURL=chevrons-up-down.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 Plus = createLucideIcon(\"Plus\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Check, ChevronsUpDown, Plus, X } from \"lucide-react\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\nimport { Button } from \"./button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"./command\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\r\nimport { IOptionItem } from \"../../types\";\r\n\r\ninterface ComboboxProps {\r\n value?: string;\r\n onChange?: (value: string | undefined) => void;\r\n className?: string;\r\n placeholder?: string;\r\n placeholderSearch?: string;\r\n clearable?: boolean;\r\n options?: IOptionItem[];\r\n allowAddNew?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nconst Combobox = React.forwardRef<HTMLButtonElement, ComboboxProps>(\r\n (\r\n {\r\n value: propValue,\r\n onChange: propOnChange,\r\n className,\r\n placeholder,\r\n placeholderSearch = \"Vyhledejte položku\",\r\n clearable = false,\r\n options: propOptions = [],\r\n allowAddNew = false,\r\n disabled = false,\r\n },\r\n ref\r\n ) => {\r\n const [open, setOpen] = React.useState(false);\r\n const [value, setValue] = React.useState(propValue || \"\");\r\n const [inputValue, setInputValue] = React.useState(\"\");\r\n const [frameworks, setFrameworks] =\r\n React.useState<IOptionItem[]>(propOptions);\r\n\r\n React.useEffect(() => {\r\n if (propValue !== undefined) {\r\n setValue(propValue);\r\n }\r\n }, [propValue]);\r\n\r\n React.useEffect(() => {\r\n setFrameworks(propOptions);\r\n }, [propOptions]);\r\n\r\n const handleSelect = (currentValue: string) => {\r\n if (currentValue === \"add-custom\") {\r\n if (inputValue && !frameworks.some((f) => f.value === inputValue)) {\r\n const newFramework = {\r\n value: inputValue,\r\n label: inputValue,\r\n };\r\n\r\n setFrameworks([...frameworks, newFramework]);\r\n updateValue(newFramework.value);\r\n }\r\n } else {\r\n updateValue(currentValue === value ? \"\" : currentValue);\r\n }\r\n setOpen(false);\r\n };\r\n\r\n const updateValue = (newValue: string) => {\r\n setValue(newValue);\r\n propOnChange?.(newValue || undefined);\r\n };\r\n\r\n const handleClear = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n updateValue(\"\");\r\n setInputValue(\"\");\r\n setOpen(false);\r\n };\r\n\r\n value;\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <div className=\"relative w-full\">\r\n <PopoverTrigger asChild>\r\n <Button\r\n ref={ref}\r\n type=\"button\"\r\n variant=\"outline\"\r\n role=\"combobox\"\r\n aria-expanded={open}\r\n disabled={disabled}\r\n className={cn(\"w-full justify-between\", className)}\r\n title={\r\n value\r\n ? frameworks.find((framework) => framework.value === value)\r\n ?.label\r\n : placeholder\r\n }\r\n >\r\n <span className=\"flex-1 text-left truncate mr-2 font-normal\">\r\n {value ? (\r\n frameworks.find((framework) => framework.value === value)\r\n ?.label\r\n ) : (\r\n <span className=\"text-muted-foreground font-normal\">\r\n {placeholder}\r\n </span>\r\n )}\r\n </span>\r\n\r\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50 ml-6\" />\r\n </Button>\r\n </PopoverTrigger>\r\n {clearable && !disabled && value && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"absolute right-6 top-0 h-full px-1 py-2 hover:bg-transparent\"\r\n onClick={handleClear}\r\n >\r\n <X className=\"h-4 w-4 shrink-0 opacity-50 hover:opacity-100\" />\r\n </Button>\r\n )}\r\n </div>\r\n <PopoverContent className=\"min-w-[200px] w-[var(--radix-popover-trigger-width)] p-0\">\r\n <Command>\r\n <CommandInput\r\n placeholder={placeholderSearch}\r\n className=\"h-9\"\r\n value={inputValue}\r\n onValueChange={setInputValue}\r\n />\r\n <CommandList>\r\n <CommandEmpty>\r\n {allowAddNew && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className=\"w-full justify-start\"\r\n onClick={() => handleSelect(\"add-custom\")}\r\n >\r\n <Plus className=\"mr-2 h-4 w-4\" />\r\n Přidat \"{inputValue}\"\r\n </Button>\r\n )}\r\n </CommandEmpty>\r\n\r\n <CommandGroup>\r\n {frameworks.map((framework) => (\r\n <CommandItem\r\n key={framework.value}\r\n value={framework.label as string}\r\n onSelect={() => handleSelect(framework.value as string)}\r\n >\r\n {framework.label}\r\n <Check\r\n className={cn(\r\n \"ml-auto h-4 w-4\",\r\n value === framework.value ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n />\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n }\r\n);\r\n\r\nCombobox.displayName = \"Combobox\";\r\n\r\nexport default Combobox;\r\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"Combobox.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js","../../../node_modules/lucide-react/dist/esm/icons/plus.js","../../../lib/components/ui/Combobox.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 ChevronsUpDown = createLucideIcon(\"ChevronsUpDown\", [\n [\"path\", { d: \"m7 15 5 5 5-5\", key: \"1hf1tw\" }],\n [\"path\", { d: \"m7 9 5-5 5 5\", key: \"sgt6xg\" }]\n]);\n\nexport { ChevronsUpDown as default };\n//# sourceMappingURL=chevrons-up-down.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 Plus = createLucideIcon(\"Plus\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","import * as React from \"react\";\r\nimport { Check, ChevronsUpDown, Plus, X } from \"lucide-react\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\nimport { Button } from \"./button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"./command\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\r\nimport { IOptionItem } from \"../../types\";\r\n\r\ninterface ComboboxProps {\r\n value?: string;\r\n onChange?: (value: string | undefined) => void;\r\n className?: string;\r\n placeholder?: string;\r\n placeholderSearch?: string;\r\n clearable?: boolean;\r\n options?: IOptionItem[];\r\n allowAddNew?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nconst Combobox = React.forwardRef<HTMLButtonElement, ComboboxProps>(\r\n (\r\n {\r\n value: propValue,\r\n onChange: propOnChange,\r\n className,\r\n placeholder,\r\n placeholderSearch = \"Vyhledejte položku\",\r\n clearable = false,\r\n options: propOptions = [],\r\n allowAddNew = false,\r\n disabled = false,\r\n },\r\n ref\r\n ) => {\r\n const [open, setOpen] = React.useState(false);\r\n const [value, setValue] = React.useState(propValue || \"\");\r\n const [inputValue, setInputValue] = React.useState(\"\");\r\n const [frameworks, setFrameworks] =\r\n React.useState<IOptionItem[]>(propOptions);\r\n\r\n React.useEffect(() => {\r\n if (propValue !== undefined) {\r\n setValue(propValue);\r\n }\r\n }, [propValue]);\r\n\r\n React.useEffect(() => {\r\n setFrameworks(propOptions);\r\n }, [propOptions]);\r\n\r\n const handleSelect = (currentValue: string) => {\r\n if (currentValue === \"add-custom\") {\r\n if (inputValue && !frameworks.some((f) => f.value === inputValue)) {\r\n const newFramework = {\r\n value: inputValue,\r\n label: inputValue,\r\n };\r\n\r\n setFrameworks([...frameworks, newFramework]);\r\n updateValue(newFramework.value);\r\n }\r\n } else {\r\n updateValue(currentValue === value ? \"\" : currentValue);\r\n }\r\n setOpen(false);\r\n };\r\n\r\n const updateValue = (newValue: string) => {\r\n setValue(newValue);\r\n propOnChange?.(newValue || undefined);\r\n };\r\n\r\n const handleClear = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n updateValue(\"\");\r\n setInputValue(\"\");\r\n setOpen(false);\r\n };\r\n\r\n value;\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <div className=\"relative w-full\">\r\n <PopoverTrigger asChild>\r\n <Button\r\n ref={ref}\r\n type=\"button\"\r\n variant=\"outline\"\r\n role=\"combobox\"\r\n aria-expanded={open}\r\n disabled={disabled}\r\n className={cn(\"w-full justify-between\", className)}\r\n title={\r\n value\r\n ? frameworks.find((framework) => framework.value === value)\r\n ?.label\r\n : placeholder\r\n }\r\n >\r\n <span className=\"flex-1 text-left truncate mr-2 font-normal\">\r\n {value ? (\r\n frameworks.find((framework) => framework.value === value)\r\n ?.label\r\n ) : (\r\n <span className=\"text-muted-foreground font-normal\">\r\n {placeholder}\r\n </span>\r\n )}\r\n </span>\r\n\r\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50 ml-6\" />\r\n </Button>\r\n </PopoverTrigger>\r\n {clearable && !disabled && value && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"absolute right-6 top-0 h-full px-1 py-2 hover:bg-transparent\"\r\n onClick={handleClear}\r\n >\r\n <X className=\"h-4 w-4 shrink-0 opacity-50 hover:opacity-100\" />\r\n </Button>\r\n )}\r\n </div>\r\n <PopoverContent className=\"min-w-[200px] w-[var(--radix-popover-trigger-width)] p-0\">\r\n <Command>\r\n <CommandInput\r\n placeholder={placeholderSearch}\r\n className=\"h-9\"\r\n value={inputValue}\r\n onValueChange={setInputValue}\r\n />\r\n <CommandList>\r\n <CommandEmpty>\r\n {allowAddNew && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className=\"w-full justify-start\"\r\n onClick={() => handleSelect(\"add-custom\")}\r\n >\r\n <Plus className=\"mr-2 h-4 w-4\" />\r\n Přidat \"{inputValue}\"\r\n </Button>\r\n )}\r\n </CommandEmpty>\r\n\r\n <CommandGroup>\r\n {frameworks.map((framework) => (\r\n <CommandItem\r\n key={framework.value}\r\n value={framework.label as string}\r\n onSelect={() => handleSelect(framework.value as string)}\r\n >\r\n {framework.label}\r\n <Check\r\n className={cn(\r\n \"ml-auto h-4 w-4\",\r\n value === framework.value ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n />\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n }\r\n);\r\n\r\nCombobox.displayName = \"Combobox\";\r\n\r\nexport default Combobox;\r\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sources":["../../../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../../lib/components/ui/checkbox.tsx"],"sourcesContent":["\"use client\";\n\n// packages/react/checkbox/src/Checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProvider, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form2 = button?.form;\n if (form2) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form2.addEventListener(\"reset\", reset);\n return () => form2.removeEventListener(\"reset\", reset);\n }\n }, [button, setChecked]);\n return /* @__PURE__ */ jsxs(CheckboxProvider, { scope: __scopeCheckbox, state: checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n BubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" },\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked\n }\n )\n ] });\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isIndeterminate(context.state) || context.state === true, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.state),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n ) });\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BubbleInput = (props) => {\n const { control, checked, bubbles = true, defaultChecked, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"checked\");\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n ...inputProps,\n tabIndex: -1,\n ref,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n};\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Checkbox;\nvar Indicator = CheckboxIndicator;\nexport {\n Checkbox,\n CheckboxIndicator,\n Indicator,\n Root,\n createCheckboxScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { Check } from \"lucide-react\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\n\r\nconst Checkbox = React.forwardRef<\r\n React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <CheckboxPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n className={cn(\"flex items-center justify-center text-current\")}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n));\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\r\n\r\nexport { Checkbox };\r\n"],"names":["Checkbox","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"checkbox.js","sources":["../../../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../../lib/components/ui/checkbox.tsx"],"sourcesContent":["\"use client\";\n\n// packages/react/checkbox/src/Checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProvider, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form2 = button?.form;\n if (form2) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form2.addEventListener(\"reset\", reset);\n return () => form2.removeEventListener(\"reset\", reset);\n }\n }, [button, setChecked]);\n return /* @__PURE__ */ jsxs(CheckboxProvider, { scope: __scopeCheckbox, state: checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n BubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" },\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked\n }\n )\n ] });\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isIndeterminate(context.state) || context.state === true, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.state),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n ) });\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BubbleInput = (props) => {\n const { control, checked, bubbles = true, defaultChecked, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"checked\");\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n ...inputProps,\n tabIndex: -1,\n ref,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n};\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Checkbox;\nvar Indicator = CheckboxIndicator;\nexport {\n Checkbox,\n CheckboxIndicator,\n Indicator,\n Root,\n createCheckboxScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { Check } from \"lucide-react\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\n\r\nconst Checkbox = React.forwardRef<\r\n React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <CheckboxPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n className={cn(\"flex items-center justify-center text-current\")}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n));\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\r\n\r\nexport { Checkbox };\r\n"],"names":["Checkbox","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator"],"mappings":"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","x_google_ignoreList":[0]}