@rendra-ui/web 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -61
- package/bin/rendra.mjs +19 -7
- package/dist/base.css +33 -1
- package/dist/{button-DWhICtIG.js → button-BzJgR2gH.js} +86 -21
- package/dist/button-BzJgR2gH.js.map +1 -0
- package/dist/chart.js +61 -15
- package/dist/chart.js.map +1 -1
- package/dist/cli/auditar.js +66 -16
- package/dist/cli/auditar.js.map +1 -1
- package/dist/cli/codigos.js +2 -2
- package/dist/cli/executar-auditar.js +634 -0
- package/dist/cli/executar-auditar.js.map +1 -0
- package/dist/cli/help.js +7 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/trocar.js +2 -2
- package/dist/cli/typescript-loader.js +1 -1
- package/dist/{cn-DDZQKUVV.js → cn-Cw7M5kEP.js} +2 -2
- package/dist/{cn-DDZQKUVV.js.map → cn-Cw7M5kEP.js.map} +1 -1
- package/dist/{components-Cq_PmN4y.js → components-DkpspH9h.js} +21 -4
- package/dist/components-DkpspH9h.js.map +1 -0
- package/dist/components.css +274 -32
- package/dist/document-viewer.js +6 -6
- package/dist/document-viewer.js.map +1 -1
- package/dist/{empty-state-C491qfzf.js → empty-state-Cdb1vkMT.js} +81 -37
- package/dist/empty-state-Cdb1vkMT.js.map +1 -0
- package/dist/features-max--5VEt6M7.js +3 -0
- package/dist/index.js +1170 -390
- package/dist/index.js.map +1 -1
- package/dist/motion-context-5BRIQAJm.js +107 -0
- package/dist/motion-context-5BRIQAJm.js.map +1 -0
- package/dist/{rendra-provider-BRtk5Qa1.js → rendra-provider-CRe0XdOU.js} +9 -5
- package/dist/rendra-provider-CRe0XdOU.js.map +1 -0
- package/dist/rich-text-editor.js +4 -4
- package/dist/router-bridge.js +5 -4
- package/dist/router-bridge.js.map +1 -1
- package/dist/tokens.css +73 -15
- package/dist/tooltip-BAMSaGbS.js +224 -0
- package/dist/tooltip-BAMSaGbS.js.map +1 -0
- package/dist/types/components/app-shell/app-shell.d.ts +22 -2
- package/dist/types/components/app-shell/shell-context.d.ts +7 -1
- package/dist/types/components/app-shell/types.d.ts +23 -0
- package/dist/types/components/layout/page-header.d.ts +17 -1
- package/dist/types/components/rendra-provider.d.ts +7 -1
- package/dist/types/components/rendra-router-bridge.d.ts +3 -1
- package/dist/types/components/ui/accordion.d.ts +1 -1
- package/dist/types/components/ui/badge.d.ts +1 -1
- package/dist/types/components/ui/brand-feedback-icon.d.ts +20 -3
- package/dist/types/components/ui/button-group.d.ts +8 -1
- package/dist/types/components/ui/button.d.ts +1 -1
- package/dist/types/components/ui/dropdown-menu.d.ts +5 -5
- package/dist/types/components/ui/empty-state.d.ts +4 -0
- package/dist/types/components/ui/error-page.d.ts +6 -1
- package/dist/types/components/ui/modal.d.ts +4 -0
- package/dist/types/components/ui/picker-panel.d.ts +1 -1
- package/dist/types/components/ui/popover.d.ts +3 -3
- package/dist/types/components/ui/radio-group.d.ts +1 -1
- package/dist/types/components/ui/skeleton.d.ts +5 -1
- package/dist/types/components/ui/stat-card.d.ts +1 -1
- package/dist/types/components/ui/table.d.ts +0 -6
- package/dist/types/components/ui/tooltip.d.ts +1 -1
- package/dist/types/components/ui/wizard.d.ts +14 -1
- package/dist/types/hooks/use-reduced-motion.d.ts +3 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lib/initials.d.ts +2 -0
- package/dist/types/lib/motion/count.d.ts +17 -0
- package/dist/types/lib/motion/features-max.d.ts +1 -0
- package/dist/types/lib/motion/index.d.ts +5 -0
- package/dist/types/lib/motion/motion-context.d.ts +43 -0
- package/dist/types/lib/motion/native-events.d.ts +16 -0
- package/dist/types/lib/motion/presets.d.ts +92 -0
- package/dist/types/lib/motion/reorder.d.ts +7 -0
- package/dist/types/lib/motion/tokens.d.ts +66 -0
- package/dist/types/lib/motion/use-motion-presets.d.ts +8 -0
- package/dist/{use-breakpoint-C3ivDt2R.js → use-breakpoint-O9eqFmsF.js} +2 -2
- package/dist/{use-breakpoint-C3ivDt2R.js.map → use-breakpoint-O9eqFmsF.js.map} +1 -1
- package/dist/use-motion-presets-BrkgL8lG.js +401 -0
- package/dist/use-motion-presets-BrkgL8lG.js.map +1 -0
- package/dist/widget-grid.js +3 -3
- package/package.json +4 -1
- package/dist/button-DWhICtIG.js.map +0 -1
- package/dist/components-Cq_PmN4y.js.map +0 -1
- package/dist/empty-state-C491qfzf.js.map +0 -1
- package/dist/rendra-provider-BRtk5Qa1.js.map +0 -1
- package/dist/tooltip-DsNlnBSY.js +0 -105
- package/dist/tooltip-DsNlnBSY.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import { type ShellLayout } from './layout';
|
|
3
|
-
import type { NavGroup, ShellMenuItem, ShellNotificationsConfig, ShellUser } from './types';
|
|
3
|
+
import type { NavGroup, ShellMenuItem, ShellNotificationsConfig, ShellUser, ShellUserMenuConfig, ShellWorkspacesConfig } from './types';
|
|
4
4
|
export interface AppShellProps {
|
|
5
5
|
/** Menu do sistema: sidebar, barra inferior e busca global. Único obrigatório. */
|
|
6
6
|
navigation: NavGroup[];
|
|
@@ -18,6 +18,26 @@ export interface AppShellProps {
|
|
|
18
18
|
quickActions?: ShellMenuItem[];
|
|
19
19
|
/** Notificações do sino do header. Sem esta prop, o sino não aparece. */
|
|
20
20
|
notifications?: ShellNotificationsConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Quais submenus o menu do avatar mostra: `theme` (Tema), `template` (Template) e
|
|
23
|
+
* `layout` (Layout). Todos `true` por padrão; `{ theme: false }` esconde só o Tema.
|
|
24
|
+
* É o caminho para tirar essas escolhas do usuário (`userConfigurable` não faz isso).
|
|
25
|
+
*/
|
|
26
|
+
userMenu?: ShellUserMenuConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Seletor de espaço (empresa, unidade, workspace) no topo do menu do avatar, logo depois
|
|
29
|
+
* do usuário: um item de rádio por espaço, o de `activeId` marcado. `onSelect` recebe o
|
|
30
|
+
* `id` escolhido. Sem esta prop, o menu é o de sempre.
|
|
31
|
+
*/
|
|
32
|
+
workspaces?: ShellWorkspacesConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Logo do header no celular (abaixo de `md`): ocupa o lugar do título e da trilha. O título
|
|
35
|
+
* continua anunciado ao leitor de tela (só some do visual), o botão de voltar e o ícone de
|
|
36
|
+
* ajuda da tela ficam, e a trilha sai do header. A partir de `md` nada muda. O contêiner é
|
|
37
|
+
* `aria-hidden`: o logo é decorativo para o leitor, então o nó **não pode ser interativo**
|
|
38
|
+
* (um link ali dentro reprova `aria-hidden-focus` no axe).
|
|
39
|
+
*/
|
|
40
|
+
headerLogo?: ReactNode;
|
|
21
41
|
/**
|
|
22
42
|
* Permite que o usuário troque o layout pelo menu do avatar (guardado no navegador).
|
|
23
43
|
* Desligue em produção se o layout do projeto for fixo.
|
|
@@ -33,4 +53,4 @@ export interface AppShellProps {
|
|
|
33
53
|
* Título da aba e meta description (SEO) não são responsabilidade do AppShell: o
|
|
34
54
|
* boilerplate (src/app/app-layout.tsx) aplica isso com useRouteMeta, que lê @/config/seo.
|
|
35
55
|
*/
|
|
36
|
-
export declare function AppShell({ navigation, layout: layoutProp, user, userMenuItems, onLogout, homeLabel, quickActions, notifications, userConfigurable, children, }: AppShellProps): import("react").JSX.Element;
|
|
56
|
+
export declare function AppShell({ navigation, layout: layoutProp, user, userMenuItems, onLogout, homeLabel, quickActions, notifications, userMenu, workspaces, headerLogo, userConfigurable, children, }: AppShellProps): import("react").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import type { ShellLayout } from './layout';
|
|
3
3
|
import type { NavigationTarget } from './navigation-utils';
|
|
4
|
-
import type { NavGroup, NavItem, ShellMenuItem, ShellNotificationsConfig, ShellUser } from './types';
|
|
4
|
+
import type { NavGroup, NavItem, ShellMenuItem, ShellNotificationsConfig, ShellUser, ShellUserMenuConfig, ShellWorkspacesConfig } from './types';
|
|
5
5
|
export interface ShellContextValue {
|
|
6
6
|
/** Layout efetivo: padrão interno + prop `layout` do AppShell + escolha do usuário. */
|
|
7
7
|
layout: ShellLayout;
|
|
@@ -43,6 +43,12 @@ export interface ShellContextValue {
|
|
|
43
43
|
quickActions: ShellMenuItem[];
|
|
44
44
|
/** Notificações do sino do header. Sem esta prop, o sino não aparece. */
|
|
45
45
|
notifications?: ShellNotificationsConfig;
|
|
46
|
+
/** Submenus Tema, Template e Layout do menu do avatar. Sem esta prop, os três aparecem. */
|
|
47
|
+
userMenu?: ShellUserMenuConfig;
|
|
48
|
+
/** Seletor de espaço no topo do menu do avatar. Sem esta prop, não aparece. */
|
|
49
|
+
workspaces?: ShellWorkspacesConfig;
|
|
50
|
+
/** Logo que ocupa o lugar do título e da trilha no header, abaixo de `md`. */
|
|
51
|
+
headerLogo?: ReactNode;
|
|
46
52
|
}
|
|
47
53
|
export declare const ShellContext: import("react").Context<ShellContextValue | null>;
|
|
48
54
|
export declare function useShell(): ShellContextValue;
|
|
@@ -51,3 +51,26 @@ export interface ShellNotificationsConfig {
|
|
|
51
51
|
onMarkAllRead?: () => void;
|
|
52
52
|
onItemClick?: (id: string) => void;
|
|
53
53
|
}
|
|
54
|
+
/** Quais submenus o menu do avatar mostra. Cada um é `true` por padrão. */
|
|
55
|
+
export interface ShellUserMenuConfig {
|
|
56
|
+
/** Submenu "Tema" (claro, escuro, automático). */
|
|
57
|
+
theme?: boolean;
|
|
58
|
+
/** Submenu "Template" (modelo e paleta de cores). */
|
|
59
|
+
template?: boolean;
|
|
60
|
+
/** Submenu "Layout" (posição e comportamento do menu). */
|
|
61
|
+
layout?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/** Seletor de espaço (empresa, unidade, workspace) no topo do menu do avatar. */
|
|
64
|
+
export interface ShellWorkspacesConfig {
|
|
65
|
+
/** Espaços disponíveis. Lista vazia não desenha o bloco. */
|
|
66
|
+
items: {
|
|
67
|
+
id: string;
|
|
68
|
+
label: string;
|
|
69
|
+
}[];
|
|
70
|
+
/** `id` do espaço atual (o item marcado). */
|
|
71
|
+
activeId: string;
|
|
72
|
+
/** Chamado com o `id` do espaço escolhido. A troca em si é de quem monta a aplicação. */
|
|
73
|
+
onSelect: (id: string) => void;
|
|
74
|
+
/** Título do bloco no menu. Padrão: "Espaço". */
|
|
75
|
+
label?: string;
|
|
76
|
+
}
|
|
@@ -26,8 +26,24 @@ export interface PageHeaderProps {
|
|
|
26
26
|
* dividindo a largura; no desktop ficam à direita, com largura automática.
|
|
27
27
|
*/
|
|
28
28
|
actions?: ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* Título discreto no topo do corpo quando o cabeçalho do shell esconde o título (no celular,
|
|
31
|
+
* com `headerLogo`): `text-base` abaixo de `md` e só de leitor de tela a partir dele.
|
|
32
|
+
* `showTitle` vence. Padrão: `false`.
|
|
33
|
+
*/
|
|
34
|
+
bodyTitle?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* `reserve` (padrão): o bloco do título ocupa lugar mesmo quando o título é só de leitor de
|
|
37
|
+
* tela (o vão de 16 px acima das ações no celular). `none`: sem título visível e sem
|
|
38
|
+
* `description`, o bloco não é desenhado e o vão some; o `h1` segue no DOM para o leitor.
|
|
39
|
+
*/
|
|
40
|
+
titleSpace?: 'reserve' | 'none';
|
|
29
41
|
/** Conteúdo abaixo, como abas ou metadados. */
|
|
30
42
|
children?: ReactNode;
|
|
43
|
+
/**
|
|
44
|
+
* Classes extras, que vencem as do componente. Para zerar a margem negativa de baixo (que
|
|
45
|
+
* aproxima o cabeçalho do conteúdo) use `className="mb-0 md:mb-0"`.
|
|
46
|
+
*/
|
|
31
47
|
className?: string;
|
|
32
48
|
}
|
|
33
49
|
/**
|
|
@@ -35,4 +51,4 @@ export interface PageHeaderProps {
|
|
|
35
51
|
* O título fica no header (com a trilha); aqui ele só é lido por leitores de tela,
|
|
36
52
|
* para que cada página tenha um único título principal (h1).
|
|
37
53
|
*/
|
|
38
|
-
export declare function PageHeader({ title, showTitle, description, help, breadcrumb, actions, children, className, }: PageHeaderProps): import("react").JSX.Element;
|
|
54
|
+
export declare function PageHeader({ title, showTitle, description, help, breadcrumb, actions, bodyTitle, titleSpace, children, className, }: PageHeaderProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ComponentType, type ReactNode } from 'react';
|
|
2
|
+
import { type MotionMode } from '../lib/motion/motion-context';
|
|
2
3
|
/**
|
|
3
4
|
* Link com a mesma interface do `<a>`/`Link`: recebe `to`, `className`, `children`,
|
|
4
5
|
* `aria-*`, `onClick` e repassa o resto.
|
|
@@ -28,13 +29,18 @@ export interface RendraProviderProps {
|
|
|
28
29
|
goBack: () => void;
|
|
29
30
|
/** Trilha da rota atual (ex.: via `useMatches` e `handle.crumb`). Opcional. */
|
|
30
31
|
useBreadcrumbs?: () => RendraBreadcrumbItem[];
|
|
32
|
+
/**
|
|
33
|
+
* Animações dos componentes. `off` (padrão): sem nenhuma animação do Motion, a árvore e o
|
|
34
|
+
* comportamento de sempre. `on`: entradas, saídas e layout animados pelo Motion.
|
|
35
|
+
*/
|
|
36
|
+
motion?: MotionMode;
|
|
31
37
|
}
|
|
32
38
|
/**
|
|
33
39
|
* Única peça que sabe como navegar (`react-router`, outro roteador, ou nenhum).
|
|
34
40
|
* Sem `RendraProvider` na árvore, os hooks abaixo caem para um comportamento simples,
|
|
35
41
|
* baseado só em `window.location`/`history`, e os componentes continuam funcionando.
|
|
36
42
|
*/
|
|
37
|
-
export declare function RendraProvider({ children, linkComponent, useCurrentPath: useCurrentPathProp, navigate, goBack, useBreadcrumbs, }: RendraProviderProps): import("react").JSX.Element;
|
|
43
|
+
export declare function RendraProvider({ children, linkComponent, useCurrentPath: useCurrentPathProp, navigate, goBack, useBreadcrumbs, motion, }: RendraProviderProps): import("react").JSX.Element;
|
|
38
44
|
/** Componente de link do provider ativo (ou `<a href>`, sem provider). */
|
|
39
45
|
export declare function useRendraLink(): ComponentType<RendraLinkProps>;
|
|
40
46
|
/** Caminho atual (ex.: `/clientes/novo`), do provider ativo ou de `window.location`. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import type { MotionMode } from '../lib/motion/motion-context';
|
|
2
3
|
/**
|
|
3
4
|
* Metadados de rota lidos pela trilha: handle: { crumb: 'Clientes' }. Convenção do
|
|
4
5
|
* react-router (`handle`), que não existe em outros roteadores; por isso fica aqui, na
|
|
@@ -13,6 +14,7 @@ export interface RouteHandle {
|
|
|
13
14
|
* componentes de `src/components/ui` e o `AppShell` não importam `react-router` diretamente.
|
|
14
15
|
* Sem `children`, renderiza `<Outlet />`, para ser usado como elemento raiz das rotas.
|
|
15
16
|
*/
|
|
16
|
-
export declare function RendraRouterBridge({ children }?: {
|
|
17
|
+
export declare function RendraRouterBridge({ children, motion, }?: {
|
|
17
18
|
children?: ReactNode;
|
|
19
|
+
motion?: MotionMode;
|
|
18
20
|
}): import("react").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { HTMLAttributes, ReactNode } from 'react';
|
|
3
3
|
declare const badgeVariants: (props?: ({
|
|
4
|
-
tone?: "success" | "error" | "warning" | "info" | "primary" | "
|
|
4
|
+
tone?: "outline" | "success" | "error" | "warning" | "info" | "primary" | "neutral" | null | undefined;
|
|
5
5
|
solid?: boolean | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { type VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FeedbackType } from '../../brand/types';
|
|
3
3
|
declare const iconVariants: (props?: ({
|
|
4
|
-
type?: "success" | "error" | "warning" | "info" | null | undefined;
|
|
5
4
|
size?: "sm" | "lg" | "xl" | "2xl" | "md" | null | undefined;
|
|
6
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
6
|
export declare const feedbackLabels: Record<FeedbackType, string>;
|
|
8
|
-
export interface BrandFeedbackIconProps extends
|
|
7
|
+
export interface BrandFeedbackIconProps extends VariantProps<typeof iconVariants> {
|
|
9
8
|
type: FeedbackType;
|
|
10
9
|
/** Texto para leitores de tela. Sem ele o ícone é decorativo (o texto ao lado informa). */
|
|
11
10
|
label?: string;
|
|
@@ -15,6 +14,24 @@ export interface BrandFeedbackIconProps extends Omit<VariantProps<typeof iconVar
|
|
|
15
14
|
* Troque a key do componente para repetir a animação.
|
|
16
15
|
*/
|
|
17
16
|
animated?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Cor do símbolo. `state` (padrão): a cor do estado (verde, vermelho, amarelo, azul).
|
|
19
|
+
* `brand`: a cor primária da marca (`text-primary-text`); o selo de estado mantém a cor do
|
|
20
|
+
* estado, para o significado não depender só da cor.
|
|
21
|
+
*/
|
|
22
|
+
symbolTone?: 'state' | 'brand';
|
|
23
|
+
/**
|
|
24
|
+
* `false` (padrão): selo de estado sobreposto ao símbolo. `true`: o ícone do estado
|
|
25
|
+
* (Lucide, na cor do estado) fica ao lado do símbolo, no lugar do selo sobreposto. Com um
|
|
26
|
+
* SVG próprio em `brand.feedbackIcons[type]`, o SVG vence e nenhum selo é desenhado.
|
|
27
|
+
*/
|
|
28
|
+
statusBadge?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Só vale com `animated`. `pop` (padrão): entra com mola, o glifo se desenha e o erro
|
|
31
|
+
* treme. `encaixe`: entra em 240 ms, curva de saída suave, sem quique, sem desenho e sem
|
|
32
|
+
* tremor. Com "reduzir movimento" do sistema, nenhuma animação roda.
|
|
33
|
+
*/
|
|
34
|
+
animation?: 'pop' | 'encaixe';
|
|
18
35
|
className?: string;
|
|
19
36
|
}
|
|
20
37
|
/**
|
|
@@ -22,5 +39,5 @@ export interface BrandFeedbackIconProps extends Omit<VariantProps<typeof iconVar
|
|
|
22
39
|
* semântica, com um selo de status para que o significado não dependa só da cor.
|
|
23
40
|
* Cada tipo pode ser substituído por um SVG próprio em brand.config.ts (feedbackIcons).
|
|
24
41
|
*/
|
|
25
|
-
export declare function BrandFeedbackIcon({ type, size, label, animated, className, }: BrandFeedbackIconProps): import("react").JSX.Element;
|
|
42
|
+
export declare function BrandFeedbackIcon({ type, size, label, animated, symbolTone, statusBadge, animation, className, }: BrandFeedbackIconProps): import("react").JSX.Element;
|
|
26
43
|
export {};
|
|
@@ -16,6 +16,13 @@ interface ButtonGroupProps {
|
|
|
16
16
|
onChange?: (value: string) => void;
|
|
17
17
|
size?: 'sm' | 'md';
|
|
18
18
|
fullWidth?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Só no modo agrupado (`children`); o segmentado (`options`) ignora. `horizontal` (padrão):
|
|
21
|
+
* botões lado a lado. `vertical`: empilhados, na largura do grupo, com as bordas unidas.
|
|
22
|
+
* `responsive`: vertical abaixo de `md` e horizontal a partir dele (para três botões largos
|
|
23
|
+
* que não cabem em 360 px).
|
|
24
|
+
*/
|
|
25
|
+
orientation?: 'horizontal' | 'vertical' | 'responsive';
|
|
19
26
|
'aria-label'?: string;
|
|
20
27
|
className?: string;
|
|
21
28
|
}
|
|
@@ -23,5 +30,5 @@ interface ButtonGroupProps {
|
|
|
23
30
|
* ButtonGroup único: agrupa botões de ação (children) ou funciona como controle
|
|
24
31
|
* segmentado de escolha única (options + value).
|
|
25
32
|
*/
|
|
26
|
-
export declare function ButtonGroup({ children, options, value, onChange, size, fullWidth, className, ...aria }: ButtonGroupProps): import("react").JSX.Element;
|
|
33
|
+
export declare function ButtonGroup({ children, options, value, onChange, size, fullWidth, orientation, className, ...aria }: ButtonGroupProps): import("react").JSX.Element;
|
|
27
34
|
export {};
|
|
@@ -6,7 +6,7 @@ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
|
|
|
6
6
|
* Altura vem de h-control-*: 44px ou mais no mobile, compacta a partir de md.
|
|
7
7
|
*/
|
|
8
8
|
export declare const buttonVariants: (props?: ({
|
|
9
|
-
variant?: "link" | "
|
|
9
|
+
variant?: "link" | "outline" | "primary" | "secondary" | "ghost" | "destructive" | null | undefined;
|
|
10
10
|
size?: "sm" | "lg" | "md" | null | undefined;
|
|
11
11
|
iconOnly?: boolean | null | undefined;
|
|
12
12
|
fullWidth?: boolean | null | undefined;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { DropdownMenu as D } from 'radix-ui';
|
|
2
|
-
import type
|
|
3
|
-
export declare
|
|
2
|
+
import { type ComponentProps } from 'react';
|
|
3
|
+
export declare function DropdownMenu(props: ComponentProps<typeof D.Root>): import("react").JSX.Element;
|
|
4
4
|
export declare const DropdownMenuTrigger: import("react").ForwardRefExoticComponent<D.DropdownMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
5
5
|
export declare const DropdownMenuGroup: import("react").ForwardRefExoticComponent<D.DropdownMenuGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
6
|
-
export declare
|
|
6
|
+
export declare function DropdownMenuSub(props: ComponentProps<typeof D.Sub>): import("react").JSX.Element;
|
|
7
7
|
export declare const DropdownMenuRadioGroup: import("react").ForwardRefExoticComponent<D.DropdownMenuRadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
8
|
-
export declare function DropdownMenuContent({ className, sideOffset, ...props }: ComponentProps<typeof D.Content>): import("react").JSX.Element;
|
|
8
|
+
export declare function DropdownMenuContent({ className, sideOffset, children, asChild, ...props }: ComponentProps<typeof D.Content>): import("react").JSX.Element;
|
|
9
9
|
interface ItemProps extends ComponentProps<typeof D.Item> {
|
|
10
10
|
/** Item destrutivo (excluir, sair): texto na cor destrutiva. */
|
|
11
11
|
destructive?: boolean;
|
|
@@ -16,5 +16,5 @@ export declare function DropdownMenuRadioItem({ className, children, ...props }:
|
|
|
16
16
|
export declare function DropdownMenuLabel({ className, ...props }: ComponentProps<typeof D.Label>): import("react").JSX.Element;
|
|
17
17
|
export declare function DropdownMenuSeparator({ className, ...props }: ComponentProps<typeof D.Separator>): import("react").JSX.Element;
|
|
18
18
|
export declare function DropdownMenuSubTrigger({ className, children, ...props }: ComponentProps<typeof D.SubTrigger>): import("react").JSX.Element;
|
|
19
|
-
export declare function DropdownMenuSubContent({ className, ...props }: ComponentProps<typeof D.SubContent>): import("react").JSX.Element;
|
|
19
|
+
export declare function DropdownMenuSubContent({ className, children, asChild, ...props }: ComponentProps<typeof D.SubContent>): import("react").JSX.Element;
|
|
20
20
|
export {};
|
|
@@ -9,6 +9,10 @@ export interface EmptyStateProps {
|
|
|
9
9
|
actions?: ReactNode;
|
|
10
10
|
/** compact: dentro de tabela ou card pequeno. */
|
|
11
11
|
size?: 'default' | 'compact';
|
|
12
|
+
/**
|
|
13
|
+
* Classes extras, que vencem as do componente. Para zerar o respiro vertical (por exemplo,
|
|
14
|
+
* dentro de um card que já tem o seu) use `className="py-0 md:py-0"`.
|
|
15
|
+
*/
|
|
12
16
|
className?: string;
|
|
13
17
|
}
|
|
14
18
|
/** Estado vazio (e de erro) com o ícone de feedback da marca. */
|
|
@@ -5,9 +5,14 @@ export interface ErrorPageProps {
|
|
|
5
5
|
description?: string;
|
|
6
6
|
/** Ocupa a tela inteira (fora do AppShell). */
|
|
7
7
|
fullScreen?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Mostra o botão Voltar (padrão). Com `false` só a ação principal é desenhada, na largura
|
|
10
|
+
* toda (regra "um botão = 100%").
|
|
11
|
+
*/
|
|
12
|
+
back?: boolean;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
15
|
* Tela de erro única (404 e 500), com o ícone de feedback da marca animado.
|
|
11
16
|
* Ações seguem a regra 30/70: secundária à esquerda, principal à direita.
|
|
12
17
|
*/
|
|
13
|
-
export declare function ErrorPage({ code, title, description, fullScreen }: ErrorPageProps): import("react").JSX.Element;
|
|
18
|
+
export declare function ErrorPage({ code, title, description, fullScreen, back, }: ErrorPageProps): import("react").JSX.Element;
|
|
@@ -15,6 +15,10 @@ export interface ModalProps {
|
|
|
15
15
|
/** Conteúdo do body (em form, os campos). */
|
|
16
16
|
children?: ReactNode;
|
|
17
17
|
confirmLabel?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Rótulo do botão de cancelar. Em `confirm` e `destructive` o padrão é "Cancelar". Em `info`
|
|
20
|
+
* não há botão de cancelar: o segundo botão só aparece quando `cancelLabel` é passado.
|
|
21
|
+
*/
|
|
18
22
|
cancelLabel?: string;
|
|
19
23
|
/** Pode ser assíncrono: o botão mostra carregamento até terminar. */
|
|
20
24
|
onConfirm?: () => void | Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Popover as P } from 'radix-ui';
|
|
2
|
-
import type
|
|
3
|
-
export declare
|
|
2
|
+
import { type ComponentProps } from 'react';
|
|
3
|
+
export declare function Popover(props: ComponentProps<typeof P.Root>): import("react").JSX.Element;
|
|
4
4
|
export declare const PopoverTrigger: import("react").ForwardRefExoticComponent<P.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
5
5
|
export declare const PopoverClose: import("react").ForwardRefExoticComponent<P.PopoverCloseProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
6
6
|
export declare const PopoverAnchor: import("react").ForwardRefExoticComponent<P.PopoverAnchorProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -8,5 +8,5 @@ interface PopoverContentProps extends ComponentProps<typeof P.Content> {
|
|
|
8
8
|
/** Largura: sm (16rem) ou md (22rem). Sempre limitada à tela menos 32px. */
|
|
9
9
|
width?: 'sm' | 'md';
|
|
10
10
|
}
|
|
11
|
-
export declare function PopoverContent({ className, align, sideOffset, width, ...props }: PopoverContentProps): import("react").JSX.Element;
|
|
11
|
+
export declare function PopoverContent({ className, align, sideOffset, width, children, asChild, ...props }: PopoverContentProps): import("react").JSX.Element;
|
|
12
12
|
export {};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import type { HTMLAttributes } from 'react';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Bloco de carregamento. Monte o skeleton com a mesma estrutura do conteúdo final. Em `off` pulsa
|
|
4
|
+
* (animate-pulse do Tailwind); em `on` um brilho suave cruza o bloco (skeleton-shimmer, em
|
|
5
|
+
* globals.css: transform, tempo e curva pelos tokens, parado com "reduzir movimento").
|
|
6
|
+
*/
|
|
3
7
|
export declare function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
|
|
@@ -125,10 +125,4 @@ export interface TableProps<T> {
|
|
|
125
125
|
/** Rótulo da tabela para leitores de tela. */
|
|
126
126
|
'aria-label': string;
|
|
127
127
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Table única do sistema (TanStack Table). Tudo é prop: seleção, expansão, ordenação,
|
|
130
|
-
* busca, colunas visíveis, ações em massa e por linha, densidade e estados.
|
|
131
|
-
* Mobile (< 768px): a mesma tabela vira lista de cards, sem rolagem horizontal.
|
|
132
|
-
* Desktop: tabela larga rola na horizontal só dentro do próprio contêiner.
|
|
133
|
-
*/
|
|
134
128
|
export declare function Table<T>({ data: dataProp, source, queryKey, columns: columnsProp, statusLast, getRowId, selectable, expandable, sortable, globalFilter, columnVisibility, bulkActions, bulkMenu, rowActions, density, loading, error, onRetry, empty, pageSize: pageSizeProp, mobilePagination, toolbar, ...aria }: TableProps<T>): import("react").JSX.Element;
|
|
@@ -29,10 +29,23 @@ export interface WizardProps {
|
|
|
29
29
|
onValidateStep?: (index: number) => boolean | Promise<boolean>;
|
|
30
30
|
onFinish?: () => void | Promise<void>;
|
|
31
31
|
onCancel?: () => void;
|
|
32
|
+
/** Rótulo do cancelar da primeira etapa (só aparece com `onCancel`). Padrão: "Cancelar". */
|
|
33
|
+
cancelLabel?: string;
|
|
34
|
+
/** Rótulo do voltar das etapas seguintes. Padrão: "Voltar". */
|
|
35
|
+
backLabel?: string;
|
|
36
|
+
/** Rótulo do avançar (todas as etapas menos a última). Padrão: "Avançar". */
|
|
37
|
+
nextLabel?: string;
|
|
32
38
|
finishLabel?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Torna a etapa opcional: "Pular" aparece no menu "Mais ações" da barra de ações (nunca na
|
|
41
|
+
* última etapa), avança **sem validar** e limpa o erro da etapa. Sem esta prop não há menu.
|
|
42
|
+
*/
|
|
43
|
+
onSkip?: () => void;
|
|
44
|
+
/** Rótulo do item de pular. Padrão: "Pular". */
|
|
45
|
+
skipLabel?: string;
|
|
33
46
|
orientation?: 'horizontal' | 'vertical';
|
|
34
47
|
/** Botões no rodapé fixo da tela. Padrão: não, seguem junto do card do wizard. */
|
|
35
48
|
stickyFooter?: boolean;
|
|
36
49
|
}
|
|
37
50
|
/** Cadastro em etapas, com validação por etapa e rodapé Voltar / Avançar. */
|
|
38
|
-
export declare function Wizard({ steps, children, onValidateStep, onFinish, onCancel, finishLabel, orientation, stickyFooter, }: WizardProps): import("react").JSX.Element;
|
|
51
|
+
export declare function Wizard({ steps, children, onValidateStep, onFinish, onCancel, cancelLabel, backLabel, nextLabel, finishLabel, onSkip, skipLabel, orientation, stickyFooter, }: WizardProps): import("react").JSX.Element;
|
|
@@ -1 +1,4 @@
|
|
|
1
|
+
/** Fonte única da preferência (também usada pelo motion, que só a assina em `on`). */
|
|
2
|
+
export declare function subscribeReducedMotion(cb: () => void): () => void;
|
|
3
|
+
export declare function getReducedMotion(): boolean;
|
|
1
4
|
export declare function usePrefersReducedMotion(): boolean;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -58,6 +58,7 @@ export * from './components/app-shell/app-shell';
|
|
|
58
58
|
export * from './components/app-shell/layout';
|
|
59
59
|
export * from './components/app-shell/types';
|
|
60
60
|
export * from './components/rendra-provider';
|
|
61
|
+
export type { MotionMode } from './lib/motion/motion-context';
|
|
61
62
|
export * from './catalog/components';
|
|
62
63
|
export * from './hooks/use-breakpoint';
|
|
63
64
|
export * from './hooks/use-debounced-value';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface ParsedNumber {
|
|
3
|
+
/** Tudo antes do número (inclui o sinal de menos). */
|
|
4
|
+
prefix: string;
|
|
5
|
+
/** Tudo depois do número. */
|
|
6
|
+
suffix: string;
|
|
7
|
+
/** Valor numérico (sem sinal no `prefix`: o sinal já está aqui). */
|
|
8
|
+
value: number;
|
|
9
|
+
decimals: number;
|
|
10
|
+
/** Separador de milhar "." (texto pt-BR que o usava). */
|
|
11
|
+
grouping: boolean;
|
|
12
|
+
/** Separador decimal: "," no texto pt-BR, "." no número do JavaScript. */
|
|
13
|
+
decimalSeparator: ',' | '.';
|
|
14
|
+
}
|
|
15
|
+
export declare function parseLocaleNumber(value: ReactNode): ParsedNumber | null;
|
|
16
|
+
/** Escreve `n` com o mesmo formato do valor original. */
|
|
17
|
+
export declare function formatLike(parsed: ParsedNumber, n: number): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { domMax as default } from 'motion/react';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MotionModeScope, MotionProvider, RevealScope, useLayoutReady, useMotionMode, useRevealScope, type MotionMode, } from './motion-context';
|
|
2
|
+
export { useMotionPresets } from './use-motion-presets';
|
|
3
|
+
export type { MotionPreset, Presets, SlideDistance, SlideFrom } from './presets';
|
|
4
|
+
export { layoutEnabled } from './reorder';
|
|
5
|
+
export { formatLike, parseLocaleNumber, type ParsedNumber } from './count';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type MotionMode = 'off' | 'on';
|
|
3
|
+
/** Modo de motion do provider mais próximo (`off` sem provider). */
|
|
4
|
+
export declare function useMotionMode(): MotionMode;
|
|
5
|
+
/**
|
|
6
|
+
* Em `on`, o chunk do `domMax` já chegou. Um `m.*` com `layout` ou `layoutId` só ganha o nó de
|
|
7
|
+
* projeção se for criado DEPOIS disso (o Motion não monta a projeção de um elemento que já
|
|
8
|
+
* estava na tela), então quem usa layout liga a prop e remonta o item quando isto vira `true`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useLayoutReady(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Marca um trecho da árvore como "chegada de painel" (o dashboard): lá, o gráfico desenha no
|
|
13
|
+
* tempo do reveal (900 ms) em vez do tempo de rotina (`draw`, 420 ms). Fora dele, o gráfico de
|
|
14
|
+
* uma tela de uso diário desenha uma vez e rápido.
|
|
15
|
+
*/
|
|
16
|
+
export declare function RevealScope({ children }: {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
/** O componente está dentro de um `RevealScope`? */
|
|
20
|
+
export declare function useRevealScope(): boolean;
|
|
21
|
+
/** Só troca o modo lido pelos componentes; não monta nem desmonta o LazyMotion. */
|
|
22
|
+
export declare function MotionModeScope({ mode, children }: {
|
|
23
|
+
mode: MotionMode;
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
}): import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Em `off`, só o contexto (nenhum nó novo, nenhum LazyMotion). Em `on`, dois `LazyMotion` (os
|
|
28
|
+
* dois `strict`: só `m.*` entra, um `motion.*` esquecido quebra em vez de puxar o pacote inteiro):
|
|
29
|
+
* o de fora carrega o `domMax` sob demanda (layout e arraste), em chunk separado; o de dentro traz
|
|
30
|
+
* o `domAnimation` síncrono (animação e gestos) e é o que os `m.*` enxergam. Nessa ordem o
|
|
31
|
+
* renderer síncrono já está no contexto na primeira renderização (elementos e gestos funcionam
|
|
32
|
+
* na hora), e os recursos de layout se juntam quando o chunk chega. A ordem contrária esconderia
|
|
33
|
+
* o renderer até o chunk terminar de baixar.
|
|
34
|
+
*
|
|
35
|
+
* O `MotionConfig` recebe "reduzir movimento" da mesma fonte dos presets (o `matchMedia` de
|
|
36
|
+
* `use-reduced-motion.ts`, reativo): com `always`, o Motion também tira o deslocamento e o layout
|
|
37
|
+
* de qualquer animação que um componente escreva à mão, e mantém a opacidade. Não é uma segunda
|
|
38
|
+
* fonte: é a primeira, lida uma vez, entregue a dois consumidores.
|
|
39
|
+
*/
|
|
40
|
+
export declare function MotionProvider({ mode, children }: {
|
|
41
|
+
mode: MotionMode;
|
|
42
|
+
children: ReactNode;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const NATIVE_EVENTS: {
|
|
2
|
+
readonly onDrag: "drag";
|
|
3
|
+
readonly onDragStart: "dragstart";
|
|
4
|
+
readonly onDragEnd: "dragend";
|
|
5
|
+
readonly onAnimationStart: "animationstart";
|
|
6
|
+
};
|
|
7
|
+
type NativeKey = keyof typeof NATIVE_EVENTS;
|
|
8
|
+
type Handler = ((event: never) => void) | undefined;
|
|
9
|
+
/** Separa as quatro chaves em conflito; o resto segue para o elemento do Motion. */
|
|
10
|
+
export declare function splitNativeEvents<P extends object>(props: P): {
|
|
11
|
+
native: Partial<Record<"onDrag" | "onDragEnd" | "onDragStart" | "onAnimationStart", Handler>>;
|
|
12
|
+
rest: Omit<P, NativeKey>;
|
|
13
|
+
};
|
|
14
|
+
/** Liga os manipuladores como ouvintes nativos. Devolve a função que os remove. */
|
|
15
|
+
export declare function bindNativeEvents(el: HTMLElement, native: Partial<Record<NativeKey, Handler>>): () => void;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { Target, TargetAndTransition, Transition } from 'motion/react';
|
|
2
|
+
import { type Bezier, type MotionTokens } from './tokens';
|
|
3
|
+
export interface MotionPreset {
|
|
4
|
+
initial: Target;
|
|
5
|
+
animate: TargetAndTransition;
|
|
6
|
+
exit: TargetAndTransition;
|
|
7
|
+
transition: Transition;
|
|
8
|
+
}
|
|
9
|
+
/** Toque: o alvo do `whileTap` (`undefined` no reduzido) e a transição de ida e de volta. */
|
|
10
|
+
export interface PressPreset {
|
|
11
|
+
whileTap: TargetAndTransition | undefined;
|
|
12
|
+
transition: Transition;
|
|
13
|
+
}
|
|
14
|
+
export type SlideFrom = 'left' | 'right' | 'top' | 'bottom';
|
|
15
|
+
/** Distância do slide: `full` (painel que entra da borda) ou `short` (conteúdo que assenta). */
|
|
16
|
+
export type SlideDistance = 'full' | 'short';
|
|
17
|
+
export interface Presets {
|
|
18
|
+
reduced: boolean;
|
|
19
|
+
/** Toque do botão, do polegar e dos controles: 120 ms, `ease.out`, escala 0,97. */
|
|
20
|
+
press: PressPreset;
|
|
21
|
+
/** Alias de `press.whileTap`, o nome antigo. Sem movimento reduzido vem `undefined`. */
|
|
22
|
+
tap: TargetAndTransition | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Salto curto de escala (célula do OTP), com a transição dentro do alvo. Estável entre
|
|
25
|
+
* renders; `undefined` se reduzido.
|
|
26
|
+
*/
|
|
27
|
+
bump: TargetAndTransition | undefined;
|
|
28
|
+
tokens: MotionTokens;
|
|
29
|
+
fade: MotionPreset;
|
|
30
|
+
/** Alias de `open()`: escala 0,95 com mola a partir da origem, saída rápida só em opacidade. */
|
|
31
|
+
scale: MotionPreset;
|
|
32
|
+
/**
|
|
33
|
+
* Cota rara de encanto (check do passo concluído): 0,8 -> 1 com a curva back, em `slow`. Nunca
|
|
34
|
+
* em controle de uso frequente.
|
|
35
|
+
*/
|
|
36
|
+
pop: MotionPreset;
|
|
37
|
+
/**
|
|
38
|
+
* Indicador de controle frequente (check do Checkbox, ponto do Radio): 0,9 -> 1 com opacidade
|
|
39
|
+
* em `fast`, sem quique e sem partir de zero.
|
|
40
|
+
*/
|
|
41
|
+
indicator: MotionPreset;
|
|
42
|
+
slide: (from: SlideFrom, distance?: SlideDistance) => MotionPreset;
|
|
43
|
+
/**
|
|
44
|
+
* Overlay ancorado (popover, menu, modal, painel do select). Número = escala de partida
|
|
45
|
+
* (padrão 0,95); `{ y }` = entrada plana, sem escala, para a superfície em tela cheia.
|
|
46
|
+
* Entra em mola criticamente amortecida (sem quique) em `base` e sai em `fast`, em opacidade.
|
|
47
|
+
*/
|
|
48
|
+
open: (from?: number | {
|
|
49
|
+
y: number;
|
|
50
|
+
}) => MotionPreset;
|
|
51
|
+
/** Gaveta e folha: entram de `from` em `slow` com `ease.drawer`, saem em `fast` pelo mesmo lado. */
|
|
52
|
+
sheet: (from: SlideFrom) => MotionPreset;
|
|
53
|
+
/** Tooltip: escala 0,97 em `fast`; aberto em `instant-open` não anima. */
|
|
54
|
+
tooltip: (instant: boolean) => MotionPreset;
|
|
55
|
+
/**
|
|
56
|
+
* Troca de conteúdo no lugar (passo do wizard), sem esperar a saída: o que sai esmaece com
|
|
57
|
+
* `blur` de 2 px em `fast`; o que entra vem de `direction` (1 avança, -1 volta), 8 px, em
|
|
58
|
+
* `base`. O desfoque disfarça o cruzamento: sem ele o olho vê dois objetos trocando de lugar.
|
|
59
|
+
*/
|
|
60
|
+
swap: (direction: 1 | -1) => MotionPreset;
|
|
61
|
+
/**
|
|
62
|
+
* Entrada de uso único (reveal do dashboard): desloca 8 px e dura `reveal.enter`, mais lenta
|
|
63
|
+
* que `slide`. Não serve a interação repetida (overlay, tab, botão).
|
|
64
|
+
*/
|
|
65
|
+
reveal: (from: SlideFrom) => MotionPreset;
|
|
66
|
+
/** Deslocamento na tela (indicador, reordenação): `move` em `ease.move`. */
|
|
67
|
+
move: Transition;
|
|
68
|
+
/** Nome antigo de `move`. */
|
|
69
|
+
layout: Transition;
|
|
70
|
+
/** Mola sem quique: onde há gesto ou soltura (drop do kanban, folha que volta). */
|
|
71
|
+
settle: Transition;
|
|
72
|
+
/** Mola da folha depois do arraste (quique mínimo). */
|
|
73
|
+
springSheet: Transition;
|
|
74
|
+
/**
|
|
75
|
+
* A mesma mola da folha em rigidez e amortecimento (massa 1), que é o que o arraste do Motion
|
|
76
|
+
* (`dragTransition`) pede para a volta à origem: rigidez = (2π / duração)², amortecimento =
|
|
77
|
+
* 2 (1 - quique) raiz(rigidez).
|
|
78
|
+
*/
|
|
79
|
+
sheetBounce: {
|
|
80
|
+
bounceStiffness: number;
|
|
81
|
+
bounceDamping: number;
|
|
82
|
+
};
|
|
83
|
+
/** Atraso de entrada do item `index`, limitado a `limit` itens (padrão 8: 480 ms). */
|
|
84
|
+
stagger: (index: number, limit?: number) => Transition;
|
|
85
|
+
/** Atraso do bloco `index` no reveal (passo `reveal.stagger`), limitado a `limit` blocos. */
|
|
86
|
+
staggerReveal: (index: number, limit?: number) => Transition;
|
|
87
|
+
}
|
|
88
|
+
export declare function createPresets(tokens: MotionTokens, reduced: boolean): Presets;
|
|
89
|
+
/** Curva no formato do recharts: `cubic-bezier(a,b,c,d)`, sem espaços. */
|
|
90
|
+
export declare function toCubicBezier([a, b, c, d,]: Bezier): `cubic-bezier(${number},${number},${number},${number})`;
|
|
91
|
+
/** Presets com os tokens lidos agora do documento. */
|
|
92
|
+
export declare function presetsFromDocument(reduced: boolean): Presets;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MotionMode } from './motion-context';
|
|
2
|
+
export declare function layoutEnabled({ mode, ready, dragging, }: {
|
|
3
|
+
mode: MotionMode;
|
|
4
|
+
/** O chunk do `domMax` já chegou (`useLayoutReady`). Antes disso `layout` não faz nada. */
|
|
5
|
+
ready: boolean;
|
|
6
|
+
dragging: boolean;
|
|
7
|
+
}): boolean;
|