@addsign/moje-agenda-shared-lib 2.0.79 → 2.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/assets/style.css +8 -0
  2. package/dist/components/Attachments.js +1 -0
  3. package/dist/components/Attachments.js.map +1 -1
  4. package/dist/components/datatable/DataTable.js +1 -0
  5. package/dist/components/datatable/DataTable.js.map +1 -1
  6. package/dist/components/datatable/DataTableServer.js +9 -0
  7. package/dist/components/datatable/DataTableServer.js.map +1 -1
  8. package/dist/components/form/AutocompleteSearchBar.js +1 -0
  9. package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
  10. package/dist/components/form/AutocompleteSearchBarServer.js +1 -0
  11. package/dist/components/form/AutocompleteSearchBarServer.js.map +1 -1
  12. package/dist/components/form/FileInput.js +1 -0
  13. package/dist/components/form/FileInput.js.map +1 -1
  14. package/dist/components/form/FileInputForm.js +1 -0
  15. package/dist/components/form/FileInputForm.js.map +1 -1
  16. package/dist/components/form/FileInputFormMultiple.js +1 -0
  17. package/dist/components/form/FileInputFormMultiple.js.map +1 -1
  18. package/dist/components/form/FileInputMultiple.js +1 -0
  19. package/dist/components/form/FileInputMultiple.js.map +1 -1
  20. package/dist/components/form/FormField.js +1 -0
  21. package/dist/components/form/FormField.js.map +1 -1
  22. package/dist/components/form/PositionsSelectorSingle.js +1 -0
  23. package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
  24. package/dist/components/form/SelectField.js +1 -0
  25. package/dist/components/form/SelectField.js.map +1 -1
  26. package/dist/components/layout/Neoptimizovano.js +1 -0
  27. package/dist/components/layout/Neoptimizovano.js.map +1 -1
  28. package/dist/components/profiles/ProfileOverview.js +1 -0
  29. package/dist/components/profiles/ProfileOverview.js.map +1 -1
  30. package/dist/components/ui/DateTimePicker.js +3 -44
  31. package/dist/components/ui/DateTimePicker.js.map +1 -1
  32. package/dist/components/ui/DateTimePicker2.d.ts +14 -0
  33. package/dist/components/ui/DateTimePicker2.js +196 -0
  34. package/dist/components/ui/DateTimePicker2.js.map +1 -0
  35. package/dist/main.d.ts +1 -0
  36. package/dist/main.js +4 -2
  37. package/dist/main.js.map +1 -1
  38. package/dist/set-BOUTbzpR.js +49 -0
  39. package/dist/set-BOUTbzpR.js.map +1 -0
  40. package/lib/components/datatable/DataTableServer.tsx +11 -0
  41. package/lib/components/ui/DateTimePicker2.tsx +242 -0
  42. package/lib/main.ts +1 -0
  43. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FormField.js","sources":["../../../lib/components/form/FormField.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\n\nimport { MdClose } from \"react-icons/md\";\nimport { IOptionItem, useFederationContext } from \"../../main\";\n\nexport interface FormFieldProps {\n label?: string;\n description?: string;\n name: string;\n type: string;\n value?: any;\n register?: any;\n\n errors?: any;\n disabled?: boolean;\n required?: boolean;\n clearable?: boolean;\n placeholder?: string;\n options?: IOptionItem[];\n children?: React.ReactNode;\n fetchUrl?: string;\n maxLength?: number;\n\n className?: string;\n valueKey?: string;\n labelKey?: string;\n minDate?: string;\n maxDate?: string;\n onInputChange: (\n e: React.ChangeEvent<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | any\n >\n ) => void;\n}\n\nconst FormField: React.FC<FormFieldProps> = ({\n label,\n name,\n type,\n register,\n disabled,\n errors = {},\n required,\n clearable,\n value,\n description,\n onInputChange,\n options,\n placeholder,\n children,\n fetchUrl,\n valueKey,\n labelKey,\n maxLength,\n className,\n minDate,\n maxDate,\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n\n const [localOptions, setLocalOptions] = useState(options);\n const fallbackRef = useRef(null); // Create a fallback ref\n const {\n ref: registeredRef = fallbackRef,\n onBlur: formOnBlur = () => {} /* default function */,\n ...rest\n } = register ? register(name) : {};\n\n const apiClient = useFederationContext()?.apiClient;\n const ref = registeredRef || fallbackRef;\n const focusInput = () => {\n if (ref.current) {\n ref.current.focus();\n }\n };\n const handleMultiSelectChange = (\n event: React.ChangeEvent<HTMLSelectElement>\n ) => {\n const selectedOptions = Array.from(\n event.target.selectedOptions,\n (option) => option.value\n );\n\n onInputChange({\n ...event,\n target: {\n value: selectedOptions,\n name: event.target.name,\n },\n });\n };\n\n const handleCheckBoxChange = (\n event: React.ChangeEvent<HTMLSelectElement>\n ) => {\n onInputChange({\n ...event,\n target: {\n value: event.target.value == \"on\" ? true : false,\n name: event.target.name,\n },\n });\n };\n\n const handleClear = (e: any) => {\n value;\n onInputChange({\n ...e,\n target: {\n value: \"\",\n name: name,\n },\n });\n };\n useEffect(() => {\n const fetchOptions = async (fetchUrl: string) => {\n const { data } = await apiClient.get(fetchUrl);\n\n // Check if the first item in the data array is a number to determine the data type\n const isArrayOfNumbers = typeof data[0] === \"number\";\n\n // Transform data based on its type\n const transformedOptions = data.map((item: any) => {\n if (isArrayOfNumbers) {\n // If it's a number, use the number for both value and label\n return { value: item, label: item.toString() };\n } else {\n // Otherwise, extract using predefined keys or defaults\n return {\n value: item[valueKey || \"id\"],\n label: item[labelKey || \"name\"],\n };\n }\n });\n\n setLocalOptions([\n { value: null, label: \" \" }, // Add an empty option as the first item\n ...transformedOptions,\n ]);\n };\n\n if (fetchUrl) fetchOptions(fetchUrl);\n if (options) setLocalOptions(options);\n }, [fetchUrl, options, apiClient, valueKey, labelKey]); // ensure valueKey and labelKey are also in the dependency array if they are dynamic\n\n const renderInput = () => {\n switch (type) {\n case \"select\":\n return (\n <>\n <select\n id={name}\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-full\"\n disabled={disabled}\n value={value}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={onInputChange}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n >\n {placeholder && <option label={placeholder}></option>}\n {localOptions?.map((option, index) => (\n <option\n key={index}\n value={\n option.value !== undefined && option.value !== null\n ? option.value.toString()\n : \"\"\n }\n >\n {option.label}\n </option>\n ))}\n </select>\n </>\n );\n case \"multiSelect\":\n return (\n <>\n <select\n id={name}\n multiple\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-max-full \"\n disabled={disabled}\n value={Array.isArray(value) ? value : []} // Ensure value is always an array\n {...rest}\n ref={ref}\n onChange={handleMultiSelectChange} // Use the custom multi-select handler\n onFocus={() => setIsFocused(true)}\n onBlur={(e) => {\n formOnBlur(e);\n setIsFocused(false);\n }}\n >\n {options?.map((option) => (\n <option\n key={option.value}\n value={option.value ? option.value : undefined}\n >\n {option.label}\n </option>\n ))}\n </select>\n </>\n );\n case \"radioGroup\":\n return (\n <div className=\"flex flex-col\" id={name}>\n {options?.map((option, index) => (\n <label\n key={index}\n className=\"inline-flex items-center space-x-2 my-2\"\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={disabled}\n {...register(name)} // Spread the rest of register's return value\n onChange={onInputChange}\n className=\"text-indigo-600 border-gray-300 focus:ring-indigo-500 mr-2\"\n />\n <span className=\"text-muted-foreground text-sm font-normal leading-tight\">\n {option.label}\n </span>\n </label>\n ))}\n </div>\n );\n case \"textarea\":\n return (\n <textarea\n id={name}\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none \"\n disabled={disabled}\n value={value}\n rows={3}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={onInputChange}\n onFocus={() => setIsFocused(true)}\n maxLength={maxLength || 4000}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n );\n case \"checkbox\":\n return (\n <>\n <input\n type=\"checkbox\"\n id={name}\n className=\"shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none\"\n checked={value}\n disabled={disabled}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={handleCheckBoxChange}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n <label htmlFor={name}>{label}</label>\n </>\n );\n default:\n return (\n <>\n <input\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-full\"\n id={name}\n readOnly={disabled}\n value={value}\n type={type}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n placeholder={placeholder}\n onChange={onInputChange}\n min={minDate}\n max={maxDate}\n maxLength={maxLength}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n </>\n );\n }\n };\n\n return (\n <div className=\"w-full min-h-30 flex-col justify-start items-start gap-1.5 sharedLibrary\">\n <div className=\"self-stretch flex-col justify-start items-start gap-1.5 flex \">\n {label && (\n <label\n className=\"text-slate-700 text-sm leading-tight font-medium\"\n htmlFor={name}\n >\n {label} {required ? \"*\" : \"\"}\n </label>\n )}\n <div\n className={\n `self-stretch px-3 py-1 rounded-lg justify-start items-center inline-flex outline-none border ` +\n ` ${\n isFocused && !errors[name]?.message\n ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300\"\n : \"\"\n }` +\n ` ${\n isFocused && errors[name]?.message\n ? \"outline-4 outline-red-200 outline-offset-0 border-none\"\n : \"\"\n } ` +\n ` ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} ` +\n ` ${disabled ? \"bg-gray-100\" : \"bg-white\"}` +\n \" \" +\n className\n }\n >\n <div className=\"flex relative grow shrink basis-0 min-h-5 lg:min-h-[32px] justify-start items-stretch gap-1 w-full \">\n {renderInput()}\n {children && <div onClick={focusInput}>{children}</div>}\n {clearable && value && (\n <div className=\"flex items-center justify-center\">\n <MdClose\n onClick={handleClear}\n size={20}\n id={name + \":clear\"}\n ></MdClose>\n </div>\n )}{\" \"}\n </div>\n </div>\n </div>\n {description && (\n <div\n className=\"HintText self-stretch text-slate-600 text-sm font-normal leading-tight\"\n id={name + \":description\"}\n >\n {description}\n </div>\n )}\n {errors[name] && (\n <div\n className=\"HintText self-stretch text-red-600 text-sm font-normal leading-tight\"\n id={name + \":error\"}\n >\n {errors[name]?.message}\n </div>\n )}\n </div>\n );\n};\n\nexport default FormField;\n"],"names":["fetchUrl"],"mappings":"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"}
1
+ {"version":3,"file":"FormField.js","sources":["../../../lib/components/form/FormField.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\n\nimport { MdClose } from \"react-icons/md\";\nimport { IOptionItem, useFederationContext } from \"../../main\";\n\nexport interface FormFieldProps {\n label?: string;\n description?: string;\n name: string;\n type: string;\n value?: any;\n register?: any;\n\n errors?: any;\n disabled?: boolean;\n required?: boolean;\n clearable?: boolean;\n placeholder?: string;\n options?: IOptionItem[];\n children?: React.ReactNode;\n fetchUrl?: string;\n maxLength?: number;\n\n className?: string;\n valueKey?: string;\n labelKey?: string;\n minDate?: string;\n maxDate?: string;\n onInputChange: (\n e: React.ChangeEvent<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | any\n >\n ) => void;\n}\n\nconst FormField: React.FC<FormFieldProps> = ({\n label,\n name,\n type,\n register,\n disabled,\n errors = {},\n required,\n clearable,\n value,\n description,\n onInputChange,\n options,\n placeholder,\n children,\n fetchUrl,\n valueKey,\n labelKey,\n maxLength,\n className,\n minDate,\n maxDate,\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n\n const [localOptions, setLocalOptions] = useState(options);\n const fallbackRef = useRef(null); // Create a fallback ref\n const {\n ref: registeredRef = fallbackRef,\n onBlur: formOnBlur = () => {} /* default function */,\n ...rest\n } = register ? register(name) : {};\n\n const apiClient = useFederationContext()?.apiClient;\n const ref = registeredRef || fallbackRef;\n const focusInput = () => {\n if (ref.current) {\n ref.current.focus();\n }\n };\n const handleMultiSelectChange = (\n event: React.ChangeEvent<HTMLSelectElement>\n ) => {\n const selectedOptions = Array.from(\n event.target.selectedOptions,\n (option) => option.value\n );\n\n onInputChange({\n ...event,\n target: {\n value: selectedOptions,\n name: event.target.name,\n },\n });\n };\n\n const handleCheckBoxChange = (\n event: React.ChangeEvent<HTMLSelectElement>\n ) => {\n onInputChange({\n ...event,\n target: {\n value: event.target.value == \"on\" ? true : false,\n name: event.target.name,\n },\n });\n };\n\n const handleClear = (e: any) => {\n value;\n onInputChange({\n ...e,\n target: {\n value: \"\",\n name: name,\n },\n });\n };\n useEffect(() => {\n const fetchOptions = async (fetchUrl: string) => {\n const { data } = await apiClient.get(fetchUrl);\n\n // Check if the first item in the data array is a number to determine the data type\n const isArrayOfNumbers = typeof data[0] === \"number\";\n\n // Transform data based on its type\n const transformedOptions = data.map((item: any) => {\n if (isArrayOfNumbers) {\n // If it's a number, use the number for both value and label\n return { value: item, label: item.toString() };\n } else {\n // Otherwise, extract using predefined keys or defaults\n return {\n value: item[valueKey || \"id\"],\n label: item[labelKey || \"name\"],\n };\n }\n });\n\n setLocalOptions([\n { value: null, label: \" \" }, // Add an empty option as the first item\n ...transformedOptions,\n ]);\n };\n\n if (fetchUrl) fetchOptions(fetchUrl);\n if (options) setLocalOptions(options);\n }, [fetchUrl, options, apiClient, valueKey, labelKey]); // ensure valueKey and labelKey are also in the dependency array if they are dynamic\n\n const renderInput = () => {\n switch (type) {\n case \"select\":\n return (\n <>\n <select\n id={name}\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-full\"\n disabled={disabled}\n value={value}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={onInputChange}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n >\n {placeholder && <option label={placeholder}></option>}\n {localOptions?.map((option, index) => (\n <option\n key={index}\n value={\n option.value !== undefined && option.value !== null\n ? option.value.toString()\n : \"\"\n }\n >\n {option.label}\n </option>\n ))}\n </select>\n </>\n );\n case \"multiSelect\":\n return (\n <>\n <select\n id={name}\n multiple\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-max-full \"\n disabled={disabled}\n value={Array.isArray(value) ? value : []} // Ensure value is always an array\n {...rest}\n ref={ref}\n onChange={handleMultiSelectChange} // Use the custom multi-select handler\n onFocus={() => setIsFocused(true)}\n onBlur={(e) => {\n formOnBlur(e);\n setIsFocused(false);\n }}\n >\n {options?.map((option) => (\n <option\n key={option.value}\n value={option.value ? option.value : undefined}\n >\n {option.label}\n </option>\n ))}\n </select>\n </>\n );\n case \"radioGroup\":\n return (\n <div className=\"flex flex-col\" id={name}>\n {options?.map((option, index) => (\n <label\n key={index}\n className=\"inline-flex items-center space-x-2 my-2\"\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={disabled}\n {...register(name)} // Spread the rest of register's return value\n onChange={onInputChange}\n className=\"text-indigo-600 border-gray-300 focus:ring-indigo-500 mr-2\"\n />\n <span className=\"text-muted-foreground text-sm font-normal leading-tight\">\n {option.label}\n </span>\n </label>\n ))}\n </div>\n );\n case \"textarea\":\n return (\n <textarea\n id={name}\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none \"\n disabled={disabled}\n value={value}\n rows={3}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={onInputChange}\n onFocus={() => setIsFocused(true)}\n maxLength={maxLength || 4000}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n );\n case \"checkbox\":\n return (\n <>\n <input\n type=\"checkbox\"\n id={name}\n className=\"shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none\"\n checked={value}\n disabled={disabled}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n onChange={handleCheckBoxChange}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n <label htmlFor={name}>{label}</label>\n </>\n );\n default:\n return (\n <>\n <input\n className=\"grow shrink basis-0 text-muted-foreground text-sm font-normal leading-tight focus:border-none bg-transparent w-full\"\n id={name}\n readOnly={disabled}\n value={value}\n type={type}\n {...rest} // Spread the rest of register's return value\n ref={ref}\n placeholder={placeholder}\n onChange={onInputChange}\n min={minDate}\n max={maxDate}\n maxLength={maxLength}\n onFocus={() => setIsFocused(true)}\n // Combine custom onBlur with form's onBlur\n onBlur={(e) => {\n formOnBlur(e); // Call React Hook Form's onBlur\n setIsFocused(false); // Then call your custom onBlur logic\n }}\n />\n </>\n );\n }\n };\n\n return (\n <div className=\"w-full min-h-30 flex-col justify-start items-start gap-1.5 sharedLibrary\">\n <div className=\"self-stretch flex-col justify-start items-start gap-1.5 flex \">\n {label && (\n <label\n className=\"text-slate-700 text-sm leading-tight font-medium\"\n htmlFor={name}\n >\n {label} {required ? \"*\" : \"\"}\n </label>\n )}\n <div\n className={\n `self-stretch px-3 py-1 rounded-lg justify-start items-center inline-flex outline-none border ` +\n ` ${\n isFocused && !errors[name]?.message\n ? \"outline-4 outline-indigo-200 outline-offset-0 border-indigo-300\"\n : \"\"\n }` +\n ` ${\n isFocused && errors[name]?.message\n ? \"outline-4 outline-red-200 outline-offset-0 border-none\"\n : \"\"\n } ` +\n ` ${!isFocused && errors[name]?.message ? \"border-red-200\" : \"\"} ` +\n ` ${disabled ? \"bg-gray-100\" : \"bg-white\"}` +\n \" \" +\n className\n }\n >\n <div className=\"flex relative grow shrink basis-0 min-h-5 lg:min-h-[32px] justify-start items-stretch gap-1 w-full \">\n {renderInput()}\n {children && <div onClick={focusInput}>{children}</div>}\n {clearable && value && (\n <div className=\"flex items-center justify-center\">\n <MdClose\n onClick={handleClear}\n size={20}\n id={name + \":clear\"}\n ></MdClose>\n </div>\n )}{\" \"}\n </div>\n </div>\n </div>\n {description && (\n <div\n className=\"HintText self-stretch text-slate-600 text-sm font-normal leading-tight\"\n id={name + \":description\"}\n >\n {description}\n </div>\n )}\n {errors[name] && (\n <div\n className=\"HintText self-stretch text-red-600 text-sm font-normal leading-tight\"\n id={name + \":error\"}\n >\n {errors[name]?.message}\n </div>\n )}\n </div>\n );\n};\n\nexport default FormField;\n"],"names":["fetchUrl"],"mappings":"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"}
@@ -27,6 +27,7 @@ import "../ui/textarea.js";
27
27
  import "../ui/checkbox.js";
28
28
  import "../../Calendar-DWT4e7Th.js";
29
29
  import "../ui/DateTimePicker.js";
30
+ import "../ui/DateTimePicker2.js";
30
31
  import "../ui/DatePicker.js";
31
32
  import { G as GenIcon } from "../../iconBase-B8_TsgYI.js";
32
33
  function CiEdit(props) {