@proef/common-ui 2.6.5 → 2.6.6

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.
@@ -0,0 +1,92 @@
1
+ import React from 'react';
2
+ import { type ButtonProps } from '../../../primitives/buttons/Button/Button';
3
+ export interface DropdownMenuItemAction {
4
+ /** Ícone do botão pequeno (ex: um caixote do lixo). */
5
+ icon: React.ReactNode;
6
+ /** Nome do botão, para o tooltip e leitores de ecrã (ex: "Apagar vista"). */
7
+ label: string;
8
+ onSelect: () => void;
9
+ }
10
+ export interface DropdownMenuItem {
11
+ /** Normalmente texto; aceita JSX. */
12
+ label: React.ReactNode;
13
+ /** Linha pequena por baixo do texto. */
14
+ description?: React.ReactNode;
15
+ /** Ícone à esquerda (ex: um ícone do lucide com `size={14}`). */
16
+ icon?: React.ReactNode;
17
+ /** O que o item faz. Um item normal fecha o menu ao ser escolhido. */
18
+ onSelect?: () => void;
19
+ /**
20
+ * Item de marcar (✓ quando `true`). O menu fica aberto para se marcarem
21
+ * vários (ex: filtrar por tipos). `false` = por marcar, `undefined` = não é de marcar.
22
+ */
23
+ checked?: boolean;
24
+ /** A opção atual numa escolha de uma só (ex: a vista aplicada): ✓, e escolher fecha o menu como uma ação. */
25
+ selected?: boolean;
26
+ /** Apaga ou não se pode desfazer: a vermelho. */
27
+ danger?: boolean;
28
+ disabled?: boolean;
29
+ /** Linha a separar este item do anterior. */
30
+ separator?: boolean;
31
+ /** Texto para a pesquisa quando o `label` não é texto. */
32
+ searchText?: string;
33
+ /** Botão pequeno à direita do item (ex: apagar uma vista guardada). Não fecha o menu. */
34
+ action?: DropdownMenuItemAction;
35
+ }
36
+ export interface DropdownMenuLabels {
37
+ /** Nome do botão sem texto (⋯). */
38
+ more: string;
39
+ /** Texto da caixa de pesquisa. */
40
+ search: string;
41
+ /** Pesquisa sem resultados. */
42
+ noResults: string;
43
+ /** DropdownMenu sem itens (só aparece com `header`; sem `header` o menu nem se mostra). */
44
+ empty: string;
45
+ }
46
+ export declare const DEFAULT_DROPDOWN_MENU_LABELS: DropdownMenuLabels;
47
+ export interface DropdownMenuProps {
48
+ /** Os itens; `false`, `null` e `undefined` são ignorados (para `cond && {...}`). */
49
+ items: (DropdownMenuItem | false | null | undefined)[];
50
+ /** Texto do botão (com uma seta). Sem texto, o botão é o ⋯ (ações de uma linha ou de um cartão). */
51
+ label?: React.ReactNode;
52
+ /** Ícone antes do texto do botão. Sem `label`, substitui o ⋯. */
53
+ icon?: React.ReactNode;
54
+ /** Nome do botão para leitores de ecrã e tooltip. Sem `label`, por omissão `labels.more`. */
55
+ 'aria-label'?: string;
56
+ /** Aspeto do botão, como no Button. Por omissão `secondary` (com texto) ou `ghost` (⋯). */
57
+ variant?: ButtonProps['variant'];
58
+ size?: ButtonProps['size'];
59
+ /** Botão ligado (ex: há uma vista ou filtro aplicado). */
60
+ active?: boolean;
61
+ /** Para que lado abre a lista, a partir do botão. Por omissão `left` (com texto) ou `right` (⋯). */
62
+ align?: 'left' | 'right';
63
+ disabled?: boolean;
64
+ /** Conteúdo no topo da lista, antes dos itens (ex: campo "Guardar vista atual", filtros). */
65
+ header?: React.ReactNode;
66
+ /** Caixa de pesquisa no topo da lista. Por omissão, só com mais de 10 itens. */
67
+ searchable?: boolean;
68
+ labels?: Partial<DropdownMenuLabels>;
69
+ /** Classes da lista (ex: a largura, `w-64`). */
70
+ panelClassName?: string;
71
+ /** Classes da caixa à volta do botão. */
72
+ className?: string;
73
+ /** Avisa quando a lista abre ou fecha (ex: para limpar um campo do `header`). */
74
+ onOpenChange?: (open: boolean) => void;
75
+ }
76
+ /**
77
+ * Botão que abre uma lista de ações ou opções: o ⋯ de uma linha, "Ações em massa", "Vistas guardadas",
78
+ * um filtro de escolha múltipla. A mesma lista do [SelectInput](?path=/docs/v1-primitives-forms-selectinput--docs).
79
+ *
80
+ * - **Ações**: escolher executa e fecha.
81
+ * - **Marcar** (`checked`): o item leva ✓ e a lista fica aberta para marcar vários.
82
+ * - **Escolher um** (`selected`): ✓ na opção atual; escolher fecha.
83
+ * - **Ação no item** (`action`): um botão pequeno à direita (ex: apagar uma vista).
84
+ * - **Topo livre** (`header`): ex: um campo para guardar a vista atual.
85
+ *
86
+ * Teclado: ↑/↓, Home/End, Enter escolhe, Esc fecha. Abre por cima de um
87
+ * [Dialog](?path=/docs/v1-components-overlays-dialog--docs) e os cliques não chegam a uma linha clicável por baixo.
88
+ *
89
+ * Substitui o `MenuAcoes` legacy.
90
+ */
91
+ export default function DropdownMenu({ items, label, icon, 'aria-label': ariaLabel, variant, size, active, align, disabled, header, searchable, labels, panelClassName, className, onOpenChange, }: DropdownMenuProps): React.JSX.Element | null;
92
+ export { DropdownMenu };
@@ -79,3 +79,5 @@ export declare function WarningIcon(props: IconProps): React.JSX.Element;
79
79
  export declare function ErrorIcon(props: IconProps): React.JSX.Element;
80
80
  /** Intervalo (mínimo e máximo). */
81
81
  export declare function SlidersIcon(props: IconProps): React.JSX.Element;
82
+ /** Mais ações (⋯), ex: o botão do Menu sem texto. */
83
+ export declare function MoreIcon(props: IconProps): React.JSX.Element;
@@ -8,7 +8,7 @@ export type { ScanQRCodesOptions } from './capabilities/documents/QRScanning/sca
8
8
  export { useTheme, applyTheme, themeBootScript, THEME_STORAGE_KEY } from './capabilities/theme/useTheme';
9
9
  export type { Theme } from './capabilities/theme/useTheme';
10
10
  export { useIsDark } from './capabilities/theme/useIsDark';
11
- export { QrCodeIcon, SparklesIcon, PrefilledIcon, LockIcon, InfoIcon, SearchIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, CloseIcon, MenuIcon, PanelOpenIcon, SunIcon, MoonIcon, MonitorIcon, GlobeIcon, LogOutIcon, ExternalLinkIcon, WarningIcon, ErrorIcon, ChevronUpIcon, ChevronRightIcon, ChevronsUpDownIcon, FilterIcon, LayersIcon, ListIcon, SlidersIcon, BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, ListBulletIcon, ListNumberedIcon, QuoteIcon, ImageIcon, MaximizeIcon, MinimizeIcon, } from './foundations/icons/icons';
11
+ export { QrCodeIcon, SparklesIcon, PrefilledIcon, LockIcon, InfoIcon, SearchIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, CloseIcon, MenuIcon, PanelOpenIcon, SunIcon, MoonIcon, MonitorIcon, GlobeIcon, LogOutIcon, ExternalLinkIcon, WarningIcon, ErrorIcon, ChevronUpIcon, ChevronRightIcon, ChevronsUpDownIcon, FilterIcon, LayersIcon, ListIcon, SlidersIcon, BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, ListBulletIcon, ListNumberedIcon, QuoteIcon, ImageIcon, MaximizeIcon, MinimizeIcon, MoreIcon, } from './foundations/icons/icons';
12
12
  export type { IconProps } from './foundations/icons/icons';
13
13
  export { default as TextInput } from './primitives/forms/TextInput/TextInput';
14
14
  export type { TextInputProps } from './primitives/forms/TextInput/TextInput';
@@ -44,6 +44,8 @@ export type { ConfirmDialogProps, ConfirmOptions, ConfirmProviderProps } from '.
44
44
  export { default as Tooltip } from './components/overlays/Tooltip/Tooltip';
45
45
  export type { TooltipProps } from './components/overlays/Tooltip/Tooltip';
46
46
  export { default as TooltipLayer } from './components/overlays/Tooltip/TooltipLayer';
47
+ export { default as DropdownMenu, DEFAULT_DROPDOWN_MENU_LABELS } from './components/overlays/DropdownMenu/DropdownMenu';
48
+ export type { DropdownMenuProps, DropdownMenuItem, DropdownMenuItemAction, DropdownMenuLabels } from './components/overlays/DropdownMenu/DropdownMenu';
47
49
  export { default as ToastProvider, useToast } from './components/feedback/Toast/Toast';
48
50
  export type { ToastApi, ToastOptions, ToastProviderProps, ToastTone } from './components/feedback/Toast/Toast';
49
51
  export { default as AppShell } from './components/layout/AppShell/AppShell';
@@ -79,6 +81,8 @@ export type { KpiProps, KpiTone } from './primitives/display/Kpi/Kpi';
79
81
  export { default as Tabs } from './primitives/navigation/Tabs/Tabs';
80
82
  export type { TabsProps, TabsSingleProps, TabsMultipleProps, TabItem } from './primitives/navigation/Tabs/Tabs';
81
83
  export { default as SegmentedControl } from './primitives/buttons/SegmentedControl/SegmentedControl';
84
+ export { default as Steps, DEFAULT_STEPS_LABELS } from './primitives/navigation/Steps/Steps';
85
+ export type { StepsProps, StepItem, StepsLabels } from './primitives/navigation/Steps/Steps';
82
86
  export type { SegmentedControlProps, SegmentedOption } from './primitives/buttons/SegmentedControl/SegmentedControl';
83
87
  export { default as Table } from './components/tables/Table/Table';
84
88
  export type { TableProps, TableColumn, TableView, TableState } from './components/tables/Table/Table';
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ export interface StepItem<K extends string = string> {
3
+ id: K;
4
+ /** Normalmente texto; aceita JSX. */
5
+ label: React.ReactNode;
6
+ /** Passo já feito e válido (✓). */
7
+ done?: boolean;
8
+ /** Passo com alguma coisa por corrigir (!). */
9
+ error?: boolean;
10
+ }
11
+ export interface StepsLabels {
12
+ /** Acrescentado ao nome de um passo feito, para leitores de ecrã. */
13
+ done: string;
14
+ /** Acrescentado ao nome de um passo com erros, para leitores de ecrã. */
15
+ error: string;
16
+ /** No telemóvel, por cima do passo atual: "{current}" e "{total}" são os números. */
17
+ progress: string;
18
+ }
19
+ export declare const DEFAULT_STEPS_LABELS: StepsLabels;
20
+ export interface StepsProps<K extends string = string> {
21
+ items: StepItem<K>[];
22
+ /** O passo atual. A app guarda este estado. */
23
+ value: K;
24
+ /** Sem isto, a barra só mostra onde se está (não se clica). */
25
+ onChange?: (id: K) => void;
26
+ /**
27
+ * Todos os passos clicáveis. Por omissão só os já feitos (para voltar atrás); num
28
+ * registo que já existe (editar, consultar) pode fazer sentido saltar para qualquer um.
29
+ */
30
+ free?: boolean;
31
+ /** Nome da barra, para leitores de ecrã (ex: "Atribuição de equipamento"). */
32
+ label?: string;
33
+ labels?: Partial<StepsLabels>;
34
+ className?: string;
35
+ }
36
+ /**
37
+ * Barra de passos de um fluxo em várias etapas (ex: Equipamentos → Colaborador →
38
+ * Termo → Concluído): onde se está, o que já está feito e o que tem erros.
39
+ *
40
+ * Fica por cima do conteúdo do passo, numa página ou num
41
+ * [Dialog](?path=/docs/v1-components-overlays-dialog--docs). Os botões Seguinte e
42
+ * Anterior são da app (normalmente no fundo do passo).
43
+ *
44
+ * No telemóvel mostra os números e só o nome do passo atual.
45
+ *
46
+ * Substitui os `Passos` legacy.
47
+ */
48
+ export default function Steps<K extends string = string>({ items, value, onChange, free, label, labels, className, }: StepsProps<K>): React.JSX.Element;
49
+ export { Steps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proef/common-ui",
3
- "version": "2.6.5",
3
+ "version": "2.6.6",
4
4
  "description": "",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",