forlogic-core 1.16.3 → 1.16.5

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 (134) hide show
  1. package/README.md +113 -109
  2. package/dist/README.md +113 -109
  3. package/dist/components/modules/AccessDeniedDialog.d.ts +41 -0
  4. package/dist/components/modules/ModuleAccessGuard.d.ts +3 -1
  5. package/dist/components/modules/ModuleOfferContent.d.ts +20 -0
  6. package/dist/components/modules/ModulesContent.d.ts +15 -0
  7. package/dist/components/modules/ModulesFooterCards.d.ts +6 -0
  8. package/dist/components/modules/index.d.ts +8 -0
  9. package/dist/components/modules/types.d.ts +2 -0
  10. package/dist/index.css +1 -1
  11. package/dist/index.css.map +1 -1
  12. package/dist/index.esm.js +1 -1
  13. package/dist/index.js +1 -1
  14. package/docs/DESIGN_SYSTEM.md +17 -32
  15. package/package.json +4 -2
  16. package/dist/assets/AccordionDoc-BnfxyOi9.js +0 -31
  17. package/dist/assets/ActionButtonDoc-b4F_J8gn.js +0 -47
  18. package/dist/assets/AlertDoc-PkiHguSJ.js +0 -37
  19. package/dist/assets/AppHeaderDoc-CsFMZGV0.js +0 -67
  20. package/dist/assets/AppSidebarDoc-Bg71N-zq.js +0 -196
  21. package/dist/assets/AuthDoc-DDm57y_J.js +0 -192
  22. package/dist/assets/AvatarDoc-C6wiZIZR.js +0 -11
  23. package/dist/assets/BadgeDoc-Bsg7cfm0.js +0 -36
  24. package/dist/assets/BaseFormDoc-DeIlV273.js +0 -169
  25. package/dist/assets/BodyContentDoc-Q3DGvyN9.js +0 -83
  26. package/dist/assets/BreadcrumbDoc-ChsVFjMF.js +0 -75
  27. package/dist/assets/ButtonDoc-C7Q31Bh3.js +0 -41
  28. package/dist/assets/ButtonGroupDoc-Bn5vhjBq.js +0 -7
  29. package/dist/assets/CalendarDoc-iVjNyxyr.js +0 -81
  30. package/dist/assets/CardDoc-D511dll7.js +0 -49
  31. package/dist/assets/ChartDoc-CQyYOEHL.js +0 -111
  32. package/dist/assets/CheckboxDoc-Cjsy4XAq.js +0 -55
  33. package/dist/assets/ColorPickerDoc-hnYJUWpF.js +0 -10
  34. package/dist/assets/ColorsFoundationDoc-B8Z4tAyZ.js +0 -13
  35. package/dist/assets/ComboTreeDoc-ChEbW4a3.js +0 -21
  36. package/dist/assets/ComboboxDoc-CHWeGE_F.js +0 -134
  37. package/dist/assets/ComponentDocTemplate-BtOCnlM2.js +0 -1
  38. package/dist/assets/ContextMenuDoc-C3mFO_Yx.js +0 -182
  39. package/dist/assets/ContextsDoc-ChEbQxom.js +0 -184
  40. package/dist/assets/CreateCrudPageDoc-C9tXisCF.js +0 -106
  41. package/dist/assets/CrudActionBarDoc-Cp1L4gpO.js +0 -112
  42. package/dist/assets/CrudGridDoc-D-kSFBAQ.js +0 -85
  43. package/dist/assets/CrudOverviewDoc-CeLBwg-B.js +0 -14
  44. package/dist/assets/CrudPrimitivesDoc-B2u1vZog.js +0 -164
  45. package/dist/assets/CrudTableDoc-CvV-II_X.js +0 -95
  46. package/dist/assets/DataListDoc-BLRii0jB.js +0 -13
  47. package/dist/assets/DesignSystemHome-TE0Ubaup.js +0 -1
  48. package/dist/assets/DialogDoc--LC5Jvat.js +0 -981
  49. package/dist/assets/DropdownMenuDoc-oPlEriRY.js +0 -175
  50. package/dist/assets/EmptyStateDoc-rNqfWKok.js +0 -35
  51. package/dist/assets/EnvironmentsDoc-CT7l5s2u.js +0 -96
  52. package/dist/assets/ErrorBoundaryDoc-rPHOUygA.js +0 -111
  53. package/dist/assets/ExampleCard-DfuMYM6E.js +0 -1
  54. package/dist/assets/FormDoc-B0L_QaCT.js +0 -81
  55. package/dist/assets/FoundationOverview-Dbb8rBsU.js +0 -1
  56. package/dist/assets/GridDoc-ifcGA2Yw.js +0 -28
  57. package/dist/assets/HooksDoc-CUOT_3Du.js +0 -665
  58. package/dist/assets/HoverCardDoc-CdTU2QkI.js +0 -31
  59. package/dist/assets/I18nDoc-CMEvFqsz.js +0 -232
  60. package/dist/assets/IconPickerDoc-DF9hEwnJ.js +0 -10
  61. package/dist/assets/IconsFoundationDoc-D4Y0wKbm.js +0 -33
  62. package/dist/assets/InputDoc-d_IL4dsq.js +0 -211
  63. package/dist/assets/LabelDoc-Dr64ISiJ.js +0 -42
  64. package/dist/assets/LeadershipDoc-BnrTuaeV.js +0 -416
  65. package/dist/assets/MediaDoc-CLuVprAr.js +0 -459
  66. package/dist/assets/MenubarDoc-CW7L4QJ4.js +0 -165
  67. package/dist/assets/ModulesDialogDoc-CUb_g4X-.js +0 -71
  68. package/dist/assets/NavigationMenuDoc-Csc0U6bV.js +0 -116
  69. package/dist/assets/OnboardingDialogDoc-3RtjNH1O.js +0 -55
  70. package/dist/assets/PaginationDoc-BGurD4xQ.js +0 -27
  71. package/dist/assets/PaginationDoc-DqFyou6O.js +0 -98
  72. package/dist/assets/PlacesDoc-Dyx8gsqb.js +0 -226
  73. package/dist/assets/PopoverDoc-DHF-ItUX.js +0 -64
  74. package/dist/assets/ProgressDoc-DXKV-fkI.js +0 -29
  75. package/dist/assets/QualiexUserFieldDoc-BbP7w-Pu.js +0 -149
  76. package/dist/assets/RadioGroupDoc-D845uweM.js +0 -57
  77. package/dist/assets/RadiusDoc-vN4tTsay.js +0 -7
  78. package/dist/assets/RequiredFieldsCounterDoc-TzR9r-U9.js +0 -58
  79. package/dist/assets/ResizableDoc-Bkfz_25O.js +0 -104
  80. package/dist/assets/RichTextEditorDoc-BUQrg7M8.js +0 -24
  81. package/dist/assets/ScrollAreaDoc-B6ODYHMX.js +0 -28
  82. package/dist/assets/SecurityDoc-Chbt6w1s.js +0 -204
  83. package/dist/assets/SelectDoc-BhcpBIAO.js +0 -80
  84. package/dist/assets/SeparatorDoc-C3fhatb0.js +0 -4
  85. package/dist/assets/ServicesDoc-_uao-HA_.js +0 -308
  86. package/dist/assets/ShadowsDoc-DpkO_TZQ.js +0 -9
  87. package/dist/assets/SignDoc-BJtnoT6I.js +0 -66
  88. package/dist/assets/SkeletonDoc-BZS07PJh.js +0 -54
  89. package/dist/assets/SliderDoc-D2ApV3XT.js +0 -41
  90. package/dist/assets/SpacingDoc-PNrU24B2.js +0 -12
  91. package/dist/assets/SplitButtonDoc-D5tUF2Ja.js +0 -53
  92. package/dist/assets/StepSelectorDoc-Cj0ALYar.js +0 -41
  93. package/dist/assets/SwitchDoc-DtsT8oh_.js +0 -56
  94. package/dist/assets/TableDoc-BC-jQnXu.js +0 -128
  95. package/dist/assets/TableOfContents-DBMJMbI4.js +0 -1
  96. package/dist/assets/TabsDoc-DtXJ0xY5.js +0 -42
  97. package/dist/assets/TextareaDoc-nuW5tqBQ.js +0 -46
  98. package/dist/assets/ToastDoc-D1aX5zda.js +0 -157
  99. package/dist/assets/ToggleDoc-ILass4CS.js +0 -51
  100. package/dist/assets/TooltipDoc-lPbdWe_9.js +0 -58
  101. package/dist/assets/TruncatedCellDoc-DOAzbF2F.js +0 -12
  102. package/dist/assets/TypographyFoundationDoc-3ZD-rQZw.js +0 -7
  103. package/dist/assets/UtilitiesDoc-D7lkYhuz.js +0 -145
  104. package/dist/assets/blocks-Jy49RoqJ.js +0 -1
  105. package/dist/assets/calendar-days-Cvf2zLJl.js +0 -1
  106. package/dist/assets/circle-plus-MnG9kjyq.js +0 -1
  107. package/dist/assets/circle-x-B9ouupla.js +0 -1
  108. package/dist/assets/crown-BweN5jpI.js +0 -1
  109. package/dist/assets/date-picker-ttyYeYvC.js +0 -1
  110. package/dist/assets/disabled-menu-item-WlpPOqxg.js +0 -1
  111. package/dist/assets/drawer-DvU6_eK5.js +0 -3
  112. package/dist/assets/file-pen-line-C0VV-QjF.js +0 -1
  113. package/dist/assets/git-branch-DCjGGwvF.js +0 -1
  114. package/dist/assets/globe-BdFDFP_k.js +0 -1
  115. package/dist/assets/grip-vertical-CgXp0oI-.js +0 -1
  116. package/dist/assets/hash-BAYi_wfk.js +0 -1
  117. package/dist/assets/index-BtX5DZqb.js +0 -310
  118. package/dist/assets/index-C1So5Sai.css +0 -1
  119. package/dist/assets/life-buoy-BydIgTyJ.js +0 -1
  120. package/dist/assets/lucide-react-ZIMhRYmb.js +0 -1
  121. package/dist/assets/monitor-B6txWJPg.js +0 -1
  122. package/dist/assets/package-DNe3FsCh.js +0 -1
  123. package/dist/assets/pen-CzTmQ16z.js +0 -1
  124. package/dist/assets/pin-CJJgLEBz.js +0 -1
  125. package/dist/assets/radio-group-Btv_BY60.js +0 -1
  126. package/dist/assets/server-XQDXtrjm.js +0 -1
  127. package/dist/assets/share-2-Dz_89MJb.js +0 -1
  128. package/dist/assets/step-selector-D0_Y1dow.js +0 -1
  129. package/dist/assets/text-align-start-WsHo7CNJ.js +0 -1
  130. package/dist/assets/trash-CeK-mWnM.js +0 -1
  131. package/dist/assets/useMockCrud-RV9z9n5x.js +0 -1
  132. package/dist/assets/user-check-CrbWcnPN.js +0 -1
  133. package/dist/assets/user-plus-Dce9DbqQ.js +0 -1
  134. package/dist/index.html +0 -35
@@ -1,165 +0,0 @@
1
- import{Z as G,r as u,j as e,dt as Re,a3 as Ne,Y as L,cM as ye,$ as U,du as we,a2 as Ae,cN as Te,dv as Ee,a4 as N,dw as ke,dx as _e,dy as Pe,dz as Be,dA as Ge,dB as Oe,cO as Z,X as De,a6 as ze,dC as Fe,dD as Ve,dE as qe,dF as $e,dG as Ke,dH as Le,dI as Ue,dJ as Ze,l as I,ah as Je,k as We,h as Xe}from"./index-BtX5DZqb.js";import{C as He}from"./ComponentDocTemplate-BtOCnlM2.js";import"./ExampleCard-DfuMYM6E.js";import"./TableOfContents-DBMJMbI4.js";var _="Menubar",[O,Ye,Qe]=De(_),[J]=ze(_,[Qe,Z]),m=we(),W=Z(),[er,F]=J(_),X=u.forwardRef((r,n)=>{const{__scopeMenubar:a,value:t,onValueChange:s,defaultValue:b,loop:p=!0,dir:c,...i}=r,f=Ne(c),d=W(a),[v,g]=L({prop:t,onChange:s,defaultProp:b??"",caller:_}),[S,M]=u.useState(null);return e.jsx(er,{scope:a,value:v,onMenuOpen:u.useCallback(R=>{g(R),M(R)},[g]),onMenuClose:u.useCallback(()=>g(""),[g]),onMenuToggle:u.useCallback(R=>{g(q=>q?"":R),M(R)},[g]),dir:f,loop:p,children:e.jsx(O.Provider,{scope:a,children:e.jsx(O.Slot,{scope:a,children:e.jsx(ye,{asChild:!0,...d,orientation:"horizontal",loop:p,dir:f,currentTabStopId:S,onCurrentTabStopIdChange:M,children:e.jsx(U.div,{role:"menubar",...i,ref:n})})})})})});X.displayName=_;var V="MenubarMenu",[rr,H]=J(V),Y=r=>{const{__scopeMenubar:n,value:a,...t}=r,s=G(),b=a||s||"LEGACY_REACT_AUTO_VALUE",p=F(V,n),c=m(n),i=u.useRef(null),f=u.useRef(!1),d=p.value===b;return u.useEffect(()=>{d||(f.current=!1)},[d]),e.jsx(rr,{scope:n,value:b,triggerId:G(),triggerRef:i,contentId:G(),wasKeyboardTriggerOpenRef:f,children:e.jsx(Re,{...c,open:d,onOpenChange:v=>{v||p.onMenuClose()},modal:!1,dir:p.dir,...t})})};Y.displayName=V;var D="MenubarTrigger",Q=u.forwardRef((r,n)=>{const{__scopeMenubar:a,disabled:t=!1,...s}=r,b=W(a),p=m(a),c=F(D,a),i=H(D,a),f=u.useRef(null),d=Ae(n,f,i.triggerRef),[v,g]=u.useState(!1),S=c.value===i.value;return e.jsx(O.ItemSlot,{scope:a,value:i.value,disabled:t,children:e.jsx(Te,{asChild:!0,...b,focusable:!t,tabStopId:i.value,children:e.jsx(Ee,{asChild:!0,...p,children:e.jsx(U.button,{type:"button",role:"menuitem",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":S,"aria-controls":S?i.contentId:void 0,"data-highlighted":v?"":void 0,"data-state":S?"open":"closed","data-disabled":t?"":void 0,disabled:t,...s,ref:d,onPointerDown:N(r.onPointerDown,M=>{!t&&M.button===0&&M.ctrlKey===!1&&(c.onMenuOpen(i.value),S||M.preventDefault())}),onPointerEnter:N(r.onPointerEnter,()=>{c.value&&!S&&(c.onMenuOpen(i.value),f.current?.focus())}),onKeyDown:N(r.onKeyDown,M=>{t||(["Enter"," "].includes(M.key)&&c.onMenuToggle(i.value),M.key==="ArrowDown"&&c.onMenuOpen(i.value),["Enter"," ","ArrowDown"].includes(M.key)&&(i.wasKeyboardTriggerOpenRef.current=!0,M.preventDefault()))}),onFocus:N(r.onFocus,()=>g(!0)),onBlur:N(r.onBlur,()=>g(!1))})})})})});Q.displayName=D;var ar="MenubarPortal",ee=r=>{const{__scopeMenubar:n,...a}=r,t=m(n);return e.jsx(ke,{...t,...a})};ee.displayName=ar;var z="MenubarContent",re=u.forwardRef((r,n)=>{const{__scopeMenubar:a,align:t="start",...s}=r,b=m(a),p=F(z,a),c=H(z,a),i=Ye(a),f=u.useRef(!1);return e.jsx(_e,{id:c.contentId,"aria-labelledby":c.triggerId,"data-radix-menubar-content":"",...b,...s,ref:n,align:t,onCloseAutoFocus:N(r.onCloseAutoFocus,d=>{!p.value&&!f.current&&c.triggerRef.current?.focus(),f.current=!1,d.preventDefault()}),onFocusOutside:N(r.onFocusOutside,d=>{const v=d.target;i().some(S=>S.ref.current?.contains(v))&&d.preventDefault()}),onInteractOutside:N(r.onInteractOutside,()=>{f.current=!0}),onEntryFocus:d=>{c.wasKeyboardTriggerOpenRef.current||d.preventDefault()},onKeyDown:N(r.onKeyDown,d=>{if(["ArrowRight","ArrowLeft"].includes(d.key)){const v=d.target,g=v.hasAttribute("data-radix-menubar-subtrigger"),S=v.closest("[data-radix-menubar-content]")!==d.currentTarget,R=(p.dir==="rtl"?"ArrowRight":"ArrowLeft")===d.key;if(!R&&g||S&&R)return;let A=i().filter(B=>!B.disabled).map(B=>B.value);R&&A.reverse();const $=A.indexOf(c.value);A=p.loop?hr(A,$+1):A.slice($+1);const[K]=A;K&&p.onMenuOpen(K)}},{checkForDefaultPrevented:!1}),style:{...r.style,"--radix-menubar-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-menubar-content-available-width":"var(--radix-popper-available-width)","--radix-menubar-content-available-height":"var(--radix-popper-available-height)","--radix-menubar-trigger-width":"var(--radix-popper-anchor-width)","--radix-menubar-trigger-height":"var(--radix-popper-anchor-height)"}})});re.displayName=z;var nr="MenubarGroup",tr=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Le,{...s,...t,ref:n})});tr.displayName=nr;var or="MenubarLabel",ae=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Ue,{...s,...t,ref:n})});ae.displayName=or;var sr="MenubarItem",ne=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Pe,{...s,...t,ref:n})});ne.displayName=sr;var ur="MenubarCheckboxItem",te=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Fe,{...s,...t,ref:n})});te.displayName=ur;var ir="MenubarRadioGroup",oe=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Ge,{...s,...t,ref:n})});oe.displayName=ir;var dr="MenubarRadioItem",se=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(qe,{...s,...t,ref:n})});se.displayName=dr;var cr="MenubarItemIndicator",ue=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Ve,{...s,...t,ref:n})});ue.displayName=cr;var lr="MenubarSeparator",ie=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Be,{...s,...t,ref:n})});ie.displayName=lr;var br="MenubarArrow",mr=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Ze,{...s,...t,ref:n})});mr.displayName=br;var de="MenubarSub",ce=r=>{const{__scopeMenubar:n,children:a,open:t,onOpenChange:s,defaultOpen:b}=r,p=m(n),[c,i]=L({prop:t,defaultProp:b??!1,onChange:s,caller:de});return e.jsx(Oe,{...p,open:c,onOpenChange:i,children:a})};ce.displayName=de;var pr="MenubarSubTrigger",le=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx($e,{"data-radix-menubar-subtrigger":"",...s,...t,ref:n})});le.displayName=pr;var Mr="MenubarSubContent",be=u.forwardRef((r,n)=>{const{__scopeMenubar:a,...t}=r,s=m(a);return e.jsx(Ke,{...s,"data-radix-menubar-content":"",...t,ref:n,style:{...r.style,"--radix-menubar-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-menubar-content-available-width":"var(--radix-popper-available-width)","--radix-menubar-content-available-height":"var(--radix-popper-available-height)","--radix-menubar-trigger-width":"var(--radix-popper-anchor-width)","--radix-menubar-trigger-height":"var(--radix-popper-anchor-height)"}})});be.displayName=Mr;function hr(r,n){return r.map((a,t)=>r[(n+t)%r.length])}var me=X,xr=Y,pe=Q,fr=ee,Me=re,he=ae,xe=ne,fe=te,gr=oe,ge=se,je=ue,ve=ie,jr=ce,Se=le,Ce=be;const j=xr,P=jr,Ie=gr,y=u.forwardRef(({className:r,...n},a)=>e.jsx(me,{ref:a,className:I("flex h-10 items-center space-x-1 rounded-md border bg-background p-1",r),...n}));y.displayName=me.displayName;const h=u.forwardRef(({className:r,...n},a)=>e.jsx(pe,{ref:a,className:I("flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",r),...n}));h.displayName=pe.displayName;const E=u.forwardRef(({className:r,inset:n,children:a,...t},s)=>e.jsxs(Se,{ref:s,className:I("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",n&&"pl-8",r),...t,children:[a,e.jsx(Xe,{className:"ml-auto h-4 w-4"})]}));E.displayName=Se.displayName;const k=u.forwardRef(({className:r,...n},a)=>e.jsx(Ce,{ref:a,className:I("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r),...n}));k.displayName=Ce.displayName;const x=u.forwardRef(({className:r,align:n="start",alignOffset:a=-4,sideOffset:t=8,...s},b)=>e.jsx(fr,{children:e.jsx(Me,{ref:b,align:n,alignOffset:a,sideOffset:t,className:I("z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r),...s})}));x.displayName=Me.displayName;const o=u.forwardRef(({className:r,inset:n,...a},t)=>e.jsx(xe,{ref:t,className:I("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n&&"pl-8",r),...a}));o.displayName=xe.displayName;const T=u.forwardRef(({className:r,children:n,checked:a,...t},s)=>e.jsxs(fe,{ref:s,className:I("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",r),checked:a,...t,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(je,{children:e.jsx(Je,{className:"h-4 w-4"})})}),n]}));T.displayName=fe.displayName;const w=u.forwardRef(({className:r,children:n,...a},t)=>e.jsxs(ge,{ref:t,className:I("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",r),...a,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(je,{children:e.jsx(We,{className:"h-2 w-2 fill-current"})})}),n]}));w.displayName=ge.displayName;const vr=u.forwardRef(({className:r,inset:n,...a},t)=>e.jsx(he,{ref:t,className:I("px-2 py-1.5 text-sm font-semibold",n&&"pl-8",r),...a}));vr.displayName=he.displayName;const C=u.forwardRef(({className:r,...n},a)=>e.jsx(ve,{ref:a,className:I("-mx-1 my-1 h-px bg-muted",r),...n}));C.displayName=ve.displayName;const l=({className:r,...n})=>e.jsx("span",{className:I("ml-auto text-xs tracking-widest text-muted-foreground",r),...n});l.displayname="MenubarShortcut";function Sr(){const[r,n]=u.useState(!0),[a,t]=u.useState(!1),[s,b]=u.useState("pedro");return e.jsxs(y,{children:[e.jsxs(j,{children:[e.jsx(h,{children:"Arquivo"}),e.jsxs(x,{children:[e.jsxs(o,{children:["Nova Aba ",e.jsx(l,{children:"⌘T"})]}),e.jsxs(o,{children:["Nova Janela ",e.jsx(l,{children:"⌘N"})]}),e.jsx(o,{disabled:!0,children:"Nova Janela Anônima"}),e.jsx(C,{}),e.jsxs(P,{children:[e.jsx(E,{children:"Compartilhar"}),e.jsxs(k,{children:[e.jsx(o,{children:"Email"}),e.jsx(o,{children:"Mensagem"}),e.jsx(o,{children:"Notas"})]})]}),e.jsx(C,{}),e.jsxs(o,{children:["Imprimir... ",e.jsx(l,{children:"⌘P"})]})]})]}),e.jsxs(j,{children:[e.jsx(h,{children:"Editar"}),e.jsxs(x,{children:[e.jsxs(o,{children:["Desfazer ",e.jsx(l,{children:"⌘Z"})]}),e.jsxs(o,{children:["Refazer ",e.jsx(l,{children:"⇧⌘Z"})]}),e.jsx(C,{}),e.jsxs(o,{children:["Recortar ",e.jsx(l,{children:"⌘X"})]}),e.jsxs(o,{children:["Copiar ",e.jsx(l,{children:"⌘C"})]}),e.jsxs(o,{children:["Colar ",e.jsx(l,{children:"⌘V"})]})]})]}),e.jsxs(j,{children:[e.jsx(h,{children:"Visualizar"}),e.jsxs(x,{children:[e.jsx(T,{checked:r,onCheckedChange:n,children:"Mostrar Favoritos"}),e.jsx(T,{checked:a,onCheckedChange:t,children:"Mostrar URLs Completas"}),e.jsx(C,{}),e.jsxs(o,{inset:!0,children:["Recarregar ",e.jsx(l,{children:"⌘R"})]})]})]}),e.jsxs(j,{children:[e.jsx(h,{children:"Perfis"}),e.jsx(x,{children:e.jsxs(Ie,{value:s,onValueChange:b,children:[e.jsx(w,{value:"pedro",children:"Pedro"}),e.jsx(w,{value:"ana",children:"Ana"}),e.jsx(w,{value:"carlos",children:"Carlos"})]})})]})]})}function Cr(){const[r,n]=u.useState(!0),[a,t]=u.useState(!1),[s,b]=u.useState(!1);return e.jsx(y,{children:e.jsxs(j,{children:[e.jsx(h,{children:"Visualizar"}),e.jsxs(x,{children:[e.jsx(T,{checked:r,onCheckedChange:n,children:"Barra de Status"}),e.jsx(T,{checked:a,onCheckedChange:t,children:"Barra de Atividades"}),e.jsx(T,{checked:s,onCheckedChange:b,children:"Painel"})]})]})})}function Ir(){const[r,n]=u.useState("system");return e.jsx(y,{children:e.jsxs(j,{children:[e.jsx(h,{children:"Aparência"}),e.jsx(x,{children:e.jsxs(Ie,{value:r,onValueChange:n,children:[e.jsx(w,{value:"light",children:"Claro"}),e.jsx(w,{value:"dark",children:"Escuro"}),e.jsx(w,{value:"system",children:"Sistema"})]})})]})})}function Rr(){return e.jsx(y,{children:e.jsxs(j,{children:[e.jsx(h,{children:"Arquivo"}),e.jsxs(x,{children:[e.jsx(o,{children:"Novo Arquivo"}),e.jsx(o,{children:"Nova Pasta"}),e.jsx(C,{}),e.jsxs(P,{children:[e.jsx(E,{children:"Exportar como"}),e.jsxs(k,{children:[e.jsx(o,{children:"PDF"}),e.jsx(o,{children:"Word (.docx)"}),e.jsx(o,{children:"Excel (.xlsx)"}),e.jsxs(P,{children:[e.jsx(E,{children:"Imagem"}),e.jsxs(k,{children:[e.jsx(o,{children:"PNG"}),e.jsx(o,{children:"JPEG"}),e.jsx(o,{children:"SVG"})]})]})]})]}),e.jsxs(P,{children:[e.jsx(E,{children:"Compartilhar"}),e.jsxs(k,{children:[e.jsx(o,{children:"Email"}),e.jsx(o,{children:"Link"}),e.jsx(o,{children:"Redes Sociais"})]})]})]})]})})}function Nr(){return e.jsx(y,{children:e.jsxs(j,{children:[e.jsx(h,{children:"Editar"}),e.jsxs(x,{children:[e.jsxs(o,{children:["Desfazer ",e.jsx(l,{children:"⌘Z"})]}),e.jsxs(o,{children:["Refazer ",e.jsx(l,{children:"⇧⌘Z"})]}),e.jsx(C,{}),e.jsxs(o,{children:["Recortar ",e.jsx(l,{children:"⌘X"})]}),e.jsxs(o,{children:["Copiar ",e.jsx(l,{children:"⌘C"})]}),e.jsxs(o,{children:["Colar ",e.jsx(l,{children:"⌘V"})]}),e.jsx(C,{}),e.jsxs(o,{children:["Selecionar Tudo ",e.jsx(l,{children:"⌘A"})]}),e.jsxs(o,{children:["Buscar ",e.jsx(l,{children:"⌘F"})]}),e.jsxs(o,{children:["Substituir ",e.jsx(l,{children:"⌘H"})]})]})]})})}function yr(){return e.jsx(y,{children:e.jsxs(j,{children:[e.jsx(h,{children:"Arquivo"}),e.jsxs(x,{children:[e.jsx(o,{children:"Novo"}),e.jsx(o,{children:"Abrir"}),e.jsx(C,{}),e.jsx(o,{disabled:!0,children:"Salvar (sem alterações)"}),e.jsx(o,{children:"Salvar Como..."}),e.jsx(C,{}),e.jsx(o,{disabled:!0,children:"Reverter para Versão Anterior"}),e.jsx(o,{children:"Fechar"})]})]})})}function _r(){return e.jsx(He,{title:"Menubar",description:"Barra de menu horizontal com submenus, checkboxes e radio items. Ideal para barras de navegação de aplicações desktop-like, seguindo padrões de aplicações nativas.",component:e.jsx(Sr,{}),usage:`import {
2
- Menubar,
3
- MenubarContent,
4
- MenubarItem,
5
- MenubarMenu,
6
- MenubarSeparator,
7
- MenubarShortcut,
8
- MenubarTrigger,
9
- MenubarCheckboxItem,
10
- MenubarRadioGroup,
11
- MenubarRadioItem,
12
- MenubarSub,
13
- MenubarSubContent,
14
- MenubarSubTrigger,
15
- } from "forlogic-core"
16
-
17
- // Exemplo básico
18
- <Menubar>
19
- <MenubarMenu>
20
- <MenubarTrigger>Arquivo</MenubarTrigger>
21
- <MenubarContent>
22
- <MenubarItem>
23
- Novo <MenubarShortcut>⌘N</MenubarShortcut>
24
- </MenubarItem>
25
- <MenubarItem>Abrir</MenubarItem>
26
- <MenubarSeparator />
27
- <MenubarItem>Sair</MenubarItem>
28
- </MenubarContent>
29
- </MenubarMenu>
30
- </Menubar>
31
-
32
- // Com checkbox items
33
- const [showBar, setShowBar] = useState(true);
34
-
35
- <MenubarCheckboxItem
36
- checked={showBar}
37
- onCheckedChange={setShowBar}
38
- >
39
- Mostrar Barra
40
- </MenubarCheckboxItem>
41
-
42
- // Com radio group
43
- const [theme, setTheme] = useState("light");
44
-
45
- <MenubarRadioGroup value={theme} onValueChange={setTheme}>
46
- <MenubarRadioItem value="light">Claro</MenubarRadioItem>
47
- <MenubarRadioItem value="dark">Escuro</MenubarRadioItem>
48
- </MenubarRadioGroup>
49
-
50
- // Com submenus
51
- <MenubarSub>
52
- <MenubarSubTrigger>Exportar</MenubarSubTrigger>
53
- <MenubarSubContent>
54
- <MenubarItem>PDF</MenubarItem>
55
- <MenubarItem>Word</MenubarItem>
56
- </MenubarSubContent>
57
- </MenubarSub>`,examples:[{title:"Menu Simples",description:"Menubar básico com múltiplos menus e itens.",preview:e.jsxs(y,{children:[e.jsxs(j,{children:[e.jsx(h,{children:"Arquivo"}),e.jsxs(x,{children:[e.jsx(o,{children:"Novo"}),e.jsx(o,{children:"Abrir"}),e.jsx(C,{}),e.jsx(o,{children:"Salvar"})]})]}),e.jsxs(j,{children:[e.jsx(h,{children:"Editar"}),e.jsxs(x,{children:[e.jsx(o,{children:"Desfazer"}),e.jsx(o,{children:"Refazer"})]})]}),e.jsxs(j,{children:[e.jsx(h,{children:"Ajuda"}),e.jsxs(x,{children:[e.jsx(o,{children:"Documentação"}),e.jsx(o,{children:"Sobre"})]})]})]}),code:`<Menubar>
58
- <MenubarMenu>
59
- <MenubarTrigger>Arquivo</MenubarTrigger>
60
- <MenubarContent>
61
- <MenubarItem>Novo</MenubarItem>
62
- <MenubarItem>Abrir</MenubarItem>
63
- <MenubarSeparator />
64
- <MenubarItem>Salvar</MenubarItem>
65
- </MenubarContent>
66
- </MenubarMenu>
67
- <MenubarMenu>
68
- <MenubarTrigger>Editar</MenubarTrigger>
69
- <MenubarContent>
70
- <MenubarItem>Desfazer</MenubarItem>
71
- <MenubarItem>Refazer</MenubarItem>
72
- </MenubarContent>
73
- </MenubarMenu>
74
- </Menubar>`},{title:"Atalhos de Teclado",description:"Exibição de atalhos de teclado junto aos itens do menu.",preview:e.jsx(Nr,{}),code:`<Menubar>
75
- <MenubarMenu>
76
- <MenubarTrigger>Editar</MenubarTrigger>
77
- <MenubarContent>
78
- <MenubarItem>
79
- Desfazer <MenubarShortcut>⌘Z</MenubarShortcut>
80
- </MenubarItem>
81
- <MenubarItem>
82
- Refazer <MenubarShortcut>⇧⌘Z</MenubarShortcut>
83
- </MenubarItem>
84
- <MenubarSeparator />
85
- <MenubarItem>
86
- Recortar <MenubarShortcut>⌘X</MenubarShortcut>
87
- </MenubarItem>
88
- <MenubarItem>
89
- Copiar <MenubarShortcut>⌘C</MenubarShortcut>
90
- </MenubarItem>
91
- <MenubarItem>
92
- Colar <MenubarShortcut>⌘V</MenubarShortcut>
93
- </MenubarItem>
94
- </MenubarContent>
95
- </MenubarMenu>
96
- </Menubar>`},{title:"Checkbox Items",description:"Itens com checkbox para alternar opções de visualização.",preview:e.jsx(Cr,{}),code:`const [showStatusBar, setShowStatusBar] = useState(true);
97
- const [showActivityBar, setShowActivityBar] = useState(false);
98
-
99
- <Menubar>
100
- <MenubarMenu>
101
- <MenubarTrigger>Visualizar</MenubarTrigger>
102
- <MenubarContent>
103
- <MenubarCheckboxItem
104
- checked={showStatusBar}
105
- onCheckedChange={setShowStatusBar}
106
- >
107
- Barra de Status
108
- </MenubarCheckboxItem>
109
- <MenubarCheckboxItem
110
- checked={showActivityBar}
111
- onCheckedChange={setShowActivityBar}
112
- >
113
- Barra de Atividades
114
- </MenubarCheckboxItem>
115
- </MenubarContent>
116
- </MenubarMenu>
117
- </Menubar>`},{title:"Radio Group",description:"Grupo de opções mutuamente exclusivas (apenas uma pode ser selecionada).",preview:e.jsx(Ir,{}),code:`const [theme, setTheme] = useState("system");
118
-
119
- <Menubar>
120
- <MenubarMenu>
121
- <MenubarTrigger>Aparência</MenubarTrigger>
122
- <MenubarContent>
123
- <MenubarRadioGroup value={theme} onValueChange={setTheme}>
124
- <MenubarRadioItem value="light">Claro</MenubarRadioItem>
125
- <MenubarRadioItem value="dark">Escuro</MenubarRadioItem>
126
- <MenubarRadioItem value="system">Sistema</MenubarRadioItem>
127
- </MenubarRadioGroup>
128
- </MenubarContent>
129
- </MenubarMenu>
130
- </Menubar>`},{title:"Submenus Aninhados",description:"Menus com submenus para organização hierárquica de opções.",preview:e.jsx(Rr,{}),code:`<Menubar>
131
- <MenubarMenu>
132
- <MenubarTrigger>Arquivo</MenubarTrigger>
133
- <MenubarContent>
134
- <MenubarItem>Novo Arquivo</MenubarItem>
135
- <MenubarSeparator />
136
- <MenubarSub>
137
- <MenubarSubTrigger>Exportar como</MenubarSubTrigger>
138
- <MenubarSubContent>
139
- <MenubarItem>PDF</MenubarItem>
140
- <MenubarItem>Word (.docx)</MenubarItem>
141
- <MenubarSub>
142
- <MenubarSubTrigger>Imagem</MenubarSubTrigger>
143
- <MenubarSubContent>
144
- <MenubarItem>PNG</MenubarItem>
145
- <MenubarItem>JPEG</MenubarItem>
146
- </MenubarSubContent>
147
- </MenubarSub>
148
- </MenubarSubContent>
149
- </MenubarSub>
150
- </MenubarContent>
151
- </MenubarMenu>
152
- </Menubar>`},{title:"Itens Desabilitados",description:"Itens que não podem ser selecionados em determinadas condições.",preview:e.jsx(yr,{}),code:`<Menubar>
153
- <MenubarMenu>
154
- <MenubarTrigger>Arquivo</MenubarTrigger>
155
- <MenubarContent>
156
- <MenubarItem>Novo</MenubarItem>
157
- <MenubarItem>Abrir</MenubarItem>
158
- <MenubarSeparator />
159
- <MenubarItem disabled>Salvar (sem alterações)</MenubarItem>
160
- <MenubarItem>Salvar Como...</MenubarItem>
161
- <MenubarSeparator />
162
- <MenubarItem disabled>Reverter para Versão Anterior</MenubarItem>
163
- </MenubarContent>
164
- </MenubarMenu>
165
- </Menubar>`}],props:[{name:"Menubar",type:"ReactNode",default:"-",description:"Container principal da barra de menu."},{name:"MenubarMenu",type:"ReactNode",default:"-",description:"Agrupa um trigger e seu conteúdo."},{name:"MenubarTrigger",type:"ReactNode",default:"-",description:"Botão que abre o menu dropdown."},{name:"MenubarContent",type:"ReactNode",default:"-",description:"Container do conteúdo do menu dropdown."},{name:"MenubarItem",type:"ReactNode",default:"-",description:'Item clicável do menu. Aceita prop "disabled" e "inset".'},{name:"MenubarShortcut",type:"string",default:"-",description:"Exibe atalho de teclado ao lado do item."},{name:"MenubarSeparator",type:"-",default:"-",description:"Linha separadora entre grupos de itens."},{name:"MenubarCheckboxItem",type:"ReactNode",default:"-",description:"Item com checkbox. Props: checked, onCheckedChange."},{name:"MenubarRadioGroup",type:"ReactNode",default:"-",description:"Container para radio items. Props: value, onValueChange."},{name:"MenubarRadioItem",type:"ReactNode",default:"-",description:"Item de radio dentro do RadioGroup. Prop: value."},{name:"MenubarSub",type:"ReactNode",default:"-",description:"Container para submenu aninhado."},{name:"MenubarSubTrigger",type:"ReactNode",default:"-",description:"Trigger que abre o submenu."},{name:"MenubarSubContent",type:"ReactNode",default:"-",description:"Conteúdo do submenu."}],accessibility:["Navegação completa por teclado (setas, Enter, Escape, Tab)","Segue padrão WAI-ARIA de menubar","Submenus acessíveis via seta direita/esquerda","Gerenciamento de foco automático","Suporte a leitor de tela com roles apropriados","Escape fecha o menu atual e retorna foco ao trigger"],notes:["Use MenubarSeparator para agrupar visualmente itens relacionados","MenubarShortcut é apenas visual - implemente os atalhos separadamente","Submenus podem ser aninhados em múltiplos níveis",'Use "inset" em MenubarItem quando precisar alinhar com CheckboxItems/RadioItems',"Para menus contextuais (clique direito), use ContextMenu ao invés de Menubar"]})}export{_r as MenubarDoc};
@@ -1,71 +0,0 @@
1
- import{j as e,r as i,eg as c,f as u,bw as m,eh as p,ei as d,C as g,a as f,b as x,d as b,u as C}from"./index-BtX5DZqb.js";import{C as h}from"./ComponentDocTemplate-BtOCnlM2.js";import"./ExampleCard-DfuMYM6E.js";import"./TableOfContents-DBMJMbI4.js";function l(s){const a=s.match(/bg-\[#([A-Fa-f0-9]{6})\]/);return a?`#${a[1]}`:s}const M=["Análises","Atas e Decisões","Configurações","Documentos","Fornecedores","Mapeamentos","Metrologia","Ocorrências","OKR","Portal do Fornecedor","Desempenho","Pulso","Action","Audit","Configurações v3","Dashboards v1","Docs v1","Indicators","Meeting","Metrology v3","Planner","Relatórios v1","Risks","Staff","Supply","Tracker1","Tracker2"];function v(){const[s,a]=i.useState(!1),{alias:o}=c(),t=n=>{n.url&&window.open(n.url.replace("{alias}",o||"demo"),"_blank"),a(!1)};return e.jsxs("div",{className:"flex flex-col items-center gap-4 p-8 border rounded-lg bg-muted/30",children:[e.jsx("p",{className:"text-muted-foreground text-center",children:"Clique no botão abaixo para abrir o dialog de módulos"}),e.jsxs(u,{onClick:()=>a(!0),children:[e.jsx(m,{className:"h-4 w-4 mr-2"}),"Abrir Módulos"]}),e.jsx(p,{open:s,onOpenChange:a,onModuleClick:t})]})}function j(){const[s,a]=i.useState(!1),{alias:o}=c(),t=r=>{r.url&&window.open(r.url.replace("{alias}",o||"demo"),"_blank"),a(!1)},n=r=>{C.info(`Interesse registrado no módulo: ${r.name}`)};return e.jsxs("div",{className:"flex flex-col items-center gap-4 p-8 border rounded-lg bg-muted/30",children:[e.jsx("p",{className:"text-muted-foreground text-center",children:"Exemplo com separação entre módulos contratados e disponíveis"}),e.jsxs(u,{onClick:()=>a(!0),children:[e.jsx(m,{className:"h-4 w-4 mr-2"}),"Abrir Módulos (com contratados)"]}),e.jsx(p,{open:s,onOpenChange:a,onModuleClick:t,contractedModules:M,onModuleInterest:n})]})}const k=`import { useState } from 'react';
2
- import { Button, ModulesDialog } from 'forlogic-core';
3
- import { LayoutGrid } from 'lucide-react';
4
-
5
- function App() {
6
- const [open, setOpen] = useState(false);
7
-
8
- return (
9
- <>
10
- <Button onClick={() => setOpen(true)}>
11
- <LayoutGrid className="h-4 w-4 mr-2" />
12
- Módulos
13
- </Button>
14
-
15
- <ModulesDialog
16
- open={open}
17
- onOpenChange={setOpen}
18
- onModuleClick={(module) => console.log(module)}
19
- />
20
- </>
21
- );
22
- }`,D=`// Módulos NÃO contratados aparecem esmaecidos:
23
- // Auditorias, Competências, Educação, Fluxos, PDI, Planos, Riscos, Treinamentos
24
- const contractedModules = [
25
- "Análises", "Atas e Decisões", "Documentos", "Fornecedores",
26
- "Mapeamentos", "Metrologia", "Ocorrências", "OKR",
27
- "Portal do Fornecedor", "Desempenho", "Pulso",
28
- // Clássicos
29
- "Action", "Audit", "Configurações v1", "Dashboards v1",
30
- "Docs v1", "Indicators", "Meeting", "Metrology v1",
31
- "Planner", "Relatórios v1", "Risks", "Staff", "Supply",
32
- "Tracker1", "Tracker2",
33
- ];
34
-
35
- <ModulesDialog
36
- open={open}
37
- onOpenChange={setOpen}
38
- onModuleClick={(module) => navigate(\`/\${module.url}\`)}
39
- // Módulos contratados aparecem normais
40
- // Não contratados aparecem esmaecidos
41
- contractedModules={contractedModules}
42
- // Callback quando usuário clica em módulo não contratado
43
- // (após passar pelo onboarding)
44
- onModuleInterest={(module) => {
45
- analytics.track('module_interest', { module: module.name });
46
- }}
47
- />`,O=`// Integração com AppHeader
48
- import { AppHeader, ModulesDialog } from 'forlogic-core';
49
- import { useState } from 'react';
50
-
51
- function Layout() {
52
- const [modulesOpen, setModulesOpen] = useState(false);
53
-
54
- return (
55
- <>
56
- <AppHeader
57
- onModulesClick={() => setModulesOpen(true)}
58
- // ... outras props
59
- />
60
-
61
- <ModulesDialog
62
- open={modulesOpen}
63
- onOpenChange={setModulesOpen}
64
- onModuleClick={(module) => {
65
- navigate(\`/modules/\${module.name.toLowerCase()}\`);
66
- setModulesOpen(false);
67
- }}
68
- />
69
- </>
70
- );
71
- }`;function A(){const s=d.find(o=>o.id==="qualiex"),a=d.find(o=>o.id==="classico");return e.jsxs(g,{className:"mt-8",id:"modules-colors",children:[e.jsxs(f,{children:[e.jsx(x,{children:"Módulos e Cores"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Cada módulo possui uma cor fixa para identificação visual consistente em todo o sistema. Esta lista é gerada automaticamente a partir dos dados do componente."})]}),e.jsx(b,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[s&&e.jsxs("div",{children:[e.jsxs("h4",{className:"font-semibold text-sm text-muted-foreground mb-3",children:[s.label," (",s.modules.length,")"]}),e.jsx("ul",{className:"space-y-1.5",children:[...s.modules].sort((o,t)=>o.name.localeCompare(t.name)).map(o=>e.jsxs("li",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:l(o.color)}}),o.name]}),e.jsx("code",{className:"text-xs text-muted-foreground font-mono",children:l(o.color)})]},o.name))})]}),a&&e.jsxs("div",{children:[e.jsxs("h4",{className:"font-semibold text-sm text-muted-foreground mb-3",children:[a.label," (",a.modules.length,")"]}),e.jsx("ul",{className:"space-y-1.5",children:[...a.modules].sort((o,t)=>o.name.localeCompare(t.name)).map(o=>e.jsxs("li",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:l(o.color)}}),o.name]}),e.jsx("code",{className:"text-xs text-muted-foreground font-mono",children:l(o.color)})]},o.name))})]})]})})]})}function E(){return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"ModulesDialog",description:"Dialog para navegação entre módulos do sistema, organizado em abas (Qualiex, Clássicos) com separação entre módulos contratados e disponíveis, OnboardingDialog para descoberta e cards informativos no rodapé.",usage:k,component:e.jsx(v,{}),examples:[{title:"Com Módulos Contratados",description:"Separa visualmente módulos contratados (normais) de disponíveis para contratação (esmaecidos). Ao clicar em módulo não contratado, abre OnboardingDialog.",preview:e.jsx(j,{}),code:D},{title:"Integração com AppHeader",description:"Exemplo de como integrar o ModulesDialog com o cabeçalho da aplicação.",preview:e.jsx("div",{className:"text-sm text-muted-foreground p-4 border rounded bg-muted/30",children:"Veja o código ao lado"}),code:O}],props:[{name:"open",type:"boolean",default:"-",description:"Controla se o dialog está aberto"},{name:"onOpenChange",type:"(open: boolean) => void",default:"-",description:"Callback quando o estado muda"},{name:"onModuleClick",type:"(module: Module) => void",default:"-",description:"Callback ao clicar em um módulo contratado"},{name:"contractedModules",type:"string[]",default:"undefined",description:"Lista de nomes de módulos contratados. Se não fornecido, todos aparecem como contratados."},{name:"onModuleInterest",type:"(module: Module) => void",default:"-",description:"Callback após usuário passar pelo onboarding de módulo não contratado"},{name:"educaUrl",type:"string",default:"https://educa.forlogic.net/",description:"URL do link do Forlogic Educa"},{name:"saberGestaoUrl",type:"string",default:"https://sabergestao.com.br/",description:"URL do link do Saber Gestão"},{name:"showSettingsLink",type:"boolean",default:"true",description:"Exibe o card de configurações no rodapé"},{name:"onSettingsClick",type:"() => void",default:"-",description:"Callback ao clicar em configurações"}],accessibility:['Dialog acessível com role="dialog" e aria-modal="true"',"Navegação por teclado entre abas (Arrow Left/Right)","Foco automático no primeiro elemento interativo ao abrir","Escape fecha o dialog e retorna o foco ao elemento anterior",'Módulos clicáveis com role="button" e suporte a Enter/Space',"Módulos não contratados indicados visualmente com opacidade reduzida","OnboardingDialog acessível com navegação por teclado","Links externos indicados com aria-label descritivo","Cores com contraste adequado (WCAG AA)"],notes:["2 Abas de Grupos: Qualiex (19 módulos unificados) e Clássicos (15 módulos)","Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base","Separação Visual: Módulos contratados vs disponíveis para contratação","OnboardingDialog: Até 3 steps para descoberta de módulos não contratados","Cards no Rodapé: Forlogic Educa, Saber Gestão e Configurações (opcional)","Retrocompatível: Props antigas (wikiUrl, allModulesUrl) continuam funcionando"]}),e.jsx(A,{})]})}export{E as ModulesDialogDoc,E as default};
@@ -1,116 +0,0 @@
1
- import{r as i,Z as ue,j as t,$ as j,a4 as R,dK as re,a2 as z,a3 as Fe,Y as le,dL as ze,cP as G,dM as S,cQ as Ve,X as de,a6 as Ke,dN as Ue,dO as H,dP as Ge,dQ as $e,l as _,a7 as He,z as We}from"./index-BtX5DZqb.js";import{C as qe}from"./ComponentDocTemplate-BtOCnlM2.js";import"./ExampleCard-DfuMYM6E.js";import"./TableOfContents-DBMJMbI4.js";var D="NavigationMenu",[Z,me,Be]=de(D),[W,Ye,Qe]=de(D),[J]=Ke(D,[Be,Qe]),[Xe,I]=J(D),[Ze,Je]=J(D),ve=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,value:a,onValueChange:r,defaultValue:s,delayDuration:c=200,skipDelayDuration:d=300,orientation:l="horizontal",dir:h,...u}=e,[f,C]=i.useState(null),y=z(n,w=>C(w)),p=Fe(h),x=i.useRef(0),M=i.useRef(0),b=i.useRef(0),[E,m]=i.useState(!0),[g,v]=le({prop:a,onChange:w=>{const P=w!=="",$=d>0;P?(window.clearTimeout(b.current),$&&m(!1)):(window.clearTimeout(b.current),b.current=window.setTimeout(()=>m(!0),d)),r?.(w)},defaultProp:s??"",caller:D}),N=i.useCallback(()=>{window.clearTimeout(M.current),M.current=window.setTimeout(()=>v(""),150)},[v]),T=i.useCallback(w=>{window.clearTimeout(M.current),v(w)},[v]),L=i.useCallback(w=>{g===w?window.clearTimeout(M.current):x.current=window.setTimeout(()=>{window.clearTimeout(M.current),v(w)},c)},[g,v,c]);return i.useEffect(()=>()=>{window.clearTimeout(x.current),window.clearTimeout(M.current),window.clearTimeout(b.current)},[]),t.jsx(fe,{scope:o,isRootMenu:!0,value:g,dir:p,orientation:l,rootNavigationMenu:f,onTriggerEnter:w=>{window.clearTimeout(x.current),E?L(w):T(w)},onTriggerLeave:()=>{window.clearTimeout(x.current),N()},onContentEnter:()=>window.clearTimeout(M.current),onContentLeave:N,onItemSelect:w=>{v(P=>P===w?"":w)},onItemDismiss:()=>v(""),children:t.jsx(j.nav,{"aria-label":"Main","data-orientation":l,dir:p,...u,ref:y})})});ve.displayName=D;var q="NavigationMenuSub",et=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,value:a,onValueChange:r,defaultValue:s,orientation:c="horizontal",...d}=e,l=I(q,o),[h,u]=le({prop:a,onChange:r,defaultProp:s??"",caller:q});return t.jsx(fe,{scope:o,isRootMenu:!1,value:h,dir:l.dir,orientation:c,rootNavigationMenu:l.rootNavigationMenu,onTriggerEnter:f=>u(f),onItemSelect:f=>u(f),onItemDismiss:()=>u(""),children:t.jsx(j.div,{"data-orientation":c,...d,ref:n})})});et.displayName=q;var fe=e=>{const{scope:n,isRootMenu:o,rootNavigationMenu:a,dir:r,orientation:s,children:c,value:d,onItemSelect:l,onItemDismiss:h,onTriggerEnter:u,onTriggerLeave:f,onContentEnter:C,onContentLeave:y}=e,[p,x]=i.useState(null),[M,b]=i.useState(new Map),[E,m]=i.useState(null);return t.jsx(Xe,{scope:n,isRootMenu:o,rootNavigationMenu:a,value:d,previousValue:Ve(d),baseId:ue(),dir:r,orientation:s,viewport:p,onViewportChange:x,indicatorTrack:E,onIndicatorTrackChange:m,onTriggerEnter:S(u),onTriggerLeave:S(f),onContentEnter:S(C),onContentLeave:S(y),onItemSelect:S(l),onItemDismiss:S(h),onViewportContentChange:i.useCallback((g,v)=>{b(N=>(N.set(g,v),new Map(N)))},[]),onViewportContentRemove:i.useCallback(g=>{b(v=>v.has(g)?(v.delete(g),new Map(v)):v)},[]),children:t.jsx(Z.Provider,{scope:n,children:t.jsx(Ze,{scope:n,items:M,children:c})})})},ge="NavigationMenuList",pe=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,...a}=e,r=I(ge,o),s=t.jsx(j.ul,{"data-orientation":r.orientation,...a,ref:n});return t.jsx(j.div,{style:{position:"relative"},ref:r.onIndicatorTrackChange,children:t.jsx(Z.Slot,{scope:o,children:r.isRootMenu?t.jsx(Ie,{asChild:!0,children:s}):s})})});pe.displayName=ge;var xe="NavigationMenuItem",[tt,Ne]=J(xe),he=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,value:a,...r}=e,s=ue(),c=a||s||"LEGACY_REACT_AUTO_VALUE",d=i.useRef(null),l=i.useRef(null),h=i.useRef(null),u=i.useRef(()=>{}),f=i.useRef(!1),C=i.useCallback((p="start")=>{if(d.current){u.current();const x=Y(d.current);x.length&&ne(p==="start"?x:x.reverse())}},[]),y=i.useCallback(()=>{if(d.current){const p=Y(d.current);p.length&&(u.current=ct(p))}},[]);return t.jsx(tt,{scope:o,value:c,triggerRef:l,contentRef:d,focusProxyRef:h,wasEscapeCloseRef:f,onEntryKeyDown:C,onFocusProxyEnter:C,onRootContentClose:y,onContentFocusOutside:y,children:t.jsx(j.li,{...r,ref:n})})});he.displayName=xe;var B="NavigationMenuTrigger",we=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,disabled:a,...r}=e,s=I(B,e.__scopeNavigationMenu),c=Ne(B,e.__scopeNavigationMenu),d=i.useRef(null),l=z(d,c.triggerRef,n),h=Ee(s.baseId,c.value),u=Te(s.baseId,c.value),f=i.useRef(!1),C=i.useRef(!1),y=c.value===s.value;return t.jsxs(t.Fragment,{children:[t.jsx(Z.ItemSlot,{scope:o,value:c.value,children:t.jsx(je,{asChild:!0,children:t.jsx(j.button,{id:h,disabled:a,"data-disabled":a?"":void 0,"data-state":oe(y),"aria-expanded":y,"aria-controls":u,...r,ref:l,onPointerEnter:R(e.onPointerEnter,()=>{C.current=!1,c.wasEscapeCloseRef.current=!1}),onPointerMove:R(e.onPointerMove,U(()=>{a||C.current||c.wasEscapeCloseRef.current||f.current||(s.onTriggerEnter(c.value),f.current=!0)})),onPointerLeave:R(e.onPointerLeave,U(()=>{a||(s.onTriggerLeave(),f.current=!1)})),onClick:R(e.onClick,()=>{s.onItemSelect(c.value),C.current=y}),onKeyDown:R(e.onKeyDown,p=>{const M={horizontal:"ArrowDown",vertical:s.dir==="rtl"?"ArrowLeft":"ArrowRight"}[s.orientation];y&&p.key===M&&(c.onEntryKeyDown(),p.preventDefault())})})})}),y&&t.jsxs(t.Fragment,{children:[t.jsx(ze,{"aria-hidden":!0,tabIndex:0,ref:c.focusProxyRef,onFocus:p=>{const x=c.contentRef.current,M=p.relatedTarget,b=M===d.current,E=x?.contains(M);(b||!E)&&c.onFocusProxyEnter(b?"start":"end")}}),s.viewport&&t.jsx("span",{"aria-owns":u})]})]})});we.displayName=B;var nt="NavigationMenuLink",se="navigationMenu.linkSelect",Me=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,active:a,onSelect:r,...s}=e;return t.jsx(je,{asChild:!0,children:t.jsx(j.a,{"data-active":a?"":void 0,"aria-current":a?"page":void 0,...s,ref:n,onClick:R(e.onClick,c=>{const d=c.target,l=new CustomEvent(se,{bubbles:!0,cancelable:!0});if(d.addEventListener(se,h=>r?.(h),{once:!0}),re(d,l),!l.defaultPrevented&&!c.metaKey){const h=new CustomEvent(K,{bubbles:!0,cancelable:!0});re(d,h)}},{checkForDefaultPrevented:!1})})})});Me.displayName=nt;var ee="NavigationMenuIndicator",Ce=i.forwardRef((e,n)=>{const{forceMount:o,...a}=e,r=I(ee,e.__scopeNavigationMenu),s=!!r.value;return r.indicatorTrack?$e.createPortal(t.jsx(G,{present:o||s,children:t.jsx(ot,{...a,ref:n})}),r.indicatorTrack):null});Ce.displayName=ee;var ot=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,...a}=e,r=I(ee,o),s=me(o),[c,d]=i.useState(null),[l,h]=i.useState(null),u=r.orientation==="horizontal",f=!!r.value;i.useEffect(()=>{const p=s().find(x=>x.value===r.value)?.ref.current;p&&d(p)},[s,r.value]);const C=()=>{c&&h({size:u?c.offsetWidth:c.offsetHeight,offset:u?c.offsetLeft:c.offsetTop})};return Q(c,C),Q(r.indicatorTrack,C),l?t.jsx(j.div,{"aria-hidden":!0,"data-state":f?"visible":"hidden","data-orientation":r.orientation,...a,ref:n,style:{position:"absolute",...u?{left:0,width:l.size+"px",transform:`translateX(${l.offset}px)`}:{top:0,height:l.size+"px",transform:`translateY(${l.offset}px)`},...a.style}}):null}),k="NavigationMenuContent",ye=i.forwardRef((e,n)=>{const{forceMount:o,...a}=e,r=I(k,e.__scopeNavigationMenu),s=Ne(k,e.__scopeNavigationMenu),c=z(s.contentRef,n),d=s.value===r.value,l={value:s.value,triggerRef:s.triggerRef,focusProxyRef:s.focusProxyRef,wasEscapeCloseRef:s.wasEscapeCloseRef,onContentFocusOutside:s.onContentFocusOutside,onRootContentClose:s.onRootContentClose,...a};return r.viewport?t.jsx(at,{forceMount:o,...l,ref:c}):t.jsx(G,{present:o||d,children:t.jsx(be,{"data-state":oe(d),...l,ref:c,onPointerEnter:R(e.onPointerEnter,r.onContentEnter),onPointerLeave:R(e.onPointerLeave,U(r.onContentLeave)),style:{pointerEvents:!d&&r.isRootMenu?"none":void 0,...l.style}})})});ye.displayName=k;var at=i.forwardRef((e,n)=>{const o=I(k,e.__scopeNavigationMenu),{onViewportContentChange:a,onViewportContentRemove:r}=o;return H(()=>{a(e.value,{ref:n,...e})},[e,n,a]),H(()=>()=>r(e.value),[e.value,r]),null}),K="navigationMenu.rootContentDismiss",be=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,value:a,triggerRef:r,focusProxyRef:s,wasEscapeCloseRef:c,onRootContentClose:d,onContentFocusOutside:l,...h}=e,u=I(k,o),f=i.useRef(null),C=z(f,n),y=Ee(u.baseId,a),p=Te(u.baseId,a),x=me(o),M=i.useRef(null),{onItemDismiss:b}=u;i.useEffect(()=>{const m=f.current;if(u.isRootMenu&&m){const g=()=>{b(),d(),m.contains(document.activeElement)&&r.current?.focus()};return m.addEventListener(K,g),()=>m.removeEventListener(K,g)}},[u.isRootMenu,e.value,r,b,d]);const E=i.useMemo(()=>{const g=x().map(P=>P.value);u.dir==="rtl"&&g.reverse();const v=g.indexOf(u.value),N=g.indexOf(u.previousValue),T=a===u.value,L=N===g.indexOf(a);if(!T&&!L)return M.current;const w=(()=>{if(v!==N){if(T&&N!==-1)return v>N?"from-end":"from-start";if(L&&v!==-1)return v>N?"to-start":"to-end"}return null})();return M.current=w,w},[u.previousValue,u.value,u.dir,x,a]);return t.jsx(Ie,{asChild:!0,children:t.jsx(Ue,{id:p,"aria-labelledby":y,"data-motion":E,"data-orientation":u.orientation,...h,ref:C,disableOutsidePointerEvents:!1,onDismiss:()=>{const m=new Event(K,{bubbles:!0,cancelable:!0});f.current?.dispatchEvent(m)},onFocusOutside:R(e.onFocusOutside,m=>{l();const g=m.target;u.rootNavigationMenu?.contains(g)&&m.preventDefault()}),onPointerDownOutside:R(e.onPointerDownOutside,m=>{const g=m.target,v=x().some(T=>T.ref.current?.contains(g)),N=u.isRootMenu&&u.viewport?.contains(g);(v||N||!u.isRootMenu)&&m.preventDefault()}),onKeyDown:R(e.onKeyDown,m=>{const g=m.altKey||m.ctrlKey||m.metaKey;if(m.key==="Tab"&&!g){const N=Y(m.currentTarget),T=document.activeElement,L=N.findIndex($=>$===T),P=m.shiftKey?N.slice(0,L).reverse():N.slice(L+1,N.length);ne(P)?m.preventDefault():s.current?.focus()}}),onEscapeKeyDown:R(e.onEscapeKeyDown,m=>{c.current=!0})})})}),te="NavigationMenuViewport",Re=i.forwardRef((e,n)=>{const{forceMount:o,...a}=e,s=!!I(te,e.__scopeNavigationMenu).value;return t.jsx(G,{present:o||s,children:t.jsx(it,{...a,ref:n})})});Re.displayName=te;var it=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,children:a,...r}=e,s=I(te,o),c=z(n,s.onViewportChange),d=Je(k,e.__scopeNavigationMenu),[l,h]=i.useState(null),[u,f]=i.useState(null),C=l?l?.width+"px":void 0,y=l?l?.height+"px":void 0,p=!!s.value,x=p?s.value:s.previousValue;return Q(u,()=>{u&&h({width:u.offsetWidth,height:u.offsetHeight})}),t.jsx(j.div,{"data-state":oe(p),"data-orientation":s.orientation,...r,ref:c,style:{pointerEvents:!p&&s.isRootMenu?"none":void 0,"--radix-navigation-menu-viewport-width":C,"--radix-navigation-menu-viewport-height":y,...r.style},onPointerEnter:R(e.onPointerEnter,s.onContentEnter),onPointerLeave:R(e.onPointerLeave,U(s.onContentLeave)),children:Array.from(d.items).map(([b,{ref:E,forceMount:m,...g}])=>{const v=x===b;return t.jsx(G,{present:m||v,children:t.jsx(be,{...g,ref:Ge(E,N=>{v&&N&&f(N)})})},b)})})}),rt="FocusGroup",Ie=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,...a}=e,r=I(rt,o);return t.jsx(W.Provider,{scope:o,children:t.jsx(W.Slot,{scope:o,children:t.jsx(j.div,{dir:r.dir,...a,ref:n})})})}),ce=["ArrowRight","ArrowLeft","ArrowUp","ArrowDown"],st="FocusGroupItem",je=i.forwardRef((e,n)=>{const{__scopeNavigationMenu:o,...a}=e,r=Ye(o),s=I(st,o);return t.jsx(W.ItemSlot,{scope:o,children:t.jsx(j.button,{...a,ref:n,onKeyDown:R(e.onKeyDown,c=>{if(["Home","End",...ce].includes(c.key)){let l=r().map(f=>f.ref.current);if([s.dir==="rtl"?"ArrowRight":"ArrowLeft","ArrowUp","End"].includes(c.key)&&l.reverse(),ce.includes(c.key)){const f=l.indexOf(c.currentTarget);l=l.slice(f+1)}setTimeout(()=>ne(l)),c.preventDefault()}})})})});function Y(e){const n=[],o=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:a=>{const r=a.tagName==="INPUT"&&a.type==="hidden";return a.disabled||a.hidden||r?NodeFilter.FILTER_SKIP:a.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)n.push(o.currentNode);return n}function ne(e){const n=document.activeElement;return e.some(o=>o===n?!0:(o.focus(),document.activeElement!==n))}function ct(e){return e.forEach(n=>{n.dataset.tabindex=n.getAttribute("tabindex")||"",n.setAttribute("tabindex","-1")}),()=>{e.forEach(n=>{const o=n.dataset.tabindex;n.setAttribute("tabindex",o)})}}function Q(e,n){const o=S(n);H(()=>{let a=0;if(e){const r=new ResizeObserver(()=>{cancelAnimationFrame(a),a=window.requestAnimationFrame(o)});return r.observe(e),()=>{window.cancelAnimationFrame(a),r.unobserve(e)}}},[e,o])}function oe(e){return e?"open":"closed"}function Ee(e,n){return`${e}-trigger-${n}`}function Te(e,n){return`${e}-content-${n}`}function U(e){return n=>n.pointerType==="mouse"?e(n):void 0}var Pe=ve,_e=pe,ut=he,Le=we,lt=Me,Se=Ce,De=ye,ke=Re;const ae=i.forwardRef(({className:e,children:n,...o},a)=>t.jsxs(Pe,{ref:a,className:_("relative z-10 flex max-w-max flex-1 items-center justify-center",e),...o,children:[n,t.jsx(Oe,{})]}));ae.displayName=Pe.displayName;const ie=i.forwardRef(({className:e,...n},o)=>t.jsx(_e,{ref:o,className:_("group flex flex-1 list-none items-center justify-center space-x-1",e),...n}));ie.displayName=_e.displayName;const A=ut,Ae=We("group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"),O=i.forwardRef(({className:e,children:n,...o},a)=>t.jsxs(Le,{ref:a,className:_(Ae(),"group",e),...o,children:[n," ",t.jsx(He,{className:"relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180","aria-hidden":"true"})]}));O.displayName=Le.displayName;const F=i.forwardRef(({className:e,...n},o)=>t.jsx(De,{ref:o,className:_("left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto ",e),...n}));F.displayName=De.displayName;const X=lt,Oe=i.forwardRef(({className:e,...n},o)=>t.jsx("div",{className:_("absolute left-0 top-full flex justify-center"),children:t.jsx(ke,{className:_("origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",e),ref:o,...n})}));Oe.displayName=ke.displayName;const dt=i.forwardRef(({className:e,...n},o)=>t.jsx(Se,{ref:o,className:_("top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",e),...n,children:t.jsx("div",{className:"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md"})}));dt.displayName=Se.displayName;const V=({className:e,title:n,children:o,...a})=>t.jsx("li",{children:t.jsx(X,{asChild:!0,children:t.jsxs("a",{className:_("block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",e),...a,children:[t.jsx("div",{className:"text-sm font-medium leading-none",children:n}),t.jsx("p",{className:"line-clamp-2 text-sm leading-snug text-muted-foreground",children:o})]})})}),mt=[{title:"Alert Dialog",href:"#",description:"Modal de diálogo que interrompe o usuário com conteúdo importante."},{title:"Hover Card",href:"#",description:"Para usuários avistados verem conteúdo disponível ao passar o mouse."},{title:"Progress",href:"#",description:"Exibe um indicador mostrando o progresso de uma tarefa."},{title:"Scroll Area",href:"#",description:"Aumenta visualmente áreas de rolagem nativamente."},{title:"Tabs",href:"#",description:"Um conjunto de painéis de conteúdo em camadas."},{title:"Tooltip",href:"#",description:"Um popup que exibe informações ao focar ou passar o mouse."}];function vt(){return t.jsx("div",{className:"flex justify-center py-8",children:t.jsx(ae,{children:t.jsxs(ie,{children:[t.jsxs(A,{children:[t.jsx(O,{children:"Getting started"}),t.jsx(F,{children:t.jsxs("ul",{className:"grid gap-3 p-6 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]",children:[t.jsx("li",{className:"row-span-3",children:t.jsx(X,{asChild:!0,children:t.jsxs("a",{className:"flex h-full w-full select-none flex-col justify-end rounded-md bg-gradient-to-b from-muted/50 to-muted p-6 no-underline outline-none focus:shadow-md",href:"#",children:[t.jsx("div",{className:"mb-2 mt-4 text-lg font-medium",children:"shadcn/ui"}),t.jsx("p",{className:"text-sm leading-tight text-muted-foreground",children:"Componentes lindamente projetados construídos com Radix UI e Tailwind CSS."})]})})}),t.jsx(V,{href:"#",title:"Introdução",children:"Componentes reutilizáveis construídos usando Radix UI e Tailwind CSS."}),t.jsx(V,{href:"#",title:"Instalação",children:"Como instalar dependências e estruturar seu aplicativo."}),t.jsx(V,{href:"#",title:"Tipografia",children:"Estilos para títulos, parágrafos, listas e muito mais."})]})})]}),t.jsxs(A,{children:[t.jsx(O,{children:"Componentes"}),t.jsx(F,{children:t.jsx("ul",{className:"grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]",children:mt.map(e=>t.jsx(V,{title:e.title,href:e.href,children:e.description},e.title))})})]}),t.jsx(A,{children:t.jsx(X,{className:Ae(),href:"#",children:"Documentação"})})]})})})}function ft(){return t.jsx("div",{className:"flex justify-center py-8",children:t.jsx(ae,{children:t.jsxs(ie,{children:[t.jsxs(A,{children:[t.jsx(O,{children:"Item Um"}),t.jsx(F,{children:t.jsx("div",{className:"p-4 w-[200px]",children:t.jsx("p",{className:"text-sm text-muted-foreground",children:"Conteúdo do primeiro item"})})})]}),t.jsxs(A,{children:[t.jsx(O,{children:"Item Dois"}),t.jsx(F,{children:t.jsx("div",{className:"p-4 w-[200px]",children:t.jsx("p",{className:"text-sm text-muted-foreground",children:"Conteúdo do segundo item"})})})]})]})})})}const gt=`import {
2
- NavigationMenu,
3
- NavigationMenuContent,
4
- NavigationMenuItem,
5
- NavigationMenuLink,
6
- NavigationMenuList,
7
- NavigationMenuTrigger,
8
- navigationMenuTriggerStyle,
9
- } from "forlogic-core"
10
-
11
- const components = [
12
- {
13
- title: "Alert Dialog",
14
- href: "/docs/components/alert-dialog",
15
- description: "Modal de diálogo que interrompe o usuário com conteúdo importante.",
16
- },
17
- {
18
- title: "Hover Card",
19
- href: "/docs/components/hover-card",
20
- description: "Para usuários avistados verem conteúdo disponível ao passar o mouse.",
21
- },
22
- // ...mais componentes
23
- ]
24
-
25
- export function NavigationMenuDemo() {
26
- return (
27
- <NavigationMenu>
28
- <NavigationMenuList>
29
- <NavigationMenuItem>
30
- <NavigationMenuTrigger>Getting started</NavigationMenuTrigger>
31
- <NavigationMenuContent>
32
- <ul className="grid gap-3 p-6 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]">
33
- <li className="row-span-3">
34
- <NavigationMenuLink asChild>
35
- <a
36
- className="flex h-full w-full select-none flex-col justify-end rounded-md bg-gradient-to-b from-muted/50 to-muted p-6 no-underline outline-none focus:shadow-md"
37
- href="/"
38
- >
39
- <div className="mb-2 mt-4 text-lg font-medium">
40
- shadcn/ui
41
- </div>
42
- <p className="text-sm leading-tight text-muted-foreground">
43
- Componentes lindamente projetados construídos com Radix UI e Tailwind CSS.
44
- </p>
45
- </a>
46
- </NavigationMenuLink>
47
- </li>
48
- <ListItem href="/docs" title="Introdução">
49
- Componentes reutilizáveis construídos usando Radix UI e Tailwind CSS.
50
- </ListItem>
51
- <ListItem href="/docs/installation" title="Instalação">
52
- Como instalar dependências e estruturar seu aplicativo.
53
- </ListItem>
54
- </ul>
55
- </NavigationMenuContent>
56
- </NavigationMenuItem>
57
- <NavigationMenuItem>
58
- <NavigationMenuTrigger>Componentes</NavigationMenuTrigger>
59
- <NavigationMenuContent>
60
- <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2">
61
- {components.map((component) => (
62
- <ListItem
63
- key={component.title}
64
- title={component.title}
65
- href={component.href}
66
- >
67
- {component.description}
68
- </ListItem>
69
- ))}
70
- </ul>
71
- </NavigationMenuContent>
72
- </NavigationMenuItem>
73
- <NavigationMenuItem>
74
- <NavigationMenuLink className={navigationMenuTriggerStyle()}>
75
- Documentação
76
- </NavigationMenuLink>
77
- </NavigationMenuItem>
78
- </NavigationMenuList>
79
- </NavigationMenu>
80
- )
81
- }`,pt=`import {
82
- NavigationMenu,
83
- NavigationMenuContent,
84
- NavigationMenuItem,
85
- NavigationMenuList,
86
- NavigationMenuTrigger,
87
- } from "forlogic-core"
88
-
89
- export function SimpleNavigationMenu() {
90
- return (
91
- <NavigationMenu>
92
- <NavigationMenuList>
93
- <NavigationMenuItem>
94
- <NavigationMenuTrigger>Item Um</NavigationMenuTrigger>
95
- <NavigationMenuContent>
96
- <div className="p-4 w-[200px]">
97
- <p className="text-sm text-muted-foreground">
98
- Conteúdo do primeiro item
99
- </p>
100
- </div>
101
- </NavigationMenuContent>
102
- </NavigationMenuItem>
103
- <NavigationMenuItem>
104
- <NavigationMenuTrigger>Item Dois</NavigationMenuTrigger>
105
- <NavigationMenuContent>
106
- <div className="p-4 w-[200px]">
107
- <p className="text-sm text-muted-foreground">
108
- Conteúdo do segundo item
109
- </p>
110
- </div>
111
- </NavigationMenuContent>
112
- </NavigationMenuItem>
113
- </NavigationMenuList>
114
- </NavigationMenu>
115
- )
116
- }`;function Mt(){return t.jsx(qe,{title:"Navigation Menu",description:"Uma coleção de links para navegação em websites.",component:t.jsx(vt,{}),usage:gt,examples:[{title:"Exemplo Simples",description:"Menu de navegação com dois itens simples.",preview:t.jsx(ft,{}),code:pt}],props:[{name:"defaultValue",type:"string",default:"-",description:"Valor inicial do item ativo (não controlado)."},{name:"value",type:"string",default:"-",description:"Valor controlado do item ativo."},{name:"onValueChange",type:"(value: string) => void",default:"-",description:"Callback quando o valor muda."},{name:"delayDuration",type:"number",default:"200",description:"Delay em ms para abrir o menu ao passar o mouse."},{name:"skipDelayDuration",type:"number",default:"300",description:"Delay para pular ao mover entre itens rapidamente."},{name:"orientation",type:'"horizontal" | "vertical"',default:'"horizontal"',description:"Orientação do menu de navegação."},{name:"dir",type:'"ltr" | "rtl"',default:'"ltr"',description:"Direção de leitura do menu."},{name:"asChild (Trigger)",type:"boolean",default:"false",description:"Renderiza o filho como elemento raiz."},{name:"disabled (Trigger)",type:"boolean",default:"false",description:"Desabilita a interação com o trigger."},{name:"asChild (Content)",type:"boolean",default:"false",description:"Renderiza o filho como elemento raiz."},{name:"forceMount (Content)",type:"boolean",default:"false",description:"Força a montagem do conteúdo mesmo quando fechado."},{name:"asChild (Link)",type:"boolean",default:"false",description:"Renderiza o filho como elemento raiz."},{name:"active (Link)",type:"boolean",default:"false",description:"Define o link como ativo visualmente."},{name:"onSelect (Link)",type:"(event: Event) => void",default:"-",description:"Callback quando o link é selecionado."}],accessibility:["Segue o padrão WAI-ARIA para menus de navegação.",'role="navigation" no elemento raiz.',"aria-expanded indica se o submenu está aberto.",'aria-haspopup="menu" nos triggers com submenu.','aria-current="page" pode ser usado para indicar a página atual.',"Gerenciamento automático de foco ao abrir/fechar submenus.","Navegação por teclado completa (Arrow keys, Enter, Escape)."],notes:["Use Navigation Menu para navegação principal do site.","Prefira Navigation Menu horizontal para headers.","Use navigationMenuTriggerStyle() para links sem submenu.","O componente suporta submenus com conteúdo rico como grids e cards.","Crie um componente ListItem reutilizável para itens de menu padronizados."]})}export{Mt as NavigationMenuDoc};
@@ -1,55 +0,0 @@
1
- import{j as e,r as t,f as i,ej as s}from"./index-BtX5DZqb.js";import{C as r}from"./ComponentDocTemplate-BtOCnlM2.js";import"./ExampleCard-DfuMYM6E.js";import"./TableOfContents-DBMJMbI4.js";function d(){const[a,o]=t.useState(!1),n=[{id:"welcome",title:"Bem-vindo ao Sistema",description:"Neste espaço, você irá adicionar o texto que explica o processo de onboarding. Este é o primeiro passo para conhecer todas as funcionalidades disponíveis."},{id:"features",title:"Conheça as Funcionalidades",description:"Descubra todas as ferramentas disponíveis para você. Navegue pelos menus e explore cada seção do sistema."},{id:"start",title:"Comece Agora",description:"Você está pronto para começar a usar o sistema! Clique em concluir para finalizar o onboarding."}];return e.jsxs("div",{children:[e.jsx(i,{onClick:()=>o(!0),children:"Iniciar Onboarding"}),e.jsx(s,{open:a,onOpenChange:o,steps:n,onComplete:()=>console.log("Onboarding concluído!")})]})}function p(){const[a,o]=t.useState(!1),n=[{id:"welcome",image:"https://images.unsplash.com/photo-1551434678-e076c223a692?w=800&h=450&fit=crop",title:"Bem-vindo ao Sistema",description:"Neste espaço, você irá adicionar o texto que explica o processo de onboarding."},{id:"dashboard",image:"https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=800&h=450&fit=crop",title:"Painel de Controle",description:"Aqui você encontra todas as métricas e informações importantes do seu negócio em tempo real."},{id:"reports",image:"https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&h=450&fit=crop",title:"Relatórios Detalhados",description:"Gere relatórios personalizados e exporte dados para análise externa."}];return e.jsxs("div",{children:[e.jsx(i,{onClick:()=>o(!0),children:"Onboarding com Imagens"}),e.jsx(s,{open:a,onOpenChange:o,steps:n,onComplete:()=>console.log("Onboarding com imagens concluído!")})]})}function c(){const[a,o]=t.useState(!1),n=[{id:"animation1",image:"https://media.giphy.com/media/3o7btPCcdNniyf0ArS/giphy.gif",title:"Animações Interativas",description:"O OnboardingDialog suporta GIFs animados para tornar a experiência mais dinâmica e engajante."},{id:"animation2",image:"https://media.giphy.com/media/l0HlNQ03J5JxX6lva/giphy.gif",title:"Demonstrações Visuais",description:"Use GIFs para demonstrar funcionalidades de forma clara e visual."}];return e.jsxs("div",{children:[e.jsx(i,{onClick:()=>o(!0),children:"Onboarding com GIFs"}),e.jsx(s,{open:a,onOpenChange:o,steps:n,onComplete:()=>console.log("Onboarding com GIFs concluído!")})]})}function l(){const[a,o]=t.useState(!1),n=[{id:"single",image:"https://images.unsplash.com/photo-1557804506-669a67965ba0?w=800&h=450&fit=crop",title:"Novidade: Modo Escuro",description:"Agora você pode alternar entre modo claro e escuro nas configurações do sistema. Experimente!"}];return e.jsxs("div",{children:[e.jsx(i,{onClick:()=>o(!0),children:"Anúncio de Feature"}),e.jsx(s,{open:a,onOpenChange:o,steps:n,finishButtonText:"Entendi!",showProgressIndicator:!1,onComplete:()=>console.log("Feature announcement closed")})]})}const m=`import { useState } from "react";
2
- import { OnboardingDialog, OnboardingStep, Button } from "forlogic-core";
3
-
4
- function App() {
5
- const [open, setOpen] = useState(false);
6
-
7
- const steps: OnboardingStep[] = [
8
- {
9
- id: "welcome",
10
- title: "Bem-vindo ao Sistema",
11
- description: "Neste espaço, você irá adicionar o texto que explica o processo de onboarding.",
12
- },
13
- {
14
- id: "features",
15
- title: "Conheça as Funcionalidades",
16
- description: "Descubra todas as ferramentas disponíveis para você.",
17
- },
18
- {
19
- id: "start",
20
- title: "Comece Agora",
21
- description: "Você está pronto para começar a usar o sistema!",
22
- },
23
- ];
24
-
25
- return (
26
- <>
27
- <Button onClick={() => setOpen(true)}>Iniciar Onboarding</Button>
28
- <OnboardingDialog
29
- open={open}
30
- onOpenChange={setOpen}
31
- steps={steps}
32
- onComplete={() => console.log("Onboarding concluído!")}
33
- />
34
- </>
35
- );
36
- }`,u=`const steps: OnboardingStep[] = [
37
- {
38
- id: "welcome",
39
- image: "/onboarding/welcome.png",
40
- title: "Bem-vindo ao Sistema",
41
- description: "Texto explicativo do passo.",
42
- },
43
- {
44
- id: "dashboard",
45
- image: "/onboarding/dashboard.gif", // Suporta GIFs
46
- title: "Painel de Controle",
47
- description: "Aqui você encontra todas as métricas.",
48
- },
49
- ];
50
-
51
- <OnboardingDialog
52
- open={open}
53
- onOpenChange={setOpen}
54
- steps={steps}
55
- />`;function x(){return e.jsx(r,{title:"Onboarding Dialog",description:"Componente para fluxos de onboarding em múltiplos passos. Suporta imagens estáticas, GIFs, navegação entre steps e indicador de progresso com dropdown.",component:e.jsx(d,{}),usage:m,examples:[{title:"Com Imagens",description:"OnboardingDialog com imagens em cada step.",preview:e.jsx(p,{}),code:u},{title:"Com GIFs Animados",description:"Suporte para GIFs animados para demonstrações visuais.",preview:e.jsx(c,{}),code:""},{title:"Single Step (Anúncio)",description:"Use com um único step para anúncios de features ou mensagens simples.",preview:e.jsx(l,{}),code:""}],props:[{name:"open",type:"boolean",description:"Controla se o dialog está aberto. (obrigatório)"},{name:"onOpenChange",type:"(open: boolean) => void",description:"Callback quando o estado de aberto muda. (obrigatório)"},{name:"steps",type:"OnboardingStep[]",description:"Array de steps do onboarding. Cada step possui id, title, description e image (opcional). (obrigatório)"},{name:"onComplete",type:"() => void",description:"Callback quando o onboarding é concluído."},{name:"onStepChange",type:"(stepIndex: number) => void",description:"Callback quando o step muda."},{name:"continueButtonText",type:"string",default:'"Continuar"',description:"Texto do botão continuar."},{name:"backButtonText",type:"string",default:'"Voltar"',description:"Texto do botão voltar."},{name:"finishButtonText",type:"string",default:'"Concluir"',description:"Texto do botão finalizar."},{name:"stepLabel",type:"string",default:'"Etapa"',description:'Label do indicador de step (ex: "Etapa 1/3").'},{name:"size",type:'"sm" | "md" | "lg"',default:'"md"',description:"Tamanho do dialog."},{name:"showProgressIndicator",type:"boolean",default:"true",description:"Mostrar indicador de progresso e dropdown de steps."},{name:"currentStepIndex",type:"number",description:"Índice do step atual (modo controlado)."},{name:"onCurrentStepChange",type:"(index: number) => void",description:"Callback para mudar o step atual (modo controlado)."}],notes:["O componente suporta tanto imagens estáticas quanto GIFs animados.","Use o modo controlado (currentStepIndex + onCurrentStepChange) quando precisar sincronizar o estado com outros componentes.","Os textos dos botões são customizáveis para suporte a i18n.","Para anúncios de features, use com um único step e showProgressIndicator={false}.","O botão 'Voltar' só aparece a partir do segundo step."],accessibility:["O dialog usa os padrões de acessibilidade do Radix UI Dialog.","O botão de fechar possui sr-only label.","Navegação por teclado suportada (Tab, Escape).","Focus trap ativo quando o dialog está aberto."]})}export{x as default};
@@ -1,27 +0,0 @@
1
- import{r as a,j as e,dR as t}from"./index-BtX5DZqb.js";import{C as c}from"./ComponentDocTemplate-BtOCnlM2.js";import"./ExampleCard-DfuMYM6E.js";import"./TableOfContents-DBMJMbI4.js";function C(){const[n,s]=a.useState(1),[i,o]=a.useState(10),[r,g]=a.useState(1),[l,P]=a.useState(10),[m,d]=a.useState(3),[p,u]=a.useState(10);return e.jsx(c,{title:"Pagination",description:"Barra de paginação completa com seletor de itens por página e controles de navegação.",component:e.jsx("div",{className:"w-full border rounded-md bg-muted/30",children:e.jsx(t,{currentPage:n,totalPages:10,totalItems:100,itemsPerPage:i,onPageChange:s,onItemsPerPageChange:o,variant:"full"})}),usage:`import { Pagination } from "forlogic-core/crud"
2
-
3
- <Pagination
4
- currentPage={1}
5
- totalPages={10}
6
- totalItems={100}
7
- itemsPerPage={10}
8
- onPageChange={(page) => setPage(page)}
9
- onItemsPerPageChange={(limit) => setLimit(limit)}
10
- variant="full"
11
- />`,examples:[{title:"Paginação Básica (até 2 páginas)",preview:e.jsx("div",{className:"w-full border rounded-md bg-muted/30",children:e.jsx(t,{currentPage:r,totalPages:2,totalItems:15,itemsPerPage:l,onPageChange:g,onItemsPerPageChange:P,variant:"full"})}),code:`<Pagination
12
- currentPage={1}
13
- totalPages={2}
14
- totalItems={15}
15
- itemsPerPage={10}
16
- onPageChange={setPage}
17
- onItemsPerPageChange={setItemsPerPage}
18
- variant="full"
19
- />`},{title:"Paginação Extensa (4+ páginas)",preview:e.jsx("div",{className:"w-full border rounded-md bg-muted/30",children:e.jsx(t,{currentPage:m,totalPages:25,totalItems:250,itemsPerPage:p,onPageChange:d,onItemsPerPageChange:u,variant:"full"})}),code:`<Pagination
20
- currentPage={3}
21
- totalPages={25}
22
- totalItems={250}
23
- itemsPerPage={10}
24
- onPageChange={setPage}
25
- onItemsPerPageChange={setItemsPerPage}
26
- variant="full"
27
- />`}],props:[{name:"currentPage",type:"number",default:"-",description:"Página atual (1-indexed)"},{name:"totalPages",type:"number",default:"-",description:"Número total de páginas"},{name:"totalItems",type:"number",default:"-",description:"Número total de itens"},{name:"itemsPerPage",type:"number",default:"-",description:"Quantidade de itens por página"},{name:"onPageChange",type:"(page: number) => void",default:"-",description:"Callback ao mudar de página"},{name:"onItemsPerPageChange",type:"(limit: number) => void",default:"-",description:"Callback ao mudar itens por página"},{name:"variant",type:'"full" | "compact"',default:'"full"',description:"Variante de exibição (full mostra seletor de itens)"},{name:"itemsPerPageOptions",type:"number[]",default:"[10, 25, 50, 100]",description:"Opções disponíveis para itens por página"}],accessibility:["Navegável por teclado","Labels ARIA apropriados","Indicação visual da página atual","Botões desabilitados quando não aplicável","Amigável para leitores de tela"]})}export{C as PaginationDoc};