maquinaweb-ui 2.26.0 → 2.27.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_runtime0 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime5 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_runtime0.JSX.Element;
26
+ }: ContainerAnimationProps<T>) => react_jsx_runtime5.JSX.Element;
27
27
  //#endregion
28
28
  export { ContainerAnimation, type ContainerAnimationProps };
29
29
  //# sourceMappingURL=container-animation.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
2
2
  import { Dispatch, SetStateAction } from "react";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
4
4
  import { Mask, Options } from "use-mask-input";
5
5
  import { PopoverProps } from "@radix-ui/react-popover";
6
6
 
@@ -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): react_jsx_runtime0.JSX.Element;
68
+ }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime6.JSX.Element;
69
69
  //#endregion
70
70
  export { InputSuggest, type InputSuggestProps };
71
71
  //# sourceMappingURL=input-suggest.d.ts.map
@@ -1,5 +1,6 @@
1
- import { ControllerFieldState } from "react-hook-form";
2
- import * as react_jsx_runtime1 from "react/jsx-runtime";
1
+ import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
2
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
3
+ import { Options } from "nuqs";
3
4
  import { PopoverProps } from "@radix-ui/react-popover";
4
5
 
5
6
  //#region src/components/ui/selector.d.ts
@@ -19,10 +20,10 @@ type SelectorProps<T> = {
19
20
  disabled?: boolean;
20
21
  searchPlaceholder?: string;
21
22
  label?: string;
22
- name: string;
23
+ name?: string;
23
24
  className?: string;
24
25
  required?: boolean;
25
- fieldState?: ControllerFieldState;
26
+ error?: React.ReactNode;
26
27
  selectFirstIsOne?: boolean;
27
28
  help?: string;
28
29
  extra?: string;
@@ -30,25 +31,57 @@ type SelectorProps<T> = {
30
31
  open?: boolean;
31
32
  setOpen?: (open: boolean) => void;
32
33
  maxVisibleBadges?: number;
34
+ id?: string;
33
35
  } & PopoverProps;
34
36
  //#endregion
35
37
  //#region src/components/remote-selector/remote-selector.d.ts
36
38
  type TUseData<T> = (search?: string, initialParams?: any, disabled?: boolean) => {
37
39
  data: T[];
38
40
  };
39
- type RemoteSelectorProps<T> = {
41
+ type BaseRemoteSelectorProps<T> = {
40
42
  useData: TUseData<T>;
41
43
  initialParams?: Parameters<TUseData<T>>[1];
42
44
  initialRequest?: boolean;
43
45
  forceToggle?: boolean;
44
- } & Omit<SelectorProps<T>, 'items'>;
45
- declare function RemoteSelector<T>({
46
+ } & Omit<SelectorProps<T>, 'items' | 'value' | 'onChange' | 'search' | 'onSearch' | 'open' | 'setOpen'>;
47
+ interface RemoteSelectorFieldProps<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends UseControllerProps<TFieldValues, TFieldName> {
48
+ disabled?: boolean;
49
+ required?: boolean;
50
+ defaultValue?: FieldPathValue<TFieldValues, TFieldName>;
51
+ onChange?: (value: any) => Promise<void> | void;
52
+ }
53
+ declare function RemoteSelectorField<T, TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({
54
+ name,
55
+ className,
56
+ required,
57
+ defaultValue,
58
+ onChange: onChangeCallback,
59
+ useData,
60
+ initialParams,
61
+ initialRequest,
62
+ forceToggle,
63
+ ...props
64
+ }: RemoteSelectorFieldProps<TFieldValues, TFieldName> & BaseRemoteSelectorProps<T>): react_jsx_runtime3.JSX.Element;
65
+ interface RemoteSelectorQueryProps<T> extends BaseRemoteSelectorProps<T> {
66
+ name: string;
67
+ defaultValue?: string;
68
+ options?: Options;
69
+ onChange?: (value: T | T[] | null) => void;
70
+ }
71
+ declare function RemoteSelectorQuery<T>({
72
+ name,
73
+ defaultValue,
74
+ options,
46
75
  useData,
47
76
  initialParams,
48
77
  initialRequest,
49
78
  forceToggle,
79
+ onChange: onChangeCallback,
80
+ fieldKey,
81
+ fieldLabel,
82
+ type,
50
83
  ...props
51
- }: RemoteSelectorProps<T>): react_jsx_runtime1.JSX.Element;
84
+ }: RemoteSelectorQueryProps<T>): react_jsx_runtime3.JSX.Element;
52
85
  //#endregion
53
- export { RemoteSelector, type RemoteSelectorProps, type TUseData };
86
+ export { type BaseRemoteSelectorProps, RemoteSelectorField as RemoteSelector, RemoteSelectorField, type RemoteSelectorFieldProps, RemoteSelectorQuery, type RemoteSelectorQueryProps, type TUseData };
54
87
  //# sourceMappingURL=remote-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-selector.d.ts","names":[],"sources":["../src/components/ui/selector.tsx","../src/components/remote-selector/remote-selector.tsx"],"sourcesContent":[],"mappings":";;;;;;AAoCc,KAFF,aAEE,CAAA,CAAA,CAAA,GAAA;MACM,CAAA,EAAA,QAAA,GAAA,UAAA;OAAI,CAAA,EADd,CACc,GADV,CACU,EAAA;UAId,CAAM,EAAA,CAAA,IAAA,EAJI,CAIJ,GAJQ,CAIR,EAAA,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,IAAA;QACP,CAAA,EAAA,MAAA;UACW,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,GAAA,IAAA;aACD,CAAA,EAAA,MAAA;OACD,CAAA,EAJR,KAAA,CAAM,SAIE;OAOH,EAVN,CAUM,EAAA;YAKO,EAAA,MAdF,CAcE;UAAI,CAAA,EAAA,MAbP,CAaO;SACnB,CAAA,EAAA,MAbW,CAaX;UAIH,CAAA,EAAA,OAAA;EAAY,iBAAA,CAAA,EAAA,MAAA;;;;ECrDJ,QAAA,CAAA,EAAQ,OAAA;EAQR,UAAA,CAAA,EDmCG,oBCnCgB;EAAA,gBAAA,CAAA,EAAA,OAAA;MACX,CAAA,EAAA,MAAA;OAAT,CAAA,EAAA,MAAA;cAC2B,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,IAAA,EDsChB,CCtCgB,GDsCZ,CCtCY,EAAA,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,IAAA,EAAA,GDuC/B,OCvC+B,CAAA,IAAA,CAAA,GAAA,IAAA;MAAT,CAAA,EAAA,OAAA;SAAX,CAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,GAAA,IAAA;kBAGK,CAAA,EAAA,MAAA;IDwCnB,YCxCK;;;KAbG;QAKJ;;KAGI;EDiBA,OAAA,EChBD,QDgBc,CChBL,CDgBK,CAAA;EAAA,aAAA,CAAA,ECfP,UDeO,CCfI,QDeJ,CCfa,CDeb,CAAA,CAAA,CAAA,CAAA,CAAA;gBAEf,CAAA,EAAA,OAAA;aAAI,CAAA,EAAA,OAAA;ICdV,IDegB,CCfX,aDeW,CCfG,CDeH,CAAA,EAAA,OAAA,CAAA;AAAI,iBCbR,cDaQ,CAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,aAAA;EAAA,cAAA;EAAA,WAAA;EAAA,GAAA;AAAA,CAAA,ECPrB,mBDOqB,CCPD,CDOC,CAAA,CAAA,ECPC,kBAAA,CAAA,GAAA,CAAA,ODOD"}
1
+ {"version":3,"file":"remote-selector.d.ts","names":[],"sources":["../src/components/ui/selector.tsx","../src/components/remote-selector/remote-selector.tsx"],"sourcesContent":[],"mappings":"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"}
@@ -3,14 +3,15 @@
3
3
 
4
4
  import { cn } from "./utils-C0f9Ma6r.js";
5
5
  import "./label-BqtcCyMj.js";
6
- import { FormItem, FormLabel, FormMessage, InputHelp } from "./input-help-C9Himejv.js";
6
+ import { FormField, FormItem, FormMessage, InputHelp } from "./input-help-C9Himejv.js";
7
7
  import { Popover, PopoverContent, PopoverTrigger, ScrollBar } from "./scroll-area-C2WadzN5.js";
8
- import { useController, useFormContext } from "react-hook-form";
9
- import { createElement, useEffect, useMemo, useState } from "react";
8
+ import { useFormContext } from "react-hook-form";
9
+ import { createElement, useEffect, useId, useMemo, useState } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
11
  import { Check, ChevronsUpDown, SearchIcon, X } from "lucide-react";
12
12
  import { cva } from "class-variance-authority";
13
13
  import { Slot } from "@radix-ui/react-slot";
14
+ import { parseAsArrayOf, parseAsString, useQueryState } from "nuqs";
14
15
  import { useDebounce } from "use-debounce";
15
16
  import { ScrollArea, ScrollAreaViewport } from "@radix-ui/react-scroll-area";
16
17
  import { Command } from "cmdk";
@@ -120,7 +121,7 @@ function CommandItem({ className,...props }) {
120
121
 
121
122
  //#endregion
122
123
  //#region src/components/ui/selector.tsx
123
- function Selector({ type = "single", value, onChange, search, onSearch, items, label, placeholder, fieldLabel, fieldKey, groupBy, searchPlaceholder, name, empty = "Nenhuma opção encontrada...", disabled = false, className, required, fieldState, selectFirstIsOne, help, extra, extraOnClick, open, setOpen, maxVisibleBadges = 3,...props }) {
124
+ function Selector({ type = "single", value, onChange, search, onSearch, items, label, placeholder, fieldLabel, fieldKey, groupBy, searchPlaceholder, name, empty = "Nenhuma opção encontrada...", disabled = false, className, required, error, selectFirstIsOne, help, extra, extraOnClick, open, setOpen, maxVisibleBadges = 3, id,...props }) {
124
125
  const itemKey = fieldKey || fieldLabel;
125
126
  const isMultiple = type === "multiple";
126
127
  const selectedItems = isMultiple && Array.isArray(value) ? value : [];
@@ -157,13 +158,14 @@ function Selector({ type = "single", value, onChange, search, onSearch, items, l
157
158
  isMultiple,
158
159
  selectedItems
159
160
  ]);
160
- return /* @__PURE__ */ jsxs(FormItem, {
161
- className: cn("w-full", className),
162
- id: `selector-${name}`,
163
- children: [/* @__PURE__ */ jsxs("div", {
161
+ return /* @__PURE__ */ jsxs("div", {
162
+ className: cn("w-full flex flex-col gap-1", className),
163
+ id: id || `selector-${name}`,
164
+ children: [label && /* @__PURE__ */ jsxs("div", {
164
165
  className: "flex items-end gap-1.5",
165
- children: [/* @__PURE__ */ jsxs(FormLabel, {
166
- htmlFor: name,
166
+ children: [/* @__PURE__ */ jsxs("label", {
167
+ className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
168
+ htmlFor: id || name,
167
169
  children: [
168
170
  label,
169
171
  ":",
@@ -176,19 +178,20 @@ function Selector({ type = "single", value, onChange, search, onSearch, items, l
176
178
  help,
177
179
  name
178
180
  })]
179
- }), /* @__PURE__ */ jsxs(Popover, {
180
- onOpenChange: setOpen,
181
- open,
182
- ...props,
183
- children: [
184
- /* @__PURE__ */ jsx(PopoverTrigger, {
181
+ }), /* @__PURE__ */ jsxs("div", {
182
+ className: "flex flex-col gap-1",
183
+ children: [/* @__PURE__ */ jsxs(Popover, {
184
+ onOpenChange: setOpen,
185
+ open,
186
+ ...props,
187
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
185
188
  asChild: true,
186
189
  children: /* @__PURE__ */ jsxs(Button, {
187
190
  "aria-expanded": open,
188
191
  "aria-label": "Carregando opções...",
189
- className: cn("mt-0! justify-between w-full h-10! hover:bg-transparent cursor-pointer", !value && "text-muted-foreground", fieldState?.error && "border-destructive"),
192
+ className: cn("mt-0! justify-between w-full h-10! hover:bg-transparent cursor-pointer", !value && "text-muted-foreground", error && "border-destructive"),
190
193
  disabled,
191
- id: name,
194
+ id: id || name,
192
195
  role: "combobox",
193
196
  variant: "outline",
194
197
  children: [isMultiple && selectedItems.length > 0 ? /* @__PURE__ */ jsxs("div", {
@@ -224,9 +227,7 @@ function Selector({ type = "single", value, onChange, search, onSearch, items, l
224
227
  }), /* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })]
225
228
  })]
226
229
  })
227
- }),
228
- fieldState?.error && /* @__PURE__ */ jsx(FormMessage, {}),
229
- /* @__PURE__ */ jsx(PopoverContent, {
230
+ }), /* @__PURE__ */ jsx(PopoverContent, {
230
231
  className: "w-(--radix-popover-trigger-width) max-w-2xl p-0",
231
232
  children: /* @__PURE__ */ jsxs(Command$1, {
232
233
  shouldFilter: false,
@@ -281,8 +282,8 @@ function Selector({ type = "single", value, onChange, search, onSearch, items, l
281
282
  }), /* @__PURE__ */ jsx(ScrollBar, {})]
282
283
  }) })]
283
284
  })
284
- })
285
- ]
285
+ })]
286
+ }), error && error]
286
287
  })]
287
288
  });
288
289
  }
@@ -309,12 +310,46 @@ const buildGroups = (items, groupBy) => {
309
310
 
310
311
  //#endregion
311
312
  //#region src/components/remote-selector/remote-selector.tsx
312
- function RemoteSelector({ useData, initialParams, initialRequest = false, forceToggle = false,...props }) {
313
+ function RemoteSelectorField({ name, className, required, defaultValue, onChange: onChangeCallback, useData, initialParams, initialRequest = false, forceToggle = false,...props }) {
313
314
  const { control } = useFormContext();
314
- const { field, fieldState } = useController({
315
+ const id = useId();
316
+ const [open, setOpen] = useState(false);
317
+ const [search, setSearch] = useState("");
318
+ const [searchDebounced] = useDebounce(search, 100, { maxWait: 200 });
319
+ const { data } = useData(searchDebounced, initialParams, !open && !initialRequest);
320
+ useEffect(() => {
321
+ setOpen(forceToggle);
322
+ }, [forceToggle]);
323
+ return /* @__PURE__ */ jsx(FormField, {
315
324
  control,
316
- name: props.name
325
+ defaultValue,
326
+ name,
327
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsx(FormItem, {
328
+ className,
329
+ children: /* @__PURE__ */ createElement(Selector, {
330
+ ...props,
331
+ error: fieldState?.error && /* @__PURE__ */ jsx(FormMessage, {}),
332
+ id: `${id}-${name.replaceAll(".", "-")}`,
333
+ items: data,
334
+ key: `selector-${field.name}-${field.value}`,
335
+ name,
336
+ onChange: (value) => {
337
+ field.onChange(value);
338
+ onChangeCallback?.(value);
339
+ },
340
+ onSearch: setSearch,
341
+ open,
342
+ required,
343
+ search,
344
+ setOpen,
345
+ value: field.value
346
+ })
347
+ }),
348
+ rules: { required: required ? "Campo obrigatório" : false }
317
349
  });
350
+ }
351
+ function RemoteSelectorQuery({ name, defaultValue, options, useData, initialParams, initialRequest = false, forceToggle = false, onChange: onChangeCallback, fieldKey, fieldLabel, type = "single",...props }) {
352
+ const id = useId();
318
353
  const [open, setOpen] = useState(false);
319
354
  const [search, setSearch] = useState("");
320
355
  const [searchDebounced] = useDebounce(search, 100, { maxWait: 200 });
@@ -322,22 +357,38 @@ function RemoteSelector({ useData, initialParams, initialRequest = false, forceT
322
357
  useEffect(() => {
323
358
  setOpen(forceToggle);
324
359
  }, [forceToggle]);
325
- return /* @__PURE__ */ createElement(Selector, {
360
+ const itemKey = fieldKey || fieldLabel;
361
+ const isMultiple = type === "multiple";
362
+ const parser = isMultiple ? parseAsArrayOf(parseAsString).withDefault([]) : parseAsString.withDefault(defaultValue ?? "");
363
+ const [queryIds, setQueryIds] = useQueryState(name, parser.withOptions({
364
+ clearOnDefault: true,
365
+ shallow: false,
366
+ ...options
367
+ }));
368
+ const value = isMultiple && Array.isArray(queryIds) ? queryIds.map((id$1) => data?.find((item) => String(item[itemKey]) === id$1)).filter((item) => !!item) : data?.find((item) => String(item[itemKey]) === queryIds) || null;
369
+ const handleChange = (newValue) => {
370
+ if (!newValue) setQueryIds(isMultiple ? [] : null);
371
+ else if (isMultiple && Array.isArray(newValue)) setQueryIds(newValue.map((item) => String(item[itemKey])));
372
+ else setQueryIds(String(newValue[itemKey]));
373
+ onChangeCallback?.(newValue);
374
+ };
375
+ return /* @__PURE__ */ jsx(Selector, {
326
376
  ...props,
327
- fieldState,
377
+ fieldKey,
378
+ fieldLabel,
379
+ id: `${id}-${name}`,
328
380
  items: data,
329
- key: `selector-${field.name}-${field.value}`,
330
- onChange: (value) => {
331
- field.onChange(value);
332
- },
381
+ name,
382
+ onChange: handleChange,
333
383
  onSearch: setSearch,
334
384
  open,
335
385
  search,
336
386
  setOpen,
337
- value: field.value
387
+ type,
388
+ value
338
389
  });
339
390
  }
340
391
 
341
392
  //#endregion
342
- export { RemoteSelector };
393
+ export { RemoteSelectorField as RemoteSelector, RemoteSelectorField, RemoteSelectorQuery };
343
394
  //# sourceMappingURL=remote-selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-selector.js","names":["Command","CommandPrimitive","Command"],"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 { ControllerFieldState } from 'react-hook-form';\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 { FormItem, FormLabel, FormMessage } from './form';\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 fieldState?: ControllerFieldState;\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} & 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 fieldState,\n selectFirstIsOne,\n help,\n extra,\n extraOnClick,\n open,\n setOpen,\n maxVisibleBadges = 3,\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: buildGroups(selectedItems, groupBy),\n unselectedGroups: buildGroups(unselectedItems, groupBy),\n };\n }, [groupBy, items, isMultiple, selectedItems]);\n\n return (\n <FormItem className={cn('w-full', className)} id={`selector-${name}`}>\n <div className=\"flex items-end gap-1.5\">\n <FormLabel htmlFor={name}>\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </FormLabel>\n\n <InputHelp help={help} name={name} />\n </div>\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 h-10! hover:bg-transparent cursor-pointer',\n !value && 'text-muted-foreground',\n fieldState?.error && 'border-destructive'\n )}\n disabled={disabled}\n 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.slice(0, maxVisibleBadges).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 {fieldState?.error && <FormMessage />}\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 || `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 &&\n selectedGroups.map((group) => (\n <CommandGroup\n heading=\"Selecionados\"\n key={`group-selected-${group.id}`}\n >\n {group.items.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 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 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 </FormItem>\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, useState } from 'react';\n\nimport { useController, useFormContext } from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\n\nimport { Selector, SelectorProps } from '../ui/selector';\n\nexport type TUseData<T> = (\n search?: string,\n initialParams?: any,\n disabled?: boolean\n) => {\n data: T[];\n};\n\nexport type RemoteSelectorProps<T> = {\n useData: TUseData<T>;\n initialParams?: Parameters<TUseData<T>>[1];\n initialRequest?: boolean;\n forceToggle?: boolean;\n} & Omit<SelectorProps<T>, 'items'>;\n\nexport function RemoteSelector<T>({\n useData,\n initialParams,\n initialRequest = false,\n forceToggle = false,\n ...props\n}: RemoteSelectorProps<T>) {\n type TItem = NonNullable<ReturnType<TUseData<T>>['data']>[number];\n\n const { control } = useFormContext();\n const { field, fieldState } = useController({\n control,\n name: props.name,\n });\n\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [searchDebounced] = useDebounce(search, 100, {\n maxWait: 200,\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 <Selector\n {...props}\n fieldState={fieldState}\n items={data as TItem[]}\n key={`selector-${field.name}-${field.value}`}\n onChange={(value: any) => {\n field.onChange(value as TItem);\n }}\n onSearch={setSearch}\n open={open}\n search={search}\n setOpen={setOpen}\n value={field.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: buildGroups(selectedItems, groupBy),\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 h-10! 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 &&\n selectedGroups.map((group) => (\n <CommandGroup\n heading=\"Selecionados\"\n key={`group-selected-${group.id}`}\n >\n {group.items.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 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 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,5 +1,5 @@
1
1
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
2
- import * as react_jsx_runtime2 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
  import { Options } from "use-mask-input";
4
4
  import { Options as Options$1 } from "nuqs";
5
5
 
@@ -55,7 +55,7 @@ declare function InputText({
55
55
  name,
56
56
  onChange,
57
57
  ...props
58
- }: InputTextProps): react_jsx_runtime2.JSX.Element;
58
+ }: InputTextProps): react_jsx_runtime0.JSX.Element;
59
59
  interface TextFieldProps<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends UseControllerProps<TFieldValues, TFieldName> {
60
60
  disabled?: boolean;
61
61
  required?: boolean;
@@ -73,7 +73,7 @@ declare function TextField<TFieldValues extends FieldValues = FieldValues, TFiel
73
73
  transform,
74
74
  prefix,
75
75
  ...props
76
- }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime2.JSX.Element;
76
+ }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime0.JSX.Element;
77
77
  interface QueryTextFieldProps extends Omit<InputTextProps, 'onChange'> {
78
78
  name: string;
79
79
  defaultValue?: string;
@@ -85,7 +85,7 @@ declare function QueryTextField({
85
85
  defaultValue,
86
86
  options,
87
87
  ...props
88
- }: QueryTextFieldProps): react_jsx_runtime2.JSX.Element;
88
+ }: QueryTextFieldProps): react_jsx_runtime0.JSX.Element;
89
89
  interface CookieTextFieldProps extends InputTextProps {
90
90
  name: string;
91
91
  maxAge?: number;
@@ -94,7 +94,7 @@ declare function CookieTextField({
94
94
  name,
95
95
  maxAge,
96
96
  ...inputProps
97
- }: CookieTextFieldProps): react_jsx_runtime2.JSX.Element;
97
+ }: CookieTextFieldProps): react_jsx_runtime0.JSX.Element;
98
98
  //#endregion
99
99
  export { CookieTextField, type CookieTextFieldProps, InputText, type InputTextProps, QueryTextField, type QueryTextFieldProps, TextField, type TextFieldProps };
100
100
  //# sourceMappingURL=text-field.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime7 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime8 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): react_jsx_runtime7.JSX.Element;
26
+ }: ToggleGroupProps): react_jsx_runtime8.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.26.0",
3
+ "version": "2.27.0",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,