forlogic-core 2.0.4 → 2.0.6
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/.note/memory/features/crud-defaults-batteries-included.md +1 -1
- package/dist/auth/services/TokenManager.d.ts +0 -1
- package/dist/components/ui/dialog-wizard.d.ts +82 -0
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/input.d.ts +5 -23
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/step-selector.d.ts +11 -9
- package/dist/components/ui/textarea.d.ts +1 -0
- package/dist/crud/components/CrudTable.d.ts +3 -1
- package/dist/crud/createCrudPage.d.ts +2 -0
- package/dist/crud/hooks/useColumnManager.d.ts +3 -1
- package/dist/exports/ui.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/types.d.ts +3 -0
- package/docs/design-system/README.md +2 -2
- package/docs/design-system/buttons-actions.md +6 -0
- package/docs/design-system/domain.md +10 -0
- package/docs/design-system/inputs.md +20 -0
- package/docs/design-system/navigation.md +5 -0
- package/docs/design-system/notifications-feedback.md +2 -0
- package/package.json +1 -1
- package/dist/assets/AccordionDoc-CGNlubG3.js +0 -31
- package/dist/assets/ActionButtonDoc-CYtkXR0k.js +0 -47
- package/dist/assets/ActionPlanDoc-BSuPRftQ.js +0 -65
- package/dist/assets/AlertDoc-Cpvxneqg.js +0 -37
- package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +0 -189
- package/dist/assets/AppHeaderDoc-DNQErj_t.js +0 -74
- package/dist/assets/AppSidebarDoc-DkeQarDu.js +0 -221
- package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +0 -31
- package/dist/assets/AuditLogDoc-BBvNcHIo.js +0 -67
- package/dist/assets/AuditTrailDoc-DgFHO-uo.js +0 -17
- package/dist/assets/AuthDoc-WIA_Aetl.js +0 -200
- package/dist/assets/AvatarDoc-B6go1C1T.js +0 -11
- package/dist/assets/BadgeDoc-BONhfqB_.js +0 -36
- package/dist/assets/BaseFormDoc-CuyUArcj.js +0 -169
- package/dist/assets/BodyContentDoc-CterHC1E.js +0 -83
- package/dist/assets/BreadcrumbDoc-Dwn9nLeO.js +0 -75
- package/dist/assets/ButtonDoc-BOjRseZT.js +0 -41
- package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +0 -7
- package/dist/assets/CalendarDoc-CMwIEqgT.js +0 -81
- package/dist/assets/CardDoc-BZz1CVg2.js +0 -49
- package/dist/assets/ChartDoc-B5vZVtqD.js +0 -76
- package/dist/assets/CheckboxDoc-lAbYO9I5.js +0 -55
- package/dist/assets/ColorPickerDoc-Dpsprp4N.js +0 -10
- package/dist/assets/ColorsFoundationDoc-CCHeSL3p.js +0 -13
- package/dist/assets/ComboTreeDoc-D4dTkIt-.js +0 -46
- package/dist/assets/ComboboxDoc-CqqZPvZq.js +0 -134
- package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +0 -1
- package/dist/assets/ContextMenuDoc-D3jC-MVA.js +0 -182
- package/dist/assets/ContextsDoc-XFH0-JdS.js +0 -211
- package/dist/assets/CreateCrudPageDoc-CpuiWI-g.js +0 -106
- package/dist/assets/CrudActionBarDoc-wuBGXD9Y.js +0 -112
- package/dist/assets/CrudGridDoc-BYWqSXBH.js +0 -85
- package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +0 -14
- package/dist/assets/CrudPrimitivesDoc-CxaTB94A.js +0 -164
- package/dist/assets/CrudTableDoc-Dga1VgCu.js +0 -113
- package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +0 -33
- package/dist/assets/DashboardFormDoc-BUDCmrMl.js +0 -49
- package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +0 -71
- package/dist/assets/DashboardGridDoc-BavePiRF.js +0 -49
- package/dist/assets/DashboardListDoc-CLyMA6UK.js +0 -37
- package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +0 -35
- package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +0 -60
- package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +0 -62
- package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +0 -75
- package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +0 -83
- package/dist/assets/DashboardViewDoc-CtlCNlEF.js +0 -45
- package/dist/assets/DataListDoc-DUy88lCQ.js +0 -13
- package/dist/assets/DesignSystemHome-DHl9YtbH.js +0 -1
- package/dist/assets/DialogDoc-CMQqnTV-.js +0 -981
- package/dist/assets/DropdownMenuDoc-S7X9csGt.js +0 -175
- package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +0 -57
- package/dist/assets/EmptyStateDoc-CHGCiGIk.js +0 -35
- package/dist/assets/EnvironmentsDoc-DZHJZ2nm.js +0 -96
- package/dist/assets/ErrorBoundaryDoc-DoaAg68p.js +0 -111
- package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +0 -1
- package/dist/assets/ExampleAppDoc-DzIU81Fn.js +0 -1
- package/dist/assets/ExampleCard-DuLrb3t-.js +0 -1
- package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +0 -1
- package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +0 -1
- package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +0 -1
- package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +0 -1
- package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +0 -1
- package/dist/assets/FileUploadDoc-9-UujFNX.js +0 -34
- package/dist/assets/FilterBar-DDTqqUfZ.js +0 -1
- package/dist/assets/FormDoc-CVES6n3d.js +0 -81
- package/dist/assets/FoundationOverview-DT0u11Gz.js +0 -1
- package/dist/assets/GridDoc-CbHFSILF.js +0 -28
- package/dist/assets/HooksDoc-Ctxdk6Wq.js +0 -665
- package/dist/assets/HoverCardDoc-8Wkaafdj.js +0 -31
- package/dist/assets/I18nDoc-D3Q2m7ik.js +0 -167
- package/dist/assets/IconPickerDoc-DZ26Gdpg.js +0 -10
- package/dist/assets/IconsFoundationDoc-xOxtC7CW.js +0 -33
- package/dist/assets/InputDoc-BhztAiuJ.js +0 -211
- package/dist/assets/LabelDoc-A4hmTRRV.js +0 -42
- package/dist/assets/LeadershipDoc-CqOSfWsP.js +0 -452
- package/dist/assets/MediaDoc-C78gvC8p.js +0 -459
- package/dist/assets/MenubarDoc-DCnmd2tO.js +0 -165
- package/dist/assets/ModuleAccessDoc-CmD5nHDp.js +0 -153
- package/dist/assets/ModulesDialogDoc-DVit1CA-.js +0 -46
- package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +0 -34
- package/dist/assets/NavigationMenuDoc-q1fbc89j.js +0 -116
- package/dist/assets/OnboardingDialogDoc-3A3eBYrq.js +0 -55
- package/dist/assets/PaginationDoc-B8-bMz5J.js +0 -27
- package/dist/assets/PaginationDoc-BkGdxHL3.js +0 -98
- package/dist/assets/PlacesDoc-CKPO6ATs.js +0 -226
- package/dist/assets/PopoverDoc-CJPU4Ags.js +0 -64
- package/dist/assets/ProgressDoc-CpjbTL4o.js +0 -29
- package/dist/assets/QualiexUserFieldDoc-DDwumlRw.js +0 -149
- package/dist/assets/RadioGroupDoc-D6tSZz8G.js +0 -57
- package/dist/assets/RadiusDoc-B4xSnajw.js +0 -7
- package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +0 -15
- package/dist/assets/RequiredFieldsCounterDoc-COesoSdx.js +0 -58
- package/dist/assets/ResizableDoc-CW0-XQuB.js +0 -104
- package/dist/assets/RichTextEditorDoc-C8c_XA9P.js +0 -24
- package/dist/assets/ScrollAreaDoc-BxtoAPaZ.js +0 -28
- package/dist/assets/SecurityDoc-wOVqpg2F.js +0 -204
- package/dist/assets/SelectDoc-C75gtY9D.js +0 -80
- package/dist/assets/SeparatorDoc-BjQBPB1P.js +0 -4
- package/dist/assets/ServicesDoc-CXTctwBl.js +0 -308
- package/dist/assets/ShadowsDoc-C6Lw8_x2.js +0 -9
- package/dist/assets/SignDoc-Bh5ZUg5x.js +0 -66
- package/dist/assets/SkeletonDoc-rTLGK5VE.js +0 -54
- package/dist/assets/SliderDoc-JMAMDub7.js +0 -41
- package/dist/assets/SpacingDoc-RljOrpwA.js +0 -12
- package/dist/assets/SplitButtonDoc-CvShUW3w.js +0 -53
- package/dist/assets/StepSelectorDoc-C-nAap9H.js +0 -41
- package/dist/assets/SwitchDoc-DLnqmkPr.js +0 -56
- package/dist/assets/TableDoc-B8EpWLVg.js +0 -128
- package/dist/assets/TabsDoc-DIBtl_uC.js +0 -42
- package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +0 -10
- package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +0 -16
- package/dist/assets/TextareaDoc-DGnqMqEC.js +0 -46
- package/dist/assets/ToastDoc-DjYyc7ae.js +0 -157
- package/dist/assets/ToggleDoc-C9ZOVjkY.js +0 -51
- package/dist/assets/TooltipDoc-BEx4l9-i.js +0 -58
- package/dist/assets/TruncatedCellDoc-BbV1bRSY.js +0 -12
- package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +0 -7
- package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +0 -29
- package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +0 -18
- package/dist/assets/UtilitiesDoc-DGxaHVV1.js +0 -145
- package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +0 -1
- package/dist/assets/blocks-B6LrJeAM.js +0 -1
- package/dist/assets/building-DeVappnD.js +0 -1
- package/dist/assets/calendar-days-BQ0na5kM.js +0 -1
- package/dist/assets/check-check-C_-PJCJa.js +0 -1
- package/dist/assets/circle-plus-CpIcep-O.js +0 -1
- package/dist/assets/circle-x-jPpBPew0.js +0 -1
- package/dist/assets/clipboard-list-CXNPdciZ.js +0 -1
- package/dist/assets/cloud-upload-BEjzumjl.js +0 -1
- package/dist/assets/crown-CqNsQIsm.js +0 -1
- package/dist/assets/date-picker-BW3eGOe_.js +0 -1
- package/dist/assets/disabled-menu-item-C2YaMvSt.js +0 -1
- package/dist/assets/drawer-D5rflIcD.js +0 -3
- package/dist/assets/file-braces-DFb5X9so.js +0 -1
- package/dist/assets/file-pen-line-CyUGKkEN.js +0 -1
- package/dist/assets/git-branch-BcXv9mpp.js +0 -1
- package/dist/assets/globe-CpMIWAcv.js +0 -1
- package/dist/assets/hash-cQWdKjya.js +0 -1
- package/dist/assets/hourglass-BahQ3eDv.js +0 -1
- package/dist/assets/hover-card-R66N85sZ.js +0 -1
- package/dist/assets/iframe-dialog-V0mW5aBb.js +0 -1
- package/dist/assets/index-DkiftrvI.js +0 -352
- package/dist/assets/index-nmBjO9Th.css +0 -1
- package/dist/assets/life-buoy-ByXiPddz.js +0 -1
- package/dist/assets/loading-state-Cb5_t5uE.js +0 -1
- package/dist/assets/lucide-react-Cp3Yw3Zm.js +0 -1
- package/dist/assets/package-B3-pVvPM.js +0 -1
- package/dist/assets/pen-Bi_lmmKT.js +0 -1
- package/dist/assets/pin-DVsSl8QA.js +0 -1
- package/dist/assets/printer-BnJ8B6m-.js +0 -1
- package/dist/assets/radio-group-BHAaNGsm.js +0 -1
- package/dist/assets/server-CtzFTfKR.js +0 -1
- package/dist/assets/share-2-Dv8Do445.js +0 -1
- package/dist/assets/shield-check-CFXjOV_w.js +0 -1
- package/dist/assets/shield-x-DJTRfVux.js +0 -1
- package/dist/assets/slider-v9tXBSnB.js +0 -1
- package/dist/assets/smartphone-BSNR60L7.js +0 -1
- package/dist/assets/step-selector-ATTh_9Wa.js +0 -1
- package/dist/assets/text-align-start-qE-MbYYw.js +0 -1
- package/dist/assets/thumbs-up-D_XIW_uX.js +0 -1
- package/dist/assets/trash-DTWQwpwA.js +0 -1
- package/dist/assets/trending-up-jip5-leJ.js +0 -1
- package/dist/assets/useMockCrud-CN4vjyOZ.js +0 -1
- package/dist/assets/user-check-BlH3EDWK.js +0 -1
- package/dist/assets/user-plus-BqwXwD-c.js +0 -1
- package/dist/index.html +0 -33
package/dist/types.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export interface CrudColumn<T = any> {
|
|
|
75
75
|
label?: string;
|
|
76
76
|
type?: 'text' | 'number' | 'date' | 'boolean' | 'select' | 'textarea' | 'email' | 'tel';
|
|
77
77
|
required?: boolean;
|
|
78
|
+
/** Coluna é ordenável. Default: true. Use `false` para desabilitar. */
|
|
78
79
|
sortable?: boolean;
|
|
79
80
|
filterable?: boolean;
|
|
80
81
|
searchable?: boolean;
|
|
@@ -287,6 +288,8 @@ export interface CrudPageConfig<T extends CrudEntity> {
|
|
|
287
288
|
onClick: () => void;
|
|
288
289
|
}>;
|
|
289
290
|
customListView?: (items: T[], manager?: CrudManager<T>) => React.ReactNode;
|
|
291
|
+
/** Colunas ocultas por padrão (antes de qualquer interação do usuário). */
|
|
292
|
+
defaultHiddenColumns?: string[];
|
|
290
293
|
}
|
|
291
294
|
export interface EntityWithId {
|
|
292
295
|
id: string | number;
|
|
@@ -153,6 +153,9 @@ import { Button } from "forlogic-core"
|
|
|
153
153
|
- ✅ Inclua estado de loading para ações assíncronas
|
|
154
154
|
- ❌ Não use múltiplos botões primários no mesmo contexto
|
|
155
155
|
- ❌ Não crie estilos customizados fora do design system
|
|
156
|
+
- 🎨 **Padrão v2**: Tamanho
|
|
157
|
+
- usa
|
|
158
|
+
- (8px) para consistência com inputs e selects.
|
|
156
159
|
|
|
157
160
|
> Fonte: `src\design-system\docs\components\ButtonDoc.tsx`
|
|
158
161
|
|
|
@@ -218,6 +221,9 @@ import { Button } from "forlogic-core"
|
|
|
218
221
|
- ✅ Inclua estado de loading para ações assíncronas
|
|
219
222
|
- ❌ Não use múltiplos botões primários no mesmo contexto
|
|
220
223
|
- ❌ Não crie estilos customizados fora do design system
|
|
224
|
+
- 🎨 **Padrão v2**: Tamanho
|
|
225
|
+
- usa
|
|
226
|
+
- (8px) para consistência com inputs e selects.
|
|
221
227
|
|
|
222
228
|
> Fonte: `src\design-system\docs\components\ButtonDoc.tsx`
|
|
223
229
|
|
|
@@ -236,6 +236,11 @@ import {
|
|
|
236
236
|
- quando o Select estiver dentro de um Dialog para evitar problemas de scroll
|
|
237
237
|
- 💡 Para seleção com busca, considere usar
|
|
238
238
|
- ao invés de
|
|
239
|
+
- ,
|
|
240
|
+
|
|
241
|
+
- rounded-lg
|
|
242
|
+
- hover:border-primary
|
|
243
|
+
- transition-colors
|
|
239
244
|
|
|
240
245
|
> Fonte: `src\design-system\docs\components\SelectDoc.tsx`
|
|
241
246
|
|
|
@@ -639,6 +644,11 @@ import {
|
|
|
639
644
|
- quando o Select estiver dentro de um Dialog para evitar problemas de scroll
|
|
640
645
|
- 💡 Para seleção com busca, considere usar
|
|
641
646
|
- ao invés de
|
|
647
|
+
- ,
|
|
648
|
+
|
|
649
|
+
- rounded-lg
|
|
650
|
+
- hover:border-primary
|
|
651
|
+
- transition-colors
|
|
642
652
|
|
|
643
653
|
> Fonte: `src\design-system\docs\components\SelectDoc.tsx`
|
|
644
654
|
|
|
@@ -42,6 +42,7 @@ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "
|
|
|
42
42
|
| `readOnly` | `boolean` | false | Se o input é somente leitura (não editável mas envia no form). |
|
|
43
43
|
| `required` | `boolean` | false | Se o campo é obrigatório para submissão do formulário. |
|
|
44
44
|
| `maxLength` | `number` | - | Número máximo de caracteres permitidos. |
|
|
45
|
+
| `showCharCount` | `boolean` | false | Exibe contador de caracteres abaixo do input (requer maxLength). |
|
|
45
46
|
| `minLength` | `number` | - | Número mínimo de caracteres necessários. |
|
|
46
47
|
| `pattern` | `string` | - | Regex para validação do valor (HTML5). |
|
|
47
48
|
| `autoComplete` | `string` | - | Dica de autocompletar: |
|
|
@@ -113,6 +114,11 @@ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "
|
|
|
113
114
|
- Para validação de formulários, use react-hook-form com FormField, FormControl e FormMessage.
|
|
114
115
|
- Para estados de erro, adicione as classes
|
|
115
116
|
- ao Input.
|
|
117
|
+
- 🎨 **Padrão v2**: Input usa
|
|
118
|
+
- (8px) e
|
|
119
|
+
- com
|
|
120
|
+
- para feedback visual no hover.
|
|
121
|
+
- 🎨 **Padrão v2**: Bordas dos inputs têm contraste aumentado (luminosidade 82% light / 25% dark) para maior realce visual.
|
|
116
122
|
|
|
117
123
|
> Fonte: `src\design-system\docs\components\InputDoc.tsx`
|
|
118
124
|
|
|
@@ -147,6 +153,12 @@ import { Textarea } from "forlogic-core"
|
|
|
147
153
|
- Acessível por teclado
|
|
148
154
|
- Amigável para leitores de tela
|
|
149
155
|
|
|
156
|
+
**Notas:**
|
|
157
|
+
- 🎨 **Padrão v2**: Textarea usa
|
|
158
|
+
- (8px) e
|
|
159
|
+
- com
|
|
160
|
+
- para feedback visual no hover.
|
|
161
|
+
|
|
150
162
|
> Fonte: `src\design-system\docs\components\TextareaDoc.tsx`
|
|
151
163
|
|
|
152
164
|
---
|
|
@@ -299,6 +311,9 @@ import { Label } from "forlogic-core"
|
|
|
299
311
|
- Labels aumentam a área de clique para inputs (especialmente útil em mobile)
|
|
300
312
|
- Adicione cursor-pointer quando associada a checkboxes/radios
|
|
301
313
|
- Combine com texto de ajuda abaixo do input para instruções adicionais
|
|
314
|
+
- 🎨 **Padrão v2**: Label usa
|
|
315
|
+
- (12px) e
|
|
316
|
+
- para hierarquia visual clara sem competir com o conteúdo do campo.
|
|
302
317
|
|
|
303
318
|
> Fonte: `src\design-system\docs\components\LabelDoc.tsx`
|
|
304
319
|
|
|
@@ -426,6 +441,11 @@ import {
|
|
|
426
441
|
- quando o Select estiver dentro de um Dialog para evitar problemas de scroll
|
|
427
442
|
- 💡 Para seleção com busca, considere usar
|
|
428
443
|
- ao invés de
|
|
444
|
+
- ,
|
|
445
|
+
|
|
446
|
+
- rounded-lg
|
|
447
|
+
- hover:border-primary
|
|
448
|
+
- transition-colors
|
|
429
449
|
|
|
430
450
|
> Fonte: `src\design-system\docs\components\SelectDoc.tsx`
|
|
431
451
|
|
|
@@ -545,6 +545,11 @@ import {
|
|
|
545
545
|
- quando o Select estiver dentro de um Dialog para evitar problemas de scroll
|
|
546
546
|
- 💡 Para seleção com busca, considere usar
|
|
547
547
|
- ao invés de
|
|
548
|
+
- ,
|
|
549
|
+
|
|
550
|
+
- rounded-lg
|
|
551
|
+
- hover:border-primary
|
|
552
|
+
- transition-colors
|
|
548
553
|
|
|
549
554
|
> Fonte: `src\design-system\docs\components\SelectDoc.tsx`
|
|
550
555
|
|
|
@@ -77,6 +77,8 @@ toast.success(
|
|
|
77
77
|
- Forneça ação de
|
|
78
78
|
- para operações destrutivas quando possível
|
|
79
79
|
- Evite usar duration: Infinity sem closeButton ou action para dispensar
|
|
80
|
+
- 🎨 **Padrão v2**: Toasts possuem
|
|
81
|
+
- como identidade visual herdada da v2.
|
|
80
82
|
|
|
81
83
|
> Fonte: `src\design-system\docs\components\ToastDoc.tsx`
|
|
82
84
|
|
package/package.json
CHANGED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import{b7 as l,j as e,b8 as re,b9 as Y,ba as ne,bb as ae,bc as q,bd as se,be as ie,bf as ce,bg as le,bh as de,bi as K,bj as pe,r as j,o as S,bk as me,bl as ue,bm as xe,x as fe,bn as be,bo as Ce}from"./index-DkiftrvI.js";import{C as Ae}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";var d="Accordion",he=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[D,ve,ge]=re(d),[I]=pe(d,[ge,K]),k=K(),$=l.forwardRef((o,n)=>{const{type:t,...a}=o,s=a,r=a;return e.jsx(D.Provider,{scope:o.__scopeAccordion,children:t==="multiple"?e.jsx(we,{...r,ref:n}):e.jsx(ye,{...s,ref:n})})});$.displayName=d;var[z,je]=I(d),[G,Ie]=I(d,{collapsible:!1}),ye=l.forwardRef((o,n)=>{const{value:t,defaultValue:a,onValueChange:s=()=>{},collapsible:r=!1,...c}=o,[i,p]=Y({prop:t,defaultProp:a??"",onChange:s,caller:d});return e.jsx(z,{scope:o.__scopeAccordion,value:l.useMemo(()=>i?[i]:[],[i]),onItemOpen:p,onItemClose:l.useCallback(()=>r&&p(""),[r,p]),children:e.jsx(G,{scope:o.__scopeAccordion,collapsible:r,children:e.jsx(L,{...c,ref:n})})})}),we=l.forwardRef((o,n)=>{const{value:t,defaultValue:a,onValueChange:s=()=>{},...r}=o,[c,i]=Y({prop:t,defaultProp:a??[],onChange:s,caller:d}),p=l.useCallback(f=>i((u=[])=>[...u,f]),[i]),x=l.useCallback(f=>i((u=[])=>u.filter(w=>w!==f)),[i]);return e.jsx(z,{scope:o.__scopeAccordion,value:c,onItemOpen:p,onItemClose:x,children:e.jsx(G,{scope:o.__scopeAccordion,collapsible:!0,children:e.jsx(L,{...r,ref:n})})})}),[Ne,y]=I(d),L=l.forwardRef((o,n)=>{const{__scopeAccordion:t,disabled:a,dir:s,orientation:r="vertical",...c}=o,i=l.useRef(null),p=ce(i,n),x=ve(t),u=le(s)==="ltr",w=de(o.onKeyDown,h=>{if(!he.includes(h.key))return;const oe=h.target,N=x().filter(O=>!O.ref.current?.disabled),v=N.findIndex(O=>O.ref.current===oe),V=N.length;if(v===-1)return;h.preventDefault();let m=v;const R=0,_=V-1,P=()=>{m=v+1,m>_&&(m=R)},T=()=>{m=v-1,m<R&&(m=_)};switch(h.key){case"Home":m=R;break;case"End":m=_;break;case"ArrowRight":r==="horizontal"&&(u?P():T());break;case"ArrowDown":r==="vertical"&&P();break;case"ArrowLeft":r==="horizontal"&&(u?T():P());break;case"ArrowUp":r==="vertical"&&T();break}const te=m%V;N[te].ref.current?.focus()});return e.jsx(Ne,{scope:t,disabled:a,direction:s,orientation:r,children:e.jsx(D.Slot,{scope:t,children:e.jsx(q.div,{...c,"data-orientation":r,ref:p,onKeyDown:a?void 0:w})})})}),g="AccordionItem",[Re,M]=I(g),U=l.forwardRef((o,n)=>{const{__scopeAccordion:t,value:a,...s}=o,r=y(g,t),c=je(g,t),i=k(t),p=ne(),x=a&&c.value.includes(a)||!1,f=r.disabled||o.disabled;return e.jsx(Re,{scope:t,open:x,disabled:f,triggerId:p,children:e.jsx(ae,{"data-orientation":r.orientation,"data-state":X(x),...i,...s,ref:n,disabled:f,open:x,onOpenChange:u=>{u?c.onItemOpen(a):c.onItemClose(a)}})})});U.displayName=g;var Q="AccordionHeader",W=l.forwardRef((o,n)=>{const{__scopeAccordion:t,...a}=o,s=y(d,t),r=M(Q,t);return e.jsx(q.h3,{"data-orientation":s.orientation,"data-state":X(r.open),"data-disabled":r.disabled?"":void 0,...a,ref:n})});W.displayName=Q;var E="AccordionTrigger",B=l.forwardRef((o,n)=>{const{__scopeAccordion:t,...a}=o,s=y(d,t),r=M(E,t),c=Ie(E,t),i=k(t);return e.jsx(D.ItemSlot,{scope:t,children:e.jsx(se,{"aria-disabled":r.open&&!c.collapsible||void 0,"data-orientation":s.orientation,id:r.triggerId,...i,...a,ref:n})})});B.displayName=E;var F="AccordionContent",J=l.forwardRef((o,n)=>{const{__scopeAccordion:t,...a}=o,s=y(d,t),r=M(F,t),c=k(t);return e.jsx(ie,{role:"region","aria-labelledby":r.triggerId,"data-orientation":s.orientation,...c,...a,ref:n,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...o.style}})});J.displayName=F;function X(o){return o?"open":"closed"}var _e=$,Pe=U,Te=W,Z=B,ee=J;const H=_e,b=j.forwardRef(({className:o,...n},t)=>e.jsx(Pe,{ref:t,className:S("border-b",o),...n}));b.displayName="AccordionItem";const C=j.forwardRef(({className:o,children:n,...t},a)=>e.jsx(Te,{className:"flex",children:e.jsxs(Z,{ref:a,className:S("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",o),...t,children:[n,e.jsx(me,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));C.displayName=Z.displayName;const A=j.forwardRef(({className:o,children:n,...t},a)=>e.jsx(ee,{ref:a,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...t,children:e.jsx("div",{className:S("pb-4 pt-0",o),children:n})}));A.displayName=ee.displayName;function Oe(){const[o,n]=j.useState(!1);return e.jsxs(ue,{open:o,onOpenChange:n,className:"w-[350px] space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between space-x-4 px-4",children:[e.jsx("h4",{className:"text-sm font-semibold",children:"@peduarte starred 3 repositories"}),e.jsx(xe,{asChild:!0,children:e.jsx(fe,{variant:"ghost",size:"sm",children:e.jsx(be,{className:"h-4 w-4"})})})]}),e.jsxs(Ce,{className:"space-y-2",children:[e.jsx("div",{className:"rounded-md border px-4 py-2 text-sm",children:"@radix-ui/primitives"}),e.jsx("div",{className:"rounded-md border px-4 py-2 text-sm",children:"@radix-ui/colors"}),e.jsx("div",{className:"rounded-md border px-4 py-2 text-sm",children:"@stitches/react"})]})]})}function ke(){return e.jsx(Ae,{title:"Accordion & Collapsible",description:"Componentes de expansão/colapso para revelar conteúdo. Accordion para múltiplos itens, Collapsible para item único.",component:e.jsxs(H,{type:"single",collapsible:!0,className:"w-full max-w-md",children:[e.jsxs(b,{value:"item-1",children:[e.jsx(C,{children:"Is it accessible?"}),e.jsx(A,{children:"Yes. It adheres to the WAI-ARIA design pattern."})]}),e.jsxs(b,{value:"item-2",children:[e.jsx(C,{children:"Is it styled?"}),e.jsx(A,{children:"Yes. It comes with default styles that matches the other components aesthetic."})]}),e.jsxs(b,{value:"item-3",children:[e.jsx(C,{children:"Is it animated?"}),e.jsx(A,{children:"Yes. It's animated by default, but you can disable it if you prefer."})]})]}),usage:`import {
|
|
2
|
-
Accordion,
|
|
3
|
-
AccordionContent,
|
|
4
|
-
AccordionItem,
|
|
5
|
-
AccordionTrigger,
|
|
6
|
-
} from "forlogic-core"
|
|
7
|
-
|
|
8
|
-
<Accordion type="single" collapsible>
|
|
9
|
-
<AccordionItem value="item-1">
|
|
10
|
-
<AccordionTrigger>Is it accessible?</AccordionTrigger>
|
|
11
|
-
<AccordionContent>
|
|
12
|
-
Yes. It adheres to the WAI-ARIA design pattern.
|
|
13
|
-
</AccordionContent>
|
|
14
|
-
</AccordionItem>
|
|
15
|
-
</Accordion>`,examples:[{title:"Multiple Items Open",description:"Permite que múltiplos itens sejam abertos ao mesmo tempo",preview:e.jsxs(H,{type:"multiple",className:"w-full max-w-md",children:[e.jsxs(b,{value:"item-1",children:[e.jsx(C,{children:"Section 1"}),e.jsx(A,{children:"Content for section 1"})]}),e.jsxs(b,{value:"item-2",children:[e.jsx(C,{children:"Section 2"}),e.jsx(A,{children:"Content for section 2"})]})]}),code:`<Accordion type="multiple">
|
|
16
|
-
<AccordionItem value="item-1">
|
|
17
|
-
<AccordionTrigger>Section 1</AccordionTrigger>
|
|
18
|
-
<AccordionContent>Content for section 1</AccordionContent>
|
|
19
|
-
</AccordionItem>
|
|
20
|
-
</Accordion>`},{title:"Collapsible",description:"Componente simples para expandir/colapsar um único item",preview:e.jsx(Oe,{}),code:`import {
|
|
21
|
-
Collapsible,
|
|
22
|
-
CollapsibleContent,
|
|
23
|
-
CollapsibleTrigger,
|
|
24
|
-
} from "forlogic-core"
|
|
25
|
-
|
|
26
|
-
<Collapsible>
|
|
27
|
-
<CollapsibleTrigger>Toggle</CollapsibleTrigger>
|
|
28
|
-
<CollapsibleContent>
|
|
29
|
-
Content goes here
|
|
30
|
-
</CollapsibleContent>
|
|
31
|
-
</Collapsible>`}],props:[{name:"type",type:'"single" | "multiple"',default:"-",description:"Accordion: Determina se um ou múltiplos itens podem ser abertos."},{name:"collapsible",type:"boolean",default:"false",description:'Accordion: Quando type é "single", permite fechar o item aberto.'},{name:"defaultValue",type:"string | string[]",default:"-",description:"O(s) valor(es) ativo(s) padrão."},{name:"value",type:"string | string[]",default:"-",description:"O(s) valor(es) ativo(s) controlado(s)."},{name:"open",type:"boolean",default:"-",description:"Collapsible: O estado aberto controlado."},{name:"defaultOpen",type:"boolean",default:"false",description:"Collapsible: O estado aberto padrão."},{name:"onOpenChange",type:"(open: boolean) => void",default:"-",description:"Collapsible: Manipulador quando o estado muda."}],accessibility:["Acessível por teclado - Espaço ou Enter para alternar","Teclas de seta para navegar entre itens do accordion","Suporte ARIA completo com roles e estados adequados","Gerenciamento de foco e indicadores de foco visíveis"],notes:["**Accordion** é ideal para FAQs e listas de perguntas frequentes","**Collapsible** é melhor para um único elemento expansível","Ambos suportam animações suaves de abertura/fechamento"]})}export{ke as AccordionDoc};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import{j as e,x as s,am as n,ak as a,al as i,aV as t,an as r,ao as o,aW as c,aX as d}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import{T as u}from"./trash-DTWQwpwA.js";import"./ExampleCard-DuLrb3t-.js";function w(){return e.jsx(l,{title:"Action Button",description:"Botão compacto otimizado para ações em linhas de tabela e menus dropdown. OBRIGATÓRIO para todas as ações em tabelas CRUD.",component:e.jsxs("div",{className:"w-full space-y-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium mb-2",children:"✅ Uso Correto - ActionButton"}),e.jsxs(a,{children:[e.jsx(i,{asChild:!0,children:e.jsx(t,{})}),e.jsxs(r,{align:"end",children:[e.jsxs(o,{onClick:()=>alert("Editar"),children:[e.jsx(c,{className:"mr-2 h-4 w-4"}),"Editar"]}),e.jsxs(o,{onClick:()=>alert("Visualizar"),children:[e.jsx(d,{className:"mr-2 h-4 w-4"}),"Visualizar"]}),e.jsxs(o,{onClick:()=>alert("Excluir"),className:"text-destructive",children:[e.jsx(u,{className:"mr-2 h-4 w-4"}),"Excluir"]})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium mb-2",children:"ActionButton com ícone customizado"}),e.jsx(t,{children:e.jsx(c,{size:12})})]}),e.jsxs("div",{className:"border-t pt-4",children:[e.jsx("h3",{className:"text-sm font-medium mb-2 text-destructive",children:"❌ Errado - Não use Button genérico"}),e.jsxs("div",{className:"flex gap-2 opacity-50",children:[e.jsx(s,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:!0,children:e.jsx(n,{className:"h-4 w-4"})}),e.jsx("span",{className:"text-sm text-muted-foreground self-center",children:"← Nunca use isto em tabelas"})]})]})]}),usage:`import {
|
|
2
|
-
ActionButton,
|
|
3
|
-
DropdownMenu,
|
|
4
|
-
DropdownMenuTrigger,
|
|
5
|
-
DropdownMenuContent,
|
|
6
|
-
DropdownMenuItem
|
|
7
|
-
} from "forlogic-core"
|
|
8
|
-
import { Edit, Trash } from 'lucide-react'
|
|
9
|
-
|
|
10
|
-
// ✅ CORRETO: Uso padrão em tabelas CRUD
|
|
11
|
-
<DropdownMenu>
|
|
12
|
-
<DropdownMenuTrigger asChild>
|
|
13
|
-
<ActionButton />
|
|
14
|
-
</DropdownMenuTrigger>
|
|
15
|
-
<DropdownMenuContent align="end">
|
|
16
|
-
<DropdownMenuItem onClick={() => handleEdit(item)}>
|
|
17
|
-
<Edit className="mr-2 h-4 w-4" />
|
|
18
|
-
Editar
|
|
19
|
-
</DropdownMenuItem>
|
|
20
|
-
<DropdownMenuItem onClick={() => handleDelete(item)}>
|
|
21
|
-
<Trash className="mr-2 h-4 w-4" />
|
|
22
|
-
Excluir
|
|
23
|
-
</DropdownMenuItem>
|
|
24
|
-
</DropdownMenuContent>
|
|
25
|
-
</DropdownMenu>
|
|
26
|
-
|
|
27
|
-
// ✅ CORRETO: Com ícone customizado
|
|
28
|
-
<ActionButton>
|
|
29
|
-
<Edit size={12} />
|
|
30
|
-
</ActionButton>`,examples:[{title:"❌ Errado - Não use Button genérico",preview:e.jsxs("div",{className:"flex gap-2 opacity-50",children:[e.jsx(s,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:!0,children:e.jsx(n,{className:"h-4 w-4"})}),e.jsx("span",{className:"text-sm text-muted-foreground self-center",children:"← Nunca use isto"})]}),code:`// ❌ NUNCA faça isso em tabelas CRUD
|
|
31
|
-
<Button variant="ghost" size="icon" className="h-8 w-8">
|
|
32
|
-
<MoreHorizontal className="h-4 w-4" />
|
|
33
|
-
</Button>
|
|
34
|
-
|
|
35
|
-
// ❌ NUNCA faça isso
|
|
36
|
-
<Button variant="outline" size="sm">
|
|
37
|
-
<EllipsisVertical size={12} />
|
|
38
|
-
</Button>`},{title:"✅ Correto - Sempre use ActionButton",preview:e.jsxs(a,{children:[e.jsx(i,{asChild:!0,children:e.jsx(t,{})}),e.jsxs(r,{align:"end",children:[e.jsx(o,{children:"Editar"}),e.jsx(o,{children:"Excluir"})]})]}),code:`// ✅ SEMPRE use ActionButton em tabelas
|
|
39
|
-
<DropdownMenu>
|
|
40
|
-
<DropdownMenuTrigger asChild>
|
|
41
|
-
<ActionButton />
|
|
42
|
-
</DropdownMenuTrigger>
|
|
43
|
-
<DropdownMenuContent align="end">
|
|
44
|
-
<DropdownMenuItem>Editar</DropdownMenuItem>
|
|
45
|
-
<DropdownMenuItem>Excluir</DropdownMenuItem>
|
|
46
|
-
</DropdownMenuContent>
|
|
47
|
-
</DropdownMenu>`}],props:[{name:"children",type:"ReactNode",default:"<EllipsisVertical />",description:"Conteúdo customizado (ícone padrão: três pontos verticais)."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais."},{name:"onClick",type:"() => void",default:"-",description:"Handler de clique."}],accessibility:["Tamanho compacto (height: 28px, padding: 8px)","Ícone padrão: EllipsisVertical (três pontos verticais)",'variant="action" com estilo consistente do tema',"Perfeito para menus de ação em linhas de tabela"],notes:["⚠️ OBRIGATÓRIO: Use ActionButton para TODAS as ações em linhas de tabela CRUD",'❌ PROIBIDO: Usar Button variant="ghost" ou variant="icon" para ações de tabela',"O ActionButton garante consistência visual e acessibilidade em todo o sistema","Para ações padrão (editar/excluir), considere usar TableRowActions que já encapsula tudo","O ícone padrão é EllipsisVertical (não MoreHorizontal) para manter consistência"]})}export{w as ActionButtonDoc};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import{r as C,j as e,o as P,b7 as G,J as N,K as T,N as I,O as E,Q as R,R as k,V as M,M as V,E as Ie,G as Ee,H as Re,I as ke,X as Me,x as S,ac as ee,ak as O,al as B,aV as U,an as $,ao as w,P as J,B as Le,a3 as ze,as as Y,dp as Fe,aq as Oe,dh as Be,dC as $e,a5 as Ve,a6 as qe,a7 as z,aa as F,Y as b}from"./index-DkiftrvI.js";import{C as Ue}from"./ComponentDocTemplate-CQbBhfvZ.js";import{L as _e}from"./loading-state-Cb5_t5uE.js";import{D as X}from"./date-picker-BW3eGOe_.js";import{S as He,P as Ke}from"./smartphone-BSNR60L7.js";import"./ExampleCard-DuLrb3t-.js";var r=(s=>(s[s.waitingStart=1]="waitingStart",s[s.running=2]="running",s[s.effectivenessCheck=3]="effectivenessCheck",s[s.done=4]="done",s[s.suspended=5]="suspended",s[s.canceled=6]="canceled",s))(r||{}),q=(s=>(s[s.low=0]="low",s[s.medium=1]="medium",s[s.high=2]="high",s))(q||{}),A=(s=>(s.uploading="uploading",s.waiting="waiting",s.done="done",s.error="error",s.canceled="canceled",s.duplicateItem="duplicateItem",s))(A||{});const Ge={[r.waitingStart]:"#D6D6D6",[r.running]:"#DAE9F4",[r.effectivenessCheck]:"#1B75BB29",[r.done]:"#DDEECA",[r.suspended]:"#FFF2D6",[r.canceled]:"#F4433629"},Je={[r.waitingStart]:"#666666",[r.running]:"#1B75BB",[r.effectivenessCheck]:"#1B75BB",[r.done]:"#4CAF50",[r.suspended]:"#FF9800",[r.canceled]:"#F44336"};r.waitingStart+"",r.running+"",r.effectivenessCheck+"",r.done+"",r.suspended+"",r.canceled+"";const se={[r.waitingStart]:"Aguardando início",[r.running]:"Em andamento",[r.effectivenessCheck]:"Verificação de eficácia",[r.done]:"Concluída",[r.suspended]:"Suspensa",[r.canceled]:"Cancelada"},We=[{id:"immediate",label:"Imediata"},{id:"corrective",label:"Corretiva"},{id:"preventive",label:"Preventiva"},{id:"improvement",label:"Oportunidade de Melhoria"},{id:"standardization",label:"Padronização"}],Qe=[{id:q.low,label:"Baixa",color:"#4CAF50"},{id:q.medium,label:"Média",color:"#FF9800"},{id:q.high,label:"Alta",color:"#F44336"}],Ye=[r.done,r.canceled],Xe=[r.waitingStart,r.running,r.effectivenessCheck,r.suspended];function Ze(s){const{actionPlan:a,isNew:t=!1,config:l,onSave:u,onCancel:i,onDelete:p,onChangeStatus:g}=s,[h,o]=C.useState({formData:a||{},isLoading:s.isLoading||!1,isSaving:!1,activeTab:"general",isFormDisabled:!1});C.useEffect(()=>{a&&o(j=>({...j,formData:a,isFormDisabled:l?.disableFields||Ye.includes(a.statusId)}))},[a,l?.disableFields]),C.useEffect(()=>{o(j=>({...j,isLoading:s.isLoading||!1}))},[s.isLoading]);const v=C.useCallback((j,x)=>{o(y=>({...y,formData:{...y.formData,[j]:x}}))},[]),d=C.useCallback(j=>{o(x=>({...x,activeTab:j}))},[]),c=C.useCallback(async()=>{if(u){o(j=>({...j,isSaving:!0}));try{await u(h.formData)}finally{o(j=>({...j,isSaving:!1}))}}},[u,h.formData]),f=C.useCallback(async j=>{if(!(!g||!h.formData.id)){o(x=>({...x,isLoading:!0}));try{await g(h.formData.id,j)}finally{o(x=>({...x,isLoading:!1}))}}},[g,h.formData.id]),n=C.useCallback(async()=>{if(!(!p||!h.formData.id)){o(j=>({...j,isLoading:!0}));try{await p(h.formData.id)}finally{o(j=>({...j,isLoading:!1}))}}},[p,h.formData.id]);return{formData:h.formData,isLoading:h.isLoading,isSaving:h.isSaving,activeTab:h.activeTab,isFormDisabled:h.isFormDisabled,updateField:v,setActiveTab:d,save:c,changeStatus:f,remove:n,cancel:i}}function W({status:s,labels:a,className:t}){const l=a?.[s]||se[s]||"",u=Ge[s]||"#D6D6D6",i=Je[s]||"#666666";return e.jsx("span",{className:P("inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",t),style:{backgroundColor:u,color:i},children:l})}function es({formData:s,updateField:a,disabled:t=!1,users:l=[],places:u=[],actionTypes:i,causes:p=[],parentActions:g=[],config:h}){const o=h?.requiredFields,v=i||We,d=n=>{if(h?.hiddenFields?.includes(n))return!1;if(h?.visibleFields&&h.visibleFields.length>0)return h.visibleFields.includes(n);const j=`${n}Visible`;return o&&j in o?o[j]!==!1:!0},c=n=>o?!!o[n]:n==="name",f=G.useMemo(()=>{if(s.startDate&&s.endDate){const n=new Date(s.startDate),x=new Date(s.endDate).getTime()-n.getTime();return Math.max(0,Math.ceil(x/(1e3*60*60*24)))}return s.duration||0},[s.startDate,s.endDate,s.duration]);return e.jsxs("div",{className:"space-y-6 p-1",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("name")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Nome"}),e.jsx(T,{value:s.name||"",onChange:n=>a("name",n.target.value),maxLength:500,disabled:t,placeholder:"Nome do plano de ação"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[d("responsibleWho")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("responsibleWho")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Responsável"}),e.jsxs(I,{value:s.responsibleId||"",onValueChange:n=>a("responsibleId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione o responsável"})}),e.jsx(k,{children:l.map(n=>e.jsx(M,{value:n.id,children:n.name},n.id))})]})]}),d("checkerWho")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("checkerWho")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Verificador"}),e.jsxs(I,{value:s.checkerId||"",onValueChange:n=>a("checkerId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione o verificador"})}),e.jsx(k,{children:l.map(n=>e.jsx(M,{value:n.id,children:n.name},n.id))})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[d("place")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("place")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Local"}),e.jsxs(I,{value:s.placeId||"",onValueChange:n=>a("placeId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione o local"})}),e.jsx(k,{children:ae(u).map(n=>e.jsx(M,{value:n.id,children:n.name},n.id))})]})]}),d("planType")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("planType")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Tipo de Ação"}),e.jsxs(I,{value:s.typeId||"",onValueChange:n=>a("typeId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione o tipo"})}),e.jsx(k,{children:v.map(n=>e.jsx(M,{value:n.id,children:n.label},n.id))})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[d("priority")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("priority")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Prioridade"}),e.jsxs(I,{value:s.priorityType?.toString()||"",onValueChange:n=>a("priorityType",Number(n)),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione a prioridade"})}),e.jsx(k,{children:Qe.map(n=>e.jsx(M,{value:n.id.toString(),children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"h-2 w-2 rounded-full",style:{backgroundColor:n.color}}),n.label]})},n.id))})]})]}),g.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Pertence a"}),e.jsxs(I,{value:s.parentId||"",onValueChange:n=>a("parentId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione a ação pai"})}),e.jsx(k,{children:g.map(n=>e.jsx(M,{value:n.id,children:n.label},n.id))})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[d("startDate")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("startDate")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Data de Início"}),e.jsx(X,{date:s.startDate?new Date(s.startDate):void 0,onDateChange:n=>a("startDate",n||null),disabled:t,placeholder:"Selecione a data"})]}),d("endDate")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("endDate")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Data de Término"}),e.jsx(X,{date:s.endDate?new Date(s.endDate):void 0,onDateChange:n=>a("endDate",n||null),disabled:t,placeholder:"Selecione a data",disabledDates:s.startDate?n=>n<new Date(s.startDate):void 0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Duração (dias)"}),e.jsx(T,{type:"number",value:f,disabled:!0,className:"bg-muted"})]})]}),d("estimatedCost")&&e.jsxs("div",{className:"space-y-2 max-w-xs",children:[e.jsx(N,{className:P(c("estimatedCost")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Custo Estimado"}),e.jsxs("div",{className:"relative",children:[e.jsx("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground text-sm",children:"R$"}),e.jsx(T,{type:"number",min:0,step:.01,value:s.estimatedCost||"",onChange:n=>a("estimatedCost",Number(n.target.value)),disabled:t,className:"pl-9",placeholder:"0,00"})]})]}),d("cause")&&p.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Causa"}),e.jsxs(I,{value:s.causeId||"",onValueChange:n=>a("causeId",n),disabled:t,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione a causa"})}),e.jsx(k,{children:p.map(n=>e.jsx(M,{value:n.id,children:n.label},n.id))})]})]}),d("description")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("description")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Descrição"}),e.jsx(V,{value:s.description||"",onChange:n=>a("description",n.target.value),maxLength:4e3,disabled:t,rows:4,placeholder:"Descreva o plano de ação"})]}),d("justification")&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{className:P(c("justification")&&"after:content-['*'] after:ml-0.5 after:text-destructive"),children:"Justificativa"}),e.jsx(V,{value:s.justification||"",onChange:n=>a("justification",n.target.value),maxLength:4e3,disabled:t,rows:4,placeholder:"Justificativa do plano de ação"})]})]})}function ae(s,a=0){const t=[];for(const l of s)t.push({...l,depth:a}),l.children?.length&&t.push(...ae(l.children,a+1));return t}function ss(s){const{progress:a,onReportProgress:t,onEditProgress:l,onDeleteProgress:u}=s,[i,p]=C.useState(!1),[g,h]=C.useState(null),o=a?Xe.includes(a.status):!1,v=C.useCallback(async f=>{if(!(!t||!a)){p(!0);try{const n=f.percentProgress===100;await t({id:a.id,...f,conclude:n})}finally{p(!1)}}},[t,a]),d=C.useCallback(async f=>{if(l){p(!0);try{await l(f)}finally{p(!1),h(null)}}},[l]),c=C.useCallback(async f=>{if(u){p(!0);try{await u(f)}finally{p(!1)}}},[u]);return{progress:a,canReportProgress:o,isSubmitting:i,editingReport:g,setEditingReport:h,reportProgress:v,editProgress:d,deleteProgress:c}}function _(s){if(!s)return"";let a=(s||"").trim();if(!a)return"00:00";if(a.includes(":")){const i=a.split(":");if(i.length>=2){const p=i[0].replace(/\D/g,""),g=i[1].replace(/\D/g,"");let h=parseInt(p)||0,o=parseInt(g)||0;return h+=Math.floor(o/60),o%=60,`${h.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`}}if(a=a.replace(/\D/g,""),!a)return"00:00";const t=a.length;let l=0,u=0;return t===4?(l=parseInt(a.substring(0,2))||0,u=parseInt(a.substring(2,4))||0,l+=Math.floor(u/60),u%=60):(l=parseInt(a)||0,u=0),`${l.toString().padStart(2,"0")}:${u.toString().padStart(2,"0")}`}function te(s){if(s==null)return"00:00";const a=String(s).replace(/\D/g,"");if(a.length<3){let t=parseInt(a)||0;const l=Math.floor(t/60);return t%=60,`${l.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}else{const t=a.slice(-2),l=a.slice(0,-2);let u=parseInt(l)||0,i=parseInt(t)||0;return u+=Math.floor(i/60),i%=60,`${u.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`}}function ne(s){return s===100?"#84c148":s>0?"#1b75bb":""}function as({open:s,onOpenChange:a,report:t,onSave:l,isSubmitting:u=!1}){const[i,p]=C.useState(t?.percentProgress||0),[g,h]=C.useState(t?.timeProgress||""),[o,v]=C.useState(t?.comments||"");G.useEffect(()=>{t&&(p(t.percentProgress),h(t.timeProgress||""),v(t.comments||""))},[t]);const d=()=>{t&&l({...t,percentProgress:i,timeProgress:_(g)||"00:00",comments:o})};return e.jsx(Ie,{open:s,onOpenChange:a,children:e.jsxs(Ee,{className:"sm:max-w-md",children:[e.jsx(Re,{children:e.jsx(ke,{children:"Editar Progresso"})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Progresso (%)"}),e.jsx(T,{type:"number",min:0,max:100,value:i,onChange:c=>p(Number(c.target.value))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Tempo gasto (HH:MM)"}),e.jsx(T,{value:g,onChange:c=>h(c.target.value),onBlur:()=>h(_(g)||""),placeholder:"00:00"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Comentários"}),e.jsx(V,{value:o,onChange:c=>v(c.target.value),rows:3,maxLength:4e3})]})]}),e.jsxs(Me,{children:[e.jsx(S,{variant:"outline",onClick:()=>a(!1),disabled:u,children:"Cancelar"}),e.jsx(S,{onClick:d,disabled:u,children:u?"Salvando...":"Salvar"})]})]})})}function ts(s){const{progress:a,canReportProgress:t,isSubmitting:l,editingReport:u,setEditingReport:i,reportProgress:p,editProgress:g,deleteProgress:h}=ss(s),[o,v]=C.useState(""),[d,c]=C.useState(""),[f,n]=C.useState("");if(!a)return e.jsx("div",{className:"flex items-center justify-center py-12 text-muted-foreground",children:"Sem dados de progresso disponíveis"});const j=ne(a.percentProgress),x=async()=>{const m=Number(o);!m&&m!==0||(await p({percentProgress:m,timeProgress:_(d)||"00:00",comments:f}),v(""),c(""),n(""))},y=()=>{v(""),c(""),n("")},D=!o,L=!o&&!d&&!f;return e.jsxs("div",{className:"space-y-6 p-1",children:[e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"font-medium",children:"Progresso geral"}),e.jsxs("span",{className:"font-semibold",style:{color:j||void 0},children:[a.percentProgress,"%"]})]}),e.jsx(ee,{value:a.percentProgress,className:"h-3"}),a.timeProgress&&e.jsxs("div",{className:"text-xs text-muted-foreground",children:["Tempo total: ",te(a.timeProgress)]})]}),t&&e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-4",children:[e.jsx("h4",{className:"text-sm font-medium",children:"Reportar progresso"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Progresso (%)"}),e.jsx(T,{type:"number",min:0,max:100,value:o,onChange:m=>v(m.target.value),placeholder:"0"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Tempo gasto (HH:MM)"}),e.jsx(T,{value:d,onChange:m=>c(m.target.value),onBlur:()=>c(_(d)||""),placeholder:"00:00"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Comentários"}),e.jsx(V,{value:f,onChange:m=>n(m.target.value),rows:3,maxLength:4e3,placeholder:"Adicione um comentário sobre o progresso"})]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(S,{variant:"outline",size:"sm",onClick:y,disabled:L||l,children:"Limpar"}),e.jsx(S,{size:"sm",onClick:x,disabled:D||l,children:l?"Reportando...":"Reportar"})]})]}),a.reports.length>0&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-sm font-medium",children:"Histórico de reportes"}),e.jsx("div",{className:"space-y-2",children:a.reports.map(m=>e.jsx(ns,{report:m,onEdit:()=>i(m),onDelete:()=>h(m.id),disabled:!t},m.id))})]}),e.jsx(as,{open:!!u,onOpenChange:m=>!m&&i(null),report:u,onSave:g,isSubmitting:l})]})}function ns({report:s,onEdit:a,onDelete:t,disabled:l}){const u=s.date?new Date(s.date):null,i=ne(s.percentProgress);return e.jsxs("div",{className:"flex items-start gap-3 rounded-lg border bg-card p-3",children:[e.jsx("div",{className:"flex-shrink-0 h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs font-medium text-muted-foreground",children:s.userName?.charAt(0)?.toUpperCase()||"?"}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx("span",{className:"font-medium truncate",children:s.userName}),u&&e.jsx("span",{className:"text-xs text-muted-foreground",children:u.toLocaleDateString("pt-BR")})]}),e.jsxs("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[e.jsxs("span",{style:{color:i||void 0},className:"font-semibold",children:[s.percentProgress,"%"]}),s.timeProgress&&e.jsxs("span",{children:["Tempo: ",te(s.timeProgress)]})]}),s.comments&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:s.comments})]}),!l&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(U,{})}),e.jsxs($,{align:"end",children:[e.jsx(w,{onClick:a,children:"Editar"}),e.jsx(w,{className:"text-destructive",onClick:t,children:"Excluir"})]})]})]})}function is({predecessors:s=[],availablePredecessors:a=[],onAdd:t,onRemove:l,disabled:u=!1}){const[i,p]=G.useState(""),g=()=>{!i||!t||(t(i),p(""))},h=a.filter(o=>!s.some(v=>v.predecessorId===o.id));return e.jsxs("div",{className:"space-y-6 p-1",children:[!u&&h.length>0&&e.jsxs("div",{className:"flex items-end gap-3",children:[e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx(N,{children:"Adicionar predecessor"}),e.jsxs(I,{value:i,onValueChange:p,children:[e.jsx(E,{children:e.jsx(R,{placeholder:"Selecione uma ação"})}),e.jsx(k,{children:h.map(o=>e.jsx(M,{value:o.id,children:o.label},o.id))})]})]}),e.jsxs(S,{size:"sm",onClick:g,disabled:!i,children:[e.jsx(J,{className:"h-4 w-4 mr-1"}),"Adicionar"]})]}),s.length>0?e.jsx("div",{className:"space-y-2",children:s.map(o=>e.jsxs("div",{className:"flex items-center justify-between rounded-lg border bg-card p-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[o.predecessorCode&&e.jsx("span",{className:"text-xs text-muted-foreground font-mono",children:o.predecessorCode}),e.jsx("span",{className:"text-sm font-medium",children:o.predecessorName}),o.predecessorStatus!=null&&e.jsx(W,{status:o.predecessorStatus})]}),!u&&l&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(U,{})}),e.jsx($,{align:"end",children:e.jsx(w,{className:"text-destructive",onClick:()=>l(o.predecessorId),children:"Remover"})})]})]},o.id))}):e.jsx("div",{className:"flex items-center justify-center py-8 text-sm text-muted-foreground",children:"Nenhum predecessor adicionado"})]})}function rs({costs:s=[],onAdd:a,onEdit:t,onDelete:l,disabled:u=!1}){const[i,p]=C.useState(""),[g,h]=C.useState(""),o=s.reduce((d,c)=>d+(c.value||0),0),v=()=>{!i||!g||!a||(a({description:i,value:Number(g),date:new Date().toISOString()}),p(""),h(""))};return e.jsxs("div",{className:"space-y-6 p-1",children:[e.jsxs("div",{className:"rounded-lg border bg-card p-4 flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:"Custo total realizado"}),e.jsxs("span",{className:"text-lg font-semibold text-foreground",children:["R$ ",o.toLocaleString("pt-BR",{minimumFractionDigits:2,maximumFractionDigits:2})]})]}),!u&&a&&e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-4",children:[e.jsx("h4",{className:"text-sm font-medium",children:"Adicionar custo"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Descrição"}),e.jsx(T,{value:i,onChange:d=>p(d.target.value),placeholder:"Descrição do custo"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{children:"Valor (R$)"}),e.jsx(T,{type:"number",min:0,step:.01,value:g,onChange:d=>h(d.target.value),placeholder:"0,00"})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(S,{size:"sm",onClick:v,disabled:!i||!g,children:[e.jsx(J,{className:"h-4 w-4 mr-1"}),"Adicionar"]})})]}),s.length>0?e.jsx("div",{className:"space-y-2",children:s.map(d=>e.jsxs("div",{className:"flex items-center justify-between rounded-lg border bg-card p-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:d.description}),d.date&&e.jsx("p",{className:"text-xs text-muted-foreground",children:new Date(d.date).toLocaleDateString("pt-BR")})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm font-semibold whitespace-nowrap",children:["R$ ",d.value.toLocaleString("pt-BR",{minimumFractionDigits:2,maximumFractionDigits:2})]}),!u&&(t||l)&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(U,{})}),e.jsxs($,{align:"end",children:[t&&e.jsx(w,{onClick:()=>t(d),children:"Editar"}),l&&e.jsx(w,{className:"text-destructive",onClick:()=>l(d.id),children:"Excluir"})]})]})]})]},d.id))}):e.jsx("div",{className:"flex items-center justify-center py-8 text-sm text-muted-foreground",children:"Nenhum custo registrado"})]})}function os({comments:s=[],currentUserId:a,onAdd:t,onEdit:l,onDelete:u,disabled:i=!1,maxLength:p=4e3}){const[g,h]=C.useState(""),[o,v]=C.useState(!1),[d,c]=C.useState(null),[f,n]=C.useState(""),j=async()=>{if(!(!g.trim()||!t)){v(!0);try{await t(g),h("")}finally{v(!1)}}},x=async m=>{if(!(!f.trim()||!l)){v(!0);try{await l({...m,text:f,stringText:f}),c(null),n("")}finally{v(!1)}}},y=async m=>{if(u){v(!0);try{await u(m)}finally{v(!1)}}},D=m=>{c(m.id),n(m.stringText||m.text)},L=()=>{c(null),n("")};return e.jsxs("div",{className:"space-y-6 p-1",children:[!i&&t&&e.jsxs("div",{className:"space-y-3",children:[e.jsx(V,{value:g,onChange:m=>h(m.target.value),placeholder:"Adicionar comentário...",maxLength:p,rows:3}),e.jsxs("div",{className:"flex items-center justify-between",children:[p&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[g.length,"/",p]}),e.jsxs("div",{className:"flex gap-2 ml-auto",children:[e.jsx(S,{variant:"outline",size:"sm",onClick:()=>h(""),disabled:!g||o,children:"Limpar"}),e.jsx(S,{size:"sm",onClick:j,disabled:!g.trim()||o,children:o?"Enviando...":"Comentar"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[s.length>0?e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"text-sm font-medium",children:"Comentários"}),e.jsx(Le,{variant:"info",className:"text-[10px] px-1.5 py-0",children:s.length})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(ze,{className:"h-8 w-8 mb-2 opacity-50"}),e.jsx("p",{className:"text-sm",children:"Nenhum comentário adicionado"})]}),s.map(m=>e.jsxs("div",{className:"flex gap-3 rounded-lg border bg-card p-3",children:[e.jsx("div",{className:"flex-shrink-0 h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs font-medium text-muted-foreground overflow-hidden",children:m.userPhotoUrl?e.jsx("img",{src:m.userPhotoUrl,alt:m.userName,className:"h-full w-full object-cover"}):m.userName?.charAt(0)?.toUpperCase()||"?"}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx("span",{className:"font-medium truncate",children:m.userName}),m.userEmail&&e.jsx("span",{className:"text-xs text-muted-foreground truncate",children:m.userEmail}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:ls(m.dateEdited||m.dateCreation)}),m.dateEdited&&e.jsx("span",{className:"text-xs text-muted-foreground italic",children:"editado"})]}),d===m.id?e.jsxs("div",{className:"space-y-2",children:[e.jsx(V,{value:f,onChange:H=>n(H.target.value),maxLength:p,rows:3}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(S,{variant:"outline",size:"sm",onClick:L,disabled:o,children:"Cancelar"}),e.jsx(S,{size:"sm",onClick:()=>x(m),disabled:!f.trim()||o,children:o?"Salvando...":"Salvar"})]})]}):e.jsx("p",{className:"text-sm text-muted-foreground whitespace-pre-wrap",children:m.stringText||m.text})]}),!i&&a===m.userId&&d!==m.id&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(U,{})}),e.jsxs($,{align:"end",children:[l&&e.jsx(w,{onClick:()=>D(m),children:"Editar"}),u&&e.jsx(w,{className:"text-destructive",onClick:()=>y(m.id),children:"Excluir"})]})]})]},m.id))]})]})}function ls(s){if(!s)return"";const a=new Date(s);return`${a.toLocaleDateString("pt-BR")} ${a.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`}function cs({history:s=[],isLoading:a=!1}){return a?e.jsx("div",{className:"flex items-center justify-center py-12 text-muted-foreground",children:"Carregando histórico..."}):s.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(Y,{className:"h-8 w-8 mb-2 opacity-50"}),e.jsx("p",{className:"text-sm",children:"Nenhum registro no histórico"})]}):e.jsx("div",{className:"p-1",children:e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-4 top-0 bottom-0 w-px bg-border"}),e.jsx("div",{className:"space-y-0",children:s.map((t,l)=>e.jsxs("div",{className:"relative flex gap-4 pb-6 last:pb-0",children:[e.jsx("div",{className:"relative z-10 flex-shrink-0 h-8 w-8 rounded-full bg-primary/10 border-2 border-primary/30 flex items-center justify-center",children:t.icon?e.jsx("span",{className:"text-xs text-primary",children:t.icon}):e.jsx("div",{className:"h-2 w-2 rounded-full bg-primary"})}),e.jsxs("div",{className:"flex-1 min-w-0 rounded-lg border bg-card p-3 space-y-2",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium",children:t.translateEvent||t.eventName}),t.eventDescription&&e.jsx("p",{className:"text-xs text-muted-foreground",children:t.eventDescription})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex-shrink-0 h-6 w-6 rounded-full bg-muted overflow-hidden flex items-center justify-center text-[10px] font-medium text-muted-foreground",children:t.userPhotoUrl?e.jsx("img",{src:t.userPhotoUrl,alt:t.userName,className:"h-full w-full object-cover"}):t.userName?.charAt(0)?.toUpperCase()||"?"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("span",{className:"text-xs font-medium truncate block",children:t.userName}),t.userEmail&&e.jsx("span",{className:"text-[10px] text-muted-foreground truncate block",children:t.userEmail})]})]}),e.jsxs("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Fe,{className:"h-3 w-3"}),e.jsx("span",{children:ds(t.date)})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Y,{className:"h-3 w-3"}),e.jsx("span",{children:ms(t.date)})]}),t.isMobileRequest&&e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(He,{className:"h-3 w-3"}),e.jsx("span",{children:"Via app"})]})]})]})]},t.id))})]})})}function ds(s){return new Date(s).toLocaleDateString("pt-BR")}function ms(s){return new Date(s).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}function us({attachments:s=[],onUpload:a,onDelete:t,onRename:l,onDownload:u,onView:i,disabled:p=!1}){const g=C.useRef(null),[h,o]=C.useState(null),[v,d]=C.useState(""),c=x=>{const y=x.target.files;if(!(!y||!a)){for(let D=0;D<y.length;D++){const L=y.item(D);L&&a(L)}g.current&&(g.current.value="")}},f=x=>{const y=x.name.replace(x.extension,"");o(x.id),d(y)},n=async x=>{!v.trim()||!l||(await l(x.id,v),o(null),d(""))},j=()=>{o(null),d("")};return e.jsxs("div",{className:"space-y-4 p-1",children:[!p&&a&&e.jsxs(e.Fragment,{children:[e.jsx("input",{ref:g,type:"file",multiple:!0,className:"hidden",onChange:c}),e.jsxs(S,{size:"sm",onClick:()=>g.current?.click(),children:[e.jsx(J,{className:"h-4 w-4 mr-1"}),"Adicionar anexo"]})]}),s.length>0?e.jsx("div",{className:"space-y-2",children:s.map(x=>e.jsxs("div",{className:P("flex items-center gap-3 rounded-lg border bg-card p-3",x.status===A.error&&"border-destructive/50 bg-destructive/5",x.status===A.canceled&&"opacity-50"),children:[e.jsx("div",{className:"flex-shrink-0 h-9 w-9 rounded bg-muted flex items-center justify-center",children:e.jsx("span",{className:"text-[10px] font-bold uppercase text-muted-foreground",children:x.extension.replace(".","").substring(0,4)})}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-1",children:[h===x.id?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{className:"flex-1 text-sm border rounded px-2 py-1 bg-background",value:v,onChange:y=>d(y.target.value),onKeyDown:y=>{y.key==="Enter"&&n(x),y.key==="Escape"&&j()},autoFocus:!0}),e.jsx(S,{size:"sm",variant:"outline",onClick:j,children:"Cancelar"}),e.jsx(S,{size:"sm",onClick:()=>n(x),children:"Salvar"})]}):e.jsx("button",{type:"button",className:"text-sm font-medium truncate block text-left hover:underline cursor-pointer",onClick:()=>i?.(x.id),children:x.name}),(x.status===A.uploading||x.status===A.waiting)&&e.jsx(ee,{value:x.progress||0,className:"h-1.5"}),x.status===A.error&&e.jsx("p",{className:"text-xs text-destructive",children:"Erro ao enviar arquivo"}),x.status===A.duplicateItem&&e.jsx("p",{className:"text-xs text-warning",children:"Arquivo duplicado"}),x.status===A.canceled&&e.jsx("p",{className:"text-xs text-muted-foreground",children:"Upload cancelado"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[x.status===A.done&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:ps(x.size)}),e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(U,{})}),e.jsxs($,{align:"end",children:[l&&!p&&e.jsx(w,{onClick:()=>f(x),children:"Renomear"}),i&&e.jsx(w,{onClick:()=>i(x.id),children:"Visualizar"}),u&&e.jsx(w,{onClick:()=>u(x.id),children:"Download"}),t&&!p&&e.jsxs(e.Fragment,{children:[e.jsx(Oe,{}),e.jsx(w,{className:"text-destructive",onClick:()=>t(x.id),children:"Excluir"})]})]})]})]}),x.status===A.uploading&&e.jsx(S,{variant:"outline",size:"sm",onClick:()=>t?.(x.id),children:"Cancelar"})]})]},x.id))}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(Ke,{className:"h-8 w-8 mb-2 opacity-50"}),e.jsx("p",{className:"text-sm",children:"Nenhum anexo adicionado"})]})]})}function ps(s){if(s===0)return"0 B";const a=1024,t=["B","KB","MB","GB"],l=Math.floor(Math.log(s)/Math.log(a));return`${parseFloat((s/Math.pow(a,l)).toFixed(1))} ${t[l]}`}function ie(s){const{formData:a,isLoading:t,isSaving:l,activeTab:u,isFormDisabled:i,updateField:p,setActiveTab:g,save:h,changeStatus:o,remove:v,cancel:d}=Ze(s),{isNew:c=!1,config:f,users:n,places:j,actionTypes:x,causes:y,parentActions:D,progress:L,predecessors:m,availablePredecessors:H,costs:de,comments:me,history:ue,attachments:pe,attachmentsSlot:xe,commentsSlot:he,historySlot:ge,onAddPredecessor:fe,onRemovePredecessor:je,onAddCost:ve,onEditCost:Ce,onDeleteCost:Ne,onAddComment:be,onEditComment:ye,onDeleteComment:Se,onUploadAttachment:Pe,onDeleteAttachment:Ae,onRenameAttachment:we,onDownloadAttachment:De,onViewAttachment:Te}=s;if(t&&!a.id)return e.jsx(_e,{isLoading:!0,children:e.jsx("div",{})});const Q=xs(a.statusId);return e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between border-b bg-card px-6 py-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[d&&e.jsx(S,{variant:"ghost",size:"icon",onClick:d,children:e.jsx(Be,{className:"h-4 w-4"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-lg font-semibold",children:c?"Nova Ação":a.name||"Plano de Ação"}),!c&&a.statusId&&e.jsx(W,{status:a.statusId})]}),a.code&&e.jsx("p",{className:"text-xs text-muted-foreground font-mono",children:a.code})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!c&&Q.length>0&&!i&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(S,{variant:"outline",size:"sm",children:"Alterar Status"})}),e.jsx($,{align:"end",children:Q.map(K=>e.jsx(w,{onClick:()=>o(K),children:se[K]},K))})]}),!c&&s.onDelete&&e.jsxs(O,{children:[e.jsx(B,{asChild:!0,children:e.jsx(S,{variant:"ghost",size:"icon",children:e.jsx($e,{className:"h-4 w-4"})})}),e.jsx($,{align:"end",children:e.jsx(w,{className:"text-destructive",onClick:v,children:"Excluir"})})]})]})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:e.jsx("div",{className:"max-w-4xl mx-auto px-6 py-6",children:e.jsxs(Ve,{value:u,onValueChange:g,children:[e.jsxs(qe,{className:"mb-6",children:[e.jsx(z,{value:"general",children:"Geral"}),!c&&e.jsx(z,{value:"progress",children:"Progresso"}),!c&&f?.enablePredecessors&&e.jsx(z,{value:"predecessors",children:"Predecessores"}),!c&&f?.enableCosts&&e.jsx(z,{value:"costs",children:"Custos"}),!c&&f?.enableAttachments&&e.jsx(z,{value:"attachments",children:"Anexos"}),!c&&f?.enableComments&&e.jsx(z,{value:"comments",children:"Comentários"}),!c&&f?.enableHistory&&e.jsx(z,{value:"history",children:"Histórico"})]}),e.jsx(F,{value:"general",children:e.jsx(es,{formData:a,updateField:p,disabled:i,users:n,places:j,actionTypes:x,causes:y,parentActions:D,config:f})}),!c&&e.jsx(F,{value:"progress",children:e.jsx(ts,{...s})}),!c&&f?.enablePredecessors&&e.jsx(F,{value:"predecessors",children:e.jsx(is,{predecessors:m,availablePredecessors:H,onAdd:fe,onRemove:je,disabled:i})}),!c&&f?.enableCosts&&e.jsx(F,{value:"costs",children:e.jsx(rs,{costs:de,onAdd:ve,onEdit:Ce,onDelete:Ne,disabled:i})}),!c&&f?.enableAttachments&&e.jsx(F,{value:"attachments",children:xe||e.jsx(us,{attachments:pe,onUpload:Pe,onDelete:Ae,onRename:we,onDownload:De,onView:Te,disabled:i})}),!c&&f?.enableComments&&e.jsx(F,{value:"comments",children:he||e.jsx(os,{comments:me,onAdd:be,onEdit:ye,onDelete:Se,disabled:i})}),!c&&f?.enableHistory&&e.jsx(F,{value:"history",children:ge||e.jsx(cs,{history:ue})})]})})}),e.jsxs("div",{className:"flex items-center justify-end gap-3 border-t bg-card px-6 py-4",children:[d&&e.jsx(S,{variant:"outline",onClick:d,disabled:l,children:"Cancelar"}),e.jsx(S,{onClick:h,disabled:l||i,children:l?"Salvando...":"Salvar"})]})]})}function xs(s){return s?{[r.waitingStart]:[r.running,r.suspended,r.canceled],[r.running]:[r.effectivenessCheck,r.done,r.suspended,r.canceled],[r.effectivenessCheck]:[r.running,r.done,r.suspended,r.canceled],[r.done]:[r.running],[r.suspended]:[r.running,r.canceled],[r.canceled]:[r.waitingStart]}[s]||[]:[]}const re=[{id:"u1",name:"Maria Silva",email:"maria@example.com"},{id:"u2",name:"João Santos",email:"joao@example.com"},{id:"u3",name:"Ana Oliveira",email:"ana@example.com"},{id:"u4",name:"Carlos Pereira",email:"carlos@example.com"}],oe=[{id:"p1",name:"Matriz",children:[{id:"p1-1",name:"Qualidade",parentId:"p1"},{id:"p1-2",name:"Produção",parentId:"p1"}]},{id:"p2",name:"Filial São Paulo",children:[{id:"p2-1",name:"Engenharia",parentId:"p2"}]}],le=[{id:"corrective",label:"Corretiva"},{id:"preventive",label:"Preventiva"},{id:"improvement",label:"Oportunidade de Melhoria"},{id:"immediate",label:"Imediata"}],ce=[{id:"c1",label:"Falha de processo"},{id:"c2",label:"Falta de treinamento"},{id:"c3",label:"Material defeituoso"}],hs={id:"ap-001",code:"AC-2026-001",name:"Implementar controle de qualidade na linha de produção",responsibleId:"u1",responsibleName:"Maria Silva",checkerId:"u2",checkerName:"João Santos",placeId:"p1-1",placeName:"Qualidade",typeId:"corrective",typeName:"Corretiva",priorityType:q.high,startDate:"2026-03-01",endDate:"2026-04-15",duration:45,estimatedCost:15e3,causeId:"c1",causeName:"Falha de processo",description:"Implementar pontos de inspeção adicionais na linha de produção para reduzir defeitos em 30%.",justification:"Aumento de 15% nos defeitos detectados no último trimestre exige ação corretiva imediata.",statusId:r.running,percentProgress:45},gs={id:"ap-001",percentProgress:45,timeProgress:"2400",hasChildren:!1,idResponsibleUser:"u1",status:r.running,reports:[{id:"r1",percentProgress:20,timeProgress:"0800",userId:"u1",userName:"Maria Silva",date:"2026-03-10",comments:"Definição dos pontos de inspeção concluída."},{id:"r2",percentProgress:45,timeProgress:"1600",userId:"u1",userName:"Maria Silva",date:"2026-03-20",comments:"Treinamento da equipe de inspeção em andamento. 3 de 5 módulos concluídos."}]},fs=[{id:"pred-1",actionPlanId:"ap-001",predecessorId:"ap-000",predecessorName:"Levantamento de requisitos de qualidade",predecessorCode:"AC-2026-000",predecessorStatus:r.done,predecessorPercentProgress:100}],js=[{id:"cost-1",description:"Equipamento de medição",value:5200,date:"2026-03-05",userName:"Maria Silva"},{id:"cost-2",description:"Material de treinamento",value:800,date:"2026-03-12",userName:"João Santos"}],vs=[{id:"comment-1",text:"Precisamos priorizar a compra dos equipamentos de medição antes de iniciar a fase de implementação.",stringText:"Precisamos priorizar a compra dos equipamentos de medição antes de iniciar a fase de implementação.",userId:"u1",userName:"Maria Silva",userEmail:"maria@example.com",dateCreation:"2026-03-08T10:30:00"},{id:"comment-2",text:"Equipamentos já foram solicitados ao fornecedor. Previsão de entrega em 5 dias úteis.",stringText:"Equipamentos já foram solicitados ao fornecedor. Previsão de entrega em 5 dias úteis.",userId:"u2",userName:"João Santos",userEmail:"joao@example.com",dateCreation:"2026-03-09T14:15:00"},{id:"comment-3",text:"Treinamento da equipe será realizado na próxima semana. Confirmar disponibilidade de todos.",stringText:"Treinamento da equipe será realizado na próxima semana. Confirmar disponibilidade de todos.",userId:"u1",userName:"Maria Silva",userEmail:"maria@example.com",dateCreation:"2026-03-15T09:00:00",dateEdited:"2026-03-15T09:45:00"}],Cs=[{id:"h1",eventName:"create",translateEvent:"Plano de ação criado",eventDescription:"O plano de ação foi criado e está aguardando início.",icon:"📝",userName:"Maria Silva",userEmail:"maria@example.com",date:"2026-03-01T08:00:00"},{id:"h2",eventName:"status_change",translateEvent:'Status alterado para "Em andamento"',eventDescription:"O plano de ação foi iniciado.",icon:"▶️",userName:"Maria Silva",userEmail:"maria@example.com",date:"2026-03-05T09:30:00"},{id:"h3",eventName:"progress_report",translateEvent:"Progresso reportado: 20%",eventDescription:"Definição dos pontos de inspeção concluída.",icon:"📊",userName:"Maria Silva",userEmail:"maria@example.com",date:"2026-03-10T16:00:00"},{id:"h4",eventName:"progress_report",translateEvent:"Progresso reportado: 45%",eventDescription:"Treinamento da equipe em andamento.",icon:"📊",userName:"Maria Silva",userEmail:"maria@example.com",date:"2026-03-20T11:00:00",isMobileRequest:!0}],Ns=[{id:"att-1",name:"Relatório de inspeção Q1.pdf",extension:".pdf",size:2457600,status:A.done},{id:"att-2",name:"Planilha de custos.xlsx",extension:".xlsx",size:156e3,status:A.done},{id:"att-3",name:"Fotos da linha de produção.zip",extension:".zip",size:8745e3,status:A.done}];function bs(){const[s,a]=C.useState(hs),t=async i=>{await new Promise(p=>setTimeout(p,500)),a(p=>({...p,...i})),b.success("Plano de ação salvo com sucesso!")},l=async(i,p)=>{await new Promise(g=>setTimeout(g,300)),a(g=>({...g,statusId:p})),b.success("Status alterado com sucesso!")},u=async i=>{await new Promise(p=>setTimeout(p,300)),b.success(`Progresso reportado: ${i.percentProgress}%`)};return e.jsx("div",{className:"border rounded-lg overflow-hidden h-[700px]",children:e.jsx(ie,{actionPlan:s,config:{enablePredecessors:!0,enableCosts:!0,enableAttachments:!0,enableComments:!0,enableHistory:!0,hasComments:!0},users:re,places:oe,actionTypes:le,causes:ce,progress:gs,predecessors:fs,availablePredecessors:[{id:"ap-002",label:"AC-2026-002 - Auditoria interna"},{id:"ap-003",label:"AC-2026-003 - Revisão de procedimentos"}],costs:js,comments:vs,history:Cs,attachments:Ns,onSave:t,onCancel:()=>b.info("Navegação cancelada"),onDelete:async()=>b.success("Excluído"),onChangeStatus:l,onReportProgress:u,onEditProgress:async i=>b.success(`Reporte ${i.id} editado`),onDeleteProgress:async i=>b.success(`Reporte ${i} excluído`),onAddPredecessor:async i=>b.success(`Predecessor ${i} adicionado`),onRemovePredecessor:async i=>b.success(`Predecessor ${i} removido`),onAddCost:async i=>b.success(`Custo "${i.description}" adicionado`),onDeleteCost:async i=>b.success(`Custo ${i} excluído`),onAddComment:async i=>b.success("Comentário adicionado"),onEditComment:async i=>b.success(`Comentário ${i.id} editado`),onDeleteComment:async i=>b.success(`Comentário ${i} excluído`),onUploadAttachment:async i=>b.success(`Arquivo "${i.name}" enviado`),onDeleteAttachment:async i=>b.success(`Anexo ${i} excluído`),onRenameAttachment:async(i,p)=>b.success(`Anexo renomeado para "${p}"`),onDownloadAttachment:async i=>b.success(`Download do anexo ${i}`),onViewAttachment:async i=>b.success(`Visualizando anexo ${i}`)})})}function ys(){return e.jsx("div",{className:"border rounded-lg overflow-hidden h-[500px]",children:e.jsx(ie,{isNew:!0,config:{},users:re,places:oe,actionTypes:le,causes:ce,onSave:async s=>b.success(`Novo plano: ${s.name}`),onCancel:()=>b.info("Cancelado")})})}function Z(){const s=[r.waitingStart,r.running,r.effectivenessCheck,r.done,r.suspended,r.canceled];return e.jsx("div",{className:"flex flex-wrap gap-3",children:s.map(a=>e.jsx(W,{status:a},a))})}function Is(){return e.jsx(Ue,{title:"Action Plan",description:"Componente de página completa para gerenciar planos de ação. Inclui formulário com abas (Geral, Progresso, Predecessores, Custos, Comentários, Histórico, Anexos), mudança de status e reportes de progresso. As abas de Comentários, Histórico e Anexos são componentes internos portados das libs Angular (flc-comments, flc-history, flc-attachments) e são renderizados automaticamente quando habilitados via config.",component:e.jsx(Z,{}),usage:`import { ActionPlanPage, ETaskPlanStatus } from "forlogic-core"
|
|
2
|
-
|
|
3
|
-
<ActionPlanPage
|
|
4
|
-
actionPlan={actionPlan}
|
|
5
|
-
config={{
|
|
6
|
-
enablePredecessors: true,
|
|
7
|
-
enableCosts: true,
|
|
8
|
-
enableAttachments: true,
|
|
9
|
-
enableComments: true,
|
|
10
|
-
enableHistory: true,
|
|
11
|
-
}}
|
|
12
|
-
users={users}
|
|
13
|
-
places={places}
|
|
14
|
-
progress={progress}
|
|
15
|
-
comments={comments}
|
|
16
|
-
history={history}
|
|
17
|
-
attachments={attachments}
|
|
18
|
-
onSave={handleSave}
|
|
19
|
-
onCancel={() => navigate(-1)}
|
|
20
|
-
onChangeStatus={handleChangeStatus}
|
|
21
|
-
onReportProgress={handleReportProgress}
|
|
22
|
-
onAddComment={handleAddComment}
|
|
23
|
-
onUploadAttachment={handleUploadAttachment}
|
|
24
|
-
/>`,examples:[{title:"Plano de Ação Completo",description:"Exemplo interativo com todas as abas habilitadas (incluindo Comentários, Histórico e Anexos), dados mock e callbacks funcionais.",preview:e.jsx(bs,{}),code:`<ActionPlanPage
|
|
25
|
-
actionPlan={actionPlan}
|
|
26
|
-
config={{
|
|
27
|
-
enablePredecessors: true,
|
|
28
|
-
enableCosts: true,
|
|
29
|
-
enableAttachments: true,
|
|
30
|
-
enableComments: true,
|
|
31
|
-
enableHistory: true,
|
|
32
|
-
hasComments: true,
|
|
33
|
-
}}
|
|
34
|
-
users={users}
|
|
35
|
-
places={places}
|
|
36
|
-
actionTypes={actionTypes}
|
|
37
|
-
causes={causes}
|
|
38
|
-
progress={progress}
|
|
39
|
-
predecessors={predecessors}
|
|
40
|
-
costs={costs}
|
|
41
|
-
comments={comments}
|
|
42
|
-
history={history}
|
|
43
|
-
attachments={attachments}
|
|
44
|
-
onSave={handleSave}
|
|
45
|
-
onChangeStatus={handleChangeStatus}
|
|
46
|
-
onReportProgress={handleReportProgress}
|
|
47
|
-
onAddComment={handleAddComment}
|
|
48
|
-
onEditComment={handleEditComment}
|
|
49
|
-
onDeleteComment={handleDeleteComment}
|
|
50
|
-
onUploadAttachment={handleUploadAttachment}
|
|
51
|
-
onDeleteAttachment={handleDeleteAttachment}
|
|
52
|
-
onRenameAttachment={handleRenameAttachment}
|
|
53
|
-
onDownloadAttachment={handleDownloadAttachment}
|
|
54
|
-
onViewAttachment={handleViewAttachment}
|
|
55
|
-
/>`},{title:"Novo Plano de Ação",description:"Formulário limpo para criação. Apenas a aba Geral é exibida.",preview:e.jsx(ys,{}),code:`<ActionPlanPage
|
|
56
|
-
isNew
|
|
57
|
-
config={{}}
|
|
58
|
-
users={users}
|
|
59
|
-
places={places}
|
|
60
|
-
onSave={handleSave}
|
|
61
|
-
onCancel={() => navigate(-1)}
|
|
62
|
-
/>`},{title:"Status Badges",description:"Todos os status disponíveis com suas cores e labels.",preview:e.jsx(Z,{}),code:`import { ActionPlanStatusBadge, ETaskPlanStatus } from "forlogic-core"
|
|
63
|
-
|
|
64
|
-
<ActionPlanStatusBadge status={ETaskPlanStatus.running} />
|
|
65
|
-
<ActionPlanStatusBadge status={ETaskPlanStatus.done} />`}],props:[{name:"actionPlan",type:"ActionPlan | null",description:"Dados do plano de ação. null/undefined para novo."},{name:"isNew",type:"boolean",description:"Se é um novo plano (oculta tabs extras e status)."},{name:"config",type:"ActionPlanFormConfig",description:"Configuração do formulário: campos obrigatórios, visíveis, tabs habilitadas (enableComments, enableHistory, enableAttachments)."},{name:"isLoading",type:"boolean",description:"Estado de loading global."},{name:"users",type:"ActionPlanUser[]",description:"Lista de usuários para selects de responsável/verificador."},{name:"places",type:"ActionPlanPlace[]",description:"Estrutura hierárquica de locais."},{name:"actionTypes",type:"ActionPlanOption[]",description:"Tipos de ação disponíveis."},{name:"causes",type:"ActionPlanOption[]",description:"Causas disponíveis (visível quando associado a ocorrência)."},{name:"progress",type:"ActionPlanProgress",description:"Dados de progresso com histórico de reportes."},{name:"predecessors",type:"ActionPlanPredecessor[]",description:"Lista de predecessores vinculados."},{name:"costs",type:"ActionPlanCost[]",description:"Lista de custos realizados."},{name:"comments",type:"ActionPlanComment[]",description:"Lista de comentários. Cada item contém id, text, stringText, userId, userName, userEmail, dateCreation, dateEdited e userPhotoUrl opcional."},{name:"history",type:"ActionPlanHistoryItem[]",description:"Lista de eventos do histórico. Cada item contém eventName, translateEvent, eventDescription, icon, userName, userEmail, date e flag isMobileRequest."},{name:"attachments",type:"ActionPlanAttachment[]",description:"Lista de anexos. Cada item contém name, extension, size, status (EAttachmentItemStatus) e progress opcional."},{name:"onSave",type:"(data) => Promise",description:"Callback ao salvar o formulário."},{name:"onCancel",type:"() => void",description:"Callback ao cancelar."},{name:"onChangeStatus",type:"(id, status) => Promise",description:"Callback ao alterar status."},{name:"onReportProgress",type:"(data) => Promise",description:"Callback ao reportar progresso."},{name:"onAddComment",type:"(text: string) => Promise",description:"Callback ao adicionar comentário."},{name:"onEditComment",type:"(comment) => Promise",description:"Callback ao editar comentário."},{name:"onDeleteComment",type:"(commentId) => Promise",description:"Callback ao excluir comentário."},{name:"onUploadAttachment",type:"(file: File) => Promise",description:"Callback ao fazer upload de anexo."},{name:"onDeleteAttachment",type:"(attachmentId) => Promise",description:"Callback ao excluir anexo."},{name:"onRenameAttachment",type:"(id, newName) => Promise",description:"Callback ao renomear anexo."},{name:"onDownloadAttachment",type:"(attachmentId) => Promise",description:"Callback ao fazer download de anexo."},{name:"onViewAttachment",type:"(attachmentId) => Promise",description:"Callback ao visualizar anexo."},{name:"attachmentsSlot",type:"ReactNode",description:"Slot para substituir o componente padrão de anexos por um customizado."},{name:"commentsSlot",type:"ReactNode",description:"Slot para substituir o componente padrão de comentários por um customizado."},{name:"historySlot",type:"ReactNode",description:"Slot para substituir o componente padrão de histórico por um customizado."}],notes:["Os componentes internos de Comentários, Histórico e Anexos foram portados das libs Angular (flc-comments, flc-history, flc-attachments).",'Comentários suportam CRUD completo com avatar, timestamps e label "editado". @menções e Rich Text Editor serão adicionados em versão futura.','Histórico exibe timeline vertical com ícone, descrição, avatar do usuário, data/hora e indicador "via app" para requisições mobile.',"Anexos suportam upload múltiplo, barra de progresso, renomear inline, context menu (visualizar, download, excluir) e detecção de duplicatas.","Slots (attachmentsSlot, commentsSlot, historySlot) permitem substituir os componentes padrão por implementações customizadas do projeto consumidor."]})}export{Is as ActionPlanDoc};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import{j as e,aK as a,aM as i,aN as r}from"./index-DkiftrvI.js";import{C as s}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function l(){return e.jsx(s,{title:"Alert",description:"Exibe uma mensagem de destaque para chamar a atenção do usuário. O componente inclui ícone automático baseado na variante.",component:e.jsxs(a,{variant:"info",className:"max-w-md",children:[e.jsx(i,{children:"Informação"}),e.jsx(r,{children:"Esta é uma mensagem informativa para o usuário."})]}),usage:`import { Alert, AlertDescription, AlertTitle } from "forlogic-core"
|
|
2
|
-
|
|
3
|
-
<Alert variant="info">
|
|
4
|
-
<AlertTitle>Informação</AlertTitle>
|
|
5
|
-
<AlertDescription>
|
|
6
|
-
Esta é uma mensagem informativa para o usuário.
|
|
7
|
-
</AlertDescription>
|
|
8
|
-
</Alert>`,examples:[{title:"Informativo (info)",description:"Alerta neutro para informações gerais. Ícone: Info.",preview:e.jsxs(a,{variant:"info",className:"max-w-md",children:[e.jsx(i,{children:"Informação"}),e.jsx(r,{children:"Você pode adicionar componentes e dependências ao seu app usando o CLI."})]}),code:`<Alert variant="info">
|
|
9
|
-
<AlertTitle>Informação</AlertTitle>
|
|
10
|
-
<AlertDescription>
|
|
11
|
-
Você pode adicionar componentes e dependências ao seu app usando o CLI.
|
|
12
|
-
</AlertDescription>
|
|
13
|
-
</Alert>`},{title:"Alerta (warning)",description:"Alerta de atenção para avisos. Ícone: Info.",preview:e.jsxs(a,{variant:"warning",className:"max-w-md",children:[e.jsx(i,{children:"Atenção"}),e.jsx(r,{children:"Sua sessão expira em 5 minutos. Salve suas alterações."})]}),code:`<Alert variant="warning">
|
|
14
|
-
<AlertTitle>Atenção</AlertTitle>
|
|
15
|
-
<AlertDescription>
|
|
16
|
-
Sua sessão expira em 5 minutos. Salve suas alterações.
|
|
17
|
-
</AlertDescription>
|
|
18
|
-
</Alert>`},{title:"Perigo (danger)",description:"Alerta de erro ou perigo. Ícone: AlertTriangle.",preview:e.jsxs(a,{variant:"danger",className:"max-w-md",children:[e.jsx(i,{children:"Erro"}),e.jsxs(r,{children:[e.jsx("p",{children:"Não foi possível processar seu pagamento."}),e.jsxs("ul",{className:"mt-2 list-disc list-inside text-sm",children:[e.jsx("li",{children:"Verifique os dados do cartão"}),e.jsx("li",{children:"Confirme se há saldo suficiente"})]})]})]}),code:`<Alert variant="danger">
|
|
19
|
-
<AlertTitle>Erro</AlertTitle>
|
|
20
|
-
<AlertDescription>
|
|
21
|
-
<p>Não foi possível processar seu pagamento.</p>
|
|
22
|
-
<ul className="mt-2 list-disc list-inside text-sm">
|
|
23
|
-
<li>Verifique os dados do cartão</li>
|
|
24
|
-
<li>Confirme se há saldo suficiente</li>
|
|
25
|
-
</ul>
|
|
26
|
-
</AlertDescription>
|
|
27
|
-
</Alert>`},{title:"Sucesso (success)",description:"Alerta de sucesso para confirmações. Ícone: CheckCircle.",preview:e.jsxs(a,{variant:"success",className:"max-w-md",children:[e.jsx(i,{children:"Sucesso"}),e.jsx(r,{children:"Suas alterações foram salvas com sucesso."})]}),code:`<Alert variant="success">
|
|
28
|
-
<AlertTitle>Sucesso</AlertTitle>
|
|
29
|
-
<AlertDescription>
|
|
30
|
-
Suas alterações foram salvas com sucesso.
|
|
31
|
-
</AlertDescription>
|
|
32
|
-
</Alert>`},{title:"Sem ícone",description:"Use showIcon={false} para ocultar o ícone automático.",preview:e.jsxs(a,{variant:"info",showIcon:!1,className:"max-w-md",children:[e.jsx(i,{children:"Alerta sem ícone"}),e.jsx(r,{children:"Este alerta não exibe o ícone padrão da variante."})]}),code:`<Alert variant="info" showIcon={false}>
|
|
33
|
-
<AlertTitle>Alerta sem ícone</AlertTitle>
|
|
34
|
-
<AlertDescription>
|
|
35
|
-
Este alerta não exibe o ícone padrão da variante.
|
|
36
|
-
</AlertDescription>
|
|
37
|
-
</Alert>`}],props:[{name:"variant",type:'"info" | "warning" | "danger" | "success"',default:'"info"',description:"O estilo visual e ícone do alerta."},{name:"showIcon",type:"boolean",default:"true",description:"Se deve exibir o ícone padrão da variante."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais."}],accessibility:['Usa role="alert" para anunciar automaticamente aos leitores de tela',"A cor não é o único meio de transmitir informações - ícones fornecem contexto adicional","Estrutura HTML semântica com título e descrição claramente definidos","Contraste de cores adequado para acessibilidade visual"]})}export{l as AlertDoc};
|