@proef/common-ui 2.2.0 → 2.2.1
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/esm/index.js +26 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/legacy/components/molecules/DataTable/DataTable.js +1 -1
- package/dist/esm/legacy/components/molecules/DataTable/DataTable.js.map +1 -1
- package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js.map +1 -1
- package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js.map +1 -1
- package/dist/esm/v1/components/lists/ListFinder/ListFinder.js +111 -54
- package/dist/esm/v1/components/lists/ListFinder/ListFinder.js.map +1 -1
- package/dist/esm/v1/foundations/icons/icons.js +49 -0
- package/dist/esm/v1/foundations/icons/icons.js.map +1 -1
- package/dist/esm/v1/primitives/display/RichText/RichText.js +12 -0
- package/dist/esm/v1/primitives/display/RichText/RichText.js.map +1 -0
- package/dist/esm/v1/primitives/display/RichText/utils.js +56 -0
- package/dist/esm/v1/primitives/display/RichText/utils.js.map +1 -0
- package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js.map +1 -1
- package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js.map +1 -1
- package/dist/esm/v1/primitives/forms/RichTextEditor/RichTextEditor.js +253 -0
- package/dist/esm/v1/primitives/forms/RichTextEditor/RichTextEditor.js.map +1 -0
- package/dist/esm/v1/primitives/forms/TextInput/TextInput.js.map +1 -1
- package/dist/esm/v1/primitives/lists/ListItem/ListItem.js +45 -11
- package/dist/esm/v1/primitives/lists/ListItem/ListItem.js.map +1 -1
- package/dist/style.components.css +1 -1
- package/dist/style.css +1 -1
- package/dist/style.layered.css +1 -1
- package/dist/types/v1/components/lists/ListFinder/ListFinder.d.ts +31 -5
- package/dist/types/v1/foundations/icons/icons.d.ts +20 -0
- package/dist/types/v1/index.d.ts +8 -3
- package/dist/types/v1/primitives/display/RichText/RichText.d.ts +17 -0
- package/dist/types/v1/primitives/display/RichText/utils.d.ts +22 -0
- package/dist/types/v1/primitives/forms/RichTextEditor/RichTextEditor.d.ts +64 -0
- package/dist/types/v1/primitives/lists/ListItem/ListItem.d.ts +39 -8
- package/package.json +6 -1
package/dist/types/v1/index.d.ts
CHANGED
|
@@ -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, } 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, } 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';
|
|
@@ -24,6 +24,11 @@ export { default as Checkbox } from './primitives/forms/Checkbox/Checkbox';
|
|
|
24
24
|
export type { CheckboxProps } from './primitives/forms/Checkbox/Checkbox';
|
|
25
25
|
export { default as LookupInput } from './primitives/forms/LookupInput/LookupInput';
|
|
26
26
|
export type { LookupInputProps } from './primitives/forms/LookupInput/LookupInput';
|
|
27
|
+
export { default as RichTextEditor } from './primitives/forms/RichTextEditor/RichTextEditor';
|
|
28
|
+
export type { RichTextEditorProps, RichTextEditorLabels } from './primitives/forms/RichTextEditor/RichTextEditor';
|
|
29
|
+
export { default as RichText } from './primitives/display/RichText/RichText';
|
|
30
|
+
export type { RichTextProps } from './primitives/display/RichText/RichText';
|
|
31
|
+
export { isRichText, sanitizeRichText, richTextToPlain, richTextIsEmpty, textToRichText, richTextContentClasses, } from './primitives/display/RichText/utils';
|
|
27
32
|
export { default as FormGrid, FormDivider } from './components/forms/FormGrid/FormGrid';
|
|
28
33
|
export type { FormGridProps } from './components/forms/FormGrid/FormGrid';
|
|
29
34
|
export { default as FormField, FieldMark } from './components/forms/FormField/FormField';
|
|
@@ -73,9 +78,9 @@ export { default as PaginatedTable } from './components/tables/PaginatedTable/Pa
|
|
|
73
78
|
export type { PaginatedTableProps } from './components/tables/PaginatedTable/PaginatedTable';
|
|
74
79
|
export { DEFAULT_TABLE_LABELS } from './components/tables/Table/labels';
|
|
75
80
|
export type { TableLabels } from './components/tables/Table/labels';
|
|
76
|
-
export { default as ListItem } from './primitives/lists/ListItem/ListItem';
|
|
81
|
+
export { default as ListItem, HighlightText } from './primitives/lists/ListItem/ListItem';
|
|
77
82
|
export type { ListItemProps, ListItemContent } from './primitives/lists/ListItem/ListItem';
|
|
78
|
-
export { default as ListFinder } from './components/lists/ListFinder/ListFinder';
|
|
83
|
+
export { default as ListFinder, termosDaPesquisa } from './components/lists/ListFinder/ListFinder';
|
|
79
84
|
export type { ListFinderProps } from './components/lists/ListFinder/ListFinder';
|
|
80
85
|
export { DEFAULT_LIST_FINDER_LABELS } from './components/lists/ListFinder/labels';
|
|
81
86
|
export type { ListFinderLabels } from './components/lists/ListFinder/labels';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface RichTextProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML'> {
|
|
3
|
+
/** O texto: HTML do RichTextEditor ou texto simples (antigo, sem formatação). */
|
|
4
|
+
value: string | null | undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Mostra um texto com formatação (negrito, listas, citações, ligações, imagens) escrito no
|
|
8
|
+
* [RichTextEditor](?path=/docs/v1-primitives-forms-richtexteditor--docs).
|
|
9
|
+
*
|
|
10
|
+
* O HTML é sempre limpo antes de entrar na página: só ficam as marcas de formatação (sem
|
|
11
|
+
* scripts, estilos nem eventos) e as ligações abrem noutro separador. Texto sem marcas
|
|
12
|
+
* (guardado antes do editor) aparece com as mudanças de linha.
|
|
13
|
+
*
|
|
14
|
+
* Não tem cor própria: herda a de quem o põe (ex: branco numa bolha navy de uma conversa).
|
|
15
|
+
*/
|
|
16
|
+
export declare function RichText({ value, className, ...props }: RichTextProps): React.JSX.Element;
|
|
17
|
+
export default RichText;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Texto com formatação (HTML do [RichTextEditor](?path=/docs/v1-primitives-forms-richtexteditor--docs)):
|
|
3
|
+
* as classes do conteúdo e as funções para o guardar, ler e mostrar em segurança.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Aspeto do conteúdo (listas, citações, ligações, imagens). Sem cor de texto: herda a de quem o põe
|
|
7
|
+
* (ex: branco numa bolha navy de conversa).
|
|
8
|
+
*/
|
|
9
|
+
export declare const richTextContentClasses: string;
|
|
10
|
+
/** Parece HTML (tem pelo menos uma marca)? Textos antigos, guardados sem formatação, não. */
|
|
11
|
+
export declare function isRichText(value: string | null | undefined): boolean;
|
|
12
|
+
/** Texto simples → HTML: um parágrafo por linha (as linhas em branco ficam). */
|
|
13
|
+
export declare function textToRichText(text: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* HTML seguro para pôr na página: só as marcas de formatação, sem scripts nem atributos de eventos.
|
|
16
|
+
* Texto sem marcas é convertido (uma linha, um parágrafo). Usar sempre antes de `dangerouslySetInnerHTML`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sanitizeRichText(value: string | null | undefined): string;
|
|
19
|
+
/** Só o texto (ex: pré-visualização numa lista, notificação, pesquisa). Parágrafos e itens viram linhas. */
|
|
20
|
+
export declare function richTextToPlain(value: string | null | undefined): string;
|
|
21
|
+
/** Sem texto nem imagens (ex: `<p></p>` de um editor vazio)? Para validar "obrigatório". */
|
|
22
|
+
export declare function richTextIsEmpty(value: string | null | undefined): boolean;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface RichTextEditorLabels {
|
|
3
|
+
bold: string;
|
|
4
|
+
italic: string;
|
|
5
|
+
underline: string;
|
|
6
|
+
strike: string;
|
|
7
|
+
bulletList: string;
|
|
8
|
+
orderedList: string;
|
|
9
|
+
quote: string;
|
|
10
|
+
image: string;
|
|
11
|
+
maximize: string;
|
|
12
|
+
restore: string;
|
|
13
|
+
}
|
|
14
|
+
export interface RichTextEditorProps {
|
|
15
|
+
/** O texto, em HTML. Texto simples (antigo, sem formatação) também serve: cada linha vira um parágrafo. */
|
|
16
|
+
value: string;
|
|
17
|
+
/** Recebe o HTML a cada alteração; `''` quando fica vazio (para validar "obrigatório" sem olhar para `<p></p>`). */
|
|
18
|
+
onChange: (html: string) => void;
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
/** Marca o campo a vermelho (ex: obrigatório por preencher ao submeter). */
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
/** Altura mínima da área de escrita, em px. Por omissão 80. */
|
|
24
|
+
minHeight?: number;
|
|
25
|
+
/** Altura máxima (px ou CSS, ex: `'50vh'`): cresce com o texto até aqui e depois faz scroll por dentro. Sem isto, cresce sempre. */
|
|
26
|
+
maxHeight?: number | string;
|
|
27
|
+
/**
|
|
28
|
+
* Onde guardar uma imagem (escolhida na barra, colada ou largada); devolve o `src` a pôr no texto.
|
|
29
|
+
* Sem isto, o editor não aceita imagens.
|
|
30
|
+
*/
|
|
31
|
+
onUploadImage?: (file: File) => Promise<string>;
|
|
32
|
+
/** Mostra na barra o botão para escrever com o editor em ecrã quase inteiro (Esc volta). */
|
|
33
|
+
maximizable?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Enviar com o teclado (ex: uma conversa): Ctrl+Enter chama-o sempre. Com `submitOnEnter`,
|
|
36
|
+
* também o Enter — exceto dentro de uma lista, onde o Enter cria o item seguinte. Shift+Enter muda de linha.
|
|
37
|
+
*/
|
|
38
|
+
onSubmit?: () => void;
|
|
39
|
+
submitOnEnter?: boolean;
|
|
40
|
+
autoFocus?: boolean;
|
|
41
|
+
/** Nome acessível, quando não há etiqueta à volta (ex: "Escrever comentário"). */
|
|
42
|
+
'aria-label'?: string;
|
|
43
|
+
id?: string;
|
|
44
|
+
/** Aplica-se à caixa à volta. */
|
|
45
|
+
className?: string;
|
|
46
|
+
/** Textos da barra (para outra língua). */
|
|
47
|
+
labels?: Partial<RichTextEditorLabels>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Texto com formatação, que se vê enquanto se escreve: negrito, itálico, sublinhado, riscado,
|
|
51
|
+
* listas, citações e (com `onUploadImage`) imagens. Atalhos habituais: Ctrl+B, Ctrl+I, Ctrl+U;
|
|
52
|
+
* "- " ou "1. " no início da linha começam uma lista.
|
|
53
|
+
*
|
|
54
|
+
* Guarda HTML. Para o mostrar, usar sempre o [RichText](?path=/docs/v1-primitives-display-richtext--docs),
|
|
55
|
+
* que o limpa antes de entrar na página. Para validar "obrigatório", o `onChange` dá `''` quando está vazio
|
|
56
|
+
* (ou `richTextIsEmpty`).
|
|
57
|
+
*
|
|
58
|
+
* Para uma conversa: `onSubmit` + `submitOnEnter` (Enter envia, Shift+Enter muda de linha) e `maxHeight`
|
|
59
|
+
* para crescer com o texto até um limite.
|
|
60
|
+
*
|
|
61
|
+
* Dentro de um [FormField](?path=/docs/v1-components-forms-formfield--docs) fica com o `id` do campo.
|
|
62
|
+
*/
|
|
63
|
+
export declare function RichTextEditor({ value, onChange, placeholder, invalid, disabled, minHeight, maxHeight, onUploadImage, maximizable, onSubmit, submitOnEnter, autoFocus, 'aria-label': ariaLabel, id, className, labels: labelsProp, }: RichTextEditorProps): React.JSX.Element | null;
|
|
64
|
+
export default RichTextEditor;
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
/** O que se mostra num ListItem: o resto (ativo, marcado) é estado. */
|
|
3
3
|
export interface ListItemContent {
|
|
4
|
-
/**
|
|
4
|
+
/** Por baixo do código: o que a linha é (ex: a descrição). Até duas linhas, cortada com "…" se não couber. */
|
|
5
5
|
title: React.ReactNode;
|
|
6
|
-
/**
|
|
6
|
+
/** O texto mais forte da linha, em letra de máquina (ex: o número ou código). */
|
|
7
7
|
code?: React.ReactNode;
|
|
8
|
-
/**
|
|
8
|
+
/** Na linha do código, logo a seguir a ele: indicadores e avisos curtos. */
|
|
9
9
|
badges?: React.ReactNode;
|
|
10
|
-
/** Por baixo do título: o resto do que se quer ver de relance (local
|
|
10
|
+
/** Por baixo do título, pequeno e numa linha só (cortada com "…"): o resto do que se quer ver de relance, separado por " · " (ex: local · data). */
|
|
11
11
|
meta?: React.ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Opcional, e só com caixa de marcar (`onCheckedChange`): uma etiqueta curta
|
|
14
|
+
* (ex: a categoria) no espaço que a caixa abre por baixo dela. Sem caixa não
|
|
15
|
+
* se mostra — não há coluna para ela.
|
|
16
|
+
*/
|
|
17
|
+
tag?: React.ReactNode;
|
|
18
|
+
/** À direita, ao nível do código: marcas que se querem ver mesmo a correr a lista. */
|
|
19
|
+
aside?: React.ReactNode;
|
|
12
20
|
}
|
|
13
21
|
export interface ListItemProps extends ListItemContent {
|
|
14
22
|
/** O que está aberto ao lado (fica realçado). */
|
|
@@ -20,17 +28,40 @@ export interface ListItemProps extends ListItemContent {
|
|
|
20
28
|
onCheckedChange?: (checked: boolean) => void;
|
|
21
29
|
/** O nome da caixa de marcar, para leitores de ecrã (ex: "Marcar P-020000"). */
|
|
22
30
|
checkboxLabel?: string;
|
|
31
|
+
/**
|
|
32
|
+
* O que se procurou: realça-se no código e no título quando são texto (sem
|
|
33
|
+
* acentos nem maiúsculas). O [ListFinder](?path=/docs/v1-components-lists-listfinder--docs) passa-o sozinho.
|
|
34
|
+
*/
|
|
35
|
+
highlight?: string[];
|
|
23
36
|
className?: string;
|
|
24
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* A linha entre linhas, esbatida nas pontas: uma risca de ponta a ponta
|
|
40
|
+
* fechava cada linha numa caixa. Desenhada como fundo (e não com um ::after,
|
|
41
|
+
* que o botão da linha já usa); a última linha não a leva.
|
|
42
|
+
*/
|
|
43
|
+
export declare const LINHA_ESBATIDA = "bg-[linear-gradient(to_right,transparent,var(--color-slate-200)_15%,var(--color-slate-200)_85%,transparent)] bg-[length:100%_1px] bg-bottom bg-no-repeat last:bg-none";
|
|
44
|
+
/**
|
|
45
|
+
* Texto com os pedaços que batem com a pesquisa realçados: numa descrição
|
|
46
|
+
* comprida, ou num número de dez dígitos, não se via onde é que o que se
|
|
47
|
+
* escreveu bateu.
|
|
48
|
+
*/
|
|
49
|
+
export declare function HighlightText({ text, terms }: {
|
|
50
|
+
text: string;
|
|
51
|
+
terms?: string[];
|
|
52
|
+
}): React.JSX.Element;
|
|
25
53
|
/**
|
|
26
54
|
* Uma linha de uma lista para escolher: o cartão das listas do
|
|
27
55
|
* [ListFinder](?path=/docs/v1-components-lists-listfinder--docs).
|
|
28
56
|
*
|
|
29
|
-
* Não sabe o que mostra: a app dá as partes
|
|
30
|
-
*
|
|
57
|
+
* Não sabe o que mostra: a app dá as partes e o ListItem arruma-as sempre da
|
|
58
|
+
* mesma forma. O código é o texto mais forte da linha, com os indicadores ao
|
|
59
|
+
* lado; o título vem por baixo, mais pequeno, e o resto por baixo dele. Com
|
|
31
60
|
* `onCheckedChange` leva uma caixa à esquerda, para marcar vários (um
|
|
32
|
-
* [Checkbox](?path=/docs/v1-primitives-forms-checkbox--docs))
|
|
61
|
+
* [Checkbox](?path=/docs/v1-primitives-forms-checkbox--docs)), numa coluna de
|
|
62
|
+
* largura fixa — senão os títulos começavam em sítios diferentes de linha para
|
|
63
|
+
* linha — e, se se quiser, a `tag` por baixo dela.
|
|
33
64
|
*
|
|
34
65
|
* É um `<li>`: vai dentro de um `<ul>`.
|
|
35
66
|
*/
|
|
36
|
-
export default function ListItem({ title, code, badges, meta, active, onClick, checked, onCheckedChange, checkboxLabel, className, }: ListItemProps): React.JSX.Element;
|
|
67
|
+
export default function ListItem({ title, code, badges, meta, tag, aside, active, onClick, checked, onCheckedChange, checkboxLabel, highlight, className, }: ListItemProps): React.JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proef/common-ui",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/esm/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -93,10 +93,15 @@
|
|
|
93
93
|
"@fortawesome/free-regular-svg-icons": "^6.7.2",
|
|
94
94
|
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
|
95
95
|
"@fortawesome/react-fontawesome": "^0.2.2",
|
|
96
|
+
"@tiptap/extension-image": "^3.32.0",
|
|
97
|
+
"@tiptap/pm": "^3.32.0",
|
|
98
|
+
"@tiptap/react": "^3.32.0",
|
|
99
|
+
"@tiptap/starter-kit": "^3.32.0",
|
|
96
100
|
"@zxing/library": "^0.23.0",
|
|
97
101
|
"axios": "^1.8.1",
|
|
98
102
|
"chart.js": "^4.5.1",
|
|
99
103
|
"chartjs-plugin-datalabels": "^2.2.0",
|
|
104
|
+
"dompurify": "^3.4.17",
|
|
100
105
|
"iconoir-react": "^7.11.0",
|
|
101
106
|
"js-cookie": "^3.0.5",
|
|
102
107
|
"keycloak-js": "^25.0.0",
|