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.
Files changed (309) hide show
  1. package/.note/memory/patterns/single-scroll-pattern.md +30 -12
  2. package/README.md +0 -46
  3. package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +18 -0
  4. package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +18 -0
  5. package/dist/action-plans/components/ActionPlanCostTab.d.ts +10 -0
  6. package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +18 -0
  7. package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +13 -0
  8. package/dist/action-plans/components/ActionPlanPage.d.ts +25 -0
  9. package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +10 -0
  10. package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +13 -0
  11. package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
  12. package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +11 -0
  13. package/dist/action-plans/constants.d.ts +42 -0
  14. package/dist/action-plans/hooks/useActionPlan.d.ts +14 -0
  15. package/dist/action-plans/hooks/useActionPlanProgress.d.ts +15 -0
  16. package/dist/action-plans/index.d.ts +15 -0
  17. package/dist/action-plans/types.d.ts +353 -0
  18. package/dist/action-plans/utils/formatTime.d.ts +15 -0
  19. package/dist/approval-flow/components/ApprovalSidenav.d.ts +16 -0
  20. package/dist/approval-flow/components/ApproveDialog.d.ts +13 -0
  21. package/dist/approval-flow/components/SelectApproverDialog.d.ts +11 -0
  22. package/dist/approval-flow/index.d.ts +4 -0
  23. package/dist/approval-flow/types.d.ts +76 -0
  24. package/dist/assets/AccordionDoc-CGNlubG3.js +31 -0
  25. package/dist/assets/{ActionButtonDoc-DLJ_K9ib.js → ActionButtonDoc-CYtkXR0k.js} +2 -2
  26. package/dist/assets/ActionPlanDoc-BSuPRftQ.js +65 -0
  27. package/dist/assets/{AlertDoc-CY1ybZeG.js → AlertDoc-Cpvxneqg.js} +7 -7
  28. package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +189 -0
  29. package/dist/assets/AppHeaderDoc-DNQErj_t.js +74 -0
  30. package/dist/assets/AppSidebarDoc-DkeQarDu.js +221 -0
  31. package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +31 -0
  32. package/dist/assets/AuditLogDoc-BBvNcHIo.js +67 -0
  33. package/dist/assets/AuditTrailDoc-DgFHO-uo.js +17 -0
  34. package/dist/assets/AuthDoc-WIA_Aetl.js +200 -0
  35. package/dist/assets/{AvatarDoc-BLdMoyJd.js → AvatarDoc-B6go1C1T.js} +2 -2
  36. package/dist/assets/{BadgeDoc-CSNM1b6b.js → BadgeDoc-BONhfqB_.js} +2 -2
  37. package/dist/assets/BaseFormDoc-CuyUArcj.js +169 -0
  38. package/dist/assets/{BodyContentDoc-Bp6YmUWX.js → BodyContentDoc-CterHC1E.js} +2 -2
  39. package/dist/assets/{BreadcrumbDoc-D7tqqTvo.js → BreadcrumbDoc-Dwn9nLeO.js} +2 -2
  40. package/dist/assets/{ButtonDoc-C4JwIvU3.js → ButtonDoc-BOjRseZT.js} +2 -2
  41. package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +7 -0
  42. package/dist/assets/{CalendarDoc-COlEKqmv.js → CalendarDoc-CMwIEqgT.js} +3 -3
  43. package/dist/assets/{CardDoc-BVhMoC2w.js → CardDoc-BZz1CVg2.js} +2 -2
  44. package/dist/assets/ChartDoc-B5vZVtqD.js +76 -0
  45. package/dist/assets/{CheckboxDoc-Bcqpln9_.js → CheckboxDoc-lAbYO9I5.js} +2 -2
  46. package/dist/assets/ColorPickerDoc-Dpsprp4N.js +10 -0
  47. package/dist/assets/{ColorsFoundationDoc-uO6IiJbS.js → ColorsFoundationDoc-CCHeSL3p.js} +1 -1
  48. package/dist/assets/ComboTreeDoc-D4dTkIt-.js +46 -0
  49. package/dist/assets/ComboboxDoc-CqqZPvZq.js +134 -0
  50. package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +1 -0
  51. package/dist/assets/{ContextMenuDoc-C4-_0NLp.js → ContextMenuDoc-D3jC-MVA.js} +2 -2
  52. package/dist/assets/{ContextsDoc-Cj9Aaoyo.js → ContextsDoc-XFH0-JdS.js} +30 -3
  53. package/dist/assets/{CreateCrudPageDoc-D_SnMRJ2.js → CreateCrudPageDoc-CpuiWI-g.js} +2 -2
  54. package/dist/assets/{CrudActionBarDoc-BYqtIabp.js → CrudActionBarDoc-wuBGXD9Y.js} +4 -4
  55. package/dist/assets/CrudGridDoc-BYWqSXBH.js +85 -0
  56. package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +14 -0
  57. package/dist/assets/{CrudPrimitivesDoc-BRS86nWg.js → CrudPrimitivesDoc-CxaTB94A.js} +4 -4
  58. package/dist/assets/{CrudTableDoc-Daw8u2G_.js → CrudTableDoc-Dga1VgCu.js} +5 -5
  59. package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +33 -0
  60. package/dist/assets/DashboardFormDoc-BUDCmrMl.js +49 -0
  61. package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +71 -0
  62. package/dist/assets/DashboardGridDoc-BavePiRF.js +49 -0
  63. package/dist/assets/DashboardListDoc-CLyMA6UK.js +37 -0
  64. package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +35 -0
  65. package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +60 -0
  66. package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +62 -0
  67. package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +75 -0
  68. package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +83 -0
  69. package/dist/assets/DashboardViewDoc-CtlCNlEF.js +45 -0
  70. package/dist/assets/DataListDoc-DUy88lCQ.js +13 -0
  71. package/dist/assets/DesignSystemHome-DHl9YtbH.js +1 -0
  72. package/dist/assets/{DialogDoc-DCpRy4rg.js → DialogDoc-CMQqnTV-.js} +2 -2
  73. package/dist/assets/{DropdownMenuDoc-DT6LBa8Z.js → DropdownMenuDoc-S7X9csGt.js} +5 -5
  74. package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +57 -0
  75. package/dist/assets/{EmptyStateDoc-wydc09gG.js → EmptyStateDoc-CHGCiGIk.js} +2 -2
  76. package/dist/assets/{EnvironmentsDoc-amIriwDD.js → EnvironmentsDoc-DZHJZ2nm.js} +4 -4
  77. package/dist/assets/{ErrorBoundaryDoc-BEixy_Gl.js → ErrorBoundaryDoc-DoaAg68p.js} +2 -2
  78. package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +1 -0
  79. package/dist/assets/ExampleAppDoc-DzIU81Fn.js +1 -0
  80. package/dist/assets/ExampleCard-DuLrb3t-.js +1 -0
  81. package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +1 -0
  82. package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +1 -0
  83. package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +1 -0
  84. package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +1 -0
  85. package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +1 -0
  86. package/dist/assets/FileUploadDoc-9-UujFNX.js +34 -0
  87. package/dist/assets/FilterBar-DDTqqUfZ.js +1 -0
  88. package/dist/assets/{FormDoc-DxoRt6p7.js → FormDoc-CVES6n3d.js} +2 -2
  89. package/dist/assets/{FoundationOverview-CxSbumIt.js → FoundationOverview-DT0u11Gz.js} +1 -1
  90. package/dist/assets/{GridDoc-BpQqCMUE.js → GridDoc-CbHFSILF.js} +2 -2
  91. package/dist/assets/{HooksDoc-JNODhbaF.js → HooksDoc-Ctxdk6Wq.js} +5 -5
  92. package/dist/assets/{HoverCardDoc-CdqiYrIb.js → HoverCardDoc-8Wkaafdj.js} +2 -2
  93. package/dist/assets/I18nDoc-D3Q2m7ik.js +167 -0
  94. package/dist/assets/IconPickerDoc-DZ26Gdpg.js +10 -0
  95. package/dist/assets/{IconsFoundationDoc-CrymfxTI.js → IconsFoundationDoc-xOxtC7CW.js} +5 -5
  96. package/dist/assets/{InputDoc-BK-SdpJ7.js → InputDoc-BhztAiuJ.js} +4 -4
  97. package/dist/assets/{LabelDoc-DHvgzhaJ.js → LabelDoc-A4hmTRRV.js} +2 -2
  98. package/dist/assets/LeadershipDoc-CqOSfWsP.js +452 -0
  99. package/dist/assets/{MediaDoc-B_vqnf72.js → MediaDoc-C78gvC8p.js} +2 -2
  100. package/dist/assets/MenubarDoc-DCnmd2tO.js +165 -0
  101. package/dist/assets/{ModuleAccessDoc-Nuxb4S27.js → ModuleAccessDoc-CmD5nHDp.js} +2 -2
  102. package/dist/assets/{ModulesDialogDoc-iJWLkOZo.js → ModulesDialogDoc-DVit1CA-.js} +2 -2
  103. package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +34 -0
  104. package/dist/assets/NavigationMenuDoc-q1fbc89j.js +116 -0
  105. package/dist/assets/{OnboardingDialogDoc-xBL-rXeZ.js → OnboardingDialogDoc-3A3eBYrq.js} +2 -2
  106. package/dist/assets/{PaginationDoc-DqtRgXnF.js → PaginationDoc-B8-bMz5J.js} +2 -2
  107. package/dist/assets/{PaginationDoc-CfvwxCMe.js → PaginationDoc-BkGdxHL3.js} +5 -5
  108. package/dist/assets/{PlacesDoc-nckioEzg.js → PlacesDoc-CKPO6ATs.js} +2 -2
  109. package/dist/assets/{PopoverDoc-C3o2CZCT.js → PopoverDoc-CJPU4Ags.js} +3 -3
  110. package/dist/assets/{ProgressDoc-BmWBNMPA.js → ProgressDoc-CpjbTL4o.js} +2 -2
  111. package/dist/assets/{QualiexUserFieldDoc-CE1e4mx6.js → QualiexUserFieldDoc-DDwumlRw.js} +2 -2
  112. package/dist/assets/{RadioGroupDoc-DMZH6NmR.js → RadioGroupDoc-D6tSZz8G.js} +2 -2
  113. package/dist/assets/{RadiusDoc-BOZD3gPV.js → RadiusDoc-B4xSnajw.js} +1 -1
  114. package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +15 -0
  115. package/dist/assets/{RequiredFieldsCounterDoc-CG-lmSSy.js → RequiredFieldsCounterDoc-COesoSdx.js} +2 -2
  116. package/dist/assets/ResizableDoc-CW0-XQuB.js +104 -0
  117. package/dist/assets/{RichTextEditorDoc-m50ll-Od.js → RichTextEditorDoc-C8c_XA9P.js} +2 -2
  118. package/dist/assets/{ScrollAreaDoc-BzJ-APXo.js → ScrollAreaDoc-BxtoAPaZ.js} +2 -2
  119. package/dist/assets/{SecurityDoc-B34gVeiV.js → SecurityDoc-wOVqpg2F.js} +2 -2
  120. package/dist/assets/{SelectDoc-DXRv7QHK.js → SelectDoc-C75gtY9D.js} +2 -2
  121. package/dist/assets/{SeparatorDoc-DcNh8k0P.js → SeparatorDoc-BjQBPB1P.js} +2 -2
  122. package/dist/assets/{ServicesDoc-8aXBd6yg.js → ServicesDoc-CXTctwBl.js} +3 -3
  123. package/dist/assets/ShadowsDoc-C6Lw8_x2.js +9 -0
  124. package/dist/assets/SignDoc-Bh5ZUg5x.js +66 -0
  125. package/dist/assets/{SkeletonDoc-BWgqgbDY.js → SkeletonDoc-rTLGK5VE.js} +8 -8
  126. package/dist/assets/SliderDoc-JMAMDub7.js +41 -0
  127. package/dist/assets/{SpacingDoc-BzburM-r.js → SpacingDoc-RljOrpwA.js} +1 -1
  128. package/dist/assets/{SplitButtonDoc-BYUysmJp.js → SplitButtonDoc-CvShUW3w.js} +3 -3
  129. package/dist/assets/{StepSelectorDoc-PB1k4v7F.js → StepSelectorDoc-C-nAap9H.js} +2 -2
  130. package/dist/assets/{SwitchDoc-BLOG6kfj.js → SwitchDoc-DLnqmkPr.js} +2 -2
  131. package/dist/assets/{TableDoc-Dwcs-lop.js → TableDoc-B8EpWLVg.js} +2 -2
  132. package/dist/assets/{TabsDoc-Ovkh8ArV.js → TabsDoc-DIBtl_uC.js} +2 -2
  133. package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +10 -0
  134. package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +16 -0
  135. package/dist/assets/{TextareaDoc-DsBYxmbr.js → TextareaDoc-DGnqMqEC.js} +4 -4
  136. package/dist/assets/{ToastDoc-BbZaFE_A.js → ToastDoc-DjYyc7ae.js} +4 -4
  137. package/dist/assets/{ToggleDoc-C28vbvhp.js → ToggleDoc-C9ZOVjkY.js} +2 -2
  138. package/dist/assets/{TooltipDoc-DL5cnLak.js → TooltipDoc-BEx4l9-i.js} +7 -7
  139. package/dist/assets/{TruncatedCellDoc-BuDA8QcY.js → TruncatedCellDoc-BbV1bRSY.js} +2 -2
  140. package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +7 -0
  141. package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +29 -0
  142. package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +18 -0
  143. package/dist/assets/{UtilitiesDoc-CrQhyEfz.js → UtilitiesDoc-DGxaHVV1.js} +2 -2
  144. package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +1 -0
  145. package/dist/assets/{blocks-DO93nPjs.js → blocks-B6LrJeAM.js} +1 -1
  146. package/dist/assets/building-DeVappnD.js +1 -0
  147. package/dist/assets/{calendar-days-cMfwBSZx.js → calendar-days-BQ0na5kM.js} +1 -1
  148. package/dist/assets/check-check-C_-PJCJa.js +1 -0
  149. package/dist/assets/circle-plus-CpIcep-O.js +1 -0
  150. package/dist/assets/{circle-x-BVAVJ_oz.js → circle-x-jPpBPew0.js} +1 -1
  151. package/dist/assets/clipboard-list-CXNPdciZ.js +1 -0
  152. package/dist/assets/cloud-upload-BEjzumjl.js +1 -0
  153. package/dist/assets/{crown-B2MTZDnM.js → crown-CqNsQIsm.js} +1 -1
  154. package/dist/assets/date-picker-BW3eGOe_.js +1 -0
  155. package/dist/assets/disabled-menu-item-C2YaMvSt.js +1 -0
  156. package/dist/assets/{drawer-oTqCOtsC.js → drawer-D5rflIcD.js} +2 -2
  157. package/dist/assets/file-braces-DFb5X9so.js +1 -0
  158. package/dist/assets/{file-pen-line-CXv-Eye-.js → file-pen-line-CyUGKkEN.js} +1 -1
  159. package/dist/assets/{git-branch-V6-h6P9K.js → git-branch-BcXv9mpp.js} +1 -1
  160. package/dist/assets/{globe-CaUBIJU8.js → globe-CpMIWAcv.js} +1 -1
  161. package/dist/assets/{hash-B4MTXppl.js → hash-cQWdKjya.js} +1 -1
  162. package/dist/assets/hourglass-BahQ3eDv.js +1 -0
  163. package/dist/assets/hover-card-R66N85sZ.js +1 -0
  164. package/dist/assets/iframe-dialog-V0mW5aBb.js +1 -0
  165. package/dist/assets/index-DkiftrvI.js +352 -0
  166. package/dist/assets/index-nmBjO9Th.css +1 -0
  167. package/dist/assets/index.d.ts +1 -0
  168. package/dist/assets/{life-buoy-BRndExxh.js → life-buoy-ByXiPddz.js} +1 -1
  169. package/dist/assets/loading-state-Cb5_t5uE.js +1 -0
  170. package/dist/assets/lucide-react-Cp3Yw3Zm.js +1 -0
  171. package/dist/assets/{package-3G45ARQh.js → package-B3-pVvPM.js} +1 -1
  172. package/dist/assets/{pen-BYSSwjK4.js → pen-Bi_lmmKT.js} +1 -1
  173. package/dist/assets/pin-DVsSl8QA.js +1 -0
  174. package/dist/assets/printer-BnJ8B6m-.js +1 -0
  175. package/dist/assets/radio-group-BHAaNGsm.js +1 -0
  176. package/dist/assets/{server-p0Sb0mKI.js → server-CtzFTfKR.js} +1 -1
  177. package/dist/assets/{share-2-D-ZhCCq2.js → share-2-Dv8Do445.js} +1 -1
  178. package/dist/assets/shield-check-CFXjOV_w.js +1 -0
  179. package/dist/assets/{shield-x-Q7hAXWsG.js → shield-x-DJTRfVux.js} +1 -1
  180. package/dist/assets/slider-v9tXBSnB.js +1 -0
  181. package/dist/assets/smartphone-BSNR60L7.js +1 -0
  182. package/dist/assets/step-selector-ATTh_9Wa.js +1 -0
  183. package/dist/assets/{text-align-start-6aYQqbX4.js → text-align-start-qE-MbYYw.js} +1 -1
  184. package/dist/assets/thumbs-up-D_XIW_uX.js +1 -0
  185. package/dist/assets/{trash-DveAOiLF.js → trash-DTWQwpwA.js} +1 -1
  186. package/dist/assets/trending-up-jip5-leJ.js +1 -0
  187. package/dist/assets/{useMockCrud-GY0KxHXr.js → useMockCrud-CN4vjyOZ.js} +1 -1
  188. package/dist/assets/{user-check-CoGNBfIk.js → user-check-BlH3EDWK.js} +1 -1
  189. package/dist/assets/{user-plus-Bad2xWIT.js → user-plus-BqwXwD-c.js} +1 -1
  190. package/dist/audit-trail/components/AuditTrailDetails.d.ts +17 -0
  191. package/dist/audit-trail/components/AuditTrailFilter.d.ts +19 -0
  192. package/dist/audit-trail/components/AuditTrailPage.d.ts +30 -0
  193. package/dist/audit-trail/index.d.ts +9 -0
  194. package/dist/audit-trail/types.d.ts +151 -0
  195. package/dist/audit-trail/utils.d.ts +38 -0
  196. package/dist/components/dashboards/dashboard-form.d.ts +50 -0
  197. package/dist/components/dashboards/dashboard-general-view.d.ts +109 -0
  198. package/dist/components/dashboards/dashboard-grid.d.ts +41 -0
  199. package/dist/components/dashboards/dashboard-list.d.ts +31 -0
  200. package/dist/components/dashboards/dashboard-panel-renderer.d.ts +21 -0
  201. package/dist/components/dashboards/dashboard-view.d.ts +38 -0
  202. package/dist/components/dashboards/helpers.d.ts +47 -0
  203. package/dist/components/dashboards/index.d.ts +9 -0
  204. package/dist/components/dashboards/panels/burndown-panel.d.ts +26 -0
  205. package/dist/components/dashboards/panels/cartesian-panel.d.ts +46 -0
  206. package/dist/components/dashboards/panels/index.d.ts +14 -0
  207. package/dist/components/dashboards/panels/list-panel.d.ts +30 -0
  208. package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +49 -0
  209. package/dist/components/dashboards/panels/numeric-panel.d.ts +22 -0
  210. package/dist/components/dashboards/panels/panel-error.d.ts +8 -0
  211. package/dist/components/dashboards/panels/panel-header.d.ts +17 -0
  212. package/dist/components/dashboards/panels/panel-loader.d.ts +7 -0
  213. package/dist/components/dashboards/panels/panel-no-data.d.ts +6 -0
  214. package/dist/components/dashboards/panels/panel-unavailable.d.ts +6 -0
  215. package/dist/components/dashboards/panels/pareto-panel.d.ts +20 -0
  216. package/dist/components/dashboards/panels/performance-panel.d.ts +24 -0
  217. package/dist/components/dashboards/panels/pie-panel.d.ts +19 -0
  218. package/dist/components/dashboards/panels/text-panel.d.ts +18 -0
  219. package/dist/components/dashboards/types.d.ts +525 -0
  220. package/dist/components/ui/button.d.ts +1 -1
  221. package/dist/components/ui/electronic-signature-dialog.d.ts +21 -0
  222. package/dist/components/ui/export-dialog.d.ts +28 -0
  223. package/dist/components/ui/iframe-dialog.d.ts +14 -0
  224. package/dist/components/ui/multiselect-permissions.d.ts +59 -0
  225. package/dist/components/ui/online-editor-dialog.d.ts +18 -0
  226. package/dist/components/ui/report-request-list.d.ts +44 -0
  227. package/dist/components/ui/resizable.d.ts +1 -1
  228. package/dist/components/ui/stimulsoft-viewer.d.ts +20 -0
  229. package/dist/components/ui/terms-of-use-dialog.d.ts +56 -0
  230. package/dist/components/ui/timepicker.d.ts +11 -0
  231. package/dist/components/ui/users-groups-selector.d.ts +44 -0
  232. package/dist/components/ui/viewer-dialog.d.ts +77 -0
  233. package/dist/custom-form-fields/components/CustomFormFields.d.ts +8 -0
  234. package/dist/custom-form-fields/fields/FormDateField.d.ts +6 -0
  235. package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +6 -0
  236. package/dist/custom-form-fields/fields/FormNumericField.d.ts +6 -0
  237. package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +6 -0
  238. package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +6 -0
  239. package/dist/custom-form-fields/fields/FormTextField.d.ts +6 -0
  240. package/dist/custom-form-fields/fields/FormTimeField.d.ts +6 -0
  241. package/dist/custom-form-fields/fields/FormUrlField.d.ts +6 -0
  242. package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +6 -0
  243. package/dist/custom-form-fields/index.d.ts +13 -0
  244. package/dist/custom-form-fields/types.d.ts +143 -0
  245. package/dist/exports/action-plans.d.ts +16 -0
  246. package/dist/exports/audit-trail.d.ts +1 -0
  247. package/dist/exports/custom-form-fields.d.ts +1 -0
  248. package/dist/exports/file-upload.d.ts +1 -0
  249. package/dist/exports/ui.d.ts +12 -0
  250. package/dist/file-upload/components/SingleFileUpload.d.ts +43 -0
  251. package/dist/file-upload/index.d.ts +6 -0
  252. package/dist/file-upload/types.d.ts +11 -0
  253. package/dist/file-upload/utils/formatBytes.d.ts +1 -0
  254. package/dist/file-upload/utils/getFileExtension.d.ts +1 -0
  255. package/dist/hooks/useSidebarResize.d.ts +1 -1
  256. package/dist/index.css +1 -1
  257. package/dist/index.css.map +1 -1
  258. package/dist/index.d.ts +7 -0
  259. package/dist/index.esm.js +1 -1
  260. package/dist/index.html +9 -11
  261. package/dist/index.js +1 -1
  262. package/dist/setup/favicon.d.ts +1 -0
  263. package/dist/team-selector/components/TeamSelector.d.ts +24 -0
  264. package/dist/team-selector/index.d.ts +2 -0
  265. package/dist/team-selector/types.d.ts +10 -0
  266. package/docs/ICON_MIGRATION_GUIDE.md +177 -0
  267. package/docs/PUBLISH.md +3 -3
  268. package/package.json +1 -5
  269. package/dist/README.md +0 -1079
  270. package/dist/assets/AccordionDoc-BVPUJk8G.js +0 -31
  271. package/dist/assets/AppHeaderDoc-Crkw4dA9.js +0 -67
  272. package/dist/assets/AppSidebarDoc-ET-4j6wV.js +0 -204
  273. package/dist/assets/AuthDoc-B4v4Nci5.js +0 -192
  274. package/dist/assets/BaseFormDoc-DXiYuN6-.js +0 -169
  275. package/dist/assets/ButtonGroupDoc-QFfjC7Pm.js +0 -7
  276. package/dist/assets/ChartDoc-BJ14EjI2.js +0 -111
  277. package/dist/assets/ColorPickerDoc-CcfmSwyC.js +0 -10
  278. package/dist/assets/ComboTreeDoc-R4qE6XwB.js +0 -46
  279. package/dist/assets/ComboboxDoc-JIo_-gSN.js +0 -134
  280. package/dist/assets/ComponentDocTemplate-CRbRY-v5.js +0 -1
  281. package/dist/assets/CrudGridDoc-DspxQrq5.js +0 -85
  282. package/dist/assets/CrudOverviewDoc-DLcOL_HZ.js +0 -14
  283. package/dist/assets/DataListDoc-BrgVNhhR.js +0 -13
  284. package/dist/assets/DesignSystemHome-BFBNqq1J.js +0 -1
  285. package/dist/assets/I18nDoc-B6LMXnE3.js +0 -232
  286. package/dist/assets/IconPickerDoc-BRdy58IC.js +0 -10
  287. package/dist/assets/LeadershipDoc-DRiB0spL.js +0 -416
  288. package/dist/assets/MenubarDoc-Zvgczxe2.js +0 -165
  289. package/dist/assets/NavigationMenuDoc-CeWun1VF.js +0 -116
  290. package/dist/assets/ResizableDoc-CqGkv6Cd.js +0 -104
  291. package/dist/assets/ShadowsDoc-Brl4hIDI.js +0 -9
  292. package/dist/assets/SignDoc-BdwerR-2.js +0 -66
  293. package/dist/assets/SliderDoc-E-NjbYVk.js +0 -41
  294. package/dist/assets/TypographyFoundationDoc-CPdH4PHa.js +0 -7
  295. package/dist/assets/circle-plus-D3NftMzS.js +0 -1
  296. package/dist/assets/date-picker-zhJU-_kM.js +0 -1
  297. package/dist/assets/disabled-menu-item-C16xsaVs.js +0 -1
  298. package/dist/assets/hover-card-DEuucfxP.js +0 -1
  299. package/dist/assets/index-CE0k7Rdh.js +0 -312
  300. package/dist/assets/index-Cx3adT_u.css +0 -1
  301. package/dist/assets/lucide-react-t7dCa4lv.js +0 -1
  302. package/dist/assets/monitor-Dg3HKTSE.js +0 -1
  303. package/dist/assets/pin-CMYagNhs.js +0 -1
  304. package/dist/assets/radio-group-BVun_Tmt.js +0 -1
  305. package/dist/assets/step-selector-DHxgT2FL.js +0 -1
  306. package/dist/bin/bootstrap.js +0 -40
  307. package/dist/bin/pull-docs.js +0 -186
  308. package/dist/docs/KNOWLEDGE.md +0 -109
  309. package/dist/leadership/components/LeaderRow.d.ts +0 -9
@@ -0,0 +1,200 @@
1
+ import{j as e,a,e0 as s,dn as o,B as i,x as t,aK as r,dw as n,aN as d,a8 as c,dV as l}from"./index-DkiftrvI.js";import{C as u}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function m(){return e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-4",children:[e.jsxs(a,{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(c,{className:"h-5 w-5 text-green-500"})}),e.jsx("h4",{className:"font-semibold",children:"AuthProvider"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Context provider que gerencia estado de autenticação global"})]}),e.jsxs(a,{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-blue-500/10",children:e.jsx(s,{className:"h-5 w-5 text-blue-500"})}),e.jsx("h4",{className:"font-semibold",children:"ProtectedRoute"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Componente que protege rotas e redireciona usuários não autenticados"})]}),e.jsxs(a,{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(l,{className:"h-5 w-5 text-orange-500"})}),e.jsx("h4",{className:"font-semibold",children:"TokenManager"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Gerenciador de tokens JWT com validação e refresh automático"})]}),e.jsxs(a,{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-purple-500/10",children:e.jsx(o,{className:"h-5 w-5 text-purple-500"})}),e.jsx("h4",{className:"font-semibold",children:"Multi-Tenant"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Suporte a múltiplas unidades/empresas com troca dinâmica"})]})]})})}function p(){return e.jsxs(a,{className:"p-4 space-y-3",children:[e.jsx("h4",{className:"font-medium",children:"Estado de Autenticação (AuthState):"}),e.jsxs("div",{className:"text-sm space-y-2",children:[e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"user"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"User | null"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"companies"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Company[]"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"alias"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"string | null"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"isAuthenticated"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"boolean"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"isLoading"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"boolean"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"selectedUnit"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"SelectedUnit | null"})]}),e.jsxs("div",{className:"flex justify-between py-1 border-b",children:[e.jsx("code",{className:"text-xs",children:"placeId / placeName"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"string | null"})]}),e.jsxs("div",{className:"flex justify-between py-1",children:[e.jsx("code",{className:"text-xs",children:"activePlaceId / activePlaceName"}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"string | null"})]})]})]})}function x(){return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-primary text-primary-foreground text-sm font-medium",children:"1"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-medium text-sm",children:"Usuário acessa rota protegida"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"ProtectedRoute verifica isAuthenticated"})]})]}),e.jsx("div",{className:"w-8 border-l-2 border-dashed h-4 ml-4"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-primary text-primary-foreground text-sm font-medium",children:"2"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-medium text-sm",children:"Redirecionamento para OAuth"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Dev: Token local | Prod: Qualiex OAuth"})]})]}),e.jsx("div",{className:"w-8 border-l-2 border-dashed h-4 ml-4"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-primary text-primary-foreground text-sm font-medium",children:"3"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-medium text-sm",children:"Callback processa tokens"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"CallbackPage valida e armazena tokens"})]})]}),e.jsx("div",{className:"w-8 border-l-2 border-dashed h-4 ml-4"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 rounded-full bg-green-500 text-white text-sm font-medium",children:"✓"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-medium text-sm",children:"Usuário autenticado"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Token Supabase gerado, dados carregados"})]})]})]})}function v(){return e.jsx(u,{title:"Autenticação (Auth)",description:"Sistema completo de autenticação OAuth integrado com Qualiex. Inclui gerenciamento de tokens, rotas protegidas, suporte multi-tenant e troca de unidades.",installation:`import {
2
+ useAuth,
3
+ AuthProvider,
4
+ ProtectedRoute,
5
+ LoginPage,
6
+ CallbackPage
7
+ } from 'forlogic-core';`,component:e.jsx(m,{}),usage:`// App.tsx - Setup básico
8
+ import { CoreProviders, ProtectedRoute } from 'forlogic-core';
9
+ import { BrowserRouter, Routes, Route } from 'react-router-dom';
10
+
11
+ function App() {
12
+ return (
13
+ <CoreProviders>
14
+ <BrowserRouter>
15
+ <Routes>
16
+ <Route path="/callback" element={<CallbackPage />} />
17
+ <Route path="/login" element={<LoginPage />} />
18
+ <Route
19
+ path="/*"
20
+ element={
21
+ <ProtectedRoute>
22
+ <MainApp />
23
+ </ProtectedRoute>
24
+ }
25
+ />
26
+ </Routes>
27
+ </BrowserRouter>
28
+ </CoreProviders>
29
+ );
30
+ }`,examples:[{title:"useAuth Hook",description:"Hook principal para acessar dados de autenticação e funções de controle.",preview:e.jsx(p,{}),code:`import { useAuth } from 'forlogic-core';
31
+
32
+ function UserProfile() {
33
+ const {
34
+ user, // Dados do usuário logado
35
+ alias, // Alias da empresa/unidade ativa
36
+ companies, // Lista de empresas disponíveis
37
+ selectedUnit, // Unidade atualmente selecionada
38
+ isAuthenticated, // true se está logado
39
+ isLoading, // true durante inicialização
40
+ logout, // Função para fazer logout
41
+ switchUnit, // Função para trocar de unidade
42
+ placeId, // ID do local do usuário
43
+ placeName, // Nome do local do usuário
44
+ } = useAuth();
45
+
46
+ if (isLoading) return <div>Carregando...</div>;
47
+ if (!isAuthenticated) return <div>Não autenticado</div>;
48
+
49
+ return (
50
+ <div>
51
+ <p>Olá, {user?.name}</p>
52
+ <p>Empresa: {selectedUnit?.name} ({alias})</p>
53
+ <p>Local: {placeName}</p>
54
+ <button onClick={logout}>Sair</button>
55
+ </div>
56
+ );
57
+ }`},{title:"Fluxo de Autenticação",description:"Sequência completa desde acesso até autenticação.",preview:e.jsx(x,{}),code:`// O fluxo é gerenciado automaticamente:
58
+
59
+ // 1. ProtectedRoute detecta usuário não autenticado
60
+ // 2. AuthService.loginProd() redireciona para Qualiex OAuth
61
+ // 3. Usuário faz login no Qualiex
62
+ // 4. Callback recebe tokens na URL
63
+ // 5. CallbackPage processa e valida tokens
64
+ // 6. AuthService.initialize() carrega dados do usuário
65
+ // 7. Token Supabase é gerado via SupabaseTokenService
66
+ // 8. Usuário é redirecionado para página original
67
+
68
+ // Em desenvolvimento, usa tokens de dev:
69
+ // AuthService.loginDev() gera token via edge function dev-tokens`},{title:"ProtectedRoute",description:"Componente que protege rotas e gerencia redirecionamentos.",preview:e.jsxs(a,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(s,{className:"h-5 w-5 text-green-500"}),e.jsx("span",{className:"font-medium",children:"Proteção Automática"})]}),e.jsxs("ul",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsx("li",{children:"• Verifica isAuthenticated do AuthContext"}),e.jsx("li",{children:"• Mostra loading durante inicialização"}),e.jsx("li",{children:"• Redireciona para login se não autenticado"}),e.jsx("li",{children:"• Valida tokens periodicamente (5 min)"}),e.jsx("li",{children:"• Força logout se tokens expirarem"})]})]}),code:`import { ProtectedRoute } from 'forlogic-core';
70
+
71
+ // Proteger todas as rotas da aplicação
72
+ function App() {
73
+ return (
74
+ <Routes>
75
+ {/* Rotas públicas */}
76
+ <Route path="/login" element={<LoginPage />} />
77
+ <Route path="/callback" element={<CallbackPage />} />
78
+
79
+ {/* Rotas protegidas */}
80
+ <Route
81
+ path="/*"
82
+ element={
83
+ <ProtectedRoute>
84
+ <MainLayout>
85
+ <Routes>
86
+ <Route path="/" element={<HomePage />} />
87
+ <Route path="/settings" element={<SettingsPage />} />
88
+ </Routes>
89
+ </MainLayout>
90
+ </ProtectedRoute>
91
+ }
92
+ />
93
+ </Routes>
94
+ );
95
+ }
96
+
97
+ // ProtectedRoute mostra automaticamente:
98
+ // - Loading durante isLoading
99
+ // - Redirecionamento para OAuth se !isAuthenticated
100
+ // - Conteúdo protegido se autenticado`},{title:"Troca de Unidade (Multi-Tenant)",description:"Suporte a múltiplas empresas/unidades com troca dinâmica.",preview:e.jsxs(a,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"h-5 w-5 text-blue-500"}),e.jsx("span",{className:"font-medium",children:"Unidades Disponíveis:"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between p-2 border rounded bg-accent/50",children:[e.jsx("span",{className:"text-sm font-medium",children:"Empresa A"}),e.jsx(i,{variant:"secondary",children:"Ativa"})]}),e.jsxs("div",{className:"flex items-center justify-between p-2 border rounded hover:bg-accent/30 cursor-pointer",children:[e.jsx("span",{className:"text-sm",children:"Empresa B"}),e.jsx(t,{size:"sm",variant:"ghost",children:"Trocar"})]})]})]}),code:`import { useAuth } from 'forlogic-core';
101
+
102
+ function UnitSelector() {
103
+ const { companies, alias, switchUnit, isLoading } = useAuth();
104
+
105
+ const handleSwitch = async (company: Company) => {
106
+ await switchUnit(company);
107
+ // Automaticamente:
108
+ // 1. Gera novo token Supabase com novo alias
109
+ // 2. Limpa cache de queries (React Query)
110
+ // 3. Atualiza placeId/placeName
111
+ // 4. Dispara re-fetch de dados
112
+ };
113
+
114
+ return (
115
+ <Select
116
+ value={alias || ''}
117
+ onValueChange={(value) => {
118
+ const company = companies.find(c => c.alias === value);
119
+ if (company) handleSwitch(company);
120
+ }}
121
+ disabled={isLoading}
122
+ >
123
+ <SelectTrigger>
124
+ <SelectValue placeholder="Selecione a unidade" />
125
+ </SelectTrigger>
126
+ <SelectContent>
127
+ {companies.map(company => (
128
+ <SelectItem key={company.id} value={company.alias}>
129
+ {company.name}
130
+ </SelectItem>
131
+ ))}
132
+ </SelectContent>
133
+ </Select>
134
+ );
135
+ }`},{title:"LoginPage",description:"Página de login pronta para uso com suporte a dev/prod.",preview:e.jsxs(a,{className:"p-6 text-center space-y-4 max-w-sm mx-auto",children:[e.jsx("h3",{className:"text-xl font-bold",children:"Acesso ao Sistema"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Faça login para acessar o sistema"}),e.jsx(t,{className:"w-full",children:"Entrar com Qualiex"})]}),code:`import { LoginPage } from 'forlogic-core';
136
+
137
+ // Uso direto - página pronta
138
+ <Route path="/login" element={<LoginPage />} />
139
+
140
+ // A LoginPage detecta automaticamente o contexto:
141
+ // - Preview Lovable / localhost: "Login Desenvolvimento" (usa dev-tokens)
142
+ // - Publicado: "Entrar com Qualiex" (OAuth)
143
+
144
+ // Para customizar, crie sua própria página:
145
+ import { AuthService, shouldUseDevTokens } from 'forlogic-core';
146
+
147
+ function CustomLoginPage() {
148
+ const handleLogin = async () => {
149
+ if (shouldUseDevTokens()) {
150
+ await AuthService.loginDev();
151
+ } else {
152
+ AuthService.loginProd();
153
+ }
154
+ };
155
+
156
+ return (
157
+ <div>
158
+ <h1>Meu Login Customizado</h1>
159
+ <Button onClick={handleLogin}>Entrar</Button>
160
+ </div>
161
+ );
162
+ }`},{title:"CallbackPage",description:"Página de callback que processa tokens OAuth.",preview:e.jsxs(a,{className:"p-6 text-center space-y-4 max-w-sm mx-auto",children:[e.jsx("div",{className:"h-8 w-8 border-4 border-primary border-t-transparent rounded-full animate-spin mx-auto"}),e.jsx("h3",{className:"font-semibold",children:"Processando Autenticação"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Processando tokens e redirecionando..."})]}),code:`import { CallbackPage } from 'forlogic-core';
163
+
164
+ // Adicionar rota para callback OAuth
165
+ <Route path="/callback" element={<CallbackPage />} />
166
+
167
+ // A CallbackPage automaticamente:
168
+ // 1. Extrai tokens da URL (query string ou hash)
169
+ // 2. Valida tokens com o AuthService
170
+ // 3. Gera token Supabase
171
+ // 4. Redireciona para página de origem (se salva)
172
+ // 5. Mostra erro com opção de retry se falhar
173
+
174
+ // A URL de callback deve ser configurada no Qualiex:
175
+ // https://seu-app.com/callback`},{title:"Detecção de Ambiente",description:"Como a lib decide qual API e método de autenticação usar.",preview:e.jsxs(r,{children:[e.jsx(n,{className:"h-4 w-4 text-green-500"}),e.jsx(d,{children:e.jsxs("div",{className:"space-y-1 text-sm",children:[e.jsx("p",{className:"font-medium",children:"Duas decisões independentes:"}),e.jsxs("code",{className:"block text-xs bg-muted p-2 rounded mt-2",children:["shouldUseDevTokens() → auth method",e.jsx("br",{}),"getEnvironmentConfig() → API URL (prod/dev)"]})]})})]}),code:`# Detecção de Ambiente
176
+
177
+ # A lib separa duas preocupações:
178
+
179
+ # 1. Método de autenticação (shouldUseDevTokens):
180
+ # - Preview Lovable (iframe) → dev-tokens
181
+ # - localhost → dev-tokens
182
+ # - Publicado → OAuth
183
+
184
+ # 2. Qual API usar (getEnvironmentConfig):
185
+ # - Supabase prod (ccjfvpnndclajkleyqkc) → API prod
186
+ # - Qualquer outro Supabase → API dev
187
+
188
+ # Variáveis Supabase são extraídas automaticamente
189
+ # de src/integrations/supabase/client.ts via vite.config.ts
190
+ # NÃO precisam estar no .env
191
+
192
+ # Exemplo de regras:
193
+ # ┌────────────────────────┬──────────┬────────────┐
194
+ # │ Cenário │ API │ Auth │
195
+ # ├────────────────────────┼──────────┼────────────┤
196
+ # │ Preview + Prod Supa │ Prod │ dev-tokens │
197
+ # │ Preview + Dev Supa │ Dev │ dev-tokens │
198
+ # │ Publicado + Prod Supa │ Prod │ OAuth │
199
+ # │ Publicado + Dev Supa │ Dev │ OAuth │
200
+ # └────────────────────────┴──────────┴────────────┘`}],props:[{name:"useAuth().user",type:"User | null",default:"null",description:"Dados do usuário autenticado."},{name:"useAuth().companies",type:"Company[]",default:"[]",description:"Lista de empresas/unidades disponíveis."},{name:"useAuth().alias",type:"string | null",default:"null",description:"Alias da empresa/unidade ativa."},{name:"useAuth().isAuthenticated",type:"boolean",default:"false",description:"Indica se usuário está autenticado."},{name:"useAuth().isLoading",type:"boolean",default:"true",description:"Indica se está inicializando."},{name:"useAuth().selectedUnit",type:"SelectedUnit | null",default:"null",description:"Unidade atualmente selecionada."},{name:"useAuth().logout",type:"() => void",default:"-",description:"Função para fazer logout."},{name:"useAuth().switchUnit",type:"(company: Company) => Promise<void>",default:"-",description:"Função para trocar de unidade."},{name:"useAuth().placeId",type:"string | null",default:"null",description:"ID do local do usuário."},{name:"useAuth().placeName",type:"string | null",default:"null",description:"Nome do local do usuário."},{name:"ProtectedRoute.children",type:"ReactNode",default:"-",description:"Conteúdo protegido a ser renderizado."}],accessibility:["Loading states são anunciados para leitores de tela.","Botões de login seguem padrões de acessibilidade.","Feedback de erro é apresentado de forma clara.","Focus management correto durante redirecionamentos."],notes:["**CoreProviders** já inclui AuthProvider - não precisa configurar separadamente.","Tokens são validados automaticamente a cada **5-10 minutos**.","Troca de unidade limpa automaticamente o cache do **React Query**.","Em **desenvolvimento**, use a edge function `dev-tokens` para gerar tokens de teste.","A URL de callback (/callback) deve estar configurada no **Qualiex OAuth**.","Locale fixo em **pt-BR** — preferências do usuário serão implementadas futuramente via API externa."]})}export{v as AuthDoc};
@@ -1,4 +1,4 @@
1
- import{j as a,ac as t,ad as r,ae as e}from"./index-CE0k7Rdh.js";import{C as s}from"./ComponentDocTemplate-CRbRY-v5.js";function i(){return a.jsx(s,{title:"Avatar",description:"Um elemento de imagem com fallback para representar o usuário.",component:a.jsxs("div",{className:"flex gap-4 items-center",children:[a.jsxs(t,{children:[a.jsx(r,{src:"https://github.com/shadcn.png",alt:"@shadcn"}),a.jsx(e,{children:"CN"})]}),a.jsx(t,{children:a.jsx(e,{children:"JD"})})]}),usage:`import { Avatar, AvatarImage, AvatarFallback } from "forlogic-core"
1
+ import{j as a,aH as t,bp as r,aI as e}from"./index-DkiftrvI.js";import{C as s}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function n(){return a.jsx(s,{title:"Avatar",description:"Um elemento de imagem com fallback para representar o usuário.",component:a.jsxs("div",{className:"flex gap-4 items-center",children:[a.jsxs(t,{children:[a.jsx(r,{src:"https://github.com/shadcn.png",alt:"@shadcn"}),a.jsx(e,{children:"CN"})]}),a.jsx(t,{children:a.jsx(e,{children:"JD"})})]}),usage:`import { Avatar, AvatarImage, AvatarFallback } from "forlogic-core"
2
2
 
3
3
  <Avatar>
4
4
  <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
@@ -8,4 +8,4 @@ import{j as a,ac as t,ad as r,ae as e}from"./index-CE0k7Rdh.js";import{C as s}fr
8
8
  <AvatarFallback>CN</AvatarFallback>
9
9
  </Avatar>`},{title:"Apenas Fallback",preview:a.jsx(t,{children:a.jsx(e,{children:"JD"})}),code:`<Avatar>
10
10
  <AvatarFallback>JD</AvatarFallback>
11
- </Avatar>`}],props:[{name:"src",type:"string",default:"-",description:"A URL da fonte da imagem (AvatarImage)."},{name:"alt",type:"string",default:"-",description:"Texto alternativo para a imagem (AvatarImage)."}],accessibility:["Texto alternativo adequado para imagens","Fallback garante que o conteúdo seja sempre exibido","Estrutura HTML semântica"]})}export{i as AvatarDoc};
11
+ </Avatar>`}],props:[{name:"src",type:"string",default:"-",description:"A URL da fonte da imagem (AvatarImage)."},{name:"alt",type:"string",default:"-",description:"Texto alternativo para a imagem (AvatarImage)."}],accessibility:["Texto alternativo adequado para imagens","Fallback garante que o conteúdo seja sempre exibido","Estrutura HTML semântica"]})}export{n as AvatarDoc};
@@ -1,4 +1,4 @@
1
- import{j as a,B as e}from"./index-CE0k7Rdh.js";import{C as n}from"./ComponentDocTemplate-CRbRY-v5.js";function r(){return a.jsx(n,{title:"Badge",description:"Exibe um badge ou um componente que se parece com um badge.",component:a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(e,{children:"Default"}),a.jsx(e,{variant:"secondary",children:"Secondary"}),a.jsx(e,{variant:"info",children:"Info"}),a.jsx(e,{variant:"success",children:"Success"}),a.jsx(e,{variant:"warning",children:"Warning"}),a.jsx(e,{variant:"danger",children:"Danger"}),a.jsx(e,{variant:"outline",children:"Outline"}),a.jsx(e,{variant:"sharp",children:"Sharp"})]}),usage:`import { Badge } from "forlogic-core"
1
+ import{j as a,B as e}from"./index-DkiftrvI.js";import{C as n}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function d(){return a.jsx(n,{title:"Badge",description:"Exibe um badge ou um componente que se parece com um badge.",component:a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(e,{children:"Default"}),a.jsx(e,{variant:"secondary",children:"Secondary"}),a.jsx(e,{variant:"info",children:"Info"}),a.jsx(e,{variant:"success",children:"Success"}),a.jsx(e,{variant:"warning",children:"Warning"}),a.jsx(e,{variant:"danger",children:"Danger"}),a.jsx(e,{variant:"outline",children:"Outline"}),a.jsx(e,{variant:"sharp",children:"Sharp"})]}),usage:`import { Badge } from "forlogic-core"
2
2
 
3
3
  <Badge>Badge</Badge>
4
4
  <Badge variant="secondary">Secondary</Badge>
@@ -33,4 +33,4 @@ import{j as a,B as e}from"./index-CE0k7Rdh.js";import{C as n}from"./ComponentDoc
33
33
  <Badge variant="info">New</Badge>
34
34
  </div>`},{title:"Casos de Uso - Tags",preview:a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(e,{variant:"outline",children:"React"}),a.jsx(e,{variant:"outline",children:"TypeScript"}),a.jsx(e,{variant:"outline",children:"Tailwind CSS"}),a.jsx(e,{variant:"outline",children:"Supabase"})]}),code:`<Badge variant="outline">React</Badge>
35
35
  <Badge variant="outline">TypeScript</Badge>
36
- <Badge variant="outline">Tailwind CSS</Badge>`}],props:[{name:"variant",type:'"default" | "secondary" | "info" | "success" | "warning" | "danger" | "outline" | "sharp"',default:'"default"',description:"O estilo visual do badge."}],accessibility:["HTML semântico com taxas de contraste adequadas","Funciona com leitores de tela","Pode ser tornado interativo com labels ARIA adequadas se necessário"]})}export{r as BadgeDoc};
36
+ <Badge variant="outline">Tailwind CSS</Badge>`}],props:[{name:"variant",type:'"default" | "secondary" | "info" | "success" | "warning" | "danger" | "outline" | "sharp"',default:'"default"',description:"O estilo visual do badge."}],accessibility:["HTML semântico com taxas de contraste adequadas","Funciona com leitores de tela","Pode ser tornado interativo com labels ARIA adequadas se necessário"]})}export{d as BadgeDoc};
@@ -0,0 +1,169 @@
1
+ import{j as e,a as v,b as j,c as g,d as b,a5 as k,a6 as T,a7 as f,aa as N,r as C,J as t,K as n,M as A,W as V,x as w,aR as O,N as E,O as I,Q as B,R as P,V as S,m as L,eO as M,f7 as $,P as q,E as z,G as U,H as R,I as _,Y as D}from"./index-DkiftrvI.js";import{L as H}from"./lucide-react-Cp3Yw3Zm.js";import{C as Z}from"./ComponentDocTemplate-CQbBhfvZ.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";import"./ExampleCard-DuLrb3t-.js";function W(){const[l,m]=C.useState({name:"",email:"",bio:"",active:!0}),[s,p]=C.useState({}),d=(c,y)=>{m(F=>({...F,[c]:y})),s[c]&&p(F=>({...F,[c]:""}))},h=()=>{const c={};return l.name.trim()||(c.name="Nome é obrigatório"),l.email.trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(l.email)||(c.email="E-mail inválido"):c.email="E-mail é obrigatório",p(c),Object.keys(c).length===0},a=()=>{h()?(D.success("Formulário enviado com sucesso!"),console.log("Dados:",l)):D.error("Corrija os erros antes de enviar")};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"basic-name",children:"Nome *"}),e.jsx(n,{id:"basic-name",value:l.name,onChange:c=>d("name",c.target.value),placeholder:"Digite o nome",className:s.name?"border-destructive":""}),s.name&&e.jsx("p",{className:"text-sm text-destructive",children:s.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"basic-email",children:"E-mail *"}),e.jsx(n,{id:"basic-email",type:"email",value:l.email,onChange:c=>d("email",c.target.value),placeholder:"email@exemplo.com",className:s.email?"border-destructive":""}),s.email&&e.jsx("p",{className:"text-sm text-destructive",children:s.email})]}),e.jsxs("div",{className:"space-y-2 md:col-span-2",children:[e.jsx(t,{htmlFor:"basic-bio",children:"Biografia"}),e.jsx(A,{id:"basic-bio",value:l.bio,onChange:c=>d("bio",c.target.value),placeholder:"Conte sobre você..."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(V,{id:"basic-active",checked:l.active,onCheckedChange:c=>d("active",c)}),e.jsx(t,{htmlFor:"basic-active",children:"Ativo"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(w,{variant:"outline",onClick:()=>m({name:"",email:"",bio:"",active:!0}),children:"Limpar"}),e.jsx(w,{onClick:a,children:"Salvar"})]})]})}function G(){const[l,m]=C.useState({name:"",email:"",age:"",description:"",status:"",category:"",active:!0,newsletter:!1,birthDate:"",color:"#3b82f6",icon:"Star"}),s=(a,c)=>{m(y=>({...y,[a]:c}))},p=[{value:"active",label:"Ativo"},{value:"inactive",label:"Inativo"},{value:"pending",label:"Pendente"}],d=[{value:"tech",label:"Tecnologia"},{value:"finance",label:"Finanças"},{value:"health",label:"Saúde"},{value:"education",label:"Educação"}],h=H[l.icon]||O;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold mb-3 text-muted-foreground uppercase tracking-wide",children:"Campos de Texto"}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"all-name",children:"Nome (text)"}),e.jsx(n,{id:"all-name",value:l.name,onChange:a=>s("name",a.target.value),placeholder:"Digite o nome"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"all-email",children:"E-mail (email)"}),e.jsx(n,{id:"all-email",type:"email",value:l.email,onChange:a=>s("email",a.target.value),placeholder:"email@exemplo.com"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"all-age",children:"Idade (number)"}),e.jsx(n,{id:"all-age",type:"number",value:l.age,onChange:a=>s("age",a.target.value),placeholder:"25",min:0,max:150})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"all-date",children:"Data de Nascimento (date)"}),e.jsx(n,{id:"all-date",type:"date",value:l.birthDate,onChange:a=>s("birthDate",a.target.value)})]}),e.jsxs("div",{className:"space-y-2 md:col-span-2",children:[e.jsx(t,{htmlFor:"all-desc",children:"Descrição (textarea)"}),e.jsx(A,{id:"all-desc",value:l.description,onChange:a=>s("description",a.target.value),placeholder:"Descrição detalhada...",rows:3})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold mb-3 text-muted-foreground uppercase tracking-wide",children:"Campos de Seleção"}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{children:"Status (select)"}),e.jsxs(E,{value:l.status,onValueChange:a=>s("status",a),children:[e.jsx(I,{children:e.jsx(B,{placeholder:"Selecione o status"})}),e.jsx(P,{children:p.map(a=>e.jsx(S,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{children:"Categoria (select)"}),e.jsxs(E,{value:l.category,onValueChange:a=>s("category",a),children:[e.jsx(I,{children:e.jsx(B,{placeholder:"Selecione a categoria"})}),e.jsx(P,{children:d.map(a=>e.jsx(S,{value:a.value,children:a.label},a.value))})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold mb-3 text-muted-foreground uppercase tracking-wide",children:"Campos Booleanos"}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 border rounded-lg",children:[e.jsx(t,{htmlFor:"all-active",children:"Ativo (switch)"}),e.jsx(V,{id:"all-active",checked:l.active,onCheckedChange:a=>s("active",a)})]}),e.jsxs("div",{className:"flex items-center gap-2 p-3 border rounded-lg",children:[e.jsx(L,{id:"all-newsletter",checked:l.newsletter,onCheckedChange:a=>s("newsletter",!!a)}),e.jsx(t,{htmlFor:"all-newsletter",className:"cursor-pointer",children:"Receber newsletter (checkbox)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold mb-3 text-muted-foreground uppercase tracking-wide",children:"Campos Visuais"}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{children:"Cor (color-picker)"}),e.jsx(M,{value:l.color,onChange:a=>s("color",a)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{children:"Ícone (icon-picker)"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx($,{value:l.icon,onChange:a=>s("icon",a)}),e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(h,{className:"h-5 w-5",style:{color:l.color}}),e.jsx("span",{children:l.icon})]})]})]})]})]}),e.jsxs("div",{className:"p-4 bg-muted/50 rounded-lg",children:[e.jsx("h4",{className:"text-sm font-semibold mb-2",children:"Dados do Formulário:"}),e.jsx("pre",{className:"text-xs overflow-x-auto",children:JSON.stringify(l,null,2)})]})]})}function J(){const[l,m]=C.useState({username:"",password:"",confirmPassword:"",email:"",phone:"",cpf:"",age:"",website:"",terms:!1}),[s,p]=C.useState({}),[d,h]=C.useState({}),a=(i,r)=>{m(o=>({...o,[i]:r})),h(o=>({...o,[i]:!0})),c(i,r)},c=(i,r)=>{let o="";switch(i){case"username":r?r.length<3?o="Mínimo 3 caracteres":r.length>20?o="Máximo 20 caracteres":/^[a-zA-Z0-9_]+$/.test(r)||(o="Apenas letras, números e _"):o="Usuário é obrigatório";break;case"password":r?r.length<8?o="Mínimo 8 caracteres":/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)||(o="Deve conter número"):o="Deve conter letra minúscula":o="Deve conter letra maiúscula":o="Senha é obrigatória";break;case"confirmPassword":r?r!==l.password&&(o="Senhas não conferem"):o="Confirmação é obrigatória";break;case"email":r?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r)||(o="E-mail inválido"):o="E-mail é obrigatório";break;case"phone":r&&!/^\(\d{2}\)\s?\d{4,5}-?\d{4}$/.test(r)&&(o="Formato: (11) 99999-9999");break;case"cpf":r&&r.replace(/\D/g,"").length!==11&&(o="CPF deve ter 11 dígitos");break;case"age":if(r){const u=parseInt(r);isNaN(u)||u<18?o="Idade mínima: 18 anos":u>120&&(o="Idade inválida")}break;case"website":r&&!/^https?:\/\/.+\..+$/.test(r)&&(o="URL inválida (ex: https://site.com)");break;case"terms":r||(o="Você deve aceitar os termos");break}return p(u=>({...u,[i]:o})),!o},y=()=>{let i=!0;return Object.keys(l).forEach(r=>{const o=l[r];c(r,o)||(i=!1),h(u=>({...u,[r]:!0}))}),i},F=()=>{y()?D.success("Cadastro realizado com sucesso!"):D.error("Corrija os erros antes de enviar")},x=i=>d[i]?s[i]?"border-destructive":"border-green-500":"";return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-username",children:"Usuário *"}),e.jsx(n,{id:"val-username",value:l.username,onChange:i=>a("username",i.target.value),placeholder:"seu_usuario",className:x("username")}),d.username&&s.username&&e.jsx("p",{className:"text-sm text-destructive",children:s.username}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"3-20 caracteres, letras, números e _"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-email",children:"E-mail *"}),e.jsx(n,{id:"val-email",type:"email",value:l.email,onChange:i=>a("email",i.target.value),placeholder:"email@exemplo.com",className:x("email")}),d.email&&s.email&&e.jsx("p",{className:"text-sm text-destructive",children:s.email})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-password",children:"Senha *"}),e.jsx(n,{id:"val-password",type:"password",value:l.password,onChange:i=>a("password",i.target.value),placeholder:"••••••••",className:x("password")}),d.password&&s.password&&e.jsx("p",{className:"text-sm text-destructive",children:s.password}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Mín. 8 chars, maiúscula, minúscula e número"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-confirm",children:"Confirmar Senha *"}),e.jsx(n,{id:"val-confirm",type:"password",value:l.confirmPassword,onChange:i=>a("confirmPassword",i.target.value),placeholder:"••••••••",className:x("confirmPassword")}),d.confirmPassword&&s.confirmPassword&&e.jsx("p",{className:"text-sm text-destructive",children:s.confirmPassword})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-phone",children:"Telefone"}),e.jsx(n,{id:"val-phone",value:l.phone,onChange:i=>a("phone",i.target.value),placeholder:"(11) 99999-9999",className:x("phone")}),d.phone&&s.phone&&e.jsx("p",{className:"text-sm text-destructive",children:s.phone})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-cpf",children:"CPF"}),e.jsx(n,{id:"val-cpf",value:l.cpf,onChange:i=>a("cpf",i.target.value),placeholder:"000.000.000-00",className:x("cpf")}),d.cpf&&s.cpf&&e.jsx("p",{className:"text-sm text-destructive",children:s.cpf})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-age",children:"Idade"}),e.jsx(n,{id:"val-age",type:"number",value:l.age,onChange:i=>a("age",i.target.value),placeholder:"25",min:18,className:x("age")}),d.age&&s.age&&e.jsx("p",{className:"text-sm text-destructive",children:s.age})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"val-website",children:"Website"}),e.jsx(n,{id:"val-website",value:l.website,onChange:i=>a("website",i.target.value),placeholder:"https://meusite.com",className:x("website")}),d.website&&s.website&&e.jsx("p",{className:"text-sm text-destructive",children:s.website})]})]}),e.jsxs("div",{className:"flex items-center gap-2 p-3 border rounded-lg",children:[e.jsx(L,{id:"val-terms",checked:l.terms,onCheckedChange:i=>a("terms",!!i)}),e.jsx(t,{htmlFor:"val-terms",className:"cursor-pointer",children:"Aceito os termos de uso e política de privacidade *"})]}),d.terms&&s.terms&&e.jsx("p",{className:"text-sm text-destructive",children:s.terms}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(w,{variant:"outline",onClick:()=>{m({username:"",password:"",confirmPassword:"",email:"",phone:"",cpf:"",age:"",website:"",terms:!1}),p({}),h({})},children:"Limpar"}),e.jsx(w,{onClick:F,children:"Cadastrar"})]})]})}function Q(){const[l,m]=C.useState(!1),[s,p]=C.useState({title:"",priority:"medium",assignee:"",dueDate:"",description:""}),d=(a,c)=>{p(y=>({...y,[a]:c}))},h=()=>{D.success("Tarefa criada com sucesso!"),m(!1),p({title:"",priority:"medium",assignee:"",dueDate:"",description:""})};return e.jsxs(e.Fragment,{children:[e.jsxs(w,{onClick:()=>m(!0),children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Nova Tarefa"]}),e.jsx(z,{open:l,onOpenChange:m,children:e.jsxs(U,{size:"md",children:[e.jsx(R,{showSeparator:!0,children:e.jsx(_,{children:"Nova Tarefa"})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"modal-title",children:"Título *"}),e.jsx(n,{id:"modal-title",value:s.title,onChange:a=>d("title",a.target.value),placeholder:"Digite o título da tarefa"})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{children:"Prioridade"}),e.jsxs(E,{value:s.priority,onValueChange:a=>d("priority",a),children:[e.jsx(I,{children:e.jsx(B,{})}),e.jsxs(P,{children:[e.jsx(S,{value:"low",children:"🟢 Baixa"}),e.jsx(S,{value:"medium",children:"🟡 Média"}),e.jsx(S,{value:"high",children:"🔴 Alta"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"modal-due",children:"Data Limite"}),e.jsx(n,{id:"modal-due",type:"date",value:s.dueDate,onChange:a=>d("dueDate",a.target.value)})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"modal-assignee",children:"Responsável"}),e.jsx(n,{id:"modal-assignee",value:s.assignee,onChange:a=>d("assignee",a.target.value),placeholder:"Nome do responsável"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t,{htmlFor:"modal-desc",children:"Descrição"}),e.jsx(A,{id:"modal-desc",value:s.description,onChange:a=>d("description",a.target.value),placeholder:"Descreva a tarefa...",rows:3})]})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(w,{variant:"outline",onClick:()=>m(!1),children:"Cancelar"}),e.jsx(w,{onClick:h,disabled:!s.title.trim(),children:"Criar Tarefa"})]})]})})]})}function Be(){return e.jsxs(Z,{title:"BaseForm",description:"Formulário dinâmico baseado em configuração de seções e campos, suportando múltiplos tipos de campo, validação e layouts flexíveis.",tocItems:[{id:"formulario-basico",label:"Formulário Básico"},{id:"todos-tipos",label:"Todos os Tipos de Campo"},{id:"validacao-completa",label:"Validação Completa"},{id:"formulario-modal",label:"Formulário em Modal"},{id:"uso-baseform",label:"Uso com BaseForm"},{id:"tipos-campo",label:"Tipos de Campo"},{id:"props-baseform",label:"Props do BaseForm"},{id:"acessibilidade",label:"Acessibilidade"}],children:[e.jsxs(v,{id:"formulario-basico",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Formulário Básico"})}),e.jsx(b,{children:e.jsxs(k,{defaultValue:"preview",children:[e.jsxs(T,{children:[e.jsx(f,{value:"preview",children:"Preview"}),e.jsx(f,{value:"code",children:"Código"})]}),e.jsx(N,{value:"preview",className:"pt-4",children:e.jsx(W,{})}),e.jsx(N,{value:"code",className:"pt-4",children:e.jsx("pre",{className:"bg-muted p-4 rounded-lg text-sm overflow-x-auto",children:`const [formData, setFormData] = useState({
2
+ name: '', email: '', bio: '', active: true
3
+ });
4
+ const [errors, setErrors] = useState({});
5
+
6
+ const validate = () => {
7
+ const newErrors = {};
8
+ if (!formData.name.trim()) newErrors.name = 'Nome é obrigatório';
9
+ if (!formData.email.trim()) newErrors.email = 'E-mail é obrigatório';
10
+ else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(formData.email)) {
11
+ newErrors.email = 'E-mail inválido';
12
+ }
13
+ setErrors(newErrors);
14
+ return Object.keys(newErrors).length === 0;
15
+ };
16
+
17
+ <Input
18
+ value={formData.name}
19
+ onChange={e => setFormData(prev => ({ ...prev, name: e.target.value }))}
20
+ className={errors.name ? 'border-destructive' : ''}
21
+ />
22
+ {errors.name && <p className="text-sm text-destructive">{errors.name}</p>}`})})]})})]}),e.jsxs(v,{id:"todos-tipos",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Todos os Tipos de Campo"})}),e.jsx(b,{children:e.jsxs(k,{defaultValue:"preview",children:[e.jsxs(T,{children:[e.jsx(f,{value:"preview",children:"Preview"}),e.jsx(f,{value:"code",children:"Código"})]}),e.jsx(N,{value:"preview",className:"pt-4",children:e.jsx(G,{})}),e.jsx(N,{value:"code",className:"pt-4",children:e.jsx("pre",{className:"bg-muted p-4 rounded-lg text-sm overflow-x-auto",children:`// Tipos suportados pelo BaseForm:
23
+
24
+ const sections = [{
25
+ id: 'main',
26
+ title: 'Cadastro',
27
+ fields: [
28
+ // Texto
29
+ { name: 'name', label: 'Nome', type: 'text', required: true },
30
+ { name: 'email', label: 'E-mail', type: 'email', required: true },
31
+
32
+ // Número
33
+ { name: 'age', label: 'Idade', type: 'number', min: 0, max: 150 },
34
+
35
+ // Textarea
36
+ { name: 'description', label: 'Descrição', type: 'textarea', rows: 3 },
37
+
38
+ // Select
39
+ {
40
+ name: 'status',
41
+ label: 'Status',
42
+ type: 'select',
43
+ options: [
44
+ { value: 'active', label: 'Ativo' },
45
+ { value: 'inactive', label: 'Inativo' }
46
+ ]
47
+ },
48
+
49
+ // Data
50
+ { name: 'birthDate', label: 'Nascimento', type: 'date' },
51
+
52
+ // Booleanos
53
+ { name: 'active', label: 'Ativo', type: 'switch' },
54
+ { name: 'newsletter', label: 'Newsletter', type: 'checkbox' },
55
+
56
+ // Visuais
57
+ { name: 'color', label: 'Cor', type: 'color-picker' },
58
+ { name: 'icon', label: 'Ícone', type: 'icon-picker' }
59
+ ]
60
+ }];`})})]})})]}),e.jsxs(v,{id:"validacao-completa",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Validação Completa"})}),e.jsx(b,{children:e.jsxs(k,{defaultValue:"preview",children:[e.jsxs(T,{children:[e.jsx(f,{value:"preview",children:"Preview"}),e.jsx(f,{value:"code",children:"Código"})]}),e.jsx(N,{value:"preview",className:"pt-4",children:e.jsx(J,{})}),e.jsx(N,{value:"code",className:"pt-4",children:e.jsx("pre",{className:"bg-muted p-4 rounded-lg text-sm overflow-x-auto",children:`// Validação em tempo real com feedback visual
61
+
62
+ const validateField = (field, value) => {
63
+ let error = '';
64
+
65
+ switch (field) {
66
+ case 'username':
67
+ if (!value) error = 'Usuário é obrigatório';
68
+ else if (value.length < 3) error = 'Mínimo 3 caracteres';
69
+ else if (!/^[a-zA-Z0-9_]+$/.test(value)) error = 'Apenas letras, números e _';
70
+ break;
71
+
72
+ case 'password':
73
+ if (!value) error = 'Senha é obrigatória';
74
+ else if (value.length < 8) error = 'Mínimo 8 caracteres';
75
+ else if (!/[A-Z]/.test(value)) error = 'Deve conter letra maiúscula';
76
+ else if (!/[0-9]/.test(value)) error = 'Deve conter número';
77
+ break;
78
+
79
+ case 'email':
80
+ if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) error = 'E-mail inválido';
81
+ break;
82
+
83
+ case 'phone':
84
+ if (!/^\\(\\d{2}\\)\\s?\\d{4,5}-?\\d{4}$/.test(value)) {
85
+ error = 'Formato: (11) 99999-9999';
86
+ }
87
+ break;
88
+ }
89
+
90
+ setErrors(prev => ({ ...prev, [field]: error }));
91
+ return !error;
92
+ };
93
+
94
+ // Classe condicional baseada em estado
95
+ const getFieldClass = (field) => {
96
+ if (!touched[field]) return '';
97
+ return errors[field] ? 'border-destructive' : 'border-green-500';
98
+ };`})})]})})]}),e.jsxs(v,{id:"formulario-modal",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Formulário em Modal"})}),e.jsx(b,{children:e.jsxs(k,{defaultValue:"preview",children:[e.jsxs(T,{children:[e.jsx(f,{value:"preview",children:"Preview"}),e.jsx(f,{value:"code",children:"Código"})]}),e.jsx(N,{value:"preview",className:"pt-4",children:e.jsx(Q,{})}),e.jsx(N,{value:"code",className:"pt-4",children:e.jsx("pre",{className:"bg-muted p-4 rounded-lg text-sm overflow-x-auto",children:`<Dialog open={open} onOpenChange={setOpen}>
99
+ <DialogContent size="md">
100
+ <DialogHeader showSeparator>
101
+ <DialogTitle>Nova Tarefa</DialogTitle>
102
+ </DialogHeader>
103
+
104
+ <div className="space-y-4 py-4">
105
+ <div className="space-y-2">
106
+ <Label>Título *</Label>
107
+ <Input
108
+ value={formData.title}
109
+ onChange={e => updateField('title', e.target.value)}
110
+ />
111
+ </div>
112
+
113
+ <div className="grid gap-4 md:grid-cols-2">
114
+ <div className="space-y-2">
115
+ <Label>Prioridade</Label>
116
+ <Select value={formData.priority} onValueChange={v => updateField('priority', v)}>
117
+ <SelectTrigger><SelectValue /></SelectTrigger>
118
+ <SelectContent>
119
+ <SelectItem value="low">🟢 Baixa</SelectItem>
120
+ <SelectItem value="medium">🟡 Média</SelectItem>
121
+ <SelectItem value="high">🔴 Alta</SelectItem>
122
+ </SelectContent>
123
+ </Select>
124
+ </div>
125
+
126
+ <div className="space-y-2">
127
+ <Label>Data Limite</Label>
128
+ <Input type="date" value={formData.dueDate} onChange={...} />
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+ <div className="flex justify-end gap-2">
134
+ <Button variant="outline" onClick={() => setOpen(false)}>Cancelar</Button>
135
+ <Button onClick={handleSubmit}>Criar Tarefa</Button>
136
+ </div>
137
+ </DialogContent>
138
+ </Dialog>`})})]})})]}),e.jsxs(v,{id:"uso-baseform",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Uso com BaseForm (Biblioteca)"})}),e.jsx(b,{children:e.jsx("pre",{className:"bg-muted p-4 rounded-lg text-sm overflow-x-auto",children:`import BaseForm from 'forlogic-core/crud/components/BaseForm';
139
+
140
+ const sections = [
141
+ {
142
+ id: 'basic',
143
+ title: 'Informações Básicas',
144
+ fields: [
145
+ { name: 'name', label: 'Nome', type: 'text', required: true },
146
+ { name: 'email', label: 'E-mail', type: 'email', required: true },
147
+ { name: 'bio', label: 'Biografia', type: 'textarea' },
148
+ { name: 'active', label: 'Ativo', type: 'switch' },
149
+ ],
150
+ },
151
+ {
152
+ id: 'advanced',
153
+ title: 'Configurações',
154
+ condition: (data) => !!data.name, // Só habilita quando nome preenchido
155
+ fields: [
156
+ { name: 'role', label: 'Perfil', type: 'select', options: [...] },
157
+ { name: 'notifications', label: 'Notificações', type: 'switch' },
158
+ ],
159
+ },
160
+ ];
161
+
162
+ <BaseForm
163
+ title="Novo Usuário"
164
+ sections={sections}
165
+ initialData={data}
166
+ open={isOpen}
167
+ onSubmit={handleSubmit}
168
+ onCancel={() => setIsOpen(false)}
169
+ />`})})]}),e.jsxs(v,{id:"tipos-campo",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Tipos de Campo Suportados"})}),e.jsx(b,{children:e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:[{type:"text",desc:"Input de texto padrão"},{type:"email",desc:"Input de e-mail com validação"},{type:"number",desc:"Input numérico com min/max/step"},{type:"textarea",desc:"Área de texto multilinha"},{type:"select",desc:"Seleção com opções"},{type:"multiselect",desc:"Seleção múltipla"},{type:"switch",desc:"Toggle on/off"},{type:"checkbox",desc:"Checkbox simples"},{type:"date",desc:"Seletor de data"},{type:"color-picker",desc:"Seletor de cor avançado"},{type:"icon-picker",desc:"Seletor de ícones Lucide"},{type:"user-select",desc:"Seletor de usuário Qualiex"},{type:"group",desc:"Agrupamento de campos"},{type:"custom",desc:"Componente customizado"}].map(l=>e.jsxs("div",{className:"p-3 border rounded-lg",children:[e.jsx("code",{className:"text-sm font-mono text-primary",children:l.type}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:l.desc})]},l.type))})})]}),e.jsxs(v,{id:"props-baseform",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Props do BaseForm"})}),e.jsx(b,{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 p-2",children:"Prop"}),e.jsx("th",{className:"text-left p-2",children:"Tipo"}),e.jsx("th",{className:"text-left p-2",children:"Descrição"})]})}),e.jsx("tbody",{children:[["title","string","Título do dialog/formulário"],["sections","FormSection[]","Array de seções com campos"],["initialData","T","Dados iniciais do formulário"],["open","boolean","Controla visibilidade do dialog"],["onSubmit","(data: T) => void","Callback ao submeter"],["onCancel","() => void","Callback ao cancelar"],["submitButtonText","string","Texto do botão de submit"],["isLoading","boolean","Estado de carregamento"]].map(([l,m,s])=>e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"p-2 font-mono text-xs",children:l}),e.jsx("td",{className:"p-2 font-mono text-xs text-muted-foreground",children:m}),e.jsx("td",{className:"p-2",children:s})]},l))})]})})})]}),e.jsxs(v,{id:"acessibilidade",className:"scroll-mt-4",children:[e.jsx(j,{children:e.jsx(g,{children:"Acessibilidade"})}),e.jsx(b,{children:e.jsxs("ul",{className:"list-disc list-inside space-y-2 text-sm text-muted-foreground",children:[e.jsx("li",{children:"Todos os campos possuem labels associados via htmlFor/id"}),e.jsx("li",{children:"Mensagens de erro vinculadas aos campos via aria-describedby"}),e.jsx("li",{children:'Campos obrigatórios marcados com aria-required="true"'}),e.jsx("li",{children:"Navegação por teclado entre campos (Tab/Shift+Tab)"}),e.jsx("li",{children:"Foco visual destacado em todos os elementos interativos"}),e.jsx("li",{children:"Switch e Checkbox acessíveis via teclado (Space para toggle)"}),e.jsx("li",{children:"Feedback de validação anunciado por leitores de tela"}),e.jsx("li",{children:"Contraste adequado para mensagens de erro (WCAG AA)"})]})})]})]})}export{Be as BaseFormDoc};
@@ -1,4 +1,4 @@
1
- import{j as e,eu as o,ev as a,C as t,cf as n,B as r,f as i,G as s}from"./index-CE0k7Rdh.js";import{C as d}from"./ComponentDocTemplate-CRbRY-v5.js";function m(){return e.jsx(d,{title:"BodyContent",description:"Container principal de página com breadcrumb, background neutro e suporte a múltiplos containers de conteúdo.",component:e.jsx("div",{className:"w-full max-w-4xl",children:e.jsx(o,{breadcrumbs:[{label:"Módulo",href:"#"},{label:"Seção",href:"#"},{label:"Página Atual"}],className:"rounded-lg overflow-hidden",children:e.jsx(a,{title:"Título do Container",subtitle:"Subtítulo com informações adicionais",children:e.jsx("p",{className:"text-muted-foreground",children:"Este é o conteúdo principal do container. Aqui você pode adicionar qualquer tipo de conteúdo como formulários, tabelas, cards, etc."})})})}),usage:`import { BodyContent, ContentContainer } from 'forlogic-core';
1
+ import{j as e,gl as o,gm as a,a as t,ab as n,B as r,x as i,F as s}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function u(){return e.jsx(l,{title:"BodyContent",description:"Container principal de página com breadcrumb, background neutro e suporte a múltiplos containers de conteúdo.",component:e.jsx("div",{className:"w-full max-w-4xl",children:e.jsx(o,{breadcrumbs:[{label:"Módulo",href:"#"},{label:"Seção",href:"#"},{label:"Página Atual"}],className:"rounded-lg overflow-hidden",children:e.jsx(a,{title:"Título do Container",subtitle:"Subtítulo com informações adicionais",children:e.jsx("p",{className:"text-muted-foreground",children:"Este é o conteúdo principal do container. Aqui você pode adicionar qualquer tipo de conteúdo como formulários, tabelas, cards, etc."})})})}),usage:`import { BodyContent, ContentContainer } from 'forlogic-core';
2
2
 
3
3
  <BodyContent
4
4
  breadcrumbs={[
@@ -80,4 +80,4 @@ import{j as e,eu as o,ev as a,C as t,cf as n,B as r,f as i,G as s}from"./index-C
80
80
  <ContentContainer title="Conteúdo">
81
81
  <p>Navegação com React Router...</p>
82
82
  </ContentContainer>
83
- </BodyContent>`,preview:e.jsx("div",{className:"w-full max-w-3xl",children:e.jsx(o,{breadcrumbs:[{label:"Home",href:"#"},{label:"Módulo",href:"#"},{label:"Página Atual"}],className:"rounded-lg overflow-hidden",children:e.jsx(a,{title:"Navegação com React Router",children:e.jsx("p",{className:"text-muted-foreground",children:"Os links do breadcrumb podem usar o componente Link do React Router para navegação SPA sem recarregamento de página."})})})})}],accessibility:['O breadcrumb usa a tag nav com aria-label="breadcrumb" para identificação por leitores de tela','A página atual no breadcrumb é marcada com aria-current="page"',"Os containers usam estrutura semântica com headings (h2) para títulos",'Separadores do breadcrumb são marcados com aria-hidden="true"'],notes:["O background externo usa a cor Escala Neutra 100 (#F5F5F5) para separar visualmente do conteúdo","Os ContentContainers têm background branco (#FFFFFF) com sombra sutil e border-radius","Use múltiplos ContentContainers para agrupar conteúdos relacionados na mesma página","O último item do breadcrumb é automaticamente tratado como página atual (sem link)","Para integração com React Router, use asChild=true e passe o Link como children","O espaçamento entre containers segue o padrão do Design System (space-y-6)"]})}export{m as BodyContentDoc};
83
+ </BodyContent>`,preview:e.jsx("div",{className:"w-full max-w-3xl",children:e.jsx(o,{breadcrumbs:[{label:"Home",href:"#"},{label:"Módulo",href:"#"},{label:"Página Atual"}],className:"rounded-lg overflow-hidden",children:e.jsx(a,{title:"Navegação com React Router",children:e.jsx("p",{className:"text-muted-foreground",children:"Os links do breadcrumb podem usar o componente Link do React Router para navegação SPA sem recarregamento de página."})})})})}],accessibility:['O breadcrumb usa a tag nav com aria-label="breadcrumb" para identificação por leitores de tela','A página atual no breadcrumb é marcada com aria-current="page"',"Os containers usam estrutura semântica com headings (h2) para títulos",'Separadores do breadcrumb são marcados com aria-hidden="true"'],notes:["O background externo usa a cor Escala Neutra 100 (#F5F5F5) para separar visualmente do conteúdo","Os ContentContainers têm background branco (#FFFFFF) com sombra sutil e border-radius","Use múltiplos ContentContainers para agrupar conteúdos relacionados na mesma página","O último item do breadcrumb é automaticamente tratado como página atual (sem link)","Para integração com React Router, use asChild=true e passe o Link como children","O espaçamento entre containers segue o padrão do Design System (space-y-6)"]})}export{u as BodyContentDoc};
@@ -1,4 +1,4 @@
1
- import{j as e,dc as m,dd as c,de as r,df as d,dg as i,dh as a,di as s,dj as t}from"./index-CE0k7Rdh.js";import{C as o}from"./ComponentDocTemplate-CRbRY-v5.js";function l(){return e.jsx(o,{title:"Breadcrumb",description:"Exibe o caminho até o recurso atual usando uma hierarquia de links.",component:e.jsx(m,{children:e.jsxs(c,{children:[e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/",children:"Home"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/ds",children:"Componentes"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(s,{children:"Breadcrumb"})})]})}),usage:`import { Link } from "react-router-dom"
1
+ import{j as e,ae as m,af as c,ag as r,ah as d,ff as i,ai as a,aj as s,fg as t}from"./index-DkiftrvI.js";import{C as o}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function b(){return e.jsx(o,{title:"Breadcrumb",description:"Exibe o caminho até o recurso atual usando uma hierarquia de links.",component:e.jsx(m,{children:e.jsxs(c,{children:[e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/",children:"Home"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/ds",children:"Componentes"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(s,{children:"Breadcrumb"})})]})}),usage:`import { Link } from "react-router-dom"
2
2
  import {
3
3
  Breadcrumb,
4
4
  BreadcrumbItem,
@@ -72,4 +72,4 @@ import {
72
72
  <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
73
73
  </BreadcrumbItem>
74
74
  </BreadcrumbList>
75
- </Breadcrumb>`}],props:[{name:"Breadcrumb",type:"nav",default:"-",description:'Elemento raiz do breadcrumb. Renderiza um elemento nav com aria-label="breadcrumb".'},{name:"BreadcrumbList",type:"ol",default:"-",description:"Lista ordenada que contém os itens do breadcrumb."},{name:"BreadcrumbItem",type:"li",default:"-",description:"Item individual do breadcrumb."},{name:"BreadcrumbLink",type:"a",default:"-",description:"Link clicável do breadcrumb. Use asChild + Link para navegação SPA."},{name:"asChild",type:"boolean",default:"false",description:"Permite compor com Link do React Router para navegação SPA."},{name:"BreadcrumbPage",type:"span",default:"-",description:'Representa a página atual (não clicável). Possui aria-current="page".'},{name:"BreadcrumbSeparator",type:"li",default:"ChevronRight",description:"Separador visual entre itens do breadcrumb."},{name:"BreadcrumbEllipsis",type:"span",default:"-",description:"Indica itens ocultos (reticências). Usado para breadcrumbs colapsados."}],accessibility:['Usa elemento nav com aria-label="breadcrumb" para identificação por leitores de tela.',"Estrutura HTML semântica com lista ordenada (ol > li).",'Página atual marcada com aria-current="page" e aria-disabled="true".','Separadores marcados com role="presentation" e aria-hidden="true".','BreadcrumbEllipsis inclui texto sr-only "Mais" para leitores de tela.',"Links navegáveis por teclado com foco visível.","Segue padrão WAI-ARIA Breadcrumb."],notes:["⚠️ OBRIGATÓRIO: Use asChild + Link do React Router para navegação SPA sem reload.","Use BreadcrumbPage para o item final (página atual) em vez de BreadcrumbLink.","Considere colapsar itens intermediários em telas menores usando BreadcrumbEllipsis.","Evite usar href diretamente - causa reload completo da página."]})}export{l as BreadcrumbDoc};
75
+ </Breadcrumb>`}],props:[{name:"Breadcrumb",type:"nav",default:"-",description:'Elemento raiz do breadcrumb. Renderiza um elemento nav com aria-label="breadcrumb".'},{name:"BreadcrumbList",type:"ol",default:"-",description:"Lista ordenada que contém os itens do breadcrumb."},{name:"BreadcrumbItem",type:"li",default:"-",description:"Item individual do breadcrumb."},{name:"BreadcrumbLink",type:"a",default:"-",description:"Link clicável do breadcrumb. Use asChild + Link para navegação SPA."},{name:"asChild",type:"boolean",default:"false",description:"Permite compor com Link do React Router para navegação SPA."},{name:"BreadcrumbPage",type:"span",default:"-",description:'Representa a página atual (não clicável). Possui aria-current="page".'},{name:"BreadcrumbSeparator",type:"li",default:"ChevronRight",description:"Separador visual entre itens do breadcrumb."},{name:"BreadcrumbEllipsis",type:"span",default:"-",description:"Indica itens ocultos (reticências). Usado para breadcrumbs colapsados."}],accessibility:['Usa elemento nav com aria-label="breadcrumb" para identificação por leitores de tela.',"Estrutura HTML semântica com lista ordenada (ol > li).",'Página atual marcada com aria-current="page" e aria-disabled="true".','Separadores marcados com role="presentation" e aria-hidden="true".','BreadcrumbEllipsis inclui texto sr-only "Mais" para leitores de tela.',"Links navegáveis por teclado com foco visível.","Segue padrão WAI-ARIA Breadcrumb."],notes:["⚠️ OBRIGATÓRIO: Use asChild + Link do React Router para navegação SPA sem reload.","Use BreadcrumbPage para o item final (página atual) em vez de BreadcrumbLink.","Considere colapsar itens intermediários em telas menores usando BreadcrumbEllipsis.","Evite usar href diretamente - causa reload completo da página."]})}export{b as BreadcrumbDoc};
@@ -1,4 +1,4 @@
1
- import{j as a,f as t,P as e,v as n,w as i,x as r,T as s,y as o}from"./index-CE0k7Rdh.js";import{C as l}from"./ComponentDocTemplate-CRbRY-v5.js";function u(){return a.jsx(l,{title:"Button",description:"Componente de botão com variantes semânticas, tamanhos e estados. Use para ações primárias, secundárias e destrutivas.",component:a.jsx(t,{children:"Button"}),usage:`import { Button } from "forlogic-core"
1
+ import{j as a,x as t,P as e,S as n,aY as i,aJ as r,y as s,A as o}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function m(){return a.jsx(l,{title:"Button",description:"Componente de botão com variantes semânticas, tamanhos e estados. Use para ações primárias, secundárias e destrutivas.",component:a.jsx(t,{children:"Button"}),usage:`import { Button } from "forlogic-core"
2
2
 
3
3
  <Button>Click me</Button>
4
4
  <Button variant="primary">Primary</Button>
@@ -38,4 +38,4 @@ import{j as a,f as t,P as e,v as n,w as i,x as r,T as s,y as o}from"./index-CE0k
38
38
  <Button variant="danger">
39
39
  <Trash2 className="mr-2 h-4 w-4" />
40
40
  Excluir
41
- </Button>`}],props:[{name:"variant",type:'"primary" | "secondary" | "tertiary" | "outline" | "ghost" | "subtle" | "danger" | "destructive" | "link" | "icon"',default:'"primary"',description:'Variante visual do botão. Use "danger" para ações destrutivas (alias de "destructive").'},{name:"size",type:'"sm" | "md" | "lg" | "xl" | "icon" | "icon-sm" | "icon-xs" | "default"',default:'"md"',description:"Tamanho do botão."},{name:"asChild",type:"boolean",default:"false",description:"Renderiza como elemento filho (ex: Link)."},{name:"disabled",type:"boolean",default:"false",description:"Estado desabilitado."}],accessibility:["Acessível via teclado (Tab, Enter, Space)","Indicador de foco visível (focus-visible)","Estado desabilitado comunicado a leitores de tela","Botões de ícone devem ter aria-label","Tamanho mínimo de toque de 44x44px no mobile"],notes:['✅ Use variant="primary" para a ação principal da página',"✅ Limite a um botão primário por seção",'✅ Use variant="danger" para ações destrutivas (consistente com Alert e Badge)',"✅ Inclua estado de loading para ações assíncronas","❌ Não use múltiplos botões primários no mesmo contexto","❌ Não crie estilos customizados fora do design system"]})}export{u as ButtonDoc};
41
+ </Button>`}],props:[{name:"variant",type:'"primary" | "secondary" | "tertiary" | "outline" | "ghost" | "subtle" | "danger" | "destructive" | "link" | "icon"',default:'"primary"',description:'Variante visual do botão. Use "danger" para ações destrutivas (alias de "destructive").'},{name:"size",type:'"sm" | "md" | "lg" | "xl" | "icon" | "icon-sm" | "icon-xs" | "default"',default:'"md"',description:"Tamanho do botão."},{name:"asChild",type:"boolean",default:"false",description:"Renderiza como elemento filho (ex: Link)."},{name:"disabled",type:"boolean",default:"false",description:"Estado desabilitado."}],accessibility:["Acessível via teclado (Tab, Enter, Space)","Indicador de foco visível (focus-visible)","Estado desabilitado comunicado a leitores de tela","Botões de ícone devem ter aria-label","Tamanho mínimo de toque de 44x44px no mobile"],notes:['✅ Use variant="primary" para a ação principal da página',"✅ Limite a um botão primário por seção",'✅ Use variant="danger" para ações destrutivas (consistente com Alert e Badge)',"✅ Inclua estado de loading para ações assíncronas","❌ Não use múltiplos botões primários no mesmo contexto","❌ Não crie estilos customizados fora do design system"]})}export{m as ButtonDoc};
@@ -0,0 +1,7 @@
1
+ import{r as s,j as t,o as d,aZ as u,x as o}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const c=u("flex items-center",{variants:{orientation:{horizontal:"flex-row [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"}},defaultVariants:{orientation:"horizontal"}}),e=s.forwardRef(({className:n,orientation:a,...r},i)=>t.jsx("div",{ref:i,className:d(c({orientation:a}),n),...r}));e.displayName="ButtonGroup";function B(){return t.jsx(l,{title:"Button Group",description:"Agrupa botões relacionados com espaçamento e bordas apropriados.",component:t.jsxs(e,{children:[t.jsx(o,{variant:"outline",children:"Esquerda"}),t.jsx(o,{variant:"outline",children:"Meio"}),t.jsx(o,{variant:"outline",children:"Direita"})]}),usage:`import { ButtonGroup, Button } from "forlogic-core"
2
+
3
+ <ButtonGroup>
4
+ <Button variant="outline">Esquerda</Button>
5
+ <Button variant="outline">Meio</Button>
6
+ <Button variant="outline">Direita</Button>
7
+ </ButtonGroup>`,props:[{name:"orientation",type:'"horizontal" | "vertical"',default:'"horizontal"',description:"Orientação do grupo de botões."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para estilização."},{name:"children",type:"ReactNode",default:"-",description:"Botões a serem agrupados."}],accessibility:["Mantém acessibilidade individual dos botões","Gerenciamento adequado de foco","Navegação por teclas de seta entre botões"]})}export{B as ButtonGroupDoc};
@@ -1,4 +1,4 @@
1
- import{aO as C,aP as S,r as s,j as e,aQ as D,L as n,f as r}from"./index-CE0k7Rdh.js";import{C as f}from"./ComponentDocTemplate-CRbRY-v5.js";import{C as m,D as d}from"./date-picker-zhJU-_kM.js";function p(l,o){const i=C(l);return isNaN(o)?S(l,NaN):(o&&i.setDate(i.getDate()+o),i)}function g(l,o){return p(l,-7)}function N(){const[l,o]=s.useState(new Date),[i,u]=s.useState();return e.jsx(f,{title:"Calendar & Date Picker",description:"Componentes para seleção de datas. O Calendar exibe um calendário interativo, enquanto o Date Picker combina um campo de input com o calendário em um popover.",component:e.jsxs("div",{className:"flex flex-wrap gap-8 items-start",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Calendar"}),e.jsx(m,{mode:"single",selected:l,onSelect:o,className:"rounded-md border"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Date Picker"}),e.jsx(d,{date:i,onDateChange:u,placeholder:"Selecione uma data",className:"w-[280px]"})]})]}),usage:`import { Calendar, DatePicker } from "forlogic-core"
1
+ import{eJ as C,eK as S,r as s,j as e,eL as D,J as n,x as r}from"./index-DkiftrvI.js";import{C as g}from"./ComponentDocTemplate-CQbBhfvZ.js";import{C as m,D as d}from"./date-picker-BW3eGOe_.js";import"./ExampleCard-DuLrb3t-.js";function p(l,o){const i=C(l);return isNaN(o)?S(l,NaN):(o&&i.setDate(i.getDate()+o),i)}function f(l,o){return p(l,-7)}function v(){const[l,o]=s.useState(new Date),[i,u]=s.useState();return e.jsx(g,{title:"Calendar & Date Picker",description:"Componentes para seleção de datas. O Calendar exibe um calendário interativo, enquanto o Date Picker combina um campo de input com o calendário em um popover.",component:e.jsxs("div",{className:"flex flex-wrap gap-8 items-start",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Calendar"}),e.jsx(m,{mode:"single",selected:l,onSelect:o,className:"rounded-md border"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Date Picker"}),e.jsx(d,{date:i,onDateChange:u,placeholder:"Selecione uma data",className:"w-[280px]"})]})]}),usage:`import { Calendar, DatePicker } from "forlogic-core"
2
2
  import { useState } from "react"
3
3
 
4
4
  // Calendar
@@ -70,7 +70,7 @@ const [endDate, setEndDate] = useState<Date>();
70
70
  onDateChange={setEndDate}
71
71
  disabledDates={(date) => date < startDate}
72
72
  />
73
- </div>`},{title:"Date Picker com Atalhos",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2 w-[280px]",children:[e.jsx(n,{children:"Selecione ou use um atalho"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(new Date),children:"Hoje"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,1)),children:"Amanhã"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,7)),children:"+7 dias"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(g(new Date)),children:"-7 dias"})]})]})})(),code:`const [date, setDate] = useState<Date>();
73
+ </div>`},{title:"Date Picker com Atalhos",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2 w-[280px]",children:[e.jsx(n,{children:"Selecione ou use um atalho"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(new Date),children:"Hoje"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,1)),children:"Amanhã"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,7)),children:"+7 dias"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(f(new Date)),children:"-7 dias"})]})]})})(),code:`const [date, setDate] = useState<Date>();
74
74
 
75
75
  <DatePicker
76
76
  date={date}
@@ -78,4 +78,4 @@ const [endDate, setEndDate] = useState<Date>();
78
78
  />
79
79
 
80
80
  <Button onClick={() => setDate(new Date())}>Hoje</Button>
81
- <Button onClick={() => setDate(addDays(new Date(), 1))}>Amanhã</Button>`}],props:[{name:"mode",type:'"single" | "multiple" | "range"',default:'"single"',description:"(Calendar) O modo de seleção."},{name:"selected",type:"Date | Date[] | DateRange",default:"-",description:"(Calendar) A(s) data(s) selecionada(s)."},{name:"onSelect",type:"(date) => void",default:"-",description:"(Calendar) Callback quando uma data é selecionada."},{name:"disabled",type:"(date: Date) => boolean",default:"-",description:"(Calendar) Função para desabilitar datas específicas."},{name:"showOutsideDays",type:"boolean",default:"true",description:"(Calendar) Exibe dias de meses adjacentes."},{name:"className",type:"string",default:"-",description:"(Calendar) Classes CSS adicionais."},{name:"date",type:"Date",default:"-",description:"(DatePicker) A data selecionada."},{name:"onDateChange",type:"(date: Date | undefined) => void",default:"-",description:"(DatePicker) Callback quando a data muda."},{name:"placeholder",type:"string",default:'"Pick a date"',description:"(DatePicker) Texto do placeholder."},{name:"disabled",type:"boolean",default:"false",description:"(DatePicker) Desabilita o componente."},{name:"disabledDates",type:"(date: Date) => boolean",default:"-",description:"(DatePicker) Função para desabilitar datas específicas."},{name:"className",type:"string",default:"-",description:"(DatePicker) Classes CSS adicionais."}],accessibility:["Navegação completa por teclado","Teclas de seta para navegar entre datas","Page Up/Down para navegação mensal","Labels e roles ARIA apropriados","Gerenciamento de foco adequado"]})}export{N as CalendarDoc};
81
+ <Button onClick={() => setDate(addDays(new Date(), 1))}>Amanhã</Button>`}],props:[{name:"mode",type:'"single" | "multiple" | "range"',default:'"single"',description:"(Calendar) O modo de seleção."},{name:"selected",type:"Date | Date[] | DateRange",default:"-",description:"(Calendar) A(s) data(s) selecionada(s)."},{name:"onSelect",type:"(date) => void",default:"-",description:"(Calendar) Callback quando uma data é selecionada."},{name:"disabled",type:"(date: Date) => boolean",default:"-",description:"(Calendar) Função para desabilitar datas específicas."},{name:"showOutsideDays",type:"boolean",default:"true",description:"(Calendar) Exibe dias de meses adjacentes."},{name:"className",type:"string",default:"-",description:"(Calendar) Classes CSS adicionais."},{name:"date",type:"Date",default:"-",description:"(DatePicker) A data selecionada."},{name:"onDateChange",type:"(date: Date | undefined) => void",default:"-",description:"(DatePicker) Callback quando a data muda."},{name:"placeholder",type:"string",default:'"Pick a date"',description:"(DatePicker) Texto do placeholder."},{name:"disabled",type:"boolean",default:"false",description:"(DatePicker) Desabilita o componente."},{name:"disabledDates",type:"(date: Date) => boolean",default:"-",description:"(DatePicker) Função para desabilitar datas específicas."},{name:"className",type:"string",default:"-",description:"(DatePicker) Classes CSS adicionais."}],accessibility:["Navegação completa por teclado","Teclas de seta para navegar entre datas","Page Up/Down para navegação mensal","Labels e roles ARIA apropriados","Gerenciamento de foco adequado"]})}export{v as CalendarDoc};
@@ -1,4 +1,4 @@
1
- import{j as e,C as a,a as s,b as t,c as d,d as r,af as i,f as o,ag as c,ah as n}from"./index-CE0k7Rdh.js";import{C as l}from"./ComponentDocTemplate-CRbRY-v5.js";function p(){return e.jsx(l,{title:"Card",description:"Exibe um card com cabeçalho, conteúdo e rodapé.",component:e.jsxs(a,{className:"w-[350px]",children:[e.jsxs(s,{children:[e.jsx(t,{children:"Card Title"}),e.jsx(d,{children:"Card Description"})]}),e.jsx(r,{children:e.jsx("p",{children:"Card Content"})})]}),usage:`import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
1
+ import{j as e,a,b as s,c as t,e as d,d as r,bq as i,x as o,br as c,bs as n}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function x(){return e.jsx(l,{title:"Card",description:"Exibe um card com cabeçalho, conteúdo e rodapé.",component:e.jsxs(a,{className:"w-[350px]",children:[e.jsxs(s,{children:[e.jsx(t,{children:"Card Title"}),e.jsx(d,{children:"Card Description"})]}),e.jsx(r,{children:e.jsx("p",{children:"Card Content"})})]}),usage:`import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
2
2
 
3
3
  <Card>
4
4
  <CardHeader>
@@ -46,4 +46,4 @@ import{j as e,C as a,a as s,b as t,c as d,d as r,af as i,f as o,ag as c,ah as n}
46
46
  <p className="text-sm text-muted-foreground">por mês</p>
47
47
  </div>
48
48
  </CardContent>
49
- </Card>`}],props:[{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para o card."}],accessibility:["Estrutura semântica com elementos apropriados","Hierarquia de cabeçalhos adequada","Contraste de cores acessível","Funciona com leitores de tela"]})}export{p as CardDoc};
49
+ </Card>`}],props:[{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para o card."}],accessibility:["Estrutura semântica com elementos apropriados","Hierarquia de cabeçalhos adequada","Contraste de cores acessível","Funciona com leitores de tela"]})}export{x as CardDoc};