forlogic-core 1.20.1 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.note/memory/patterns/single-scroll-pattern.md +30 -12
- package/README.md +0 -46
- package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanCostTab.d.ts +10 -0
- package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +13 -0
- package/dist/action-plans/components/ActionPlanPage.d.ts +25 -0
- package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +10 -0
- package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +13 -0
- package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
- package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +11 -0
- package/dist/action-plans/constants.d.ts +42 -0
- package/dist/action-plans/hooks/useActionPlan.d.ts +14 -0
- package/dist/action-plans/hooks/useActionPlanProgress.d.ts +15 -0
- package/dist/action-plans/index.d.ts +15 -0
- package/dist/action-plans/types.d.ts +353 -0
- package/dist/action-plans/utils/formatTime.d.ts +15 -0
- package/dist/approval-flow/components/ApprovalSidenav.d.ts +16 -0
- package/dist/approval-flow/components/ApproveDialog.d.ts +13 -0
- package/dist/approval-flow/components/SelectApproverDialog.d.ts +11 -0
- package/dist/approval-flow/index.d.ts +4 -0
- package/dist/approval-flow/types.d.ts +76 -0
- package/dist/assets/AccordionDoc-CGNlubG3.js +31 -0
- package/dist/assets/{ActionButtonDoc-DLJ_K9ib.js → ActionButtonDoc-CYtkXR0k.js} +2 -2
- package/dist/assets/ActionPlanDoc-BSuPRftQ.js +65 -0
- package/dist/assets/{AlertDoc-CY1ybZeG.js → AlertDoc-Cpvxneqg.js} +7 -7
- package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +189 -0
- package/dist/assets/AppHeaderDoc-DNQErj_t.js +74 -0
- package/dist/assets/AppSidebarDoc-DkeQarDu.js +221 -0
- package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +31 -0
- package/dist/assets/AuditLogDoc-BBvNcHIo.js +67 -0
- package/dist/assets/AuditTrailDoc-DgFHO-uo.js +17 -0
- package/dist/assets/AuthDoc-WIA_Aetl.js +200 -0
- package/dist/assets/{AvatarDoc-BLdMoyJd.js → AvatarDoc-B6go1C1T.js} +2 -2
- package/dist/assets/{BadgeDoc-CSNM1b6b.js → BadgeDoc-BONhfqB_.js} +2 -2
- package/dist/assets/BaseFormDoc-CuyUArcj.js +169 -0
- package/dist/assets/{BodyContentDoc-Bp6YmUWX.js → BodyContentDoc-CterHC1E.js} +2 -2
- package/dist/assets/{BreadcrumbDoc-D7tqqTvo.js → BreadcrumbDoc-Dwn9nLeO.js} +2 -2
- package/dist/assets/{ButtonDoc-C4JwIvU3.js → ButtonDoc-BOjRseZT.js} +2 -2
- package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +7 -0
- package/dist/assets/{CalendarDoc-COlEKqmv.js → CalendarDoc-CMwIEqgT.js} +3 -3
- package/dist/assets/{CardDoc-BVhMoC2w.js → CardDoc-BZz1CVg2.js} +2 -2
- package/dist/assets/ChartDoc-B5vZVtqD.js +76 -0
- package/dist/assets/{CheckboxDoc-Bcqpln9_.js → CheckboxDoc-lAbYO9I5.js} +2 -2
- package/dist/assets/ColorPickerDoc-Dpsprp4N.js +10 -0
- package/dist/assets/{ColorsFoundationDoc-uO6IiJbS.js → ColorsFoundationDoc-CCHeSL3p.js} +1 -1
- package/dist/assets/ComboTreeDoc-D4dTkIt-.js +46 -0
- package/dist/assets/ComboboxDoc-CqqZPvZq.js +134 -0
- package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +1 -0
- package/dist/assets/{ContextMenuDoc-C4-_0NLp.js → ContextMenuDoc-D3jC-MVA.js} +2 -2
- package/dist/assets/{ContextsDoc-Cj9Aaoyo.js → ContextsDoc-XFH0-JdS.js} +30 -3
- package/dist/assets/{CreateCrudPageDoc-D_SnMRJ2.js → CreateCrudPageDoc-CpuiWI-g.js} +2 -2
- package/dist/assets/{CrudActionBarDoc-BYqtIabp.js → CrudActionBarDoc-wuBGXD9Y.js} +4 -4
- package/dist/assets/CrudGridDoc-BYWqSXBH.js +85 -0
- package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +14 -0
- package/dist/assets/{CrudPrimitivesDoc-BRS86nWg.js → CrudPrimitivesDoc-CxaTB94A.js} +4 -4
- package/dist/assets/{CrudTableDoc-Daw8u2G_.js → CrudTableDoc-Dga1VgCu.js} +5 -5
- package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +33 -0
- package/dist/assets/DashboardFormDoc-BUDCmrMl.js +49 -0
- package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +71 -0
- package/dist/assets/DashboardGridDoc-BavePiRF.js +49 -0
- package/dist/assets/DashboardListDoc-CLyMA6UK.js +37 -0
- package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +35 -0
- package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +60 -0
- package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +62 -0
- package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +75 -0
- package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +83 -0
- package/dist/assets/DashboardViewDoc-CtlCNlEF.js +45 -0
- package/dist/assets/DataListDoc-DUy88lCQ.js +13 -0
- package/dist/assets/DesignSystemHome-DHl9YtbH.js +1 -0
- package/dist/assets/{DialogDoc-DCpRy4rg.js → DialogDoc-CMQqnTV-.js} +2 -2
- package/dist/assets/{DropdownMenuDoc-DT6LBa8Z.js → DropdownMenuDoc-S7X9csGt.js} +5 -5
- package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +57 -0
- package/dist/assets/{EmptyStateDoc-wydc09gG.js → EmptyStateDoc-CHGCiGIk.js} +2 -2
- package/dist/assets/{EnvironmentsDoc-amIriwDD.js → EnvironmentsDoc-DZHJZ2nm.js} +4 -4
- package/dist/assets/{ErrorBoundaryDoc-BEixy_Gl.js → ErrorBoundaryDoc-DoaAg68p.js} +2 -2
- package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +1 -0
- package/dist/assets/ExampleAppDoc-DzIU81Fn.js +1 -0
- package/dist/assets/ExampleCard-DuLrb3t-.js +1 -0
- package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +1 -0
- package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +1 -0
- package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +1 -0
- package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +1 -0
- package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +1 -0
- package/dist/assets/FileUploadDoc-9-UujFNX.js +34 -0
- package/dist/assets/FilterBar-DDTqqUfZ.js +1 -0
- package/dist/assets/{FormDoc-DxoRt6p7.js → FormDoc-CVES6n3d.js} +2 -2
- package/dist/assets/{FoundationOverview-CxSbumIt.js → FoundationOverview-DT0u11Gz.js} +1 -1
- package/dist/assets/{GridDoc-BpQqCMUE.js → GridDoc-CbHFSILF.js} +2 -2
- package/dist/assets/{HooksDoc-JNODhbaF.js → HooksDoc-Ctxdk6Wq.js} +5 -5
- package/dist/assets/{HoverCardDoc-CdqiYrIb.js → HoverCardDoc-8Wkaafdj.js} +2 -2
- package/dist/assets/I18nDoc-D3Q2m7ik.js +167 -0
- package/dist/assets/IconPickerDoc-DZ26Gdpg.js +10 -0
- package/dist/assets/{IconsFoundationDoc-CrymfxTI.js → IconsFoundationDoc-xOxtC7CW.js} +5 -5
- package/dist/assets/{InputDoc-BK-SdpJ7.js → InputDoc-BhztAiuJ.js} +4 -4
- package/dist/assets/{LabelDoc-DHvgzhaJ.js → LabelDoc-A4hmTRRV.js} +2 -2
- package/dist/assets/LeadershipDoc-CqOSfWsP.js +452 -0
- package/dist/assets/{MediaDoc-B_vqnf72.js → MediaDoc-C78gvC8p.js} +2 -2
- package/dist/assets/MenubarDoc-DCnmd2tO.js +165 -0
- package/dist/assets/{ModuleAccessDoc-Nuxb4S27.js → ModuleAccessDoc-CmD5nHDp.js} +2 -2
- package/dist/assets/{ModulesDialogDoc-iJWLkOZo.js → ModulesDialogDoc-DVit1CA-.js} +2 -2
- package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +34 -0
- package/dist/assets/NavigationMenuDoc-q1fbc89j.js +116 -0
- package/dist/assets/{OnboardingDialogDoc-xBL-rXeZ.js → OnboardingDialogDoc-3A3eBYrq.js} +2 -2
- package/dist/assets/{PaginationDoc-DqtRgXnF.js → PaginationDoc-B8-bMz5J.js} +2 -2
- package/dist/assets/{PaginationDoc-CfvwxCMe.js → PaginationDoc-BkGdxHL3.js} +5 -5
- package/dist/assets/{PlacesDoc-nckioEzg.js → PlacesDoc-CKPO6ATs.js} +2 -2
- package/dist/assets/{PopoverDoc-C3o2CZCT.js → PopoverDoc-CJPU4Ags.js} +3 -3
- package/dist/assets/{ProgressDoc-BmWBNMPA.js → ProgressDoc-CpjbTL4o.js} +2 -2
- package/dist/assets/{QualiexUserFieldDoc-CE1e4mx6.js → QualiexUserFieldDoc-DDwumlRw.js} +2 -2
- package/dist/assets/{RadioGroupDoc-DMZH6NmR.js → RadioGroupDoc-D6tSZz8G.js} +2 -2
- package/dist/assets/{RadiusDoc-BOZD3gPV.js → RadiusDoc-B4xSnajw.js} +1 -1
- package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +15 -0
- package/dist/assets/{RequiredFieldsCounterDoc-CG-lmSSy.js → RequiredFieldsCounterDoc-COesoSdx.js} +2 -2
- package/dist/assets/ResizableDoc-CW0-XQuB.js +104 -0
- package/dist/assets/{RichTextEditorDoc-m50ll-Od.js → RichTextEditorDoc-C8c_XA9P.js} +2 -2
- package/dist/assets/{ScrollAreaDoc-BzJ-APXo.js → ScrollAreaDoc-BxtoAPaZ.js} +2 -2
- package/dist/assets/{SecurityDoc-B34gVeiV.js → SecurityDoc-wOVqpg2F.js} +2 -2
- package/dist/assets/{SelectDoc-DXRv7QHK.js → SelectDoc-C75gtY9D.js} +2 -2
- package/dist/assets/{SeparatorDoc-DcNh8k0P.js → SeparatorDoc-BjQBPB1P.js} +2 -2
- package/dist/assets/{ServicesDoc-8aXBd6yg.js → ServicesDoc-CXTctwBl.js} +3 -3
- package/dist/assets/ShadowsDoc-C6Lw8_x2.js +9 -0
- package/dist/assets/SignDoc-Bh5ZUg5x.js +66 -0
- package/dist/assets/{SkeletonDoc-BWgqgbDY.js → SkeletonDoc-rTLGK5VE.js} +8 -8
- package/dist/assets/SliderDoc-JMAMDub7.js +41 -0
- package/dist/assets/{SpacingDoc-BzburM-r.js → SpacingDoc-RljOrpwA.js} +1 -1
- package/dist/assets/{SplitButtonDoc-BYUysmJp.js → SplitButtonDoc-CvShUW3w.js} +3 -3
- package/dist/assets/{StepSelectorDoc-PB1k4v7F.js → StepSelectorDoc-C-nAap9H.js} +2 -2
- package/dist/assets/{SwitchDoc-BLOG6kfj.js → SwitchDoc-DLnqmkPr.js} +2 -2
- package/dist/assets/{TableDoc-Dwcs-lop.js → TableDoc-B8EpWLVg.js} +2 -2
- package/dist/assets/{TabsDoc-Ovkh8ArV.js → TabsDoc-DIBtl_uC.js} +2 -2
- package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +10 -0
- package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +16 -0
- package/dist/assets/{TextareaDoc-DsBYxmbr.js → TextareaDoc-DGnqMqEC.js} +4 -4
- package/dist/assets/{ToastDoc-BbZaFE_A.js → ToastDoc-DjYyc7ae.js} +4 -4
- package/dist/assets/{ToggleDoc-C28vbvhp.js → ToggleDoc-C9ZOVjkY.js} +2 -2
- package/dist/assets/{TooltipDoc-DL5cnLak.js → TooltipDoc-BEx4l9-i.js} +7 -7
- package/dist/assets/{TruncatedCellDoc-BuDA8QcY.js → TruncatedCellDoc-BbV1bRSY.js} +2 -2
- package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +7 -0
- package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +29 -0
- package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +18 -0
- package/dist/assets/{UtilitiesDoc-CrQhyEfz.js → UtilitiesDoc-DGxaHVV1.js} +2 -2
- package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +1 -0
- package/dist/assets/{blocks-DO93nPjs.js → blocks-B6LrJeAM.js} +1 -1
- package/dist/assets/building-DeVappnD.js +1 -0
- package/dist/assets/{calendar-days-cMfwBSZx.js → calendar-days-BQ0na5kM.js} +1 -1
- package/dist/assets/check-check-C_-PJCJa.js +1 -0
- package/dist/assets/circle-plus-CpIcep-O.js +1 -0
- package/dist/assets/{circle-x-BVAVJ_oz.js → circle-x-jPpBPew0.js} +1 -1
- package/dist/assets/clipboard-list-CXNPdciZ.js +1 -0
- package/dist/assets/cloud-upload-BEjzumjl.js +1 -0
- package/dist/assets/{crown-B2MTZDnM.js → crown-CqNsQIsm.js} +1 -1
- package/dist/assets/date-picker-BW3eGOe_.js +1 -0
- package/dist/assets/disabled-menu-item-C2YaMvSt.js +1 -0
- package/dist/assets/{drawer-oTqCOtsC.js → drawer-D5rflIcD.js} +2 -2
- package/dist/assets/file-braces-DFb5X9so.js +1 -0
- package/dist/assets/{file-pen-line-CXv-Eye-.js → file-pen-line-CyUGKkEN.js} +1 -1
- package/dist/assets/{git-branch-V6-h6P9K.js → git-branch-BcXv9mpp.js} +1 -1
- package/dist/assets/{globe-CaUBIJU8.js → globe-CpMIWAcv.js} +1 -1
- package/dist/assets/{hash-B4MTXppl.js → hash-cQWdKjya.js} +1 -1
- package/dist/assets/hourglass-BahQ3eDv.js +1 -0
- package/dist/assets/hover-card-R66N85sZ.js +1 -0
- package/dist/assets/iframe-dialog-V0mW5aBb.js +1 -0
- package/dist/assets/index-DkiftrvI.js +352 -0
- package/dist/assets/index-nmBjO9Th.css +1 -0
- package/dist/assets/index.d.ts +1 -0
- package/dist/assets/{life-buoy-BRndExxh.js → life-buoy-ByXiPddz.js} +1 -1
- package/dist/assets/loading-state-Cb5_t5uE.js +1 -0
- package/dist/assets/lucide-react-Cp3Yw3Zm.js +1 -0
- package/dist/assets/{package-3G45ARQh.js → package-B3-pVvPM.js} +1 -1
- package/dist/assets/{pen-BYSSwjK4.js → pen-Bi_lmmKT.js} +1 -1
- package/dist/assets/pin-DVsSl8QA.js +1 -0
- package/dist/assets/printer-BnJ8B6m-.js +1 -0
- package/dist/assets/radio-group-BHAaNGsm.js +1 -0
- package/dist/assets/{server-p0Sb0mKI.js → server-CtzFTfKR.js} +1 -1
- package/dist/assets/{share-2-D-ZhCCq2.js → share-2-Dv8Do445.js} +1 -1
- package/dist/assets/shield-check-CFXjOV_w.js +1 -0
- package/dist/assets/{shield-x-Q7hAXWsG.js → shield-x-DJTRfVux.js} +1 -1
- package/dist/assets/slider-v9tXBSnB.js +1 -0
- package/dist/assets/smartphone-BSNR60L7.js +1 -0
- package/dist/assets/step-selector-ATTh_9Wa.js +1 -0
- package/dist/assets/{text-align-start-6aYQqbX4.js → text-align-start-qE-MbYYw.js} +1 -1
- package/dist/assets/thumbs-up-D_XIW_uX.js +1 -0
- package/dist/assets/{trash-DveAOiLF.js → trash-DTWQwpwA.js} +1 -1
- package/dist/assets/trending-up-jip5-leJ.js +1 -0
- package/dist/assets/{useMockCrud-GY0KxHXr.js → useMockCrud-CN4vjyOZ.js} +1 -1
- package/dist/assets/{user-check-CoGNBfIk.js → user-check-BlH3EDWK.js} +1 -1
- package/dist/assets/{user-plus-Bad2xWIT.js → user-plus-BqwXwD-c.js} +1 -1
- package/dist/audit-trail/components/AuditTrailDetails.d.ts +17 -0
- package/dist/audit-trail/components/AuditTrailFilter.d.ts +19 -0
- package/dist/audit-trail/components/AuditTrailPage.d.ts +30 -0
- package/dist/audit-trail/index.d.ts +9 -0
- package/dist/audit-trail/types.d.ts +151 -0
- package/dist/audit-trail/utils.d.ts +38 -0
- package/dist/components/dashboards/dashboard-form.d.ts +50 -0
- package/dist/components/dashboards/dashboard-general-view.d.ts +109 -0
- package/dist/components/dashboards/dashboard-grid.d.ts +41 -0
- package/dist/components/dashboards/dashboard-list.d.ts +31 -0
- package/dist/components/dashboards/dashboard-panel-renderer.d.ts +21 -0
- package/dist/components/dashboards/dashboard-view.d.ts +38 -0
- package/dist/components/dashboards/helpers.d.ts +47 -0
- package/dist/components/dashboards/index.d.ts +9 -0
- package/dist/components/dashboards/panels/burndown-panel.d.ts +26 -0
- package/dist/components/dashboards/panels/cartesian-panel.d.ts +46 -0
- package/dist/components/dashboards/panels/index.d.ts +14 -0
- package/dist/components/dashboards/panels/list-panel.d.ts +30 -0
- package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +49 -0
- package/dist/components/dashboards/panels/numeric-panel.d.ts +22 -0
- package/dist/components/dashboards/panels/panel-error.d.ts +8 -0
- package/dist/components/dashboards/panels/panel-header.d.ts +17 -0
- package/dist/components/dashboards/panels/panel-loader.d.ts +7 -0
- package/dist/components/dashboards/panels/panel-no-data.d.ts +6 -0
- package/dist/components/dashboards/panels/panel-unavailable.d.ts +6 -0
- package/dist/components/dashboards/panels/pareto-panel.d.ts +20 -0
- package/dist/components/dashboards/panels/performance-panel.d.ts +24 -0
- package/dist/components/dashboards/panels/pie-panel.d.ts +19 -0
- package/dist/components/dashboards/panels/text-panel.d.ts +18 -0
- package/dist/components/dashboards/types.d.ts +525 -0
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/electronic-signature-dialog.d.ts +21 -0
- package/dist/components/ui/export-dialog.d.ts +28 -0
- package/dist/components/ui/iframe-dialog.d.ts +14 -0
- package/dist/components/ui/multiselect-permissions.d.ts +59 -0
- package/dist/components/ui/online-editor-dialog.d.ts +18 -0
- package/dist/components/ui/report-request-list.d.ts +44 -0
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/stimulsoft-viewer.d.ts +20 -0
- package/dist/components/ui/terms-of-use-dialog.d.ts +56 -0
- package/dist/components/ui/timepicker.d.ts +11 -0
- package/dist/components/ui/users-groups-selector.d.ts +44 -0
- package/dist/components/ui/viewer-dialog.d.ts +77 -0
- package/dist/custom-form-fields/components/CustomFormFields.d.ts +8 -0
- package/dist/custom-form-fields/fields/FormDateField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormNumericField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormTextField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormTimeField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormUrlField.d.ts +6 -0
- package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +6 -0
- package/dist/custom-form-fields/index.d.ts +13 -0
- package/dist/custom-form-fields/types.d.ts +143 -0
- package/dist/exports/action-plans.d.ts +16 -0
- package/dist/exports/audit-trail.d.ts +1 -0
- package/dist/exports/custom-form-fields.d.ts +1 -0
- package/dist/exports/file-upload.d.ts +1 -0
- package/dist/exports/ui.d.ts +12 -0
- package/dist/file-upload/components/SingleFileUpload.d.ts +43 -0
- package/dist/file-upload/index.d.ts +6 -0
- package/dist/file-upload/types.d.ts +11 -0
- package/dist/file-upload/utils/formatBytes.d.ts +1 -0
- package/dist/file-upload/utils/getFileExtension.d.ts +1 -0
- package/dist/hooks/useSidebarResize.d.ts +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.html +9 -11
- package/dist/index.js +1 -1
- package/dist/setup/favicon.d.ts +1 -0
- package/dist/team-selector/components/TeamSelector.d.ts +24 -0
- package/dist/team-selector/index.d.ts +2 -0
- package/dist/team-selector/types.d.ts +10 -0
- package/docs/ICON_MIGRATION_GUIDE.md +177 -0
- package/docs/PUBLISH.md +3 -3
- package/package.json +1 -5
- package/dist/README.md +0 -1079
- package/dist/assets/AccordionDoc-BVPUJk8G.js +0 -31
- package/dist/assets/AppHeaderDoc-Crkw4dA9.js +0 -67
- package/dist/assets/AppSidebarDoc-ET-4j6wV.js +0 -204
- package/dist/assets/AuthDoc-B4v4Nci5.js +0 -192
- package/dist/assets/BaseFormDoc-DXiYuN6-.js +0 -169
- package/dist/assets/ButtonGroupDoc-QFfjC7Pm.js +0 -7
- package/dist/assets/ChartDoc-BJ14EjI2.js +0 -111
- package/dist/assets/ColorPickerDoc-CcfmSwyC.js +0 -10
- package/dist/assets/ComboTreeDoc-R4qE6XwB.js +0 -46
- package/dist/assets/ComboboxDoc-JIo_-gSN.js +0 -134
- package/dist/assets/ComponentDocTemplate-CRbRY-v5.js +0 -1
- package/dist/assets/CrudGridDoc-DspxQrq5.js +0 -85
- package/dist/assets/CrudOverviewDoc-DLcOL_HZ.js +0 -14
- package/dist/assets/DataListDoc-BrgVNhhR.js +0 -13
- package/dist/assets/DesignSystemHome-BFBNqq1J.js +0 -1
- package/dist/assets/I18nDoc-B6LMXnE3.js +0 -232
- package/dist/assets/IconPickerDoc-BRdy58IC.js +0 -10
- package/dist/assets/LeadershipDoc-DRiB0spL.js +0 -416
- package/dist/assets/MenubarDoc-Zvgczxe2.js +0 -165
- package/dist/assets/NavigationMenuDoc-CeWun1VF.js +0 -116
- package/dist/assets/ResizableDoc-CqGkv6Cd.js +0 -104
- package/dist/assets/ShadowsDoc-Brl4hIDI.js +0 -9
- package/dist/assets/SignDoc-BdwerR-2.js +0 -66
- package/dist/assets/SliderDoc-E-NjbYVk.js +0 -41
- package/dist/assets/TypographyFoundationDoc-CPdH4PHa.js +0 -7
- package/dist/assets/circle-plus-D3NftMzS.js +0 -1
- package/dist/assets/date-picker-zhJU-_kM.js +0 -1
- package/dist/assets/disabled-menu-item-C16xsaVs.js +0 -1
- package/dist/assets/hover-card-DEuucfxP.js +0 -1
- package/dist/assets/index-CE0k7Rdh.js +0 -312
- package/dist/assets/index-Cx3adT_u.css +0 -1
- package/dist/assets/lucide-react-t7dCa4lv.js +0 -1
- package/dist/assets/monitor-Dg3HKTSE.js +0 -1
- package/dist/assets/pin-CMYagNhs.js +0 -1
- package/dist/assets/radio-group-BVun_Tmt.js +0 -1
- package/dist/assets/step-selector-DHxgT2FL.js +0 -1
- package/dist/bin/bootstrap.js +0 -40
- package/dist/bin/pull-docs.js +0 -186
- package/dist/docs/KNOWLEDGE.md +0 -109
- package/dist/leadership/components/LeaderRow.d.ts +0 -9
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import{j as e,a as s,dW as r,dw as a,B as t,as as n,aK as i,aN as c,S as d}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import{P as o}from"./package-B3-pVvPM.js";import{F as p}from"./file-braces-DFb5X9so.js";import{G as m}from"./globe-CpMIWAcv.js";import"./ExampleCard-DuLrb3t-.js";function u(){return e.jsxs("div",{className:"space-y-6",children:[e.jsx(i,{children:e.jsxs(c,{className:"text-sm",children:["O i18n usa ",e.jsx("strong",{children:"namespaces"}),": a lib fornece o namespace ",e.jsx("code",{children:"core"})," com traduções base, e cada projeto consumidor injeta suas traduções no namespace ",e.jsx("code",{children:"app"}),". O ",e.jsx("code",{children:"t('key')"})," busca primeiro em ",e.jsx("code",{children:"app"}),", depois em ",e.jsx("code",{children:"core"}),"."]})}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-4",children:[e.jsxs(s,{className:"p-4 border-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"p-2 rounded-lg bg-primary/10",children:e.jsx(r,{className:"h-5 w-5 text-primary"})}),e.jsx("h4",{className:"font-semibold",children:"Namespace core"})]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Traduções da lib (save, cancel, etc.) em ",e.jsx("code",{children:"lib/i18n/locales/"})]})]}),e.jsxs(s,{className:"p-4 border-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"p-2 rounded-lg bg-green-500/10",children:e.jsx(o,{className:"h-5 w-5 text-green-500"})}),e.jsx("h4",{className:"font-semibold",children:"Namespace app"})]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Traduções do projeto consumidor, injetadas via ",e.jsx("code",{children:"appTranslations"})," no CoreProviders"]})]}),e.jsxs(s,{className:"p-4 border-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"p-2 rounded-lg bg-orange-500/10",children:e.jsx(d,{className:"h-5 w-5 text-orange-500"})}),e.jsx("h4",{className:"font-semibold",children:"CoreProviders"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Wrapper que configura i18n, injeta traduções do app e encapsula todos os providers"})]}),e.jsxs(s,{className:"p-4 border-2",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"p-2 rounded-lg bg-violet-500/10",children:e.jsx(m,{className:"h-5 w-5 text-violet-500"})}),e.jsx("h4",{className:"font-semibold",children:"LocaleContext"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Context React com locale fixo em pt-BR (futuramente via API externa)"})]})]})]})}function x(){return e.jsxs(s,{className:"p-4 space-y-4",children:[e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(r,{className:"h-4 w-4"}),"Resolução de Namespaces"]}),e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("div",{className:"p-3 rounded-lg bg-muted/50 font-mono text-xs",children:e.jsx("pre",{children:`t('save')
|
|
2
|
+
1. Busca em namespace 'app' → encontrou? usa
|
|
3
|
+
2. Fallback para namespace 'core' → "Salvar"
|
|
4
|
+
|
|
5
|
+
t('meu_campo_custom')
|
|
6
|
+
1. Busca em namespace 'app' → "Meu Campo"
|
|
7
|
+
2. (não chega ao core)`})}),e.jsxs("div",{className:"text-muted-foreground space-y-1",children:[e.jsxs("p",{children:["• ",e.jsx("code",{children:"defaultNS: 'app'"})," — ",e.jsx("code",{children:"t('key')"})," busca primeiro no projeto"]}),e.jsxs("p",{children:["• ",e.jsx("code",{children:"fallbackNS: 'core'"})," — se não encontrar, busca na lib"]}),e.jsxs("p",{children:["• Projeto pode ",e.jsx("strong",{children:"sobrescrever"})," traduções da lib definindo a mesma chave em ",e.jsx("code",{children:"app"})]})]})]})]})}function j(){return e.jsxs(s,{className:"p-4 space-y-4",children:[e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(o,{className:"h-4 w-4"}),"Setup do Projeto Consumidor"]}),e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg bg-green-500/5 border border-green-500/20",children:[e.jsx(a,{className:"h-4 w-4 mt-0.5 text-green-500 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:"Passo 1: Criar JSONs de tradução"}),e.jsxs("p",{className:"text-muted-foreground",children:[e.jsx("code",{children:"src/i18n/pt-BR.json"})," com as traduções específicas do projeto"]})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg bg-green-500/5 border border-green-500/20",children:[e.jsx(a,{className:"h-4 w-4 mt-0.5 text-green-500 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:"Passo 2: Passar para CoreProviders"}),e.jsxs("p",{className:"text-muted-foreground",children:["Usar a prop ",e.jsx("code",{children:"appTranslations"})," para injetar no namespace ",e.jsx("code",{children:"app"})]})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg bg-green-500/5 border border-green-500/20",children:[e.jsx(a,{className:"h-4 w-4 mt-0.5 text-green-500 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:"Passo 3: Usar t() normalmente"}),e.jsxs("p",{className:"text-muted-foreground",children:[e.jsx("code",{children:"t('key')"})," busca em ",e.jsx("code",{children:"app"})," primeiro, fallback para ",e.jsx("code",{children:"core"})]})]})]})]})]})}function h(){return e.jsxs(s,{className:"p-4 bg-muted/50",children:[e.jsxs("h4",{className:"font-semibold mb-3 flex items-center gap-2",children:[e.jsx(p,{className:"h-4 w-4"}),"Estrutura de Arquivos"]}),e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("div",{className:"p-3 rounded bg-background font-mono text-xs",children:e.jsx("pre",{children:`lib/i18n/
|
|
8
|
+
├── config.ts # Configuração i18next + addAppTranslations()
|
|
9
|
+
├── constants.ts # Locales, timezones, formatos
|
|
10
|
+
├── index.ts # Exports centralizados
|
|
11
|
+
└── locales/
|
|
12
|
+
├── pt-BR.json # { "save": "Salvar", "cancel": "Cancelar", ... }
|
|
13
|
+
├── en-US.json # { "save": "Save", "cancel": "Cancel", ... }
|
|
14
|
+
└── es-ES.json # { "save": "Guardar", "cancel": "Cancelar", ... }
|
|
15
|
+
|
|
16
|
+
# Projeto consumidor:
|
|
17
|
+
src/i18n/
|
|
18
|
+
├── pt-BR.json # { "my_field": "Meu Campo", ... }
|
|
19
|
+
├── en-US.json # { "my_field": "My Field", ... }
|
|
20
|
+
└── es-ES.json # { "my_field": "Mi Campo", ... }`})}),e.jsxs("div",{className:"text-muted-foreground space-y-1",children:[e.jsxs("p",{children:["• Formato ",e.jsx("strong",{children:"flat"}),": ",e.jsx("code",{children:'{ "chave": "valor" }'})," (compatível com Tolgee)"]}),e.jsx("p",{children:"• Um arquivo por idioma (padrão i18next)"}),e.jsxs("p",{children:["• Carregamento ",e.jsx("strong",{children:"síncrono"})," via import estático"]})]})]})]})}function f(){return e.jsxs(s,{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"p-2 rounded-lg bg-violet-500/10",children:e.jsx(n,{className:"h-5 w-5 text-violet-500"})}),e.jsx("h4",{className:"font-semibold",children:"Conversão de Timezone"})]}),e.jsxs("div",{className:"text-sm space-y-2",children:[e.jsx("div",{className:"p-2 rounded bg-muted/50 font-mono text-xs",children:"UTC: 2024-03-15T17:30:00Z"}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex justify-between py-2 border-b",children:[e.jsx("span",{className:"text-muted-foreground",children:"🇧🇷 Brasília (UTC-3)"}),e.jsx("span",{className:"font-medium",children:"15/03/2024 14:30"})]}),e.jsxs("div",{className:"flex justify-between py-2 border-b",children:[e.jsx("span",{className:"text-muted-foreground",children:"🇺🇸 New York (UTC-4)"}),e.jsx("span",{className:"font-medium",children:"03/15/2024 01:30 PM"})]}),e.jsxs("div",{className:"flex justify-between py-2 border-b",children:[e.jsx("span",{className:"text-muted-foreground",children:"🇬🇧 Londres (UTC+0)"}),e.jsx("span",{className:"font-medium",children:"15/03/2024 17:30"})]}),e.jsxs("div",{className:"flex justify-between py-2",children:[e.jsx("span",{className:"text-muted-foreground",children:"🇯🇵 Tóquio (UTC+9)"}),e.jsx("span",{className:"font-medium",children:"16/03/2024 02:30"})]})]})]})]})}function v(){return e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs(s,{className:"p-4 flex items-center gap-3",children:[e.jsx("span",{className:"text-2xl",children:"🇧🇷"}),e.jsxs("div",{children:[e.jsxs("div",{className:"font-medium flex items-center gap-2",children:["Português (Brasil)",e.jsx(t,{variant:"secondary",children:"Padrão"})]}),e.jsx("code",{className:"text-xs text-muted-foreground",children:"pt-BR"})]})]}),e.jsxs(s,{className:"p-4 flex items-center gap-3",children:[e.jsx("span",{className:"text-2xl",children:"🇺🇸"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:"English (US)"}),e.jsx("code",{className:"text-xs text-muted-foreground",children:"en-US"})]})]}),e.jsxs(s,{className:"p-4 flex items-center gap-3",children:[e.jsx("span",{className:"text-2xl",children:"🇪🇸"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:"Español (España)"}),e.jsx("code",{className:"text-xs text-muted-foreground",children:"es-ES"})]})]})]})}function T(){return e.jsx(l,{title:"Internacionalização (i18n)",description:"Sistema de internacionalização com namespaces core/app. A lib fornece traduções base no namespace 'core' (lib/i18n/locales/). Projetos consumidores injetam suas traduções no namespace 'app' via prop appTranslations do CoreProviders. Resolução: app → core → fallback pt-BR.",component:e.jsx(u,{}),usage:`// ===== PROJETO CONSUMIDOR: SETUP COMPLETO =====
|
|
21
|
+
|
|
22
|
+
// 1. Criar arquivos de tradução do projeto
|
|
23
|
+
// src/i18n/pt-BR.json
|
|
24
|
+
// { "objective": "Objetivo", "key_result": "Resultado-chave" }
|
|
25
|
+
|
|
26
|
+
// 2. Importar e passar para CoreProviders
|
|
27
|
+
import { CoreProviders } from 'forlogic-core';
|
|
28
|
+
import ptBR from './i18n/pt-BR.json';
|
|
29
|
+
// import enUS from './i18n/en-US.json'; // quando tiver
|
|
30
|
+
|
|
31
|
+
function App() {
|
|
32
|
+
return (
|
|
33
|
+
<CoreProviders
|
|
34
|
+
moduleAlias="performance"
|
|
35
|
+
appTranslations={{
|
|
36
|
+
'pt-BR': ptBR,
|
|
37
|
+
// 'en-US': enUS,
|
|
38
|
+
}}
|
|
39
|
+
>
|
|
40
|
+
<BrowserRouter>
|
|
41
|
+
<Routes />
|
|
42
|
+
</BrowserRouter>
|
|
43
|
+
</CoreProviders>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// 3. Usar traduções nos componentes
|
|
48
|
+
import { useTranslation } from 'forlogic-core';
|
|
49
|
+
|
|
50
|
+
function MyComponent() {
|
|
51
|
+
const { t } = useTranslation();
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div>
|
|
55
|
+
{/* Busca em 'app' (projeto) → encontra */}
|
|
56
|
+
<h1>{t('objective')}</h1>
|
|
57
|
+
|
|
58
|
+
{/* Busca em 'app' → não encontra → fallback 'core' (lib) */}
|
|
59
|
+
<Button>{t('save')}</Button>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
}`,examples:[{title:"Resolução de Namespaces (core/app)",description:"O t() busca primeiro no namespace app (projeto), depois no core (lib). Isso permite que o projeto sobrescreva traduções da lib.",preview:e.jsx(x,{}),code:`// Configuração interna (lib/i18n/config.ts):
|
|
63
|
+
i18n.init({
|
|
64
|
+
resources: {
|
|
65
|
+
'pt-BR': { core: ptBR }, // lib/i18n/locales/pt-BR.json
|
|
66
|
+
'en-US': { core: enUS },
|
|
67
|
+
'es-ES': { core: esES },
|
|
68
|
+
},
|
|
69
|
+
defaultNS: 'app', // t('key') busca primeiro aqui
|
|
70
|
+
fallbackNS: 'core', // se não encontrar, busca aqui
|
|
71
|
+
ns: ['core'],
|
|
72
|
+
fallbackLng: 'pt-BR',
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// O CoreProviders injeta traduções do projeto no namespace 'app':
|
|
76
|
+
export function addAppTranslations(lang: string, translations: Record<string, string>) {
|
|
77
|
+
i18n.addResourceBundle(lang, 'app', translations, true, true);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Resultado:
|
|
81
|
+
// t('save') → app.save || core.save → "Salvar"
|
|
82
|
+
// t('objective') → app.objective → "Objetivo"
|
|
83
|
+
// t('save', 'Fallback') → safety net se nenhum namespace tiver a chave`},{title:"Setup do Projeto Consumidor",description:"Apenas 3 passos: criar JSONs, passar para CoreProviders, e usar t(). Sem tabela Supabase, sem await, sem configuração extra.",preview:e.jsx(j,{}),code:`// ===== PASSO 1: Criar JSONs de tradução =====
|
|
84
|
+
// src/i18n/pt-BR.json
|
|
85
|
+
{
|
|
86
|
+
"objective": "Objetivo",
|
|
87
|
+
"key_result": "Resultado-chave",
|
|
88
|
+
"cycle": "Ciclo",
|
|
89
|
+
"progress": "Progresso"
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ===== PASSO 2: Passar para CoreProviders =====
|
|
93
|
+
// src/App.tsx
|
|
94
|
+
import { CoreProviders } from 'forlogic-core';
|
|
95
|
+
import ptBR from './i18n/pt-BR.json';
|
|
96
|
+
|
|
97
|
+
function App() {
|
|
98
|
+
return (
|
|
99
|
+
<CoreProviders
|
|
100
|
+
moduleAlias="performance"
|
|
101
|
+
appTranslations={{ 'pt-BR': ptBR }}
|
|
102
|
+
>
|
|
103
|
+
<BrowserRouter>
|
|
104
|
+
<Routes />
|
|
105
|
+
</BrowserRouter>
|
|
106
|
+
</CoreProviders>
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// ===== PASSO 3: Usar t() normalmente =====
|
|
111
|
+
import { useTranslation } from 'forlogic-core';
|
|
112
|
+
// ❌ NUNCA: import { useTranslation } from 'react-i18next';
|
|
113
|
+
|
|
114
|
+
function MeuComponente() {
|
|
115
|
+
const { t } = useTranslation();
|
|
116
|
+
return <h1>{t('objective')}</h1>; // "Objetivo"
|
|
117
|
+
}`},{title:"Estrutura de Arquivos",description:"JSONs por idioma no formato flat — compatível com Tolgee CLI para futuro gerenciamento externo de traduções",preview:e.jsx(h,{}),code:`// Formato dos JSONs (flat, sem nesting):
|
|
118
|
+
// lib/i18n/locales/pt-BR.json (namespace core — lib)
|
|
119
|
+
{
|
|
120
|
+
"save": "Salvar",
|
|
121
|
+
"cancel": "Cancelar",
|
|
122
|
+
"delete": "Excluir",
|
|
123
|
+
"confirm": "Confirmar",
|
|
124
|
+
"loading": "Carregando..."
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/i18n/pt-BR.json (namespace app — projeto)
|
|
128
|
+
{
|
|
129
|
+
"objective": "Objetivo",
|
|
130
|
+
"key_result": "Resultado-chave",
|
|
131
|
+
"cycle": "Ciclo"
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Suporta interpolação:
|
|
135
|
+
// { "hello_user": "Olá, {{name}}!" }
|
|
136
|
+
// t('hello_user', { name: 'João' }) → "Olá, João!"
|
|
137
|
+
|
|
138
|
+
// Futuro: Tolgee CLI para sincronizar
|
|
139
|
+
// tolgee pull --path src/i18n/`},{title:"Idiomas Suportados",description:"O sistema suporta 3 idiomas com fallback automático para português",preview:e.jsx(v,{}),code:`// Idiomas configurados em lib/i18n/config.ts
|
|
140
|
+
// fallbackLng: 'pt-BR' — sempre cai para português se não encontrar
|
|
141
|
+
|
|
142
|
+
// Prioridade de resolução para t('save'):
|
|
143
|
+
// 1. Idioma atual, namespace 'app' (projeto)
|
|
144
|
+
// 2. Idioma atual, namespace 'core' (lib)
|
|
145
|
+
// 3. fallbackLng 'pt-BR', namespace 'app'
|
|
146
|
+
// 4. fallbackLng 'pt-BR', namespace 'core'
|
|
147
|
+
// 5. Retorna a própria chave: "save"`},{title:"useI18nFormatters Hook",description:"Hook RECOMENDADO para formatação de datas. Converte automaticamente para o timezone do usuário.",preview:e.jsx(f,{}),code:`import { useI18nFormatters } from 'forlogic-core';
|
|
148
|
+
|
|
149
|
+
function ActivityLog() {
|
|
150
|
+
const { formatDatetime, formatDate } = useI18nFormatters();
|
|
151
|
+
|
|
152
|
+
const createdAt = "2024-03-15T17:30:00Z"; // UTC
|
|
153
|
+
|
|
154
|
+
return (
|
|
155
|
+
<div>
|
|
156
|
+
<p>Criado em: {formatDatetime(createdAt)}</p>
|
|
157
|
+
{/* → "15/03/2024 14:30" (Brasília UTC-3) */}
|
|
158
|
+
|
|
159
|
+
<p>Data: {formatDate(createdAt)}</p>
|
|
160
|
+
{/* → "15 de mar. de 2024" */}
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}`},{title:"Constantes Centralizadas",description:"Todas as opções de localização estão centralizadas em lib/i18n/constants.ts",preview:e.jsxs(s,{className:"p-4 space-y-3",children:[e.jsx("h4",{className:"font-medium",children:"Constantes exportadas:"}),e.jsxs("div",{className:"text-sm space-y-2",children:[e.jsxs("p",{children:["• ",e.jsx("code",{children:"SUPPORTED_LOCALES"})," - pt-BR, en-US, es-ES"]}),e.jsxs("p",{children:["• ",e.jsx("code",{children:"DATETIME_FORMATS"})," - 6 formatos de data/hora"]}),e.jsxs("p",{children:["• ",e.jsx("code",{children:"TIMEZONES"})," - 12 fusos horários"]}),e.jsxs("p",{children:["• ",e.jsx("code",{children:"DEFAULT_*"})," - Valores padrão (fallback)"]}),e.jsxs("p",{children:["• ",e.jsx("code",{children:"detectBrowserPreferences()"})," - Detecta do navegador"]})]})]}),code:`import {
|
|
164
|
+
SUPPORTED_LOCALES, DATETIME_FORMATS, TIMEZONES,
|
|
165
|
+
DEFAULT_LOCALE, DEFAULT_DATETIME_FORMAT, DEFAULT_TIMEZONE,
|
|
166
|
+
detectBrowserLocale, detectBrowserTimezone,
|
|
167
|
+
} from 'forlogic-core';`}],props:[{name:"appTranslations",type:"Record<string, Record<string, string>>",default:"-",description:"Prop do CoreProviders. Mapa de idioma → traduções do projeto. Injetadas no namespace app."},{name:"addAppTranslations",type:"(lang, translations) => void",default:"-",description:"Helper para injetar traduções no namespace app manualmente (alternativa ao CoreProviders)."},{name:"useTranslation",type:"hook",default:"-",description:"Hook principal. Retorna { t, i18n }. SEMPRE importar de forlogic-core, NUNCA de react-i18next."},{name:"useLocale",type:"hook",default:"-",description:"Hook para acessar locale fixo em pt-BR (futuramente via API externa)."},{name:"useI18nFormatters",type:"hook",default:"-",description:"Hook RECOMENDADO para formatação de datas respeitando timezone do usuário."},{name:"SUPPORTED_LOCALES",type:"const",default:"-",description:"Array com locales suportados: pt-BR, en-US, es-ES."},{name:"DEFAULT_LOCALE",type:"const",default:"pt-BR",description:"Locale padrão de fallback."}],accessibility:["Traduções são carregadas de forma síncrona (sem loading/flash)","Fallback automático: app → core → pt-BR → chave","Projetos consumidores podem sobrescrever traduções da lib","Padrão t('key', 'Fallback') continua como safety net"],notes:["**Namespaces**: defaultNS = `app` (projeto), fallbackNS = `core` (lib). O t() busca automaticamente nos dois.","**Import obrigatório**: Sempre importar `useTranslation` de `forlogic-core`, NUNCA de `react-i18next` (evita conflito de instâncias).",'**Formato**: JSONs flat por idioma (`{ "key": "value" }`), compatível com Tolgee CLI.',"**CoreProviders**: Usar prop `appTranslations` é a forma recomendada de injetar traduções do projeto.","**Sem Supabase**: Traduções são estáticas, carregadas via import — sem dependência de rede ou banco."]})}export{T as I18nDoc};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{r as i,j as o,f7 as a,aR as c}from"./index-DkiftrvI.js";import{C as m}from"./ComponentDocTemplate-CQbBhfvZ.js";import{L as n}from"./lucide-react-Cp3Yw3Zm.js";import"./ExampleCard-DuLrb3t-.js";import"./pin-DVsSl8QA.js";import"./building-DeVappnD.js";import"./hash-cQWdKjya.js";import"./blocks-B6LrJeAM.js";import"./calendar-days-BQ0na5kM.js";import"./check-check-C_-PJCJa.js";import"./circle-plus-CpIcep-O.js";import"./circle-x-jPpBPew0.js";import"./clipboard-list-CXNPdciZ.js";import"./cloud-upload-BEjzumjl.js";import"./life-buoy-ByXiPddz.js";import"./share-2-Dv8Do445.js";import"./crown-CqNsQIsm.js";import"./file-braces-DFb5X9so.js";import"./file-pen-line-CyUGKkEN.js";import"./git-branch-BcXv9mpp.js";import"./globe-CpMIWAcv.js";import"./shield-x-DJTRfVux.js";import"./hourglass-BahQ3eDv.js";import"./package-B3-pVvPM.js";import"./smartphone-BSNR60L7.js";import"./pen-Bi_lmmKT.js";import"./printer-BnJ8B6m-.js";import"./server-CtzFTfKR.js";import"./shield-check-CFXjOV_w.js";import"./text-align-start-qE-MbYYw.js";import"./thumbs-up-D_XIW_uX.js";import"./trash-DTWQwpwA.js";import"./trending-up-jip5-leJ.js";import"./user-check-BlH3EDWK.js";import"./user-plus-BqwXwD-c.js";function O(){const[e,t]=i.useState("Star"),r=n[e]||c;return o.jsx(m,{title:"Icon Picker",description:"Seletor de ícones da biblioteca Lucide React com busca integrada.",component:o.jsxs("div",{className:"w-[300px]",children:[o.jsx(a,{value:e,onChange:t,label:"Escolha um ícone"}),o.jsxs("div",{className:"mt-4 p-4 rounded-md border bg-card flex items-center gap-3",children:[o.jsx(r,{className:"h-6 w-6 text-primary"}),o.jsxs("p",{className:"font-medium",children:["Ícone selecionado: ",e]})]})]}),usage:`import { IconPicker } from "forlogic-core"
|
|
2
|
+
import { useState } from 'react'
|
|
3
|
+
|
|
4
|
+
const [icon, setIcon] = useState('Star')
|
|
5
|
+
|
|
6
|
+
<IconPicker
|
|
7
|
+
value={icon}
|
|
8
|
+
onChange={setIcon}
|
|
9
|
+
label="Escolha um ícone"
|
|
10
|
+
/>`,props:[{name:"value",type:"string",default:"Star",description:"Nome do ícone selecionado (Lucide React)."},{name:"onChange",type:"(iconName: string) => void",default:"-",description:"Callback quando o ícone é alterado."},{name:"label",type:"string",default:"-",description:"Label opcional para o campo."}],accessibility:["Busca por nome do ícone","Grid acessível por teclado","Títulos descritivos em cada ícone","Indicador visual de seleção","Scroll area com navegação adequada"]})}export{O as IconPickerDoc};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as m,j as e,B as y,
|
|
1
|
+
import{r as m,j as e,B as y,a as c,b as d,c as i,e as n,K as S,d as o,x as N,aP as k,aQ as T,aR as L,aS as u,aT as P,aU as v,Y as E}from"./index-DkiftrvI.js";import{L as H,S as D}from"./lucide-react-Cp3Yw3Zm.js";import{G as M}from"./life-buoy-ByXiPddz.js";import"./pin-DVsSl8QA.js";import"./building-DeVappnD.js";import"./hash-cQWdKjya.js";import"./blocks-B6LrJeAM.js";import"./calendar-days-BQ0na5kM.js";import"./check-check-C_-PJCJa.js";import"./circle-plus-CpIcep-O.js";import"./circle-x-jPpBPew0.js";import"./clipboard-list-CXNPdciZ.js";import"./cloud-upload-BEjzumjl.js";import"./share-2-Dv8Do445.js";import"./crown-CqNsQIsm.js";import"./file-braces-DFb5X9so.js";import"./file-pen-line-CyUGKkEN.js";import"./git-branch-BcXv9mpp.js";import"./globe-CpMIWAcv.js";import"./shield-x-DJTRfVux.js";import"./hourglass-BahQ3eDv.js";import"./package-B3-pVvPM.js";import"./smartphone-BSNR60L7.js";import"./pen-Bi_lmmKT.js";import"./printer-BnJ8B6m-.js";import"./server-CtzFTfKR.js";import"./shield-check-CFXjOV_w.js";import"./text-align-start-qE-MbYYw.js";import"./thumbs-up-D_XIW_uX.js";import"./trash-DTWQwpwA.js";import"./trending-up-jip5-leJ.js";import"./user-check-BlH3EDWK.js";import"./user-plus-BqwXwD-c.js";const z=["createLucideIcon","default","icons","Icon","LucideIcon","IconNode","LucideProps","createElement"];function ue(){const[x,w]=m.useState(""),[C,g]=m.useState(null),[r,j]=m.useState(1),f=120,h=m.useMemo(()=>Object.entries(H).filter(([s,t])=>!(z.includes(s)||!t||typeof t!="function"&&typeof t!="object"||s.startsWith("Lucide")||typeof t=="object"&&!("$$typeof"in t))).map(([s,t])=>({name:s,Icon:t})),[]),p=m.useMemo(()=>{if(!x.trim())return h;const s=x.toLowerCase();return h.filter(({name:t})=>t.toLowerCase().includes(s))},[h,x]);m.useMemo(()=>{j(1)},[x]);const a=Math.ceil(p.length/f),b=m.useMemo(()=>{const s=(r-1)*f;return p.slice(s,s+f)},[p,r]),I=s=>{const t=`import { ${s} } from 'lucide-react';`;navigator.clipboard.writeText(t),g(s),E.success(`Import de ${s} copiado!`),setTimeout(()=>g(null),2e3)};return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Ícones"}),e.jsx("p",{className:"text-lg text-muted-foreground mb-2",children:"Biblioteca completa de ícones usando Lucide React - uma biblioteca de ícones open-source com mais de 1400 ícones em SVG."}),e.jsxs("div",{className:"flex items-center gap-2 mt-4",children:[e.jsxs(y,{variant:"secondary",children:[h.length," ícones disponíveis"]}),e.jsx(y,{variant:"outline",children:"lucide-react"})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Galeria de Ícones"}),e.jsxs(n,{children:["Clique em um ícone para copiar o import. Mostrando ",b.length," de ",p.length," ícones",p.length!==h.length&&` (${h.length} total)`,"."]}),e.jsx("div",{className:"mt-4 flex items-center gap-4",children:e.jsx(S,{type:"text",placeholder:"Buscar ícones...",value:x,onChange:s=>w(s.target.value),className:"max-w-sm"})})]}),e.jsxs(o,{className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-6 sm:grid-cols-8 md:grid-cols-10 lg:grid-cols-12 gap-2",children:b.map(({name:s,Icon:t})=>e.jsxs("button",{onClick:()=>I(s),className:`flex flex-col items-center justify-center p-3 rounded-md border hover:bg-accent hover:border-primary transition-all group ${C===s?"bg-primary/10 border-primary":""}`,title:s,children:[e.jsx(t,{className:"h-5 w-5 group-hover:text-primary transition-colors"}),e.jsx("span",{className:"text-[9px] mt-1.5 text-muted-foreground truncate w-full text-center",children:s.length>8?`${s.slice(0,8)}...`:s})]},s))}),p.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(D,{className:"h-12 w-12 mb-4"}),e.jsxs("p",{children:['Nenhum ícone encontrado para "',x,'"']})]}),a>1&&e.jsxs("div",{className:"flex items-center justify-center gap-2 pt-4 border-t",children:[e.jsx(N,{variant:"outline",size:"sm",onClick:()=>j(s=>Math.max(1,s-1)),disabled:r===1,children:e.jsx(k,{className:"h-4 w-4"})}),e.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:Math.min(5,a)},(s,t)=>{let l;return a<=5||r<=3?l=t+1:r>=a-2?l=a-4+t:l=r-2+t,e.jsx(N,{variant:r===l?"default":"outline",size:"sm",onClick:()=>j(l),className:"w-8",children:l},l)})}),e.jsx(N,{variant:"outline",size:"sm",onClick:()=>j(s=>Math.min(a,s+1)),disabled:r===a,children:e.jsx(T,{className:"h-4 w-4"})}),e.jsxs("span",{className:"text-sm text-muted-foreground ml-2",children:["Página ",r," de ",a]})]})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Instalação"}),e.jsx(n,{children:"Como instalar e usar a biblioteca de ícones"})]}),e.jsxs(o,{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold mb-2",children:"1. Instalação"}),e.jsx("pre",{className:"bg-muted p-3 rounded-md text-sm overflow-x-auto",children:"npm install lucide-react"})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold mb-2",children:"2. Importação Individual (Recomendado)"}),e.jsx("pre",{className:"bg-muted p-3 rounded-md text-sm overflow-x-auto",children:`import { Home, Settings, User, Search } from 'lucide-react';
|
|
2
2
|
|
|
3
3
|
function MyComponent() {
|
|
4
4
|
return (
|
|
@@ -16,18 +16,18 @@ function DynamicIcon({ name, ...props }: { name: keyof typeof icons }) {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
// Uso
|
|
19
|
-
<DynamicIcon name="Home" className="h-5 w-5" />`})]})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(
|
|
19
|
+
<DynamicIcon name="Home" className="h-5 w-5" />`})]})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Propriedades"}),e.jsx(n,{children:"Props disponíveis para todos os ícones"})]}),e.jsx(o,{children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b",children:[e.jsx("th",{className:"text-left py-2 pr-4 font-semibold",children:"Prop"}),e.jsx("th",{className:"text-left py-2 pr-4 font-semibold",children:"Tipo"}),e.jsx("th",{className:"text-left py-2 pr-4 font-semibold",children:"Default"}),e.jsx("th",{className:"text-left py-2 font-semibold",children:"Descrição"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"size"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"number"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"24"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"Tamanho do ícone em pixels"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"color"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"string"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"currentColor"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"Cor do ícone"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"strokeWidth"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"number"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"2"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"Espessura do traço"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"absoluteStrokeWidth"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"boolean"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"false"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"Se verdadeiro, a espessura não escala com o tamanho"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"className"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"string"}),e.jsx("td",{className:"py-2 pr-4 text-muted-foreground",children:"-"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"Classes CSS (preferido para estilização)"})]})]})]})})})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Tamanhos"}),e.jsx(n,{children:"Exemplos de diferentes tamanhos de ícones"})]}),e.jsxs(o,{children:[e.jsx("div",{className:"flex items-end gap-6 flex-wrap",children:[16,20,24,32,40,48].map(s=>e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(L,{size:s,className:"text-primary"}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s,"px"]})]},s))}),e.jsx("pre",{className:"bg-muted p-3 rounded-md text-sm mt-4 overflow-x-auto",children:`<Star size={16} />
|
|
20
20
|
<Star className="h-5 w-5" /> {/* 20px - Tailwind */}
|
|
21
21
|
<Star className="h-6 w-6" /> {/* 24px - Default */}
|
|
22
22
|
<Star size={32} />
|
|
23
23
|
<Star className="h-10 w-10" /> {/* 40px */}
|
|
24
|
-
<Star size={48} />`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(
|
|
24
|
+
<Star size={48} />`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Cores"}),e.jsx(n,{children:"Use classes Tailwind para definir cores semânticas"})]}),e.jsxs(o,{children:[e.jsxs("div",{className:"flex items-center gap-6 flex-wrap",children:[e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"default"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8 text-primary"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"primary"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8 text-muted-foreground"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"muted"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8 text-destructive"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"destructive"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8 text-success"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"success"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(u,{className:"h-8 w-8 text-warning"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"warning"})]})]}),e.jsx("pre",{className:"bg-muted p-3 rounded-md text-sm mt-4 overflow-x-auto",children:`<Heart className="h-8 w-8" /> {/* currentColor */}
|
|
25
25
|
<Heart className="h-8 w-8 text-primary" /> {/* cor primária */}
|
|
26
26
|
<Heart className="h-8 w-8 text-muted-foreground" /> {/* cor muted */}
|
|
27
27
|
<Heart className="h-8 w-8 text-destructive" /> {/* cor de erro */}
|
|
28
28
|
<Heart className="h-8 w-8 text-success" /> {/* cor de sucesso */}
|
|
29
|
-
<Heart className="h-8 w-8 text-warning" /> {/* cor de aviso */}`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(
|
|
29
|
+
<Heart className="h-8 w-8 text-warning" /> {/* cor de aviso */}`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Espessura do Traço"}),e.jsx(n,{children:"Personalize a espessura do traço dos ícones"})]}),e.jsxs(o,{children:[e.jsx("div",{className:"flex items-center gap-6 flex-wrap",children:[1,1.5,2,2.5,3].map(s=>e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(P,{size:32,strokeWidth:s,className:"text-primary"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:s})]},s))}),e.jsx("pre",{className:"bg-muted p-3 rounded-md text-sm mt-4 overflow-x-auto",children:`<Circle strokeWidth={1} /> {/* fino */}
|
|
30
30
|
<Circle strokeWidth={1.5} /> {/* leve */}
|
|
31
31
|
<Circle strokeWidth={2} /> {/* padrão */}
|
|
32
32
|
<Circle strokeWidth={2.5} /> {/* médio */}
|
|
33
|
-
<Circle strokeWidth={3} /> {/* grosso */}`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(
|
|
33
|
+
<Circle strokeWidth={3} /> {/* grosso */}`})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Boas Práticas"}),e.jsx(n,{children:"Diretrizes para uso consistente de ícones"})]}),e.jsxs(o,{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold mb-2 text-green-600 dark:text-green-400",children:"✅ Faça"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1 text-sm text-muted-foreground",children:[e.jsx("li",{children:"Use importações individuais para melhor tree-shaking"}),e.jsxs("li",{children:["Prefira ",e.jsx("code",{className:"text-xs bg-muted px-1 py-0.5 rounded",children:"className"})," para estilização via Tailwind"]}),e.jsx("li",{children:"Use tamanhos consistentes em contextos similares (h-4 w-4 para botões, h-5 w-5 para menus)"}),e.jsx("li",{children:"Use cores semânticas do design system (text-primary, text-muted-foreground)"}),e.jsxs("li",{children:["Adicione ",e.jsx("code",{className:"text-xs bg-muted px-1 py-0.5 rounded",children:'aria-hidden="true"'})," para ícones decorativos"]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold mb-2 text-red-600 dark:text-red-400",children:"❌ Não Faça"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1 text-sm text-muted-foreground",children:[e.jsxs("li",{children:["Não importe todos os ícones com ",e.jsx("code",{className:"text-xs bg-muted px-1 py-0.5 rounded",children:"import * as Icons"})]}),e.jsxs("li",{children:["Não use cores hardcoded como ",e.jsx("code",{className:"text-xs bg-muted px-1 py-0.5 rounded",children:'color="#ff0000"'})]}),e.jsx("li",{children:"Não misture tamanhos inconsistentes na mesma interface"}),e.jsx("li",{children:"Não use ícones sem texto ou label para ações importantes"})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold mb-2",children:"Padrões de Tamanho Recomendados"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b",children:[e.jsx("th",{className:"text-left py-2 pr-4 font-semibold",children:"Contexto"}),e.jsx("th",{className:"text-left py-2 pr-4 font-semibold",children:"Classe Tailwind"}),e.jsx("th",{className:"text-left py-2 font-semibold",children:"Tamanho"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4",children:"Botões pequenos"}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"h-3.5 w-3.5"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"14px"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4",children:"Botões e inputs"}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"h-4 w-4"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"16px"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4",children:"Menus e listas"}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"h-5 w-5"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"20px"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"py-2 pr-4",children:"Headers e destaque"}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"h-6 w-6"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"24px"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-2 pr-4",children:"Empty states"}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:"h-12 w-12"}),e.jsx("td",{className:"py-2 text-muted-foreground",children:"48px"})]})]})]})})]})]})]}),e.jsxs(c,{children:[e.jsxs(d,{children:[e.jsx(i,{children:"Links Úteis"}),e.jsx(n,{children:"Recursos adicionais da biblioteca Lucide"})]}),e.jsx(o,{children:e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsxs("a",{href:"https://lucide.dev/icons",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 text-sm text-primary hover:underline",children:[e.jsx(v,{className:"h-4 w-4"}),"Catálogo Oficial"]}),e.jsxs("a",{href:"https://lucide.dev/guide/packages/lucide-react",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 text-sm text-primary hover:underline",children:[e.jsx(v,{className:"h-4 w-4"}),"Documentação React"]}),e.jsxs("a",{href:"https://github.com/lucide-icons/lucide",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 text-sm text-primary hover:underline",children:[e.jsx(M,{className:"h-4 w-4"}),"GitHub"]})]})})]})]})}export{ue as IconsFoundationDoc};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as d,j as e,
|
|
1
|
+
import{r as d,j as e,o as m,K as s,x as N,M as w,aZ as G,J as a,b0 as h,d7 as C,a1 as v,ee as A,ew as S,dZ as L,bs as b,dp as F,e0 as k,dD as E,aX as T,a$ as B}from"./index-DkiftrvI.js";import{C as D}from"./ComponentDocTemplate-CQbBhfvZ.js";import{D as P,A as V,H as q}from"./hash-cQWdKjya.js";import"./ExampleCard-DuLrb3t-.js";const t=d.forwardRef(({className:l,...i},n)=>e.jsx("div",{ref:n,"data-slot":"input-group",className:m("flex min-w-0 items-center rounded-md border border-input bg-background","focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background","has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50","has-[textarea:disabled]:cursor-not-allowed has-[textarea:disabled]:opacity-50",l),...i}));t.displayName="InputGroup";const z=G("flex items-center justify-center text-sm text-muted-foreground shrink-0",{variants:{align:{"inline-start":"border-r border-input px-3","inline-end":"border-l border-input px-3","block-start":"border-b border-input px-3 py-2 w-full justify-start","block-end":"border-t border-input px-3 py-2 w-full justify-start"}},defaultVariants:{align:"inline-start"}}),o=d.forwardRef(({className:l,align:i,...n},p)=>e.jsx("div",{ref:p,"data-slot":"input-group-addon",className:m(z({align:i}),l),...n}));o.displayName="InputGroupAddon";const M=G("",{variants:{size:{xs:"h-6 px-2 text-xs","icon-xs":"h-6 w-6",sm:"h-7 px-3 text-xs","icon-sm":"h-7 w-7"}},defaultVariants:{size:"xs"}}),c=d.forwardRef(({className:l,size:i,variant:n="ghost",...p},x)=>e.jsx(N,{ref:x,"data-slot":"input-group-button",variant:n,className:m(M({size:i}),"rounded-none first:rounded-l-md last:rounded-r-md",l),...p}));c.displayName="InputGroupButton";const r=d.forwardRef(({className:l,...i},n)=>e.jsx(s,{ref:n,"data-slot":"input-group-control",className:m("flex-1 border-0 bg-transparent shadow-none","focus-visible:ring-0 focus-visible:ring-offset-0",l),...i}));r.displayName="InputGroupInput";const j=d.forwardRef(({className:l,...i},n)=>e.jsx(w,{ref:n,"data-slot":"input-group-control",className:m("flex-1 border-0 bg-transparent shadow-none resize-none","focus-visible:ring-0 focus-visible:ring-offset-0",l),...i}));j.displayName="InputGroupTextarea";const R=`import { Input, Label } from "forlogic-core"
|
|
2
2
|
|
|
3
3
|
// Input básico
|
|
4
4
|
<Input placeholder="Digite algo..." />
|
|
@@ -16,7 +16,7 @@ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "
|
|
|
16
16
|
<InputGroupAddon align="inline-start">https://</InputGroupAddon>
|
|
17
17
|
<InputGroupInput placeholder="exemplo.com" />
|
|
18
18
|
<InputGroupAddon align="inline-end">.com.br</InputGroupAddon>
|
|
19
|
-
</InputGroup>`;function
|
|
19
|
+
</InputGroup>`;function W(){const[l,i]=d.useState(!1),[n,p]=d.useState(!1),[x,f]=d.useState(""),[g,I]=d.useState(""),y=()=>{p(!0),setTimeout(()=>p(!1),1e3)};return e.jsx(D,{title:"Input",description:"Campo de entrada de texto com suporte a todos os tipos HTML. Inclui Label para rótulos acessíveis e InputGroup para agrupar inputs com addons de prefixo, sufixo, ícones e botões.",component:e.jsx(s,{placeholder:"Digite algo...",className:"max-w-sm"}),usage:R,examples:[{title:"Tipos de Input",description:"Suporta todos os tipos HTML nativos com estilização consistente",preview:e.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-lg",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"text-example",children:"Texto"}),e.jsx(s,{type:"text",id:"text-example",placeholder:"Nome completo"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"email-example",children:"Email"}),e.jsx(s,{type:"email",id:"email-example",placeholder:"email@exemplo.com"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"password-example",children:"Senha"}),e.jsx(s,{type:"password",id:"password-example",placeholder:"••••••••"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"number-example",children:"Número"}),e.jsx(s,{type:"number",id:"number-example",placeholder:"0"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"tel-example",children:"Telefone"}),e.jsx(s,{type:"tel",id:"tel-example",placeholder:"(11) 99999-9999"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"url-example",children:"URL"}),e.jsx(s,{type:"url",id:"url-example",placeholder:"https://..."})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"date-example",children:"Data"}),e.jsx(s,{type:"date",id:"date-example"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{htmlFor:"search-example",children:"Busca"}),e.jsx(s,{type:"search",id:"search-example",placeholder:"Pesquisar..."})]})]}),code:`<Input type="text" placeholder="Nome completo" />
|
|
20
20
|
<Input type="email" placeholder="email@exemplo.com" />
|
|
21
21
|
<Input type="password" placeholder="••••••••" />
|
|
22
22
|
<Input type="number" placeholder="0" />
|
|
@@ -136,7 +136,7 @@ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "
|
|
|
136
136
|
<Copy className="h-4 w-4" />
|
|
137
137
|
<span className="ml-1">Copiar</span>
|
|
138
138
|
</InputGroupButton>
|
|
139
|
-
</InputGroup>`},{title:"InputGroup - Combinações Avançadas",description:"Combine múltiplos addons, ícones e botões para casos complexos",preview:e.jsxs("div",{className:"flex flex-col gap-4 max-w-md",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{children:"Preço em dólares"}),e.jsxs(t,{children:[e.jsx(o,{align:"inline-start",children:e.jsx(
|
|
139
|
+
</InputGroup>`},{title:"InputGroup - Combinações Avançadas",description:"Combine múltiplos addons, ícones e botões para casos complexos",preview:e.jsxs("div",{className:"flex flex-col gap-4 max-w-md",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{children:"Preço em dólares"}),e.jsxs(t,{children:[e.jsx(o,{align:"inline-start",children:e.jsx(P,{className:"h-4 w-4"})}),e.jsx(r,{type:"number",placeholder:"0.00",step:"0.01"}),e.jsx(o,{align:"inline-end",children:"USD"})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{children:"Verificar usuário"}),e.jsxs(t,{children:[e.jsx(o,{align:"inline-start",children:e.jsx(V,{className:"h-4 w-4"})}),e.jsx(r,{placeholder:"username"}),e.jsx(c,{variant:"default",size:"sm",children:"Verificar"})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(a,{children:"Código de referência"}),e.jsxs(t,{children:[e.jsx(o,{align:"inline-start",children:e.jsx(q,{className:"h-4 w-4"})}),e.jsx(o,{align:"inline-start",children:"REF-"}),e.jsx(r,{placeholder:"0000",maxLength:4}),e.jsx(c,{variant:"outline",size:"sm",children:"Gerar"})]})]})]}),code:`// Preço com ícone e unidade
|
|
140
140
|
<InputGroup>
|
|
141
141
|
<InputGroupAddon align="inline-start">
|
|
142
142
|
<DollarSign className="h-4 w-4" />
|
|
@@ -208,4 +208,4 @@ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "
|
|
|
208
208
|
</InputGroup>
|
|
209
209
|
</div>
|
|
210
210
|
<Button type="submit" className="w-full">Enviar</Button>
|
|
211
|
-
</form>`}],props:[{name:"type",type:"string",default:'"text"',description:'Tipo do input HTML: "text", "email", "password", "number", "tel", "url", "search", "date", "time", etc.'},{name:"placeholder",type:"string",default:"-",description:"Texto de placeholder exibido quando o campo está vazio."},{name:"value",type:"string | number",default:"-",description:"Valor controlado do input."},{name:"defaultValue",type:"string | number",default:"-",description:"Valor inicial para input não controlado."},{name:"disabled",type:"boolean",default:"false",description:"Se o input está desabilitado (não editável e não envia no form)."},{name:"readOnly",type:"boolean",default:"false",description:"Se o input é somente leitura (não editável mas envia no form)."},{name:"required",type:"boolean",default:"false",description:"Se o campo é obrigatório para submissão do formulário."},{name:"maxLength",type:"number",default:"-",description:"Número máximo de caracteres permitidos."},{name:"minLength",type:"number",default:"-",description:"Número mínimo de caracteres necessários."},{name:"pattern",type:"string",default:"-",description:"Regex para validação do valor (HTML5)."},{name:"autoComplete",type:"string",default:"-",description:'Dica de autocompletar: "off", "email", "name", "tel", etc.'},{name:"autoFocus",type:"boolean",default:"false",description:"Se o input deve receber foco automaticamente ao montar."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para customização."},{name:"onChange",type:"(e: ChangeEvent) => void",default:"-",description:"Callback chamado quando o valor muda."},{name:"onBlur",type:"(e: FocusEvent) => void",default:"-",description:"Callback chamado quando o input perde foco."},{name:"onFocus",type:"(e: FocusEvent) => void",default:"-",description:"Callback chamado quando o input recebe foco."}],notes:["**Label**: Componente de rótulo acessível. Use `htmlFor` para associar ao `id` do input.","**InputGroup**: Container que agrupa input com addons. Adiciona borda unificada e foco visual compartilhado.","**InputGroupInput**: Input estilizado para uso dentro do InputGroup (remove bordas próprias).","**InputGroupTextarea**: Textarea estilizado para uso com addons `block-start` ou `block-end`.","**InputGroupAddon**: Elemento decorativo (texto, ícone). Props: `align`: `inline-start` (prefixo), `inline-end` (sufixo), `block-start` (topo), `block-end` (base).","**InputGroupButton**: Botão integrado ao InputGroup. Props: `size`: `xs`, `sm`, `icon-xs`, `icon-sm`. Aceita todas as `variant` do Button.","Para validação de formulários, use react-hook-form com FormField, FormControl e FormMessage.","Para estados de erro, adicione as classes `border-destructive focus-visible:ring-destructive` ao Input."],accessibility:["Sempre associe Label ao Input usando htmlFor/id para melhor navegação com leitores de tela","Use placeholder como dica adicional, nunca como substituto do Label","O estado disabled é comunicado automaticamente para tecnologias assistivas","O estado required é comunicado e valida automaticamente no submit","InputGroup mantém foco visual unificado (ring) quando qualquer elemento interno está focado","Indicadores de foco visíveis atendem WCAG 2.4.7 (Focus Visible)","Inputs são totalmente navegáveis via teclado (Tab, Shift+Tab)","Para campos de senha, forneça toggle de visibilidade com ícone descritivo","Mensagens de erro devem ser associadas ao input via aria-describedby para leitores de tela"]})}export{
|
|
211
|
+
</form>`}],props:[{name:"type",type:"string",default:'"text"',description:'Tipo do input HTML: "text", "email", "password", "number", "tel", "url", "search", "date", "time", etc.'},{name:"placeholder",type:"string",default:"-",description:"Texto de placeholder exibido quando o campo está vazio."},{name:"value",type:"string | number",default:"-",description:"Valor controlado do input."},{name:"defaultValue",type:"string | number",default:"-",description:"Valor inicial para input não controlado."},{name:"disabled",type:"boolean",default:"false",description:"Se o input está desabilitado (não editável e não envia no form)."},{name:"readOnly",type:"boolean",default:"false",description:"Se o input é somente leitura (não editável mas envia no form)."},{name:"required",type:"boolean",default:"false",description:"Se o campo é obrigatório para submissão do formulário."},{name:"maxLength",type:"number",default:"-",description:"Número máximo de caracteres permitidos."},{name:"minLength",type:"number",default:"-",description:"Número mínimo de caracteres necessários."},{name:"pattern",type:"string",default:"-",description:"Regex para validação do valor (HTML5)."},{name:"autoComplete",type:"string",default:"-",description:'Dica de autocompletar: "off", "email", "name", "tel", etc.'},{name:"autoFocus",type:"boolean",default:"false",description:"Se o input deve receber foco automaticamente ao montar."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para customização."},{name:"onChange",type:"(e: ChangeEvent) => void",default:"-",description:"Callback chamado quando o valor muda."},{name:"onBlur",type:"(e: FocusEvent) => void",default:"-",description:"Callback chamado quando o input perde foco."},{name:"onFocus",type:"(e: FocusEvent) => void",default:"-",description:"Callback chamado quando o input recebe foco."}],notes:["**Label**: Componente de rótulo acessível. Use `htmlFor` para associar ao `id` do input.","**InputGroup**: Container que agrupa input com addons. Adiciona borda unificada e foco visual compartilhado.","**InputGroupInput**: Input estilizado para uso dentro do InputGroup (remove bordas próprias).","**InputGroupTextarea**: Textarea estilizado para uso com addons `block-start` ou `block-end`.","**InputGroupAddon**: Elemento decorativo (texto, ícone). Props: `align`: `inline-start` (prefixo), `inline-end` (sufixo), `block-start` (topo), `block-end` (base).","**InputGroupButton**: Botão integrado ao InputGroup. Props: `size`: `xs`, `sm`, `icon-xs`, `icon-sm`. Aceita todas as `variant` do Button.","Para validação de formulários, use react-hook-form com FormField, FormControl e FormMessage.","Para estados de erro, adicione as classes `border-destructive focus-visible:ring-destructive` ao Input."],accessibility:["Sempre associe Label ao Input usando htmlFor/id para melhor navegação com leitores de tela","Use placeholder como dica adicional, nunca como substituto do Label","O estado disabled é comunicado automaticamente para tecnologias assistivas","O estado required é comunicado e valida automaticamente no submit","InputGroup mantém foco visual unificado (ring) quando qualquer elemento interno está focado","Indicadores de foco visíveis atendem WCAG 2.4.7 (Focus Visible)","Inputs são totalmente navegáveis via teclado (Tab, Shift+Tab)","Para campos de senha, forneça toggle de visibilidade com ícone descritivo","Mensagens de erro devem ser associadas ao input via aria-describedby para leitores de tela"]})}export{W as InputDoc};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as e,
|
|
1
|
+
import{j as e,J as a,K as s,m as i}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function d(){return e.jsx(l,{title:"Label",description:"Renderiza uma label acessível associada a controles de formulário.",component:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{id:"terms-main"}),e.jsx(a,{htmlFor:"terms-main",children:"Aceitar termos e condições"})]}),usage:`import { Label } from "forlogic-core"
|
|
2
2
|
|
|
3
3
|
<Label htmlFor="email">Email</Label>
|
|
4
4
|
<Input id="email" type="email" />`,examples:[{title:"Com Input",description:"Label associada a um campo de texto.",preview:e.jsxs("div",{className:"grid w-full max-w-sm gap-1.5",children:[e.jsx(a,{htmlFor:"email",children:"Email"}),e.jsx(s,{id:"email",type:"email",placeholder:"seu@email.com"})]}),code:`<div className="grid gap-1.5">
|
|
@@ -39,4 +39,4 @@ import{j as e,L as a,I as s,e as i}from"./index-CE0k7Rdh.js";import{C as l}from"
|
|
|
39
39
|
<Input id="phone" type="tel" />
|
|
40
40
|
<p className="text-xs text-muted-foreground">Opcional</p>
|
|
41
41
|
</div>
|
|
42
|
-
</div>`}],props:[{name:"htmlFor",type:"string",default:"-",description:"O id do controle de formulário para associar."},{name:"className",type:"string",default:"-",description:"Classes CSS para estilização."},{name:"children",type:"ReactNode",default:"-",description:"Conteúdo da label."}],accessibility:["Associa adequadamente com controles de formulário via htmlFor","Clicar na label foca automaticamente o input associado","Suporte completo para leitores de tela","Compatível com WCAG - melhora a área de clique","Use com Checkbox/Radio para melhor UX"],notes:["Sempre associe Labels a seus campos via htmlFor/id","Use o componente Label (não <label>) para formulários acessíveis","Indique campos obrigatórios com asterisco ou texto descritivo","Labels aumentam a área de clique para inputs (especialmente útil em mobile)","Adicione cursor-pointer quando associada a checkboxes/radios","Combine com texto de ajuda abaixo do input para instruções adicionais"]})}export{
|
|
42
|
+
</div>`}],props:[{name:"htmlFor",type:"string",default:"-",description:"O id do controle de formulário para associar."},{name:"className",type:"string",default:"-",description:"Classes CSS para estilização."},{name:"children",type:"ReactNode",default:"-",description:"Conteúdo da label."}],accessibility:["Associa adequadamente com controles de formulário via htmlFor","Clicar na label foca automaticamente o input associado","Suporte completo para leitores de tela","Compatível com WCAG - melhora a área de clique","Use com Checkbox/Radio para melhor UX"],notes:["Sempre associe Labels a seus campos via htmlFor/id","Use o componente Label (não <label>) para formulários acessíveis","Indique campos obrigatórios com asterisco ou texto descritivo","Labels aumentam a área de clique para inputs (especialmente útil em mobile)","Adicione cursor-pointer quando associada a checkboxes/radios","Combine com texto de ajuda abaixo do input para instruções adicionais"]})}export{d as LabelDoc};
|