@mlw-packages/react-components 1.10.16 → 1.10.18
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/index.css +244 -3
- package/dist/index.d.mts +109 -5
- package/dist/index.d.ts +109 -5
- package/dist/index.js +902 -182
- package/dist/index.mjs +891 -184
- package/package.json +3 -2
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
import * as React32 from 'react';
|
|
3
|
-
import React32__default, { forwardRef, useState, useEffect, createContext, useRef, useCallback, useMemo, useId, useContext, useLayoutEffect } from 'react';
|
|
3
|
+
import React32__default, { forwardRef, useState, useEffect, createContext, useRef, useCallback, memo, useMemo, useId, useContext, useLayoutEffect } from 'react';
|
|
4
4
|
import { Slot } from '@radix-ui/react-slot';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
6
6
|
import { clsx } from 'clsx';
|
|
7
7
|
import { twMerge } from 'tailwind-merge';
|
|
8
|
-
import { XIcon, CircleNotchIcon, MagnifyingGlassIcon, CaretUpIcon, CaretDownIcon, CheckIcon, CaretRightIcon, CircleIcon, CloudArrowUpIcon, MinusIcon, CaretUpDownIcon, PencilSimpleIcon, ArrowsLeftRightIcon, FloppyDiskIcon, PlusIcon, TrashIcon, SidebarSimpleIcon, FilePdfIcon, FileDocIcon, FileXlsIcon, FilePptIcon, FileCsvIcon, FileTextIcon, FileImageIcon, FileVideoIcon, FileAudioIcon, FileZipIcon, FileIcon, DotsSixVerticalIcon, CopyIcon, InfoIcon, WarningIcon, XCircleIcon, CheckCircleIcon, SunIcon, MoonIcon, CaretLeftIcon, DownloadSimpleIcon, UploadSimpleIcon, ArrowClockwiseIcon, ArrowLeftIcon, GearIcon, BellIcon, DotsThreeIcon, FunnelIcon, HeartIcon, StarIcon, EyeIcon, EyeSlashIcon, LockIcon, LockOpenIcon, FolderIcon, ArrowRightIcon as ArrowRightIcon$1, ArrowsOutIcon, DownloadIcon, CalendarBlankIcon, CalendarIcon, MapPinIcon, CalendarDotsIcon, ClockIcon, AlignLeftIcon, CaretLeft, CaretRight, ArrowDownIcon, ClockUserIcon, EyeSlash, Eye, ArrowUpRightIcon, ArrowDownRightIcon, FunnelSimpleIcon, PencilIcon, FileArchiveIcon, TerminalIcon, CodeIcon, CalendarDotIcon as CalendarDotIcon$1, DesktopIcon } from '@phosphor-icons/react';
|
|
8
|
+
import { XIcon, CircleNotchIcon, MagnifyingGlassIcon, CaretUpIcon, CaretDownIcon, CheckIcon, CaretRightIcon, CircleIcon, CloudArrowUpIcon, MinusIcon, CaretUpDownIcon, PencilSimpleIcon, ArrowsLeftRightIcon, FloppyDiskIcon, PlusIcon, TrashIcon, SidebarSimpleIcon, ArrowElbowDownRightIcon, ArrowBendUpLeftIcon, CommandIcon, FilePdfIcon, FileDocIcon, FileXlsIcon, FilePptIcon, FileCsvIcon, FileTextIcon, FileImageIcon, FileVideoIcon, FileAudioIcon, FileZipIcon, FileIcon, DotsSixVerticalIcon, CopyIcon, InfoIcon, WarningIcon, XCircleIcon, CheckCircleIcon, SunIcon, MoonIcon, CaretLeftIcon, DownloadSimpleIcon, UploadSimpleIcon, ArrowClockwiseIcon, ArrowLeftIcon, GearIcon, BellIcon, DotsThreeIcon, FunnelIcon, HeartIcon, StarIcon, EyeIcon, EyeSlashIcon, LockIcon, LockOpenIcon, FolderIcon, ArrowRightIcon as ArrowRightIcon$1, ArrowsOutIcon, DownloadIcon, CalendarBlankIcon, CalendarIcon, MapPinIcon, CalendarDotsIcon, ClockIcon, AlignLeftIcon, CaretLeft, CaretRight, ArrowDownIcon, ClockUserIcon, EyeSlash, Eye, ArrowUpRightIcon, ArrowDownRightIcon, FunnelSimpleIcon, PencilIcon, ClockCounterClockwiseIcon, FileArchiveIcon, TerminalIcon, CodeIcon, CalendarDotIcon as CalendarDotIcon$1, DesktopIcon } from '@phosphor-icons/react';
|
|
9
9
|
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
10
10
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
11
11
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
@@ -37,12 +37,12 @@ import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
|
37
37
|
import { Prism } from 'react-syntax-highlighter';
|
|
38
38
|
import { format, startOfMonth, endOfMonth, eachDayOfInterval, isToday, isSameDay, differenceInCalendarDays, differenceInMinutes, isPast, startOfDay, eachHourOfInterval, addHours, getHours, getMinutes, areIntervalsOverlapping, startOfWeek, endOfWeek, isSameMonth, addDays, startOfYear, endOfYear, eachMonthOfInterval, differenceInDays, isBefore, addMinutes, subMonths, subWeeks, subYears, addMonths, addWeeks, addYears, isWithinInterval, add, max, min } from 'date-fns';
|
|
39
39
|
import { ptBR } from 'date-fns/locale';
|
|
40
|
-
import ptBR3 from 'date-fns/locale/pt-BR';
|
|
41
40
|
import { useSensors, useSensor, MouseSensor, TouchSensor, PointerSensor, DndContext, DragOverlay, useDroppable, useDraggable } from '@dnd-kit/core';
|
|
42
41
|
import { CSS } from '@dnd-kit/utilities';
|
|
43
42
|
import { RadioGroup, RadioGroupItem } from '@radix-ui/react-radio-group';
|
|
44
43
|
import { ResponsiveContainer, ComposedChart, XAxis, YAxis, Bar, Line, Area, CartesianGrid, Tooltip, Legend, LabelList, Rectangle } from 'recharts';
|
|
45
44
|
import useEmblaCarousel from 'embla-carousel-react';
|
|
45
|
+
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
46
46
|
|
|
47
47
|
var __create = Object.create;
|
|
48
48
|
var __defProp = Object.defineProperty;
|
|
@@ -2513,7 +2513,7 @@ function Combobox({
|
|
|
2513
2513
|
] });
|
|
2514
2514
|
}
|
|
2515
2515
|
var badgeVariants = cva(
|
|
2516
|
-
"inline-flex items-center justify-center rounded-md border text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-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 transition-[color,box-shadow] overflow-hidden",
|
|
2516
|
+
"inline-flex items-center justify-center rounded-md border text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-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 transition-[color,box-shadow] overflow-hidden border-border",
|
|
2517
2517
|
{
|
|
2518
2518
|
variants: {
|
|
2519
2519
|
size: {
|
|
@@ -2530,6 +2530,7 @@ var badgeVariants = cva(
|
|
|
2530
2530
|
function Badge({
|
|
2531
2531
|
className,
|
|
2532
2532
|
color,
|
|
2533
|
+
rank,
|
|
2533
2534
|
size = "md",
|
|
2534
2535
|
asChild = false,
|
|
2535
2536
|
children,
|
|
@@ -2546,6 +2547,12 @@ function Badge({
|
|
|
2546
2547
|
blue: "bg-blue-50 text-blue-500 border-blue-200",
|
|
2547
2548
|
purple: "bg-purple-50 text-purple-500 border-purple-200"
|
|
2548
2549
|
};
|
|
2550
|
+
const rankClasses = {
|
|
2551
|
+
diamond: "bg-cyan-100 text-cyan-600 border-cyan-300",
|
|
2552
|
+
gold: "bg-yellow-100 text-yellow-500 border-yellow-300",
|
|
2553
|
+
silver: "bg-gray-100 text-gray-500 border-gray-300",
|
|
2554
|
+
bronze: "bg-orange-100 text-orange-700 border-orange-300"
|
|
2555
|
+
};
|
|
2549
2556
|
return /* @__PURE__ */ jsx(
|
|
2550
2557
|
Comp,
|
|
2551
2558
|
{
|
|
@@ -2553,6 +2560,7 @@ function Badge({
|
|
|
2553
2560
|
className: cn(
|
|
2554
2561
|
badgeVariants({ size }),
|
|
2555
2562
|
color ? colorClasses[color] : void 0,
|
|
2563
|
+
rank ? rankClasses[rank] : void 0,
|
|
2556
2564
|
className
|
|
2557
2565
|
),
|
|
2558
2566
|
style: customStyle,
|
|
@@ -7816,7 +7824,8 @@ function DateTimePicker({
|
|
|
7816
7824
|
disabled,
|
|
7817
7825
|
className,
|
|
7818
7826
|
error,
|
|
7819
|
-
hideClear = true
|
|
7827
|
+
hideClear = true,
|
|
7828
|
+
triggerIcon
|
|
7820
7829
|
}) {
|
|
7821
7830
|
const [internalDate, setInternalDate] = useState(date);
|
|
7822
7831
|
const [open, setOpen] = useState(false);
|
|
@@ -7866,193 +7875,222 @@ function DateTimePicker({
|
|
|
7866
7875
|
const { ref: contentRef, center } = use_auto_center_default(open);
|
|
7867
7876
|
const basePopoverClass = "w-auto max-w-[calc(100vw-16px)] p-0 border-none shadow-none";
|
|
7868
7877
|
const centeredPopoverClass = "w-auto max-w-[calc(100vw-16px)] p-0 border-none shadow-none fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50";
|
|
7869
|
-
const renderTriggerButton = () =>
|
|
7870
|
-
|
|
7871
|
-
|
|
7872
|
-
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
|
|
7877
|
-
|
|
7878
|
-
|
|
7879
|
-
|
|
7880
|
-
|
|
7881
|
-
hideClear && (date || internalDate) && /* @__PURE__ */ jsx(
|
|
7882
|
-
ClearButton,
|
|
7883
|
-
{
|
|
7884
|
-
onClick: (e) => {
|
|
7885
|
-
e?.stopPropagation();
|
|
7886
|
-
setInternalDate(null);
|
|
7887
|
-
onChange?.(null);
|
|
7888
|
-
onConfirm?.(null);
|
|
7889
|
-
}
|
|
7890
|
-
}
|
|
7891
|
-
),
|
|
7892
|
-
/* @__PURE__ */ jsx(
|
|
7893
|
-
motion.div,
|
|
7894
|
-
{
|
|
7895
|
-
animate: { rotate: open ? 15 : 0 },
|
|
7896
|
-
transition: { duration: 0.03 },
|
|
7897
|
-
children: /* @__PURE__ */ jsx(CalendarBlankIcon, { className: "h-4 w-4" })
|
|
7898
|
-
}
|
|
7899
|
-
)
|
|
7900
|
-
] }) })
|
|
7901
|
-
]
|
|
7878
|
+
const renderTriggerButton = () => {
|
|
7879
|
+
if (triggerIcon) {
|
|
7880
|
+
return /* @__PURE__ */ jsx(
|
|
7881
|
+
ButtonBase,
|
|
7882
|
+
{
|
|
7883
|
+
variant: "outline",
|
|
7884
|
+
size: "icon",
|
|
7885
|
+
disabled,
|
|
7886
|
+
className: cn("no-active-animation", error && "border-red-500"),
|
|
7887
|
+
children: /* @__PURE__ */ jsx(CalendarBlankIcon, { className: "h-4 w-4" })
|
|
7888
|
+
}
|
|
7889
|
+
);
|
|
7902
7890
|
}
|
|
7903
|
-
|
|
7904
|
-
|
|
7905
|
-
isMobile && !hideTime ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col min-h-0", children: [
|
|
7906
|
-
internalDate && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3 px-4 py-3 rounded-lg ", children: /* @__PURE__ */ jsxs("span", { className: "text-md font-semibold", children: [
|
|
7907
|
-
format(internalDate, "dd 'de' MMMM 'de' yyyy", {
|
|
7908
|
-
locale: ptBR
|
|
7909
|
-
}),
|
|
7910
|
-
" ",
|
|
7911
|
-
"- ",
|
|
7912
|
-
format(internalDate, hideSeconds ? "HH:mm" : "HH:mm:ss")
|
|
7913
|
-
] }) }),
|
|
7914
|
-
/* @__PURE__ */ jsxs(TabsBase, { value: activeTab, onValueChange: setActiveTab, children: [
|
|
7915
|
-
/* @__PURE__ */ jsxs(TabsListBase, { className: "", children: [
|
|
7916
|
-
/* @__PURE__ */ jsx(TabsTriggerBase, { value: "calendar", className: "flex-1", children: "Data" }),
|
|
7917
|
-
/* @__PURE__ */ jsx(TabsTriggerBase, { value: "time", className: "flex-1", children: "Hor\xE1rio" })
|
|
7918
|
-
] }),
|
|
7919
|
-
/* @__PURE__ */ jsx(TabsContentBase, { value: "calendar", className: "mt-0", children: /* @__PURE__ */ jsx(
|
|
7920
|
-
CalendarBase2,
|
|
7921
|
-
{
|
|
7922
|
-
mode: "single",
|
|
7923
|
-
locale: ptBR,
|
|
7924
|
-
selected: internalDate ?? void 0,
|
|
7925
|
-
onSelect: (d) => handleSelect(d ?? null),
|
|
7926
|
-
autoFocus: true,
|
|
7927
|
-
defaultMonth: fromDate ?? toDate ?? internalDate ?? void 0,
|
|
7928
|
-
...fromDate && { startMonth: fromDate },
|
|
7929
|
-
...toDate && { endMonth: toDate },
|
|
7930
|
-
...fromDate || toDate ? {
|
|
7931
|
-
disabled: [
|
|
7932
|
-
...fromDate ? [{ before: fromDate }] : [],
|
|
7933
|
-
...toDate ? [{ after: toDate }] : []
|
|
7934
|
-
]
|
|
7935
|
-
} : {},
|
|
7936
|
-
className: cn("w-full rounded-none border-none")
|
|
7937
|
-
}
|
|
7938
|
-
) }),
|
|
7939
|
-
/* @__PURE__ */ jsx(TabsContentBase, { value: "time", className: "mt-0", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center gap-4 py-2", children: /* @__PURE__ */ jsx(
|
|
7940
|
-
TimeScrollPicker,
|
|
7941
|
-
{
|
|
7942
|
-
setDate: (d) => handleTimeChange(d ?? null),
|
|
7943
|
-
date: internalDate,
|
|
7944
|
-
hideSeconds
|
|
7945
|
-
}
|
|
7946
|
-
) }) })
|
|
7947
|
-
] })
|
|
7948
|
-
] }) : /* @__PURE__ */ jsxs(
|
|
7949
|
-
"div",
|
|
7891
|
+
return /* @__PURE__ */ jsxs(
|
|
7892
|
+
ButtonBase,
|
|
7950
7893
|
{
|
|
7951
|
-
|
|
7952
|
-
|
|
7894
|
+
variant: "outline",
|
|
7895
|
+
disabled,
|
|
7896
|
+
className: cn(
|
|
7897
|
+
"w-full justify-start text-left min-w-0 overflow-hidden",
|
|
7898
|
+
!date && "text-muted-foreground"
|
|
7899
|
+
),
|
|
7953
7900
|
children: [
|
|
7954
7901
|
/* @__PURE__ */ jsx(
|
|
7955
|
-
|
|
7902
|
+
"span",
|
|
7956
7903
|
{
|
|
7957
|
-
|
|
7958
|
-
locale: ptBR
|
|
7959
|
-
selected: internalDate ?? void 0,
|
|
7960
|
-
onSelect: (d) => handleSelect(d ?? null),
|
|
7961
|
-
autoFocus: true,
|
|
7962
|
-
defaultMonth: fromDate ?? toDate ?? internalDate ?? void 0,
|
|
7963
|
-
...fromDate && { startMonth: fromDate },
|
|
7964
|
-
...toDate && { endMonth: toDate },
|
|
7965
|
-
...fromDate || toDate ? {
|
|
7966
|
-
disabled: [
|
|
7967
|
-
...fromDate ? [{ before: fromDate }] : [],
|
|
7968
|
-
...toDate ? [{ after: toDate }] : []
|
|
7969
|
-
]
|
|
7970
|
-
} : {},
|
|
7971
|
-
className: cn(
|
|
7972
|
-
"w-max rounded-none border-none",
|
|
7973
|
-
!hideTime && "sm:rounded-r-none"
|
|
7974
|
-
)
|
|
7904
|
+
className: cn("truncate flex-1", !date && "text-muted-foreground"),
|
|
7905
|
+
children: date ? format(date, getDisplayFormat(), { locale: ptBR }) : "Selecione uma data"
|
|
7975
7906
|
}
|
|
7976
7907
|
),
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
|
|
7980
|
-
|
|
7981
|
-
|
|
7982
|
-
|
|
7983
|
-
|
|
7984
|
-
|
|
7985
|
-
|
|
7986
|
-
|
|
7987
|
-
|
|
7988
|
-
|
|
7989
|
-
|
|
7990
|
-
|
|
7991
|
-
|
|
7992
|
-
|
|
7993
|
-
|
|
7994
|
-
|
|
7995
|
-
|
|
7996
|
-
|
|
7908
|
+
/* @__PURE__ */ jsx(motion.span, { className: "flex items-center", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-0 items-center ", children: [
|
|
7909
|
+
hideClear && (date || internalDate) && /* @__PURE__ */ jsx(
|
|
7910
|
+
ClearButton,
|
|
7911
|
+
{
|
|
7912
|
+
onClick: (e) => {
|
|
7913
|
+
e?.stopPropagation();
|
|
7914
|
+
setInternalDate(null);
|
|
7915
|
+
onChange?.(null);
|
|
7916
|
+
onConfirm?.(null);
|
|
7917
|
+
}
|
|
7918
|
+
}
|
|
7919
|
+
),
|
|
7920
|
+
/* @__PURE__ */ jsx(
|
|
7921
|
+
motion.div,
|
|
7922
|
+
{
|
|
7923
|
+
animate: { rotate: open ? 15 : 0 },
|
|
7924
|
+
transition: { duration: 0.03 },
|
|
7925
|
+
children: /* @__PURE__ */ jsx(CalendarBlankIcon, { className: "h-4 w-4" })
|
|
7926
|
+
}
|
|
7927
|
+
)
|
|
7928
|
+
] }) })
|
|
7997
7929
|
]
|
|
7998
7930
|
}
|
|
7999
|
-
)
|
|
8000
|
-
|
|
8001
|
-
|
|
8002
|
-
|
|
8003
|
-
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
size: "icon",
|
|
8008
|
-
onClick: () => {
|
|
8009
|
-
const now = /* @__PURE__ */ new Date();
|
|
8010
|
-
const selected = hideTime ? new Date(
|
|
8011
|
-
Date.UTC(
|
|
8012
|
-
now.getUTCFullYear(),
|
|
8013
|
-
now.getUTCMonth(),
|
|
8014
|
-
now.getUTCDate(),
|
|
8015
|
-
0,
|
|
8016
|
-
0,
|
|
8017
|
-
0,
|
|
8018
|
-
0
|
|
8019
|
-
)
|
|
8020
|
-
) : now;
|
|
8021
|
-
setInternalDate(selected);
|
|
8022
|
-
onChange?.(selected);
|
|
8023
|
-
onConfirm?.(selected);
|
|
8024
|
-
},
|
|
8025
|
-
children: /* @__PURE__ */ jsx(CalendarDotIcon$1, { className: "h-4 w-4" })
|
|
8026
|
-
}
|
|
7931
|
+
);
|
|
7932
|
+
};
|
|
7933
|
+
const renderPickerContent = () => /* @__PURE__ */ jsxs(
|
|
7934
|
+
"div",
|
|
7935
|
+
{
|
|
7936
|
+
className: cn(
|
|
7937
|
+
"p-2 sm:p-3",
|
|
7938
|
+
!isMobile && "border border-border rounded-md"
|
|
8027
7939
|
),
|
|
8028
|
-
|
|
8029
|
-
/* @__PURE__ */
|
|
8030
|
-
|
|
7940
|
+
children: [
|
|
7941
|
+
isMobile && !hideTime ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col min-h-0", children: [
|
|
7942
|
+
internalDate && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3 px-4 py-3 rounded-lg ", children: /* @__PURE__ */ jsxs("span", { className: "text-md font-semibold", children: [
|
|
7943
|
+
format(internalDate, "dd 'de' MMMM 'de' yyyy", {
|
|
7944
|
+
locale: ptBR
|
|
7945
|
+
}),
|
|
7946
|
+
" ",
|
|
7947
|
+
"- ",
|
|
7948
|
+
format(internalDate, hideSeconds ? "HH:mm" : "HH:mm:ss")
|
|
7949
|
+
] }) }),
|
|
7950
|
+
/* @__PURE__ */ jsxs(TabsBase, { value: activeTab, onValueChange: setActiveTab, children: [
|
|
7951
|
+
/* @__PURE__ */ jsxs(TabsListBase, { className: "", children: [
|
|
7952
|
+
/* @__PURE__ */ jsx(TabsTriggerBase, { value: "calendar", className: "flex-1", children: "Data" }),
|
|
7953
|
+
/* @__PURE__ */ jsx(TabsTriggerBase, { value: "time", className: "flex-1", children: "Hor\xE1rio" })
|
|
7954
|
+
] }),
|
|
7955
|
+
/* @__PURE__ */ jsx(TabsContentBase, { value: "calendar", className: "mt-0", children: /* @__PURE__ */ jsx(
|
|
7956
|
+
CalendarBase2,
|
|
7957
|
+
{
|
|
7958
|
+
mode: "single",
|
|
7959
|
+
locale: ptBR,
|
|
7960
|
+
selected: internalDate ?? void 0,
|
|
7961
|
+
onSelect: (d) => handleSelect(d ?? null),
|
|
7962
|
+
autoFocus: true,
|
|
7963
|
+
defaultMonth: fromDate ?? toDate ?? internalDate ?? void 0,
|
|
7964
|
+
...fromDate && { startMonth: fromDate },
|
|
7965
|
+
...toDate && { endMonth: toDate },
|
|
7966
|
+
...fromDate || toDate ? {
|
|
7967
|
+
disabled: [
|
|
7968
|
+
...fromDate ? [{ before: fromDate }] : [],
|
|
7969
|
+
...toDate ? [{ after: toDate }] : []
|
|
7970
|
+
]
|
|
7971
|
+
} : {},
|
|
7972
|
+
className: cn("w-full rounded-none border-none")
|
|
7973
|
+
}
|
|
7974
|
+
) }),
|
|
7975
|
+
/* @__PURE__ */ jsx(TabsContentBase, { value: "time", className: "mt-0", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center gap-4 py-2", children: /* @__PURE__ */ jsx(
|
|
7976
|
+
TimeScrollPicker,
|
|
7977
|
+
{
|
|
7978
|
+
setDate: (d) => handleTimeChange(d ?? null),
|
|
7979
|
+
date: internalDate,
|
|
7980
|
+
hideSeconds
|
|
7981
|
+
}
|
|
7982
|
+
) }) })
|
|
7983
|
+
] })
|
|
7984
|
+
] }) : /* @__PURE__ */ jsxs(
|
|
7985
|
+
"div",
|
|
8031
7986
|
{
|
|
8032
|
-
|
|
8033
|
-
|
|
8034
|
-
children:
|
|
7987
|
+
ref: contentRef,
|
|
7988
|
+
className: "flex flex-col sm:flex-row max-h-auto overflow-y-auto border-none rounded-md",
|
|
7989
|
+
children: [
|
|
7990
|
+
/* @__PURE__ */ jsx(
|
|
7991
|
+
CalendarBase2,
|
|
7992
|
+
{
|
|
7993
|
+
mode: "single",
|
|
7994
|
+
locale: ptBR,
|
|
7995
|
+
selected: internalDate ?? void 0,
|
|
7996
|
+
onSelect: (d) => handleSelect(d ?? null),
|
|
7997
|
+
autoFocus: true,
|
|
7998
|
+
defaultMonth: fromDate ?? toDate ?? internalDate ?? void 0,
|
|
7999
|
+
...fromDate && { startMonth: fromDate },
|
|
8000
|
+
...toDate && { endMonth: toDate },
|
|
8001
|
+
...fromDate || toDate ? {
|
|
8002
|
+
disabled: [
|
|
8003
|
+
...fromDate ? [{ before: fromDate }] : [],
|
|
8004
|
+
...toDate ? [{ after: toDate }] : []
|
|
8005
|
+
]
|
|
8006
|
+
} : {},
|
|
8007
|
+
className: cn(
|
|
8008
|
+
"w-max rounded-none border-none",
|
|
8009
|
+
!hideTime && "sm:rounded-r-none"
|
|
8010
|
+
)
|
|
8011
|
+
}
|
|
8012
|
+
),
|
|
8013
|
+
!hideTime && /* @__PURE__ */ jsxs(
|
|
8014
|
+
"div",
|
|
8015
|
+
{
|
|
8016
|
+
className: cn(
|
|
8017
|
+
"flex flex-col items-center justify-center",
|
|
8018
|
+
"border-l"
|
|
8019
|
+
),
|
|
8020
|
+
children: [
|
|
8021
|
+
/* @__PURE__ */ jsx("div", { className: "text-[clamp(0.85rem,1.4vw,1.125rem)] sm:text-[clamp(0.9rem,1.6vw,1.125rem)] font-semibold capitalize text-left", children: "Hor\xE1rio" }),
|
|
8022
|
+
/* @__PURE__ */ jsx(
|
|
8023
|
+
TimeScrollPicker,
|
|
8024
|
+
{
|
|
8025
|
+
setDate: (d) => handleTimeChange(d ?? null),
|
|
8026
|
+
date: internalDate,
|
|
8027
|
+
hideSeconds
|
|
8028
|
+
}
|
|
8029
|
+
)
|
|
8030
|
+
]
|
|
8031
|
+
}
|
|
8032
|
+
)
|
|
8033
|
+
]
|
|
8035
8034
|
}
|
|
8036
8035
|
),
|
|
8037
|
-
/* @__PURE__ */
|
|
8038
|
-
|
|
8039
|
-
|
|
8040
|
-
|
|
8041
|
-
|
|
8042
|
-
|
|
8036
|
+
/* @__PURE__ */ jsxs("div", { className: "flex rounded-md p-1.5 gap-2", children: [
|
|
8037
|
+
/* @__PURE__ */ jsx(
|
|
8038
|
+
ButtonBase,
|
|
8039
|
+
{
|
|
8040
|
+
variant: "outline",
|
|
8041
|
+
className: "no-active-animation",
|
|
8042
|
+
tooltip: "Hoje",
|
|
8043
|
+
size: "icon",
|
|
8044
|
+
onClick: () => {
|
|
8045
|
+
const now = /* @__PURE__ */ new Date();
|
|
8046
|
+
const selected = hideTime ? new Date(
|
|
8047
|
+
Date.UTC(
|
|
8048
|
+
now.getUTCFullYear(),
|
|
8049
|
+
now.getUTCMonth(),
|
|
8050
|
+
now.getUTCDate(),
|
|
8051
|
+
0,
|
|
8052
|
+
0,
|
|
8053
|
+
0,
|
|
8054
|
+
0
|
|
8055
|
+
)
|
|
8056
|
+
) : now;
|
|
8057
|
+
setInternalDate(selected);
|
|
8058
|
+
onChange?.(selected);
|
|
8059
|
+
onConfirm?.(selected);
|
|
8060
|
+
},
|
|
8061
|
+
children: /* @__PURE__ */ jsx(CalendarDotIcon$1, { className: "h-4 w-4" })
|
|
8062
|
+
}
|
|
8063
|
+
),
|
|
8064
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 sm:flex-row w-full gap-2", children: [
|
|
8065
|
+
/* @__PURE__ */ jsx(
|
|
8066
|
+
ButtonBase,
|
|
8067
|
+
{
|
|
8068
|
+
className: "no-active-animation rounded-md bg-background text-primary border hover:bg-muted/50 overflow-hidden flex-1 min-w-0 border-border",
|
|
8069
|
+
onClick: () => setOpen(false),
|
|
8070
|
+
children: "Cancelar"
|
|
8071
|
+
}
|
|
8043
8072
|
),
|
|
8044
|
-
|
|
8045
|
-
|
|
8046
|
-
|
|
8047
|
-
|
|
8048
|
-
|
|
8049
|
-
|
|
8050
|
-
|
|
8051
|
-
|
|
8052
|
-
|
|
8053
|
-
|
|
8054
|
-
|
|
8055
|
-
|
|
8073
|
+
/* @__PURE__ */ jsx(
|
|
8074
|
+
ButtonBase,
|
|
8075
|
+
{
|
|
8076
|
+
className: cn(
|
|
8077
|
+
"no-active-animation rounded-md bg-emerald-600",
|
|
8078
|
+
internalDate ? "hover:bg-emerald-700" : "opacity-50 cursor-not-allowed"
|
|
8079
|
+
),
|
|
8080
|
+
disabled: !internalDate,
|
|
8081
|
+
onClick: () => {
|
|
8082
|
+
if (!internalDate) return;
|
|
8083
|
+
setOpen(false);
|
|
8084
|
+
onConfirm?.(internalDate);
|
|
8085
|
+
},
|
|
8086
|
+
children: "Confirmar"
|
|
8087
|
+
}
|
|
8088
|
+
)
|
|
8089
|
+
] })
|
|
8090
|
+
] })
|
|
8091
|
+
]
|
|
8092
|
+
}
|
|
8093
|
+
);
|
|
8056
8094
|
return /* @__PURE__ */ jsxs("div", { className: cn("w-full sm:w-auto", className), children: [
|
|
8057
8095
|
label && /* @__PURE__ */ jsx(LabelBase_default, { children: label }),
|
|
8058
8096
|
isMobile ? /* @__PURE__ */ jsxs(DialogBase, { open, onOpenChange: setOpen, children: [
|
|
@@ -8066,7 +8104,7 @@ function DateTimePicker({
|
|
|
8066
8104
|
}
|
|
8067
8105
|
),
|
|
8068
8106
|
/* @__PURE__ */ jsx(ErrorMessage_default, { error }),
|
|
8069
|
-
/* @__PURE__ */ jsx(DialogContentBase, { className: "p-0 max-h-[95vh] w-
|
|
8107
|
+
/* @__PURE__ */ jsx(DialogContentBase, { className: "p-0 max-h-[95vh] w-[95%] sm:max-w-lg overflow-hidden flex flex-col", children: /* @__PURE__ */ jsx("div", { className: "overflow-y-auto flex-1", children: renderPickerContent() }) })
|
|
8070
8108
|
] }) : /* @__PURE__ */ jsxs(PopoverBase, { open, onOpenChange: setOpen, children: [
|
|
8071
8109
|
/* @__PURE__ */ jsx(
|
|
8072
8110
|
PopoverTriggerBase,
|
|
@@ -8088,7 +8126,6 @@ function DateTimePicker({
|
|
|
8088
8126
|
] })
|
|
8089
8127
|
] });
|
|
8090
8128
|
}
|
|
8091
|
-
var dateFnsLocale = ptBR3?.default ?? ptBR3;
|
|
8092
8129
|
function RangePicker({
|
|
8093
8130
|
value,
|
|
8094
8131
|
onChange,
|
|
@@ -8143,8 +8180,8 @@ function RangePicker({
|
|
|
8143
8180
|
!range && "text-muted-foreground"
|
|
8144
8181
|
),
|
|
8145
8182
|
children: range?.from && range?.to ? `${format(range.from, "P", {
|
|
8146
|
-
locale:
|
|
8147
|
-
})} - ${format(range.to, "P", { locale:
|
|
8183
|
+
locale: ptBR
|
|
8184
|
+
})} - ${format(range.to, "P", { locale: ptBR })}` : "Selecione um intervalo"
|
|
8148
8185
|
}
|
|
8149
8186
|
),
|
|
8150
8187
|
/* @__PURE__ */ jsx(motion.span, { className: "flex items-center", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-0 items-center ", children: [
|
|
@@ -8204,7 +8241,7 @@ function RangePicker({
|
|
|
8204
8241
|
mode: "range",
|
|
8205
8242
|
selected: range,
|
|
8206
8243
|
onSelect: handleSelect,
|
|
8207
|
-
locale:
|
|
8244
|
+
locale: ptBR,
|
|
8208
8245
|
showOutsideDays: true,
|
|
8209
8246
|
fixedWeeks: true,
|
|
8210
8247
|
weekStartsOn: 1,
|
|
@@ -21475,5 +21512,675 @@ function processIntegrationData(integrations, targetSystemName) {
|
|
|
21475
21512
|
connections
|
|
21476
21513
|
};
|
|
21477
21514
|
}
|
|
21515
|
+
function normalizeStr(s) {
|
|
21516
|
+
return s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
21517
|
+
}
|
|
21518
|
+
function scoreMatch(item, query) {
|
|
21519
|
+
const q = normalizeStr(query);
|
|
21520
|
+
const label = normalizeStr(item.label);
|
|
21521
|
+
const desc = normalizeStr(item.description ?? "");
|
|
21522
|
+
const keywords = (item.keywords ?? []).map(normalizeStr);
|
|
21523
|
+
if (label === q) return 100;
|
|
21524
|
+
if (label.startsWith(q)) return 90;
|
|
21525
|
+
if (label.includes(q)) return 70;
|
|
21526
|
+
if (desc.includes(q)) return 50;
|
|
21527
|
+
if (keywords.some((k) => k.includes(q))) return 40;
|
|
21528
|
+
return -1;
|
|
21529
|
+
}
|
|
21530
|
+
function filterAndScore(groups, query) {
|
|
21531
|
+
if (!query.trim()) return groups;
|
|
21532
|
+
return groups.map((g) => ({
|
|
21533
|
+
...g,
|
|
21534
|
+
items: g.items.map((item) => ({ item, score: scoreMatch(item, query) })).filter(({ score }) => score >= 0).sort((a, b) => b.score - a.score).map(({ item }) => item)
|
|
21535
|
+
})).filter((g) => g.items.length > 0).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
21536
|
+
}
|
|
21537
|
+
function normaliseGroups(items = [], groups = []) {
|
|
21538
|
+
const result = [];
|
|
21539
|
+
if (items.length > 0) {
|
|
21540
|
+
result.push({ id: "__flat__", label: "", items });
|
|
21541
|
+
}
|
|
21542
|
+
result.push(...groups);
|
|
21543
|
+
return result;
|
|
21544
|
+
}
|
|
21545
|
+
function unionGroups(base, terms) {
|
|
21546
|
+
if (terms.length === 0) return base;
|
|
21547
|
+
const allMatchedIds = /* @__PURE__ */ new Set();
|
|
21548
|
+
terms.forEach((term) => {
|
|
21549
|
+
const filtered = filterAndScore(base, term);
|
|
21550
|
+
filtered.forEach((g) => g.items.forEach((i) => allMatchedIds.add(i.id)));
|
|
21551
|
+
});
|
|
21552
|
+
return base.map((group) => ({
|
|
21553
|
+
...group,
|
|
21554
|
+
items: group.items.filter((item) => allMatchedIds.has(item.id))
|
|
21555
|
+
})).filter((group) => group.items.length > 0);
|
|
21556
|
+
}
|
|
21557
|
+
function createGroup(id, label, items, opts) {
|
|
21558
|
+
return { id, label, items, ...opts };
|
|
21559
|
+
}
|
|
21560
|
+
function createItem(item) {
|
|
21561
|
+
return item;
|
|
21562
|
+
}
|
|
21563
|
+
var STORAGE_KEY = "cmd:recents";
|
|
21564
|
+
var MAX_RECENTS = 5;
|
|
21565
|
+
function readStorage() {
|
|
21566
|
+
try {
|
|
21567
|
+
return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? "[]");
|
|
21568
|
+
} catch {
|
|
21569
|
+
return [];
|
|
21570
|
+
}
|
|
21571
|
+
}
|
|
21572
|
+
function writeStorage(ids) {
|
|
21573
|
+
try {
|
|
21574
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(ids));
|
|
21575
|
+
} catch {
|
|
21576
|
+
console.error("Failed to write to localStorage");
|
|
21577
|
+
}
|
|
21578
|
+
}
|
|
21579
|
+
function useRecents(allItems) {
|
|
21580
|
+
const [recentIds, setRecentIds] = useState(readStorage);
|
|
21581
|
+
const push = useCallback((item) => {
|
|
21582
|
+
setRecentIds((prev) => {
|
|
21583
|
+
const next = [item.id, ...prev.filter((id) => id !== item.id)].slice(
|
|
21584
|
+
0,
|
|
21585
|
+
MAX_RECENTS
|
|
21586
|
+
);
|
|
21587
|
+
writeStorage(next);
|
|
21588
|
+
return next;
|
|
21589
|
+
});
|
|
21590
|
+
}, []);
|
|
21591
|
+
const clear = useCallback(() => {
|
|
21592
|
+
setRecentIds([]);
|
|
21593
|
+
writeStorage([]);
|
|
21594
|
+
}, []);
|
|
21595
|
+
const items = recentIds.map((id) => allItems.find((i) => i.id === id)).filter(Boolean);
|
|
21596
|
+
return { items, push, clear };
|
|
21597
|
+
}
|
|
21598
|
+
function Kbd({ className, ...props }) {
|
|
21599
|
+
return /* @__PURE__ */ jsx(
|
|
21600
|
+
"kbd",
|
|
21601
|
+
{
|
|
21602
|
+
"data-slot": "kbd",
|
|
21603
|
+
className: cn(
|
|
21604
|
+
"bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3 pointer-events-none inline-flex items-center justify-center select-none",
|
|
21605
|
+
className
|
|
21606
|
+
),
|
|
21607
|
+
...props
|
|
21608
|
+
}
|
|
21609
|
+
);
|
|
21610
|
+
}
|
|
21611
|
+
function KbdGroup({ className, ...props }) {
|
|
21612
|
+
return /* @__PURE__ */ jsx(
|
|
21613
|
+
"kbd",
|
|
21614
|
+
{
|
|
21615
|
+
"data-slot": "kbd-group",
|
|
21616
|
+
className: cn("gap-1 inline-flex items-center", className),
|
|
21617
|
+
...props
|
|
21618
|
+
}
|
|
21619
|
+
);
|
|
21620
|
+
}
|
|
21621
|
+
function GroupLabel({ group }) {
|
|
21622
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5 mb-1", children: [
|
|
21623
|
+
group.icon && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground w-3.5 h-3.5", children: group.icon }),
|
|
21624
|
+
/* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold text-muted-foreground uppercase tracking-widest", children: group.label })
|
|
21625
|
+
] });
|
|
21626
|
+
}
|
|
21627
|
+
function mapBadgeVariantToColor(variant) {
|
|
21628
|
+
if (!variant) return void 0;
|
|
21629
|
+
switch (variant) {
|
|
21630
|
+
case "success":
|
|
21631
|
+
return "green";
|
|
21632
|
+
case "warning":
|
|
21633
|
+
return "yellow";
|
|
21634
|
+
case "danger":
|
|
21635
|
+
return "red";
|
|
21636
|
+
case "primary":
|
|
21637
|
+
return "blue";
|
|
21638
|
+
case "secondary":
|
|
21639
|
+
return "purple";
|
|
21640
|
+
case "destructive":
|
|
21641
|
+
return "red";
|
|
21642
|
+
case "muted":
|
|
21643
|
+
return "gray";
|
|
21644
|
+
case "default":
|
|
21645
|
+
return "gray";
|
|
21646
|
+
default:
|
|
21647
|
+
return void 0;
|
|
21648
|
+
}
|
|
21649
|
+
}
|
|
21650
|
+
function CommandItemRow({
|
|
21651
|
+
item,
|
|
21652
|
+
isActive,
|
|
21653
|
+
onSelect,
|
|
21654
|
+
onHover
|
|
21655
|
+
}) {
|
|
21656
|
+
return /* @__PURE__ */ jsxs(
|
|
21657
|
+
motion.button,
|
|
21658
|
+
{
|
|
21659
|
+
layout: true,
|
|
21660
|
+
onClick: onSelect,
|
|
21661
|
+
onMouseEnter: onHover,
|
|
21662
|
+
className: `
|
|
21663
|
+
w-full flex items-center gap-1 px-2 py-1 rounded-md text-left cursor-pointer
|
|
21664
|
+
transition-colors duration-75 group relative
|
|
21665
|
+
${isActive ? "text-accent-foreground hover:bg-accent" : "hover:bg-accent hover:text-accent-foreground"}
|
|
21666
|
+
`,
|
|
21667
|
+
children: [
|
|
21668
|
+
item.icon && /* @__PURE__ */ jsx(
|
|
21669
|
+
"span",
|
|
21670
|
+
{
|
|
21671
|
+
className: `relative flex-shrink-0 w-8 h-8 flex items-center justify-center rounded-md text-base
|
|
21672
|
+
${isActive ? "bg-primary/20 text-primary" : "bg-muted text-muted-foreground group-hover:text-foreground"}`,
|
|
21673
|
+
children: item.icon
|
|
21674
|
+
}
|
|
21675
|
+
),
|
|
21676
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex-1 min-w-0 px-1", children: [
|
|
21677
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-wrap", children: [
|
|
21678
|
+
/* @__PURE__ */ jsx(
|
|
21679
|
+
"span",
|
|
21680
|
+
{
|
|
21681
|
+
className: `text-sm font-medium truncate ${isActive ? "text-foreground" : "text-foreground/80"}`,
|
|
21682
|
+
children: item.label
|
|
21683
|
+
}
|
|
21684
|
+
),
|
|
21685
|
+
item.badge && /* @__PURE__ */ jsx(Badge, { color: mapBadgeVariantToColor(item.badgeVariant), children: item.badge.toUpperCase() })
|
|
21686
|
+
] }),
|
|
21687
|
+
item.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate", children: item.description })
|
|
21688
|
+
] }),
|
|
21689
|
+
item.shortcut && /* @__PURE__ */ jsx("div", { className: "relative hidden sm:flex items-center gap-1 flex-shrink-0", children: item.shortcut.map((k, i) => /* @__PURE__ */ jsx(Kbd, { children: k }, i)) }),
|
|
21690
|
+
isActive && /* @__PURE__ */ jsx(
|
|
21691
|
+
CaretRightIcon,
|
|
21692
|
+
{
|
|
21693
|
+
className: "relative w-4 h-4 text-primary flex-shrink-0",
|
|
21694
|
+
weight: "bold"
|
|
21695
|
+
}
|
|
21696
|
+
)
|
|
21697
|
+
]
|
|
21698
|
+
}
|
|
21699
|
+
);
|
|
21700
|
+
}
|
|
21701
|
+
var PAGE_SIZE = 8;
|
|
21702
|
+
function useCommandPalette({
|
|
21703
|
+
items = [],
|
|
21704
|
+
groups = [],
|
|
21705
|
+
open,
|
|
21706
|
+
onOpenChange,
|
|
21707
|
+
recentItems = [],
|
|
21708
|
+
onRecentItemsChange,
|
|
21709
|
+
maxRecentItems = 5,
|
|
21710
|
+
multiSearch = false
|
|
21711
|
+
}) {
|
|
21712
|
+
const [query, setQuery] = React32.useState("");
|
|
21713
|
+
const [activeIndex, setActiveIndex] = React32.useState(0);
|
|
21714
|
+
const [page, setPage] = React32.useState(0);
|
|
21715
|
+
const baseGroups = React32.useMemo(
|
|
21716
|
+
() => normaliseGroups(items, groups),
|
|
21717
|
+
[items, groups]
|
|
21718
|
+
);
|
|
21719
|
+
React32.useEffect(() => {
|
|
21720
|
+
if (open) {
|
|
21721
|
+
setQuery("");
|
|
21722
|
+
setActiveIndex(0);
|
|
21723
|
+
setPage(0);
|
|
21724
|
+
}
|
|
21725
|
+
}, [open]);
|
|
21726
|
+
const searchTerms = React32.useMemo(() => {
|
|
21727
|
+
const parts = query.split(",");
|
|
21728
|
+
if (parts.length <= 1 && !multiSearch) return [];
|
|
21729
|
+
return parts.map((t) => t.trim().toLowerCase()).filter(Boolean);
|
|
21730
|
+
}, [query, multiSearch]);
|
|
21731
|
+
const allMatchedGroups = React32.useMemo(() => {
|
|
21732
|
+
if (!query.trim()) {
|
|
21733
|
+
if (recentItems.length > 0) {
|
|
21734
|
+
return [
|
|
21735
|
+
{
|
|
21736
|
+
id: "__recent__",
|
|
21737
|
+
label: "Recent",
|
|
21738
|
+
icon: React32.createElement(ClockCounterClockwiseIcon),
|
|
21739
|
+
items: recentItems,
|
|
21740
|
+
priority: 999
|
|
21741
|
+
},
|
|
21742
|
+
...baseGroups
|
|
21743
|
+
];
|
|
21744
|
+
}
|
|
21745
|
+
return baseGroups;
|
|
21746
|
+
}
|
|
21747
|
+
if (searchTerms.length > 1 || multiSearch && searchTerms.length > 0) {
|
|
21748
|
+
return unionGroups(baseGroups, searchTerms);
|
|
21749
|
+
}
|
|
21750
|
+
return filterAndScore(baseGroups, query);
|
|
21751
|
+
}, [query, baseGroups, recentItems, multiSearch, searchTerms]);
|
|
21752
|
+
const allFlatItems = useMemo(
|
|
21753
|
+
() => allMatchedGroups.flatMap((g) => g.items),
|
|
21754
|
+
[allMatchedGroups]
|
|
21755
|
+
);
|
|
21756
|
+
const totalItems = allFlatItems.length;
|
|
21757
|
+
const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
|
|
21758
|
+
useEffect(() => {
|
|
21759
|
+
setPage(0);
|
|
21760
|
+
setActiveIndex(0);
|
|
21761
|
+
}, [query]);
|
|
21762
|
+
useEffect(() => {
|
|
21763
|
+
setActiveIndex(0);
|
|
21764
|
+
}, [page]);
|
|
21765
|
+
const displayedGroups = useMemo(() => {
|
|
21766
|
+
const start = page * PAGE_SIZE;
|
|
21767
|
+
const end = start + PAGE_SIZE;
|
|
21768
|
+
let count = 0;
|
|
21769
|
+
const result = [];
|
|
21770
|
+
for (const group of allMatchedGroups) {
|
|
21771
|
+
const slicedItems = [];
|
|
21772
|
+
for (const item of group.items) {
|
|
21773
|
+
if (count >= start && count < end) slicedItems.push(item);
|
|
21774
|
+
count++;
|
|
21775
|
+
if (count >= end) break;
|
|
21776
|
+
}
|
|
21777
|
+
if (slicedItems.length > 0) {
|
|
21778
|
+
result.push({ ...group, items: slicedItems });
|
|
21779
|
+
}
|
|
21780
|
+
if (count >= end) break;
|
|
21781
|
+
}
|
|
21782
|
+
return result;
|
|
21783
|
+
}, [allMatchedGroups, page]);
|
|
21784
|
+
const flatItems = useMemo(
|
|
21785
|
+
() => displayedGroups.flatMap((g) => g.items),
|
|
21786
|
+
[displayedGroups]
|
|
21787
|
+
);
|
|
21788
|
+
const pageItemCount = flatItems.length;
|
|
21789
|
+
useEffect(() => {
|
|
21790
|
+
setActiveIndex((i) => Math.min(i, Math.max(pageItemCount - 1, 0)));
|
|
21791
|
+
}, [pageItemCount]);
|
|
21792
|
+
function handleSelect(item) {
|
|
21793
|
+
if (!item) return;
|
|
21794
|
+
item.onSelect();
|
|
21795
|
+
onOpenChange?.(false);
|
|
21796
|
+
if (onRecentItemsChange) {
|
|
21797
|
+
const next = [item, ...recentItems.filter((r) => r.id !== item.id)].slice(
|
|
21798
|
+
0,
|
|
21799
|
+
maxRecentItems
|
|
21800
|
+
);
|
|
21801
|
+
onRecentItemsChange(next);
|
|
21802
|
+
}
|
|
21803
|
+
}
|
|
21804
|
+
useEffect(() => {
|
|
21805
|
+
if (!open) return;
|
|
21806
|
+
const handler = (e) => {
|
|
21807
|
+
if (e.key === "ArrowDown") {
|
|
21808
|
+
e.preventDefault();
|
|
21809
|
+
if (activeIndex === pageItemCount - 1 && page < totalPages - 1) {
|
|
21810
|
+
setPage((p) => p + 1);
|
|
21811
|
+
} else {
|
|
21812
|
+
setActiveIndex((i) => (i + 1) % Math.max(pageItemCount, 1));
|
|
21813
|
+
}
|
|
21814
|
+
} else if (e.key === "ArrowUp") {
|
|
21815
|
+
e.preventDefault();
|
|
21816
|
+
if (activeIndex === 0 && page > 0) {
|
|
21817
|
+
setPage((p) => p - 1);
|
|
21818
|
+
setActiveIndex(PAGE_SIZE - 1);
|
|
21819
|
+
} else {
|
|
21820
|
+
setActiveIndex(
|
|
21821
|
+
(i) => (i - 1 + Math.max(pageItemCount, 1)) % Math.max(pageItemCount, 1)
|
|
21822
|
+
);
|
|
21823
|
+
}
|
|
21824
|
+
} else if (e.key === "Enter") {
|
|
21825
|
+
e.preventDefault();
|
|
21826
|
+
handleSelect(flatItems[activeIndex]);
|
|
21827
|
+
}
|
|
21828
|
+
};
|
|
21829
|
+
document.addEventListener("keydown", handler);
|
|
21830
|
+
return () => document.removeEventListener("keydown", handler);
|
|
21831
|
+
}, [open, flatItems, activeIndex, pageItemCount, page, totalPages]);
|
|
21832
|
+
return {
|
|
21833
|
+
query,
|
|
21834
|
+
setQuery,
|
|
21835
|
+
activeIndex,
|
|
21836
|
+
setActiveIndex,
|
|
21837
|
+
page,
|
|
21838
|
+
setPage,
|
|
21839
|
+
searchTerms,
|
|
21840
|
+
allMatchedGroups,
|
|
21841
|
+
allFlatItems,
|
|
21842
|
+
displayedGroups,
|
|
21843
|
+
flatItems,
|
|
21844
|
+
totalItems,
|
|
21845
|
+
totalPages,
|
|
21846
|
+
handleSelect,
|
|
21847
|
+
isEmpty: totalItems === 0 && query.trim().length > 0,
|
|
21848
|
+
showList: query.trim() !== "" || recentItems.length > 0
|
|
21849
|
+
};
|
|
21850
|
+
}
|
|
21851
|
+
function useKeyboardShortcut(key, callback, options = {}) {
|
|
21852
|
+
useEffect(() => {
|
|
21853
|
+
const handleKeyDown = (event) => {
|
|
21854
|
+
const { ctrl, meta, shift, alt } = options;
|
|
21855
|
+
const isKeyMatch = event.key.toLowerCase() === key.toLowerCase();
|
|
21856
|
+
const isCtrlMatch = ctrl === void 0 || event.ctrlKey === ctrl;
|
|
21857
|
+
const isMetaMatch = meta === void 0 || event.metaKey === meta;
|
|
21858
|
+
const isShiftMatch = shift === void 0 || event.shiftKey === shift;
|
|
21859
|
+
const isAltMatch = alt === void 0 || event.altKey === alt;
|
|
21860
|
+
if (isKeyMatch && isCtrlMatch && isMetaMatch && isShiftMatch && isAltMatch) {
|
|
21861
|
+
event.preventDefault();
|
|
21862
|
+
callback();
|
|
21863
|
+
}
|
|
21864
|
+
};
|
|
21865
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
21866
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
21867
|
+
}, [key, callback, options]);
|
|
21868
|
+
}
|
|
21869
|
+
var ITEM_HEIGHT2 = 40;
|
|
21870
|
+
var LABEL_HEIGHT = 28;
|
|
21871
|
+
var LIST_MAX_HEIGHT = 460;
|
|
21872
|
+
var ANIMATION = {
|
|
21873
|
+
overlay: { duration: 0.18 },
|
|
21874
|
+
panel: { duration: 0.2, ease: [0.16, 1, 0.3, 1] },
|
|
21875
|
+
mobilePanel: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },
|
|
21876
|
+
empty: { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 } }
|
|
21877
|
+
};
|
|
21878
|
+
var SearchBadges = memo(({ terms }) => {
|
|
21879
|
+
if (terms.length === 0) return null;
|
|
21880
|
+
return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 px-4 py-1.5 border-b border-border flex-wrap", children: terms.map((term, i) => /* @__PURE__ */ jsx(Badge, { children: term }, i)) });
|
|
21881
|
+
});
|
|
21882
|
+
SearchBadges.displayName = "SearchBadges";
|
|
21883
|
+
var EmptyState = memo(({ message }) => /* @__PURE__ */ jsxs(
|
|
21884
|
+
motion.div,
|
|
21885
|
+
{
|
|
21886
|
+
...ANIMATION.empty,
|
|
21887
|
+
className: "flex flex-col items-center justify-center py-14 text-center gap-3",
|
|
21888
|
+
children: [
|
|
21889
|
+
/* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-md bg-muted flex items-center justify-center", children: /* @__PURE__ */ jsx(MagnifyingGlassIcon, { className: "w-6 h-6 text-muted-foreground" }) }),
|
|
21890
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
21891
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-muted-foreground", children: message }),
|
|
21892
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground/60 mt-1", children: "Try a different search term" })
|
|
21893
|
+
] })
|
|
21894
|
+
]
|
|
21895
|
+
}
|
|
21896
|
+
));
|
|
21897
|
+
EmptyState.displayName = "EmptyState";
|
|
21898
|
+
var VirtualResultList = memo(
|
|
21899
|
+
({
|
|
21900
|
+
listRef,
|
|
21901
|
+
isEmpty,
|
|
21902
|
+
emptyMessage,
|
|
21903
|
+
displayedGroups,
|
|
21904
|
+
flatItems,
|
|
21905
|
+
activeIndex,
|
|
21906
|
+
onHover,
|
|
21907
|
+
onSelect
|
|
21908
|
+
}) => {
|
|
21909
|
+
const rows = useMemo(() => {
|
|
21910
|
+
const acc = [];
|
|
21911
|
+
for (const group of displayedGroups) {
|
|
21912
|
+
if (group.label) acc.push({ kind: "label", group });
|
|
21913
|
+
for (const item of group.items) {
|
|
21914
|
+
const globalIdx = flatItems.findIndex((f) => f.id === item.id);
|
|
21915
|
+
acc.push({ kind: "item", item, globalIdx });
|
|
21916
|
+
}
|
|
21917
|
+
}
|
|
21918
|
+
return acc;
|
|
21919
|
+
}, [displayedGroups, flatItems]);
|
|
21920
|
+
const virtualizer = useVirtualizer({
|
|
21921
|
+
count: rows.length,
|
|
21922
|
+
getScrollElement: () => listRef.current,
|
|
21923
|
+
estimateSize: (i) => rows[i].kind === "label" ? LABEL_HEIGHT : ITEM_HEIGHT2,
|
|
21924
|
+
overscan: 8
|
|
21925
|
+
});
|
|
21926
|
+
const virtualItems = virtualizer.getVirtualItems();
|
|
21927
|
+
const totalSize = virtualizer.getTotalSize();
|
|
21928
|
+
if (isEmpty) {
|
|
21929
|
+
return /* @__PURE__ */ jsx(
|
|
21930
|
+
"div",
|
|
21931
|
+
{
|
|
21932
|
+
ref: listRef,
|
|
21933
|
+
className: "overflow-y-auto overscroll-contain px-2 py-1",
|
|
21934
|
+
style: { maxHeight: `min(${LIST_MAX_HEIGHT}px, 60vh)` },
|
|
21935
|
+
children: /* @__PURE__ */ jsx(EmptyState, { message: emptyMessage })
|
|
21936
|
+
}
|
|
21937
|
+
);
|
|
21938
|
+
}
|
|
21939
|
+
return /* @__PURE__ */ jsx(
|
|
21940
|
+
"div",
|
|
21941
|
+
{
|
|
21942
|
+
ref: listRef,
|
|
21943
|
+
className: "overflow-y-auto overscroll-contain px-2 py-1 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:bg-muted-foreground/30 [&::-webkit-scrollbar-thumb]:rounded-full hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/50 transition-colors",
|
|
21944
|
+
style: { maxHeight: `min(${LIST_MAX_HEIGHT}px, 60vh)` },
|
|
21945
|
+
children: /* @__PURE__ */ jsx("div", { style: { height: totalSize, position: "relative" }, children: virtualItems.map((vItem) => {
|
|
21946
|
+
const row = rows[vItem.index];
|
|
21947
|
+
return /* @__PURE__ */ jsx(
|
|
21948
|
+
"div",
|
|
21949
|
+
{
|
|
21950
|
+
"data-index": vItem.index,
|
|
21951
|
+
ref: virtualizer.measureElement,
|
|
21952
|
+
style: {
|
|
21953
|
+
position: "absolute",
|
|
21954
|
+
top: vItem.start,
|
|
21955
|
+
left: 0,
|
|
21956
|
+
right: 0
|
|
21957
|
+
},
|
|
21958
|
+
children: row.kind === "label" ? /* @__PURE__ */ jsx(GroupLabel, { group: row.group }) : /* @__PURE__ */ jsx("div", { "data-active": row.globalIdx === activeIndex, children: /* @__PURE__ */ jsx(
|
|
21959
|
+
CommandItemRow,
|
|
21960
|
+
{
|
|
21961
|
+
item: row.item,
|
|
21962
|
+
isActive: row.globalIdx === activeIndex,
|
|
21963
|
+
onHover: () => onHover(row.globalIdx),
|
|
21964
|
+
onSelect: () => onSelect(row.item)
|
|
21965
|
+
}
|
|
21966
|
+
) })
|
|
21967
|
+
},
|
|
21968
|
+
vItem.key
|
|
21969
|
+
);
|
|
21970
|
+
}) })
|
|
21971
|
+
}
|
|
21972
|
+
);
|
|
21973
|
+
}
|
|
21974
|
+
);
|
|
21975
|
+
VirtualResultList.displayName = "VirtualResultList";
|
|
21976
|
+
var FooterBar = memo(({ footer, totalItems }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-t border-border bg-muted/30", children: [
|
|
21977
|
+
footer ?? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 text-[11px] text-muted-foreground", children: [
|
|
21978
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
21979
|
+
/* @__PURE__ */ jsx(ArrowElbowDownRightIcon, { className: "w-3 h-3" }),
|
|
21980
|
+
"Selecionar"
|
|
21981
|
+
] }),
|
|
21982
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
21983
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono", children: "\u2191\u2193" }),
|
|
21984
|
+
"Navegar"
|
|
21985
|
+
] }),
|
|
21986
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
21987
|
+
/* @__PURE__ */ jsx(ArrowBendUpLeftIcon, { className: "w-3 h-3" }),
|
|
21988
|
+
"Fechar"
|
|
21989
|
+
] })
|
|
21990
|
+
] }),
|
|
21991
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-[11px] text-muted-foreground", children: [
|
|
21992
|
+
/* @__PURE__ */ jsx(CommandIcon, { className: "w-3 h-3" }),
|
|
21993
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
21994
|
+
totalItems,
|
|
21995
|
+
" resultado",
|
|
21996
|
+
totalItems !== 1 ? "s" : ""
|
|
21997
|
+
] })
|
|
21998
|
+
] })
|
|
21999
|
+
] }));
|
|
22000
|
+
FooterBar.displayName = "FooterBar";
|
|
22001
|
+
function CommandPalette(props) {
|
|
22002
|
+
const {
|
|
22003
|
+
placeholder = "Buscar comandos\u2026",
|
|
22004
|
+
open,
|
|
22005
|
+
onOpenChange,
|
|
22006
|
+
footer,
|
|
22007
|
+
debounceDelay = 300,
|
|
22008
|
+
multiSearch = false,
|
|
22009
|
+
emptyMessage = "Nenhum resultado encontrado.",
|
|
22010
|
+
shortcut = { key: "k", ctrl: true }
|
|
22011
|
+
} = props;
|
|
22012
|
+
const inputRef = useRef(null);
|
|
22013
|
+
const listRef = useRef(null);
|
|
22014
|
+
const isMobile = useIsMobile();
|
|
22015
|
+
const {
|
|
22016
|
+
query,
|
|
22017
|
+
setQuery,
|
|
22018
|
+
activeIndex,
|
|
22019
|
+
setActiveIndex,
|
|
22020
|
+
searchTerms,
|
|
22021
|
+
displayedGroups,
|
|
22022
|
+
flatItems,
|
|
22023
|
+
totalItems,
|
|
22024
|
+
handleSelect,
|
|
22025
|
+
isEmpty,
|
|
22026
|
+
showList
|
|
22027
|
+
} = useCommandPalette({
|
|
22028
|
+
...props,
|
|
22029
|
+
open: isMobile ? true : props.open
|
|
22030
|
+
});
|
|
22031
|
+
useKeyboardShortcut(shortcut.key, () => onOpenChange(!open), {
|
|
22032
|
+
ctrl: shortcut.ctrl,
|
|
22033
|
+
meta: shortcut.meta,
|
|
22034
|
+
shift: shortcut.shift,
|
|
22035
|
+
alt: shortcut.alt
|
|
22036
|
+
});
|
|
22037
|
+
useEffect(() => {
|
|
22038
|
+
if (!open) return;
|
|
22039
|
+
const handleEscape = (e) => {
|
|
22040
|
+
if (e.key === "Escape") onOpenChange(false);
|
|
22041
|
+
};
|
|
22042
|
+
document.addEventListener("keydown", handleEscape);
|
|
22043
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
22044
|
+
}, [open, onOpenChange]);
|
|
22045
|
+
useEffect(() => {
|
|
22046
|
+
if (!open) return;
|
|
22047
|
+
const timer = setTimeout(() => inputRef.current?.focus(), 50);
|
|
22048
|
+
return () => clearTimeout(timer);
|
|
22049
|
+
}, [open]);
|
|
22050
|
+
useEffect(() => {
|
|
22051
|
+
const el = listRef.current?.querySelector(
|
|
22052
|
+
`[data-active="true"]`
|
|
22053
|
+
);
|
|
22054
|
+
el?.scrollIntoView({ block: "nearest" });
|
|
22055
|
+
}, [activeIndex]);
|
|
22056
|
+
const handleQueryChange = useCallback(
|
|
22057
|
+
(val) => {
|
|
22058
|
+
setQuery(val);
|
|
22059
|
+
setActiveIndex(0);
|
|
22060
|
+
},
|
|
22061
|
+
[setQuery, setActiveIndex]
|
|
22062
|
+
);
|
|
22063
|
+
const handleQueryChangeMobile = useCallback(
|
|
22064
|
+
(val) => {
|
|
22065
|
+
setQuery(val);
|
|
22066
|
+
setActiveIndex(0);
|
|
22067
|
+
if (!open && val.trim() !== "") onOpenChange(true);
|
|
22068
|
+
},
|
|
22069
|
+
[setQuery, setActiveIndex, open, onOpenChange]
|
|
22070
|
+
);
|
|
22071
|
+
const handleClose = useCallback(() => onOpenChange(false), [onOpenChange]);
|
|
22072
|
+
const handleClearQuery = useCallback(() => setQuery(""), [setQuery]);
|
|
22073
|
+
const searchPlaceholder = multiSearch ? "Buscar\u2026 (separe termos por v\xEDrgula)" : placeholder;
|
|
22074
|
+
const sharedListProps = {
|
|
22075
|
+
listRef,
|
|
22076
|
+
isEmpty,
|
|
22077
|
+
emptyMessage,
|
|
22078
|
+
displayedGroups,
|
|
22079
|
+
flatItems,
|
|
22080
|
+
activeIndex,
|
|
22081
|
+
onHover: setActiveIndex,
|
|
22082
|
+
onSelect: handleSelect
|
|
22083
|
+
};
|
|
22084
|
+
if (isMobile) {
|
|
22085
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22086
|
+
/* @__PURE__ */ jsx("div", { className: "fixed top-0 left-0 right-0 z-[100] px-3 py-2 bg-background", children: /* @__PURE__ */ jsx(
|
|
22087
|
+
DebouncedInput,
|
|
22088
|
+
{
|
|
22089
|
+
ref: inputRef,
|
|
22090
|
+
value: query,
|
|
22091
|
+
debounce: debounceDelay,
|
|
22092
|
+
onChange: handleQueryChangeMobile,
|
|
22093
|
+
placeholder: searchPlaceholder
|
|
22094
|
+
}
|
|
22095
|
+
) }),
|
|
22096
|
+
/* @__PURE__ */ jsx(AnimatePresence, { children: showList && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22097
|
+
/* @__PURE__ */ jsx(
|
|
22098
|
+
motion.div,
|
|
22099
|
+
{
|
|
22100
|
+
initial: { opacity: 0 },
|
|
22101
|
+
animate: { opacity: 1 },
|
|
22102
|
+
exit: { opacity: 0 },
|
|
22103
|
+
transition: ANIMATION.overlay,
|
|
22104
|
+
className: "fixed inset-0 z-[98] bg-background/60 backdrop-blur-[2px]",
|
|
22105
|
+
onClick: handleClose
|
|
22106
|
+
}
|
|
22107
|
+
),
|
|
22108
|
+
/* @__PURE__ */ jsxs(
|
|
22109
|
+
motion.div,
|
|
22110
|
+
{
|
|
22111
|
+
initial: { opacity: 0, y: -6 },
|
|
22112
|
+
animate: { opacity: 1, y: 0 },
|
|
22113
|
+
exit: { opacity: 0, y: -6 },
|
|
22114
|
+
transition: ANIMATION.mobilePanel,
|
|
22115
|
+
className: "fixed left-3 right-3 z-[99] bg-popover border border-border rounded-lg shadow-2xl shadow-black/20 dark:shadow-black/50 overflow-hidden top-14",
|
|
22116
|
+
children: [
|
|
22117
|
+
/* @__PURE__ */ jsx(SearchBadges, { terms: searchTerms }),
|
|
22118
|
+
/* @__PURE__ */ jsx(VirtualResultList, { ...sharedListProps })
|
|
22119
|
+
]
|
|
22120
|
+
}
|
|
22121
|
+
)
|
|
22122
|
+
] }) })
|
|
22123
|
+
] });
|
|
22124
|
+
}
|
|
22125
|
+
return /* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22126
|
+
/* @__PURE__ */ jsx(
|
|
22127
|
+
motion.div,
|
|
22128
|
+
{
|
|
22129
|
+
initial: { opacity: 0 },
|
|
22130
|
+
animate: { opacity: 1 },
|
|
22131
|
+
exit: { opacity: 0 },
|
|
22132
|
+
transition: ANIMATION.overlay,
|
|
22133
|
+
className: "fixed inset-0 z-[100] bg-background/80 backdrop-blur-sm",
|
|
22134
|
+
onClick: handleClose
|
|
22135
|
+
}
|
|
22136
|
+
),
|
|
22137
|
+
/* @__PURE__ */ jsxs(
|
|
22138
|
+
motion.div,
|
|
22139
|
+
{
|
|
22140
|
+
initial: { opacity: 0, scale: 0.96, y: -8 },
|
|
22141
|
+
animate: { opacity: 1, scale: 1, y: 0 },
|
|
22142
|
+
exit: { opacity: 0, scale: 0.96, y: -8 },
|
|
22143
|
+
transition: ANIMATION.panel,
|
|
22144
|
+
className: "fixed z-[100] top-12 -translate-x-1/2 -translate-y-1/2 w-full max-w-xl rounded-xl border border-border overflow-hidden shadow-2xl shadow-black/20 dark:shadow-black/60 bg-popover/95 backdrop-blur-xl",
|
|
22145
|
+
style: { maxHeight: "min(600px, 80vh)" },
|
|
22146
|
+
children: [
|
|
22147
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-4 py-2 border-b border-border", children: [
|
|
22148
|
+
/* @__PURE__ */ jsx(
|
|
22149
|
+
MagnifyingGlassIcon,
|
|
22150
|
+
{
|
|
22151
|
+
className: "w-4 h-4 text-muted-foreground flex-shrink-0",
|
|
22152
|
+
weight: "bold"
|
|
22153
|
+
}
|
|
22154
|
+
),
|
|
22155
|
+
/* @__PURE__ */ jsx(
|
|
22156
|
+
DebouncedInput,
|
|
22157
|
+
{
|
|
22158
|
+
ref: inputRef,
|
|
22159
|
+
value: query,
|
|
22160
|
+
debounce: debounceDelay,
|
|
22161
|
+
onChange: handleQueryChange,
|
|
22162
|
+
placeholder: searchPlaceholder,
|
|
22163
|
+
rightIcon: query ? /* @__PURE__ */ jsx(
|
|
22164
|
+
ButtonBase,
|
|
22165
|
+
{
|
|
22166
|
+
variant: "ghost",
|
|
22167
|
+
size: "icon",
|
|
22168
|
+
onClick: handleClearQuery,
|
|
22169
|
+
className: "text-muted-foreground hover:text-red-500 hover:bg-transparent transition-colors",
|
|
22170
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4" })
|
|
22171
|
+
}
|
|
22172
|
+
) : void 0,
|
|
22173
|
+
className: "flex-1 bg-transparent border-none focus-visible:ring-0 outline-none shadow-none px-0 h-7 text-sm caret-primary"
|
|
22174
|
+
}
|
|
22175
|
+
)
|
|
22176
|
+
] }),
|
|
22177
|
+
/* @__PURE__ */ jsx(SearchBadges, { terms: searchTerms }),
|
|
22178
|
+
showList && /* @__PURE__ */ jsx(VirtualResultList, { ...sharedListProps }),
|
|
22179
|
+
/* @__PURE__ */ jsx(FooterBar, { footer, totalItems })
|
|
22180
|
+
]
|
|
22181
|
+
}
|
|
22182
|
+
)
|
|
22183
|
+
] }) });
|
|
22184
|
+
}
|
|
21478
22185
|
|
|
21479
|
-
export { AddButton, Agenda, AgendaDaysToShow, AgendaDaysToShowAgenda, AgendaView, AlertDialogActionBase, AlertDialogBase, AlertDialogCancelBase, AlertDialogContentBase, AlertDialogDescriptionBase, AlertDialogFooterBase, AlertDialogHeaderBase, AlertDialogOverlayBase, AlertDialogPortalBase, AlertDialogTitleBase, AlertDialogTriggerBase, AvatarBase, AvatarCombobox, AvatarFallbackBase, AvatarImageBase, BackButton, Badge, BreadcrumbBase, BreadcrumbEllipsisBase, BreadcrumbItemBase, BreadcrumbLinkBase, BreadcrumbListBase, BreadcrumbPageBase, BreadcrumbSeparatorBase, Brush_default as Brush, ButtonBase, ButtonGroupBase, CENTER_INDEX, CalendarBase, CalendarDndProvider, CalendarDndProviderAgenda, CardBase, CardContentBase, CardDescriptionBase, CardFooterBase, CardHeaderBase, CardTitleBase, CarouselBase, ChangeButton, Chart_default as Chart, ChartControls, ChartHeader, ChartTotalLegend_default as ChartTotalLegend, CheckButton, CheckboxBase, CheckboxTree, CircularProgress, CloseAllButton_default as CloseAllButton, CloseButton, CodeBlock, CollapsibleBase, CollapsibleContentBase, CollapsibleTriggerBase, Combobox, CommandBase, CommandDebouncedInputBase, CommandDialogBase, CommandEmptyBase, CommandGroupBase, CommandInputBase, CommandItemBase, CommandListBase, CommandSeparatorBase, CommandShortcutBase, ContextMenuBase, ContextMenuCheckboxItemBase, ContextMenuContentBase, ContextMenuGroupBase, ContextMenuItemBase, ContextMenuLabelBase, ContextMenuPortalBase, ContextMenuRadioGroupBase, ContextMenuRadioItemBase, ContextMenuSeparatorBase, ContextMenuShortcutBase, ContextMenuSubBase, ContextMenuSubContentBase, ContextMenuSubTriggerBase, ContextMenuTriggerBase, ControlledCombobox, CopyButton, DateTimePicker, DayView, DayViewAgenda, DebouncedInput, DefaultEndHour, DefaultEndHourAgenda, DefaultStartHour, DefaultStartHourAgenda, DestructiveDialog, DialogBase, DialogCloseBase, DialogContentBase, DialogDescriptionBase, DialogFooterBase, DialogHeaderBase, DialogOverlayBase, DialogPortalBase, DialogTitleBase, DialogTriggerBase, DownloadButton, DraggableEvent2 as DraggableEvent, DraggableTooltip_default as DraggableTooltip, DrawerBase, DrawerCloseBase, DrawerContentBase, DrawerDescriptionBase, DrawerFooterBase, DrawerHeaderBase, DrawerOverlayBase, DrawerPortalBase, DrawerTitleBase, DrawerTriggerBase, DropDownMenuBase, DropDownMenuCheckboxItemBase, DropDownMenuContentBase, DropDownMenuGroupBase, DropDownMenuItemBase, DropDownMenuLabelBase, DropDownMenuPortalBase, DropDownMenuRadioGroupBase, DropDownMenuRadioItemBase, DropDownMenuSeparatorBase, DropDownMenuShortcutBase, DropDownMenuSubBase, DropDownMenuSubContentBase, DropDownMenuSubTriggerBase, DropDownMenuTriggerBase, DroppableCell, DroppableCellAgenda, EditButton, EndHour, EndHourAgenda, ErrorMessage_default as ErrorMessage, EventAgenda, EventCalendar, EventDetailModalAgenda, EventDialog, EventGap, EventGapAgenda, EventHeight, EventHeightAgenda, EventItem, EventItemAgenda, EventsPopup, FavoriteButton, FileAccept, FileUploader, FilterButton, HideButton, Highlights_default as Highlights, HorizontalChart_default as HorizontalChart, HorizontalLegend_default as HorizontalLegend, HoverCardBase, HoverCardContentBase, HoverCardTriggerBase, ITEM_HEIGHT, InputBase, InputOTPBase, InputOTPGroupBase, InputOTPSeparatorBase, InputOTPSlotBase, IntegrationModal_default as IntegrationModal, LabelBase_default as LabelBase, Leaderboard, LikeButton, LoadingBase, LockButton, ModalBase, ModalCloseBase, ModalContentBase, ModalDescriptionBase, ModalFooterBase, ModalHeaderBase, ModalOverlayBase, ModalPortalBase, ModalTitleBase, ModalTriggerBase, ModeToggleBase, MonthView, MonthViewAgenda, MoreButton, MultiCombobox, MultiDayOverlay, MultiSelect, MultiSelectBase, MultiSelectContentBase, MultiSelectGroupBase, MultiSelectItemBase, MultiSelectSeparatorBase, MultiSelectTriggerBase, MultiSelectValueBase, NavigationMenuBase, NavigationMenuContentBase, NavigationMenuIndicatorBase, NavigationMenuItemBase, NavigationMenuLinkBase, NavigationMenuListBase, NavigationMenuTriggerBase, NavigationMenuViewportBase, NoData_default as NoData, NotificationButton, NumericInput, PeriodsDropdown_default as PeriodsDropdown, PopoverAnchorBase, PopoverBase, PopoverContentBase, PopoverTriggerBase, ProgressBase, ProgressCirclesBase, ProgressPanelsBase, ProgressSegmentsBase, RadialMenu, RangePicker, RefreshButton, SaveButton, ScrollAreaBase, ScrollBarBase, SearchButton, Select, SelectBase, SelectContentBase, SelectEmpty, SelectGroupBase, SelectItemBase, SelectLabelBase, SelectScrollDownButtonBase, SelectScrollUpButtonBase, SelectSeparatorBase, SelectTriggerBase, SelectValueBase, SeparatorBase, SettingsButton, SheetBase, SheetCloseBase, SheetContentBase, SheetDescriptionBase, SheetFooterBase, SheetHeaderBase, SheetOverlayBase, SheetPortalBase, SheetTitleBase, SheetTriggerBase, ShowOnly_default as ShowOnly, SidebarBase, SidebarContentBase, SidebarFooterBase, SidebarGroupActionBase, SidebarGroupBase, SidebarGroupContentBase, SidebarGroupLabelBase, SidebarHeaderBase, SidebarInputBase, SidebarInsetBase, SidebarMenuActionBase, SidebarMenuBadgeBase, SidebarMenuBase, SidebarMenuButtonBase, SidebarMenuItemBase, SidebarMenuSkeletonBase, SidebarMenuSubBase, SidebarMenuSubButtonBase, SidebarMenuSubItemBase, SidebarProviderBase, SidebarRailBase, SidebarSeparatorBase, SidebarTriggerBase, SkeletonBase, SlideBase, StartHour, StartHourAgenda, StatusIndicator, SwitchBase, SystemTooltip_default as SystemTooltip, TableBase, TableBodyBase, TableCaptionBase, TableCellBase, TableFooterBase, TableHeadBase, TableHeaderBase, TableRowBase, TabsBase, TabsContentBase, TabsListBase, TabsTriggerBase, TextAreaBase, ThemeProviderBase, TimePicker, TimePickerInput, TimeSeries_default as TimeSeries, Toaster, TooltipBase, TooltipContentBase, TooltipProviderBase, TooltipSimple_default as TooltipSimple, TooltipTriggerBase, TooltipWithTotal_default as TooltipWithTotal, UndatedEvents, UniversalTooltipRenderer, UnlockButton, UploadButton, UseSideBarBase, VISIBLE_ITEMS, ViewButton, VisibilityButton, WeekCellsHeight, WeekCellsHeightAgenda, WeekView, WeekViewAgenda, YearViewAgenda, adaptDataForTooltip, addHoursToDate, addHoursToDateAgenda, addMinutesToDateAgenda, badgeVariants, buttonVariantsBase, compactTick, computeChartWidth, computeNiceMax, computeYAxisTickWidth, convert12HourTo24Hour, createValueFormatter, createYTickFormatter, detectDataFields, detectXAxis, display12HourValue, formatDurationAgenda, formatDurationAgendaDays, formatFieldName, formatLinePercentage, generateAdditionalColors, generateColorMap, getAgendaEventsForDay, getAgendaEventsForDayAgenda, getAllEventsForDay, getAllEventsForDayAgenda, getArrowByType, getAutoColorAgenda, getBorderRadiusClasses, getBorderRadiusClassesAgenda, getDateByType, getEventColorClasses, getEventColorClassesAgenda, getEventEndDate, getEventStartDate, getEventsForDay, getEventsForDayAgenda, getItems, getMaxDataValue, getMinDataValue, getSpanningEventsForDay, getSpanningEventsForDayAgenda, getValid12Hour, getValidArrow12Hour, getValidArrowHour, getValidArrowMinuteOrSecond, getValidArrowNumber, getValidHour, getValidMinuteOrSecond, getValidNumber, isMultiDayEvent, isMultiDayEventAgenda, isValid12Hour, isValidHour, isValidMinuteOrSecond, niceCeil, normalizeAttendDate, processIntegrationData, processNeo4jData, renderInsideBarLabel, pillLabelRenderer_default as renderPillLabel, resolveChartMargins, resolveContainerPaddingLeft, set12Hours, setDateByType, setHours, setMinutes, setSeconds, sortEvents, sortEventsAgenda, startOfLocalDay, toast, useBiaxial, useCalendarDnd, useCalendarDndAgenda, useChartClick, useChartDimensions, useChartHighlights, useChartLayout, useChartMinMax, useChartTooltips, useCurrentTimeIndicator, useCurrentTimeIndicatorAgenda, useDrag, useEventVisibility, useEventVisibilityAgenda, useIsMobile, useIsTruncated, useOpenTooltipForPeriod, useProcessedData, useSeriesOpacity, useTheme, useTimeSeriesRange, visualForItem };
|
|
22186
|
+
export { AddButton, Agenda, AgendaDaysToShow, AgendaDaysToShowAgenda, AgendaView, AlertDialogActionBase, AlertDialogBase, AlertDialogCancelBase, AlertDialogContentBase, AlertDialogDescriptionBase, AlertDialogFooterBase, AlertDialogHeaderBase, AlertDialogOverlayBase, AlertDialogPortalBase, AlertDialogTitleBase, AlertDialogTriggerBase, AvatarBase, AvatarCombobox, AvatarFallbackBase, AvatarImageBase, BackButton, Badge, BreadcrumbBase, BreadcrumbEllipsisBase, BreadcrumbItemBase, BreadcrumbLinkBase, BreadcrumbListBase, BreadcrumbPageBase, BreadcrumbSeparatorBase, Brush_default as Brush, ButtonBase, ButtonGroupBase, CENTER_INDEX, CalendarBase, CalendarDndProvider, CalendarDndProviderAgenda, CardBase, CardContentBase, CardDescriptionBase, CardFooterBase, CardHeaderBase, CardTitleBase, CarouselBase, ChangeButton, Chart_default as Chart, ChartControls, ChartHeader, ChartTotalLegend_default as ChartTotalLegend, CheckButton, CheckboxBase, CheckboxTree, CircularProgress, CloseAllButton_default as CloseAllButton, CloseButton, CodeBlock, CollapsibleBase, CollapsibleContentBase, CollapsibleTriggerBase, Combobox, CommandBase, CommandDebouncedInputBase, CommandDialogBase, CommandEmptyBase, CommandGroupBase, CommandInputBase, CommandItemBase, CommandItemRow, CommandListBase, CommandPalette, CommandSeparatorBase, CommandShortcutBase, ContextMenuBase, ContextMenuCheckboxItemBase, ContextMenuContentBase, ContextMenuGroupBase, ContextMenuItemBase, ContextMenuLabelBase, ContextMenuPortalBase, ContextMenuRadioGroupBase, ContextMenuRadioItemBase, ContextMenuSeparatorBase, ContextMenuShortcutBase, ContextMenuSubBase, ContextMenuSubContentBase, ContextMenuSubTriggerBase, ContextMenuTriggerBase, ControlledCombobox, CopyButton, DateTimePicker, DayView, DayViewAgenda, DebouncedInput, DefaultEndHour, DefaultEndHourAgenda, DefaultStartHour, DefaultStartHourAgenda, DestructiveDialog, DialogBase, DialogCloseBase, DialogContentBase, DialogDescriptionBase, DialogFooterBase, DialogHeaderBase, DialogOverlayBase, DialogPortalBase, DialogTitleBase, DialogTriggerBase, DownloadButton, DraggableEvent2 as DraggableEvent, DraggableTooltip_default as DraggableTooltip, DrawerBase, DrawerCloseBase, DrawerContentBase, DrawerDescriptionBase, DrawerFooterBase, DrawerHeaderBase, DrawerOverlayBase, DrawerPortalBase, DrawerTitleBase, DrawerTriggerBase, DropDownMenuBase, DropDownMenuCheckboxItemBase, DropDownMenuContentBase, DropDownMenuGroupBase, DropDownMenuItemBase, DropDownMenuLabelBase, DropDownMenuPortalBase, DropDownMenuRadioGroupBase, DropDownMenuRadioItemBase, DropDownMenuSeparatorBase, DropDownMenuShortcutBase, DropDownMenuSubBase, DropDownMenuSubContentBase, DropDownMenuSubTriggerBase, DropDownMenuTriggerBase, DroppableCell, DroppableCellAgenda, EditButton, EndHour, EndHourAgenda, ErrorMessage_default as ErrorMessage, EventAgenda, EventCalendar, EventDetailModalAgenda, EventDialog, EventGap, EventGapAgenda, EventHeight, EventHeightAgenda, EventItem, EventItemAgenda, EventsPopup, FavoriteButton, FileAccept, FileUploader, FilterButton, GroupLabel, HideButton, Highlights_default as Highlights, HorizontalChart_default as HorizontalChart, HorizontalLegend_default as HorizontalLegend, HoverCardBase, HoverCardContentBase, HoverCardTriggerBase, ITEM_HEIGHT, InputBase, InputOTPBase, InputOTPGroupBase, InputOTPSeparatorBase, InputOTPSlotBase, IntegrationModal_default as IntegrationModal, Kbd, KbdGroup, LabelBase_default as LabelBase, Leaderboard, LikeButton, LoadingBase, LockButton, ModalBase, ModalCloseBase, ModalContentBase, ModalDescriptionBase, ModalFooterBase, ModalHeaderBase, ModalOverlayBase, ModalPortalBase, ModalTitleBase, ModalTriggerBase, ModeToggleBase, MonthView, MonthViewAgenda, MoreButton, MultiCombobox, MultiDayOverlay, MultiSelect, MultiSelectBase, MultiSelectContentBase, MultiSelectGroupBase, MultiSelectItemBase, MultiSelectSeparatorBase, MultiSelectTriggerBase, MultiSelectValueBase, NavigationMenuBase, NavigationMenuContentBase, NavigationMenuIndicatorBase, NavigationMenuItemBase, NavigationMenuLinkBase, NavigationMenuListBase, NavigationMenuTriggerBase, NavigationMenuViewportBase, NoData_default as NoData, NotificationButton, NumericInput, PeriodsDropdown_default as PeriodsDropdown, PopoverAnchorBase, PopoverBase, PopoverContentBase, PopoverTriggerBase, ProgressBase, ProgressCirclesBase, ProgressPanelsBase, ProgressSegmentsBase, RadialMenu, RangePicker, RefreshButton, SaveButton, ScrollAreaBase, ScrollBarBase, SearchButton, Select, SelectBase, SelectContentBase, SelectEmpty, SelectGroupBase, SelectItemBase, SelectLabelBase, SelectScrollDownButtonBase, SelectScrollUpButtonBase, SelectSeparatorBase, SelectTriggerBase, SelectValueBase, SeparatorBase, SettingsButton, SheetBase, SheetCloseBase, SheetContentBase, SheetDescriptionBase, SheetFooterBase, SheetHeaderBase, SheetOverlayBase, SheetPortalBase, SheetTitleBase, SheetTriggerBase, ShowOnly_default as ShowOnly, SidebarBase, SidebarContentBase, SidebarFooterBase, SidebarGroupActionBase, SidebarGroupBase, SidebarGroupContentBase, SidebarGroupLabelBase, SidebarHeaderBase, SidebarInputBase, SidebarInsetBase, SidebarMenuActionBase, SidebarMenuBadgeBase, SidebarMenuBase, SidebarMenuButtonBase, SidebarMenuItemBase, SidebarMenuSkeletonBase, SidebarMenuSubBase, SidebarMenuSubButtonBase, SidebarMenuSubItemBase, SidebarProviderBase, SidebarRailBase, SidebarSeparatorBase, SidebarTriggerBase, SkeletonBase, SlideBase, StartHour, StartHourAgenda, StatusIndicator, SwitchBase, SystemTooltip_default as SystemTooltip, TableBase, TableBodyBase, TableCaptionBase, TableCellBase, TableFooterBase, TableHeadBase, TableHeaderBase, TableRowBase, TabsBase, TabsContentBase, TabsListBase, TabsTriggerBase, TextAreaBase, ThemeProviderBase, TimePicker, TimePickerInput, TimeSeries_default as TimeSeries, Toaster, TooltipBase, TooltipContentBase, TooltipProviderBase, TooltipSimple_default as TooltipSimple, TooltipTriggerBase, TooltipWithTotal_default as TooltipWithTotal, UndatedEvents, UniversalTooltipRenderer, UnlockButton, UploadButton, UseSideBarBase, VISIBLE_ITEMS, ViewButton, VisibilityButton, WeekCellsHeight, WeekCellsHeightAgenda, WeekView, WeekViewAgenda, YearViewAgenda, adaptDataForTooltip, addHoursToDate, addHoursToDateAgenda, addMinutesToDateAgenda, badgeVariants, buttonVariantsBase, compactTick, computeChartWidth, computeNiceMax, computeYAxisTickWidth, convert12HourTo24Hour, createGroup, createItem, createValueFormatter, createYTickFormatter, detectDataFields, detectXAxis, display12HourValue, filterAndScore, formatDurationAgenda, formatDurationAgendaDays, formatFieldName, formatLinePercentage, generateAdditionalColors, generateColorMap, getAgendaEventsForDay, getAgendaEventsForDayAgenda, getAllEventsForDay, getAllEventsForDayAgenda, getArrowByType, getAutoColorAgenda, getBorderRadiusClasses, getBorderRadiusClassesAgenda, getDateByType, getEventColorClasses, getEventColorClassesAgenda, getEventEndDate, getEventStartDate, getEventsForDay, getEventsForDayAgenda, getItems, getMaxDataValue, getMinDataValue, getSpanningEventsForDay, getSpanningEventsForDayAgenda, getValid12Hour, getValidArrow12Hour, getValidArrowHour, getValidArrowMinuteOrSecond, getValidArrowNumber, getValidHour, getValidMinuteOrSecond, getValidNumber, isMultiDayEvent, isMultiDayEventAgenda, isValid12Hour, isValidHour, isValidMinuteOrSecond, niceCeil, normaliseGroups, normalizeAttendDate, normalizeStr, processIntegrationData, processNeo4jData, renderInsideBarLabel, pillLabelRenderer_default as renderPillLabel, resolveChartMargins, resolveContainerPaddingLeft, scoreMatch, set12Hours, setDateByType, setHours, setMinutes, setSeconds, sortEvents, sortEventsAgenda, startOfLocalDay, toast, unionGroups, useBiaxial, useCalendarDnd, useCalendarDndAgenda, useChartClick, useChartDimensions, useChartHighlights, useChartLayout, useChartMinMax, useChartTooltips, useCommandPalette, useCurrentTimeIndicator, useCurrentTimeIndicatorAgenda, useDrag, useEventVisibility, useEventVisibilityAgenda, useIsMobile, useIsTruncated, useOpenTooltipForPeriod, useProcessedData, useRecents, useSeriesOpacity, useTheme, useTimeSeriesRange, visualForItem };
|