@wellingtonhlc/shared-ui 0.24.9 → 0.24.11
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/README.md +84 -93
- package/dist/components/Page.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Wellington Shared UI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Conjunto de componentes visuais padronizados, criado por Wellington Henrique para aplicacoes React.
|
|
4
4
|
|
|
5
5
|
O objetivo deste pacote e concentrar componentes base, tokens, presets e helpers de UI reutilizaveis, sem regras de negocio de dominio.
|
|
6
6
|
|
|
@@ -20,8 +20,8 @@ export function ExamplePage() {
|
|
|
20
20
|
<Page.Root>
|
|
21
21
|
<Card.Root>
|
|
22
22
|
<Card.Header>
|
|
23
|
-
<Card.Title>
|
|
24
|
-
<Card.Description>Consulta
|
|
23
|
+
<Card.Title>Registros</Card.Title>
|
|
24
|
+
<Card.Description>Consulta de dados</Card.Description>
|
|
25
25
|
</Card.Header>
|
|
26
26
|
<Card.Body>
|
|
27
27
|
<Button>Salvar</Button>
|
|
@@ -32,24 +32,16 @@ export function ExamplePage() {
|
|
|
32
32
|
}
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## Principios
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Este pacote foi desenhado para oferecer infraestrutura visual generica:
|
|
38
38
|
|
|
39
39
|
- componentes base de interface;
|
|
40
40
|
- campos de formulario reutilizaveis;
|
|
41
|
-
-
|
|
41
|
+
- primitivas de acao;
|
|
42
42
|
- tokens, estilos e presets;
|
|
43
|
-
- helpers sem dependencia de dominio
|
|
44
|
-
|
|
45
|
-
Nao inclua:
|
|
46
|
-
|
|
47
|
-
- services HTTP;
|
|
48
|
-
- rotas;
|
|
49
|
-
- schemas de dominio;
|
|
50
|
-
- permissoes;
|
|
51
|
-
- regras de negocio;
|
|
52
|
-
- componentes acoplados a `customer`, `supplier`, `item`, PDV, financeiro, estoque, licencas, suporte ou relatorios.
|
|
43
|
+
- helpers sem dependencia de dominio;
|
|
44
|
+
- composicao por slots quando o componente possui partes internas.
|
|
53
45
|
|
|
54
46
|
## Scripts
|
|
55
47
|
|
|
@@ -64,9 +56,9 @@ Nao inclua:
|
|
|
64
56
|
| `npm run storybook` | Sobe o Storybook local. |
|
|
65
57
|
| `npm run build-storybook` | Gera build estatico do Storybook. |
|
|
66
58
|
|
|
67
|
-
##
|
|
59
|
+
## Validacao de Page Actions
|
|
68
60
|
|
|
69
|
-
O pacote publica o CLI `shared-ui-check-page-actions` para validar o contrato de actions em
|
|
61
|
+
O pacote publica o CLI `shared-ui-check-page-actions` para validar o contrato de actions em uma aplicacao.
|
|
70
62
|
|
|
71
63
|
Contrato esperado:
|
|
72
64
|
|
|
@@ -75,7 +67,7 @@ Contrato esperado:
|
|
|
75
67
|
- Props como `helpContent`, `helpLabel`, `position`, `align` e `size` pertencem ao `Page.Actions`.
|
|
76
68
|
- Nao usar `ActionBar.*`, `Page.Root actions=...` dentro de `AppLayout`, Fragment, `div` ou `Page.ActionButton` solto como root de `AppLayout.actions`.
|
|
77
69
|
|
|
78
|
-
Uso recomendado
|
|
70
|
+
Uso recomendado:
|
|
79
71
|
|
|
80
72
|
```json
|
|
81
73
|
{
|
|
@@ -101,15 +93,60 @@ Persistencia de preferencia continua sendo responsabilidade do consumidor. Use
|
|
|
101
93
|
`localStorage`:
|
|
102
94
|
|
|
103
95
|
```tsx
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
96
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
97
|
+
import { Page, type PageActionsPosition, type PageActionsPreferences } from '@wellingtonhlc/shared-ui';
|
|
98
|
+
|
|
99
|
+
const storageKey = '@my-app/preference/page-actions-position';
|
|
100
|
+
const positions: PageActionsPosition[] = ['left', 'top', 'right', 'bottom'];
|
|
101
|
+
|
|
102
|
+
function readStoredPosition() {
|
|
103
|
+
const stored = window.localStorage.getItem(storageKey);
|
|
104
|
+
return positions.includes(stored as PageActionsPosition) ? (stored as PageActionsPosition) : undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function AppLayout({ children }: { children: React.ReactNode }) {
|
|
108
|
+
const [position, setPosition] = useState<PageActionsPosition | undefined>(readStoredPosition);
|
|
109
|
+
|
|
110
|
+
const handlePositionChange = useCallback(function handlePositionChange(nextPosition: PageActionsPosition) {
|
|
111
|
+
setPosition(nextPosition);
|
|
112
|
+
window.localStorage.setItem(storageKey, nextPosition);
|
|
113
|
+
}, []);
|
|
114
|
+
|
|
115
|
+
const preferences = useMemo<PageActionsPreferences>(
|
|
116
|
+
() => ({
|
|
117
|
+
mobilePosition: 'bottom',
|
|
118
|
+
movable: true,
|
|
119
|
+
onPositionChange: handlePositionChange,
|
|
120
|
+
position,
|
|
121
|
+
}),
|
|
122
|
+
[handlePositionChange, position],
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<Page.ActionsProvider preferences={preferences}>
|
|
127
|
+
<Page.ActionsSlot position="left" />
|
|
128
|
+
<main>{children}</main>
|
|
129
|
+
<Page.ActionsSlot position="right" />
|
|
130
|
+
<Page.ActionsSlot position="top" />
|
|
131
|
+
<Page.ActionsSlot position="bottom" />
|
|
132
|
+
</Page.ActionsProvider>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Acoes de uma tela devem continuar usando `Page.Actions`; o provider apenas controla onde elas serao exibidas:
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
import { Page } from '@wellingtonhlc/shared-ui/components/Page';
|
|
141
|
+
import { Save } from 'lucide-react';
|
|
142
|
+
|
|
143
|
+
export function EditPageActions() {
|
|
144
|
+
return (
|
|
145
|
+
<Page.Actions helpLabel="Ajuda" helpContent="Revise os dados antes de salvar.">
|
|
146
|
+
<Page.ActionButton icon={<Save />} label="Salvar" />
|
|
147
|
+
</Page.Actions>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
113
150
|
```
|
|
114
151
|
|
|
115
152
|
Telas podem limitar o contrato localmente:
|
|
@@ -137,19 +174,6 @@ npm run build-storybook
|
|
|
137
174
|
npm run check:storybook-static
|
|
138
175
|
```
|
|
139
176
|
|
|
140
|
-
## Qualidade publica
|
|
141
|
-
|
|
142
|
-
Todo export publico deve ter pelo menos uma destas evidencias:
|
|
143
|
-
|
|
144
|
-
- teste de contrato observavel em `tests/`;
|
|
145
|
-
- story em `stories/` cobrindo uso real, estados e variantes;
|
|
146
|
-
- justificativa explicita na spec/PR quando o export for puramente auxiliar.
|
|
147
|
-
|
|
148
|
-
Componentes interativos devem preservar acessibilidade verificavel: labels, roles, atributos
|
|
149
|
-
`aria-*`, estado `disabled`/`loading`/`selected` quando aplicavel, foco e callbacks publicos.
|
|
150
|
-
O gate `npm run test` inclui axe em composicoes representativas e nao deve ser burlado com
|
|
151
|
-
snapshots de classe completa.
|
|
152
|
-
|
|
153
177
|
## Exportacoes
|
|
154
178
|
|
|
155
179
|
Entrada principal:
|
|
@@ -267,21 +291,7 @@ Padrões do painel:
|
|
|
267
291
|
- Limita a altura com `maxHeightClassName`; o default é `max-h-[calc(100vh-12rem)]`.
|
|
268
292
|
- Aplica rolagem apenas na área de filtros.
|
|
269
293
|
- Use `Filter.Footer` para manter botões sempre visíveis no rodapé do painel.
|
|
270
|
-
- Em
|
|
271
|
-
|
|
272
|
-
## Contrato publico atual
|
|
273
|
-
|
|
274
|
-
O pacote oficial e `@wellingtonhlc/shared-ui`, publicado no npm publico (`https://registry.npmjs.org/`).
|
|
275
|
-
Ele deve permanecer generico: componentes visuais, utilitarios, tokens, estilos e preset Tailwind.
|
|
276
|
-
|
|
277
|
-
Fora do contrato publico:
|
|
278
|
-
|
|
279
|
-
- regra de negocio;
|
|
280
|
-
- services HTTP;
|
|
281
|
-
- rotas;
|
|
282
|
-
- permissoes;
|
|
283
|
-
- schemas de dominio;
|
|
284
|
-
- textos ou fluxos especificos de CRM, licencas, pagamentos, suporte, relatorios ou clientes.
|
|
294
|
+
- Em interfaces densas, campos dentro do painel devem preferir `size="sm"` e nao devem usar formato `rounded-full`.
|
|
285
295
|
|
|
286
296
|
## Contrato publico 0.1.0
|
|
287
297
|
|
|
@@ -299,17 +309,6 @@ Exports removidos:
|
|
|
299
309
|
- `SearchWorkspace`: componha layout no consumidor ou com componentes genéricos.
|
|
300
310
|
- `TabsUnderline` e `UnderlinedTabs`: use `TabsUnderlined`.
|
|
301
311
|
|
|
302
|
-
## Padroes de implementacao
|
|
303
|
-
|
|
304
|
-
- Exporte sempre o componente e seus tipos publicos em `src/index.ts`.
|
|
305
|
-
- Prefira composicao por slots para componentes com partes internas (`Root`, `Header`, `Body`, `Footer`, `Actions`, etc.).
|
|
306
|
-
- Evite aliases antes da v1; a API deve ser definitiva sempre que possivel.
|
|
307
|
-
- Preserve nomes semanticos e contratos pequenos.
|
|
308
|
-
- Use `cn` para composicao de classes.
|
|
309
|
-
- Mantenha o pacote livre de regra de negocio dos consumidores.
|
|
310
|
-
- Rode `npm run build` antes de publicar.
|
|
311
|
-
- Valide pelo menos um consumidor quando a mudanca puder afetar runtime.
|
|
312
|
-
|
|
313
312
|
## Versionamento
|
|
314
313
|
|
|
315
314
|
Este pacote segue SemVer, mesmo antes da v1:
|
|
@@ -322,12 +321,17 @@ Tabela de historico:
|
|
|
322
321
|
|
|
323
322
|
| Versao | Data | Tipo | Resumo | Validacao |
|
|
324
323
|
|--------|------|------|--------|-----------|
|
|
324
|
+
| `0.24.11` | 2026-06-20 | Patch | Mantem o botao de ajuda antes das acoes da pagina para evitar que fique oculto em barras horizontais com overflow. | `npm run check`. |
|
|
325
|
+
| `0.24.10` | 2026-06-20 | Patch | Documenta o uso de `Page.ActionsProvider`, preferencias de posicao, slots e consumo pos-publicacao com `@latest`. | `npm run check`. |
|
|
326
|
+
| `0.24.9` | 2026-06-20 | Patch | Estabiliza o pacote publicado de `Page.Actions` movel para consumo em aplicacoes React. | `npm run typecheck`; `npm run build`; builds de consumidores. |
|
|
327
|
+
| `0.24.8` | 2026-06-20 | Patch | Corrige a renderizacao de `Page.Actions` em slots clonando o componente com marcador interno de slot. | `npm run typecheck`; `npm run test`; `npm run build`. |
|
|
328
|
+
| `0.24.7` | 2026-06-20 | Minor pre-v1 | Adiciona `Page.ActionsProvider`, `Page.ActionsSlot`, posicoes `left/top/right/bottom`, ajuda contextual e movimentacao de acoes por preferencia do consumidor. | `npm run check`. |
|
|
325
329
|
| `0.24.3` | 2026-06-18 | Patch | Amplia testes de contrato para exports publicos, adiciona gate axe e smoke do Storybook estatico ao `check`. | `npm run test`; `npm run check`. |
|
|
326
330
|
| `0.24.2` | 2026-06-18 | Patch | Alinha metadados e documentacao do pacote npm publico, mantendo o contrato generico e sem regra de negocio. | `npm run build`; `npm run build-storybook`; `npm pack --dry-run`. |
|
|
327
|
-
| `0.24.0` | 2026-06-17 | Minor pre-v1 | Adiciona `Workspace` e corrige a composicao de `Filter` para consultas com painel de filtros e area de resultados. | `npm run build`; build
|
|
331
|
+
| `0.24.0` | 2026-06-17 | Minor pre-v1 | Adiciona `Workspace` e corrige a composicao de `Filter` para consultas com painel de filtros e area de resultados. | `npm run build`; build de consumidor. |
|
|
328
332
|
| `0.21.0` | 2026-06-17 | Minor pre-v1 | Adiciona stories para `Modal`, `Card`, `PageMessage`, `EmptyState`, `StatCard`, `SelectField`, `TextareaField`, `DateField`, `DecimalField`, `RadioGroup`, `MultiSelectField`, `TabsUnderlined`, `Tooltip`, `CopyableField`, `FieldGroup`, `FieldSkeleton`, `FieldValidationError`, `NavCard`, `Sidebar` e `AppShell`. | `npm run build`; `npm run build-storybook`. |
|
|
329
|
-
| `0.1.17` | 2026-06-16 | Minor pre-v1 | Remove a variante ambigua `default` de `Button`; adiciona variants semanticas `information` e `warning`; `ConfirmationDialog` usa `information`, `question`, `warning` e `destructive` com botao principal na cor da variant; Storybook passou a gerar tokens semanticos de tema. | `npm run build`; `npm run build-storybook`; builds
|
|
330
|
-
| `0.1.16` | 2026-06-16 | Patch | Consolida
|
|
333
|
+
| `0.1.17` | 2026-06-16 | Minor pre-v1 | Remove a variante ambigua `default` de `Button`; adiciona variants semanticas `information` e `warning`; `ConfirmationDialog` usa `information`, `question`, `warning` e `destructive` com botao principal na cor da variant; Storybook passou a gerar tokens semanticos de tema. | `npm run build`; `npm run build-storybook`; builds de consumidores. |
|
|
334
|
+
| `0.1.16` | 2026-06-16 | Patch | Consolida ajustes visuais recentes do pacote para consumo em aplicacoes React. | `npm run build`; `npm run build-storybook`; validacao em consumidor. |
|
|
331
335
|
| `0.1.15` | 2026-06-16 | Patch | Corrige a hierarquia de z-index de `Modal` e `ConfirmationDialog` para o overlay cobrir sidebar e flyouts. | `npm run build`; `npm run build-storybook`. |
|
|
332
336
|
| `0.1.14` | 2026-06-16 | Minor pre-v1 | Adiciona `icon` e `iconPosition` ao `TextField` e ajusta o offset lateral dos icones internos. | `npm run build`; `npm run build-storybook`. |
|
|
333
337
|
| `0.1.13` | 2026-06-16 | Minor pre-v1 | Refina o visual do `Pagination`, remove botoes circulares e adiciona `size="sm" | "md" | "lg"`. | `npm run build`; `npm run build-storybook`. |
|
|
@@ -335,32 +339,23 @@ Tabela de historico:
|
|
|
335
339
|
| `0.1.11` | 2026-06-16 | Patch | Reequilibra variantes de `Button`, separando `default` de `primary` e usando cores explicitas para estados de marca e semanticos. | `npm run build`; `npm run build-storybook`. |
|
|
336
340
|
| `0.1.10` | 2026-06-16 | Patch | Reequilibra `Badge` `default`, `primary` e `muted` com estilos distintos e cor de texto explicita para `primary`. | `npm run build`; `npm run build-storybook`. |
|
|
337
341
|
| `0.1.9` | 2026-06-16 | Patch | Garante estilos distintos para `Badge` `default`, `primary` e `muted`, e normaliza alias legado `active` para `success`. | `npm run build`; `npm run build-storybook`. |
|
|
338
|
-
| `0.1.8` | 2026-06-16 | Minor pre-v1 | Adiciona `Switch display="inline"` para linhas compactas com label integrado e alinhamento previsivel. | `npm run build`; `npm run build-storybook`; build
|
|
339
|
-
| `0.1.7` | 2026-06-16 | Minor pre-v1 | Adiciona props de customizacao dos botoes de aparencia em `ThemePreferencesSelector`. | `npm run build`; build
|
|
340
|
-
| `0.1.6` | 2026-06-16 | Patch | Forca o destaque da aparencia selecionada por CSS explicito em `[aria-pressed='true']`. | `npm run build`; `npm run build-storybook`; build
|
|
341
|
-
| `0.1.5` | 2026-06-16 | Patch | Aplica o destaque da aparencia selecionada por estilo inline para evitar perda por ordem/geracao de CSS nos consumidores. | `npm run build`; `npm run build-storybook`; build
|
|
342
|
+
| `0.1.8` | 2026-06-16 | Minor pre-v1 | Adiciona `Switch display="inline"` para linhas compactas com label integrado e alinhamento previsivel. | `npm run build`; `npm run build-storybook`; build de consumidor. |
|
|
343
|
+
| `0.1.7` | 2026-06-16 | Minor pre-v1 | Adiciona props de customizacao dos botoes de aparencia em `ThemePreferencesSelector`. | `npm run build`; build de consumidor. |
|
|
344
|
+
| `0.1.6` | 2026-06-16 | Patch | Forca o destaque da aparencia selecionada por CSS explicito em `[aria-pressed='true']`. | `npm run build`; `npm run build-storybook`; build de consumidor. |
|
|
345
|
+
| `0.1.5` | 2026-06-16 | Patch | Aplica o destaque da aparencia selecionada por estilo inline para evitar perda por ordem/geracao de CSS nos consumidores. | `npm run build`; `npm run build-storybook`; build de consumidor. |
|
|
342
346
|
| `0.1.4` | 2026-06-16 | Patch | Usa estado `data-selected` no `ThemePreferencesSelector` para manter o destaque da aparencia selecionada nos consumidores. | `npm run build`; `npm run build-storybook`. |
|
|
343
347
|
| `0.1.3` | 2026-06-16 | Patch | Atualiza Storybook para `10.4.6`, documenta `ThemePreferencesSelector` e reforca o destaque visual da aparencia selecionada. | `npm run build`; `npm run build-storybook`. |
|
|
344
|
-
| `0.1.0` | 2026-06-15 | Breaking pre-v1 | Define `Filter.Root`/`Filter.Footer` como contrato final de filtros e remove aliases públicos provisórios. | `npm run build`; builds de
|
|
348
|
+
| `0.1.0` | 2026-06-15 | Breaking pre-v1 | Define `Filter.Root`/`Filter.Footer` como contrato final de filtros e remove aliases públicos provisórios. | `npm run build`; builds de consumidores. |
|
|
345
349
|
| `0.0.7` | 2026-06-14 | Breaking pre-v1 | Publica API composicional `SearchWorkspace.Root` e `SearchFilter.Root`/`SearchFilter.Footer` para consultas com filtros compactos. | Pendente antes da publicacao. |
|
|
346
350
|
| `0.0.5` | 2026-06-14 | Minor pre-v1 | Adiciona `Table.Root isFramed`, `fill`, `viewportClassName` e `wrapperProps` para controlar frame e ocupacao de espaco sem classes ad-hoc. | `npm run build`. |
|
|
347
351
|
| `0.0.4` | 2026-06-14 | Minor pre-v1 | Adiciona `Table.Row isInteractive` para controlar cursor de linhas interativas, com padrao `true`. | `npm run build`. |
|
|
348
|
-
| `0.0.3` | 2026-06-14 | Breaking pre-v1 | Define API final de `Card` por slots explicitos; remove `<Card>` chamavel, `Card.Content` e `CardContentProps`. | `npm run build`; builds de
|
|
352
|
+
| `0.0.3` | 2026-06-14 | Breaking pre-v1 | Define API final de `Card` por slots explicitos; remove `<Card>` chamavel, `Card.Content` e `CardContentProps`. | `npm run build`; builds de consumidores. |
|
|
349
353
|
| `0.0.2` | 2026-06-14 | Minor pre-v1 | Publica pacote no npm publico com novos slots de `Card` ainda retrocompativeis. | `npm run build`. |
|
|
350
354
|
| `0.0.0` | 2026-06-14 | Inicial | Publicacao inicial do pacote `@wellingtonhlc/shared-ui`. | Build do pacote. |
|
|
351
355
|
|
|
352
|
-
Ao criar uma nova versao:
|
|
353
|
-
|
|
354
|
-
1. Atualize `package.json`.
|
|
355
|
-
2. Atualize esta tabela com versao, data, tipo, resumo e validacao.
|
|
356
|
-
3. Rode `npm run check`.
|
|
357
|
-
4. Rode `npm pack --dry-run` e revise o conteudo do pacote.
|
|
358
|
-
5. Publique com `npm publish --access public --registry=https://registry.npmjs.org/`.
|
|
359
|
-
6. Atualize os consumidores afetados.
|
|
360
|
-
|
|
361
356
|
## Publicacao
|
|
362
357
|
|
|
363
|
-
|
|
358
|
+
Validacao e publicacao npm:
|
|
364
359
|
|
|
365
360
|
```bash
|
|
366
361
|
npm run build
|
|
@@ -375,10 +370,10 @@ Quando o npm exigir OTP:
|
|
|
375
370
|
npm publish --access public --registry=https://registry.npmjs.org/ --otp CODIGO_OTP
|
|
376
371
|
```
|
|
377
372
|
|
|
378
|
-
Depois de publicar, atualize
|
|
373
|
+
Depois de publicar, atualize a aplicacao consumidora:
|
|
379
374
|
|
|
380
375
|
```bash
|
|
381
|
-
npm install @wellingtonhlc/shared-ui
|
|
376
|
+
npm install @wellingtonhlc/shared-ui@latest
|
|
382
377
|
npm run build
|
|
383
378
|
```
|
|
384
379
|
|
|
@@ -388,7 +383,3 @@ Se o consumidor estiver com dev server Vite em execucao, reinicie com cache limp
|
|
|
388
383
|
Remove-Item -Recurse -Force node_modules\.vite -ErrorAction SilentlyContinue
|
|
389
384
|
npm run dev -- --force
|
|
390
385
|
```
|
|
391
|
-
|
|
392
|
-
## Template de demanda
|
|
393
|
-
|
|
394
|
-
Use `docs/templates/novo-componente-shared-ui.md` quando solicitar um novo componente para este pacote.
|
package/dist/components/Page.js
CHANGED
|
@@ -210,7 +210,7 @@ function Actions({ align = 'start', __fromSlot = false, children, className, def
|
|
|
210
210
|
}
|
|
211
211
|
const helpButton = helpVisible ? (_jsx("div", { className: cn('flex shrink-0', isVertical && 'w-full justify-center'), children: _jsx(Tooltip, { className: cn('max-w-[22rem] px-3 py-2', helpClassName), content: helpContent, delayDuration: 120, openOnClick: true, side: getHelpSide(effectivePosition), children: _jsx(ActionButtonPrimitive, { "aria-label": helpLabel, icon: _jsx(CircleHelpIcon, { "aria-hidden": "true" }), tooltip: helpLabel }) }) })) : null;
|
|
212
212
|
const moveButton = canMove ? (_jsxs("div", { className: cn('relative flex shrink-0', isVertical && 'w-full justify-center'), children: [_jsx(ActionButtonPrimitive, { "aria-haspopup": "menu", "aria-label": "Mover barra de acoes", "aria-expanded": isMenuOpen, className: cn(isDragging ? 'cursor-grabbing' : 'cursor-grab'), icon: _jsx(GripVerticalIcon, { "aria-hidden": "true" }), tooltip: "Mover barra de acoes", onClick: handleMoveMenuToggle, onKeyDown: handleMoveKeyDown, onPointerCancel: handleMovePointerCancel, onPointerDown: handleMovePointerDown, onPointerMove: handleMovePointerMove, onPointerUp: handleMovePointerUp }), isMenuOpen ? (_jsx("div", { role: "menu", className: cn('border-app-border bg-surface text-foreground absolute z-40 min-w-36 rounded-md border p-1 text-xs shadow-lg', isVertical ? 'left-full top-0 ml-2' : 'right-0 top-full mt-2'), children: effectiveAllowedPositions.map((nextPosition) => (_jsx("button", { type: "button", role: "menuitemradio", "aria-checked": nextPosition === effectivePosition, className: cn('hover:bg-background-secondary flex w-full cursor-pointer items-center rounded px-2 py-1.5 text-left', nextPosition === effectivePosition && 'font-semibold text-brand'), onClick: () => handleSelectPosition(nextPosition), children: positionLabels[nextPosition] }, nextPosition))) })) : null] })) : null;
|
|
213
|
-
const actions = (_jsxs(ActionGroupPrimitive, { align: align, size: size, className: cn('min-w-0', isVertical ? 'w-full flex-col items-stretch' : 'min-w-0 overflow-x-auto overflow-y-hidden', alignClasses[align]), children: [
|
|
213
|
+
const actions = (_jsxs(ActionGroupPrimitive, { align: align, size: size, className: cn('min-w-0', isVertical ? 'w-full flex-col items-stretch' : 'min-w-0 overflow-x-auto overflow-y-hidden', alignClasses[align]), children: [helpButton, children, moveButton] }));
|
|
214
214
|
return (_jsxs("div", { className: cn('flex min-w-0', positionClasses[effectivePosition], isVertical ? 'flex-col' : 'items-center', className), children: [actions, isDragging ? _jsx(PageActionsDropZones, { activePosition: dragTarget ?? effectivePosition, allowedPositions: effectiveAllowedPositions }) : null] }));
|
|
215
215
|
}
|
|
216
216
|
function PageActionsDropZones({ activePosition, allowedPositions }) {
|