maquinaweb-ui 2.30.2 → 2.30.4
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/container-animation.d.ts +2 -2
- package/dist/{input-help-WAdTyl_h.js → input-help-C_4FzHTq.js} +2 -2
- package/dist/{input-help-WAdTyl_h.js.map → input-help-C_4FzHTq.js.map} +1 -1
- package/dist/input-suggest.d.ts +2 -2
- package/dist/input-suggest.js +1 -1
- package/dist/page-header.d.ts +2 -2
- package/dist/page-header.js +1 -1
- package/dist/remote-selector.js +2 -2
- package/dist/remote-selector.js.map +1 -1
- package/dist/text-field.d.ts +5 -5
- package/dist/text-field.js +1 -1
- package/dist/toggle-field.d.ts +2 -2
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentProps, ElementType } from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime7 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>) =>
|
|
26
|
+
}: ContainerAnimationProps<T>) => react_jsx_runtime7.JSX.Element;
|
|
27
27
|
//#endregion
|
|
28
28
|
export { ContainerAnimation, type ContainerAnimationProps };
|
|
29
29
|
//# sourceMappingURL=container-animation.d.ts.map
|
|
@@ -134,7 +134,7 @@ const InputHelp = ({ help, name, className }) => {
|
|
|
134
134
|
className: cn("whitespace-pre-line leading-relaxed max-w-96 text-[13px]"),
|
|
135
135
|
help: helpText,
|
|
136
136
|
children: /* @__PURE__ */ jsx("button", {
|
|
137
|
-
className: cn("size-fit hover:bg-muted rounded-sm", className),
|
|
137
|
+
className: cn("mb-0.5 size-fit hover:bg-muted rounded-sm", className),
|
|
138
138
|
type: "button",
|
|
139
139
|
children: /* @__PURE__ */ jsx(Info, { className: "size-3.5" })
|
|
140
140
|
})
|
|
@@ -143,4 +143,4 @@ const InputHelp = ({ help, name, className }) => {
|
|
|
143
143
|
|
|
144
144
|
//#endregion
|
|
145
145
|
export { FormField, FormItem, FormLabel, FormMessage, InputHelp };
|
|
146
|
-
//# sourceMappingURL=input-help-
|
|
146
|
+
//# sourceMappingURL=input-help-C_4FzHTq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-help-WAdTyl_h.js","names":["ContentHelp: React.FC<{\n children: React.ReactNode;\n help?: React.ReactNode | string;\n className?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n sideOffset?: number;\n}>","TooltipPortal","InputHelp: React.FC<{\n help?: string;\n name?: string;\n className?: string;\n}>"],"sources":["../src/components/ui/form.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/content-help.tsx","../src/components/ui/input-help.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from 'react-hook-form';\n\nimport type * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Label } from '@/components/ui/label';\n\nimport { cn } from '@/lib/utils';\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n);\n\nconst FormContext = React.createContext<{\n onSubmit?: (data?: FieldValues) => void;\n helper?: Record<string, string>;\n}>({});\n\nexport const useFormContextSubmit = () => {\n const context = React.useContext(FormContext);\n if (!context) {\n return {};\n }\n return context;\n};\n\nconst Form: React.FC<\n React.ComponentProps<typeof FormProvider<FieldValues>> & {\n onSubmit?: (data?: FieldValues) => void;\n helper?: Record<string, string>;\n }\n> = ({ onSubmit, helper, ...props }) => {\n return (\n <FormContext.Provider value={{ onSubmit, helper }}>\n <FormProvider {...props} />\n </FormContext.Provider>\n );\n};\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n className={cn('flex flex-col gap-1', className)}\n data-slot=\"form-item\"\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n className={cn('data-[error=true]:text-destructive', className)}\n data-error={!!error}\n data-slot=\"form-label\"\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n data-slot=\"form-control\"\n id={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n className={cn('text-muted-foreground text-sm', className)}\n data-slot=\"form-description\"\n id={formDescriptionId}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n className={cn('text-destructive text-xs', className)}\n data-slot=\"form-message\"\n id={formMessageId}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n","'use client';\n\nimport * as React from 'react';\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\nimport { cn } from '@/lib/utils';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n className={cn(\n 'bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',\n className\n )}\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { Portal as TooltipPortal } from '@radix-ui/react-tooltip';\n\nimport { cn } from '@/lib/utils';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\n\nconst ContentHelp: React.FC<{\n children: React.ReactNode;\n help?: React.ReactNode | string;\n className?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n sideOffset?: number;\n}> = ({ children, help, className, side = 'top', sideOffset = 10 }) => {\n return help ? (\n <Tooltip delayDuration={250}>\n <TooltipTrigger asChild>{children as any}</TooltipTrigger>\n <TooltipPortal>\n <TooltipContent\n className={cn('flex items-center px-2 leading-none', className)}\n side={side}\n sideOffset={10}\n >\n <p className=\"w-full text-wrap whitespace-break-spaces\">{help}</p>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n children\n );\n};\n\nexport { ContentHelp };\n","'use client';\n\nimport { ContentHelp } from '@/components/ui/content-help';\n\nimport { Info } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { useFormContextSubmit } from './form';\n\nconst InputHelp: React.FC<{\n help?: string;\n name?: string;\n className?: string;\n}> = ({ help, name, className }) => {\n const { helper } = useFormContextSubmit();\n const helpText = (name && helper?.[name]) || help;\n\n return (\n helpText && (\n <ContentHelp\n className={cn(\n 'whitespace-pre-line leading-relaxed max-w-96 text-[13px]'\n )}\n help={helpText}\n >\n <button\n className={cn('size-fit hover:bg-muted rounded-sm', className)}\n type=\"button\"\n >\n <Info className=\"size-3.5\" />\n </button>\n </ContentHelp>\n )\n );\n};\nexport { InputHelp };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input-help-C_4FzHTq.js","names":["ContentHelp: React.FC<{\n children: React.ReactNode;\n help?: React.ReactNode | string;\n className?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n sideOffset?: number;\n}>","TooltipPortal","InputHelp: React.FC<{\n help?: string;\n name?: string;\n className?: string;\n}>"],"sources":["../src/components/ui/form.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/content-help.tsx","../src/components/ui/input-help.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from 'react-hook-form';\n\nimport type * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Label } from '@/components/ui/label';\n\nimport { cn } from '@/lib/utils';\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n);\n\nconst FormContext = React.createContext<{\n onSubmit?: (data?: FieldValues) => void;\n helper?: Record<string, string>;\n}>({});\n\nexport const useFormContextSubmit = () => {\n const context = React.useContext(FormContext);\n if (!context) {\n return {};\n }\n return context;\n};\n\nconst Form: React.FC<\n React.ComponentProps<typeof FormProvider<FieldValues>> & {\n onSubmit?: (data?: FieldValues) => void;\n helper?: Record<string, string>;\n }\n> = ({ onSubmit, helper, ...props }) => {\n return (\n <FormContext.Provider value={{ onSubmit, helper }}>\n <FormProvider {...props} />\n </FormContext.Provider>\n );\n};\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n className={cn('flex flex-col gap-1', className)}\n data-slot=\"form-item\"\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n className={cn('data-[error=true]:text-destructive', className)}\n data-error={!!error}\n data-slot=\"form-label\"\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n data-slot=\"form-control\"\n id={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n className={cn('text-muted-foreground text-sm', className)}\n data-slot=\"form-description\"\n id={formDescriptionId}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n className={cn('text-destructive text-xs', className)}\n data-slot=\"form-message\"\n id={formMessageId}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n","'use client';\n\nimport * as React from 'react';\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\nimport { cn } from '@/lib/utils';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n className={cn(\n 'bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',\n className\n )}\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { Portal as TooltipPortal } from '@radix-ui/react-tooltip';\n\nimport { cn } from '@/lib/utils';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\n\nconst ContentHelp: React.FC<{\n children: React.ReactNode;\n help?: React.ReactNode | string;\n className?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n sideOffset?: number;\n}> = ({ children, help, className, side = 'top', sideOffset = 10 }) => {\n return help ? (\n <Tooltip delayDuration={250}>\n <TooltipTrigger asChild>{children as any}</TooltipTrigger>\n <TooltipPortal>\n <TooltipContent\n className={cn('flex items-center px-2 leading-none', className)}\n side={side}\n sideOffset={10}\n >\n <p className=\"w-full text-wrap whitespace-break-spaces\">{help}</p>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n children\n );\n};\n\nexport { ContentHelp };\n","'use client';\n\nimport { ContentHelp } from '@/components/ui/content-help';\n\nimport { Info } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { useFormContextSubmit } from './form';\n\nconst InputHelp: React.FC<{\n help?: string;\n name?: string;\n className?: string;\n}> = ({ help, name, className }) => {\n const { helper } = useFormContextSubmit();\n const helpText = (name && helper?.[name]) || help;\n\n return (\n helpText && (\n <ContentHelp\n className={cn(\n 'whitespace-pre-line leading-relaxed max-w-96 text-[13px]'\n )}\n help={helpText}\n >\n <button\n className={cn('mb-0.5 size-fit hover:bg-muted rounded-sm', className)}\n type=\"button\"\n >\n <Info className=\"size-3.5\" />\n </button>\n </ContentHelp>\n )\n );\n};\nexport { InputHelp };\n"],"mappings":"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"}
|
package/dist/input-suggest.d.ts
CHANGED
|
@@ -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
|
|
4
|
+
import * as react_jsx_runtime1 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
|
|
@@ -65,7 +65,7 @@ declare function InputSuggest<TFieldValues extends FieldValues = FieldValues, TF
|
|
|
65
65
|
children,
|
|
66
66
|
initialParams,
|
|
67
67
|
...props
|
|
68
|
-
}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps):
|
|
68
|
+
}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime1.JSX.Element;
|
|
69
69
|
//#endregion
|
|
70
70
|
export { InputSuggest, type InputSuggestProps };
|
|
71
71
|
//# sourceMappingURL=input-suggest.d.ts.map
|
package/dist/input-suggest.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { cn } from "./utils-C0f9Ma6r.js";
|
|
5
5
|
import "./label-BqtcCyMj.js";
|
|
6
6
|
import { Input, withMask } from "./input-Cp3f1KmR.js";
|
|
7
|
-
import { FormItem, FormLabel, FormMessage, InputHelp } from "./input-help-
|
|
7
|
+
import { FormItem, FormLabel, FormMessage, InputHelp } from "./input-help-C_4FzHTq.js";
|
|
8
8
|
import { Popover, PopoverContent, PopoverTrigger, ScrollBar } from "./scroll-area-C2WadzN5.js";
|
|
9
9
|
import { useController, useFormContext } from "react-hook-form";
|
|
10
10
|
import { useCallback, useEffect, useState } from "react";
|
package/dist/page-header.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime2 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):
|
|
13
|
+
}: PageHeaderProps): react_jsx_runtime2.JSX.Element;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { PageHeader, type PageHeaderProps };
|
|
16
16
|
//# sourceMappingURL=page-header.d.ts.map
|
package/dist/page-header.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import "./utils-C0f9Ma6r.js";
|
|
5
5
|
import "./label-BqtcCyMj.js";
|
|
6
|
-
import { InputHelp } from "./input-help-
|
|
6
|
+
import { InputHelp } from "./input-help-C_4FzHTq.js";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
|
|
9
9
|
//#region src/components/page-header/page-header.tsx
|
package/dist/remote-selector.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import { cn } from "./utils-C0f9Ma6r.js";
|
|
5
5
|
import "./label-BqtcCyMj.js";
|
|
6
|
-
import { FormField, FormItem, FormMessage, InputHelp } from "./input-help-
|
|
6
|
+
import { FormField, FormItem, FormMessage, InputHelp } from "./input-help-C_4FzHTq.js";
|
|
7
7
|
import { Popover, PopoverContent, PopoverTrigger, ScrollBar } from "./scroll-area-C2WadzN5.js";
|
|
8
8
|
import { useFormContext } from "react-hook-form";
|
|
9
9
|
import { createElement, useEffect, useId, useMemo, useState } from "react";
|
|
@@ -257,7 +257,7 @@ function Selector({ type = "single", value, onChange, search, onSearch, items, l
|
|
|
257
257
|
}), item[fieldLabel]]
|
|
258
258
|
}, `item-selected-${item[itemKey]}`))
|
|
259
259
|
}),
|
|
260
|
-
unselectedGroups.map((group) => /* @__PURE__ */ jsx(CommandGroup, {
|
|
260
|
+
unselectedGroups.length > 0 && unselectedGroups.some((group) => group.items.length > 0) && unselectedGroups.map((group) => /* @__PURE__ */ jsx(CommandGroup, {
|
|
261
261
|
heading: group.heading || group.id === UNDEFINED_GROUP_ID && "Outros",
|
|
262
262
|
children: group.items.map((item) => /* @__PURE__ */ jsxs(CommandItem, {
|
|
263
263
|
className: cn("transition-all p-2", isMultiple && "gap-2", !isMultiple && isItemSelected(item) && "bg-accent! text-accent-foreground"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-selector.js","names":["Command","CommandPrimitive","Command","id"],"sources":["../src/components/ui/badge.tsx","../src/components/ui/button.tsx","../src/components/ui/command.tsx","../src/components/ui/selector.tsx","../src/components/remote-selector/remote-selector.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n warning: 'border-transparent bg-warning text-warning-foreground',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost:\n 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n data-slot=\"button\"\n {...(props as any)}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport * as React from 'react';\n\nimport { SearchIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className\n )}\n data-slot=\"command\"\n {...props}\n />\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n data-slot=\"command-input-wrapper\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n data-slot=\"command-input\"\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n className={cn(\n 'max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto',\n className\n )}\n data-slot=\"command-list\"\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n className=\"py-6 text-center text-sm\"\n data-slot=\"command-empty\"\n {...props}\n />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className\n )}\n data-slot=\"command-group\"\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n className={cn('bg-border -mx-1 h-px', className)}\n data-slot=\"command-separator\"\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n data-slot=\"command-item\"\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'text-muted-foreground ml-auto text-xs tracking-widest',\n className\n )}\n data-slot=\"command-shortcut\"\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\n\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from './command';\nimport { InputHelp } from './input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { ScrollBar } from './scroll-area';\n\nexport type SelectorOption = {\n id: string | number;\n name: string;\n value?: any;\n children?: SelectorOption[];\n};\n\nexport type SelectorProps<T> = {\n type?: 'single' | 'multiple';\n value?: T | T[];\n onChange?: (item: T | T[] | undefined | null) => void;\n search?: string;\n onSearch?: (search: string) => void;\n placeholder?: string;\n empty?: React.ReactNode;\n items: T[];\n fieldLabel: keyof T;\n fieldKey?: keyof T;\n groupBy?: keyof T;\n disabled?: boolean;\n searchPlaceholder?: string;\n label?: string;\n name?: string;\n className?: string;\n required?: boolean;\n error?: React.ReactNode;\n selectFirstIsOne?: boolean;\n help?: string;\n extra?: string;\n extraOnClick?: (\n onChange?: (item: T | T[] | undefined | null) => void\n ) => Promise<void> | void;\n open?: boolean;\n setOpen?: (open: boolean) => void;\n maxVisibleBadges?: number;\n id?: string;\n} & PopoverProps;\n\ntype SelectorGroup<T> = {\n id: string;\n heading?: string;\n items: T[];\n};\n\nexport function Selector<T>({\n type = 'single',\n value,\n onChange,\n search,\n onSearch,\n items,\n label,\n placeholder,\n fieldLabel,\n fieldKey,\n groupBy,\n searchPlaceholder,\n name,\n empty = 'Nenhuma opção encontrada...',\n disabled = false,\n className,\n required,\n error,\n selectFirstIsOne,\n help,\n extra,\n extraOnClick,\n open,\n setOpen,\n maxVisibleBadges = 3,\n id,\n ...props\n}: SelectorProps<T>) {\n const itemKey = fieldKey || fieldLabel;\n\n const isMultiple = type === 'multiple';\n const selectedItems = isMultiple && Array.isArray(value) ? value : [];\n const singleValue = !isMultiple && !Array.isArray(value) ? value : undefined;\n\n const isItemSelected = (item: T): boolean => {\n if (isMultiple) {\n return selectedItems.some(\n (selected) => selected[itemKey] === item[itemKey]\n );\n }\n return singleValue?.[itemKey] === item[itemKey];\n };\n\n const handleItemSelect = (item: T) => {\n if (isMultiple) {\n const isSelected = isItemSelected(item);\n const newValue = isSelected\n ? selectedItems.filter(\n (selected) => selected[itemKey] !== item[itemKey]\n )\n : [...selectedItems, item];\n onChange?.(newValue.length > 0 ? newValue : null);\n } else {\n onChange?.(item);\n setOpen?.(false);\n }\n };\n\n useEffect(() => {\n if (selectFirstIsOne && items && items.length === 1 && !value) {\n onChange?.(items[0] as any);\n }\n }, [items]);\n\n const { selectedGroups, unselectedGroups } = useMemo(() => {\n if (!isMultiple || selectedItems.length === 0) {\n return {\n selectedGroups: [],\n unselectedGroups: buildGroups(items, groupBy),\n };\n }\n\n const unselectedItems = items.filter((item) => !isItemSelected(item));\n\n return {\n selectedGroups: selectedItems,\n unselectedGroups: buildGroups(unselectedItems, groupBy),\n };\n }, [groupBy, items, isMultiple, selectedItems]);\n\n return (\n <div\n className={cn('w-full flex flex-col gap-1', className)}\n id={id || `selector-${name}`}\n >\n {label && (\n <div className=\"flex items-end gap-1.5\">\n <label\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n htmlFor={id || name}\n >\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </label>\n\n <InputHelp help={help} name={name} />\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger asChild>\n <Button\n aria-expanded={open}\n aria-label=\"Carregando opções...\"\n className={cn(\n 'mt-0! justify-between w-full hover:bg-transparent cursor-pointer',\n !value && 'text-muted-foreground',\n error && 'border-destructive'\n )}\n disabled={disabled}\n id={id || name}\n role=\"combobox\"\n variant=\"outline\"\n >\n {isMultiple && selectedItems.length > 0 ? (\n <div className=\"flex gap-1 flex-1 min-w-0 overflow-hidden\">\n {selectedItems\n .slice(0, maxVisibleBadges)\n .map((item, index) => (\n <Badge\n className=\"truncate shrink min-w-0\"\n key={`badge-${item[itemKey]}-${index}`}\n variant=\"secondary\"\n >\n <span className=\"truncate block\">\n {item[fieldLabel] as string}\n </span>\n </Badge>\n ))}\n {selectedItems.length > maxVisibleBadges && (\n <Badge className=\"shrink-0\" variant=\"secondary\">\n +{selectedItems.length - maxVisibleBadges}\n </Badge>\n )}\n </div>\n ) : (\n <span className=\"truncate\">\n {!isMultiple && singleValue\n ? (singleValue[fieldLabel] as string)\n : placeholder || `Selecione a ${label?.toLowerCase()}`}\n </span>\n )}\n <div className=\"flex items-center shrink-0\">\n <div className=\"relative size-4\">\n {((isMultiple && selectedItems.length > 0) ||\n (!isMultiple && singleValue !== undefined)) && (\n <div\n className=\"absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onChange?.(null);\n }}\n >\n <X className=\"size-4\" />\n </div>\n )}\n </div>\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-(--radix-popover-trigger-width) max-w-2xl p-0\">\n <Command shouldFilter={false}>\n <CommandInput\n onValueChange={onSearch}\n placeholder={\n searchPlaceholder ||\n `Pesquise por uma ${label?.toLowerCase()}`\n }\n value={search}\n />\n <CommandList>\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px] relative\">\n <CommandEmpty className=\"text-sm p-3 text-foreground/60\">\n {empty}\n </CommandEmpty>\n {isMultiple && selectedGroups.length > 0 && (\n <CommandGroup heading=\"Selecionados\">\n {selectedGroups.map((item) => (\n <CommandItem\n className={cn(\n 'transition-all p-2 gap-2 my-1 first:mt-0 last:mb-0',\n 'bg-accent! text-accent-foreground'\n )}\n key={`item-selected-${item[itemKey]}`}\n onSelect={() => handleItemSelect(item)}\n value={String(item[itemKey])}\n >\n <div\n className={cn(\n 'size-4 shrink-0 border-2 rounded flex items-center justify-center transition-colors',\n 'bg-primary border-primary'\n )}\n >\n <Check className=\"size-2.5 text-primary-foreground\" />\n </div>\n {item[fieldLabel] as string}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n {unselectedGroups.map((group) => (\n <CommandGroup\n heading={\n group.heading ||\n (group.id === UNDEFINED_GROUP_ID && 'Outros')\n }\n key={`group-${group.id}`}\n >\n {group.items.map((item) => (\n <CommandItem\n className={cn(\n 'transition-all p-2',\n isMultiple && 'gap-2',\n !isMultiple &&\n isItemSelected(item) &&\n 'bg-accent! text-accent-foreground'\n )}\n key={`item-${item[itemKey]}`}\n onSelect={() => handleItemSelect(item)}\n value={String(item[itemKey])}\n >\n {isMultiple && (\n <div className=\"size-4 shrink-0 border-2 rounded flex items-center justify-center transition-colors border-input\" />\n )}\n {item[fieldLabel] as string}\n {!isMultiple && isItemSelected(item) && (\n <Check className=\"ml-auto h-4 w-4\" />\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n {extra && (\n <CommandItem\n className={cn(\n 'transition-all p-2 sticky bottom-0 bg-white hover:!bg-accent aria-selected:!bg-accent'\n )}\n onSelect={() => {\n extraOnClick?.(onChange);\n setOpen?.(false);\n }}\n >\n {extra}\n </CommandItem>\n )}\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {error && error}\n </div>\n </div>\n );\n}\n\nconst DEFAULT_GROUP_ID = 'selector-default-group';\nconst UNDEFINED_GROUP_ID = 'selector-undefined-group';\n\nconst buildGroups = <T,>(items: T[], groupBy?: keyof T): SelectorGroup<T>[] => {\n if (!groupBy) return [{ id: DEFAULT_GROUP_ID, items }];\n\n return Object.values(\n items.reduce<Record<string, SelectorGroup<T>>>((acc, item) => {\n const rawValue = item[groupBy];\n const heading = rawValue == null ? undefined : String(rawValue);\n const groupId = heading ?? UNDEFINED_GROUP_ID;\n\n if (!acc[groupId]) {\n acc[groupId] = { id: groupId, heading, items: [] };\n }\n\n acc[groupId].items.push(item);\n return acc;\n }, {})\n );\n};\n","'use client';\n\nimport { useEffect, useId, useState } from 'react';\n\nimport {\n type FieldPath,\n type FieldPathValue,\n type FieldValues,\n type UseControllerProps,\n useFormContext,\n} from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\n\nimport { FormField, FormItem, FormMessage } from '@/components/ui/form';\nimport { Selector, type SelectorProps } from '../ui/selector';\n\nimport {\n type Options,\n parseAsArrayOf,\n parseAsString,\n useQueryState,\n} from 'nuqs';\n\nexport type TUseData<T> = (\n search?: string,\n initialParams?: any,\n disabled?: boolean\n) => {\n data: T[];\n};\n\nexport type BaseRemoteSelectorProps<T> = {\n useData: TUseData<T>;\n initialParams?: Parameters<TUseData<T>>[1];\n initialRequest?: boolean;\n forceToggle?: boolean;\n} & Omit<\n SelectorProps<T>,\n 'items' | 'value' | 'onChange' | 'search' | 'onSearch' | 'open' | 'setOpen'\n>;\n\nexport interface RemoteSelectorFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n disabled?: boolean;\n required?: boolean;\n defaultValue?: FieldPathValue<TFieldValues, TFieldName>;\n onChange?: (value: any) => Promise<void> | void;\n}\n\nexport function RemoteSelectorField<\n T,\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n className,\n required,\n defaultValue,\n onChange: onChangeCallback,\n useData,\n initialParams,\n initialRequest = false,\n forceToggle = false,\n ...props\n}: RemoteSelectorFieldProps<TFieldValues, TFieldName> &\n BaseRemoteSelectorProps<T>) {\n type TItem = NonNullable<ReturnType<TUseData<T>>['data']>[number];\n\n const { control } = useFormContext();\n const id = useId();\n\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [searchDebounced] = useDebounce(search, 100, {\n maxWait: 200,\n });\n\n const { data } = useData(\n searchDebounced,\n initialParams,\n !open && !initialRequest\n );\n\n useEffect(() => {\n setOpen(forceToggle);\n }, [forceToggle]);\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={className}>\n <Selector\n {...props}\n error={fieldState?.error && <FormMessage />}\n id={`${id}-${name.replaceAll('.', '-')}`}\n items={data as TItem[]}\n key={`selector-${field.name}-${field.value}`}\n name={name}\n onChange={(value: any) => {\n field.onChange(value as TItem);\n onChangeCallback?.(value as TItem);\n }}\n onSearch={setSearch}\n open={open}\n required={required}\n search={search}\n setOpen={setOpen}\n value={field.value as TItem}\n />\n </FormItem>\n )}\n rules={{\n required: required ? 'Campo obrigatório' : false,\n }}\n />\n );\n}\n\nexport interface RemoteSelectorQueryProps<T>\n extends BaseRemoteSelectorProps<T> {\n name: string;\n defaultValue?: string;\n options?: Options;\n onChange?: (value: T | T[] | null) => void;\n}\n\nexport function RemoteSelectorQuery<T>({\n name,\n defaultValue,\n options,\n useData,\n initialParams,\n initialRequest = false,\n forceToggle = false,\n onChange: onChangeCallback,\n fieldKey,\n fieldLabel,\n type = 'single',\n ...props\n}: RemoteSelectorQueryProps<T>) {\n type TItem = NonNullable<ReturnType<TUseData<T>>['data']>[number];\n\n const id = useId();\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [searchDebounced] = useDebounce(search, 100, {\n maxWait: 200,\n });\n\n const { data } = useData(\n searchDebounced,\n initialParams,\n !open && !initialRequest\n );\n\n useEffect(() => {\n setOpen(forceToggle);\n }, [forceToggle]);\n\n const itemKey = fieldKey || fieldLabel;\n const isMultiple = type === 'multiple';\n\n const parser = isMultiple\n ? parseAsArrayOf(parseAsString).withDefault([])\n : parseAsString.withDefault(defaultValue ?? '');\n\n const [queryIds, setQueryIds] = useQueryState(\n name,\n parser.withOptions({\n clearOnDefault: true,\n shallow: false,\n ...options,\n })\n );\n\n const value =\n isMultiple && Array.isArray(queryIds)\n ? queryIds\n .map((id) => data?.find((item) => String(item[itemKey]) === id))\n .filter((item): item is TItem => !!item)\n : data?.find((item) => String(item[itemKey]) === queryIds) || null;\n\n const handleChange = (newValue: T | T[] | null | undefined) => {\n if (!newValue) {\n setQueryIds(isMultiple ? ([] as any) : null);\n } else if (isMultiple && Array.isArray(newValue)) {\n setQueryIds(newValue.map((item) => String(item[itemKey])) as any);\n } else {\n setQueryIds(String((newValue as T)[itemKey]) as any);\n }\n onChangeCallback?.(newValue as T | T[] | null);\n };\n\n return (\n <Selector\n {...props}\n fieldKey={fieldKey}\n fieldLabel={fieldLabel}\n id={`${id}-${name}`}\n items={data as TItem[]}\n name={name}\n onChange={handleChange}\n onSearch={setSearch}\n open={open}\n search={search}\n setOpen={setOpen}\n type={type}\n value={value as TItem}\n />\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-selector.js","names":["Command","CommandPrimitive","Command","id"],"sources":["../src/components/ui/badge.tsx","../src/components/ui/button.tsx","../src/components/ui/command.tsx","../src/components/ui/selector.tsx","../src/components/remote-selector/remote-selector.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n warning: 'border-transparent bg-warning text-warning-foreground',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost:\n 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n data-slot=\"button\"\n {...(props as any)}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport * as React from 'react';\n\nimport { SearchIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className\n )}\n data-slot=\"command\"\n {...props}\n />\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n data-slot=\"command-input-wrapper\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n data-slot=\"command-input\"\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n className={cn(\n 'max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto',\n className\n )}\n data-slot=\"command-list\"\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n className=\"py-6 text-center text-sm\"\n data-slot=\"command-empty\"\n {...props}\n />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className\n )}\n data-slot=\"command-group\"\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n className={cn('bg-border -mx-1 h-px', className)}\n data-slot=\"command-separator\"\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n data-slot=\"command-item\"\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'text-muted-foreground ml-auto text-xs tracking-widest',\n className\n )}\n data-slot=\"command-shortcut\"\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\n\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from './command';\nimport { InputHelp } from './input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { ScrollBar } from './scroll-area';\n\nexport type SelectorOption = {\n id: string | number;\n name: string;\n value?: any;\n children?: SelectorOption[];\n};\n\nexport type SelectorProps<T> = {\n type?: 'single' | 'multiple';\n value?: T | T[];\n onChange?: (item: T | T[] | undefined | null) => void;\n search?: string;\n onSearch?: (search: string) => void;\n placeholder?: string;\n empty?: React.ReactNode;\n items: T[];\n fieldLabel: keyof T;\n fieldKey?: keyof T;\n groupBy?: keyof T;\n disabled?: boolean;\n searchPlaceholder?: string;\n label?: string;\n name?: string;\n className?: string;\n required?: boolean;\n error?: React.ReactNode;\n selectFirstIsOne?: boolean;\n help?: string;\n extra?: string;\n extraOnClick?: (\n onChange?: (item: T | T[] | undefined | null) => void\n ) => Promise<void> | void;\n open?: boolean;\n setOpen?: (open: boolean) => void;\n maxVisibleBadges?: number;\n id?: string;\n} & PopoverProps;\n\ntype SelectorGroup<T> = {\n id: string;\n heading?: string;\n items: T[];\n};\n\nexport function Selector<T>({\n type = 'single',\n value,\n onChange,\n search,\n onSearch,\n items,\n label,\n placeholder,\n fieldLabel,\n fieldKey,\n groupBy,\n searchPlaceholder,\n name,\n empty = 'Nenhuma opção encontrada...',\n disabled = false,\n className,\n required,\n error,\n selectFirstIsOne,\n help,\n extra,\n extraOnClick,\n open,\n setOpen,\n maxVisibleBadges = 3,\n id,\n ...props\n}: SelectorProps<T>) {\n const itemKey = fieldKey || fieldLabel;\n\n const isMultiple = type === 'multiple';\n const selectedItems = isMultiple && Array.isArray(value) ? value : [];\n const singleValue = !isMultiple && !Array.isArray(value) ? value : undefined;\n\n const isItemSelected = (item: T): boolean => {\n if (isMultiple) {\n return selectedItems.some(\n (selected) => selected[itemKey] === item[itemKey]\n );\n }\n return singleValue?.[itemKey] === item[itemKey];\n };\n\n const handleItemSelect = (item: T) => {\n if (isMultiple) {\n const isSelected = isItemSelected(item);\n const newValue = isSelected\n ? selectedItems.filter(\n (selected) => selected[itemKey] !== item[itemKey]\n )\n : [...selectedItems, item];\n onChange?.(newValue.length > 0 ? newValue : null);\n } else {\n onChange?.(item);\n setOpen?.(false);\n }\n };\n\n useEffect(() => {\n if (selectFirstIsOne && items && items.length === 1 && !value) {\n onChange?.(items[0] as any);\n }\n }, [items]);\n\n const { selectedGroups, unselectedGroups } = useMemo(() => {\n if (!isMultiple || selectedItems.length === 0) {\n return {\n selectedGroups: [],\n unselectedGroups: buildGroups(items, groupBy),\n };\n }\n\n const unselectedItems = items.filter((item) => !isItemSelected(item));\n\n return {\n selectedGroups: selectedItems,\n unselectedGroups: buildGroups(unselectedItems, groupBy),\n };\n }, [groupBy, items, isMultiple, selectedItems]);\n\n return (\n <div\n className={cn('w-full flex flex-col gap-1', className)}\n id={id || `selector-${name}`}\n >\n {label && (\n <div className=\"flex items-end gap-1.5\">\n <label\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n htmlFor={id || name}\n >\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </label>\n\n <InputHelp help={help} name={name} />\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger asChild>\n <Button\n aria-expanded={open}\n aria-label=\"Carregando opções...\"\n className={cn(\n 'mt-0! justify-between w-full hover:bg-transparent cursor-pointer',\n !value && 'text-muted-foreground',\n error && 'border-destructive'\n )}\n disabled={disabled}\n id={id || name}\n role=\"combobox\"\n variant=\"outline\"\n >\n {isMultiple && selectedItems.length > 0 ? (\n <div className=\"flex gap-1 flex-1 min-w-0 overflow-hidden\">\n {selectedItems\n .slice(0, maxVisibleBadges)\n .map((item, index) => (\n <Badge\n className=\"truncate shrink min-w-0\"\n key={`badge-${item[itemKey]}-${index}`}\n variant=\"secondary\"\n >\n <span className=\"truncate block\">\n {item[fieldLabel] as string}\n </span>\n </Badge>\n ))}\n {selectedItems.length > maxVisibleBadges && (\n <Badge className=\"shrink-0\" variant=\"secondary\">\n +{selectedItems.length - maxVisibleBadges}\n </Badge>\n )}\n </div>\n ) : (\n <span className=\"truncate\">\n {!isMultiple && singleValue\n ? (singleValue[fieldLabel] as string)\n : placeholder || `Selecione a ${label?.toLowerCase()}`}\n </span>\n )}\n <div className=\"flex items-center shrink-0\">\n <div className=\"relative size-4\">\n {((isMultiple && selectedItems.length > 0) ||\n (!isMultiple && singleValue !== undefined)) && (\n <div\n className=\"absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onChange?.(null);\n }}\n >\n <X className=\"size-4\" />\n </div>\n )}\n </div>\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-(--radix-popover-trigger-width) max-w-2xl p-0\">\n <Command shouldFilter={false}>\n <CommandInput\n onValueChange={onSearch}\n placeholder={\n searchPlaceholder ||\n `Pesquise por uma ${label?.toLowerCase()}`\n }\n value={search}\n />\n <CommandList>\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px] relative\">\n <CommandEmpty className=\"text-sm p-3 text-foreground/60\">\n {empty}\n </CommandEmpty>\n {isMultiple && selectedGroups.length > 0 && (\n <CommandGroup heading=\"Selecionados\">\n {selectedGroups.map((item) => (\n <CommandItem\n className={cn(\n 'transition-all p-2 gap-2 my-1 first:mt-0 last:mb-0',\n 'bg-accent! text-accent-foreground'\n )}\n key={`item-selected-${item[itemKey]}`}\n onSelect={() => handleItemSelect(item)}\n value={String(item[itemKey])}\n >\n <div\n className={cn(\n 'size-4 shrink-0 border-2 rounded flex items-center justify-center transition-colors',\n 'bg-primary border-primary'\n )}\n >\n <Check className=\"size-2.5 text-primary-foreground\" />\n </div>\n {item[fieldLabel] as string}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n {unselectedGroups.length > 0 &&\n unselectedGroups.some(\n (group) => group.items.length > 0\n ) &&\n unselectedGroups.map((group) => (\n <CommandGroup\n heading={\n group.heading ||\n (group.id === UNDEFINED_GROUP_ID && 'Outros')\n }\n key={`group-${group.id}`}\n >\n {group.items.map((item) => (\n <CommandItem\n className={cn(\n 'transition-all p-2',\n isMultiple && 'gap-2',\n !isMultiple &&\n isItemSelected(item) &&\n 'bg-accent! text-accent-foreground'\n )}\n key={`item-${item[itemKey]}`}\n onSelect={() => handleItemSelect(item)}\n value={String(item[itemKey])}\n >\n {isMultiple && (\n <div className=\"size-4 shrink-0 border-2 rounded flex items-center justify-center transition-colors border-input\" />\n )}\n {item[fieldLabel] as string}\n {!isMultiple && isItemSelected(item) && (\n <Check className=\"ml-auto h-4 w-4\" />\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n {extra && (\n <CommandItem\n className={cn(\n 'transition-all p-2 sticky bottom-0 bg-white hover:!bg-accent aria-selected:!bg-accent'\n )}\n onSelect={() => {\n extraOnClick?.(onChange);\n setOpen?.(false);\n }}\n >\n {extra}\n </CommandItem>\n )}\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {error && error}\n </div>\n </div>\n );\n}\n\nconst DEFAULT_GROUP_ID = 'selector-default-group';\nconst UNDEFINED_GROUP_ID = 'selector-undefined-group';\n\nconst buildGroups = <T,>(items: T[], groupBy?: keyof T): SelectorGroup<T>[] => {\n if (!groupBy) return [{ id: DEFAULT_GROUP_ID, items }];\n\n return Object.values(\n items.reduce<Record<string, SelectorGroup<T>>>((acc, item) => {\n const rawValue = item[groupBy];\n const heading = rawValue == null ? undefined : String(rawValue);\n const groupId = heading ?? UNDEFINED_GROUP_ID;\n\n if (!acc[groupId]) {\n acc[groupId] = { id: groupId, heading, items: [] };\n }\n\n acc[groupId].items.push(item);\n return acc;\n }, {})\n );\n};\n","'use client';\n\nimport { useEffect, useId, useState } from 'react';\n\nimport {\n type FieldPath,\n type FieldPathValue,\n type FieldValues,\n type UseControllerProps,\n useFormContext,\n} from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\n\nimport { FormField, FormItem, FormMessage } from '@/components/ui/form';\nimport { Selector, type SelectorProps } from '../ui/selector';\n\nimport {\n type Options,\n parseAsArrayOf,\n parseAsString,\n useQueryState,\n} from 'nuqs';\n\nexport type TUseData<T> = (\n search?: string,\n initialParams?: any,\n disabled?: boolean\n) => {\n data: T[];\n};\n\nexport type BaseRemoteSelectorProps<T> = {\n useData: TUseData<T>;\n initialParams?: Parameters<TUseData<T>>[1];\n initialRequest?: boolean;\n forceToggle?: boolean;\n} & Omit<\n SelectorProps<T>,\n 'items' | 'value' | 'onChange' | 'search' | 'onSearch' | 'open' | 'setOpen'\n>;\n\nexport interface RemoteSelectorFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n disabled?: boolean;\n required?: boolean;\n defaultValue?: FieldPathValue<TFieldValues, TFieldName>;\n onChange?: (value: any) => Promise<void> | void;\n}\n\nexport function RemoteSelectorField<\n T,\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n className,\n required,\n defaultValue,\n onChange: onChangeCallback,\n useData,\n initialParams,\n initialRequest = false,\n forceToggle = false,\n ...props\n}: RemoteSelectorFieldProps<TFieldValues, TFieldName> &\n BaseRemoteSelectorProps<T>) {\n type TItem = NonNullable<ReturnType<TUseData<T>>['data']>[number];\n\n const { control } = useFormContext();\n const id = useId();\n\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [searchDebounced] = useDebounce(search, 100, {\n maxWait: 200,\n });\n\n const { data } = useData(\n searchDebounced,\n initialParams,\n !open && !initialRequest\n );\n\n useEffect(() => {\n setOpen(forceToggle);\n }, [forceToggle]);\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={className}>\n <Selector\n {...props}\n error={fieldState?.error && <FormMessage />}\n id={`${id}-${name.replaceAll('.', '-')}`}\n items={data as TItem[]}\n key={`selector-${field.name}-${field.value}`}\n name={name}\n onChange={(value: any) => {\n field.onChange(value as TItem);\n onChangeCallback?.(value as TItem);\n }}\n onSearch={setSearch}\n open={open}\n required={required}\n search={search}\n setOpen={setOpen}\n value={field.value as TItem}\n />\n </FormItem>\n )}\n rules={{\n required: required ? 'Campo obrigatório' : false,\n }}\n />\n );\n}\n\nexport interface RemoteSelectorQueryProps<T>\n extends BaseRemoteSelectorProps<T> {\n name: string;\n defaultValue?: string;\n options?: Options;\n onChange?: (value: T | T[] | null) => void;\n}\n\nexport function RemoteSelectorQuery<T>({\n name,\n defaultValue,\n options,\n useData,\n initialParams,\n initialRequest = false,\n forceToggle = false,\n onChange: onChangeCallback,\n fieldKey,\n fieldLabel,\n type = 'single',\n ...props\n}: RemoteSelectorQueryProps<T>) {\n type TItem = NonNullable<ReturnType<TUseData<T>>['data']>[number];\n\n const id = useId();\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [searchDebounced] = useDebounce(search, 100, {\n maxWait: 200,\n });\n\n const { data } = useData(\n searchDebounced,\n initialParams,\n !open && !initialRequest\n );\n\n useEffect(() => {\n setOpen(forceToggle);\n }, [forceToggle]);\n\n const itemKey = fieldKey || fieldLabel;\n const isMultiple = type === 'multiple';\n\n const parser = isMultiple\n ? parseAsArrayOf(parseAsString).withDefault([])\n : parseAsString.withDefault(defaultValue ?? '');\n\n const [queryIds, setQueryIds] = useQueryState(\n name,\n parser.withOptions({\n clearOnDefault: true,\n shallow: false,\n ...options,\n })\n );\n\n const value =\n isMultiple && Array.isArray(queryIds)\n ? queryIds\n .map((id) => data?.find((item) => String(item[itemKey]) === id))\n .filter((item): item is TItem => !!item)\n : data?.find((item) => String(item[itemKey]) === queryIds) || null;\n\n const handleChange = (newValue: T | T[] | null | undefined) => {\n if (!newValue) {\n setQueryIds(isMultiple ? ([] as any) : null);\n } else if (isMultiple && Array.isArray(newValue)) {\n setQueryIds(newValue.map((item) => String(item[itemKey])) as any);\n } else {\n setQueryIds(String((newValue as T)[itemKey]) as any);\n }\n onChangeCallback?.(newValue as T | T[] | null);\n };\n\n return (\n <Selector\n {...props}\n fieldKey={fieldKey}\n fieldLabel={fieldLabel}\n id={`${id}-${name}`}\n items={data as TItem[]}\n name={name}\n onChange={handleChange}\n onSearch={setSearch}\n open={open}\n search={search}\n setOpen={setOpen}\n type={type}\n value={value as TItem}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAKA,MAAM,gBAAgB,IACpB,4JACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,WACE;EACF,aACE;EACF,SAAS;EACT,SAAS;EACV,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAMD,SAAS,MAAM,EAAE,WAAW,QAAS,GAAG,SAAqB;AAC3D,QACE,oBAAC;EAAI,WAAW,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,UAAU;EAAE,GAAI;GAAS;;;;;ACzB5E,MAAM,iBAAiB,IACrB,+bACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SACE;GACF,WACE;GACF,OACE;GACF,MAAM;GACP;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAED,SAAS,OAAO,EACd,WACA,SACA,MACA,UAAU,MACV,GAAG,SAIA;AAGH,QACE,oBAHW,UAAU,OAAO;EAI1B,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;GAAW,CAAC,CAAC;EAC3D,aAAU;EACV,GAAK;GACL;;;;;AC7CN,SAASA,UAAQ,EACf,UACA,GAAG,SAC6C;AAChD,QACE,oBAACC;EACC,WAAW,GACT,6FACA,UACD;EACD,aAAU;EACV,GAAI;GACJ;;AAIN,SAAS,aAAa,EACpB,UACA,GAAG,SACmD;AACtD,QACE,qBAAC;EACC,WAAU;EACV,aAAU;aAEV,oBAAC,cAAW,WAAU,+BAA+B,EACrD,oBAACA,QAAiB;GAChB,WAAW,GACT,4JACA,UACD;GACD,aAAU;GACV,GAAI;IACJ;GACE;;AAIV,SAAS,YAAY,EACnB,UACA,GAAG,SACkD;AACrD,QACE,oBAACA,QAAiB;EAChB,WAAW,GACT,+DACA,UACD;EACD,aAAU;EACV,GAAI;GACJ;;AAIN,SAAS,aAAa,EACpB,GAAG,SACmD;AACtD,QACE,oBAACA,QAAiB;EAChB,WAAU;EACV,aAAU;EACV,GAAI;GACJ;;AAIN,SAAS,aAAa,EACpB,UACA,GAAG,SACmD;AACtD,QACE,oBAACA,QAAiB;EAChB,WAAW,GACT,0NACA,UACD;EACD,aAAU;EACV,GAAI;GACJ;;AAiBN,SAAS,YAAY,EACnB,UACA,GAAG,SACkD;AACrD,QACE,oBAACA,QAAiB;EAChB,WAAW,GACT,uYACA,UACD;EACD,aAAU;EACV,GAAI;GACJ;;;;;AChDN,SAAgB,SAAY,EAC1B,OAAO,UACP,OACA,UACA,QACA,UACA,OACA,OACA,aACA,YACA,UACA,SACA,mBACA,MACA,QAAQ,+BACR,WAAW,OACX,WACA,UACA,OACA,kBACA,MACA,OACA,cACA,MACA,SACA,mBAAmB,GACnB,GACA,GAAG,SACgB;CACnB,MAAM,UAAU,YAAY;CAE5B,MAAM,aAAa,SAAS;CAC5B,MAAM,gBAAgB,cAAc,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE;CACrE,MAAM,cAAc,CAAC,cAAc,CAAC,MAAM,QAAQ,MAAM,GAAG,QAAQ;CAEnE,MAAM,kBAAkB,SAAqB;AAC3C,MAAI,WACF,QAAO,cAAc,MAClB,aAAa,SAAS,aAAa,KAAK,SAC1C;AAEH,SAAO,cAAc,aAAa,KAAK;;CAGzC,MAAM,oBAAoB,SAAY;AACpC,MAAI,YAAY;GAEd,MAAM,WADa,eAAe,KAAK,GAEnC,cAAc,QACX,aAAa,SAAS,aAAa,KAAK,SAC1C,GACD,CAAC,GAAG,eAAe,KAAK;AAC5B,cAAW,SAAS,SAAS,IAAI,WAAW,KAAK;SAC5C;AACL,cAAW,KAAK;AAChB,aAAU,MAAM;;;AAIpB,iBAAgB;AACd,MAAI,oBAAoB,SAAS,MAAM,WAAW,KAAK,CAAC,MACtD,YAAW,MAAM,GAAU;IAE5B,CAAC,MAAM,CAAC;CAEX,MAAM,EAAE,gBAAgB,qBAAqB,cAAc;AACzD,MAAI,CAAC,cAAc,cAAc,WAAW,EAC1C,QAAO;GACL,gBAAgB,EAAE;GAClB,kBAAkB,YAAY,OAAO,QAAQ;GAC9C;EAGH,MAAM,kBAAkB,MAAM,QAAQ,SAAS,CAAC,eAAe,KAAK,CAAC;AAErE,SAAO;GACL,gBAAgB;GAChB,kBAAkB,YAAY,iBAAiB,QAAQ;GACxD;IACA;EAAC;EAAS;EAAO;EAAY;EAAc,CAAC;AAE/C,QACE,qBAAC;EACC,WAAW,GAAG,8BAA8B,UAAU;EACtD,IAAI,MAAM,YAAY;aAErB,SACC,qBAAC;GAAI,WAAU;cACb,qBAAC;IACC,WAAU;IACV,SAAS,MAAM;;KAEd;KAAM;KACN,YACC,oBAAC;MAAK,WAAU;gBAAqC;OAAQ;;KAEzD,EAER,oBAAC;IAAgB;IAAY;KAAQ;IACjC,EAER,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAQ,cAAc;IAAe;IAAM,GAAI;eAC9C,oBAAC;KAAe;eACd,qBAAC;MACC,iBAAe;MACf,cAAW;MACX,WAAW,GACT,oEACA,CAAC,SAAS,yBACV,SAAS,qBACV;MACS;MACV,IAAI,MAAM;MACV,MAAK;MACL,SAAQ;iBAEP,cAAc,cAAc,SAAS,IACpC,qBAAC;OAAI,WAAU;kBACZ,cACE,MAAM,GAAG,iBAAiB,CAC1B,KAAK,MAAM,UACV,oBAAC;QACC,WAAU;QAEV,SAAQ;kBAER,oBAAC;SAAK,WAAU;mBACb,KAAK;UACD;UALF,SAAS,KAAK,SAAS,GAAG,QAMzB,CACR,EACH,cAAc,SAAS,oBACtB,qBAAC;QAAM,WAAU;QAAW,SAAQ;mBAAY,KAC5C,cAAc,SAAS;SACnB;QAEN,GAEN,oBAAC;OAAK,WAAU;iBACb,CAAC,cAAc,cACX,YAAY,cACb,eAAe,eAAe,OAAO,aAAa;QACjD,EAET,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAI,WAAU;mBACV,cAAc,cAAc,SAAS,KACrC,CAAC,cAAc,gBAAgB,WAChC,oBAAC;SACC,WAAU;SACV,UAAU,MAAM;AACd,YAAE,gBAAgB;AAClB,YAAE,iBAAiB;AACnB,qBAAW,KAAK;;mBAGlB,oBAAC,KAAE,WAAU,WAAW;UACpB;SAEJ,EACN,oBAAC,kBAAe,WAAU,qCAAqC;QAC3D;OACC;MACM,EACjB,oBAAC;KAAe,WAAU;eACxB,qBAACC;MAAQ,cAAc;iBACrB,oBAAC;OACC,eAAe;OACf,aACE,qBACA,oBAAoB,OAAO,aAAa;OAE1C,OAAO;QACP,EACF,oBAAC,yBACC,qBAAC;OAAW,WAAU;OAAsB,IAAG;kBAC7C,qBAAC;QAAmB,WAAU;;SAC5B,oBAAC;UAAa,WAAU;oBACrB;WACY;SACd,cAAc,eAAe,SAAS,KACrC,oBAAC;UAAa,SAAQ;oBACnB,eAAe,KAAK,SACnB,qBAAC;WACC,WAAW,GACT,sDACA,oCACD;WAED,gBAAgB,iBAAiB,KAAK;WACtC,OAAO,OAAO,KAAK,SAAS;sBAE5B,oBAAC;YACC,WAAW,GACT,uFACA,4BACD;sBAED,oBAAC,SAAM,WAAU,qCAAqC;aAClD,EACL,KAAK;aAZD,iBAAiB,KAAK,WAaf,CACd;WACW;SAEhB,iBAAiB,SAAS,KACzB,iBAAiB,MACd,UAAU,MAAM,MAAM,SAAS,EACjC,IACD,iBAAiB,KAAK,UACpB,oBAAC;UACC,SACE,MAAM,WACL,MAAM,OAAO,sBAAsB;oBAIrC,MAAM,MAAM,KAAK,SAChB,qBAAC;WACC,WAAW,GACT,sBACA,cAAc,SACd,CAAC,cACC,eAAe,KAAK,IACpB,oCACH;WAED,gBAAgB,iBAAiB,KAAK;WACtC,OAAO,OAAO,KAAK,SAAS;;YAE3B,cACC,oBAAC,SAAI,WAAU,qGAAqG;YAErH,KAAK;YACL,CAAC,cAAc,eAAe,KAAK,IAClC,oBAAC,SAAM,WAAU,oBAAoB;;aATlC,QAAQ,KAAK,WAWN,CACd;YAvBG,SAAS,MAAM,KAwBP,CACf;SACH,SACC,oBAAC;UACC,WAAW,GACT,wFACD;UACD,gBAAgB;AACd,0BAAe,SAAS;AACxB,qBAAU,MAAM;;oBAGjB;WACW;;SAEG,EACrB,oBAAC,cAAY;QACF,GACD;OACN;MACK;KACT,EACT,SAAS;IACN;GACF;;AAIV,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,MAAM,eAAmB,OAAY,YAA0C;AAC7E,KAAI,CAAC,QAAS,QAAO,CAAC;EAAE,IAAI;EAAkB;EAAO,CAAC;AAEtD,QAAO,OAAO,OACZ,MAAM,QAA0C,KAAK,SAAS;EAC5D,MAAM,WAAW,KAAK;EACtB,MAAM,UAAU,YAAY,OAAO,SAAY,OAAO,SAAS;EAC/D,MAAM,UAAU,WAAW;AAE3B,MAAI,CAAC,IAAI,SACP,KAAI,WAAW;GAAE,IAAI;GAAS;GAAS,OAAO,EAAE;GAAE;AAGpD,MAAI,SAAS,MAAM,KAAK,KAAK;AAC7B,SAAO;IACN,EAAE,CAAC,CACP;;;;;AChTH,SAAgB,oBAId,EACA,MACA,WACA,UACA,cACA,UAAU,kBACV,SACA,eACA,iBAAiB,OACjB,cAAc,MACd,GAAG,SAEyB;CAG5B,MAAM,EAAE,YAAY,gBAAgB;CACpC,MAAM,KAAK,OAAO;CAElB,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,QAAQ,aAAa,SAAS,GAAG;CACxC,MAAM,CAAC,mBAAmB,YAAY,QAAQ,KAAK,EACjD,SAAS,KACV,CAAC;CAEF,MAAM,EAAE,SAAS,QACf,iBACA,eACA,CAAC,QAAQ,CAAC,eACX;AAED,iBAAgB;AACd,UAAQ,YAAY;IACnB,CAAC,YAAY,CAAC;AAEjB,QACE,oBAAC;EACU;EACK;EACR;EACN,SAAS,EAAE,OAAO,iBAChB,oBAAC;GAAoB;aACnB,8BAAC;IACC,GAAI;IACJ,OAAO,YAAY,SAAS,oBAAC,gBAAc;IAC3C,IAAI,GAAG,GAAG,GAAG,KAAK,WAAW,KAAK,IAAI;IACtC,OAAO;IACP,KAAK,YAAY,MAAM,KAAK,GAAG,MAAM;IAC/B;IACN,WAAW,UAAe;AACxB,WAAM,SAAS,MAAe;AAC9B,wBAAmB,MAAe;;IAEpC,UAAU;IACJ;IACI;IACF;IACC;IACT,OAAO,MAAM;KACb;IACO;EAEb,OAAO,EACL,UAAU,WAAW,sBAAsB,OAC5C;GACD;;AAYN,SAAgB,oBAAuB,EACrC,MACA,cACA,SACA,SACA,eACA,iBAAiB,OACjB,cAAc,OACd,UAAU,kBACV,UACA,YACA,OAAO,SACP,GAAG,SAC2B;CAG9B,MAAM,KAAK,OAAO;CAClB,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,QAAQ,aAAa,SAAS,GAAG;CACxC,MAAM,CAAC,mBAAmB,YAAY,QAAQ,KAAK,EACjD,SAAS,KACV,CAAC;CAEF,MAAM,EAAE,SAAS,QACf,iBACA,eACA,CAAC,QAAQ,CAAC,eACX;AAED,iBAAgB;AACd,UAAQ,YAAY;IACnB,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,YAAY;CAC5B,MAAM,aAAa,SAAS;CAE5B,MAAM,SAAS,aACX,eAAe,cAAc,CAAC,YAAY,EAAE,CAAC,GAC7C,cAAc,YAAY,gBAAgB,GAAG;CAEjD,MAAM,CAAC,UAAU,eAAe,cAC9B,MACA,OAAO,YAAY;EACjB,gBAAgB;EAChB,SAAS;EACT,GAAG;EACJ,CAAC,CACH;CAED,MAAM,QACJ,cAAc,MAAM,QAAQ,SAAS,GACjC,SACG,KAAK,SAAO,MAAM,MAAM,SAAS,OAAO,KAAK,SAAS,KAAKC,KAAG,CAAC,CAC/D,QAAQ,SAAwB,CAAC,CAAC,KAAK,GAC1C,MAAM,MAAM,SAAS,OAAO,KAAK,SAAS,KAAK,SAAS,IAAI;CAElE,MAAM,gBAAgB,aAAyC;AAC7D,MAAI,CAAC,SACH,aAAY,aAAc,EAAE,GAAW,KAAK;WACnC,cAAc,MAAM,QAAQ,SAAS,CAC9C,aAAY,SAAS,KAAK,SAAS,OAAO,KAAK,SAAS,CAAC,CAAQ;MAEjE,aAAY,OAAQ,SAAe,SAAS,CAAQ;AAEtD,qBAAmB,SAA2B;;AAGhD,QACE,oBAAC;EACC,GAAI;EACM;EACE;EACZ,IAAI,GAAG,GAAG,GAAG;EACb,OAAO;EACD;EACN,UAAU;EACV,UAAU;EACJ;EACE;EACC;EACH;EACC;GACP"}
|
package/dist/text-field.d.ts
CHANGED
|
@@ -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
|
|
3
|
+
import * as react_jsx_runtime3 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):
|
|
60
|
+
}: InputTextProps): react_jsx_runtime3.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'>):
|
|
78
|
+
}: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime3.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):
|
|
90
|
+
}: QueryTextFieldProps): react_jsx_runtime3.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):
|
|
100
|
+
}: CookieTextFieldProps): react_jsx_runtime3.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/dist/text-field.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { cn } from "./utils-C0f9Ma6r.js";
|
|
5
5
|
import { Label } from "./label-BqtcCyMj.js";
|
|
6
6
|
import { Input, withMask } from "./input-Cp3f1KmR.js";
|
|
7
|
-
import { FormItem, InputHelp } from "./input-help-
|
|
7
|
+
import { FormItem, InputHelp } from "./input-help-C_4FzHTq.js";
|
|
8
8
|
import { useController, useFormContext } from "react-hook-form";
|
|
9
9
|
import { useEffect, useId, useState } from "react";
|
|
10
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
package/dist/toggle-field.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React$1 from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime9 from "react/jsx-runtime";
|
|
3
3
|
import { Item, Root } from "@radix-ui/react-toggle-group";
|
|
4
4
|
import { VariantProps } from "class-variance-authority";
|
|
5
5
|
import * as class_variance_authority_types0 from "class-variance-authority/types";
|
|
@@ -23,7 +23,7 @@ declare function ToggleGroup({
|
|
|
23
23
|
transition,
|
|
24
24
|
activeClassName,
|
|
25
25
|
...props
|
|
26
|
-
}: ToggleGroupProps):
|
|
26
|
+
}: ToggleGroupProps): react_jsx_runtime9.JSX.Element;
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/components/toggle-field/ToggleField.d.ts
|
|
29
29
|
type ToggleOption = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maquinaweb-ui",
|
|
3
|
-
"version": "2.30.
|
|
3
|
+
"version": "2.30.4",
|
|
4
4
|
"description": "A minimal React component library",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"lint-staged": "^16.2.3",
|
|
110
110
|
"lucide-react": "^0.544.0",
|
|
111
111
|
"motion": "^12.23.22",
|
|
112
|
-
"next": "^
|
|
112
|
+
"next": "^16.0.6",
|
|
113
113
|
"nuqs": "^2.7.0",
|
|
114
114
|
"react": "^19.2.0",
|
|
115
115
|
"react-cosmos": "^7.0.0",
|