forlogic-core 1.15.8 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.note/memory/components/action-button-for-tables.md +23 -0
  2. package/.note/memory/components/alertdialog-permanent-deletion.md +47 -0
  3. package/.note/memory/components/baseform-custom-fields.md +60 -0
  4. package/.note/memory/components/baseform-usage.md +43 -0
  5. package/.note/memory/components/delete-confirmation-dialog.md +48 -0
  6. package/.note/memory/components/dialog-sizes-and-structure.md +31 -0
  7. package/.note/memory/components/dialog-variants.md +44 -0
  8. package/.note/memory/components/pagination-usage.md +28 -0
  9. package/.note/memory/documentation/consolidated-components-registry.md +18 -0
  10. package/.note/memory/features/crud-standardized-config-props.md +3 -0
  11. package/.note/memory/patterns/body-content-scroll-usage.md +59 -0
  12. package/.note/memory/patterns/crud-action-bar-3-zone-layout.md +3 -0
  13. package/.note/memory/patterns/crud-bulk-actions-dropdown-standard.md +3 -0
  14. package/.note/memory/patterns/crud-toolbar-layout.md +26 -0
  15. package/.note/memory/patterns/dialog-body-scroll-pattern.md +27 -0
  16. package/.note/memory/patterns/single-scroll-pattern.md +22 -0
  17. package/.note/memory/patterns/spa-navigation-pattern.md +19 -0
  18. package/.note/memory/rules/no-auto-index-rule.md +20 -0
  19. package/.note/memory/rules/no-delete-policy-rule.md +23 -0
  20. package/.note/memory/rules/no-env-modification-rule.md +19 -0
  21. package/.note/memory/rules/supabase-schema-rule.md +19 -0
  22. package/README.md +7 -4
  23. package/dist/README.md +112 -112
  24. package/dist/assets/AccordionDoc-BnfxyOi9.js +31 -0
  25. package/dist/assets/ActionButtonDoc-b4F_J8gn.js +47 -0
  26. package/dist/assets/AlertDoc-PkiHguSJ.js +37 -0
  27. package/dist/assets/AppHeaderDoc-CsFMZGV0.js +67 -0
  28. package/dist/assets/AppSidebarDoc-Bg71N-zq.js +196 -0
  29. package/dist/assets/AuthDoc-DDm57y_J.js +192 -0
  30. package/dist/assets/AvatarDoc-C6wiZIZR.js +11 -0
  31. package/dist/assets/BadgeDoc-Bsg7cfm0.js +36 -0
  32. package/dist/assets/BaseFormDoc-DeIlV273.js +169 -0
  33. package/dist/assets/BodyContentDoc-Q3DGvyN9.js +83 -0
  34. package/dist/assets/BreadcrumbDoc-ChsVFjMF.js +75 -0
  35. package/dist/assets/ButtonDoc-C7Q31Bh3.js +41 -0
  36. package/dist/assets/ButtonGroupDoc-Bn5vhjBq.js +7 -0
  37. package/dist/assets/CalendarDoc-iVjNyxyr.js +81 -0
  38. package/dist/assets/CardDoc-D511dll7.js +49 -0
  39. package/dist/assets/ChartDoc-CQyYOEHL.js +111 -0
  40. package/dist/assets/CheckboxDoc-Cjsy4XAq.js +55 -0
  41. package/dist/assets/ColorPickerDoc-hnYJUWpF.js +10 -0
  42. package/dist/assets/ColorsFoundationDoc-B8Z4tAyZ.js +13 -0
  43. package/dist/assets/ComboTreeDoc-ChEbW4a3.js +21 -0
  44. package/dist/assets/ComboboxDoc-CHWeGE_F.js +134 -0
  45. package/dist/assets/ComponentDocTemplate-BtOCnlM2.js +1 -0
  46. package/dist/assets/ContextMenuDoc-C3mFO_Yx.js +182 -0
  47. package/dist/assets/ContextsDoc-ChEbQxom.js +184 -0
  48. package/dist/assets/CreateCrudPageDoc-C9tXisCF.js +106 -0
  49. package/dist/assets/CrudActionBarDoc-Cp1L4gpO.js +112 -0
  50. package/dist/assets/CrudGridDoc-D-kSFBAQ.js +85 -0
  51. package/dist/assets/CrudOverviewDoc-CeLBwg-B.js +14 -0
  52. package/dist/assets/CrudPrimitivesDoc-B2u1vZog.js +164 -0
  53. package/dist/assets/CrudTableDoc-CvV-II_X.js +95 -0
  54. package/dist/assets/DataListDoc-BLRii0jB.js +13 -0
  55. package/dist/assets/DesignSystemHome-TE0Ubaup.js +1 -0
  56. package/dist/assets/DialogDoc--LC5Jvat.js +981 -0
  57. package/dist/assets/DropdownMenuDoc-oPlEriRY.js +175 -0
  58. package/dist/assets/EmptyStateDoc-rNqfWKok.js +35 -0
  59. package/dist/assets/EnvironmentsDoc-CT7l5s2u.js +96 -0
  60. package/dist/assets/ErrorBoundaryDoc-rPHOUygA.js +111 -0
  61. package/dist/assets/ExampleCard-DfuMYM6E.js +1 -0
  62. package/dist/assets/FormDoc-B0L_QaCT.js +81 -0
  63. package/dist/assets/FoundationOverview-Dbb8rBsU.js +1 -0
  64. package/dist/assets/GridDoc-ifcGA2Yw.js +28 -0
  65. package/dist/assets/HooksDoc-CUOT_3Du.js +665 -0
  66. package/dist/assets/HoverCardDoc-CdTU2QkI.js +31 -0
  67. package/dist/assets/I18nDoc-CMEvFqsz.js +232 -0
  68. package/dist/assets/IconPickerDoc-DF9hEwnJ.js +10 -0
  69. package/dist/assets/IconsFoundationDoc-D4Y0wKbm.js +33 -0
  70. package/dist/assets/InputDoc-d_IL4dsq.js +211 -0
  71. package/dist/assets/LabelDoc-Dr64ISiJ.js +42 -0
  72. package/dist/assets/LeadershipDoc-BnrTuaeV.js +416 -0
  73. package/dist/assets/MediaDoc-CLuVprAr.js +459 -0
  74. package/dist/assets/MenubarDoc-CW7L4QJ4.js +165 -0
  75. package/dist/assets/ModulesDialogDoc-CUb_g4X-.js +71 -0
  76. package/dist/assets/NavigationMenuDoc-Csc0U6bV.js +116 -0
  77. package/dist/assets/OnboardingDialogDoc-3RtjNH1O.js +55 -0
  78. package/dist/assets/PaginationDoc-BGurD4xQ.js +27 -0
  79. package/dist/assets/PaginationDoc-DqFyou6O.js +98 -0
  80. package/dist/assets/PlacesDoc-Dyx8gsqb.js +226 -0
  81. package/dist/assets/PopoverDoc-DHF-ItUX.js +64 -0
  82. package/dist/assets/ProgressDoc-DXKV-fkI.js +29 -0
  83. package/dist/assets/QualiexUserFieldDoc-BbP7w-Pu.js +149 -0
  84. package/dist/assets/RadioGroupDoc-D845uweM.js +57 -0
  85. package/dist/assets/RadiusDoc-vN4tTsay.js +7 -0
  86. package/dist/assets/RequiredFieldsCounterDoc-TzR9r-U9.js +58 -0
  87. package/dist/assets/ResizableDoc-Bkfz_25O.js +104 -0
  88. package/dist/assets/RichTextEditorDoc-BUQrg7M8.js +24 -0
  89. package/dist/assets/ScrollAreaDoc-B6ODYHMX.js +28 -0
  90. package/dist/assets/SecurityDoc-Chbt6w1s.js +204 -0
  91. package/dist/assets/SelectDoc-BhcpBIAO.js +80 -0
  92. package/dist/assets/SeparatorDoc-C3fhatb0.js +4 -0
  93. package/dist/assets/ServicesDoc-_uao-HA_.js +308 -0
  94. package/dist/assets/ShadowsDoc-DpkO_TZQ.js +9 -0
  95. package/dist/assets/SignDoc-BJtnoT6I.js +66 -0
  96. package/dist/assets/SkeletonDoc-BZS07PJh.js +54 -0
  97. package/dist/assets/SliderDoc-D2ApV3XT.js +41 -0
  98. package/dist/assets/SpacingDoc-PNrU24B2.js +12 -0
  99. package/dist/assets/SplitButtonDoc-D5tUF2Ja.js +53 -0
  100. package/dist/assets/StepSelectorDoc-Cj0ALYar.js +41 -0
  101. package/dist/assets/SwitchDoc-DtsT8oh_.js +56 -0
  102. package/dist/assets/TableDoc-BC-jQnXu.js +128 -0
  103. package/dist/assets/TableOfContents-DBMJMbI4.js +1 -0
  104. package/dist/assets/TabsDoc-DtXJ0xY5.js +42 -0
  105. package/dist/assets/TextareaDoc-nuW5tqBQ.js +46 -0
  106. package/dist/assets/ToastDoc-D1aX5zda.js +157 -0
  107. package/dist/assets/ToggleDoc-ILass4CS.js +51 -0
  108. package/dist/assets/TooltipDoc-lPbdWe_9.js +58 -0
  109. package/dist/assets/TruncatedCellDoc-DOAzbF2F.js +12 -0
  110. package/dist/assets/TypographyFoundationDoc-3ZD-rQZw.js +7 -0
  111. package/dist/assets/UtilitiesDoc-D7lkYhuz.js +145 -0
  112. package/dist/assets/blocks-Jy49RoqJ.js +1 -0
  113. package/dist/assets/calendar-days-Cvf2zLJl.js +1 -0
  114. package/dist/assets/circle-plus-MnG9kjyq.js +1 -0
  115. package/dist/assets/circle-x-B9ouupla.js +1 -0
  116. package/dist/assets/crown-BweN5jpI.js +1 -0
  117. package/dist/assets/date-picker-ttyYeYvC.js +1 -0
  118. package/dist/assets/disabled-menu-item-WlpPOqxg.js +1 -0
  119. package/dist/assets/drawer-DvU6_eK5.js +3 -0
  120. package/dist/assets/file-pen-line-C0VV-QjF.js +1 -0
  121. package/dist/assets/git-branch-DCjGGwvF.js +1 -0
  122. package/dist/assets/globe-BdFDFP_k.js +1 -0
  123. package/dist/assets/grip-vertical-CgXp0oI-.js +1 -0
  124. package/dist/assets/hash-BAYi_wfk.js +1 -0
  125. package/dist/assets/index-BtX5DZqb.js +310 -0
  126. package/dist/assets/index-C1So5Sai.css +1 -0
  127. package/dist/assets/life-buoy-BydIgTyJ.js +1 -0
  128. package/dist/assets/lucide-react-ZIMhRYmb.js +1 -0
  129. package/dist/assets/monitor-B6txWJPg.js +1 -0
  130. package/dist/assets/package-DNe3FsCh.js +1 -0
  131. package/dist/assets/pen-CzTmQ16z.js +1 -0
  132. package/dist/assets/pin-CJJgLEBz.js +1 -0
  133. package/dist/assets/radio-group-Btv_BY60.js +1 -0
  134. package/dist/assets/server-XQDXtrjm.js +1 -0
  135. package/dist/assets/share-2-Dz_89MJb.js +1 -0
  136. package/dist/assets/step-selector-D0_Y1dow.js +1 -0
  137. package/dist/assets/text-align-start-WsHo7CNJ.js +1 -0
  138. package/dist/assets/trash-CeK-mWnM.js +1 -0
  139. package/dist/assets/useMockCrud-RV9z9n5x.js +1 -0
  140. package/dist/assets/user-check-CrbWcnPN.js +1 -0
  141. package/dist/assets/user-plus-Dce9DbqQ.js +1 -0
  142. package/dist/auth/services/TokenRegenerationService.d.ts +5 -3
  143. package/dist/auth/services/TokenService.d.ts +0 -4
  144. package/dist/bin/pull-docs.js +87 -64
  145. package/dist/components/ui/chart.d.ts +1 -1
  146. package/dist/components/ui/color-picker.d.ts +4 -0
  147. package/dist/components/ui/combo-tree.d.ts +70 -0
  148. package/dist/components/ui/combobox.d.ts +1 -0
  149. package/dist/components/ui/dialog.d.ts +8 -0
  150. package/dist/components/ui/icon-picker.d.ts +2 -0
  151. package/dist/components/ui/input-group.d.ts +1 -1
  152. package/dist/components/ui/resizable.d.ts +1 -1
  153. package/dist/config/environments.d.ts +12 -0
  154. package/dist/config/index.d.ts +23 -9
  155. package/dist/crud/components/SelectionCheckbox.d.ts +9 -0
  156. package/dist/crud/generateCrudConfig.d.ts +2 -2
  157. package/dist/docs/KNOWLEDGE.md +206 -0
  158. package/dist/exports/ui.d.ts +1 -0
  159. package/dist/hooks/useMediaQuery.d.ts +14 -0
  160. package/dist/hooks/usePageTitle.d.ts +7 -1
  161. package/dist/index.css +2 -2
  162. package/dist/index.css.map +1 -1
  163. package/dist/index.d.ts +6 -1
  164. package/dist/index.esm.js +1 -1
  165. package/dist/index.html +16 -11
  166. package/dist/index.js +1 -1
  167. package/dist/leadership/hooks/useLeadershipMutations.d.ts +0 -1
  168. package/dist/media/hooks/useMediaUpload.d.ts +0 -1
  169. package/dist/media/utils/imageHelpers.d.ts +1 -1
  170. package/dist/places/services/PlaceService.d.ts +1 -1
  171. package/dist/qualiex/services/qualiexApi.d.ts +6 -5
  172. package/dist/services/QualiexEnrichmentService.d.ts +0 -12
  173. package/dist/sign/services/signService.d.ts +0 -6
  174. package/dist/types.d.ts +1 -10
  175. package/dist/utils/index.d.ts +2 -2
  176. package/docs/DESIGN_SYSTEM.md +12159 -0
  177. package/docs/KNOWLEDGE.md +206 -0
  178. package/docs/PUBLISH.md +168 -0
  179. package/package.json +15 -17
  180. package/dist/assets/index-D0RTIFH3.css +0 -1
  181. package/dist/assets/index-YMQXWoDk.js +0 -9868
  182. package/dist/auth/utils/AuthUtils.d.ts +0 -4
  183. package/dist/i18n/DatabaseBackend.d.ts +0 -9
  184. package/dist/i18n/components/TranslationLoader.d.ts +0 -10
  185. package/dist/services/TranslationService.d.ts +0 -20
@@ -0,0 +1 @@
1
+ import{aR as a}from"./index-BtX5DZqb.js";const e=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]],i=a("file-braces",e);const o=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],c=a("monitor",o);export{i as F,c as M};
@@ -0,0 +1 @@
1
+ import{aR as a}from"./index-BtX5DZqb.js";const e=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],t=a("package",e);export{t as P};
@@ -0,0 +1 @@
1
+ import{aR as a}from"./index-BtX5DZqb.js";const e=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],c=a("pen",e);export{c as P};
@@ -0,0 +1 @@
1
+ import{aR as c}from"./index-BtX5DZqb.js";const e=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],r=c("palette",e);const o=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]],l=c("pin-off",o);const a=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]],n=c("pin",a);export{r as P,n as a,l as b};
@@ -0,0 +1 @@
1
+ import{r as n,a3 as K,Y as T,j as a,cM as U,$ as b,a2 as w,cN as V,a4 as g,cO as N,cP as $,a6 as E,cQ as z,cR as H,l as I,k as Y}from"./index-BtX5DZqb.js";var C="Radio",[Q,k]=E(C),[W,X]=Q(C),P=n.forwardRef((r,t)=>{const{__scopeRadio:e,name:c,checked:o=!1,required:s,disabled:i,value:p="on",onCheck:f,form:R,...v}=r,[l,m]=n.useState(null),d=w(t,x=>m(x)),u=n.useRef(!1),y=l?R||!!l.closest("form"):!0;return a.jsxs(W,{scope:e,checked:o,disabled:i,children:[a.jsx(b.button,{type:"button",role:"radio","aria-checked":o,"data-state":S(o),"data-disabled":i?"":void 0,disabled:i,value:p,...v,ref:d,onClick:g(r.onClick,x=>{o||f?.(),y&&(u.current=x.isPropagationStopped(),u.current||x.stopPropagation())})}),y&&a.jsx(G,{control:l,bubbles:!u.current,name:c,value:p,checked:o,required:s,disabled:i,form:R,style:{transform:"translateX(-100%)"}})]})});P.displayName=C;var _="RadioIndicator",j=n.forwardRef((r,t)=>{const{__scopeRadio:e,forceMount:c,...o}=r,s=X(_,e);return a.jsx($,{present:c||s.checked,children:a.jsx(b.span,{"data-state":S(s.checked),"data-disabled":s.disabled?"":void 0,...o,ref:t})})});j.displayName=_;var J="RadioBubbleInput",G=n.forwardRef(({__scopeRadio:r,control:t,checked:e,bubbles:c=!0,...o},s)=>{const i=n.useRef(null),p=w(i,s),f=z(e),R=H(t);return n.useEffect(()=>{const v=i.current;if(!v)return;const l=window.HTMLInputElement.prototype,d=Object.getOwnPropertyDescriptor(l,"checked").set;if(f!==e&&d){const u=new Event("click",{bubbles:c});d.call(v,e),v.dispatchEvent(u)}},[f,e,c]),a.jsx(b.input,{type:"radio","aria-hidden":!0,defaultChecked:e,...o,tabIndex:-1,ref:p,style:{...o.style,...R,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});G.displayName=J;function S(r){return r?"checked":"unchecked"}var Z=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],h="RadioGroup",[ee]=E(h,[N,k]),A=N(),D=k(),[oe,re]=ee(h),M=n.forwardRef((r,t)=>{const{__scopeRadioGroup:e,name:c,defaultValue:o,value:s,required:i=!1,disabled:p=!1,orientation:f,dir:R,loop:v=!0,onValueChange:l,...m}=r,d=A(e),u=K(R),[y,x]=T({prop:s,defaultProp:o??null,onChange:l,caller:h});return a.jsx(oe,{scope:e,name:c,required:i,disabled:p,value:y,onValueChange:x,children:a.jsx(U,{asChild:!0,...d,orientation:f,dir:u,loop:v,children:a.jsx(b.div,{role:"radiogroup","aria-required":i,"aria-orientation":f,"data-disabled":p?"":void 0,dir:u,...m,ref:t})})})});M.displayName=h;var O="RadioGroupItem",F=n.forwardRef((r,t)=>{const{__scopeRadioGroup:e,disabled:c,...o}=r,s=re(O,e),i=s.disabled||c,p=A(e),f=D(e),R=n.useRef(null),v=w(t,R),l=s.value===o.value,m=n.useRef(!1);return n.useEffect(()=>{const d=y=>{Z.includes(y.key)&&(m.current=!0)},u=()=>m.current=!1;return document.addEventListener("keydown",d),document.addEventListener("keyup",u),()=>{document.removeEventListener("keydown",d),document.removeEventListener("keyup",u)}},[]),a.jsx(V,{asChild:!0,...p,focusable:!i,active:l,children:a.jsx(P,{disabled:i,required:s.required,checked:l,...f,...o,name:s.name,ref:v,onCheck:()=>s.onValueChange(o.value),onKeyDown:g(d=>{d.key==="Enter"&&d.preventDefault()}),onFocus:g(o.onFocus,()=>{m.current&&R.current?.click()})})})});F.displayName=O;var ae="RadioGroupIndicator",L=n.forwardRef((r,t)=>{const{__scopeRadioGroup:e,...c}=r,o=D(e);return a.jsx(j,{...o,...c,ref:t})});L.displayName=ae;var q=M,B=F,te=L;const se=n.forwardRef(({className:r,...t},e)=>a.jsx(q,{className:I("grid gap-2",r),...t,ref:e}));se.displayName=q.displayName;const ne=n.forwardRef(({className:r,...t},e)=>a.jsx(B,{ref:e,className:I("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",r),...t,children:a.jsx(te,{className:"flex items-center justify-center",children:a.jsx(Y,{className:"h-2.5 w-2.5 fill-current text-current"})})}));ne.displayName=B.displayName;export{se as R,ne as a};
@@ -0,0 +1 @@
1
+ import{aR as e}from"./index-BtX5DZqb.js";const r=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],i=e("server",r);export{i as S};
@@ -0,0 +1 @@
1
+ import{aR as c}from"./index-BtX5DZqb.js";const e=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]],o=c("columns-2",e);const y=[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]],r=c("share-2",y);export{o as C,r as S};
@@ -0,0 +1 @@
1
+ import{j as a,n as f,o as j,f as t,a7 as w,p as N,q as g,ah as D,l as e,ap as v}from"./index-BtX5DZqb.js";function M({currentStep:r,totalSteps:o,onStepChange:l,stepLabels:d,canGoToStep:n,className:m,progressWidth:u="w-32"}){const c=Array.from({length:o},(s,h)=>h+1),x=s=>{if(s<r){l(s);return}(!n||n(s))&&l(s)},i=s=>s<=r?!1:n?!n(s):!1;return a.jsxs("div",{className:e("flex items-center gap-3",m),children:[a.jsxs(f,{children:[a.jsx(j,{asChild:!0,children:a.jsxs(t,{variant:"ghost",size:"sm",className:"h-auto py-1 px-2 text-sm text-muted-foreground hover:text-foreground",children:["Etapa ",r,"/",o,a.jsx(w,{className:"h-3 w-3 ml-1"})]})}),a.jsx(N,{align:"start",children:c.map(s=>a.jsxs(g,{onClick:()=>x(s),disabled:i(s),className:e("cursor-pointer",s===r&&"bg-muted font-medium",i(s)&&"opacity-50 cursor-not-allowed"),children:[a.jsxs("span",{className:"mr-2 text-muted-foreground",children:[s,"."]}),d?.[s-1]||`Etapa ${s}`,s===r&&a.jsx(D,{className:"h-4 w-4 ml-auto"})]},s))})]}),a.jsx(v,{value:r/o*100,className:e("h-2",u)})]})}export{M as S};
@@ -0,0 +1 @@
1
+ import{aR as t}from"./index-BtX5DZqb.js";const e=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M17 12H7",key:"16if0g"}],["path",{d:"M19 19H5",key:"vjpgq2"}]],o=t("text-align-center",e);const a=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M21 19H7",key:"4cu937"}]],i=t("text-align-end",a);const n=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M17 19H3",key:"z6ezky"}]],c=t("text-align-start",n);export{c as T,o as a,i as b};
@@ -0,0 +1 @@
1
+ import{aR as a}from"./index-BtX5DZqb.js";const t=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],o=a("trash",t);export{o as T};
@@ -0,0 +1 @@
1
+ import{r as a}from"./index-BtX5DZqb.js";function X(i){return{...i,alias:"mock-alias",created_at:i.created_at||new Date().toISOString(),updated_at:i.updated_at||new Date().toISOString(),is_removed:!1,is_actived:i.is_actived??!0}}function Y(i,T={}){const{searchFields:w=[],defaultSort:y,pageSize:F=10,filterFn:b}=T,[g,d]=a.useState(i),[m,v]=a.useState(""),[c,M]=a.useState(y?.field||""),[D,I]=a.useState(y?.direction||"asc"),[l,C]=a.useState(1),[r,O]=a.useState(F),[S,u]=a.useState([]),[L,h]=a.useState(!1),[x,k]=a.useState(!1),p=a.useMemo(()=>{let e=g;if(m&&w.length>0){const s=m.toLowerCase();e=e.filter(t=>w.some(n=>{const f=t[n];return f&&String(f).toLowerCase().includes(s)}))}return b&&(e=e.filter(b)),e},[g,m,w,b]),P=a.useMemo(()=>c?[...p].sort((e,s)=>{const t=e[c],n=s[c];if(t===n)return 0;if(t==null)return 1;if(n==null)return-1;const f=t<n?-1:1;return D==="asc"?f:-f}):p,[p,c,D]),o=a.useMemo(()=>{const e=(l-1)*r;return P.slice(e,e+r)},[P,l,r]),_=Math.ceil(P.length/r),E=P.length,A=a.useMemo(()=>({data:o,currentPage:l,totalPages:_,totalItems:E,itemsPerPage:r,hasNextPage:l<_,hasPreviousPage:l>1}),[o,l,_,E,r]),V=a.useCallback(e=>{v(e),C(1)},[]),q=a.useCallback(e=>{c===e?I(s=>s==="asc"?"desc":"asc"):(M(e),I("asc"))},[c]),z=a.useCallback(e=>{C(e)},[]),N=a.useCallback(e=>{O(e),C(1)},[]),$=a.useCallback(e=>{u(s=>s.includes(e)?s.filter(t=>t!==e):[...s,e])},[]),j=a.useCallback(()=>{const e=o.map(t=>t.id),s=e.every(t=>S.includes(t));u(s?t=>t.filter(n=>!e.includes(n)):t=>[...new Set([...t,...e])])},[o,S]),B=a.useCallback(()=>{u([])},[]),G=a.useCallback(()=>{v(""),M(""),I("asc"),C(1)},[]),H=a.useMemo(()=>{const e=o.map(s=>s.id);return e.length>0&&e.every(s=>S.includes(s))},[o,S]),J=a.useCallback(async e=>{h(!0),await new Promise(t=>setTimeout(t,300));const s={...e,id:`${Date.now()}`,alias:"mock-alias",created_at:new Date().toISOString(),updated_at:new Date().toISOString(),is_removed:!1,is_actived:!0};d(t=>[s,...t]),h(!1)},[]),K=a.useCallback(async(e,s)=>{h(!0),await new Promise(t=>setTimeout(t,300)),d(t=>t.map(n=>n.id===e?{...n,...s,updated_at:new Date().toISOString()}:n)),h(!1)},[]),Q=a.useCallback(e=>{k(!0),setTimeout(()=>{d(s=>s.filter(t=>t.id!==e)),u(s=>s.filter(t=>t!==e)),k(!1)},300)},[]),R=a.useCallback(async e=>{k(!0),await new Promise(s=>setTimeout(s,300)),d(s=>s.filter(t=>!e.includes(t.id))),u([]),k(!1)},[]),U=a.useCallback(()=>{d([...g])},[g]);return{entities:o,pagination:A,isLoading:L,isDeleting:x,searchTerm:m,handleSearch:V,sortField:c,sortDirection:D,handleSort:q,currentPage:l,itemsPerPage:r,handlePageChange:z,handleItemsPerPageChange:N,selectedIds:S,selectItem:$,selectAll:j,clearSelection:B,isAllSelected:H,clearFilters:G,deleteEntity:Q,bulkDelete:R,refetch:U,createEntity:J,updateEntity:K}}export{X as c,Y as u};
@@ -0,0 +1 @@
1
+ import{aR as c}from"./index-BtX5DZqb.js";const e=[["path",{d:"m16 11 2 2 4-4",key:"9rsbq5"}],["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],a=c("user-check",e);export{a as U};
@@ -0,0 +1 @@
1
+ import{aR as e}from"./index-BtX5DZqb.js";const y=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],s=e("user-plus",y);export{s as U};
@@ -1,12 +1,14 @@
1
1
  export declare class TokenRegenerationService {
2
- private static isRegenerating;
2
+ private static regenerationPromise;
3
3
  private static onLogoutCallback;
4
4
  /**
5
5
  * Registra callback para ser chamado em caso de falha de autenticação
6
6
  */
7
7
  static setLogoutCallback(callback: () => void): void;
8
8
  /**
9
- * Tenta regenerar o token Supabase se os tokens Qualiex são válidos
9
+ * Tenta regenerar o token Supabase se os tokens Qualiex são válidos.
10
+ * Se já houver uma regeneração em andamento, aguarda a mesma promessa.
10
11
  */
11
- static attemptRegeneration(): Promise<string | null>;
12
+ static attemptRegeneration(force?: boolean): Promise<string | null>;
13
+ private static _doRegenerate;
12
14
  }
@@ -34,9 +34,5 @@ export declare class TokenService {
34
34
  * Verifica se um token está expirado usando validação robusta
35
35
  */
36
36
  static isTokenExpired(token: string): boolean;
37
- /**
38
- * Extrai dados do token de forma segura
39
- */
40
- static extractTokenData(token: string): JwtPayload | null;
41
37
  }
42
38
  export {};
@@ -2,7 +2,6 @@
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { execSync } from 'child_process';
5
- import { createClient } from '@supabase/supabase-js';
6
5
 
7
6
  try {
8
7
  console.log("\u{1F504} Verificando atualiza\xE7\xF5es do forlogic-core...");
@@ -12,82 +11,106 @@ try {
12
11
  console.error("\u26A0\uFE0F N\xE3o foi poss\xEDvel atualizar o forlogic-core automaticamente.");
13
12
  console.error(" Continuando com a vers\xE3o instalada...\n");
14
13
  }
15
- function loadEnvFile() {
16
- const envPath = path.join(process.cwd(), ".env");
17
- if (fs.existsSync(envPath)) {
18
- const envContent = fs.readFileSync(envPath, "utf-8");
19
- envContent.split("\n").forEach((line) => {
20
- const trimmed = line.trim();
21
- if (trimmed && !trimmed.startsWith("#")) {
22
- const [key, ...valueParts] = trimmed.split("=");
23
- const value = valueParts.join("=").replace(/^["']|["']$/g, "");
24
- if (key && value && !process.env[key]) {
25
- process.env[key] = value;
26
- }
27
- }
14
+ function resolvePackagePath() {
15
+ const directPath = path.join(process.cwd(), "node_modules", "forlogic-core");
16
+ if (fs.existsSync(path.join(directPath, "package.json"))) {
17
+ return directPath;
18
+ }
19
+ try {
20
+ const pkgJsonPath = require.resolve("forlogic-core/package.json", {
21
+ paths: [process.cwd()]
28
22
  });
23
+ return path.dirname(pkgJsonPath);
24
+ } catch {
25
+ throw new Error(
26
+ "Pacote forlogic-core n\xE3o encontrado.\nExecute: npm install forlogic-core"
27
+ );
29
28
  }
30
29
  }
31
- loadEnvFile();
32
- const SUPABASE_URL = process.env.VITE_SUPABASE_URL;
33
- const SUPABASE_ANON_KEY = process.env.VITE_SUPABASE_PUBLISHABLE_KEY;
34
- if (!SUPABASE_URL || !SUPABASE_ANON_KEY) {
35
- console.error("\u274C Erro: Vari\xE1veis de ambiente n\xE3o configuradas.\n");
36
- console.error("Configure no arquivo .env do seu projeto:");
37
- console.error(" VITE_SUPABASE_URL=https://seu-projeto.supabase.co");
38
- console.error(" VITE_SUPABASE_PUBLISHABLE_KEY=sua-chave-anon\n");
39
- console.error("Ou defina como vari\xE1veis de ambiente do sistema.");
40
- process.exit(1);
30
+ function copyFile(src, dest) {
31
+ if (!fs.existsSync(src)) {
32
+ return false;
33
+ }
34
+ const destDir = path.dirname(dest);
35
+ if (!fs.existsSync(destDir)) {
36
+ fs.mkdirSync(destDir, { recursive: true });
37
+ }
38
+ fs.copyFileSync(src, dest);
39
+ return true;
41
40
  }
42
- const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
43
- const DOCS_TO_SYNC = [
44
- { type: "readme", outputFile: "README.md" },
45
- { type: "design_system", outputFile: "docs/DESIGN_SYSTEM.md" },
46
- { type: "knowledge", outputFile: "docs/KNOWLEDGE.md" }
47
- ];
48
- async function pullDocs() {
49
- console.log("\u{1F4E5} Puxando documenta\xE7\xE3o do forlogic-core...\n");
50
- console.log(`\u{1F4E1} Conectando a: ${SUPABASE_URL}
41
+ function copyDirRecursive(src, dest) {
42
+ if (!fs.existsSync(src)) {
43
+ return 0;
44
+ }
45
+ let count = 0;
46
+ if (!fs.existsSync(dest)) {
47
+ fs.mkdirSync(dest, { recursive: true });
48
+ }
49
+ const entries = fs.readdirSync(src, { withFileTypes: true });
50
+ for (const entry of entries) {
51
+ const srcPath = path.join(src, entry.name);
52
+ const destPath = path.join(dest, entry.name);
53
+ if (entry.isDirectory()) {
54
+ count += copyDirRecursive(srcPath, destPath);
55
+ } else {
56
+ fs.copyFileSync(srcPath, destPath);
57
+ count++;
58
+ }
59
+ }
60
+ return count;
61
+ }
62
+ async function syncDocs() {
63
+ console.log("\u{1F4E5} Sincronizando documenta\xE7\xE3o do forlogic-core...\n");
64
+ let pkgPath;
65
+ try {
66
+ pkgPath = resolvePackagePath();
67
+ } catch (err) {
68
+ console.error(`\u274C ${err.message}`);
69
+ process.exit(1);
70
+ }
71
+ const pkgJson = JSON.parse(fs.readFileSync(path.join(pkgPath, "package.json"), "utf-8"));
72
+ console.log(`\u{1F4E6} forlogic-core v${pkgJson.version}
51
73
  `);
74
+ const projectRoot = process.cwd();
52
75
  let successCount = 0;
53
76
  let errorCount = 0;
54
- for (const doc of DOCS_TO_SYNC) {
55
- try {
56
- const { data, error } = await supabase.schema("common").from("documentation").select("content, updated_at").eq("type", doc.type).single();
57
- if (error) {
58
- console.error(`\u274C Erro ao buscar ${doc.type}:`, error.message);
59
- errorCount++;
60
- continue;
61
- }
62
- if (!data) {
63
- console.warn(`\u26A0\uFE0F Documento '${doc.type}' n\xE3o encontrado no banco`);
64
- errorCount++;
65
- continue;
66
- }
67
- const outputPath = path.join(process.cwd(), doc.outputFile);
68
- const outputDir = path.dirname(outputPath);
69
- if (!fs.existsSync(outputDir)) {
70
- fs.mkdirSync(outputDir, { recursive: true });
71
- }
72
- fs.writeFileSync(outputPath, data.content, "utf-8");
73
- console.log(`\u2705 ${doc.type} \u2192 ${doc.outputFile}`);
74
- console.log(` \u{1F4CA} Tamanho: ${(data.content.length / 1024).toFixed(2)} KB`);
75
- console.log(` \u{1F550} \xDAltima atualiza\xE7\xE3o: ${data.updated_at}
76
- `);
77
+ const filesToCopy = [
78
+ { src: path.join(pkgPath, "README.md"), dest: path.join(projectRoot, "README.md"), label: "README.md" },
79
+ { src: path.join(pkgPath, "docs", "KNOWLEDGE.md"), dest: path.join(projectRoot, "docs", "KNOWLEDGE.md"), label: "docs/KNOWLEDGE.md" },
80
+ { src: path.join(pkgPath, "DESIGN_SYSTEM.md"), dest: path.join(projectRoot, "docs", "DESIGN_SYSTEM.md"), label: "docs/DESIGN_SYSTEM.md" }
81
+ ];
82
+ for (const file of filesToCopy) {
83
+ if (copyFile(file.src, file.dest)) {
84
+ const size = fs.statSync(file.dest).size;
85
+ console.log(`\u2705 ${file.label} (${(size / 1024).toFixed(2)} KB)`);
77
86
  successCount++;
78
- } catch (err) {
79
- console.error(`\u274C Erro ao processar ${doc.type}:`, err.message);
87
+ } else {
88
+ console.warn(`\u26A0\uFE0F ${file.label} \u2014 n\xE3o encontrado no pacote`);
80
89
  errorCount++;
81
90
  }
82
91
  }
83
- console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501");
92
+ const memorySrc = path.join(pkgPath, ".note", "memory");
93
+ const memoryDest = path.join(projectRoot, ".note", "memory");
94
+ if (fs.existsSync(memorySrc)) {
95
+ const filesCopied = copyDirRecursive(memorySrc, memoryDest);
96
+ console.log(`\u2705 .note/memory/ (${filesCopied} arquivos)`);
97
+ successCount++;
98
+ } else {
99
+ console.warn("\u26A0\uFE0F .note/memory/ \u2014 n\xE3o encontrado no pacote");
100
+ errorCount++;
101
+ }
102
+ console.log("\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501");
84
103
  console.log(`\u{1F389} Sincroniza\xE7\xE3o conclu\xEDda!`);
85
104
  console.log(` \u2705 Sucesso: ${successCount}`);
86
- console.log(` \u274C Erros: ${errorCount}
87
- `);
105
+ if (errorCount > 0) {
106
+ console.log(` \u26A0\uFE0F Avisos: ${errorCount}`);
107
+ }
108
+ console.log("");
88
109
  if (successCount > 0) {
89
- console.log("\u{1F4A1} Arquivos sincronizados em docs/");
90
- console.log(" Use no Custom Knowledge do Lovable ou como refer\xEAncia.\n");
110
+ console.log("\u{1F4A1} Arquivos sincronizados:");
111
+ console.log(" docs/KNOWLEDGE.md \u2014 Custom Knowledge para Lovable");
112
+ console.log(" docs/DESIGN_SYSTEM.md \u2014 Documenta\xE7\xE3o do Design System");
113
+ console.log(" .note/memory/ \u2014 Contexto de IA (regras, padr\xF5es, componentes)\n");
91
114
  }
92
115
  }
93
- pullDocs();
116
+ syncDocs();
@@ -47,7 +47,7 @@ interface ChartTooltipContentProps extends React.ComponentProps<"div"> {
47
47
  color?: string;
48
48
  }
49
49
  declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<ChartTooltipContentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
50
- declare const ChartLegend: typeof RechartsPrimitive.Legend;
50
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
51
51
  interface ChartLegendContentProps extends React.ComponentProps<"div"> {
52
52
  payload?: Array<{
53
53
  value?: string;
@@ -3,6 +3,10 @@ interface ColorPickerProps {
3
3
  value?: string;
4
4
  onChange?: (color: string) => void;
5
5
  label?: string;
6
+ /** i18n: Label for custom color input (default: "Cor personalizada") */
7
+ customColorLabel?: string;
8
+ /** i18n: Label for preset colors section (default: "Cores predefinidas") */
9
+ presetColorsLabel?: string;
6
10
  }
7
11
  export declare const ColorPicker: React.FC<ColorPickerProps>;
8
12
  export {};
@@ -0,0 +1,70 @@
1
+ import React from 'react';
2
+ /**
3
+ * ComboTree Component
4
+ *
5
+ * Componente para seleção de itens hierárquicos (tree view) com busca recursiva.
6
+ * Baseado no Combobox, adaptado para exibir níveis de profundidade com expansão
7
+ * controlada por chevron e seleção por label.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * const options: ComboTreeOption[] = [
12
+ * {
13
+ * value: 'quality',
14
+ * label: 'Qualidade',
15
+ * children: [
16
+ * { value: 'docs', label: 'Documentos' },
17
+ * { value: 'occurrences', label: 'Ocorrências' },
18
+ * ],
19
+ * },
20
+ * { value: 'hr', label: 'RH' },
21
+ * ];
22
+ *
23
+ * <ComboTree
24
+ * options={options}
25
+ * value={selected}
26
+ * onChange={setSelected}
27
+ * placeholder="Selecione..."
28
+ * />
29
+ * ```
30
+ *
31
+ * ## Comportamento
32
+ * - **Chevron**: expande/recolhe subgrupos (não seleciona)
33
+ * - **Label**: seleciona o item (não expande)
34
+ * - **Busca**: filtra recursivamente, mantém ancestrais visíveis e auto-expande
35
+ */
36
+ export interface ComboTreeOption {
37
+ value: string;
38
+ label: string;
39
+ icon?: React.ComponentType<{
40
+ className?: string;
41
+ }>;
42
+ /** Icon shown when this node is selected (falls back to `icon`) */
43
+ iconSelected?: React.ComponentType<{
44
+ className?: string;
45
+ }>;
46
+ children?: ComboTreeOption[];
47
+ }
48
+ export interface ComboTreeProps {
49
+ multiple?: boolean;
50
+ options: ComboTreeOption[];
51
+ value?: string | string[];
52
+ onChange?: (value: string | string[]) => void;
53
+ placeholder?: string;
54
+ label?: string;
55
+ icon?: React.ComponentType<{
56
+ className?: string;
57
+ }>;
58
+ emptyMessage?: string;
59
+ searchPlaceholder?: string;
60
+ disabled?: boolean;
61
+ required?: boolean;
62
+ isLoading?: boolean;
63
+ error?: string | boolean | Error | null;
64
+ className?: string;
65
+ maxDisplayedBadges?: number;
66
+ popoverContainer?: HTMLElement | null;
67
+ onOpen?: () => void;
68
+ onClose?: () => void;
69
+ }
70
+ export declare function ComboTree({ multiple, options, value, onChange, placeholder, label, icon: Icon, emptyMessage, searchPlaceholder, disabled, required, isLoading, error, className, maxDisplayedBadges, popoverContainer, onOpen, onClose, }: ComboTreeProps): import("react/jsx-runtime").JSX.Element;
@@ -23,6 +23,7 @@ export interface ComboboxProps<T = any> {
23
23
  popoverContainer?: HTMLElement | null;
24
24
  onOpen?: () => void;
25
25
  onClose?: () => void;
26
+ /** @deprecated Use `options` instead. Will be removed in a future version. */
26
27
  items?: T[];
27
28
  onValueChange?: (value: string | string[]) => void;
28
29
  }
@@ -17,6 +17,14 @@ interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof Dialo
17
17
  customHeight?: string;
18
18
  customMinHeight?: string;
19
19
  customMaxHeight?: string;
20
+ /** i18n: Title for unsaved changes alert (default: "Alterações não salvas") */
21
+ unsavedChangesTitle?: string;
22
+ /** i18n: Description for unsaved changes alert */
23
+ unsavedChangesDescription?: string;
24
+ /** i18n: Cancel button text */
25
+ cancelText?: string;
26
+ /** i18n: Leave without saving button text */
27
+ leaveWithoutSavingText?: string;
20
28
  }
21
29
  declare const DialogContent: React.ForwardRefExoticComponent<DialogContentProps & React.RefAttributes<HTMLDivElement>>;
22
30
  interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -3,6 +3,8 @@ interface IconPickerProps {
3
3
  value?: string;
4
4
  onChange?: (iconName: string) => void;
5
5
  label?: string;
6
+ /** i18n: Search label/placeholder (default: "Pesquisar") */
7
+ searchLabel?: string;
6
8
  }
7
9
  export declare const IconPicker: React.FC<IconPickerProps>;
8
10
  export {};
@@ -22,7 +22,7 @@ declare const InputGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<H
22
22
  * InputGroupAddon Variants
23
23
  */
24
24
  declare const inputGroupAddonVariants: (props?: {
25
- align?: "block-end" | "block-start" | "inline-end" | "inline-start";
25
+ align?: "inline-end" | "inline-start" | "block-end" | "block-start";
26
26
  } & import("class-variance-authority/types").ClassProp) => string;
27
27
  export interface InputGroupAddonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof inputGroupAddonVariants> {
28
28
  }
@@ -1,6 +1,6 @@
1
1
  import * as ResizablePrimitive from "react-resizable-panels";
2
2
  declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => import("react/jsx-runtime").JSX.Element;
3
- declare const ResizablePanel: import("react").ForwardRefExoticComponent<Omit<import("react").HTMLAttributes<HTMLButtonElement | HTMLElement | HTMLInputElement | HTMLLabelElement | HTMLObjectElement | HTMLLinkElement | HTMLFormElement | HTMLSlotElement | HTMLStyleElement | HTMLTitleElement | HTMLMapElement | HTMLDialogElement | HTMLImageElement | HTMLOptionElement | HTMLTableElement | HTMLTimeElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLLegendElement | HTMLLIElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOutputElement | HTMLParagraphElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSourceElement | HTMLSpanElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
3
+ declare const ResizablePanel: import("react").ForwardRefExoticComponent<Omit<import("react").HTMLAttributes<HTMLButtonElement | HTMLElement | HTMLInputElement | HTMLLabelElement | HTMLObjectElement | HTMLLinkElement | HTMLFormElement | HTMLSlotElement | HTMLStyleElement | HTMLTitleElement | HTMLMapElement | HTMLDialogElement | HTMLImageElement | HTMLOptionElement | HTMLTableElement | HTMLTimeElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLLegendElement | HTMLLIElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOutputElement | HTMLParagraphElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSourceElement | HTMLSpanElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement | HTMLMenuElement | HTMLTableCaptionElement | HTMLPictureElement>, "id" | "onResize"> & {
4
4
  className?: string;
5
5
  collapsedSize?: number | undefined;
6
6
  collapsible?: boolean | undefined;
@@ -0,0 +1,12 @@
1
+ declare const PROD_PROJECT_ID = "ccjfvpnndclajkleyqkc";
2
+ export interface EnvironmentConfig {
3
+ storageProjectId: string;
4
+ oauth: {
5
+ authUrl: string;
6
+ clientId: string;
7
+ };
8
+ qualiexApiUrl: string;
9
+ }
10
+ export declare function getEnvironmentConfig(): EnvironmentConfig;
11
+ export declare function isDevSupabaseProject(): boolean;
12
+ export { PROD_PROJECT_ID };
@@ -1,9 +1,9 @@
1
1
  export declare const AUTH_CONFIG: {
2
2
  readonly oauth: {
3
- readonly authUrl: any;
4
- readonly clientId: any;
5
- readonly responseType: "id_token token";
6
- readonly scope: "openid profile email";
3
+ authUrl: string;
4
+ clientId: string;
5
+ responseType: string;
6
+ scope: string;
7
7
  };
8
8
  };
9
9
  export declare const CRUD_CONFIG: {
@@ -20,6 +20,8 @@ export declare const SEARCH_CONFIG: {
20
20
  readonly debounceDelay: 500;
21
21
  };
22
22
  export declare const isDevEnvironment: () => boolean;
23
+ export { isDevSupabaseProject } from './environments';
24
+ export declare const getQualiexApiUrl: () => string;
23
25
  export declare const QUERY_KEYS: {
24
26
  readonly crud: (entity: string) => readonly [string];
25
27
  readonly list: (entity: string, filters?: Record<string, any>) => readonly [string, "list", Record<string, any>];
@@ -30,11 +32,6 @@ export declare const QUALIEX_CONFIG: {
30
32
  readonly userEmailFieldSuffix: "_email";
31
33
  readonly userUsernameFieldSuffix: "_username";
32
34
  };
33
- export declare const getQualiexConfig: () => {
34
- readonly userNameFieldSuffix: "_name";
35
- readonly userEmailFieldSuffix: "_email";
36
- readonly userUsernameFieldSuffix: "_username";
37
- };
38
35
  export declare const LOGO_CONFIG: {
39
36
  readonly isQualiex: boolean;
40
37
  };
@@ -51,3 +48,20 @@ export declare const MESSAGES: {
51
48
  readonly load: (entity: string) => string;
52
49
  };
53
50
  };
51
+ /**
52
+ * Creates translated MESSAGES using a t() function with PT fallbacks.
53
+ * Safe for projects without i18n — falls back to Portuguese defaults.
54
+ */
55
+ export declare const createTranslatedMessages: (t: (key: string, defaultValue: string) => string) => {
56
+ success: {
57
+ created: (entity: string) => string;
58
+ updated: (entity: string) => string;
59
+ deleted: (entity: string) => string;
60
+ };
61
+ error: {
62
+ create: (entity: string) => string;
63
+ update: (entity: string) => string;
64
+ delete: (entity: string) => string;
65
+ load: (entity: string) => string;
66
+ };
67
+ };
@@ -0,0 +1,9 @@
1
+ export interface SelectionCheckboxProps {
2
+ checked: boolean;
3
+ onCheckedChange: () => void;
4
+ }
5
+ /**
6
+ * Memoized checkbox for selection in CrudTable/CrudGrid.
7
+ * Only re-renders when `checked` changes.
8
+ */
9
+ export declare const SelectionCheckbox: import("react").NamedExoticComponent<SelectionCheckboxProps>;
@@ -1,4 +1,4 @@
1
- import { CrudConfig, EntityWithId } from '../types';
1
+ import { GeneratedCrudConfig, EntityWithId } from '../types';
2
2
  /**
3
3
  * Gera automaticamente configuração CRUD a partir de uma interface TypeScript
4
4
  *
@@ -70,4 +70,4 @@ import { CrudConfig, EntityWithId } from '../types';
70
70
  * @see {@link withPreset} - Para usar presets prontos (user, product, order, category)
71
71
  * @see {@link crudPresets} - Presets disponíveis
72
72
  */
73
- export declare function generateCrudConfig<T extends EntityWithId>(title: string, sampleEntity: Partial<T>, overrides?: Partial<CrudConfig<T>>): CrudConfig<T>;
73
+ export declare function generateCrudConfig<T extends EntityWithId>(title: string, sampleEntity: Partial<T>, overrides?: Partial<GeneratedCrudConfig<T>>): GeneratedCrudConfig<T>;