@nextelco/common-ui 2.1.105 → 2.1.107

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.
Files changed (199) hide show
  1. package/dist/esm/index.js +201 -145
  2. package/dist/esm/index.js.map +1 -1
  3. package/dist/esm/legacy/components/atoms/InputData/InputData.js +2 -13
  4. package/dist/esm/legacy/components/atoms/InputData/InputData.js.map +1 -1
  5. package/dist/esm/legacy/components/charts/Charts.js +147 -57
  6. package/dist/esm/legacy/components/charts/Charts.js.map +1 -1
  7. package/dist/esm/legacy/components/layout/Layout/Layout.js +21 -82
  8. package/dist/esm/legacy/components/layout/Layout/Layout.js.map +1 -1
  9. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js +29 -218
  10. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js.map +1 -1
  11. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js +77 -10
  12. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js.map +1 -1
  13. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js +445 -337
  14. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js.map +1 -1
  15. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js +15 -97
  16. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js.map +1 -1
  17. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js +3 -3
  18. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js.map +1 -1
  19. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js +15 -3
  20. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js.map +1 -1
  21. package/dist/esm/legacy/components/organisms/Selector/Selector.js +4 -4
  22. package/dist/esm/legacy/components/organisms/Selector/Selector.js.map +1 -1
  23. package/dist/esm/legacy/components/ui/Avisos.js +23 -76
  24. package/dist/esm/legacy/components/ui/Avisos.js.map +1 -1
  25. package/dist/esm/legacy/components/ui/CabecalhoPagina.js +14 -27
  26. package/dist/esm/legacy/components/ui/CabecalhoPagina.js.map +1 -1
  27. package/dist/esm/legacy/components/ui/CaixaPesquisa.js +3 -51
  28. package/dist/esm/legacy/components/ui/CaixaPesquisa.js.map +1 -1
  29. package/dist/esm/legacy/components/ui/Confirmacao.js +13 -31
  30. package/dist/esm/legacy/components/ui/Confirmacao.js.map +1 -1
  31. package/dist/esm/legacy/components/ui/Escolha.js +21 -137
  32. package/dist/esm/legacy/components/ui/Escolha.js.map +1 -1
  33. package/dist/esm/legacy/components/ui/FaixaAviso.js +13 -11
  34. package/dist/esm/legacy/components/ui/FaixaAviso.js.map +1 -1
  35. package/dist/esm/legacy/components/ui/Separadores.js +11 -46
  36. package/dist/esm/legacy/components/ui/Separadores.js.map +1 -1
  37. package/dist/esm/legacy/components/ui/Ui.js +18 -115
  38. package/dist/esm/legacy/components/ui/Ui.js.map +1 -1
  39. package/dist/esm/legacy/components/ui/painelFlutuante.js +5 -44
  40. package/dist/esm/legacy/components/ui/painelFlutuante.js.map +1 -1
  41. package/dist/esm/v1/capabilities/overlay/useFloatingPanel.js +52 -0
  42. package/dist/esm/v1/capabilities/overlay/useFloatingPanel.js.map +1 -0
  43. package/dist/esm/v1/capabilities/theme/useIsDark.js +15 -0
  44. package/dist/esm/v1/capabilities/theme/useIsDark.js.map +1 -0
  45. package/dist/esm/v1/capabilities/theme/useTheme.js +66 -0
  46. package/dist/esm/v1/capabilities/theme/useTheme.js.map +1 -0
  47. package/dist/esm/v1/components/data/Pagination/Pagination.js +66 -0
  48. package/dist/esm/v1/components/data/Pagination/Pagination.js.map +1 -0
  49. package/dist/esm/v1/components/feedback/Toast/Toast.js +105 -0
  50. package/dist/esm/v1/components/feedback/Toast/Toast.js.map +1 -0
  51. package/dist/esm/v1/components/forms/FormField/FormField.js.map +1 -1
  52. package/dist/esm/v1/components/forms/FormGrid/FormGrid.js.map +1 -1
  53. package/dist/esm/v1/components/layout/AppShell/AppShell.js +89 -0
  54. package/dist/esm/v1/components/layout/AppShell/AppShell.js.map +1 -0
  55. package/dist/esm/v1/components/layout/Page/Page.js +16 -0
  56. package/dist/esm/v1/components/layout/Page/Page.js.map +1 -0
  57. package/dist/esm/v1/components/layout/PageHeader/PageHeader.js +26 -0
  58. package/dist/esm/v1/components/layout/PageHeader/PageHeader.js.map +1 -0
  59. package/dist/esm/v1/components/layout/SideNav/SideNav.js +277 -0
  60. package/dist/esm/v1/components/layout/SideNav/SideNav.js.map +1 -0
  61. package/dist/esm/v1/components/layout/navTrail.js +19 -0
  62. package/dist/esm/v1/components/layout/navTrail.js.map +1 -0
  63. package/dist/esm/v1/components/lists/ListFinder/ListFinder.js +4 -4
  64. package/dist/esm/v1/components/lists/ListFinder/ListFinder.js.map +1 -1
  65. package/dist/esm/v1/components/overlays/ConfirmDialog/ConfirmDialog.js +95 -0
  66. package/dist/esm/v1/components/overlays/ConfirmDialog/ConfirmDialog.js.map +1 -0
  67. package/dist/esm/v1/components/overlays/Dialog/Dialog.js.map +1 -1
  68. package/dist/esm/v1/components/overlays/Tooltip/Tooltip.js +98 -0
  69. package/dist/esm/v1/components/overlays/Tooltip/Tooltip.js.map +1 -0
  70. package/dist/esm/v1/components/overlays/Tooltip/TooltipLayer.js +84 -0
  71. package/dist/esm/v1/components/overlays/Tooltip/TooltipLayer.js.map +1 -0
  72. package/dist/esm/v1/components/overlays/Tooltip/TooltipPanel.js +33 -0
  73. package/dist/esm/v1/components/overlays/Tooltip/TooltipPanel.js.map +1 -0
  74. package/dist/esm/v1/components/overlays/topLayer.js +28 -0
  75. package/dist/esm/v1/components/overlays/topLayer.js.map +1 -0
  76. package/dist/esm/v1/components/tables/PaginatedTable/PaginatedTable.js.map +1 -1
  77. package/dist/esm/v1/components/tables/Table/Table.js.map +1 -1
  78. package/dist/esm/v1/foundations/icons/icons.js +61 -2
  79. package/dist/esm/v1/foundations/icons/icons.js.map +1 -1
  80. package/dist/esm/v1/primitives/buttons/Button/Button.js +18 -4
  81. package/dist/esm/v1/primitives/buttons/Button/Button.js.map +1 -1
  82. package/dist/esm/v1/primitives/buttons/SegmentedControl/SegmentedControl.js +65 -0
  83. package/dist/esm/v1/primitives/buttons/SegmentedControl/SegmentedControl.js.map +1 -0
  84. package/dist/esm/v1/primitives/buttons/SegmentedControl/segmentedStyles.js +10 -0
  85. package/dist/esm/v1/primitives/buttons/SegmentedControl/segmentedStyles.js.map +1 -0
  86. package/dist/esm/v1/primitives/display/Avatar/Avatar.js +120 -0
  87. package/dist/esm/v1/primitives/display/Avatar/Avatar.js.map +1 -0
  88. package/dist/esm/v1/primitives/display/Badge/Badge.js +23 -0
  89. package/dist/esm/v1/primitives/display/Badge/Badge.js.map +1 -0
  90. package/dist/esm/v1/primitives/display/Card/Card.js +22 -0
  91. package/dist/esm/v1/primitives/display/Card/Card.js.map +1 -0
  92. package/dist/esm/v1/primitives/display/FilterChips/FilterChips.js +45 -0
  93. package/dist/esm/v1/primitives/display/FilterChips/FilterChips.js.map +1 -0
  94. package/dist/esm/v1/primitives/display/Kpi/Kpi.js +103 -0
  95. package/dist/esm/v1/primitives/display/Kpi/Kpi.js.map +1 -0
  96. package/dist/esm/v1/primitives/display/Notice/Notice.js +71 -0
  97. package/dist/esm/v1/primitives/display/Notice/Notice.js.map +1 -0
  98. package/dist/esm/v1/primitives/display/Person/Person.js +14 -0
  99. package/dist/esm/v1/primitives/display/Person/Person.js.map +1 -0
  100. package/dist/esm/v1/primitives/forms/Checkbox/Checkbox.js +10 -5
  101. package/dist/esm/v1/primitives/forms/Checkbox/Checkbox.js.map +1 -1
  102. package/dist/esm/v1/primitives/forms/DateInput/DateInput.js +150 -0
  103. package/dist/esm/v1/primitives/forms/DateInput/DateInput.js.map +1 -0
  104. package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js.map +1 -1
  105. package/dist/esm/v1/primitives/forms/SearchInput/SearchInput.js +43 -0
  106. package/dist/esm/v1/primitives/forms/SearchInput/SearchInput.js.map +1 -0
  107. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js +190 -12
  108. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js.map +1 -1
  109. package/dist/esm/v1/primitives/forms/TextArea/TextArea.js.map +1 -1
  110. package/dist/esm/v1/primitives/forms/field.js +4 -2
  111. package/dist/esm/v1/primitives/forms/field.js.map +1 -1
  112. package/dist/esm/v1/primitives/lists/ListItem/ListItem.js +2 -2
  113. package/dist/esm/v1/primitives/lists/ListItem/ListItem.js.map +1 -1
  114. package/dist/esm/v1/primitives/navigation/Tabs/Tabs.js +96 -0
  115. package/dist/esm/v1/primitives/navigation/Tabs/Tabs.js.map +1 -0
  116. package/dist/style.components.css +1 -1
  117. package/dist/style.css +1 -1
  118. package/dist/style.layered.css +1 -1
  119. package/dist/tailwind.css +24 -0
  120. package/dist/theme-boot.js +1 -0
  121. package/dist/theme.css +10 -3
  122. package/dist/tokens.css +119 -0
  123. package/dist/types/legacy/components/atoms/InputData/InputData.d.ts +4 -1
  124. package/dist/types/legacy/components/charts/Charts.d.ts +58 -5
  125. package/dist/types/legacy/components/layout/Layout/Layout.d.ts +7 -20
  126. package/dist/types/legacy/components/layout/Sidebar/Sidebar.d.ts +13 -26
  127. package/dist/types/legacy/components/molecules/ColumnPicker/ColumnPicker.d.ts +56 -3
  128. package/dist/types/legacy/components/molecules/DataTable/DataTable.d.ts +72 -7
  129. package/dist/types/legacy/components/molecules/UserAvatar/UserAvatar.d.ts +4 -5
  130. package/dist/types/legacy/components/ui/Avisos.d.ts +6 -16
  131. package/dist/types/legacy/components/ui/CabecalhoPagina.d.ts +6 -20
  132. package/dist/types/legacy/components/ui/CaixaPesquisa.d.ts +2 -4
  133. package/dist/types/legacy/components/ui/Confirmacao.d.ts +3 -10
  134. package/dist/types/legacy/components/ui/Escolha.d.ts +5 -15
  135. package/dist/types/legacy/components/ui/FaixaAviso.d.ts +2 -6
  136. package/dist/types/legacy/components/ui/Separadores.d.ts +3 -10
  137. package/dist/types/legacy/components/ui/Ui.d.ts +12 -54
  138. package/dist/types/legacy/components/ui/painelFlutuante.d.ts +6 -10
  139. package/dist/types/legacy/exports/atoms.d.ts +1 -1
  140. package/dist/types/legacy/exports/charts.d.ts +2 -2
  141. package/dist/types/legacy/exports/hooks.d.ts +2 -2
  142. package/dist/types/legacy/exports/molecules.d.ts +2 -2
  143. package/dist/types/v1/capabilities/overlay/useFloatingPanel.d.ts +20 -0
  144. package/dist/types/v1/capabilities/theme/useIsDark.d.ts +10 -0
  145. package/dist/types/v1/capabilities/theme/useTheme.d.ts +29 -0
  146. package/dist/types/v1/components/data/Pagination/Pagination.d.ts +33 -0
  147. package/dist/types/v1/components/feedback/Toast/Toast.d.ts +51 -0
  148. package/dist/types/v1/components/forms/FormField/FormField.d.ts +3 -3
  149. package/dist/types/v1/components/forms/FormGrid/FormGrid.d.ts +2 -0
  150. package/dist/types/v1/components/layout/AppShell/AppShell.d.ts +35 -0
  151. package/dist/types/v1/components/layout/Page/Page.d.ts +23 -0
  152. package/dist/types/v1/components/layout/PageHeader/PageHeader.d.ts +35 -0
  153. package/dist/types/v1/components/layout/SideNav/SideNav.d.ts +92 -0
  154. package/dist/types/v1/components/layout/navTrail.d.ts +15 -0
  155. package/dist/types/v1/components/lists/ListFinder/ListFinder.d.ts +1 -1
  156. package/dist/types/v1/components/overlays/ConfirmDialog/ConfirmDialog.d.ts +59 -0
  157. package/dist/types/v1/components/overlays/Dialog/Dialog.d.ts +6 -3
  158. package/dist/types/v1/components/overlays/Tooltip/Tooltip.d.ts +34 -0
  159. package/dist/types/v1/components/overlays/Tooltip/TooltipLayer.d.ts +18 -0
  160. package/dist/types/v1/components/overlays/Tooltip/TooltipPanel.d.ts +23 -0
  161. package/dist/types/v1/components/overlays/topLayer.d.ts +23 -0
  162. package/dist/types/v1/components/tables/PaginatedTable/PaginatedTable.d.ts +1 -1
  163. package/dist/types/v1/components/tables/Table/Table.d.ts +1 -1
  164. package/dist/types/v1/foundations/icons/icons.d.ts +20 -0
  165. package/dist/types/v1/index.d.ts +43 -1
  166. package/dist/types/v1/primitives/buttons/Button/Button.d.ts +22 -5
  167. package/dist/types/v1/primitives/buttons/SegmentedControl/SegmentedControl.d.ts +28 -0
  168. package/dist/types/v1/primitives/buttons/SegmentedControl/segmentedStyles.d.ts +16 -0
  169. package/dist/types/v1/primitives/display/Avatar/Avatar.d.ts +30 -0
  170. package/dist/types/v1/primitives/display/Badge/Badge.d.ts +25 -0
  171. package/dist/types/v1/primitives/display/Card/Card.d.ts +22 -0
  172. package/dist/types/v1/primitives/display/FilterChips/FilterChips.d.ts +33 -0
  173. package/dist/types/v1/primitives/display/Kpi/Kpi.d.ts +68 -0
  174. package/dist/types/v1/primitives/display/Notice/Notice.d.ts +29 -0
  175. package/dist/types/v1/primitives/display/Person/Person.d.ts +15 -0
  176. package/dist/types/v1/primitives/forms/Checkbox/Checkbox.d.ts +7 -0
  177. package/dist/types/v1/primitives/forms/DateInput/DateInput.d.ts +43 -0
  178. package/dist/types/v1/primitives/forms/LookupInput/LookupInput.d.ts +3 -0
  179. package/dist/types/v1/primitives/forms/SearchInput/SearchInput.d.ts +23 -0
  180. package/dist/types/v1/primitives/forms/SelectInput/SelectInput.d.ts +61 -10
  181. package/dist/types/v1/primitives/forms/TextArea/TextArea.d.ts +3 -0
  182. package/dist/types/v1/primitives/forms/field.d.ts +2 -0
  183. package/dist/types/v1/primitives/lists/ListItem/ListItem.d.ts +2 -1
  184. package/dist/types/v1/primitives/navigation/Tabs/Tabs.d.ts +58 -0
  185. package/package.json +3 -3
  186. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.css +0 -17
  187. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js +0 -41
  188. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js.map +0 -1
  189. package/dist/esm/legacy/components/molecules/Search/Search.css +0 -18
  190. package/dist/esm/legacy/components/molecules/Search/Search.js +0 -30
  191. package/dist/esm/legacy/components/molecules/Search/Search.js.map +0 -1
  192. package/dist/esm/legacy/hooks/useTheme.js +0 -39
  193. package/dist/esm/legacy/hooks/useTheme.js.map +0 -1
  194. package/dist/esm/v1/primitives/lists/ListItem/ListCheckbox.js +0 -28
  195. package/dist/esm/v1/primitives/lists/ListItem/ListCheckbox.js.map +0 -1
  196. package/dist/types/legacy/components/atoms/Tooltip/Tooltip.d.ts +0 -13
  197. package/dist/types/legacy/components/molecules/Search/Search.d.ts +0 -7
  198. package/dist/types/legacy/hooks/useTheme.d.ts +0 -17
  199. package/dist/types/v1/primitives/lists/ListItem/ListCheckbox.d.ts +0 -14
@@ -1,7 +1,7 @@
1
1
  import React, { type ReactNode } from 'react';
2
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
2
+ /** @deprecated Legacy — usar `useToast` do V1. */
3
3
  export type TipoAviso = 'sucesso' | 'erro' | 'aviso' | 'info';
4
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
4
+ /** @deprecated Legacy — usar `ToastOptions` do V1. */
5
5
  export interface OpcoesAviso {
6
6
  /** Botão no aviso (ex: "Tentar de novo", "Desfazer"). */
7
7
  acao?: {
@@ -11,7 +11,7 @@ export interface OpcoesAviso {
11
11
  /** Milissegundos até fechar sozinho. 0 = só fecha à mão. */
12
12
  duracao?: number;
13
13
  }
14
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
14
+ /** @deprecated Legacy — usar `ToastApi` do V1. */
15
15
  export interface AvisosApi {
16
16
  sucesso: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number;
17
17
  erro: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number;
@@ -19,7 +19,7 @@ export interface AvisosApi {
19
19
  info: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number;
20
20
  fechar: (id: number) => void;
21
21
  }
22
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
22
+ /** @deprecated Legacy — usar `ToastProviderProps` do V1. */
23
23
  export interface AvisosProviderProps {
24
24
  children: ReactNode;
25
25
  /** Rótulo do botão de fechar (leitores de ecrã). */
@@ -27,17 +27,7 @@ export interface AvisosProviderProps {
27
27
  /** Máximo de avisos visíveis ao mesmo tempo; os mais antigos saem. */
28
28
  maximo?: number;
29
29
  }
30
- /**
31
- * Avisos de resultado de ações ("Guardado", "Não foi possível eliminar").
32
- *
33
- * Substituem os `alert()` do browser e as caixas de erro feitas em cada página.
34
- * Pôr o provider uma vez à volta da app e usar `useAvisos()` onde for preciso.
35
- * Erros de validação de formulário NÃO vão aqui: ficam junto aos campos.
36
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
37
- */
30
+ /** @deprecated Legacy — usar `ToastProvider` do V1. */
38
31
  export declare function AvisosProvider({ children, rotuloFechar, maximo }: AvisosProviderProps): React.JSX.Element;
39
- /**
40
- * Avisos da app. Tem de estar dentro de um `AvisosProvider`.
41
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
42
- */
32
+ /** @deprecated Legacy — usar `useToast` do V1. */
43
33
  export declare function useAvisos(): AvisosApi;
@@ -1,37 +1,23 @@
1
1
  import React, { type ReactNode } from 'react';
2
- /**
3
- * Um nível do caminho por cima do título.
4
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
5
- */
2
+ /** @deprecated Legacy — usar `BreadcrumbItem` do V1. */
6
3
  export interface NivelCaminho {
7
4
  rotulo: ReactNode;
8
5
  /** Ligação normal. Para o router da app, usar `onClick` (ex: `() => navigate('/x')`). */
9
6
  href?: string;
10
7
  onClick?: () => void;
11
8
  }
12
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
9
+ /** @deprecated Legacy — usar `PageHeaderProps` do V1. */
13
10
  export interface CabecalhoPaginaProps {
14
11
  titulo: ReactNode;
15
12
  descricao?: ReactNode;
16
- /**
17
- * Caminho até à página (área › lista › registo). O último nível é a página
18
- * atual e não leva ligação, mesmo que a traga.
19
- */
13
+ /** Caminho até à página (área › lista › registo). O último nível é a página atual. */
20
14
  caminho?: NivelCaminho[];
21
- /** Botões da página (ex: "Novo", "Editar"). Ficam à direita e descem em ecrã estreito. */
15
+ /** Botões da página (ex: "Novo", "Editar"). */
22
16
  acoes?: ReactNode;
23
17
  /** Linha extra por baixo da descrição (etiquetas de estado, responsável…). */
24
18
  extra?: ReactNode;
25
19
  /** Rótulo acessível da navegação do caminho. */
26
20
  rotuloCaminho?: string;
27
21
  }
28
- /**
29
- * Cabeçalho comum a todas as páginas: caminho, título com a barra turquesa,
30
- * descrição e ações.
31
- *
32
- * Existe para o título deixar de ser desenhado à mão em cada ecrã — com
33
- * tamanhos, cores e posições diferentes de página para página. O nome no menu,
34
- * o título e o último nível do caminho devem ser o mesmo texto.
35
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
36
- */
37
- export default function CabecalhoPagina({ titulo, descricao, caminho, acoes, extra, rotuloCaminho, }: CabecalhoPaginaProps): React.JSX.Element;
22
+ /** @deprecated Legacy — usar `PageHeader` (ou `Page`) do V1. */
23
+ export default function CabecalhoPagina({ titulo, descricao, caminho, acoes, extra, rotuloCaminho }: CabecalhoPaginaProps): React.JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ /** @deprecated Legacy — usar `SearchInputProps` do V1. */
2
3
  export interface CaixaPesquisaProps {
3
4
  valor: string;
4
5
  onMudar: (valor: string) => void;
@@ -9,8 +10,5 @@ export interface CaixaPesquisaProps {
9
10
  className?: string;
10
11
  autoFocus?: boolean;
11
12
  }
12
- /**
13
- * Caixa de pesquisa das barras de tabela e listas: mesma altura (h-8) e cantos (rounded-lg) dos botões, do
14
- * Exportar e do seletor de colunas. Lupa à esquerda; com texto, um "×" para limpar (Esc também limpa).
15
- */
13
+ /** @deprecated Legacy — usar `SearchInput` do V1. */
16
14
  export default function CaixaPesquisa({ valor, onMudar, placeholder, rotulo, className, autoFocus }: CaixaPesquisaProps): React.JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import React, { type ReactNode } from 'react';
2
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
2
+ /** @deprecated Legacy — usar `ConfirmDialog` ou `useConfirm` do V1. */
3
3
  export interface ConfirmacaoProps {
4
4
  aberto: boolean;
5
5
  titulo: ReactNode;
@@ -20,12 +20,5 @@ export interface ConfirmacaoProps {
20
20
  onClick: () => void;
21
21
  };
22
22
  }
23
- /**
24
- * Pedido de confirmação antes de uma ação. Substitui o `window.confirm()` do
25
- * browser, que mostra o endereço do servidor, não diz que registo é e só tem
26
- * "OK".
27
- *
28
- * Esc e clicar fora cancelam (exceto enquanto `aConfirmar`).
29
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
30
- */
31
- export default function Confirmacao({ aberto, titulo, children, onConfirmar, onCancelar, textoConfirmar, textoCancelar, variante, aConfirmar, acaoSecundaria, }: ConfirmacaoProps): React.JSX.Element | null;
23
+ /** @deprecated Legacy — usar `ConfirmDialog` ou `useConfirm` do V1. */
24
+ export default function Confirmacao({ aberto, titulo, children, onConfirmar, onCancelar, textoConfirmar, textoCancelar, variante, aConfirmar, acaoSecundaria, }: ConfirmacaoProps): React.JSX.Element;
@@ -14,32 +14,22 @@ export interface EscolhaProps {
14
14
  rotulo: string;
15
15
  /** Texto do botão sem nada escolhido. */
16
16
  placeholder?: string;
17
- /**
18
- * Primeira opção "vazia" (valor ''), para desfazer a escolha (ex.: "Todas"). Sem isto não há como voltar atrás
19
- * depois de escolher.
20
- */
17
+ /** Primeira opção "vazia" (valor ''), para desfazer a escolha (ex.: "Todas"). */
21
18
  opcaoVazia?: string;
22
19
  disabled?: boolean;
23
20
  /** Caixa de pesquisa no topo da lista. Por omissão, só com mais de 10 opções. */
24
21
  pesquisa?: boolean;
25
22
  /** Largura (classes tailwind). Por omissão a do conteúdo, entre 10rem e 18rem (etiqueta: a do texto). */
26
23
  className?: string;
27
- /**
28
- * 'barra' (omissão): h-8, como os botões e filtros das barras. 'formulario': a altura dos campos de texto dos
29
- * formulários (px-3 py-2), para alinhar com eles.
30
- */
24
+ /** 'barra' (omissão): a altura dos botões e filtros. 'formulario': a altura dos campos dos formulários legacy (38px). */
31
25
  tamanho?: 'barra' | 'formulario';
32
- /**
33
- * 'campo' (omissão) ou 'etiqueta': o botão é uma etiqueta arredondada (ex.: o estado numa linha de tabela), com
34
- * as cores de `corEtiqueta`. A lista é a mesma.
35
- */
26
+ /** 'campo' (omissão) ou 'etiqueta': o botão é uma etiqueta arredondada, com as cores de `corEtiqueta`. */
36
27
  aspeto?: 'campo' | 'etiqueta';
37
28
  /** Classes de cor da etiqueta (fundo, texto e variante dark:), normalmente conforme o valor escolhido. */
38
29
  corEtiqueta?: string;
39
30
  }
40
31
  /**
41
- * Lista suspensa para escolher um valor (substitui o `<select>` nativo, que abre com o aspeto do sistema e não
42
- * segue o tema). Mesma altura e cantos dos botões e campos (h-8, rounded-lg); a lista tem o mesmo aspeto do
43
- * MenuAcoes. Teclado: ↑/↓, Home/End, Enter escolhe, Esc fecha; ao escrever com a lista aberta salta para a opção.
32
+ * Migrado para o V1: adaptador do `SelectInput` (a mesma lista desenhada, nomes antigos e textos em português).
33
+ * @deprecated Legacy — usar o `SelectInput` do V1. Ver Storybook › Legacy.
44
34
  */
45
35
  export default function Escolha({ valor, opcoes, onMudar, rotulo, placeholder, opcaoVazia, disabled, pesquisa, className, tamanho, aspeto, corEtiqueta, }: EscolhaProps): React.JSX.Element;
@@ -13,11 +13,7 @@ export interface FaixaAvisoProps {
13
13
  icone?: ReactNode;
14
14
  }
15
15
  /**
16
- * Faixa no topo do conteúdo para um estado que afeta a página inteira: "Ver
17
- * como" outro perfil, um serviço externo em baixo, dados possivelmente
18
- * incompletos. Não é para resultados de ações — esses são avisos (`useAvisos`).
19
- *
20
- * Fica bem no slot `topBar` do Layout.
21
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
16
+ * Migrado para o V1: adaptador do `Notice` com `variant="banner"` (faixa no topo da página).
17
+ * @deprecated Legacy — usar o `Notice` do V1. Ver Storybook › Legacy.
22
18
  */
23
19
  export default function FaixaAviso({ children, tom, acao, icone }: FaixaAvisoProps): React.JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import React, { type ReactNode } from 'react';
2
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
2
+ /** @deprecated Legacy — usar `TabItem` do V1. */
3
3
  export interface Separador<T extends string> {
4
4
  id: T;
5
5
  rotulo: ReactNode;
@@ -7,7 +7,7 @@ export interface Separador<T extends string> {
7
7
  contagem?: number;
8
8
  desativado?: boolean;
9
9
  }
10
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
10
+ /** @deprecated Legacy — usar `TabsProps` do V1. */
11
11
  export interface SeparadoresProps<T extends string> {
12
12
  itens: Separador<T>[];
13
13
  ativo: T;
@@ -15,12 +15,5 @@ export interface SeparadoresProps<T extends string> {
15
15
  /** Rótulo acessível do conjunto (ex: "Estado das faturas"). */
16
16
  rotulo?: string;
17
17
  }
18
- /**
19
- * Separadores de uma página, iguais em todo o portal.
20
- *
21
- * O ativo fica a navy com sublinhado (não turquesa: turquesa sobre branco não
22
- * tem contraste para texto). Setas esquerda/direita, Home e End mudam de
23
- * separador, como num tablist normal.
24
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
25
- */
18
+ /** @deprecated Legacy — usar `Tabs` do V1. */
26
19
  export default function Separadores<T extends string>({ itens, ativo, onMudar, rotulo }: SeparadoresProps<T>): React.JSX.Element;
@@ -5,13 +5,8 @@ import React, { type ReactNode } from 'react';
5
5
  * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
6
6
  */
7
7
  export type StatusSla = 'ok' | 'risco' | 'incumprido';
8
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
9
- export declare function Card({ title, extra, children, className }: {
10
- title?: ReactNode;
11
- extra?: ReactNode;
12
- children: ReactNode;
13
- className?: string;
14
- }): React.JSX.Element;
8
+ import { Card } from '../../../v1/primitives/display/Card/Card';
9
+ export { Card };
15
10
  /**
16
11
  * Colour-bordered group — the overview sections in the prototype.
17
12
  * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
@@ -21,51 +16,10 @@ export declare function SectionGroup({ title, tone, children, }: {
21
16
  tone?: 'accent' | 'ok' | 'blue' | 'red' | 'purple' | 'yellow';
22
17
  children: ReactNode;
23
18
  }): React.JSX.Element;
24
- export type KpiTone = 'default' | 'brand' | 'ok' | 'risco' | 'incumprido';
25
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
26
- export declare function Kpi({ label, value, tone, delta, onClick, bgTint, active, hint, dot, barra, rodape, denso, }: {
27
- label: string;
28
- value: ReactNode;
29
- tone?: KpiTone;
30
- delta?: ReactNode;
31
- onClick?: () => void;
32
- /** Ponto colorido antes do rótulo — liga o indicador à cor que ele tem no mapa ou na legenda. */
33
- dot?: string;
34
- /**
35
- * Barra por baixo do valor. Um número é uma percentagem; uma lista é uma
36
- * barra repartida, com cada troço proporcional ao seu peso.
37
- *
38
- * Serve para o indicador dizer a PROPORÇÃO e não só o valor: "253 concluídas"
39
- * não diz nada sem saber de quantas.
40
- */
41
- barra?: number | {
42
- peso: number;
43
- cor: string;
44
- }[];
45
- /** Linha pequena no fim, para um dado que acompanha mas não é o indicador. */
46
- rodape?: ReactNode;
47
- /**
48
- * Faixa fina em vez de cartão.
49
- *
50
- * Oito indicadores em cartões de 88px empurram o conteúdo para fora do ecrã,
51
- * e o conteúdo é que é o trabalho. Denso alinha à esquerda e corta a altura
52
- * para metade — os números continuam a ler-se, e o mapa fica acima da dobra.
53
- */
54
- denso?: boolean;
55
- /** Fundo colorido (tom claro) em vez de só o número — opt-in, sem quebrar o uso existente. */
56
- bgTint?: boolean;
57
- /** Filtro ativo (KPI clicável selecionado): contorno azul. */
58
- active?: boolean;
59
- /** Tooltip do KPI clicável (ex: "Filtrar a tabela"). */
60
- hint?: string;
61
- }): React.JSX.Element;
62
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
63
- export type BadgeTone = 'ok' | 'risco' | 'incumprido' | 'neutral' | 'accent';
64
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
65
- export declare function Badge({ tone, children }: {
66
- tone?: BadgeTone;
67
- children: ReactNode;
68
- }): React.JSX.Element;
19
+ import { Kpi, type KpiTone } from '../../../v1/primitives/display/Kpi/Kpi';
20
+ export { Kpi, type KpiTone };
21
+ import { Badge, type BadgeTone } from '../../../v1/primitives/display/Badge/Badge';
22
+ export { Badge, type BadgeTone };
69
23
  /**
70
24
  * SLA badge — picks the tone and label from `status`. Labels overridable via `labels`.
71
25
  * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
@@ -82,7 +36,10 @@ export declare function BadgeSla({ status, labels }: {
82
36
  export declare function ChipEstadoInterno({ estado }: {
83
37
  estado: string | null;
84
38
  }): React.JSX.Element;
85
- /** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */
39
+ /**
40
+ * Migrado para o V1: é o `Button` do V1 (mesmo aspeto); isto só mantém a API antiga.
41
+ * @deprecated Legacy — usar `Button` do V1.
42
+ */
86
43
  export declare function Btn({ children, onClick, variant, active, disabled, title, type, }: {
87
44
  children: ReactNode;
88
45
  onClick?: () => void;
@@ -94,7 +51,8 @@ export declare function Btn({ children, onClick, variant, active, disabled, titl
94
51
  }): React.JSX.Element;
95
52
  /**
96
53
  * Mutually exclusive button group (granularity, dimension…).
97
- * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.
54
+ * Migrado para o V1: é o `SegmentedControl` do V1; isto só mantém a API antiga.
55
+ * @deprecated Legacy — usar `SegmentedControl` do V1.
98
56
  */
99
57
  export declare function BtnGroup<T extends string>({ value, options, onChange, label, }: {
100
58
  value: T;
@@ -1,20 +1,16 @@
1
- import { type CSSProperties } from 'react';
2
1
  /**
3
- * Aspeto comum das listas suspensas (Escolha e MenuAcoes): cartão arredondado com sombra, nos dois temas.
4
- * Um só sítio para as duas ficarem iguais.
2
+ * Migrado para o V1 (`useFloatingPanel`): estes nomes ficam para o MenuAcoes e o código legacy.
3
+ * @deprecated Legacy — usar o `useFloatingPanel` do V1.
5
4
  */
6
5
  export declare const CLS_PAINEL = "fixed z-[60] min-w-[10rem] max-h-72 overflow-auto rounded-xl border border-slate-200 bg-white py-1 text-sm shadow-lg dark:border-slate-700 dark:bg-slate-900";
7
- /** Item de uma lista suspensa; `ativo` = o que o teclado tem selecionado. */
8
- export declare const clsItem: (ativo: boolean, perigo?: boolean) => string;
9
- /**
10
- * Painel flutuante preso a um botão: posição fixa (não é cortado por tabelas ou modais com scroll), abre para
11
- * cima quando não cabe por baixo, fecha ao clicar fora, com Esc, ao fazer scroll fora dele ou ao redimensionar.
12
- */
6
+ /** @deprecated Legacy — usar o `itemClass` do V1. */
7
+ export declare const clsItem: (active: boolean, danger?: boolean) => string;
8
+ /** @deprecated Legacy — usar o `useFloatingPanel` do V1. */
13
9
  export declare function usePainelFlutuante(alinhar?: 'esquerda' | 'direita'): {
14
10
  aberto: boolean;
15
11
  setAberto: import("react").Dispatch<import("react").SetStateAction<boolean>>;
16
12
  fechar: () => void;
17
13
  refBotao: import("react").RefObject<HTMLButtonElement | null>;
18
14
  refPainel: import("react").RefObject<HTMLDivElement | null>;
19
- estilo: CSSProperties;
15
+ estilo: import("react").CSSProperties;
20
16
  };
@@ -11,7 +11,7 @@ export { default as IconButton } from '../components/atoms/Button/variants/IconB
11
11
  export { default as TabButton } from '../components/atoms/Button/variants/TabButton';
12
12
  export { default as MainButton } from '../components/atoms/Button/variants/MainButton';
13
13
  export { default as Stack } from '../components/atoms/Stack/Stack';
14
- export { default as Tooltip } from '../components/atoms/Tooltip/Tooltip';
14
+ export { default as Tooltip } from '../../v1/components/overlays/Tooltip/Tooltip';
15
15
  export { default as Input } from '../components/atoms/Input/Input';
16
16
  export { default as Icone } from '../components/atoms/Icone/Icone';
17
17
  export type { IconeQualquer } from '../components/atoms/Icone/Icone';
@@ -1,2 +1,2 @@
1
- export { PALETA, cor, BarrasEmpilhadas, BarrasHorizontais, Anel, Linha, Linhas, Bolhas, } from '../components/charts/Charts';
2
- export type { SerieEmpilhada, Distribuicao, PontoRisco } from '../components/charts/Charts';
1
+ export { PALETA, cor, Barras, BarrasEmpilhadas, BarrasHorizontais, Anel, Linha, Linhas, Bolhas, } from '../components/charts/Charts';
2
+ export type { SerieEmpilhada, Distribuicao, PontoRisco, BarrasProps, CliqueGrafico } from '../components/charts/Charts';
@@ -1,4 +1,4 @@
1
1
  export { useApi } from '../hooks/useApi';
2
2
  export type { RequestOptions } from '../hooks/useApi';
3
- export { useTheme } from '../hooks/useTheme';
4
- export type { Theme } from '../hooks/useTheme';
3
+ export { useTheme } from '../../v1/capabilities/theme/useTheme';
4
+ export type { Theme } from '../../v1/capabilities/theme/useTheme';
@@ -9,8 +9,8 @@ export { default as PhotoAvatar } from '../components/molecules/PhotoAvatar/Phot
9
9
  export { default as DataTable } from '../components/molecules/DataTable/DataTable';
10
10
  export { timestampDeData } from '../components/molecules/DataTable/DataTable';
11
11
  export type { DataTableColumn, DataTableLabels, DataTableView, DataTableEstado, } from '../components/molecules/DataTable/DataTable';
12
- export { default as ColumnPicker, applyColumnLayout, orderColumns, } from '../components/molecules/ColumnPicker/ColumnPicker';
13
- export type { ColumnPickerItem, ColumnPickerLabels, } from '../components/molecules/ColumnPicker/ColumnPicker';
12
+ export { default as ColumnPicker, applyColumnLayout, orderColumns, useColumnLayout, } from '../components/molecules/ColumnPicker/ColumnPicker';
13
+ export type { ColumnPickerItem, ColumnPickerLabels, ColumnPickerProps, ColumnLayout, UseColumnLayoutOptions, UseColumnLayoutResult, } from '../components/molecules/ColumnPicker/ColumnPicker';
14
14
  export { default as FileDropzone } from '../components/molecules/FileDropzone/FileDropzone';
15
15
  export type { FileDropzoneProps, FileDropzoneLabels } from '../components/molecules/FileDropzone/FileDropzone';
16
16
  export { default as LanguageSwitcher } from '../components/molecules/LanguageSwitcher/LanguageSwitcher';
@@ -0,0 +1,20 @@
1
+ import { type CSSProperties } from 'react';
2
+ /**
3
+ * Aspeto comum das listas suspensas (SelectInput, MenuAcoes): cartão arredondado com sombra, nos dois temas.
4
+ * Um só sítio para ficarem iguais.
5
+ */
6
+ export declare const PANEL_CLASS = "fixed z-[60] min-w-[10rem] max-h-72 overflow-auto rounded-xl border border-slate-200 bg-white py-1 text-sm shadow-lg dark:border-slate-700 dark:bg-slate-900";
7
+ /** Item de uma lista suspensa; `active` = o que o teclado tem selecionado. */
8
+ export declare const itemClass: (active: boolean, danger?: boolean) => string;
9
+ /**
10
+ * Painel flutuante preso a um botão: posição fixa (não é cortado por tabelas ou janelas com scroll), abre para
11
+ * cima quando não cabe por baixo, fecha ao clicar fora, ao fazer scroll fora dele ou ao redimensionar.
12
+ */
13
+ export declare function useFloatingPanel(align?: 'left' | 'right'): {
14
+ open: boolean;
15
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
16
+ close: () => void;
17
+ triggerRef: import("react").RefObject<HTMLButtonElement | null>;
18
+ panelRef: import("react").RefObject<HTMLDivElement | null>;
19
+ style: CSSProperties;
20
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Se a app está em escuro agora (a classe `.dark` no `<html>`), e muda quando o
3
+ * tema muda.
4
+ *
5
+ * Para o que não pode usar o `dark:` do Tailwind e precisa das cores em
6
+ * JavaScript: gráficos, `<iframe>`, SVG com cores por props. O componente volta
7
+ * a desenhar quando o tema muda.
8
+ */
9
+ export declare function useIsDark(): boolean;
10
+ export default useIsDark;
@@ -0,0 +1,29 @@
1
+ export type Theme = 'light' | 'dark' | 'system';
2
+ /** Chave da escolha no localStorage. A mesma nos portais (Tickets, AuditoriasIT). */
3
+ export declare const THEME_STORAGE_KEY = "theme";
4
+ /** Põe ou tira a classe `.dark` no `<html>`: é a ela que os componentes e os tokens reagem. */
5
+ export declare function applyTheme(theme: Theme): void;
6
+ /**
7
+ * Script para pôr no `<head>` do `index.html`, antes do CSS: aplica o tema
8
+ * guardado antes da primeira pintura (sem o clarão branco ao abrir em escuro).
9
+ *
10
+ * O build também o põe em `dist/theme-boot.js`, para a app o injetar no
11
+ * `index.html` sem o copiar (ex: num plugin `transformIndexHtml` do Vite).
12
+ */
13
+ export declare const themeBootScript = "(function(){try{var k='theme',o='proef-theme',v=localStorage.getItem(k)||localStorage.getItem(o)||'system';if(v==='dark'||(v==='system'&&window.matchMedia('(prefers-color-scheme: dark)').matches))document.documentElement.classList.add('dark')}catch(e){}})();";
14
+ /**
15
+ * Tema da app: claro, escuro ou o do sistema. Guarda a escolha (sozinho, a cada
16
+ * mudança), aplica a classe `.dark` no `<html>`, segue o sistema em `system` e
17
+ * acompanha a escolha feita noutro separador.
18
+ *
19
+ * const { theme, setTheme } = useTheme()
20
+ * <AppShell theme={theme} onThemeChange={setTheme} …/>
21
+ *
22
+ * Para não haver clarão ao abrir, pôr o `themeBootScript` no `index.html`.
23
+ */
24
+ export declare function useTheme(): {
25
+ theme: Theme;
26
+ setTheme: (t: Theme) => void;
27
+ cycle: () => void;
28
+ };
29
+ export default useTheme;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ export interface PaginationLabels {
3
+ /** "{page}" e "{pages}" são substituídos (ex: "Página {page} de {pages}"). */
4
+ page: string;
5
+ /** "{count}" é substituído pelo total de registos (ex: "{count} resultados"). */
6
+ total: string;
7
+ perPage: string;
8
+ prev: string;
9
+ next: string;
10
+ }
11
+ export declare const DEFAULT_PAGINATION_LABELS: PaginationLabels;
12
+ export interface PaginationProps {
13
+ /** Página atual, a contar de 1. */
14
+ page: number;
15
+ /** Número de páginas. */
16
+ pages: number;
17
+ onPageChange: (page: number) => void;
18
+ /** Total de registos (mostrado à esquerda). */
19
+ total?: number;
20
+ /** Registos por página e as opções do seletor (sem opções, não há seletor). */
21
+ pageSize?: number;
22
+ pageSizeOptions?: number[];
23
+ onPageSizeChange?: (size: number) => void;
24
+ labels?: Partial<PaginationLabels>;
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Paginação por baixo de uma lista: "Página 1 de 4", o total, quantos por página e
29
+ * Anterior/Seguinte. É a mesma que a `DataTable` mostra; usar esta quando a app pagina
30
+ * no servidor (a tabela recebe só a página atual).
31
+ */
32
+ export default function Pagination({ page, pages, onPageChange, total, pageSize, pageSizeOptions, onPageSizeChange, labels, className, }: PaginationProps): React.JSX.Element;
33
+ export { Pagination };
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ export type ToastTone = 'success' | 'error' | 'warning' | 'info';
3
+ export interface ToastOptions {
4
+ /** Linha em negrito por cima da mensagem. */
5
+ title?: string;
6
+ /** Botão no aviso (ex: Desfazer, Tentar de novo). Fecha o aviso depois de correr. */
7
+ action?: {
8
+ label: string;
9
+ onClick: () => void;
10
+ };
11
+ /**
12
+ * Quanto tempo fica visível, em ms. `0`: fica até ser fechado. Por omissão
13
+ * depende do tipo: ler um erro demora mais do que um "Guardado".
14
+ */
15
+ duration?: number;
16
+ }
17
+ export interface ToastApi {
18
+ success: (message: React.ReactNode, options?: ToastOptions) => number;
19
+ error: (message: React.ReactNode, options?: ToastOptions) => number;
20
+ warning: (message: React.ReactNode, options?: ToastOptions) => number;
21
+ info: (message: React.ReactNode, options?: ToastOptions) => number;
22
+ /** Fecha um aviso pelo número que as funções acima devolvem. */
23
+ dismiss: (id: number) => void;
24
+ }
25
+ export interface ToastProviderProps {
26
+ children: React.ReactNode;
27
+ /** Nome do botão × de cada aviso, para leitores de ecrã. Por omissão: "Fechar aviso". */
28
+ closeLabel?: string;
29
+ /** Nome da zona dos avisos, para leitores de ecrã. Por omissão: "Avisos". */
30
+ regionLabel?: string;
31
+ /** Máximo de avisos visíveis ao mesmo tempo; os mais antigos saem. Por omissão 4. */
32
+ max?: number;
33
+ }
34
+ /**
35
+ * Avisos da app. Fora de um ToastProvider dá erro, para não se perderem
36
+ * avisos sem ninguém reparar.
37
+ */
38
+ export declare function useToast(): ToastApi;
39
+ /**
40
+ * Avisos do resultado de uma ação, no canto inferior direito (ex: "Ticket
41
+ * guardado", "Não foi possível apagar").
42
+ *
43
+ * Monta-se uma vez à volta da app; em qualquer ecrã, `useToast()` dá
44
+ * `success`, `error`, `warning` e `info`. Desaparecem sozinhos (os erros
45
+ * ficam mais tempo); com o rato por cima ficam até ele sair. Aparecem por cima
46
+ * de uma janela (Dialog) aberta.
47
+ *
48
+ * Substituem o `alert()` do browser. Erros de validação de um formulário não
49
+ * vão aqui: ficam junto aos campos.
50
+ */
51
+ export default function ToastProvider({ children, closeLabel, regionLabel, max }: ToastProviderProps): React.JSX.Element;
@@ -21,9 +21,9 @@ export interface FormFieldProps {
21
21
  end?: React.ReactNode;
22
22
  /** Ocupa a linha toda (ex: observações, anexo). */
23
23
  wide?: boolean;
24
- /** Etiqueta alinhada ao topo em vez de ao meio (campos altos, como o TextArea). */
24
+ /** Etiqueta alinhada ao topo em vez de ao meio (campos altos, como o [TextArea](?path=/docs/v1-primitives-forms-textarea--docs)). */
25
25
  alignTop?: boolean;
26
- /** O campo: TextInput, SelectInput, TextArea ou outro. */
26
+ /** O campo: [TextInput](?path=/docs/v1-primitives-forms-textinput--docs), [SelectInput](?path=/docs/v1-primitives-forms-selectinput--docs), [TextArea](?path=/docs/v1-primitives-forms-textarea--docs), [LookupInput](?path=/docs/v1-primitives-forms-lookupinput--docs) ou outro. */
27
27
  children: React.ReactNode;
28
28
  }
29
29
  /**
@@ -31,7 +31,7 @@ export interface FormFieldProps {
31
31
  * [FormGrid](?path=/docs/v1-components-forms-formgrid--docs).
32
32
  *
33
33
  * Liga a etiqueta ao campo (clicar na etiqueta foca o campo) e passa-lhe o
34
- * `required`, se o campo for TextInput, SelectInput ou TextArea.
34
+ * `required`, se o campo for [TextInput](?path=/docs/v1-primitives-forms-textinput--docs), [SelectInput](?path=/docs/v1-primitives-forms-selectinput--docs), [TextArea](?path=/docs/v1-primitives-forms-textarea--docs) ou [LookupInput](?path=/docs/v1-primitives-forms-lookupinput--docs).
35
35
  */
36
36
  export default function FormField({ label, required, hint, marks, markSlots, aside, end, wide, alignTop, children }: FormFieldProps): React.JSX.Element;
37
37
  export interface FieldMarkProps {
@@ -15,6 +15,8 @@ export declare const useFormGrid: () => {
15
15
  *
16
16
  * Adapta-se à largura do sítio onde está (não à do ecrã): abaixo de 680 px as
17
17
  * etiquetas estreitam; abaixo de 500 px cada etiqueta fica por cima do campo.
18
+ *
19
+ * **Exemplo completo:** [Formulário em modal](?path=/docs/v1-patterns-forms-formulário-em-modal--docs).
18
20
  */
19
21
  export default function FormGrid({ columns, className, children }: FormGridProps): React.JSX.Element;
20
22
  /** Linha de separação entre grupos de campos, a toda a largura. */
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { type SideNavLabels, type SideNavProps } from '../SideNav/SideNav';
3
+ export interface AppShellLabels extends SideNavLabels {
4
+ openMenu: string;
5
+ }
6
+ export interface AppShellProps extends Omit<SideNavProps, 'open' | 'onOpenChange' | 'footer' | 'labels'> {
7
+ children: React.ReactNode;
8
+ /** Conteúdo extra no rodapé do menu, por cima do tema (ex: um filtro global). */
9
+ sidebarFooter?: (expanded: boolean) => React.ReactNode;
10
+ /** Barras no topo, com a largura toda (ex: "A ver como…", "A sincronizar…"). Empurram o menu e a página para baixo. */
11
+ banners?: React.ReactNode;
12
+ /** Barra fixa por cima da página, à direita do menu (ex: título e alertas). Traz o seu próprio fundo. */
13
+ topBar?: React.ReactNode;
14
+ /**
15
+ * A página ocupa a altura que sobra do ecrã, sem scroll da página (ex:
16
+ * quadros e listas que fazem scroll por dentro, com o `Page` em `fill`).
17
+ * As margens são as mesmas das outras páginas.
18
+ */
19
+ fullHeight?: boolean;
20
+ /** Menu aberto ao entrar (ecrãs grandes). Por omissão sim; fechado fica só com os ícones. */
21
+ defaultOpen?: boolean;
22
+ /** A pessoa abriu ou fechou o menu (para a app guardar a escolha, se quiser). */
23
+ onOpenChange?: (open: boolean) => void;
24
+ labels?: Partial<AppShellLabels>;
25
+ }
26
+ /**
27
+ * A moldura da app: o menu lateral (`SideNav`) à esquerda e a página à
28
+ * direita, com barras opcionais no topo.
29
+ *
30
+ * Em ecrãs pequenos (< 1024px) o menu é uma gaveta, aberta pelo botão no canto,
31
+ * que fecha ao mudar de página.
32
+ *
33
+ * Precisa de estar dentro de um Router do react-router.
34
+ */
35
+ export default function AppShell({ children, sidebarFooter, banners, topBar, fullHeight, defaultOpen, onOpenChange, labels, ...sideNav }: AppShellProps): React.JSX.Element;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { type PageHeaderProps } from '../PageHeader/PageHeader';
3
+ export interface PageProps extends PageHeaderProps {
4
+ /** Separadores da página (ex: `<Tabs …/>`), entre o cabeçalho e o conteúdo. */
5
+ tabs?: React.ReactNode;
6
+ /**
7
+ * A página ocupa a altura que sobra e o conteúdo faz scroll por dentro (ex:
8
+ * quadros e listas compridas). Usar com o `fullHeight` do `AppShell`.
9
+ */
10
+ fill?: boolean;
11
+ children: React.ReactNode;
12
+ }
13
+ /**
14
+ * Uma página da app: cabeçalho (`PageHeader`), separadores opcionais e o
15
+ * conteúdo, sempre com os mesmos espaços entre eles. As margens à volta vêm do
16
+ * `AppShell`; a página não põe as suas.
17
+ *
18
+ * **Caminho automático**: dentro do `AppShell`, numa página que está num grupo
19
+ * do menu, o caminho por cima do título é "grupo › página" (ex: "App & Dev ›
20
+ * Sprints"), com os nomes do menu. Passar `breadcrumb` substitui-o (ex: no
21
+ * detalhe de um registo); `breadcrumb={[]}` tira-o.
22
+ */
23
+ export default function Page({ tabs, fill, children, breadcrumb, ...header }: PageProps): React.JSX.Element;