maquinaweb-ui 2.33.0 → 2.34.0

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.
@@ -1,5 +1,5 @@
1
1
  import { ComponentProps, ElementType } from "react";
2
- import * as react_jsx_runtime1 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/container-animation/container-animation.d.ts
5
5
  type ContainerAnimationProps<T extends ElementType = 'div'> = ComponentProps<'div'> & ComponentProps<T> & {
@@ -23,7 +23,7 @@ declare const ContainerAnimation: <T extends ElementType = "div">({
23
23
  distance,
24
24
  hideNotInView,
25
25
  ...props
26
- }: ContainerAnimationProps<T>) => react_jsx_runtime1.JSX.Element;
26
+ }: ContainerAnimationProps<T>) => react_jsx_runtime4.JSX.Element;
27
27
  //#endregion
28
28
  export { ContainerAnimation, type ContainerAnimationProps };
29
29
  //# sourceMappingURL=container-animation.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { Mask, Options } from "./with-mask-DnMiJlek.js";
2
2
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
3
3
  import { Dispatch, SetStateAction } from "react";
4
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
5
5
  import { PopoverProps } from "@radix-ui/react-popover";
6
6
 
7
7
  //#region src/components/input-suggest/input-suggest.d.ts
@@ -37,6 +37,8 @@ interface InputSuggestProps<TFieldValues extends FieldValues = FieldValues, TFie
37
37
  maskOptions?: Options;
38
38
  initialParams?: Object;
39
39
  onClear?: () => void;
40
+ debounceTime?: number;
41
+ maxWait?: number;
40
42
  }
41
43
  declare function InputSuggest<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({
42
44
  name,
@@ -66,8 +68,10 @@ declare function InputSuggest<TFieldValues extends FieldValues = FieldValues, TF
66
68
  children,
67
69
  onClear,
68
70
  initialParams,
71
+ debounceTime,
72
+ maxWait,
69
73
  ...props
70
- }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime0.JSX.Element;
74
+ }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime3.JSX.Element;
71
75
  //#endregion
72
76
  export { InputSuggest, type InputSuggestProps };
73
77
  //# sourceMappingURL=input-suggest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-suggest.d.ts","names":[],"sources":["../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAkCiB,uCACM,cAAc,gCAChB,UAAU,gBAAgB,UAAU,uBAC/C,mBAAmB,cAAc;;;EAH1B,QAAA,CAAA,EAAA,CAAA,MAAA,EAAiB,MAAA,EAAA,GAAA,IAAA;EAAA,QAAA,CAAA,EAOrB,QAPqB,CAOZ,cAPY,CAAA,MAAA,CAAA,CAAA;OACX,CAAA,EAAA,MAAA;aAAc,CAAA,EAAA,MAAA;WACN,CAAA,EAAA,MAAA;SAAV,EAAA,CAAA,MAAA,CAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAWD,MAXC,EAAA,GAAA;IAAoC,IAAA,CAAA,EAAA;MAAV,EAAA,EAAA,MAAA,GAAA,MAAA;MAClB,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,GAAA;IAAc,CAAA,EAAA;IAIrB,OAAA,CAAA,EAAA,GAAA;;UAMF,CAAA,EAAA,OAAA;OAqBX,CAAA,EAAA,MAAA;oBACO,CAAA,EAAA,OAAA;cACE,CAAA,EAAA,GAAA,GAAA,IAAA;YAjCR,CAAA,EAAA,OAAA;EAAkB,OAAA,CAAA,EAAA,MAAA;EAqCnB,IAAA,CAAA,EAAA,MAAA;EAAY,UAAA,EAAA,MAAA;QACE,CAAA,EAAA,MAAA;aAAc,CAAA,EAAA,CAAA,KAAA,EAAA,GAAA,EAAA,GAAA,GAAA;eACN,CAAA,EAAA,CAAA,OAAA,EAAA,GAAA,EAAA,GAAA,GAAA;OAAV,CAAA,EAAA,MAAA;YAAoC,CAAA,EAAA,MAAA;MAAV,CAAA,EARtC,IAQsC;aAE7C,CAAA,EATc,OASd;eACA,CAAA,EATgB,MAShB;SACA,CAAA,EAAA,GAAA,GAAA,IAAA;;iBANO,YAQP,CAAA,qBAPqB,WAOrB,GAPmC,WAOnC,EAAA,mBANmB,SAMnB,CAN6B,YAM7B,CAAA,GAN6C,SAM7C,CANuD,YAMvD,CAAA,CAAA,CAAA;EAAA,IAAA;EAAA,UAAA;EAAA,QAAA;EAAA,UAAA;EAAA,KAAA;EAAA,SAAA;EAAA,WAAA;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,QAAA;EAAA,kBAAA;EAAA,KAAA;EAAA,KAAA;EAAA,YAAA;EAAA,UAAA;EAAA,OAAA;EAAA,IAAA;EAAA,MAAA;EAAA,WAAA;EAAA,aAAA;EAAA,KAAA;EAAA,IAAA;EAAA,WAAA;EAAA,QAAA;EAAA,OAAA;EAAA,aAAA;EAAA,GAAA;AAAA,CAAA,EAwBC,iBAxBD,CAwBmB,YAxBnB,EAwBiC,UAxBjC,CAAA,GAwB+C,YAxB/C,CAAA,EAwB2D,kBAAA,CAAA,GAAA,CAAA,OAxB3D"}
1
+ {"version":3,"file":"input-suggest.d.ts","names":[],"sources":["../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAmCiB,uCACM,cAAc,gCAChB,UAAU,gBAAgB,UAAU,uBAC/C,mBAAmB,cAAc;;;EAH1B,QAAA,CAAA,EAAA,CAAA,MAAA,EAAiB,MAAA,EAAA,GAAA,IAAA;EAAA,QAAA,CAAA,EAOrB,QAPqB,CAOZ,cAPY,CAAA,MAAA,CAAA,CAAA;OACX,CAAA,EAAA,MAAA;aAAc,CAAA,EAAA,MAAA;WACN,CAAA,EAAA,MAAA;SAAV,EAAA,CAAA,MAAA,CAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAWD,MAXC,EAAA,GAAA;IAAoC,IAAA,CAAA,EAAA;MAAV,EAAA,EAAA,MAAA,GAAA,MAAA;MAClB,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,GAAA;IAAc,CAAA,EAAA;IAIrB,OAAA,CAAA,EAAA,GAAA;;UAMF,CAAA,EAAA,OAAA;OAqBX,CAAA,EAAA,MAAA;oBACO,CAAA,EAAA,OAAA;cACE,CAAA,EAAA,GAAA,GAAA,IAAA;YAjCR,CAAA,EAAA,OAAA;EAAkB,OAAA,CAAA,EAAA,MAAA;EAuCnB,IAAA,CAAA,EAAA,MAAA;EAAY,UAAA,EAAA,MAAA;QACE,CAAA,EAAA,MAAA;aAAc,CAAA,EAAA,CAAA,KAAA,EAAA,GAAA,EAAA,GAAA,GAAA;eACN,CAAA,EAAA,CAAA,OAAA,EAAA,GAAA,EAAA,GAAA,GAAA;OAAV,CAAA,EAAA,MAAA;YAAoC,CAAA,EAAA,MAAA;MAAV,CAAA,EAVtC,IAUsC;aAE7C,CAAA,EAXc,OAWd;eACA,CAAA,EAXgB,MAWhB;SACA,CAAA,EAAA,GAAA,GAAA,IAAA;cACA,CAAA,EAAA,MAAA;SACA,CAAA,EAAA,MAAA;;iBARO,YAUP,CAAA,qBATqB,WASrB,GATmC,WASnC,EAAA,mBARmB,SAQnB,CAR6B,YAQ7B,CAAA,GAR6C,SAQ7C,CARuD,YAQvD,CAAA,CAAA,CAAA;EAAA,IAAA;EAAA,UAAA;EAAA,QAAA;EAAA,UAAA;EAAA,KAAA;EAAA,SAAA;EAAA,WAAA;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,QAAA;EAAA,kBAAA;EAAA,KAAA;EAAA,KAAA;EAAA,YAAA;EAAA,UAAA;EAAA,OAAA;EAAA,IAAA;EAAA,MAAA;EAAA,WAAA;EAAA,aAAA;EAAA,KAAA;EAAA,IAAA;EAAA,WAAA;EAAA,QAAA;EAAA,OAAA;EAAA,aAAA;EAAA,YAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EAwBC,iBAxBD,CAwBmB,YAxBnB,EAwBiC,UAxBjC,CAAA,GAwB+C,YAxB/C,CAAA,EAwB2D,kBAAA,CAAA,GAAA,CAAA,OAxB3D"}
@@ -10,10 +10,11 @@ import { useController, useFormContext } from "react-hook-form";
10
10
  import { useCallback, useEffect, useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
  import { Check } from "lucide-react";
13
+ import { useDebounce } from "use-debounce";
13
14
  import { ScrollArea, ScrollAreaViewport } from "@radix-ui/react-scroll-area";
14
15
 
15
16
  //#region src/components/input-suggest/input-suggest.tsx
16
- function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label, className, placeholder, useData, setValue, required, disabled, updateSearchOnBlur = true, value, extra, extraOnClick, withPortal = false, counter, help, prefix, refineValue, refineSuggest, limit = 10, mask, maskOptions, children, onClear, initialParams,...props }) {
17
+ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label, className, placeholder, useData, setValue, required, disabled, updateSearchOnBlur = true, value, extra, extraOnClick, withPortal = false, counter, help, prefix, refineValue, refineSuggest, limit = 10, mask, maskOptions, children, onClear, initialParams, debounceTime = 100, maxWait = 200,...props }) {
17
18
  const form = useFormContext();
18
19
  const inputName = prefix ? `${prefix}.${name}` : name;
19
20
  const searchName = prefix ? `${prefix}.${nameSearch}` : nameSearch;
@@ -27,7 +28,8 @@ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label,
27
28
  });
28
29
  const [ariaSelected, setAriaSelected] = useState(-1);
29
30
  const [open, setOpen] = useState(false);
30
- const { data } = useData?.(searchField.value, initialParams);
31
+ const [searchDebounced] = useDebounce(searchField.value, debounceTime, { maxWait });
32
+ const { data } = useData?.(searchDebounced, initialParams);
31
33
  const onChange = useCallback((item) => {
32
34
  const searchValue = item?.[fieldValue];
33
35
  searchField.onChange(searchValue);
@@ -41,10 +43,10 @@ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label,
41
43
  ]);
42
44
  const handleChange = useCallback((e) => {
43
45
  if (e.target.value === "") {
44
- onClear?.();
45
46
  searchField.onChange("");
46
- onSearch?.("");
47
47
  field.onChange(null);
48
+ onClear?.();
49
+ onSearch?.("");
48
50
  return;
49
51
  }
50
52
  searchField.onChange(e.target.value);
@@ -55,16 +57,33 @@ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label,
55
57
  onChange(item);
56
58
  setOpen(false);
57
59
  }
58
- }, [field, searchField]);
60
+ }, [
61
+ field,
62
+ searchField,
63
+ onClear,
64
+ onSearch
65
+ ]);
59
66
  const handleKeyDown = useCallback((e) => {
60
- if (e.key === "ArrowDown") setAriaSelected((prev) => prev + 1);
61
- if (e.key === "ArrowUp") setAriaSelected((prev) => prev - 1);
62
- if (e.key === "Enter" && data && data[ariaSelected]) {
63
- onChange(data[ariaSelected]);
67
+ if (e.key === "ArrowDown") {
68
+ e.preventDefault();
64
69
  e.stopPropagation();
70
+ ariaSelected < (data?.length ?? 0) - 1 && setAriaSelected((prev) => prev + 1);
71
+ }
72
+ if (e.key === "ArrowUp") {
65
73
  e.preventDefault();
74
+ e.stopPropagation();
75
+ ariaSelected > 0 && setAriaSelected((prev) => prev - 1);
66
76
  }
67
- }, []);
77
+ if (e.key === "Enter" && data && data[ariaSelected]) {
78
+ e.preventDefault();
79
+ e.stopPropagation();
80
+ onChange(data[ariaSelected]);
81
+ }
82
+ }, [
83
+ data,
84
+ ariaSelected,
85
+ onChange
86
+ ]);
68
87
  useEffect(() => {
69
88
  const searchValue = field?.value?.[fieldValue];
70
89
  if (searchValue !== searchField.value && updateSearchOnBlur) {
@@ -103,7 +122,7 @@ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label,
103
122
  className: cn(fieldState.error && "border-destructive"),
104
123
  disabled,
105
124
  name,
106
- onChange: handleChange,
125
+ onInput: handleChange,
107
126
  onKeyDown: handleKeyDown,
108
127
  placeholder,
109
128
  ref: mask ? withMask(mask, {
@@ -1 +1 @@
1
- {"version":3,"file":"input-suggest.js","names":["item"],"sources":["../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\nimport {\n FieldPath,\n FieldValues,\n UseControllerProps,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport withMask, {\n type Mask,\n type Options as MaskOptions,\n} from '@/hooks/with-mask';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\nimport { Input } from '@/components/ui/input';\nimport { FormItem, FormLabel, FormMessage } from '@/ui/form';\nimport { InputHelp } from '@/ui/input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ui/popover';\nimport { ScrollBar } from '../ui/scroll-area';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface InputSuggestProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n label: string;\n search?: string;\n onSearch?: (search: string) => void;\n setValue?: Dispatch<SetStateAction<string>>;\n value?: string;\n placeholder?: string;\n className?: string;\n useData: (\n search?: string,\n initialParams?: Object\n ) => {\n data?: {\n id: string | number;\n [key: string]: any;\n }[];\n refresh?: any;\n };\n required?: boolean;\n extra?: string;\n updateSearchOnBlur?: boolean;\n extraOnClick?: () => void;\n withPortal?: boolean;\n counter?: number;\n help?: string;\n nameSearch: string;\n prefix?: string;\n refineValue?: (value: any) => any;\n refineSuggest?: (suggest: any) => any;\n limit?: number;\n fieldValue?: string;\n mask?: Mask;\n maskOptions?: MaskOptions;\n initialParams?: Object;\n onClear?: () => void;\n}\n\nfunction InputSuggest<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n nameSearch,\n onSearch,\n fieldValue = 'name',\n label,\n className,\n placeholder,\n useData,\n setValue,\n required,\n disabled,\n updateSearchOnBlur = true,\n value,\n extra,\n extraOnClick,\n withPortal = false,\n counter,\n help,\n prefix,\n refineValue,\n refineSuggest,\n limit = 10,\n mask,\n maskOptions,\n children,\n onClear,\n initialParams,\n ...props\n}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps) {\n const form = useFormContext();\n const inputName = prefix ? `${prefix}.${name}` : name;\n const searchName = prefix ? `${prefix}.${nameSearch}` : nameSearch;\n\n const { field: searchField } = useController({\n name: searchName,\n control: form.control,\n });\n const { field, fieldState } = useController({\n name: inputName,\n control: form.control,\n });\n\n const [ariaSelected, setAriaSelected] = useState(-1);\n\n const [open, setOpen] = useState(false);\n\n const { data } = useData?.(searchField.value, initialParams);\n\n const onChange = useCallback(\n (item: any) => {\n const searchValue = item?.[fieldValue as keyof typeof item];\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n field.onChange(refineValue?.(item) || item);\n setOpen(false);\n },\n [field.value, refineValue, fieldValue]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') {\n onClear?.();\n searchField.onChange('');\n onSearch?.('');\n field.onChange(null);\n return;\n }\n searchField.onChange(e.target.value);\n onSearch?.(e.target.value);\n setOpen(true);\n const item = data?.find((item) => item[fieldValue] === e.target.value);\n if (item) {\n onChange(item);\n setOpen(false);\n }\n },\n [field, searchField]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n setAriaSelected((prev) => prev + 1);\n }\n if (e.key === 'ArrowUp') {\n setAriaSelected((prev) => prev - 1);\n }\n if (e.key === 'Enter' && data && data[ariaSelected]) {\n onChange(data[ariaSelected]);\n e.stopPropagation();\n e.preventDefault();\n }\n },\n []\n );\n\n useEffect(() => {\n const searchValue = field?.value?.[fieldValue as keyof typeof field.value];\n if (searchValue !== searchField.value && updateSearchOnBlur) {\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n }\n }, [field.value]);\n\n return (\n <FormItem\n className={cn('w-full flex flex-col', className)}\n id={`input-suggest-${inputName}`}\n >\n <div className=\"flex items-end gap-1.5\">\n <FormLabel htmlFor={inputName}>\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </FormLabel>\n\n <InputHelp help={help} name={inputName} />\n </div>\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger className=\"outline-hidden w-full relative\">\n <Input\n autoComplete=\"off\"\n className={cn(fieldState.error && 'border-destructive')}\n disabled={disabled}\n name={name}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={\n mask\n ? withMask(mask, { autoUnmask: true, ...maskOptions })\n : (undefined as any)\n }\n value={searchField.value}\n />\n {children}\n </PopoverTrigger>\n {fieldState.error && <FormMessage />}\n <PopoverContent\n className={cn(\n 'mt-1 w-(--radix-popover-trigger-width) max-w-2xl p-0 z-50',\n data?.length === 0 && 'hidden'\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px]\">\n <ul className=\"p-1\">\n {data?.slice(0, limit)?.map((item) => (\n <li\n aria-selected={data[ariaSelected]?.id === item.id}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:bg-accent/50 hover:text-accent-foreground',\n field?.value?.id === item.id &&\n 'bg-accent! text-accent-foreground'\n )}\n key={item.id}\n onMouseDown={(e) => {\n onChange(item);\n e.preventDefault();\n }}\n >\n <span className=\"line-clamp-1 flex-1\">\n {refineSuggest\n ? refineSuggest(item)\n : item?.[fieldValue as keyof typeof item]}\n </span>\n {field?.value?.id == item.id && (\n <Check className=\"ml-auto h-4 w-4 shrink-0\" />\n )}\n </li>\n ))}\n\n {extra && (\n <li\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:text-accent-foreground sticky bottom-0.5 bg-white hover:bg-accent'\n )}\n onMouseDown={(e) => {\n e.preventDefault();\n extraOnClick?.();\n }}\n >\n <span className=\"line-clamp-1\">{extra}</span>\n </li>\n )}\n\n {(data?.length === 0 || !data) && !extra && (\n <p className=\"text-sm text-center text-accent-foreground/50 py-2\">\n Nenhum resultado encontrado.\n </p>\n )}\n </ul>\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </PopoverContent>\n </Popover>\n </FormItem>\n );\n}\n\nexport { InputSuggest };\n"],"mappings":"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"}
1
+ {"version":3,"file":"input-suggest.js","names":["item"],"sources":["../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\nimport {\n FieldPath,\n FieldValues,\n UseControllerProps,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\nimport withMask, {\n type Mask,\n type Options as MaskOptions,\n} from '@/hooks/with-mask';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\nimport { Input } from '@/components/ui/input';\nimport { FormItem, FormLabel, FormMessage } from '@/ui/form';\nimport { InputHelp } from '@/ui/input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ui/popover';\nimport { ScrollBar } from '../ui/scroll-area';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface InputSuggestProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n label: string;\n search?: string;\n onSearch?: (search: string) => void;\n setValue?: Dispatch<SetStateAction<string>>;\n value?: string;\n placeholder?: string;\n className?: string;\n useData: (\n search?: string,\n initialParams?: Object\n ) => {\n data?: {\n id: string | number;\n [key: string]: any;\n }[];\n refresh?: any;\n };\n required?: boolean;\n extra?: string;\n updateSearchOnBlur?: boolean;\n extraOnClick?: () => void;\n withPortal?: boolean;\n counter?: number;\n help?: string;\n nameSearch: string;\n prefix?: string;\n refineValue?: (value: any) => any;\n refineSuggest?: (suggest: any) => any;\n limit?: number;\n fieldValue?: string;\n mask?: Mask;\n maskOptions?: MaskOptions;\n initialParams?: Object;\n onClear?: () => void;\n debounceTime?: number;\n maxWait?: number;\n}\n\nfunction InputSuggest<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n nameSearch,\n onSearch,\n fieldValue = 'name',\n label,\n className,\n placeholder,\n useData,\n setValue,\n required,\n disabled,\n updateSearchOnBlur = true,\n value,\n extra,\n extraOnClick,\n withPortal = false,\n counter,\n help,\n prefix,\n refineValue,\n refineSuggest,\n limit = 10,\n mask,\n maskOptions,\n children,\n onClear,\n initialParams,\n debounceTime = 100,\n maxWait = 200,\n ...props\n}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps) {\n const form = useFormContext();\n const inputName = prefix ? `${prefix}.${name}` : name;\n const searchName = prefix ? `${prefix}.${nameSearch}` : nameSearch;\n\n const { field: searchField } = useController({\n name: searchName,\n control: form.control,\n });\n const { field, fieldState } = useController({\n name: inputName,\n control: form.control,\n });\n\n const [ariaSelected, setAriaSelected] = useState(-1);\n\n const [open, setOpen] = useState(false);\n\n const [searchDebounced] = useDebounce(searchField.value, debounceTime, {\n maxWait: maxWait,\n });\n const { data } = useData?.(searchDebounced, initialParams);\n\n const onChange = useCallback(\n (item: any) => {\n const searchValue = item?.[fieldValue as keyof typeof item];\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n field.onChange(refineValue?.(item) || item);\n setOpen(false);\n },\n [field.value, refineValue, fieldValue]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') {\n searchField.onChange('');\n field.onChange(null);\n onClear?.();\n onSearch?.('');\n return;\n }\n searchField.onChange(e.target.value);\n onSearch?.(e.target.value);\n setOpen(true);\n const item = data?.find((item) => item[fieldValue] === e.target.value);\n if (item) {\n onChange(item);\n setOpen(false);\n }\n },\n [field, searchField, onClear, onSearch]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected < (data?.length ?? 0) - 1 &&\n setAriaSelected((prev) => prev + 1);\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected > 0 && setAriaSelected((prev) => prev - 1);\n }\n if (e.key === 'Enter' && data && data[ariaSelected]) {\n e.preventDefault();\n e.stopPropagation();\n onChange(data[ariaSelected]);\n }\n },\n [data, ariaSelected, onChange]\n );\n\n useEffect(() => {\n const searchValue = field?.value?.[fieldValue as keyof typeof field.value];\n if (searchValue !== searchField.value && updateSearchOnBlur) {\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n }\n }, [field.value]);\n\n return (\n <FormItem\n className={cn('w-full flex flex-col', className)}\n id={`input-suggest-${inputName}`}\n >\n <div className=\"flex items-end gap-1.5\">\n <FormLabel htmlFor={inputName}>\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </FormLabel>\n\n <InputHelp help={help} name={inputName} />\n </div>\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger className=\"outline-hidden w-full relative\">\n <Input\n autoComplete=\"off\"\n className={cn(fieldState.error && 'border-destructive')}\n disabled={disabled}\n name={name}\n onInput={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={\n mask\n ? withMask(mask, { autoUnmask: true, ...maskOptions })\n : (undefined as any)\n }\n value={searchField.value}\n />\n {children}\n </PopoverTrigger>\n {fieldState.error && <FormMessage />}\n <PopoverContent\n className={cn(\n 'mt-1 w-(--radix-popover-trigger-width) max-w-2xl p-0 z-50',\n data?.length === 0 && 'hidden'\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px]\">\n <ul className=\"p-1\">\n {data?.slice(0, limit)?.map((item) => (\n <li\n aria-selected={data[ariaSelected]?.id === item.id}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:bg-accent/50 hover:text-accent-foreground',\n field?.value?.id === item.id &&\n 'bg-accent! text-accent-foreground'\n )}\n key={item.id}\n onMouseDown={(e) => {\n onChange(item);\n e.preventDefault();\n }}\n >\n <span className=\"line-clamp-1 flex-1\">\n {refineSuggest\n ? refineSuggest(item)\n : item?.[fieldValue as keyof typeof item]}\n </span>\n {field?.value?.id == item.id && (\n <Check className=\"ml-auto h-4 w-4 shrink-0\" />\n )}\n </li>\n ))}\n\n {extra && (\n <li\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:text-accent-foreground sticky bottom-0.5 bg-white hover:bg-accent'\n )}\n onMouseDown={(e) => {\n e.preventDefault();\n extraOnClick?.();\n }}\n >\n <span className=\"line-clamp-1\">{extra}</span>\n </li>\n )}\n\n {(data?.length === 0 || !data) && !extra && (\n <p className=\"text-sm text-center text-accent-foreground/50 py-2\">\n Nenhum resultado encontrado.\n </p>\n )}\n </ul>\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </PopoverContent>\n </Popover>\n </FormItem>\n );\n}\n\nexport { InputSuggest };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/page-header/page-header.d.ts
4
4
  interface PageHeaderProps {
@@ -10,7 +10,7 @@ declare function PageHeader({
10
10
  title,
11
11
  help,
12
12
  description
13
- }: PageHeaderProps): react_jsx_runtime0.JSX.Element;
13
+ }: PageHeaderProps): react_jsx_runtime5.JSX.Element;
14
14
  //#endregion
15
15
  export { PageHeader, type PageHeaderProps };
16
16
  //# sourceMappingURL=page-header.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { Options as Options$1 } from "./with-mask-DnMiJlek.js";
2
2
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
3
- import * as react_jsx_runtime2 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
  import { Options } from "nuqs";
5
5
 
6
6
  //#region src/components/text-field/TextField.d.ts
@@ -57,7 +57,7 @@ declare function InputText({
57
57
  name,
58
58
  onChange,
59
59
  ...props
60
- }: InputTextProps): react_jsx_runtime2.JSX.Element;
60
+ }: InputTextProps): react_jsx_runtime0.JSX.Element;
61
61
  interface TextFieldProps<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends UseControllerProps<TFieldValues, TFieldName> {
62
62
  disabled?: boolean;
63
63
  required?: boolean;
@@ -75,7 +75,7 @@ declare function TextField<TFieldValues extends FieldValues = FieldValues, TFiel
75
75
  transform,
76
76
  prefix,
77
77
  ...props
78
- }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime2.JSX.Element;
78
+ }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime0.JSX.Element;
79
79
  interface QueryTextFieldProps extends Omit<InputTextProps, 'onChange'> {
80
80
  name: string;
81
81
  defaultValue?: string;
@@ -87,7 +87,7 @@ declare function QueryTextField({
87
87
  defaultValue,
88
88
  options,
89
89
  ...props
90
- }: QueryTextFieldProps): react_jsx_runtime2.JSX.Element;
90
+ }: QueryTextFieldProps): react_jsx_runtime0.JSX.Element;
91
91
  interface CookieTextFieldProps extends InputTextProps {
92
92
  name: string;
93
93
  maxAge?: number;
@@ -97,7 +97,7 @@ declare function CookieTextField({
97
97
  maxAge,
98
98
  onChange,
99
99
  ...inputProps
100
- }: CookieTextFieldProps): react_jsx_runtime2.JSX.Element;
100
+ }: CookieTextFieldProps): react_jsx_runtime0.JSX.Element;
101
101
  //#endregion
102
102
  export { CookieTextField, type CookieTextFieldProps, InputText, type InputTextProps, QueryTextField, type QueryTextFieldProps, TextField, type TextFieldProps };
103
103
  //# sourceMappingURL=text-field.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquinaweb-ui",
3
- "version": "2.33.0",
3
+ "version": "2.34.0",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,