@cnc-ti/layout-basic 8.4.0 → 8.6.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.
package/dist/index.d.ts CHANGED
@@ -68,6 +68,24 @@ interface HeaderContainerProps extends HTMLAttributes<HTMLDivElement> {
68
68
  */
69
69
  logoLink?: string;
70
70
  container?: boolean;
71
+ /**
72
+ * Conteúdo opcional exibido à esquerda dos `children` do cabeçalho — a área
73
+ * reservada para o sino de notificações.
74
+ *
75
+ * Não é renderizado quando omitido, então nenhum consumidor atual é afetado.
76
+ * O uso previsto é o componente `HeaderNotifications`, mas qualquer nó React
77
+ * é aceito.
78
+ *
79
+ * @example
80
+ * <HeaderContainer
81
+ * onOpenMenu={toggleSidebar}
82
+ * isOpen={collapsed}
83
+ * notifications={<HeaderNotifications items={notificacoes} />}
84
+ * >
85
+ * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>
86
+ * </HeaderContainer>
87
+ */
88
+ notifications?: ReactNode;
71
89
  }
72
90
  declare const HeaderContainer: React.FC<HeaderContainerProps>;
73
91
  interface ProfileProps extends HTMLAttributes<HTMLDivElement> {
@@ -288,6 +306,11 @@ interface InputProps extends React$1.ComponentProps<"input"> {
288
306
  }
289
307
  declare const Input: React$1.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
290
308
 
309
+ interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaElement> {
310
+ label?: string;
311
+ }
312
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
313
+
291
314
  interface CheckboxProps extends React$1.ComponentProps<"input"> {
292
315
  label?: string;
293
316
  }
@@ -329,6 +352,20 @@ interface BadgeProps extends React__default.HTMLAttributes<HTMLSpanElement> {
329
352
  */
330
353
  declare const Badge: ({ variant, rounded, size, className, ...rest }: BadgeProps) => react_jsx_runtime.JSX.Element;
331
354
 
355
+ interface AvatarProps extends React$1.HTMLAttributes<HTMLSpanElement> {
356
+ /** URL da imagem do usuário. Se ausente ou falhar, exibe o fallback. */
357
+ src?: string | null;
358
+ /** Texto alternativo da imagem. */
359
+ alt?: string;
360
+ /** Conteúdo de fallback quando não há imagem (ex.: iniciais do nome). */
361
+ fallback?: React$1.ReactNode;
362
+ /** Tamanho do avatar. Padrão: "md". */
363
+ size?: "sm" | "md" | "lg" | "xl";
364
+ /** Indica carregamento (esqueleto pulsante). */
365
+ isLoading?: boolean;
366
+ }
367
+ declare function Avatar({ src, alt, fallback, size, isLoading, className, ...props }: AvatarProps): react_jsx_runtime.JSX.Element;
368
+
332
369
  /**
333
370
  * Componente principal do Card.
334
371
  * Utilizado para agrupar visualmente conteúdos relacionados.
@@ -439,27 +476,75 @@ interface TitleProps {
439
476
  */
440
477
  declare function Title({ title, as: Component }: TitleProps): react_jsx_runtime.JSX.Element;
441
478
 
479
+ interface EmptyStateProps extends React$1.HTMLAttributes<HTMLDivElement> {
480
+ icon?: React$1.ReactNode;
481
+ title: string;
482
+ description?: React$1.ReactNode;
483
+ action?: React$1.ReactNode;
484
+ minHeight?: string;
485
+ }
486
+ declare function EmptyState({ icon, title, description, action, minHeight, className, ...props }: EmptyStateProps): react_jsx_runtime.JSX.Element;
487
+
488
+ /**
489
+ * Regra de gênero para o sufixo "encontrad(o|a)s".
490
+ * Se omitido, usa heurística: última letra do `resourceName` é "a" → feminina.
491
+ */
492
+ type ResultMetadataGender = "masc" | "fem";
493
+ interface ResultMetadataProps extends React.HTMLAttributes<HTMLDivElement> {
494
+ /** Nome do recurso a ser exibido (ex: "Negociações", "Subgrupos"). */
495
+ resourceName: string;
496
+ /** Total de registros retornados pela API. */
497
+ total: number;
498
+ /** Quantidade de registros exibidos na tela. */
499
+ displayed: number;
500
+ /** Indica se os dados ainda estão sendo carregados (opcional). */
501
+ isLoading?: boolean;
502
+ /**
503
+ * Gênero forçado para "encontrado(s)" / "encontrada(s)".
504
+ * Use quando a heurística da última letra falha (ex.: "Sistema").
505
+ */
506
+ forceWordGender?: ResultMetadataGender;
507
+ /**
508
+ * A partir de quantos registros exibidos o aviso
509
+ * "Exibindo os X primeiros registros..." aparece. Padrão: 30.
510
+ */
511
+ truncationThreshold?: number;
512
+ }
513
+ declare function ResultMetadata({ resourceName, total, displayed, isLoading, forceWordGender, truncationThreshold, className, ...props }: ResultMetadataProps): react_jsx_runtime.JSX.Element;
514
+
515
+ interface LabelValueProps {
516
+ /** Rótulo exibido em destaque acima do valor. */
517
+ label: string;
518
+ /** Valor exibido. Vazio ou ausente mostra "-". */
519
+ value?: React$1.ReactNode;
520
+ /** Link externo opcional exibido ao lado do valor. */
521
+ href?: string;
522
+ className?: string;
523
+ valueClassName?: string;
524
+ }
525
+ declare function LabelValue({ label, value, href, className, valueClassName, }: LabelValueProps): react_jsx_runtime.JSX.Element;
526
+
527
+ interface ComboboxFooterAction {
528
+ /** Texto do botão (ex.: "Cadastrar Nova Temática") */
529
+ label: React$1.ReactNode;
530
+ /** App abre modal, chama API, atualiza options */
531
+ onClick: (event: React$1.MouseEvent<HTMLButtonElement>) => void;
532
+ /** Variante visual (default: create) */
533
+ variant?: "create" | "confirm" | "outline";
534
+ disabled?: boolean;
535
+ }
536
+ interface ComboboxFooterRenderContext {
537
+ close: () => void;
538
+ }
539
+
442
540
  /**
443
541
  * Representa uma opção que pode ser selecionada no combobox.
444
- * @typedef {Object} ItemOption
445
- * @property {*} value - O valor associado à opção.
446
- * @property {string} label - O rótulo que será exibido para o usuário.
447
542
  */
448
543
  interface ItemOption {
449
544
  value: any;
450
545
  label: string;
451
546
  disabled?: boolean;
452
547
  }
453
- /**
454
- * Propriedades para o componente Combobox.
455
- *
456
- * @typedef {Object} ComboboxProps
457
- * @property {ItemOption[]} [options] - Lista de opções disponíveis para seleção.
458
- * @property {string} [placeholder] - Placeholder exibido quando nenhuma opção estiver selecionada.
459
- * @property {{ placeholder?: string, emptyMessage?: string }} [command] - Configurações do campo de busca da lista de opções.
460
- * @property {(value: string) => void} [onChange] - Função chamada quando uma opção for selecionada.
461
- * @property {string} [value] - Valor atualmente selecionado.
462
- */
463
548
  interface ComboboxProps {
464
549
  options?: ItemOption[];
465
550
  placeholder?: string;
@@ -470,36 +555,44 @@ interface ComboboxProps {
470
555
  onChange?: (value: string) => void;
471
556
  value?: string;
472
557
  onInput?: (value: string) => void;
473
- /** Se o popover deve ter comportamento modal (padrão: false para compatibilidade com Drawers) */
474
558
  modal?: boolean;
475
- /** Classes CSS adicionais para o PopoverContent */
476
559
  popoverClassName?: string;
477
- /** Classes CSS adicionais para o botão trigger */
478
560
  buttonClassName?: string;
479
- /** Desabilita o combobox */
480
561
  disabled?: boolean;
562
+ /** Botão fixo no rodapé do dropdown (ex.: "Cadastrar novo") */
563
+ footerAction?: ComboboxFooterAction;
564
+ /** Slot customizado no rodapé; tem precedência sobre footerAction */
565
+ renderFooter?: (ctx: ComboboxFooterRenderContext) => React$1.ReactNode;
481
566
  }
567
+ declare function Combobox({ options, placeholder, command, onChange, value, onInput, modal, popoverClassName, buttonClassName, disabled, footerAction, renderFooter, }: ComboboxProps): react_jsx_runtime.JSX.Element;
568
+
482
569
  /**
483
- * Componente Combobox reutilizável com suporte a busca, exibição de placeholder e seleção de opções.
484
- *
485
- * @param {ComboboxProps} props - Propriedades do componente.
486
- * @returns {JSX.Element} O componente renderizado.
487
- *
488
- * @example
489
- * ```tsx
490
- * <Combobox
491
- * options={[
492
- * { value: 'apple', label: 'Apple' },
493
- * { value: 'banana', label: 'Banana' },
494
- * ]}
495
- * placeholder="Selecione uma fruta"
496
- * command={{ placeholder: 'Buscar...', emptyMessage: 'Nenhum resultado' }}
497
- * value={selected}
498
- * onChange={(newValue) => setSelected(newValue)}
499
- * />
500
- * ```
570
+ * Representa uma opção selecionável no MultiSelect.
501
571
  */
502
- declare function Combobox({ options, placeholder, command, onChange, value, onInput, modal, popoverClassName, buttonClassName, disabled, }: ComboboxProps): react_jsx_runtime.JSX.Element;
572
+ interface MultiSelectOption<TValue extends string = string> {
573
+ value: TValue;
574
+ label: string;
575
+ disabled?: boolean;
576
+ }
577
+ interface MultiSelectProps<TValue extends string = string> {
578
+ options?: MultiSelectOption<TValue>[];
579
+ value?: TValue[];
580
+ onChange?: (value: TValue[]) => void;
581
+ placeholder?: string;
582
+ disabled?: boolean;
583
+ modal?: boolean;
584
+ className?: string;
585
+ buttonClassName?: string;
586
+ popoverClassName?: string;
587
+ command?: {
588
+ placeholder?: string;
589
+ emptyMessage?: React$1.ReactNode;
590
+ };
591
+ selectedCountText?: (count: number) => string;
592
+ footerAction?: ComboboxFooterAction;
593
+ renderFooter?: (ctx: ComboboxFooterRenderContext) => React$1.ReactNode;
594
+ }
595
+ declare function MultiSelect<TValue extends string = string>({ options, value, onChange, placeholder, disabled, modal, className, buttonClassName, popoverClassName, command, selectedCountText, footerAction, renderFooter, }: MultiSelectProps<TValue>): react_jsx_runtime.JSX.Element;
503
596
 
504
597
  declare const Command: React$1.ForwardRefExoticComponent<Omit<{
505
598
  children?: React$1.ReactNode;
@@ -579,6 +672,49 @@ declare const CommandShortcut: {
579
672
  displayName: string;
580
673
  };
581
674
 
675
+ interface ConfirmDialogProps {
676
+ /** Controla a abertura/fechamento do diálogo. */
677
+ open: boolean;
678
+ onOpenChange: (open: boolean) => void;
679
+ /** Título do diálogo (ex.: "Excluir demanda"). */
680
+ title: string;
681
+ /** Descrição/confirmação da ação (pode conter elementos em destaque). */
682
+ description?: React$1.ReactNode;
683
+ /** Rótulo da ação de confirmação. Padrão: "Confirmar". */
684
+ confirmLabel?: string;
685
+ /** Rótulo da ação de cancelamento. Padrão: "Cancelar". */
686
+ cancelLabel?: string;
687
+ /** Rótulo exibido no botão de confirmação durante o carregamento. */
688
+ loadingLabel?: string;
689
+ /**
690
+ * Chamado ao confirmar. Se retornar uma Promise, o botão entra em estado
691
+ * de carregamento até ela resolver. O fechamento fica a cargo do consumidor.
692
+ */
693
+ onConfirm?: () => void | Promise<void>;
694
+ /** Ícone exibido no círculo do cabeçalho. Padrão: ícone de lixeira. */
695
+ icon?: React$1.ReactNode;
696
+ /** Exibe o círculo colorido atrás do ícone. Padrão: `true`. */
697
+ showIconBackground?: boolean;
698
+ /** Alinhamento dos botões no rodapé. Padrão: `"center"`. */
699
+ footerAlign?: "center" | "end";
700
+ /** Variante do botão de confirmação. Padrão: "danger". */
701
+ confirmVariant?: "danger" | "confirm";
702
+ /** Conteúdo extra entre a descrição e o rodapé (ex.: Checkbox de confirmação). */
703
+ children?: React$1.ReactNode;
704
+ /** Controla o estado de carregamento externamente, sobrescrevendo o interno. */
705
+ isLoading?: boolean;
706
+ className?: string;
707
+ }
708
+ declare function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, cancelLabel, loadingLabel, onConfirm, icon, showIconBackground, footerAlign, confirmVariant, children, isLoading, className, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
709
+
710
+ interface TooltipProps {
711
+ text: React$1.ReactNode;
712
+ children: React$1.ReactNode;
713
+ className?: string;
714
+ contentClassName?: string;
715
+ }
716
+ declare function Tooltip({ text, children, className, contentClassName, }: TooltipProps): react_jsx_runtime.JSX.Element;
717
+
582
718
  type FilterFieldType = "text" | "combobox" | "switch" | "date";
583
719
  type FilterValues = Record<string, string | boolean>;
584
720
  interface FilterField {
@@ -619,4 +755,440 @@ interface CardListProps<T> {
619
755
  }
620
756
  declare function CardList<T>({ items, renderCard, emptyMessage, minItemWidth, className, gap, getKey, isLoading, skeletonCount, }: CardListProps<T>): react_jsx_runtime.JSX.Element;
621
757
 
622
- export { AplicationsHeader, type AppInput, type AppItem, AppsMenu, type AppsMenuProps, Badge, type BadgeSize, type BadgeVariant, Button, type ButtonProps, Card, CardContent, CardFooter, CardFooterItem, CardHeader, CardList, type CardListProps, Checkbox, type CheckboxProps, Collapsible, AnimatedCollapsibleContent as CollapsibleContent, CollapsibleTrigger, Combobox, type ComboboxProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Filter, type FilterField, type FilterFieldType, type FilterProps, type FilterValues, Header, HeaderContainer, HeaderProfileHeader, HeaderProfileItem, type HeaderProps, Input, type InputProps, type ItemOption, Modal, ModalEntidade, ModalMudancaEntidade, type ModalProps, PageHeader, PageHeaderActionsContainer, PageHeaderTitle, PageHeaderTitleContent, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectPortal, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectViewport, Sidebar, SidebarContainer, type SidebarContainerProps, SidebarImageBrand, type SidebarImageBrandProps, SidebarNavCollapse, type SidebarNavCollapseProps, SidebarNavLink, type SidebarNavLinkProps, type SidebarProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, TabsTrigger, Title, availableApps, buttonVariants };
758
+ declare const Drawer: React$1.FC<DialogPrimitive.DialogProps>;
759
+ declare const DrawerTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
760
+ declare const DrawerPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
761
+ declare const DrawerClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
762
+ declare const DrawerOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
763
+ interface DrawerContentProps extends React$1.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
764
+ /** Lado da tela em que o painel desliza. Padrão: "right". */
765
+ side?: "left" | "right";
766
+ /** Largura pré-definida do painel em telas >= sm. Padrão: "md". */
767
+ size?: "sm" | "md" | "lg" | "xl" | "full";
768
+ /** Largura customizada (sobrescreve `size`). */
769
+ width?: string;
770
+ /** Exibe o botão de fechar padrão no canto superior. Padrão: true. */
771
+ closeButton?: boolean;
772
+ }
773
+ declare const DrawerContent: React$1.ForwardRefExoticComponent<DrawerContentProps & React$1.RefAttributes<HTMLDivElement>>;
774
+ declare const DrawerHeader: {
775
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
776
+ displayName: string;
777
+ };
778
+ declare const DrawerBody: {
779
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
780
+ displayName: string;
781
+ };
782
+ declare const DrawerFooter: {
783
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
784
+ displayName: string;
785
+ };
786
+ declare const DrawerTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
787
+ declare const DrawerDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
788
+
789
+ /**
790
+ * Contexto opcional para orquestrar múltiplos `Drawer`s por id, no padrão
791
+ * `activeDrawer`/`openDrawer(id)` já usado nos projetos consumidores.
792
+ *
793
+ * Uso típico:
794
+ * ```tsx
795
+ * <DrawerProvider>
796
+ * <MinhaPagina />
797
+ * </DrawerProvider>
798
+ *
799
+ * const { isOpen, openDrawer, closeDrawer } = useDrawer();
800
+ * <Drawer open={isOpen("detalhes")} onOpenChange={(open) => !open && closeDrawer()}>
801
+ * ...
802
+ * </Drawer>
803
+ * ```
804
+ */
805
+ interface DrawerContextValue {
806
+ activeDrawer: string | null;
807
+ openDrawer: (drawerId: string) => void;
808
+ closeDrawer: () => void;
809
+ isOpen: (drawerId: string) => boolean;
810
+ }
811
+ interface DrawerProviderProps {
812
+ children: React$1.ReactNode;
813
+ }
814
+ declare const DrawerContext: React$1.Context<DrawerContextValue | undefined>;
815
+ declare function DrawerProvider({ children }: DrawerProviderProps): react_jsx_runtime.JSX.Element;
816
+
817
+ declare function useDrawer(): DrawerContextValue;
818
+
819
+ type FileRejectionReason = "type" | "size" | "duplicate";
820
+ interface FileRejection {
821
+ file: File;
822
+ reason: FileRejectionReason;
823
+ /** Mensagem pronta para ser exibida pelo consumidor. */
824
+ message: string;
825
+ }
826
+ interface ValidateFilesOptions {
827
+ currentFiles?: File[];
828
+ incomingFiles: File[];
829
+ allowedTypes?: string[];
830
+ maxSize?: number;
831
+ multiple?: boolean;
832
+ }
833
+ /** Formata bytes em KB ou MB usando localidade pt-BR. */
834
+ declare function formatFileSize(bytes: number): string;
835
+ /**
836
+ * Valida um lote de arquivos e separa itens aceitos de itens recusados.
837
+ */
838
+ declare function validateFiles({ currentFiles, incomingFiles, allowedTypes, maxSize, multiple, }: ValidateFilesOptions): {
839
+ acceptedFiles: File[];
840
+ rejectedFiles: FileRejection[];
841
+ };
842
+
843
+ interface FileUploadProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
844
+ /** Arquivos atualmente selecionados. */
845
+ value?: File[];
846
+ onChange?: (files: File[]) => void;
847
+ /** Permite selecionar mais de um arquivo. Padrão: true. */
848
+ multiple?: boolean;
849
+ /** Valor repassado ao input nativo. */
850
+ accept?: string;
851
+ /** Lista de MIME types aceitos para validação em JavaScript. */
852
+ allowedTypes?: string[];
853
+ /** Tamanho máximo por arquivo, em bytes. */
854
+ maxSize?: number;
855
+ disabled?: boolean;
856
+ /** Indica que uma operação externa está em andamento. */
857
+ isLoading?: boolean;
858
+ /** Rótulo exibido no botão de seleção. */
859
+ buttonLabel?: string;
860
+ /** Texto de apoio abaixo do botão. */
861
+ hint?: React$1.ReactNode;
862
+ /** Ícone exibido no botão. */
863
+ icon?: React$1.ReactNode;
864
+ /** Chamado quando um ou mais arquivos são rejeitados. */
865
+ onReject?: (rejections: FileRejection[]) => void;
866
+ /** Exibe a lista de arquivos selecionados abaixo do botão. */
867
+ showList?: boolean;
868
+ /** Personaliza o título da lista de pendentes. */
869
+ listTitle?: (count: number) => React$1.ReactNode;
870
+ buttonClassName?: string;
871
+ listClassName?: string;
872
+ }
873
+ declare const FileUpload: React$1.ForwardRefExoticComponent<FileUploadProps & React$1.RefAttributes<HTMLInputElement>>;
874
+
875
+ interface FileListItem {
876
+ /** Chave estável do item. */
877
+ id: string;
878
+ /** Nome do arquivo exibido para o usuário. */
879
+ name: string;
880
+ /** Tamanho em bytes, quando disponível. */
881
+ size?: number;
882
+ /** Linha secundária de metadados. */
883
+ meta?: React$1.ReactNode;
884
+ /** Descrição opcional exibida abaixo dos metadados. */
885
+ description?: React$1.ReactNode;
886
+ /** Indica que o item representa um arquivo ainda não persistido. */
887
+ status?: "pending" | "persisted";
888
+ disabled?: boolean;
889
+ }
890
+ interface FileListProps extends React$1.HTMLAttributes<HTMLUListElement> {
891
+ items: FileListItem[];
892
+ onRemove?: (item: FileListItem, index: number) => void;
893
+ onDownload?: (item: FileListItem, index: number) => void;
894
+ disabled?: boolean;
895
+ variant?: "bordered" | "plain";
896
+ emptyState?: React$1.ReactNode;
897
+ removeLabel?: string;
898
+ }
899
+ declare function FileList({ items, onRemove, onDownload, disabled, variant, emptyState, removeLabel, className, ...props }: FileListProps): react_jsx_runtime.JSX.Element | null;
900
+
901
+ declare const MESES_PT_BR: readonly ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
902
+ declare const MESES_PT_BR_ABREV: readonly ["JAN", "FEV", "MAR", "ABR", "MAI", "JUN", "JUL", "AGO", "SET", "OUT", "NOV", "DEZ"];
903
+ declare const DIAS_SEMANA_PT_BR: readonly ["DOM", "SEG", "TER", "QUA", "QUI", "SEX", "SÁB"];
904
+ /** Formata uma Date como `yyyy-MM-dd` no horário local. */
905
+ declare function toDateKey(date: Date): string;
906
+ /** Normaliza uma Date para o meio-dia do dia local (evita deslocamento de fuso). */
907
+ declare function toLocalNoon(date: Date): Date;
908
+ declare function isSameDay(a: Date, b: Date): boolean;
909
+ declare function isToday(date: Date): boolean;
910
+ interface MonthDay {
911
+ /** Dia ao meio-dia local. */
912
+ date: Date;
913
+ number: number;
914
+ /** Chave `yyyy-MM-dd` do dia. */
915
+ dateKey: string;
916
+ isToday: boolean;
917
+ isSelected: boolean;
918
+ hasItems: boolean;
919
+ }
920
+ /**
921
+ * Monta a grade de dias de um mês a partir de domingo.
922
+ * Células `null` no início representam o deslocamento do primeiro dia da semana.
923
+ */
924
+ declare function buildMonthDays(month: Date, selectedDate?: Date | null, hasItems?: (date: Date) => boolean): (MonthDay | null)[];
925
+ /** Formata um mês como "Setembro 2026". */
926
+ declare function formatMonthYear(date: Date): string;
927
+ /** Rótulo completo de um dia para leitores de tela, ex.: "quinta-feira, 27 de agosto de 2026". */
928
+ declare function formatDayAriaLabel(date: Date): string;
929
+
930
+ interface MiniMonthCalendarDay extends MonthDay {
931
+ }
932
+ interface MiniMonthCalendarProps {
933
+ /** Mês exibido (controlado). Ausente ou vazio usa o mês atual. */
934
+ month?: Date;
935
+ /** Chamado ao navegar para outro mês. */
936
+ onMonthChange?: (month: Date) => void;
937
+ /** Data selecionada (controlada). */
938
+ selectedDate?: Date | null;
939
+ /** Chamado ao clicar em um dia. */
940
+ onSelectDate?: (date: Date) => void;
941
+ /** Indica se o dia tem itens — mostra um ponto indicador abaixo do número. */
942
+ hasItems?: (date: Date) => boolean;
943
+ /** Substitui o conteúdo interno de cada célula de dia. */
944
+ renderDay?: (day: MiniMonthCalendarDay) => React$1.ReactNode;
945
+ /** Cabeçalho dos dias da semana. Padrão: DOM..SÁB. */
946
+ weekDays?: readonly string[];
947
+ /** Texto do título do mês. Padrão: formatMonthYear. */
948
+ monthLabel?: (month: Date) => string;
949
+ previousLabel?: string;
950
+ nextLabel?: string;
951
+ className?: string;
952
+ }
953
+ declare function MiniMonthCalendar({ month: monthProp, onMonthChange, selectedDate, onSelectDate, hasItems, renderDay, weekDays, monthLabel, previousLabel, nextLabel, className, }: MiniMonthCalendarProps): react_jsx_runtime.JSX.Element;
954
+
955
+ interface MonthYearPickerProps {
956
+ /** Mês/ano atual (controlado). */
957
+ value: Date;
958
+ onChange: (date: Date) => void;
959
+ disabled?: boolean;
960
+ /** Texto do trigger. Padrão: formatMonthYear. */
961
+ triggerLabel?: (value: Date) => string;
962
+ previousYearLabel?: string;
963
+ nextYearLabel?: string;
964
+ className?: string;
965
+ triggerClassName?: string;
966
+ contentClassName?: string;
967
+ }
968
+ declare function MonthYearPicker({ value, onChange, disabled, triggerLabel, previousYearLabel, nextYearLabel, className, triggerClassName, contentClassName, }: MonthYearPickerProps): react_jsx_runtime.JSX.Element;
969
+
970
+ interface PeriodRange {
971
+ /** Identificador estável para React (gerado se ausente) */
972
+ id?: string;
973
+ start: string;
974
+ end: string;
975
+ }
976
+ type PeriodRangeInputType = "datetime-local" | "date";
977
+ interface PeriodRangeListLabels {
978
+ start?: string;
979
+ end?: string;
980
+ add?: string;
981
+ empty?: string;
982
+ startColumn?: string;
983
+ endColumn?: string;
984
+ actionsColumn?: string;
985
+ }
986
+ interface PeriodRangeListValidateOptions {
987
+ endAfterStart?: boolean;
988
+ noDuplicates?: boolean;
989
+ minItems?: number;
990
+ }
991
+ interface PeriodRangeListProps {
992
+ value?: PeriodRange[];
993
+ onChange?: (periods: PeriodRange[]) => void;
994
+ inputType?: PeriodRangeInputType;
995
+ labels?: PeriodRangeListLabels;
996
+ readOnly?: boolean;
997
+ disabled?: boolean;
998
+ required?: boolean;
999
+ error?: string;
1000
+ validate?: PeriodRangeListValidateOptions;
1001
+ className?: string;
1002
+ }
1003
+ declare function PeriodRangeList({ value, onChange, inputType, labels: labelsProp, readOnly, disabled, required, error, validate, className, }: PeriodRangeListProps): react_jsx_runtime.JSX.Element;
1004
+ /** Alias explícito para formulários só com data */
1005
+ declare const DateTimeRangeList: typeof PeriodRangeList;
1006
+
1007
+ type StatusNotificacao = "PENDENTE" | "AGENDADO" | "ENVIADO" | "PROCESSADO" | "FALHOU" | "CANCELADO" | "CONCLUIDO";
1008
+ type StatusLeitura = "NAO_LIDO" | "ENTREGUE" | "LIDO";
1009
+ /** Registro devolvido por `GET {baseUrl}/notificacoes`. */
1010
+ interface Notificacao {
1011
+ id: string | number;
1012
+ sistema: string;
1013
+ titulo: string;
1014
+ mensagem?: string | null;
1015
+ dataReferencia: string;
1016
+ destinatarioEmail?: string | null;
1017
+ status: StatusNotificacao;
1018
+ statusLeitura: StatusLeitura;
1019
+ metadados?: Record<string, unknown> | null;
1020
+ lembrarNoDia?: boolean;
1021
+ diasAntes?: number | null;
1022
+ alertasDiasAntes?: number[] | null;
1023
+ dataLembrete?: string | null;
1024
+ disparado?: boolean;
1025
+ criadoEm?: string | null;
1026
+ criadoPor?: string | null;
1027
+ disparadoEm?: string | null;
1028
+ entregueEm?: string | null;
1029
+ lidoEm?: string | null;
1030
+ canceladoEm?: string | null;
1031
+ concluidoEm?: string | null;
1032
+ motivoCancelamento?: string | null;
1033
+ }
1034
+ interface HeaderNotificationItem {
1035
+ /** Identificador único. Usado como `key` da lista. */
1036
+ id: string | number;
1037
+ /** Título da notificação. */
1038
+ title: string;
1039
+ /** Texto complementar, limitado a duas linhas. */
1040
+ message?: string;
1041
+ /** Data já formatada, ex.: "há 5 minutos". */
1042
+ date?: string;
1043
+ /** Quando `false` ou ausente, o item conta no badge e fica destacado. */
1044
+ read?: boolean;
1045
+ /** Destino sugerido, para a aplicação usar no `onSelect`. Não navega sozinho. */
1046
+ href?: string;
1047
+ }
1048
+ interface HeaderNotificationsBaseProps {
1049
+ /** Quantidade de skeletons durante o loading. @defaultValue 3 */
1050
+ skeletonCount?: number;
1051
+ /** Título do painel. @defaultValue "Notificações" */
1052
+ title?: string;
1053
+ /** Mensagem do estado vazio. @defaultValue "Nenhuma notificação" */
1054
+ emptyMessage?: string;
1055
+ /** A partir deste valor o badge exibe "N+". @defaultValue 9 */
1056
+ maxCount?: number;
1057
+ /**
1058
+ * Ação extra no clique, além de marcar como lida. Só com ela o painel fecha
1059
+ * e só com ela há navegação — o componente nunca navega por conta própria.
1060
+ * Use `item.href`, preenchido por `getHref`, para decidir o destino.
1061
+ */
1062
+ onSelect?: (item: HeaderNotificationItem) => void;
1063
+ /** Clique em uma notificação não lida, chamada antes de `onSelect`. */
1064
+ onMarkAsRead?: (item: HeaderNotificationItem) => void;
1065
+ /**
1066
+ * Habilita o botão de marcar como não lida em cada item. No modo conectado o
1067
+ * componente já faz a chamada; aqui a aplicação só é avisada.
1068
+ */
1069
+ onMarkAsUnread?: (item: HeaderNotificationItem) => void;
1070
+ /**
1071
+ * Habilita a lixeira em cada item. No modo conectado o componente já exclui
1072
+ * na API; aqui a aplicação só é avisada. **A exclusão é definitiva.**
1073
+ */
1074
+ onDelete?: (item: HeaderNotificationItem) => void;
1075
+ /** "Marcar todas como lidas", exibida só quando há não lidas. */
1076
+ onMarkAllAsRead?: () => void;
1077
+ /** Abertura e fechamento do painel. */
1078
+ onOpenChange?: (open: boolean) => void;
1079
+ /** Rodapé customizado. Substitui os botões padrão do rodapé. */
1080
+ footer?: React$1.ReactNode;
1081
+ /** Alinhamento do painel em relação ao sino. @defaultValue "end" */
1082
+ align?: "start" | "center" | "end";
1083
+ /** Classes adicionais do botão do sino. */
1084
+ className?: string;
1085
+ /** Classes adicionais do painel. */
1086
+ contentClassName?: string;
1087
+ }
1088
+ /** Modo controlado: a aplicação busca e formata, o componente só exibe. */
1089
+ interface HeaderNotificationsControladoProps extends HeaderNotificationsBaseProps {
1090
+ /** Notificações exibidas no painel. */
1091
+ items?: HeaderNotificationItem[];
1092
+ /** Quando `true`, exibe skeletons no lugar da lista. */
1093
+ isLoading?: boolean;
1094
+ /** Contagem do badge. Quando omitida, é derivada de `items`. */
1095
+ unreadCount?: number;
1096
+ email?: never;
1097
+ sistema?: never;
1098
+ baseUrl?: never;
1099
+ getHref?: never;
1100
+ filtros?: never;
1101
+ intervaloAtualizacao?: never;
1102
+ limite?: never;
1103
+ onErro?: never;
1104
+ alertarLembretes?: never;
1105
+ tituloLembretes?: never;
1106
+ rotuloDispensarLembretes?: never;
1107
+ }
1108
+ /** Modo conectado: o componente busca no serviço de notificações sozinho. */
1109
+ interface HeaderNotificationsConectadoProps extends HeaderNotificationsBaseProps {
1110
+ /** E-mail do destinatário. Vira `?email=` no GET. */
1111
+ email: string;
1112
+ /** Identificador do sistema chamador, ex.: "gestao-demandas". */
1113
+ sistema: string;
1114
+ /**
1115
+ * Raiz da API já versionada, ex.: `https://.../v1`. Quando omitida, usa
1116
+ * `URL_PADRAO_NOTIFICACOES`, que aponta para o **ambiente de
1117
+ * desenvolvimento** — em produção passe explicitamente.
1118
+ */
1119
+ baseUrl?: string;
1120
+ /**
1121
+ * Preenche `item.href` a partir de `metadados`. **Não navega sozinho** — só
1122
+ * serve para o `onSelect` da aplicação saber para onde ir. Sem `onSelect`, o
1123
+ * clique apenas marca como lida.
1124
+ */
1125
+ getHref?: (notificacao: Notificacao) => string | undefined;
1126
+ /** Filtros de metadado enviados na query, ex.: `{ demandaId: "123" }`. */
1127
+ filtros?: Record<string, string>;
1128
+ /** Intervalo do polling em ms. `0` desliga. @defaultValue 60000 */
1129
+ intervaloAtualizacao?: number;
1130
+ /** Corte client-side — a API não pagina. @defaultValue 20 */
1131
+ limite?: number;
1132
+ /** Recebe falhas de rede em vez de deixá-las silenciosas. */
1133
+ onErro?: (erro: Error) => void;
1134
+ /**
1135
+ * Abre um modal ao carregar quando existe lembrete vencido — notificação com
1136
+ * `lembrarNoDia` ligado e `dataLembrete` já vencido. Fechar o modal marca
1137
+ * esses lembretes como lidos. @defaultValue false
1138
+ */
1139
+ alertarLembretes?: boolean;
1140
+ /** Título do modal de lembretes. Por padrão varia com a quantidade. */
1141
+ tituloLembretes?: string;
1142
+ /** Texto do botão que dispensa o modal. @defaultValue "Entendi" */
1143
+ rotuloDispensarLembretes?: string;
1144
+ items?: never;
1145
+ isLoading?: never;
1146
+ unreadCount?: never;
1147
+ }
1148
+ type HeaderNotificationsProps = HeaderNotificationsControladoProps | HeaderNotificationsConectadoProps;
1149
+
1150
+ /**
1151
+ * Usada quando `baseUrl` não é informada. Aponta para o ambiente de
1152
+ * desenvolvimento — em produção passe a prop explicitamente, senão a aplicação
1153
+ * lê e grava no dev.
1154
+ */
1155
+ declare const URL_PADRAO_NOTIFICACOES = "https://dev-apinotificacoes-b5feekb4bdfyb7c2.eastus2-01.azurewebsites.net/v1";
1156
+ declare class ErroNotificacoes extends Error {
1157
+ readonly status?: number;
1158
+ constructor(mensagem: string, status?: number);
1159
+ }
1160
+
1161
+ /**
1162
+ * Sino de notificações do cabeçalho: badge de não lidas, painel com a lista,
1163
+ * estados de loading e vazio, marcar todas como lidas e atalho para a tela
1164
+ * completa.
1165
+ *
1166
+ * Opera em dois modos, mutuamente exclusivos pelo tipo:
1167
+ *
1168
+ * **Conectado** — recebe `email` e `sistema` e cuida sozinho de buscar,
1169
+ * formatar a data, filtrar o que já aconteceu e marcar como lida. `baseUrl` é
1170
+ * opcional e cai em `URL_PADRAO_NOTIFICACOES`, que aponta para o ambiente de
1171
+ * desenvolvimento — em produção passe a prop.
1172
+ *
1173
+ * **Controlado** — recebe `items` já prontos e devolve as interações por
1174
+ * callback, sem fazer nenhuma requisição.
1175
+ *
1176
+ * @example
1177
+ * <HeaderContainer
1178
+ * onOpenMenu={toggleSidebar}
1179
+ * isOpen={collapsed}
1180
+ * notifications={
1181
+ * <HeaderNotifications
1182
+ * email={sessao.user.email}
1183
+ * sistema="gestao-demandas"
1184
+ * getHref={(n) => `/demandas/${n.metadados?.demandaId}`}
1185
+ * onViewAll={() => router.push("/notificacoes")}
1186
+ * />
1187
+ * }
1188
+ * >
1189
+ * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>
1190
+ * </HeaderContainer>
1191
+ */
1192
+ declare function HeaderNotifications(props: HeaderNotificationsProps): react_jsx_runtime.JSX.Element;
1193
+
1194
+ export { AplicationsHeader, type AppInput, type AppItem, AppsMenu, type AppsMenuProps, Avatar, type AvatarProps, Badge, type BadgeSize, type BadgeVariant, Button, type ButtonProps, Card, CardContent, CardFooter, CardFooterItem, CardHeader, CardList, type CardListProps, Checkbox, type CheckboxProps, Collapsible, AnimatedCollapsibleContent as CollapsibleContent, CollapsibleTrigger, Combobox, type ComboboxFooterAction, type ComboboxFooterRenderContext, type ComboboxProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, DIAS_SEMANA_PT_BR, DateTimeRangeList, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, type DrawerContentProps, DrawerContext, type DrawerContextValue, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerProvider, type DrawerProviderProps, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ErroNotificacoes, FileList, type FileListItem, type FileListProps, type FileRejection, type FileRejectionReason, FileUpload, type FileUploadProps, Filter, type FilterField, type FilterFieldType, type FilterProps, type FilterValues, Header, HeaderContainer, type HeaderNotificationItem, HeaderNotifications, type HeaderNotificationsBaseProps, type HeaderNotificationsConectadoProps, type HeaderNotificationsControladoProps, type HeaderNotificationsProps, HeaderProfileHeader, HeaderProfileItem, type HeaderProps, Input, type InputProps, type ItemOption, LabelValue, type LabelValueProps, MESES_PT_BR, MESES_PT_BR_ABREV, MiniMonthCalendar, type MiniMonthCalendarDay, type MiniMonthCalendarProps, Modal, ModalEntidade, ModalMudancaEntidade, type ModalProps, type MonthDay, MonthYearPicker, type MonthYearPickerProps, MultiSelect, type MultiSelectOption, type MultiSelectProps, type Notificacao, PageHeader, PageHeaderActionsContainer, PageHeaderTitle, PageHeaderTitleContent, type PeriodRange, type PeriodRangeInputType, PeriodRangeList, type PeriodRangeListLabels, type PeriodRangeListProps, type PeriodRangeListValidateOptions, Popover, PopoverContent, PopoverTrigger, ResultMetadata, type ResultMetadataGender, type ResultMetadataProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectPortal, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectViewport, Sidebar, SidebarContainer, type SidebarContainerProps, SidebarImageBrand, type SidebarImageBrandProps, SidebarNavCollapse, type SidebarNavCollapseProps, SidebarNavLink, type SidebarNavLinkProps, type SidebarProps, type StatusLeitura, type StatusNotificacao, Switch, type SwitchProps, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Title, Tooltip, type TooltipProps, URL_PADRAO_NOTIFICACOES, type ValidateFilesOptions, availableApps, buildMonthDays, buttonVariants, formatDayAriaLabel, formatFileSize, formatMonthYear, isSameDay, isToday, toDateKey, toLocalNoon, useDrawer, validateFiles };