@addsign/moje-agenda-shared-lib 2.0.0 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Dialog-CLPZ1Y00.js +422 -0
- package/dist/Dialog-CLPZ1Y00.js.map +1 -0
- package/dist/Dialog-IPFWYptw.js +421 -0
- package/dist/Dialog-IPFWYptw.js.map +1 -0
- package/dist/assets/style.css +25 -6
- package/dist/components/datatable/DataTable.js +5 -2
- package/dist/components/datatable/DataTable.js.map +1 -1
- package/dist/components/datatable/DataTableServer.js +5 -2
- package/dist/components/datatable/DataTableServer.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBar.js +5 -2
- package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBarServer.js +5 -2
- package/dist/components/form/AutocompleteSearchBarServer.js.map +1 -1
- package/dist/components/form/FileInput.js +6 -3
- package/dist/components/form/FileInput.js.map +1 -1
- package/dist/components/form/FileInputMultiple.js +6 -3
- package/dist/components/form/FileInputMultiple.js.map +1 -1
- package/dist/components/form/FormField.js +5 -2
- package/dist/components/form/FormField.js.map +1 -1
- package/dist/components/form/PositionsSelectorSingle.js +5 -2
- package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
- package/dist/components/form/SelectField.js +5 -2
- package/dist/components/form/SelectField.js.map +1 -1
- package/dist/components/profiles/ProfileOverview.js +5 -2
- package/dist/components/profiles/ProfileOverview.js.map +1 -1
- package/dist/components/ui/Combobox.d.ts +14 -1
- package/dist/components/ui/Combobox.js +122 -98
- package/dist/components/ui/Combobox.js.map +1 -1
- package/dist/components/ui/Dialog.js +1 -1
- package/dist/components/ui/ScrollArea.js +3 -3
- package/dist/components/ui/button.js +4 -4
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/command.js +3 -3
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/form.js +1 -1
- package/dist/components/ui/input.d.ts +5 -1
- package/dist/components/ui/input.js +92 -13
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/label.js +1 -1
- package/dist/components/ui/popover.js +6 -5
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/radioGroup.js +4 -4
- package/dist/components/ui/select.d.ts +3 -1
- package/dist/components/ui/select.js +10 -35
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.js +48 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +7 -0
- package/dist/components/ui/tooltip.js +509 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/index-B3cR4C4Z.js +2203 -0
- package/dist/index-B3cR4C4Z.js.map +1 -0
- package/dist/index-B761_inZ.js +28884 -0
- package/dist/index-B761_inZ.js.map +1 -0
- package/dist/index-BF3Kkq7m.js +2212 -0
- package/dist/index-BF3Kkq7m.js.map +1 -0
- package/dist/index-BULFV6Qz.js +2266 -0
- package/dist/index-BULFV6Qz.js.map +1 -0
- package/dist/index-Bjw9JvWH.js +131 -0
- package/dist/index-Bjw9JvWH.js.map +1 -0
- package/dist/index-Bm-YZac9.js +28864 -0
- package/dist/index-Bm-YZac9.js.map +1 -0
- package/dist/index-BzZGaGRV.js +230 -0
- package/dist/index-BzZGaGRV.js.map +1 -0
- package/dist/index-C4pkvuV-.js +1395 -0
- package/dist/index-C4pkvuV-.js.map +1 -0
- package/dist/index-C59RTYp9.js +140 -0
- package/dist/index-C59RTYp9.js.map +1 -0
- package/dist/index-D8AkGh-j.js +1173 -0
- package/dist/index-D8AkGh-j.js.map +1 -0
- package/dist/index-D9mvqz1C.js +97 -0
- package/dist/index-D9mvqz1C.js.map +1 -0
- package/dist/index-M6rMtqtn.js +2203 -0
- package/dist/index-M6rMtqtn.js.map +1 -0
- package/dist/index-cCT-Qkr7.js +36 -0
- package/dist/index-cCT-Qkr7.js.map +1 -0
- package/dist/index.es-XWsfbnWC.js +9628 -0
- package/dist/index.es-XWsfbnWC.js.map +1 -0
- package/dist/jspdf.plugin.autotable-DXW3wQb-.js +11475 -0
- package/dist/jspdf.plugin.autotable-DXW3wQb-.js.map +1 -0
- package/dist/main.d.ts +4 -0
- package/dist/main.js +23 -5
- package/dist/main.js.map +1 -1
- package/lib/components/ui/Combobox.tsx +159 -102
- package/lib/components/ui/button.tsx +3 -3
- package/lib/components/ui/command.tsx +1 -1
- package/lib/components/ui/input.tsx +96 -10
- package/lib/components/ui/select.tsx +9 -5
- package/lib/components/ui/separator.tsx +29 -0
- package/lib/components/ui/tooltip.tsx +28 -0
- package/lib/main.ts +4 -0
- package/package.json +3 -1
|
@@ -8,14 +8,17 @@ import "../../index.esm-ifS8v9eQ.js";
|
|
|
8
8
|
import "../../jspdf.plugin.autotable-7hp3hM-a.js";
|
|
9
9
|
import "../../contexts/FederationContext.js";
|
|
10
10
|
import { useFederationContext } from "../../contexts/useFederationContext.js";
|
|
11
|
-
import "../../Dialog-
|
|
11
|
+
import "../../Dialog-CLPZ1Y00.js";
|
|
12
12
|
import "../ui/ScrollArea.js";
|
|
13
13
|
import "../ui/input.js";
|
|
14
14
|
import "../ui/form.js";
|
|
15
15
|
import "../ui/radioGroup.js";
|
|
16
16
|
import "../ui/command.js";
|
|
17
|
+
import "../ui/Combobox.js";
|
|
18
|
+
import "../ui/select.js";
|
|
19
|
+
import "../ui/tooltip.js";
|
|
20
|
+
import "../ui/separator.js";
|
|
17
21
|
import "../ui/button.js";
|
|
18
|
-
import "../ui/popover.js";
|
|
19
22
|
import "../../Calendar-DWT4e7Th.js";
|
|
20
23
|
import "../ui/DateTimePicker.js";
|
|
21
24
|
import "../ui/DatePicker.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectField.js","sources":["../../../lib/components/form/SelectField.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { IFormFieldGlobalProps, IOptionItem } from \"../../types\";\r\nimport { MdCheck, MdClose, MdExpandLess, MdExpandMore } from \"react-icons/md\";\r\nimport { useClickAway } from \"react-use\";\r\nimport { SpinnerIcon, useFederationContext } from \"../../main\";\r\nimport { FaSpinner } from \"react-icons/fa\";\r\n\r\nexport interface ISelectFieldProps extends IFormFieldGlobalProps {\r\n options?: IOptionItem[];\r\n valueKey?: string;\r\n labelKey?: string | ((item: any) => string);\r\n fetchUrl?: string;\r\n loading?: boolean;\r\n}\r\n\r\nexport default function SelectField({\r\n label,\r\n name,\r\n value,\r\n description,\r\n onInputChange,\r\n options,\r\n placeholder,\r\n className,\r\n errors = {},\r\n clearable,\r\n required,\r\n disabled,\r\n rounded = true,\r\n fetchUrl,\r\n valueKey,\r\n labelKey,\r\n loading,\r\n}: ISelectFieldProps) {\r\n const [isFocused, setIsFocused] = React.useState(false);\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const apiClient = useFederationContext()?.apiClient;\r\n const [localOptions, setLocalOptions] = React.useState(options);\r\n\r\n const ref = React.useRef(null);\r\n const handleClear = (e: any) => {\r\n // value;\r\n e.stopPropagation(); // Add this line\r\n\r\n setIsFocused(false);\r\n onInputChange({\r\n ...e,\r\n target: {\r\n value: \"\",\r\n name: name,\r\n },\r\n });\r\n };\r\n\r\n React.useEffect(() => {\r\n const fetchOptions = async (fetchUrl: string) => {\r\n setIsLoading(true);\r\n const { data } = await apiClient.get(fetchUrl);\r\n\r\n // Check if the first item in the data array is a number to determine the data type\r\n const isArrayOfNumbers = typeof data[0] === \"number\";\r\n const isInPageable = data && data.hasOwnProperty(\"content\");\r\n\r\n // Transform data based on its type\r\n const transformedOptions = (isInPageable ? data.content : data).map(\r\n (item: any) => {\r\n if (isArrayOfNumbers) {\r\n // If it's a number, use the number for both value and label\r\n return { value: item, label: item.toString() };\r\n } else {\r\n // Otherwise, extract using predefined keys or defaults\r\n return {\r\n value: item[valueKey || \"id\"],\r\n label:\r\n labelKey instanceof Function && labelKey !== undefined\r\n ? labelKey(item)\r\n : item[labelKey as string],\r\n };\r\n }\r\n }\r\n );\r\n\r\n setLocalOptions([\r\n { value: null, label: \" \" }, // Add an empty option as the first item\r\n ...transformedOptions,\r\n ]);\r\n setIsLoading(false);\r\n };\r\n\r\n if (fetchUrl) fetchOptions(fetchUrl);\r\n if (options) setLocalOptions(options);\r\n }, [fetchUrl, options, apiClient, valueKey, labelKey]); // ensure valueKey and labelKey are also in the dependency array if they are dynamic\r\n\r\n const handleToggleFocus = () => {\r\n setIsFocused((prev) => !prev);\r\n };\r\n\r\n useClickAway(ref, () => {\r\n setIsFocused(false);\r\n });\r\n\r\n const hangleChange = (option: IOptionItem) => {\r\n const tmp: any = {\r\n target: {\r\n value: option.value,\r\n name: name,\r\n },\r\n };\r\n\r\n onInputChange(tmp);\r\n setIsFocused(false);\r\n };\r\n const currentlySelectedOption = React.useMemo(() => {\r\n if (value === undefined || value === \"\") return null;\r\n return localOptions?.find((option) => option.value == value);\r\n }, [localOptions, value, options]);\r\n\r\n const listOfOptions = () => {\r\n if (!localOptions) return [];\r\n return (\r\n <div\r\n id=\"list\"\r\n className=\"max-h-[390px] min-w-20 w-auto whitespace-nowrap absolute z-[100000] -top-[1px] mt-[4px] bg-white rounded-lg shadow-xl border\r\n border-gray-200 justify-start items-start inline-flex overflow-auto cursor-default\"\r\n >\r\n <div className=\"grow shrink basis-0 py-1 flex-col justify-start items-start inline-flex\">\r\n {localOptions.map((option, index) => {\r\n return (\r\n <div\r\n className=\"group self-stretch px-1.5 py-px justify-start items-center inline-flex hover:bg-gray-50 \"\r\n onClick={() => hangleChange(option)}\r\n key={index}\r\n >\r\n <div className=\"grow shrink basis-0 px-1 py-2 rounded-md flex-col justify-start items-start gap-2 inline-flex\">\r\n <div className=\"self-stretch justify-start items-center gap-2 inline-flex\">\r\n <div className=\"text-gray-900 text-sm font-normal leading-normal\">\r\n {option.label}\r\n </div>\r\n {option.description && (\r\n <div className=\"text-slate-600 sm-base font-normal leading-normal\">\r\n {option.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"w-5 h-5 relative\">\r\n {option.value === value && value !== \"\" && (\r\n <MdCheck size={22} className=\"text-primary\" />\r\n )}{\" \"}\r\n {option.value !== value && (\r\n <MdCheck\r\n size={22}\r\n className=\"text-transparent group-hover:text-gray-300\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n className={\r\n \"w-full min-h-30 flex-col justify-start items-start gap-0inline-flex \" +\r\n className\r\n }\r\n id=\"selectField\"\r\n ref={ref}\r\n >\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 font-medium leading-tight\"\r\n htmlFor={name}\r\n >\r\n {label} {required ? \"*\" : \"\"}\r\n </label>\r\n )}\r\n <div\r\n className={`self-stretch w-full px-3 py-1 bg-white border justify-start items-center gap-0 inline-flex outline-none \r\n ${isFocused ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300 \" : \"\"}\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 ${rounded ? \" rounded-lg \" : \" rounded-none \"}\r\n ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} \r\n ${disabled || isLoading ? \"opacity-80 cursor-not-allowed \" : \"\"}\r\n `}\r\n onClick={() =>\r\n !disabled && !isLoading ? handleToggleFocus() : null\r\n }\r\n >\r\n <div className=\"grow shrink basis-0 min-h-[32px] justify-start items-center gap-0 flex whitespace-nowrap w-[calc(100%-40px)] \">\r\n <div\r\n className=\"text-gray-900 text-sm font-normal leading-normal text-ellipsis overflow-hidden w-full\"\r\n id={name}\r\n >\r\n {currentlySelectedOption?.label}\r\n {!currentlySelectedOption?.label && placeholder && (\r\n <span className=\"text-slate-400 font-normal\">\r\n {\" \"}\r\n {placeholder}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-slate-600 text-base font-normal leading-normal\">\r\n {currentlySelectedOption?.description}\r\n </div>\r\n </div>\r\n {clearable &&\r\n value !== \"\" &&\r\n value !== null &&\r\n value !== undefined &&\r\n !disabled && (\r\n <div\r\n className=\"w-6 h-6 relative cursor-pointer \"\r\n id={name + \":clear\"}\r\n onClick={handleClear}\r\n >\r\n <div className=\"absolute inset-0 flex items-center justify-center hover:bg-gray-100 w-6 rounded-full text-lg\">\r\n <MdClose />\r\n </div>{\" \"}\r\n </div>\r\n )}\r\n {isLoading === true ||\r\n (loading && (\r\n <div className=\"w-6 h-6 relative flex items-center justify-center align-middle\">\r\n <SpinnerIcon icon={<FaSpinner />} />\r\n </div>\r\n ))}\r\n\r\n <div className=\"w-6 h-6 relative cursor-pointer \">\r\n <div className=\"absolute inset-0 flex items-center justify-center hover:bg-gray-100 w-6 rounded-full text-lg\">\r\n {isFocused && !disabled && <MdExpandLess />}\r\n {!isFocused && !disabled && <MdExpandMore />}\r\n </div>\r\n </div>\r\n </div>\r\n </div>{\" \"}\r\n <div className=\"w-full relative\">{isFocused && listOfOptions()}</div>\r\n {description && !isFocused && (\r\n <div\r\n className=\"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\n"],"names":["fetchUrl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectField.js","sources":["../../../lib/components/form/SelectField.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { IFormFieldGlobalProps, IOptionItem } from \"../../types\";\r\nimport { MdCheck, MdClose, MdExpandLess, MdExpandMore } from \"react-icons/md\";\r\nimport { useClickAway } from \"react-use\";\r\nimport { SpinnerIcon, useFederationContext } from \"../../main\";\r\nimport { FaSpinner } from \"react-icons/fa\";\r\n\r\nexport interface ISelectFieldProps extends IFormFieldGlobalProps {\r\n options?: IOptionItem[];\r\n valueKey?: string;\r\n labelKey?: string | ((item: any) => string);\r\n fetchUrl?: string;\r\n loading?: boolean;\r\n}\r\n\r\nexport default function SelectField({\r\n label,\r\n name,\r\n value,\r\n description,\r\n onInputChange,\r\n options,\r\n placeholder,\r\n className,\r\n errors = {},\r\n clearable,\r\n required,\r\n disabled,\r\n rounded = true,\r\n fetchUrl,\r\n valueKey,\r\n labelKey,\r\n loading,\r\n}: ISelectFieldProps) {\r\n const [isFocused, setIsFocused] = React.useState(false);\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const apiClient = useFederationContext()?.apiClient;\r\n const [localOptions, setLocalOptions] = React.useState(options);\r\n\r\n const ref = React.useRef(null);\r\n const handleClear = (e: any) => {\r\n // value;\r\n e.stopPropagation(); // Add this line\r\n\r\n setIsFocused(false);\r\n onInputChange({\r\n ...e,\r\n target: {\r\n value: \"\",\r\n name: name,\r\n },\r\n });\r\n };\r\n\r\n React.useEffect(() => {\r\n const fetchOptions = async (fetchUrl: string) => {\r\n setIsLoading(true);\r\n const { data } = await apiClient.get(fetchUrl);\r\n\r\n // Check if the first item in the data array is a number to determine the data type\r\n const isArrayOfNumbers = typeof data[0] === \"number\";\r\n const isInPageable = data && data.hasOwnProperty(\"content\");\r\n\r\n // Transform data based on its type\r\n const transformedOptions = (isInPageable ? data.content : data).map(\r\n (item: any) => {\r\n if (isArrayOfNumbers) {\r\n // If it's a number, use the number for both value and label\r\n return { value: item, label: item.toString() };\r\n } else {\r\n // Otherwise, extract using predefined keys or defaults\r\n return {\r\n value: item[valueKey || \"id\"],\r\n label:\r\n labelKey instanceof Function && labelKey !== undefined\r\n ? labelKey(item)\r\n : item[labelKey as string],\r\n };\r\n }\r\n }\r\n );\r\n\r\n setLocalOptions([\r\n { value: null, label: \" \" }, // Add an empty option as the first item\r\n ...transformedOptions,\r\n ]);\r\n setIsLoading(false);\r\n };\r\n\r\n if (fetchUrl) fetchOptions(fetchUrl);\r\n if (options) setLocalOptions(options);\r\n }, [fetchUrl, options, apiClient, valueKey, labelKey]); // ensure valueKey and labelKey are also in the dependency array if they are dynamic\r\n\r\n const handleToggleFocus = () => {\r\n setIsFocused((prev) => !prev);\r\n };\r\n\r\n useClickAway(ref, () => {\r\n setIsFocused(false);\r\n });\r\n\r\n const hangleChange = (option: IOptionItem) => {\r\n const tmp: any = {\r\n target: {\r\n value: option.value,\r\n name: name,\r\n },\r\n };\r\n\r\n onInputChange(tmp);\r\n setIsFocused(false);\r\n };\r\n const currentlySelectedOption = React.useMemo(() => {\r\n if (value === undefined || value === \"\") return null;\r\n return localOptions?.find((option) => option.value == value);\r\n }, [localOptions, value, options]);\r\n\r\n const listOfOptions = () => {\r\n if (!localOptions) return [];\r\n return (\r\n <div\r\n id=\"list\"\r\n className=\"max-h-[390px] min-w-20 w-auto whitespace-nowrap absolute z-[100000] -top-[1px] mt-[4px] bg-white rounded-lg shadow-xl border\r\n border-gray-200 justify-start items-start inline-flex overflow-auto cursor-default\"\r\n >\r\n <div className=\"grow shrink basis-0 py-1 flex-col justify-start items-start inline-flex\">\r\n {localOptions.map((option, index) => {\r\n return (\r\n <div\r\n className=\"group self-stretch px-1.5 py-px justify-start items-center inline-flex hover:bg-gray-50 \"\r\n onClick={() => hangleChange(option)}\r\n key={index}\r\n >\r\n <div className=\"grow shrink basis-0 px-1 py-2 rounded-md flex-col justify-start items-start gap-2 inline-flex\">\r\n <div className=\"self-stretch justify-start items-center gap-2 inline-flex\">\r\n <div className=\"text-gray-900 text-sm font-normal leading-normal\">\r\n {option.label}\r\n </div>\r\n {option.description && (\r\n <div className=\"text-slate-600 sm-base font-normal leading-normal\">\r\n {option.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"w-5 h-5 relative\">\r\n {option.value === value && value !== \"\" && (\r\n <MdCheck size={22} className=\"text-primary\" />\r\n )}{\" \"}\r\n {option.value !== value && (\r\n <MdCheck\r\n size={22}\r\n className=\"text-transparent group-hover:text-gray-300\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n className={\r\n \"w-full min-h-30 flex-col justify-start items-start gap-0inline-flex \" +\r\n className\r\n }\r\n id=\"selectField\"\r\n ref={ref}\r\n >\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 font-medium leading-tight\"\r\n htmlFor={name}\r\n >\r\n {label} {required ? \"*\" : \"\"}\r\n </label>\r\n )}\r\n <div\r\n className={`self-stretch w-full px-3 py-1 bg-white border justify-start items-center gap-0 inline-flex outline-none \r\n ${isFocused ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300 \" : \"\"}\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 ${rounded ? \" rounded-lg \" : \" rounded-none \"}\r\n ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} \r\n ${disabled || isLoading ? \"opacity-80 cursor-not-allowed \" : \"\"}\r\n `}\r\n onClick={() =>\r\n !disabled && !isLoading ? handleToggleFocus() : null\r\n }\r\n >\r\n <div className=\"grow shrink basis-0 min-h-[32px] justify-start items-center gap-0 flex whitespace-nowrap w-[calc(100%-40px)] \">\r\n <div\r\n className=\"text-gray-900 text-sm font-normal leading-normal text-ellipsis overflow-hidden w-full\"\r\n id={name}\r\n >\r\n {currentlySelectedOption?.label}\r\n {!currentlySelectedOption?.label && placeholder && (\r\n <span className=\"text-slate-400 font-normal\">\r\n {\" \"}\r\n {placeholder}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-slate-600 text-base font-normal leading-normal\">\r\n {currentlySelectedOption?.description}\r\n </div>\r\n </div>\r\n {clearable &&\r\n value !== \"\" &&\r\n value !== null &&\r\n value !== undefined &&\r\n !disabled && (\r\n <div\r\n className=\"w-6 h-6 relative cursor-pointer \"\r\n id={name + \":clear\"}\r\n onClick={handleClear}\r\n >\r\n <div className=\"absolute inset-0 flex items-center justify-center hover:bg-gray-100 w-6 rounded-full text-lg\">\r\n <MdClose />\r\n </div>{\" \"}\r\n </div>\r\n )}\r\n {isLoading === true ||\r\n (loading && (\r\n <div className=\"w-6 h-6 relative flex items-center justify-center align-middle\">\r\n <SpinnerIcon icon={<FaSpinner />} />\r\n </div>\r\n ))}\r\n\r\n <div className=\"w-6 h-6 relative cursor-pointer \">\r\n <div className=\"absolute inset-0 flex items-center justify-center hover:bg-gray-100 w-6 rounded-full text-lg\">\r\n {isFocused && !disabled && <MdExpandLess />}\r\n {!isFocused && !disabled && <MdExpandMore />}\r\n </div>\r\n </div>\r\n </div>\r\n </div>{\" \"}\r\n <div className=\"w-full relative\">{isFocused && listOfOptions()}</div>\r\n {description && !isFocused && (\r\n <div\r\n className=\"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\n"],"names":["fetchUrl"],"mappings":"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"}
|
|
@@ -9,14 +9,17 @@ import { useFederationContext } from "../../contexts/useFederationContext.js";
|
|
|
9
9
|
import { getFullName } from "../../utils/getFullName.js";
|
|
10
10
|
import { handleErrors } from "../../utils/handleErrors.js";
|
|
11
11
|
import { EApproverRoles } from "../../types.js";
|
|
12
|
-
import "../../Dialog-
|
|
12
|
+
import "../../Dialog-CLPZ1Y00.js";
|
|
13
13
|
import "../ui/ScrollArea.js";
|
|
14
14
|
import "../ui/input.js";
|
|
15
15
|
import "../ui/form.js";
|
|
16
16
|
import "../ui/radioGroup.js";
|
|
17
17
|
import "../ui/command.js";
|
|
18
|
+
import "../ui/Combobox.js";
|
|
19
|
+
import "../ui/select.js";
|
|
20
|
+
import "../ui/tooltip.js";
|
|
21
|
+
import "../ui/separator.js";
|
|
18
22
|
import "../ui/button.js";
|
|
19
|
-
import "../ui/popover.js";
|
|
20
23
|
import "../../Calendar-DWT4e7Th.js";
|
|
21
24
|
import "../ui/DateTimePicker.js";
|
|
22
25
|
import "../ui/DatePicker.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileOverview.js","sources":["../../../lib/components/profiles/ProfileOverview.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\r\nimport SectionTitle from \"../layout/SectionTitle\";\r\nimport {\r\n EApproverRoles,\r\n IProfileApprover,\r\n IStep,\r\n getFullName,\r\n handleErrors,\r\n useFederationContext,\r\n} from \"../../main\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport IconInCircle from \"../layout/IconInCircle\";\r\n\r\ninterface ProfileOverviewProps {\r\n employeeId?: number;\r\n onProfileApproversChange?: (data: IProfileApprover[]) => void;\r\n steps: IStep[];\r\n}\r\n\r\ninterface IApproverRoleGroup {\r\n name: string;\r\n roles: EApproverRoles[];\r\n all: boolean;\r\n parallel: boolean;\r\n stepType: number;\r\n}\r\n\r\nconst approverRoleGroups: IApproverRoleGroup[] = [\r\n {\r\n name: \"Předschvalovatelé\",\r\n roles: [EApproverRoles.predschvalovatel],\r\n all: true,\r\n parallel: true,\r\n stepType: 1,\r\n },\r\n {\r\n name: \"Schvalovatelé\",\r\n roles: [\r\n EApproverRoles.vedouci,\r\n EApproverRoles.zastupce,\r\n EApproverRoles.zastupce9,\r\n EApproverRoles.vyssiSchvalovatel,\r\n EApproverRoles.vyssiSchvalovatelZastupce,\r\n EApproverRoles.vyssiSchvalovatelZastupce9,\r\n ],\r\n all: false,\r\n parallel: true,\r\n stepType: 2,\r\n },\r\n {\r\n name: \"Docházkový vedoucí\",\r\n roles: [EApproverRoles.dochazkovyVedouci],\r\n all: true,\r\n parallel: false,\r\n stepType: 3,\r\n },\r\n];\r\n\r\nexport default function ProfileOverview({\r\n employeeId,\r\n onProfileApproversChange,\r\n steps,\r\n}: ProfileOverviewProps) {\r\n const [profileApprovers, setProfileApprovers] = useState<\r\n Array<IProfileApprover>\r\n >([]);\r\n const context = useFederationContext();\r\n\r\n const currentApprovers = useMemo(() => {\r\n return approverRoleGroups.map((group) => {\r\n const groupApprovers = profileApprovers.filter((approver) =>\r\n group.roles.includes(approver.role)\r\n );\r\n\r\n const groupApprovedSteps = steps.filter(\r\n (step) =>\r\n step.type == group.stepType &&\r\n groupApprovers.some(\r\n (approver) =>\r\n step.employee.employeeId == approver?.approver?.employeeId\r\n )\r\n );\r\n\r\n return {\r\n ...group,\r\n numberOfApprovers: groupApprovers.length,\r\n numberOfApprovedSteps: groupApprovedSteps.length,\r\n isComplete:\r\n (group.all && groupApprovers.length == groupApprovedSteps.length) ||\r\n (!group.all && groupApprovedSteps.length > 0),\r\n };\r\n });\r\n }, [profileApprovers, steps]);\r\n\r\n useEffect(() => {\r\n context.apiClient\r\n .get<IProfileApprover[]>(\r\n \"/timeoff/approve-profile\" + (employeeId ? \"/\" + employeeId : \"\")\r\n )\r\n .then((response: AxiosResponse) => {\r\n setProfileApprovers(response.data);\r\n })\r\n .catch((error) => {\r\n handleErrors(\r\n error,\r\n context.emitter,\r\n \"Nepodařilo se dohledat schvalovací profil pro uživatele \" +\r\n employeeId\r\n );\r\n console.error(\"Error submitting form:\", error);\r\n });\r\n }, [employeeId, context.emitter, context.apiClient]);\r\n\r\n const decisionsTranslations = (decision: string): string | null => {\r\n const translations: { [key: string]: string } = {\r\n approved: \"Schváleno\",\r\n rejected: \"Zamítnuto\",\r\n cancelled: \"Stornováno\",\r\n evided: \"Zaevidováno\",\r\n };\r\n\r\n return translations[decision] || null;\r\n };\r\n // pri nacteni profileApprovers se muze dat vedet parent componente inbfo o aktualnich schvalovatelich\r\n useEffect(() => {\r\n if (onProfileApproversChange) onProfileApproversChange(profileApprovers);\r\n }, [profileApprovers, onProfileApproversChange]);\r\n\r\n const findStep = (\r\n steps: IStep[],\r\n group: IApproverRoleGroup,\r\n row: IProfileApprover\r\n ) => {\r\n return steps.find(\r\n (step) =>\r\n step.type == group.stepType &&\r\n step.employee.employeeId == row.position?.employee?.employeeId\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <SectionTitle>Postup schvalování</SectionTitle>\r\n <div className=\"flex gap-4\">\r\n {currentApprovers.map((group, index) => (\r\n <div\r\n key={group.name}\r\n className={\r\n \"w-full lg:w-1/3 rounded-lg shadow-xl p-5 border gap-4 flex flex-col \"\r\n }\r\n >\r\n <div className=\"flex justify-between\">\r\n <h3 className=\"text-xl font-bold\">\r\n {group.name} - {index}\r\n </h3>\r\n\r\n <IconInCircle\r\n isComplete={group.isComplete}\r\n title={\r\n group.numberOfApprovedSteps + \" / \" + group.numberOfApprovers\r\n }\r\n isPending={!group.isComplete}\r\n ></IconInCircle>\r\n </div>\r\n {profileApprovers\r\n .filter((it) => group.roles.includes(it.role))\r\n .map((row, index) => (\r\n <div\r\n key={index}\r\n className=\" border rounded-lg p-4 flex justify-between gap-5\"\r\n >\r\n <div>\r\n <h3 className=\"\">\r\n {getFullName(row.position?.employee, true)}\r\n </h3>\r\n <p className=\"text-sm \">{row.roleTxt}</p>\r\n {findStep(steps, group, row) && (\r\n <>\r\n <p className=\"text-sm \"></p>{\" \"}\r\n {findStep(steps, group, row)?.decision && (\r\n <p className=\"text-sm \">\r\n {decisionsTranslations(\r\n findStep(steps, group, row)?.decision || \"\"\r\n )}{\" \"}\r\n (\r\n {new Date(\r\n findStep(steps, group, row)?.date || 0\r\n ).toLocaleString()}\r\n )\r\n </p>\r\n )}\r\n {findStep(steps, group, row)?.comment && (\r\n <p className=\"text-sm \">\r\n <b>Komentář</b>:{\" \"}\r\n {findStep(steps, group, row)?.comment}{\" \"}\r\n </p>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <IconInCircle\r\n isComplete={findStep(steps, group, row) != null}\r\n isPending={!group.isComplete}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </>\r\n );\r\n}\r\n"],"names":["steps","index"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProfileOverview.js","sources":["../../../lib/components/profiles/ProfileOverview.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\r\nimport SectionTitle from \"../layout/SectionTitle\";\r\nimport {\r\n EApproverRoles,\r\n IProfileApprover,\r\n IStep,\r\n getFullName,\r\n handleErrors,\r\n useFederationContext,\r\n} from \"../../main\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport IconInCircle from \"../layout/IconInCircle\";\r\n\r\ninterface ProfileOverviewProps {\r\n employeeId?: number;\r\n onProfileApproversChange?: (data: IProfileApprover[]) => void;\r\n steps: IStep[];\r\n}\r\n\r\ninterface IApproverRoleGroup {\r\n name: string;\r\n roles: EApproverRoles[];\r\n all: boolean;\r\n parallel: boolean;\r\n stepType: number;\r\n}\r\n\r\nconst approverRoleGroups: IApproverRoleGroup[] = [\r\n {\r\n name: \"Předschvalovatelé\",\r\n roles: [EApproverRoles.predschvalovatel],\r\n all: true,\r\n parallel: true,\r\n stepType: 1,\r\n },\r\n {\r\n name: \"Schvalovatelé\",\r\n roles: [\r\n EApproverRoles.vedouci,\r\n EApproverRoles.zastupce,\r\n EApproverRoles.zastupce9,\r\n EApproverRoles.vyssiSchvalovatel,\r\n EApproverRoles.vyssiSchvalovatelZastupce,\r\n EApproverRoles.vyssiSchvalovatelZastupce9,\r\n ],\r\n all: false,\r\n parallel: true,\r\n stepType: 2,\r\n },\r\n {\r\n name: \"Docházkový vedoucí\",\r\n roles: [EApproverRoles.dochazkovyVedouci],\r\n all: true,\r\n parallel: false,\r\n stepType: 3,\r\n },\r\n];\r\n\r\nexport default function ProfileOverview({\r\n employeeId,\r\n onProfileApproversChange,\r\n steps,\r\n}: ProfileOverviewProps) {\r\n const [profileApprovers, setProfileApprovers] = useState<\r\n Array<IProfileApprover>\r\n >([]);\r\n const context = useFederationContext();\r\n\r\n const currentApprovers = useMemo(() => {\r\n return approverRoleGroups.map((group) => {\r\n const groupApprovers = profileApprovers.filter((approver) =>\r\n group.roles.includes(approver.role)\r\n );\r\n\r\n const groupApprovedSteps = steps.filter(\r\n (step) =>\r\n step.type == group.stepType &&\r\n groupApprovers.some(\r\n (approver) =>\r\n step.employee.employeeId == approver?.approver?.employeeId\r\n )\r\n );\r\n\r\n return {\r\n ...group,\r\n numberOfApprovers: groupApprovers.length,\r\n numberOfApprovedSteps: groupApprovedSteps.length,\r\n isComplete:\r\n (group.all && groupApprovers.length == groupApprovedSteps.length) ||\r\n (!group.all && groupApprovedSteps.length > 0),\r\n };\r\n });\r\n }, [profileApprovers, steps]);\r\n\r\n useEffect(() => {\r\n context.apiClient\r\n .get<IProfileApprover[]>(\r\n \"/timeoff/approve-profile\" + (employeeId ? \"/\" + employeeId : \"\")\r\n )\r\n .then((response: AxiosResponse) => {\r\n setProfileApprovers(response.data);\r\n })\r\n .catch((error) => {\r\n handleErrors(\r\n error,\r\n context.emitter,\r\n \"Nepodařilo se dohledat schvalovací profil pro uživatele \" +\r\n employeeId\r\n );\r\n console.error(\"Error submitting form:\", error);\r\n });\r\n }, [employeeId, context.emitter, context.apiClient]);\r\n\r\n const decisionsTranslations = (decision: string): string | null => {\r\n const translations: { [key: string]: string } = {\r\n approved: \"Schváleno\",\r\n rejected: \"Zamítnuto\",\r\n cancelled: \"Stornováno\",\r\n evided: \"Zaevidováno\",\r\n };\r\n\r\n return translations[decision] || null;\r\n };\r\n // pri nacteni profileApprovers se muze dat vedet parent componente inbfo o aktualnich schvalovatelich\r\n useEffect(() => {\r\n if (onProfileApproversChange) onProfileApproversChange(profileApprovers);\r\n }, [profileApprovers, onProfileApproversChange]);\r\n\r\n const findStep = (\r\n steps: IStep[],\r\n group: IApproverRoleGroup,\r\n row: IProfileApprover\r\n ) => {\r\n return steps.find(\r\n (step) =>\r\n step.type == group.stepType &&\r\n step.employee.employeeId == row.position?.employee?.employeeId\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <SectionTitle>Postup schvalování</SectionTitle>\r\n <div className=\"flex gap-4\">\r\n {currentApprovers.map((group, index) => (\r\n <div\r\n key={group.name}\r\n className={\r\n \"w-full lg:w-1/3 rounded-lg shadow-xl p-5 border gap-4 flex flex-col \"\r\n }\r\n >\r\n <div className=\"flex justify-between\">\r\n <h3 className=\"text-xl font-bold\">\r\n {group.name} - {index}\r\n </h3>\r\n\r\n <IconInCircle\r\n isComplete={group.isComplete}\r\n title={\r\n group.numberOfApprovedSteps + \" / \" + group.numberOfApprovers\r\n }\r\n isPending={!group.isComplete}\r\n ></IconInCircle>\r\n </div>\r\n {profileApprovers\r\n .filter((it) => group.roles.includes(it.role))\r\n .map((row, index) => (\r\n <div\r\n key={index}\r\n className=\" border rounded-lg p-4 flex justify-between gap-5\"\r\n >\r\n <div>\r\n <h3 className=\"\">\r\n {getFullName(row.position?.employee, true)}\r\n </h3>\r\n <p className=\"text-sm \">{row.roleTxt}</p>\r\n {findStep(steps, group, row) && (\r\n <>\r\n <p className=\"text-sm \"></p>{\" \"}\r\n {findStep(steps, group, row)?.decision && (\r\n <p className=\"text-sm \">\r\n {decisionsTranslations(\r\n findStep(steps, group, row)?.decision || \"\"\r\n )}{\" \"}\r\n (\r\n {new Date(\r\n findStep(steps, group, row)?.date || 0\r\n ).toLocaleString()}\r\n )\r\n </p>\r\n )}\r\n {findStep(steps, group, row)?.comment && (\r\n <p className=\"text-sm \">\r\n <b>Komentář</b>:{\" \"}\r\n {findStep(steps, group, row)?.comment}{\" \"}\r\n </p>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <IconInCircle\r\n isComplete={findStep(steps, group, row) != null}\r\n isPending={!group.isComplete}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </>\r\n );\r\n}\r\n"],"names":["steps","index"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,qBAA2C;AAAA,EAC/C;AAAA,IACE,MAAM;AAAA,IACN,OAAO,CAAC,eAAe,gBAAgB;AAAA,IACvC,KAAK;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,IACA,KAAK;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO,CAAC,eAAe,iBAAiB;AAAA,IACxC,KAAK;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAEA,SAAwB,gBAAgB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAE9C,CAAE,CAAA;AACJ,QAAM,UAAU;AAEV,QAAA,mBAAmB,QAAQ,MAAM;AAC9B,WAAA,mBAAmB,IAAI,CAAC,UAAU;AACvC,YAAM,iBAAiB,iBAAiB;AAAA,QAAO,CAAC,aAC9C,MAAM,MAAM,SAAS,SAAS,IAAI;AAAA,MAAA;AAGpC,YAAM,qBAAqB,MAAM;AAAA,QAC/B,CAAC,SACC,KAAK,QAAQ,MAAM,YACnB,eAAe;AAAA,UACb,CAAC,aACC;;AAAA,wBAAK,SAAS,gBAAc,0CAAU,aAAV,mBAAoB;AAAA;AAAA,QACpD;AAAA,MAAA;AAGG,aAAA;AAAA,QACL,GAAG;AAAA,QACH,mBAAmB,eAAe;AAAA,QAClC,uBAAuB,mBAAmB;AAAA,QAC1C,YACG,MAAM,OAAO,eAAe,UAAU,mBAAmB,UACzD,CAAC,MAAM,OAAO,mBAAmB,SAAS;AAAA,MAAA;AAAA,IAC/C,CACD;AAAA,EAAA,GACA,CAAC,kBAAkB,KAAK,CAAC;AAE5B,YAAU,MAAM;AACd,YAAQ,UACL;AAAA,MACC,8BAA8B,aAAa,MAAM,aAAa;AAAA,IAAA,EAE/D,KAAK,CAAC,aAA4B;AACjC,0BAAoB,SAAS,IAAI;AAAA,IAAA,CAClC,EACA,MAAM,CAAC,UAAU;AAChB;AAAA,QACE;AAAA,QACA,QAAQ;AAAA,QACR,6DACE;AAAA,MAAA;AAEI,cAAA,MAAM,0BAA0B,KAAK;AAAA,IAAA,CAC9C;AAAA,EAAA,GACF,CAAC,YAAY,QAAQ,SAAS,QAAQ,SAAS,CAAC;AAE7C,QAAA,wBAAwB,CAAC,aAAoC;AACjE,UAAM,eAA0C;AAAA,MAC9C,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA;AAGH,WAAA,aAAa,QAAQ,KAAK;AAAA,EAAA;AAGnC,YAAU,MAAM;AACV,QAAA;AAA0B,+BAAyB,gBAAgB;AAAA,EAAA,GACtE,CAAC,kBAAkB,wBAAwB,CAAC;AAE/C,QAAM,WAAW,CACfA,QACA,OACA,QACG;AACH,WAAOA,OAAM;AAAA,MACX,CAAC,SACC;;AAAA,oBAAK,QAAQ,MAAM,YACnB,KAAK,SAAS,gBAAc,eAAI,aAAJ,mBAAc,aAAd,mBAAwB;AAAA;AAAA,IAAA;AAAA,EACxD;AAGF,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,oBAAC,gBAAa,UAAkB,qBAAA,CAAA;AAAA,IAChC,oBAAC,SAAI,WAAU,cACZ,2BAAiB,IAAI,CAAC,OAAO,UAC5B;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WACE;AAAA,QAGF,UAAA;AAAA,UAAC,qBAAA,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,YAAC,qBAAA,MAAA,EAAG,WAAU,qBACX,UAAA;AAAA,cAAM,MAAA;AAAA,cAAK;AAAA,cAAI;AAAA,YAAA,GAClB;AAAA,YAEA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,YAAY,MAAM;AAAA,gBAClB,OACE,MAAM,wBAAwB,QAAQ,MAAM;AAAA,gBAE9C,WAAW,CAAC,MAAM;AAAA,cAAA;AAAA,YACnB;AAAA,UAAA,GACH;AAAA,UACC,iBACE,OAAO,CAAC,OAAO,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,EAC5C,IAAI,CAAC,KAAKC,WACT;;AAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,qBAAC,OACC,EAAA,UAAA;AAAA,oBAAC,oBAAA,MAAA,EAAG,WAAU,IACX,UAAA,aAAY,SAAI,aAAJ,mBAAc,UAAU,IAAI,EAC3C,CAAA;AAAA,oBACC,oBAAA,KAAA,EAAE,WAAU,YAAY,cAAI,SAAQ;AAAA,oBACpC,SAAS,OAAO,OAAO,GAAG,KAEvB,qBAAA,UAAA,EAAA,UAAA;AAAA,sBAAC,oBAAA,KAAA,EAAE,WAAU,WAAW,CAAA;AAAA,sBAAK;AAAA,wBAC5B,cAAS,OAAO,OAAO,GAAG,MAA1B,mBAA6B,aAC5B,qBAAC,KAAE,EAAA,WAAU,YACV,UAAA;AAAA,wBAAA;AAAA,4BACC,cAAS,OAAO,OAAO,GAAG,MAA1B,mBAA6B,aAAY;AAAA,wBAC3C;AAAA,wBAAG;AAAA,wBAAI;AAAA,wBAEN,IAAI;AAAA,4BACH,cAAS,OAAO,OAAO,GAAG,MAA1B,mBAA6B,SAAQ;AAAA,0BACrC,eAAe;AAAA,wBAAE;AAAA,sBAAA,GAErB;AAAA,wBAED,cAAS,OAAO,OAAO,GAAG,MAA1B,mBAA6B,YAC5B,qBAAC,KAAE,EAAA,WAAU,YACX,UAAA;AAAA,wBAAA,oBAAC,OAAE,UAAQ,WAAA,CAAA;AAAA,wBAAI;AAAA,wBAAE;AAAA,yBAChB,cAAS,OAAO,OAAO,GAAG,MAA1B,mBAA6B;AAAA,wBAAS;AAAA,sBAAA,GACzC;AAAA,oBAAA,GAEJ;AAAA,kBAAA,GAEJ;AAAA,kBACA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,YAAY,SAAS,OAAO,OAAO,GAAG,KAAK;AAAA,sBAC3C,WAAW,CAAC,MAAM;AAAA,oBAAA;AAAA,kBACpB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAnCKA;AAAAA,YAAA;AAAA,WAqCR;AAAA,QAAA;AAAA,MAAA;AAAA,MA3DE,MAAM;AAAA,IA6Dd,CAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;"}
|
|
@@ -1 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import { IOptionItem } from '../../types';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
interface ComboboxProps {
|
|
4
|
+
value?: string;
|
|
5
|
+
onChange?: (value: string | undefined) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
placeholderSearch?: string;
|
|
9
|
+
clearable?: boolean;
|
|
10
|
+
options?: IOptionItem[];
|
|
11
|
+
allowAddNew?: boolean;
|
|
12
|
+
}
|
|
13
|
+
declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLButtonElement>>;
|
|
14
|
+
export default Combobox;
|
|
@@ -5,6 +5,7 @@ import { Button } from "./button.js";
|
|
|
5
5
|
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from "./command.js";
|
|
6
6
|
import { Popover, PopoverTrigger, PopoverContent } from "./popover.js";
|
|
7
7
|
import { c as createLucideIcon } from "../../createLucideIcon-KSoQd4Wi.js";
|
|
8
|
+
import { X } from "../../x-DciOkaU0.js";
|
|
8
9
|
import { C as Check } from "../../check-B7dJm08z.js";
|
|
9
10
|
/**
|
|
10
11
|
* @license lucide-react v0.456.0 - ISC
|
|
@@ -26,113 +27,136 @@ const Plus = createLucideIcon("Plus", [
|
|
|
26
27
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
27
28
|
["path", { d: "M12 5v14", key: "s699le" }]
|
|
28
29
|
]);
|
|
29
|
-
const
|
|
30
|
-
{
|
|
31
|
-
value:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
label: "Astro"
|
|
49
|
-
}
|
|
50
|
-
];
|
|
51
|
-
function ComboboxDemo() {
|
|
52
|
-
var _a;
|
|
53
|
-
const [open, setOpen] = React.useState(false);
|
|
54
|
-
const [value, setValue] = React.useState("");
|
|
55
|
-
const [inputValue, setInputValue] = React.useState("");
|
|
56
|
-
const [frameworks, setFrameworks] = React.useState(predefinedFrameworks);
|
|
57
|
-
const handleSelect = (currentValue) => {
|
|
58
|
-
if (currentValue === "add-custom") {
|
|
59
|
-
if (inputValue && !frameworks.some((f) => f.value === inputValue.toLowerCase())) {
|
|
60
|
-
const newFramework = {
|
|
61
|
-
value: inputValue.toLowerCase(),
|
|
62
|
-
label: inputValue
|
|
63
|
-
};
|
|
64
|
-
setFrameworks([...frameworks, newFramework]);
|
|
65
|
-
setValue(newFramework.value);
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
setValue(currentValue === value ? "" : currentValue);
|
|
69
|
-
}
|
|
70
|
-
setOpen(false);
|
|
71
|
-
};
|
|
72
|
-
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
73
|
-
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
74
|
-
Button,
|
|
75
|
-
{
|
|
76
|
-
variant: "outline",
|
|
77
|
-
role: "combobox",
|
|
78
|
-
"aria-expanded": open,
|
|
79
|
-
className: "w-[200px] justify-between",
|
|
80
|
-
children: [
|
|
81
|
-
value ? (_a = frameworks.find((framework) => framework.value === value)) == null ? void 0 : _a.label : "Select framework...",
|
|
82
|
-
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
|
|
83
|
-
]
|
|
30
|
+
const Combobox = React.forwardRef(
|
|
31
|
+
({
|
|
32
|
+
value: propValue,
|
|
33
|
+
onChange: propOnChange,
|
|
34
|
+
className,
|
|
35
|
+
placeholder,
|
|
36
|
+
placeholderSearch = "Vyhledejte položku",
|
|
37
|
+
clearable = false,
|
|
38
|
+
options = [],
|
|
39
|
+
allowAddNew = false
|
|
40
|
+
}, ref) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const [open, setOpen] = React.useState(false);
|
|
43
|
+
const [value, setValue] = React.useState(propValue || "");
|
|
44
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
45
|
+
const [frameworks, setFrameworks] = React.useState(options);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (propValue !== void 0) {
|
|
48
|
+
setValue(propValue);
|
|
84
49
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
50
|
+
}, [propValue]);
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
setFrameworks(options);
|
|
53
|
+
}, [options]);
|
|
54
|
+
const handleSelect = (currentValue) => {
|
|
55
|
+
if (currentValue === "add-custom") {
|
|
56
|
+
if (inputValue && !frameworks.some((f) => f.value === inputValue.toLowerCase())) {
|
|
57
|
+
const newFramework = {
|
|
58
|
+
value: inputValue.toLowerCase(),
|
|
59
|
+
label: inputValue
|
|
60
|
+
};
|
|
61
|
+
setFrameworks([...frameworks, newFramework]);
|
|
62
|
+
updateValue(newFramework.value);
|
|
94
63
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
64
|
+
} else {
|
|
65
|
+
updateValue(currentValue === value ? "" : currentValue);
|
|
66
|
+
}
|
|
67
|
+
setOpen(false);
|
|
68
|
+
};
|
|
69
|
+
const updateValue = (newValue) => {
|
|
70
|
+
setValue(newValue);
|
|
71
|
+
propOnChange == null ? void 0 : propOnChange(newValue || void 0);
|
|
72
|
+
};
|
|
73
|
+
const handleClear = (e) => {
|
|
74
|
+
e.stopPropagation();
|
|
75
|
+
updateValue("");
|
|
76
|
+
setInputValue("");
|
|
77
|
+
setOpen(false);
|
|
78
|
+
};
|
|
79
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
80
|
+
/* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
|
|
81
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
98
82
|
Button,
|
|
99
83
|
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
84
|
+
ref,
|
|
85
|
+
type: "button",
|
|
86
|
+
variant: "outline",
|
|
87
|
+
role: "combobox",
|
|
88
|
+
"aria-expanded": open,
|
|
89
|
+
className: cn("w-full justify-between", className),
|
|
103
90
|
children: [
|
|
104
|
-
/* @__PURE__ */ jsx(
|
|
105
|
-
|
|
106
|
-
inputValue,
|
|
107
|
-
'"'
|
|
91
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 text-left truncate mr-2 font-normal", children: value ? (_a = frameworks.find((framework) => framework.value === value)) == null ? void 0 : _a.label : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-normal", children: placeholder }) }),
|
|
92
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50 ml-6" })
|
|
108
93
|
]
|
|
109
94
|
}
|
|
110
95
|
) }),
|
|
111
|
-
|
|
112
|
-
|
|
96
|
+
clearable && value && /* @__PURE__ */ jsx(
|
|
97
|
+
Button,
|
|
113
98
|
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
99
|
+
type: "button",
|
|
100
|
+
variant: "ghost",
|
|
101
|
+
size: "sm",
|
|
102
|
+
className: "absolute right-6 top-0 h-full px-1 py-2 hover:bg-transparent",
|
|
103
|
+
onClick: handleClear,
|
|
104
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4 shrink-0 opacity-50 hover:opacity-100" })
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
] }),
|
|
108
|
+
/* @__PURE__ */ jsx(PopoverContent, { className: "min-w-[200px] w-full p-0", children: /* @__PURE__ */ jsxs(Command, { children: [
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
110
|
+
CommandInput,
|
|
111
|
+
{
|
|
112
|
+
placeholder: placeholderSearch,
|
|
113
|
+
className: "h-9",
|
|
114
|
+
value: inputValue,
|
|
115
|
+
onValueChange: setInputValue
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ jsxs(CommandList, { children: [
|
|
119
|
+
/* @__PURE__ */ jsx(CommandEmpty, { children: allowAddNew && /* @__PURE__ */ jsxs(
|
|
120
|
+
Button,
|
|
121
|
+
{
|
|
122
|
+
variant: "ghost",
|
|
123
|
+
className: "w-full justify-start",
|
|
124
|
+
onClick: () => handleSelect("add-custom"),
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ jsx(Plus, { className: "mr-2 h-4 w-4" }),
|
|
127
|
+
'Přidat "',
|
|
128
|
+
inputValue,
|
|
129
|
+
'"'
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
) }),
|
|
133
|
+
/* @__PURE__ */ jsx(CommandGroup, { children: frameworks.map((framework) => /* @__PURE__ */ jsxs(
|
|
134
|
+
CommandItem,
|
|
135
|
+
{
|
|
136
|
+
value: framework.value,
|
|
137
|
+
onSelect: handleSelect,
|
|
138
|
+
children: [
|
|
139
|
+
framework.label,
|
|
140
|
+
/* @__PURE__ */ jsx(
|
|
141
|
+
Check,
|
|
142
|
+
{
|
|
143
|
+
className: cn(
|
|
144
|
+
"ml-auto h-4 w-4",
|
|
145
|
+
value === framework.value ? "opacity-100" : "opacity-0"
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
framework.value
|
|
152
|
+
)) })
|
|
153
|
+
] })
|
|
154
|
+
] }) })
|
|
155
|
+
] });
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
Combobox.displayName = "Combobox";
|
|
135
159
|
export {
|
|
136
|
-
|
|
160
|
+
Combobox as default
|
|
137
161
|
};
|
|
138
162
|
//# sourceMappingURL=Combobox.js.map
|
|
@@ -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 } 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\n\r\
|
|
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}\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 = [],\r\n allowAddNew = 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] = React.useState<IOptionItem[]>(options);\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(options);\r\n }, [options]);\r\n\r\n const handleSelect = (currentValue: string) => {\r\n if (currentValue === \"add-custom\") {\r\n if (\r\n inputValue &&\r\n !frameworks.some((f) => f.value === inputValue.toLowerCase())\r\n ) {\r\n const newFramework = {\r\n value: inputValue.toLowerCase(),\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 className={cn(\"w-full justify-between\", className)}\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 && 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-full 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 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.value as string}\r\n onSelect={handleSelect}\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,6 +1,6 @@
|
|
|
1
1
|
import "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
-
import { D, c, e, i, g, f, b, a, h, d } from "../../Dialog-
|
|
3
|
+
import { D, c, e, i, g, f, b, a, h, d } from "../../Dialog-CLPZ1Y00.js";
|
|
4
4
|
import "../../utils/utils.js";
|
|
5
5
|
import "../../x-DciOkaU0.js";
|
|
6
6
|
export {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { P as Primitive } from "../../index-
|
|
4
|
-
import { P as Presence } from "../../index-
|
|
3
|
+
import { P as Primitive } from "../../index-B761_inZ.js";
|
|
4
|
+
import { P as Presence } from "../../index-Bjw9JvWH.js";
|
|
5
5
|
import { c as createContextScope, a as composeEventHandlers, d as useCallbackRef, u as useLayoutEffect2 } from "../../index-BpHbTxNe.js";
|
|
6
|
-
import { u as useComposedRefs } from "../../index-
|
|
6
|
+
import { u as useComposedRefs } from "../../index-D9mvqz1C.js";
|
|
7
7
|
import { u as useDirection } from "../../index-Bk8dRTPE.js";
|
|
8
8
|
import { c as clamp } from "../../index-IXOTxK3N.js";
|
|
9
9
|
import { cn } from "../../utils/utils.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { S as Slot } from "../../index-
|
|
3
|
+
import { S as Slot } from "../../index-D9mvqz1C.js";
|
|
4
4
|
import { c as cva } from "../../index-udNDzvjB.js";
|
|
5
5
|
import { cn } from "../../utils/utils.js";
|
|
6
6
|
const buttonVariants = cva(
|
|
7
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-
|
|
7
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-ring transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
8
8
|
{
|
|
9
9
|
variants: {
|
|
10
10
|
variant: {
|
|
@@ -16,8 +16,8 @@ const buttonVariants = cva(
|
|
|
16
16
|
link: "text-primary underline-offset-4 hover:underline"
|
|
17
17
|
},
|
|
18
18
|
size: {
|
|
19
|
-
default: "h-10 px-
|
|
20
|
-
sm: "h-9 rounded-md px-
|
|
19
|
+
default: "h-10 px-2 py-2",
|
|
20
|
+
sm: "h-9 rounded-md px-2",
|
|
21
21
|
lg: "h-11 rounded-md px-8",
|
|
22
22
|
icon: "h-10 w-10"
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sources":["../../../lib/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-
|
|
1
|
+
{"version":3,"file":"button.js","sources":["../../../lib/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\n\r\nimport { cn } from \"../../utils/utils\";\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-ring transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-text hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\r\n outline:\r\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-2 py-2\",\r\n sm: \"h-9 rounded-md px-2\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"button\";\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = \"Button\";\r\n\r\nexport { Button, buttonVariants };\r\n"],"names":[],"mappings":";;;;;AAMA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAQA,MAAM,SAAS,MAAM;AAAA,EACnB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAM,GAAG,QAAQ;AAC1D,UAAA,OAAO,UAAU,OAAO;AAE5B,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAA,CAAW,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,OAAO,cAAc;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import React__default from "react";
|
|
4
|
-
import { R as Root, P as Portal, O as Overlay, C as Content, D as Dialog, e as DialogContent } from "../../Dialog-
|
|
5
|
-
import { P as Primitive } from "../../index-
|
|
4
|
+
import { R as Root, P as Portal, O as Overlay, C as Content, D as Dialog, e as DialogContent } from "../../Dialog-CLPZ1Y00.js";
|
|
5
|
+
import { P as Primitive } from "../../index-B761_inZ.js";
|
|
6
6
|
import { a as useId } from "../../index-BzVVosDl.js";
|
|
7
7
|
import { cn } from "../../utils/utils.js";
|
|
8
8
|
import { c as createLucideIcon } from "../../createLucideIcon-KSoQd4Wi.js";
|
|
@@ -575,7 +575,7 @@ const CommandEmpty = React.forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
|
575
575
|
Ve.Empty,
|
|
576
576
|
{
|
|
577
577
|
ref,
|
|
578
|
-
className: "py-
|
|
578
|
+
className: "py-0 text-center text-sm",
|
|
579
579
|
...props
|
|
580
580
|
}
|
|
581
581
|
));
|