@flowtomic/ui 0.1.14 → 0.2.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/dist/components/_reference/shadcn-ai/prompt-input.d.ts +48 -0
- package/dist/components/_reference/shadcn-ai/prompt-input.d.ts.map +1 -0
- package/dist/components/_reference/shadcn-ai/prompt-input.js +67 -0
- package/dist/components/atoms/actions/badge/badge.d.ts +97 -1
- package/dist/components/atoms/actions/badge/badge.d.ts.map +1 -1
- package/dist/components/atoms/actions/badge/badge.js +83 -0
- package/dist/components/atoms/actions/button/button.d.ts +134 -1
- package/dist/components/atoms/actions/button/button.d.ts.map +1 -1
- package/dist/components/atoms/actions/button/button.js +106 -0
- package/dist/components/atoms/actions/context-menu/context-menu.d.ts +79 -0
- package/dist/components/atoms/actions/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/atoms/actions/context-menu/context-menu.js +55 -0
- package/dist/components/atoms/actions/dropdown-menu/dropdown-menu.d.ts +51 -3
- package/dist/components/atoms/actions/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/atoms/actions/dropdown-menu/dropdown-menu.js +51 -3
- package/dist/components/atoms/animation/encrypted-text/encrypted-text.d.ts.map +1 -1
- package/dist/components/atoms/animation/encrypted-text/encrypted-text.js +3 -1
- package/dist/components/atoms/feedback/alert/alert.d.ts +77 -12
- package/dist/components/atoms/feedback/alert/alert.d.ts.map +1 -1
- package/dist/components/atoms/feedback/alert/alert.js +64 -12
- package/dist/components/atoms/feedback/alert-dialog/alert-dialog.d.ts +2 -2
- package/dist/components/atoms/feedback/dialog/dialog.d.ts +66 -8
- package/dist/components/atoms/feedback/dialog/dialog.d.ts.map +1 -1
- package/dist/components/atoms/feedback/dialog/dialog.js +66 -8
- package/dist/components/atoms/feedback/hover-card/hover-card.d.ts +45 -5
- package/dist/components/atoms/feedback/hover-card/hover-card.d.ts.map +1 -1
- package/dist/components/atoms/feedback/hover-card/hover-card.js +45 -5
- package/dist/components/atoms/feedback/inline-citation/inline-citation.d.ts +53 -2
- package/dist/components/atoms/feedback/inline-citation/inline-citation.d.ts.map +1 -1
- package/dist/components/atoms/feedback/inline-citation/inline-citation.js +53 -2
- package/dist/components/atoms/feedback/popover/popover.d.ts +78 -0
- package/dist/components/atoms/feedback/popover/popover.d.ts.map +1 -1
- package/dist/components/atoms/feedback/popover/popover.js +64 -0
- package/dist/components/atoms/feedback/sheet/sheet.d.ts +90 -0
- package/dist/components/atoms/feedback/sheet/sheet.d.ts.map +1 -1
- package/dist/components/atoms/feedback/sheet/sheet.js +78 -0
- package/dist/components/atoms/feedback/sonner/sonner.d.ts +66 -6
- package/dist/components/atoms/feedback/sonner/sonner.d.ts.map +1 -1
- package/dist/components/atoms/feedback/sonner/sonner.js +66 -6
- package/dist/components/atoms/feedback/tooltip/tooltip.d.ts +54 -4
- package/dist/components/atoms/feedback/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/atoms/feedback/tooltip/tooltip.js +63 -5
- package/dist/components/atoms/forms/checkbox/checkbox.d.ts +62 -4
- package/dist/components/atoms/forms/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/atoms/forms/checkbox/checkbox.js +58 -4
- package/dist/components/atoms/forms/field/field.d.ts +67 -0
- package/dist/components/atoms/forms/field/field.d.ts.map +1 -1
- package/dist/components/atoms/forms/field/field.js +47 -0
- package/dist/components/atoms/forms/form/form.d.ts +60 -0
- package/dist/components/atoms/forms/form/form.d.ts.map +1 -1
- package/dist/components/atoms/forms/form/form.js +3 -0
- package/dist/components/atoms/forms/input/input.d.ts +100 -1
- package/dist/components/atoms/forms/input/input.d.ts.map +1 -1
- package/dist/components/atoms/forms/input/input.js +82 -0
- package/dist/components/atoms/forms/input-otp/input-otp.d.ts +62 -0
- package/dist/components/atoms/forms/input-otp/input-otp.d.ts.map +1 -1
- package/dist/components/atoms/forms/input-otp/input-otp.js +50 -0
- package/dist/components/atoms/forms/label/label.d.ts +54 -0
- package/dist/components/atoms/forms/label/label.d.ts.map +1 -1
- package/dist/components/atoms/forms/label/label.js +50 -0
- package/dist/components/atoms/forms/radio-group/radio-group.d.ts +47 -0
- package/dist/components/atoms/forms/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/atoms/forms/radio-group/radio-group.js +43 -0
- package/dist/components/atoms/forms/select/select.d.ts +62 -0
- package/dist/components/atoms/forms/select/select.d.ts.map +1 -1
- package/dist/components/atoms/forms/select/select.js +62 -0
- package/dist/components/atoms/forms/slider/slider.d.ts +60 -0
- package/dist/components/atoms/forms/slider/slider.d.ts.map +1 -1
- package/dist/components/atoms/forms/slider/slider.js +53 -1
- package/dist/components/atoms/forms/switch/switch.d.ts +67 -0
- package/dist/components/atoms/forms/switch/switch.d.ts.map +1 -1
- package/dist/components/atoms/forms/switch/switch.js +63 -0
- package/dist/components/atoms/forms/textarea/textarea.d.ts +66 -0
- package/dist/components/atoms/forms/textarea/textarea.d.ts.map +1 -1
- package/dist/components/atoms/forms/textarea/textarea.js +13 -0
- package/dist/components/atoms/forms/toggle/toggle.d.ts +65 -1
- package/dist/components/atoms/forms/toggle/toggle.d.ts.map +1 -1
- package/dist/components/atoms/forms/toggle/toggle.js +58 -0
- package/dist/components/atoms/index.d.ts +0 -2
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +0 -1
- package/dist/components/atoms/layout/accordion/accordion.d.ts +84 -0
- package/dist/components/atoms/layout/accordion/accordion.d.ts.map +1 -1
- package/dist/components/atoms/layout/accordion/accordion.js +72 -0
- package/dist/components/atoms/layout/aspect-ratio/aspect-ratio.d.ts +54 -0
- package/dist/components/atoms/layout/aspect-ratio/aspect-ratio.d.ts.map +1 -1
- package/dist/components/atoms/layout/aspect-ratio/aspect-ratio.js +49 -0
- package/dist/components/atoms/layout/collapsible/collapsible.d.ts +47 -5
- package/dist/components/atoms/layout/collapsible/collapsible.d.ts.map +1 -1
- package/dist/components/atoms/layout/collapsible/collapsible.js +47 -5
- package/dist/components/atoms/layout/drawer/drawer.d.ts +55 -0
- package/dist/components/atoms/layout/drawer/drawer.d.ts.map +1 -1
- package/dist/components/atoms/layout/index.d.ts +2 -0
- package/dist/components/atoms/layout/index.d.ts.map +1 -1
- package/dist/components/atoms/layout/index.js +1 -0
- package/dist/components/atoms/layout/resizable/resizable.d.ts +77 -2
- package/dist/components/atoms/layout/resizable/resizable.d.ts.map +1 -1
- package/dist/components/atoms/layout/resizable/resizable.js +68 -0
- package/dist/components/atoms/layout/scroll-area/scroll-area.d.ts +34 -2
- package/dist/components/atoms/layout/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/atoms/layout/scroll-area/scroll-area.js +35 -3
- package/dist/components/atoms/layout/sidebar/sidebar.d.ts +66 -1
- package/dist/components/atoms/layout/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/atoms/layout/sidebar/sidebar.js +66 -0
- package/dist/components/atoms/layout/toggle-group/toggle-group.d.ts +73 -0
- package/dist/components/atoms/layout/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/components/atoms/layout/toggle-group/toggle-group.js +57 -0
- package/dist/components/atoms/layout/widget-resize-handle/index.d.ts +3 -0
- package/dist/components/atoms/layout/widget-resize-handle/index.d.ts.map +1 -0
- package/dist/components/atoms/layout/widget-resize-handle/index.js +1 -0
- package/dist/components/atoms/layout/widget-resize-handle/widget-resize-handle.d.ts +98 -0
- package/dist/components/atoms/layout/widget-resize-handle/widget-resize-handle.d.ts.map +1 -0
- package/dist/components/atoms/layout/widget-resize-handle/widget-resize-handle.js +117 -0
- package/dist/components/atoms/navigation/command/command.d.ts +7 -7
- package/dist/components/molecules/data-display/chat-message/chat-message.d.ts +39 -0
- package/dist/components/molecules/data-display/chat-message/chat-message.d.ts.map +1 -0
- package/dist/components/molecules/data-display/chat-message/chat-message.js +85 -0
- package/dist/components/molecules/data-display/chat-message/index.d.ts +3 -0
- package/dist/components/molecules/data-display/chat-message/index.d.ts.map +1 -0
- package/dist/components/molecules/data-display/chat-message/index.js +1 -0
- package/dist/components/molecules/data-display/message/message.d.ts +22 -6
- package/dist/components/molecules/data-display/message/message.d.ts.map +1 -1
- package/dist/components/molecules/data-display/message/message.js +192 -8
- package/dist/components/molecules/draggable-widget/draggable-widget.d.ts.map +1 -1
- package/dist/components/molecules/draggable-widget/draggable-widget.js +6 -2
- package/dist/components/molecules/feedback/edit-chat-message-modal/edit-chat-message-modal.d.ts +20 -0
- package/dist/components/molecules/feedback/edit-chat-message-modal/edit-chat-message-modal.d.ts.map +1 -0
- package/dist/components/molecules/feedback/edit-chat-message-modal/edit-chat-message-modal.js +65 -0
- package/dist/components/molecules/feedback/edit-chat-message-modal/index.d.ts +3 -0
- package/dist/components/molecules/feedback/edit-chat-message-modal/index.d.ts.map +1 -0
- package/dist/components/molecules/feedback/edit-chat-message-modal/index.js +1 -0
- package/dist/components/molecules/forms/autocomplete/autocomplete-section.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete-section.js +3 -1
- package/dist/components/molecules/forms/chat-input/chat-input.d.ts +46 -0
- package/dist/components/molecules/forms/chat-input/chat-input.d.ts.map +1 -0
- package/dist/components/molecules/forms/chat-input/chat-input.js +57 -0
- package/dist/components/molecules/forms/chat-input/index.d.ts +3 -0
- package/dist/components/molecules/forms/chat-input/index.d.ts.map +1 -0
- package/dist/components/molecules/forms/chat-input/index.js +1 -0
- package/dist/components/molecules/forms/item/item.d.ts +1 -1
- package/dist/components/molecules/forms/text-editor/text-editor.d.ts.map +1 -1
- package/dist/components/molecules/index.d.ts +6 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/index.js +3 -0
- package/dist/components/molecules/navigation/menu-dock/menu-dock.js +1 -1
- package/dist/components/organisms/chat-log/chat-log.d.ts +30 -0
- package/dist/components/organisms/chat-log/chat-log.d.ts.map +1 -0
- package/dist/components/organisms/chat-log/chat-log.js +21 -0
- package/dist/components/organisms/chat-log/index.d.ts +3 -0
- package/dist/components/organisms/chat-log/index.d.ts.map +1 -0
- package/dist/components/organisms/chat-log/index.js +1 -0
- package/dist/components/organisms/document-editor/document-editor.d.ts.map +1 -1
- package/dist/components/organisms/document-editor/document-editor.js +2 -2
- package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.d.ts.map +1 -1
- package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.js +1 -1
- package/dist/components/organisms/form-layout/form-layout.d.ts.map +1 -1
- package/dist/components/organisms/form-layout/form-layout.js +3 -1
- package/dist/components/organisms/genealogy-canvas/genealogy-canvas.d.ts +0 -5
- package/dist/components/organisms/genealogy-canvas/genealogy-canvas.d.ts.map +1 -1
- package/dist/components/organisms/genealogy-canvas/genealogy-canvas.js +50 -55
- package/dist/components/organisms/index.d.ts +2 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +1 -0
- package/dist/components/organisms/model-selector/model-selector.d.ts +1 -1
- package/dist/components/organisms/prompt-input/index.d.ts +1 -1
- package/dist/components/organisms/prompt-input/index.d.ts.map +1 -1
- package/dist/components/organisms/prompt-input/index.js +1 -1
- package/dist/components/organisms/prompt-input/prompt-input.d.ts +22 -7
- package/dist/components/organisms/prompt-input/prompt-input.d.ts.map +1 -1
- package/dist/components/organisms/prompt-input/prompt-input.js +26 -17
- package/dist/index.js +501 -501
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +43 -0
- package/package.json +18 -2
|
@@ -1,3 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # Sidebar Component
|
|
3
|
+
*
|
|
4
|
+
* O componente `Sidebar` é usado para criar uma barra lateral navegável
|
|
5
|
+
* que pode ser expandida/colapsada. Suporta modos desktop e mobile,
|
|
6
|
+
* com persistência de estado via cookies.
|
|
7
|
+
*
|
|
8
|
+
* ## Características Principais
|
|
9
|
+
*
|
|
10
|
+
* - **Responsivo**: Adapta-se automaticamente para mobile (usa Sheet) e desktop
|
|
11
|
+
* - **Estados**: Suporta expanded e collapsed
|
|
12
|
+
* - **Persistência**: Salva estado em cookies
|
|
13
|
+
* - **Atalho de Teclado**: Cmd/Ctrl + B para toggle
|
|
14
|
+
* - **Variantes**: sidebar, floating, inset
|
|
15
|
+
* - **Collapsible**: offcanvas, icon, none
|
|
16
|
+
* - **Composição**: Múltiplos sub-componentes para flexibilidade
|
|
17
|
+
*
|
|
18
|
+
* ## Componentes Principais
|
|
19
|
+
*
|
|
20
|
+
* - **SidebarProvider**: Provider do contexto do sidebar
|
|
21
|
+
* - **Sidebar**: Container principal do sidebar
|
|
22
|
+
* - **SidebarTrigger**: Botão para toggle do sidebar
|
|
23
|
+
* - **SidebarHeader**: Cabeçalho do sidebar
|
|
24
|
+
* - **SidebarContent**: Conteúdo do sidebar
|
|
25
|
+
* - **SidebarFooter**: Rodapé do sidebar
|
|
26
|
+
* - **SidebarGroup**: Grupo de itens
|
|
27
|
+
* - **SidebarGroupLabel**: Label do grupo
|
|
28
|
+
* - **SidebarGroupContent**: Conteúdo do grupo
|
|
29
|
+
* - **SidebarMenu**: Menu do sidebar
|
|
30
|
+
* - **SidebarMenuItem**: Item do menu
|
|
31
|
+
* - **SidebarMenuButton**: Botão do item do menu
|
|
32
|
+
* - **useSidebar**: Hook para acessar contexto do sidebar
|
|
33
|
+
*
|
|
34
|
+
* ## Uso Básico
|
|
35
|
+
*
|
|
36
|
+
* ```tsx
|
|
37
|
+
* import { SidebarProvider, Sidebar, SidebarContent, SidebarTrigger } from "@flowtomic/ui/components/atoms/layout/sidebar";
|
|
38
|
+
*
|
|
39
|
+
* function MyComponent() {
|
|
40
|
+
* return (
|
|
41
|
+
* <SidebarProvider>
|
|
42
|
+
* <Sidebar>
|
|
43
|
+
* <SidebarContent>
|
|
44
|
+
* <SidebarMenu>
|
|
45
|
+
* <SidebarMenuItem>
|
|
46
|
+
* <SidebarMenuButton>Item 1</SidebarMenuButton>
|
|
47
|
+
* </SidebarMenuItem>
|
|
48
|
+
* </SidebarMenu>
|
|
49
|
+
* </SidebarContent>
|
|
50
|
+
* </Sidebar>
|
|
51
|
+
* <SidebarTrigger />
|
|
52
|
+
* </SidebarProvider>
|
|
53
|
+
* );
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* ## Acessibilidade
|
|
58
|
+
*
|
|
59
|
+
* - Suporta navegação por teclado
|
|
60
|
+
* - Atalho de teclado (Cmd/Ctrl + B)
|
|
61
|
+
* - Suporta leitores de tela
|
|
62
|
+
* - Tooltips para itens colapsados
|
|
63
|
+
*
|
|
64
|
+
* @see [Sidebar Component Stories](./sidebar.stories.tsx) para exemplos de uso
|
|
65
|
+
*/
|
|
1
66
|
import { type VariantProps } from "class-variance-authority";
|
|
2
67
|
import * as React from "react";
|
|
3
68
|
import { Button } from "../../actions/button/button";
|
|
@@ -106,7 +171,7 @@ declare namespace SidebarMenuItem {
|
|
|
106
171
|
var displayName: string;
|
|
107
172
|
}
|
|
108
173
|
declare const sidebarMenuButtonVariants: (props?: ({
|
|
109
|
-
variant?: "
|
|
174
|
+
variant?: "outline" | "default" | null | undefined;
|
|
110
175
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
111
176
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
112
177
|
export interface SidebarMenuButtonProps extends React.ComponentProps<"button">, VariantProps<typeof sidebarMenuButtonVariants> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/sidebar/sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/sidebar/sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,69 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* # Sidebar Component
|
|
4
|
+
*
|
|
5
|
+
* O componente `Sidebar` é usado para criar uma barra lateral navegável
|
|
6
|
+
* que pode ser expandida/colapsada. Suporta modos desktop e mobile,
|
|
7
|
+
* com persistência de estado via cookies.
|
|
8
|
+
*
|
|
9
|
+
* ## Características Principais
|
|
10
|
+
*
|
|
11
|
+
* - **Responsivo**: Adapta-se automaticamente para mobile (usa Sheet) e desktop
|
|
12
|
+
* - **Estados**: Suporta expanded e collapsed
|
|
13
|
+
* - **Persistência**: Salva estado em cookies
|
|
14
|
+
* - **Atalho de Teclado**: Cmd/Ctrl + B para toggle
|
|
15
|
+
* - **Variantes**: sidebar, floating, inset
|
|
16
|
+
* - **Collapsible**: offcanvas, icon, none
|
|
17
|
+
* - **Composição**: Múltiplos sub-componentes para flexibilidade
|
|
18
|
+
*
|
|
19
|
+
* ## Componentes Principais
|
|
20
|
+
*
|
|
21
|
+
* - **SidebarProvider**: Provider do contexto do sidebar
|
|
22
|
+
* - **Sidebar**: Container principal do sidebar
|
|
23
|
+
* - **SidebarTrigger**: Botão para toggle do sidebar
|
|
24
|
+
* - **SidebarHeader**: Cabeçalho do sidebar
|
|
25
|
+
* - **SidebarContent**: Conteúdo do sidebar
|
|
26
|
+
* - **SidebarFooter**: Rodapé do sidebar
|
|
27
|
+
* - **SidebarGroup**: Grupo de itens
|
|
28
|
+
* - **SidebarGroupLabel**: Label do grupo
|
|
29
|
+
* - **SidebarGroupContent**: Conteúdo do grupo
|
|
30
|
+
* - **SidebarMenu**: Menu do sidebar
|
|
31
|
+
* - **SidebarMenuItem**: Item do menu
|
|
32
|
+
* - **SidebarMenuButton**: Botão do item do menu
|
|
33
|
+
* - **useSidebar**: Hook para acessar contexto do sidebar
|
|
34
|
+
*
|
|
35
|
+
* ## Uso Básico
|
|
36
|
+
*
|
|
37
|
+
* ```tsx
|
|
38
|
+
* import { SidebarProvider, Sidebar, SidebarContent, SidebarTrigger } from "@flowtomic/ui/components/atoms/layout/sidebar";
|
|
39
|
+
*
|
|
40
|
+
* function MyComponent() {
|
|
41
|
+
* return (
|
|
42
|
+
* <SidebarProvider>
|
|
43
|
+
* <Sidebar>
|
|
44
|
+
* <SidebarContent>
|
|
45
|
+
* <SidebarMenu>
|
|
46
|
+
* <SidebarMenuItem>
|
|
47
|
+
* <SidebarMenuButton>Item 1</SidebarMenuButton>
|
|
48
|
+
* </SidebarMenuItem>
|
|
49
|
+
* </SidebarMenu>
|
|
50
|
+
* </SidebarContent>
|
|
51
|
+
* </Sidebar>
|
|
52
|
+
* <SidebarTrigger />
|
|
53
|
+
* </SidebarProvider>
|
|
54
|
+
* );
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* ## Acessibilidade
|
|
59
|
+
*
|
|
60
|
+
* - Suporta navegação por teclado
|
|
61
|
+
* - Atalho de teclado (Cmd/Ctrl + B)
|
|
62
|
+
* - Suporta leitores de tela
|
|
63
|
+
* - Tooltips para itens colapsados
|
|
64
|
+
*
|
|
65
|
+
* @see [Sidebar Component Stories](./sidebar.stories.tsx) para exemplos de uso
|
|
66
|
+
*/
|
|
2
67
|
import { useIsMobile } from "@flowtomic/logic";
|
|
3
68
|
import { Slot } from "@radix-ui/react-slot";
|
|
4
69
|
import { cva } from "class-variance-authority";
|
|
@@ -37,6 +102,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
37
102
|
else {
|
|
38
103
|
_setOpen(openState);
|
|
39
104
|
}
|
|
105
|
+
// biome-ignore lint/suspicious/noDocumentCookie: Necessário para persistir o estado do sidebar
|
|
40
106
|
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
41
107
|
}, [setOpenProp, open]);
|
|
42
108
|
const toggleSidebar = React.useCallback(() => {
|
|
@@ -1,18 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # ToggleGroup Component
|
|
3
|
+
*
|
|
4
|
+
* O componente `ToggleGroup` é usado para agrupar múltiplos toggles em um grupo
|
|
5
|
+
* onde apenas um ou múltiplos podem estar selecionados. É baseado em Radix UI
|
|
6
|
+
* para garantir acessibilidade completa.
|
|
7
|
+
*
|
|
8
|
+
* ## Características Principais
|
|
9
|
+
*
|
|
10
|
+
* - **Acessível**: Baseado em Radix UI com suporte completo a leitores de tela
|
|
11
|
+
* - **Modos**: Suporta single (apenas um selecionado) ou multiple (múltiplos selecionados)
|
|
12
|
+
* - **Variantes**: Herda variantes do Toggle (default, outline)
|
|
13
|
+
* - **Tamanhos**: Herda tamanhos do Toggle (default, sm, lg)
|
|
14
|
+
* - **Espaçamento**: Suporta espaçamento customizado entre itens
|
|
15
|
+
* - **Composição**: ToggleGroup + ToggleGroupItem
|
|
16
|
+
*
|
|
17
|
+
* ## Uso Básico
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* import { ToggleGroup, ToggleGroupItem } from "@flowtomic/ui/components/atoms/layout/toggle-group";
|
|
21
|
+
*
|
|
22
|
+
* function MyComponent() {
|
|
23
|
+
* return (
|
|
24
|
+
* <ToggleGroup type="single">
|
|
25
|
+
* <ToggleGroupItem value="option1">Option 1</ToggleGroupItem>
|
|
26
|
+
* <ToggleGroupItem value="option2">Option 2</ToggleGroupItem>
|
|
27
|
+
* </ToggleGroup>
|
|
28
|
+
* );
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## Acessibilidade
|
|
33
|
+
*
|
|
34
|
+
* - Suporta navegação por teclado (Tab, Enter, Espaço, setas)
|
|
35
|
+
* - Segue padrões WAI-ARIA via Radix UI
|
|
36
|
+
* - Suporta leitores de tela
|
|
37
|
+
* - Foco gerenciado automaticamente
|
|
38
|
+
*
|
|
39
|
+
* @see [Radix UI Toggle Group](https://www.radix-ui.com/primitives/docs/components/toggle-group) para mais detalhes
|
|
40
|
+
* @see [Toggle Component](../forms/toggle/toggle.tsx) para mais detalhes sobre variantes e tamanhos
|
|
41
|
+
*/
|
|
1
42
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
2
43
|
import type { VariantProps } from "class-variance-authority";
|
|
3
44
|
import * as React from "react";
|
|
4
45
|
import { toggleVariants } from "../../forms/toggle/toggle";
|
|
46
|
+
/**
|
|
47
|
+
* Props do componente ToggleGroup.
|
|
48
|
+
*
|
|
49
|
+
* @property {'single' | 'multiple'} type - Tipo de seleção (single ou multiple)
|
|
50
|
+
* @property {'default' | 'outline'} [variant='default'] - Variante visual do toggle group
|
|
51
|
+
* @property {'default' | 'sm' | 'lg'} [size='default'] - Tamanho do toggle group
|
|
52
|
+
* @property {number} [spacing=0] - Espaçamento entre itens em pixels
|
|
53
|
+
*/
|
|
5
54
|
export type ToggleGroupProps = React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & {
|
|
55
|
+
/** Espaçamento entre itens em pixels */
|
|
6
56
|
spacing?: number;
|
|
7
57
|
className?: string;
|
|
8
58
|
children?: React.ReactNode;
|
|
9
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* ToggleGroup - Container principal do toggle group.
|
|
62
|
+
*
|
|
63
|
+
* Componente usado para agrupar múltiplos toggles.
|
|
64
|
+
*
|
|
65
|
+
* @param {ToggleGroupProps} props - Props do componente
|
|
66
|
+
* @returns {JSX.Element} Componente ToggleGroup
|
|
67
|
+
*/
|
|
10
68
|
declare function ToggleGroup({ className, variant, size, spacing, children, ...props }: ToggleGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
11
69
|
declare namespace ToggleGroup {
|
|
12
70
|
var displayName: string;
|
|
13
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Props do componente ToggleGroupItem.
|
|
74
|
+
*
|
|
75
|
+
* @property {string} value - Valor único do item
|
|
76
|
+
* @property {'default' | 'outline'} [variant] - Variante visual (herda do ToggleGroup se não fornecido)
|
|
77
|
+
* @property {'default' | 'sm' | 'lg'} [size] - Tamanho (herda do ToggleGroup se não fornecido)
|
|
78
|
+
*/
|
|
14
79
|
export interface ToggleGroupItemProps extends React.ComponentProps<typeof ToggleGroupPrimitive.Item>, VariantProps<typeof toggleVariants> {
|
|
15
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* ToggleGroupItem - Item individual do toggle group.
|
|
83
|
+
*
|
|
84
|
+
* Componente usado para representar um item no toggle group.
|
|
85
|
+
*
|
|
86
|
+
* @param {ToggleGroupItemProps} props - Props do componente
|
|
87
|
+
* @returns {JSX.Element} Componente ToggleGroupItem
|
|
88
|
+
*/
|
|
16
89
|
declare function ToggleGroupItem({ className, children, variant, size, ...props }: ToggleGroupItemProps): import("react/jsx-runtime").JSX.Element;
|
|
17
90
|
declare namespace ToggleGroupItem {
|
|
18
91
|
var displayName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/toggle-group/toggle-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAY3D,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GACnF,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEJ,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAW,EACX,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAmBlB;kBA1BQ,WAAW;;;AA8BpB,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAC5D,YAAY,CAAC,OAAO,cAAc,CAAC;CAAG;AAE1C,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,2CAuB9F;kBAvBQ,eAAe;;;AA2BxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/toggle-group/toggle-group.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAY3D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GACnF,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEJ;;;;;;;GAOG;AACH,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAW,EACX,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAmBlB;kBA1BQ,WAAW;;;AA8BpB;;;;;;GAMG;AACH,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAC5D,YAAY,CAAC,OAAO,cAAc,CAAC;CAAG;AAE1C;;;;;;;GAOG;AACH,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,2CAuB9F;kBAvBQ,eAAe;;;AA2BxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,4 +1,45 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* # ToggleGroup Component
|
|
4
|
+
*
|
|
5
|
+
* O componente `ToggleGroup` é usado para agrupar múltiplos toggles em um grupo
|
|
6
|
+
* onde apenas um ou múltiplos podem estar selecionados. É baseado em Radix UI
|
|
7
|
+
* para garantir acessibilidade completa.
|
|
8
|
+
*
|
|
9
|
+
* ## Características Principais
|
|
10
|
+
*
|
|
11
|
+
* - **Acessível**: Baseado em Radix UI com suporte completo a leitores de tela
|
|
12
|
+
* - **Modos**: Suporta single (apenas um selecionado) ou multiple (múltiplos selecionados)
|
|
13
|
+
* - **Variantes**: Herda variantes do Toggle (default, outline)
|
|
14
|
+
* - **Tamanhos**: Herda tamanhos do Toggle (default, sm, lg)
|
|
15
|
+
* - **Espaçamento**: Suporta espaçamento customizado entre itens
|
|
16
|
+
* - **Composição**: ToggleGroup + ToggleGroupItem
|
|
17
|
+
*
|
|
18
|
+
* ## Uso Básico
|
|
19
|
+
*
|
|
20
|
+
* ```tsx
|
|
21
|
+
* import { ToggleGroup, ToggleGroupItem } from "@flowtomic/ui/components/atoms/layout/toggle-group";
|
|
22
|
+
*
|
|
23
|
+
* function MyComponent() {
|
|
24
|
+
* return (
|
|
25
|
+
* <ToggleGroup type="single">
|
|
26
|
+
* <ToggleGroupItem value="option1">Option 1</ToggleGroupItem>
|
|
27
|
+
* <ToggleGroupItem value="option2">Option 2</ToggleGroupItem>
|
|
28
|
+
* </ToggleGroup>
|
|
29
|
+
* );
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* ## Acessibilidade
|
|
34
|
+
*
|
|
35
|
+
* - Suporta navegação por teclado (Tab, Enter, Espaço, setas)
|
|
36
|
+
* - Segue padrões WAI-ARIA via Radix UI
|
|
37
|
+
* - Suporta leitores de tela
|
|
38
|
+
* - Foco gerenciado automaticamente
|
|
39
|
+
*
|
|
40
|
+
* @see [Radix UI Toggle Group](https://www.radix-ui.com/primitives/docs/components/toggle-group) para mais detalhes
|
|
41
|
+
* @see [Toggle Component](../forms/toggle/toggle.tsx) para mais detalhes sobre variantes e tamanhos
|
|
42
|
+
*/
|
|
2
43
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
3
44
|
import * as React from "react";
|
|
4
45
|
import { cn } from "@/lib/utils";
|
|
@@ -8,10 +49,26 @@ const ToggleGroupContext = React.createContext({
|
|
|
8
49
|
variant: "default",
|
|
9
50
|
spacing: 0,
|
|
10
51
|
});
|
|
52
|
+
/**
|
|
53
|
+
* ToggleGroup - Container principal do toggle group.
|
|
54
|
+
*
|
|
55
|
+
* Componente usado para agrupar múltiplos toggles.
|
|
56
|
+
*
|
|
57
|
+
* @param {ToggleGroupProps} props - Props do componente
|
|
58
|
+
* @returns {JSX.Element} Componente ToggleGroup
|
|
59
|
+
*/
|
|
11
60
|
function ToggleGroup({ className, variant, size, spacing = 0, children, ...props }) {
|
|
12
61
|
return (_jsx(ToggleGroupPrimitive.Root, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, style: { "--gap": spacing }, className: cn("group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs", className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children: children }) }));
|
|
13
62
|
}
|
|
14
63
|
ToggleGroup.displayName = "ToggleGroup";
|
|
64
|
+
/**
|
|
65
|
+
* ToggleGroupItem - Item individual do toggle group.
|
|
66
|
+
*
|
|
67
|
+
* Componente usado para representar um item no toggle group.
|
|
68
|
+
*
|
|
69
|
+
* @param {ToggleGroupItemProps} props - Props do componente
|
|
70
|
+
* @returns {JSX.Element} Componente ToggleGroupItem
|
|
71
|
+
*/
|
|
15
72
|
function ToggleGroupItem({ className, children, variant, size, ...props }) {
|
|
16
73
|
const context = React.useContext(ToggleGroupContext);
|
|
17
74
|
return (_jsx(ToggleGroupPrimitive.Item, { "data-slot": "toggle-group-item", "data-variant": context.variant || variant, "data-size": context.size || size, "data-spacing": context.spacing, className: cn(toggleVariants({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/widget-resize-handle/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WidgetResizeHandle } from "./widget-resize-handle";
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # WidgetResizeHandle Component
|
|
3
|
+
*
|
|
4
|
+
* O componente `WidgetResizeHandle` é usado para redimensionar widgets
|
|
5
|
+
* arrastando o canto inferior direito. Usa snap to grid para alinhamento
|
|
6
|
+
* preciso e suporta limites mínimos e máximos.
|
|
7
|
+
*
|
|
8
|
+
* ## Características Principais
|
|
9
|
+
*
|
|
10
|
+
* - **Snap to Grid**: Alinhamento automático à grade
|
|
11
|
+
* - **Limites**: Suporta min/max width e height
|
|
12
|
+
* - **Visual**: Handle visual que aparece no hover
|
|
13
|
+
* - **Drag to Resize**: Arrastar para redimensionar
|
|
14
|
+
*
|
|
15
|
+
* ## Uso Básico
|
|
16
|
+
*
|
|
17
|
+
* ```tsx
|
|
18
|
+
* import { WidgetResizeHandle } from "@flowtomic/ui/components/atoms/layout/widget-resize-handle";
|
|
19
|
+
*
|
|
20
|
+
* function MyWidget({ widgetId, width, height, onResize }) {
|
|
21
|
+
* return (
|
|
22
|
+
* <div className="relative group">
|
|
23
|
+
* <div>Conteúdo do widget</div>
|
|
24
|
+
* <WidgetResizeHandle
|
|
25
|
+
* widgetId={widgetId}
|
|
26
|
+
* currentWidth={width}
|
|
27
|
+
* currentHeight={height}
|
|
28
|
+
* onResize={onResize}
|
|
29
|
+
* minWidth={2}
|
|
30
|
+
* minHeight={2}
|
|
31
|
+
* maxWidth={12}
|
|
32
|
+
* maxHeight={20}
|
|
33
|
+
* />
|
|
34
|
+
* </div>
|
|
35
|
+
* );
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* ## Acessibilidade
|
|
40
|
+
*
|
|
41
|
+
* - Usa aria-label para leitores de tela
|
|
42
|
+
* - Suporta navegação por teclado
|
|
43
|
+
* - Feedback visual claro
|
|
44
|
+
*/
|
|
45
|
+
export interface WidgetResizeHandleProps {
|
|
46
|
+
/**
|
|
47
|
+
* ID do widget a ser redimensionado
|
|
48
|
+
*/
|
|
49
|
+
widgetId: string;
|
|
50
|
+
/**
|
|
51
|
+
* Largura atual do widget em unidades de grade
|
|
52
|
+
*/
|
|
53
|
+
currentWidth: number;
|
|
54
|
+
/**
|
|
55
|
+
* Altura atual do widget em unidades de grade
|
|
56
|
+
*/
|
|
57
|
+
currentHeight: number;
|
|
58
|
+
/**
|
|
59
|
+
* Callback quando widget é redimensionado
|
|
60
|
+
*/
|
|
61
|
+
onResize: (widgetId: string, w: number, h: number) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Tamanho mínimo do widget (largura)
|
|
64
|
+
*/
|
|
65
|
+
minWidth?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Tamanho mínimo do widget (altura)
|
|
68
|
+
*/
|
|
69
|
+
minHeight?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Tamanho máximo do widget (largura)
|
|
72
|
+
*/
|
|
73
|
+
maxWidth?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Tamanho máximo do widget (altura)
|
|
76
|
+
*/
|
|
77
|
+
maxHeight?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Tamanho da célula do grid em pixels
|
|
80
|
+
*/
|
|
81
|
+
cellSize?: number;
|
|
82
|
+
/**
|
|
83
|
+
* Gap entre células em pixels
|
|
84
|
+
*/
|
|
85
|
+
gap?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Classe CSS adicional
|
|
88
|
+
*/
|
|
89
|
+
className?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Handle para redimensionar widget
|
|
93
|
+
*
|
|
94
|
+
* Componente puro de UI que permite redimensionar widgets arrastando
|
|
95
|
+
* o canto inferior direito. Usa snap to grid para alinhamento.
|
|
96
|
+
*/
|
|
97
|
+
export declare function WidgetResizeHandle({ widgetId, currentWidth, currentHeight, onResize, minWidth, minHeight, maxWidth, maxHeight, cellSize, gap, className, }: WidgetResizeHandleProps): import("react/jsx-runtime").JSX.Element;
|
|
98
|
+
//# sourceMappingURL=widget-resize-handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-resize-handle.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/layout/widget-resize-handle/widget-resize-handle.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAMH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,QAAY,EACZ,SAAa,EACb,QAAa,EACb,SAAc,EACd,QAAa,EACb,GAAQ,EACR,SAAS,GACV,EAAE,uBAAuB,2CAgGzB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* # WidgetResizeHandle Component
|
|
4
|
+
*
|
|
5
|
+
* O componente `WidgetResizeHandle` é usado para redimensionar widgets
|
|
6
|
+
* arrastando o canto inferior direito. Usa snap to grid para alinhamento
|
|
7
|
+
* preciso e suporta limites mínimos e máximos.
|
|
8
|
+
*
|
|
9
|
+
* ## Características Principais
|
|
10
|
+
*
|
|
11
|
+
* - **Snap to Grid**: Alinhamento automático à grade
|
|
12
|
+
* - **Limites**: Suporta min/max width e height
|
|
13
|
+
* - **Visual**: Handle visual que aparece no hover
|
|
14
|
+
* - **Drag to Resize**: Arrastar para redimensionar
|
|
15
|
+
*
|
|
16
|
+
* ## Uso Básico
|
|
17
|
+
*
|
|
18
|
+
* ```tsx
|
|
19
|
+
* import { WidgetResizeHandle } from "@flowtomic/ui/components/atoms/layout/widget-resize-handle";
|
|
20
|
+
*
|
|
21
|
+
* function MyWidget({ widgetId, width, height, onResize }) {
|
|
22
|
+
* return (
|
|
23
|
+
* <div className="relative group">
|
|
24
|
+
* <div>Conteúdo do widget</div>
|
|
25
|
+
* <WidgetResizeHandle
|
|
26
|
+
* widgetId={widgetId}
|
|
27
|
+
* currentWidth={width}
|
|
28
|
+
* currentHeight={height}
|
|
29
|
+
* onResize={onResize}
|
|
30
|
+
* minWidth={2}
|
|
31
|
+
* minHeight={2}
|
|
32
|
+
* maxWidth={12}
|
|
33
|
+
* maxHeight={20}
|
|
34
|
+
* />
|
|
35
|
+
* </div>
|
|
36
|
+
* );
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* ## Acessibilidade
|
|
41
|
+
*
|
|
42
|
+
* - Usa aria-label para leitores de tela
|
|
43
|
+
* - Suporta navegação por teclado
|
|
44
|
+
* - Feedback visual claro
|
|
45
|
+
*/
|
|
46
|
+
import { Maximize2 } from "lucide-react";
|
|
47
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
48
|
+
import { cn } from "@/lib/utils";
|
|
49
|
+
/**
|
|
50
|
+
* Handle para redimensionar widget
|
|
51
|
+
*
|
|
52
|
+
* Componente puro de UI que permite redimensionar widgets arrastando
|
|
53
|
+
* o canto inferior direito. Usa snap to grid para alinhamento.
|
|
54
|
+
*/
|
|
55
|
+
export function WidgetResizeHandle({ widgetId, currentWidth, currentHeight, onResize, minWidth = 2, minHeight = 2, maxWidth = 12, maxHeight = 20, cellSize = 50, gap = 16, className, }) {
|
|
56
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
57
|
+
const [startPos, setStartPos] = useState({ x: 0, y: 0 });
|
|
58
|
+
const [startSize, setStartSize] = useState({ w: currentWidth, h: currentHeight });
|
|
59
|
+
const handleRef = useRef(null);
|
|
60
|
+
const handleMouseDown = useCallback((e) => {
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
e.stopPropagation();
|
|
63
|
+
setIsResizing(true);
|
|
64
|
+
setStartPos({ x: e.clientX, y: e.clientY });
|
|
65
|
+
setStartSize({ w: currentWidth, h: currentHeight });
|
|
66
|
+
}, [currentWidth, currentHeight]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (!isResizing)
|
|
69
|
+
return;
|
|
70
|
+
const handleMouseMove = (e) => {
|
|
71
|
+
const deltaX = e.clientX - startPos.x;
|
|
72
|
+
const deltaY = e.clientY - startPos.y;
|
|
73
|
+
// Calcula novo tamanho baseado no movimento do mouse
|
|
74
|
+
// Usa snap to grid
|
|
75
|
+
const totalCellSize = cellSize + gap;
|
|
76
|
+
const deltaW = Math.round(deltaX / totalCellSize);
|
|
77
|
+
const deltaH = Math.round(deltaY / totalCellSize);
|
|
78
|
+
// Se não houver mudança significativa, não atualiza
|
|
79
|
+
if (deltaW === 0 && deltaH === 0)
|
|
80
|
+
return;
|
|
81
|
+
const newW = Math.max(minWidth, Math.min(maxWidth, startSize.w + deltaW));
|
|
82
|
+
const newH = Math.max(minHeight, Math.min(maxHeight, startSize.h + deltaH));
|
|
83
|
+
// Atualiza apenas se mudou
|
|
84
|
+
if (newW !== currentWidth || newH !== currentHeight) {
|
|
85
|
+
onResize(widgetId, newW, newH);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const handleMouseUp = () => {
|
|
89
|
+
setIsResizing(false);
|
|
90
|
+
};
|
|
91
|
+
document.addEventListener("mousemove", handleMouseMove);
|
|
92
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
93
|
+
return () => {
|
|
94
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
95
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
96
|
+
};
|
|
97
|
+
}, [
|
|
98
|
+
isResizing,
|
|
99
|
+
startPos,
|
|
100
|
+
startSize,
|
|
101
|
+
currentWidth,
|
|
102
|
+
currentHeight,
|
|
103
|
+
widgetId,
|
|
104
|
+
minWidth,
|
|
105
|
+
minHeight,
|
|
106
|
+
maxWidth,
|
|
107
|
+
maxHeight,
|
|
108
|
+
cellSize,
|
|
109
|
+
gap,
|
|
110
|
+
onResize,
|
|
111
|
+
]);
|
|
112
|
+
return (_jsx("button", { type: "button", ref: handleRef, onMouseDown: handleMouseDown, className: cn("absolute bottom-0 right-0 w-6 h-6", "flex items-center justify-center", "bg-primary/20 border border-primary/40 rounded-tl-md", "cursor-nwse-resize", "opacity-0 group-hover:opacity-100 transition-opacity", "hover:bg-primary/30", isResizing && "opacity-100 bg-primary/40", className), tabIndex: 0, "aria-label": "Redimensionar widget", onKeyDown: (e) => {
|
|
113
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
}
|
|
116
|
+
}, children: _jsx(Maximize2, { className: "w-3 h-3 text-primary" }) }));
|
|
117
|
+
}
|
|
@@ -23,7 +23,7 @@ declare const Command: React.ForwardRefExoticComponent<Omit<{
|
|
|
23
23
|
ref?: React.Ref<HTMLDivElement>;
|
|
24
24
|
} & {
|
|
25
25
|
asChild?: boolean;
|
|
26
|
-
}, "
|
|
26
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
27
27
|
label?: string;
|
|
28
28
|
shouldFilter?: boolean;
|
|
29
29
|
filter?: (value: string, search: string, keywords?: string[]) => number;
|
|
@@ -48,7 +48,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
|
|
|
48
48
|
ref?: React.Ref<HTMLInputElement>;
|
|
49
49
|
} & {
|
|
50
50
|
asChild?: boolean;
|
|
51
|
-
}, "
|
|
51
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
|
|
52
52
|
value?: string;
|
|
53
53
|
onValueChange?: (search: string) => void;
|
|
54
54
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -61,7 +61,7 @@ declare const CommandList: React.ForwardRefExoticComponent<Omit<{
|
|
|
61
61
|
ref?: React.Ref<HTMLDivElement>;
|
|
62
62
|
} & {
|
|
63
63
|
asChild?: boolean;
|
|
64
|
-
}, "
|
|
64
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
65
65
|
label?: string;
|
|
66
66
|
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
67
67
|
/**
|
|
@@ -73,7 +73,7 @@ declare const CommandEmpty: React.ForwardRefExoticComponent<Omit<{
|
|
|
73
73
|
ref?: React.Ref<HTMLDivElement>;
|
|
74
74
|
} & {
|
|
75
75
|
asChild?: boolean;
|
|
76
|
-
}, "
|
|
76
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
77
77
|
/**
|
|
78
78
|
* CommandGroup - Grupo do command
|
|
79
79
|
*/
|
|
@@ -83,7 +83,7 @@ declare const CommandGroup: React.ForwardRefExoticComponent<Omit<{
|
|
|
83
83
|
ref?: React.Ref<HTMLDivElement>;
|
|
84
84
|
} & {
|
|
85
85
|
asChild?: boolean;
|
|
86
|
-
}, "
|
|
86
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>>, "value" | "heading"> & {
|
|
87
87
|
heading?: React.ReactNode;
|
|
88
88
|
value?: string;
|
|
89
89
|
forceMount?: boolean;
|
|
@@ -95,7 +95,7 @@ declare const CommandSeparator: React.ForwardRefExoticComponent<Omit<Pick<Pick<R
|
|
|
95
95
|
ref?: React.Ref<HTMLDivElement>;
|
|
96
96
|
} & {
|
|
97
97
|
asChild?: boolean;
|
|
98
|
-
}, "
|
|
98
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
99
99
|
alwaysRender?: boolean;
|
|
100
100
|
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
101
101
|
/**
|
|
@@ -107,7 +107,7 @@ declare const CommandItem: React.ForwardRefExoticComponent<Omit<{
|
|
|
107
107
|
ref?: React.Ref<HTMLDivElement>;
|
|
108
108
|
} & {
|
|
109
109
|
asChild?: boolean;
|
|
110
|
-
}, "
|
|
110
|
+
}, "key" | "asChild" | keyof React.HTMLAttributes<HTMLDivElement>>, "onSelect" | "disabled" | "value"> & {
|
|
111
111
|
disabled?: boolean;
|
|
112
112
|
onSelect?: (value: string) => void;
|
|
113
113
|
value?: string;
|