@fluig-kit/ecm 1.0.0 → 1.0.3

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.
@@ -1,12 +1,7 @@
1
- (function(g,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("react"),require("react-hook-form"),require("@hookform/resolvers"),require("zod"),require("@fluig-kit/core"),require("chalk")):typeof define=="function"&&define.amd?define(["exports","react","react-hook-form","@hookform/resolvers","zod","@fluig-kit/core","chalk"],d):(g=typeof globalThis<"u"?globalThis:g||self,d(g.FluigKitECM={},g.React,g.reactHookForm,g.resolvers,g.zod,g.FluigKitCore,g.chalk))})(this,(function(g,d,k,H,fe,_,D){"use strict";var L={exports:{}},j={};var K;function me(){if(K)return j;K=1;var e=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function n(o,a,s){var l=null;if(s!==void 0&&(l=""+s),a.key!==void 0&&(l=""+a.key),"key"in a){s={};for(var u in a)u!=="key"&&(s[u]=a[u])}else s=a;return a=s.ref,{$$typeof:e,type:o,key:l,ref:a!==void 0?a:null,props:s}}return j.Fragment=r,j.jsx=n,j.jsxs=n,j}var O={};var Q;function ve(){return Q||(Q=1,process.env.NODE_ENV!=="production"&&(function(){function e(t){if(t==null)return null;if(typeof t=="function")return t.$$typeof===Je?null:t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case R:return"Fragment";case z:return"Profiler";case x:return"StrictMode";case B:return"Suspense";case I:return"SuspenseList";case Y:return"Activity"}if(typeof t=="object")switch(typeof t.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),t.$$typeof){case p:return"Portal";case C:return t.displayName||"Context";case T:return(t._context.displayName||"Context")+".Consumer";case M:var f=t.render;return t=t.displayName,t||(t=f.displayName||f.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case N:return f=t.displayName||null,f!==null?f:e(t.type)||"Memo";case P:f=t._payload,t=t._init;try{return e(t(f))}catch{}}return null}function r(t){return""+t}function n(t){try{r(t);var f=!1}catch{f=!0}if(f){f=console;var h=f.error,E=typeof Symbol=="function"&&Symbol.toStringTag&&t[Symbol.toStringTag]||t.constructor.name||"Object";return h.call(f,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",E),r(t)}}function o(t){if(t===R)return"<>";if(typeof t=="object"&&t!==null&&t.$$typeof===P)return"<...>";try{var f=e(t);return f?"<"+f+">":"<...>"}catch{return"<...>"}}function a(){var t=G.A;return t===null?null:t.getOwner()}function s(){return Error("react-stack-top-frame")}function l(t){if(ie.call(t,"key")){var f=Object.getOwnPropertyDescriptor(t,"key").get;if(f&&f.isReactWarning)return!1}return t.key!==void 0}function u(t,f){function h(){se||(se=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",f))}h.isReactWarning=!0,Object.defineProperty(t,"key",{get:h,configurable:!0})}function c(){var t=e(this.type);return ue[t]||(ue[t]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),t=this.props.ref,t!==void 0?t:null}function i(t,f,h,E,U,X){var A=h.ref;return t={$$typeof:b,type:t,key:f,props:h,_owner:E},(A!==void 0?A:null)!==null?Object.defineProperty(t,"ref",{enumerable:!1,get:c}):Object.defineProperty(t,"ref",{enumerable:!1,value:null}),t._store={},Object.defineProperty(t._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(t,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(t,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:U}),Object.defineProperty(t,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:X}),Object.freeze&&(Object.freeze(t.props),Object.freeze(t)),t}function y(t,f,h,E,U,X){var A=f.children;if(A!==void 0)if(E)if(Xe(A)){for(E=0;E<A.length;E++)v(A[E]);Object.freeze&&Object.freeze(A)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else v(A);if(ie.call(f,"key")){A=e(t);var F=Object.keys(f).filter(function(Ze){return Ze!=="key"});E=0<F.length?"{key: someKey, "+F.join(": ..., ")+": ...}":"{key: someKey}",de[A+E]||(F=0<F.length?"{"+F.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
- let props = %s;
3
- <%s {...props} />
4
- React keys must be passed directly to JSX without using spread:
5
- let props = %s;
6
- <%s key={someKey} {...props} />`,E,A,F,A),de[A+E]=!0)}if(A=null,h!==void 0&&(n(h),A=""+h),l(f)&&(n(f.key),A=""+f.key),"key"in f){h={};for(var Z in f)Z!=="key"&&(h[Z]=f[Z])}else h=f;return A&&u(h,typeof t=="function"?t.displayName||t.name||"Unknown":t),i(t,A,h,a(),U,X)}function v(t){w(t)?t._store&&(t._store.validated=1):typeof t=="object"&&t!==null&&t.$$typeof===P&&(t._payload.status==="fulfilled"?w(t._payload.value)&&t._payload.value._store&&(t._payload.value._store.validated=1):t._store&&(t._store.validated=1))}function w(t){return typeof t=="object"&&t!==null&&t.$$typeof===b}var m=d,b=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),R=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),z=Symbol.for("react.profiler"),T=Symbol.for("react.consumer"),C=Symbol.for("react.context"),M=Symbol.for("react.forward_ref"),B=Symbol.for("react.suspense"),I=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),Y=Symbol.for("react.activity"),Je=Symbol.for("react.client.reference"),G=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ie=Object.prototype.hasOwnProperty,Xe=Array.isArray,J=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(t){return t()}};var se,ue={},le=m.react_stack_bottom_frame.bind(m,s)(),ce=J(o(s)),de={};O.Fragment=R,O.jsx=function(t,f,h){var E=1e4>G.recentlyCreatedOwnerStacks++;return y(t,f,h,!1,E?Error("react-stack-top-frame"):le,E?J(o(t)):ce)},O.jsxs=function(t,f,h){var E=1e4>G.recentlyCreatedOwnerStacks++;return y(t,f,h,!0,E?Error("react-stack-top-frame"):le,E?J(o(t)):ce)}})()),O}var q;function ge(){return q||(q=1,process.env.NODE_ENV==="production"?L.exports=me():L.exports=ve()),L.exports}var S=ge(),ye=function(e,r){for(var n={};e.length;){var o=e[0],a=o.code,s=o.message,l=o.path.join(".");if(!n[l])if("unionErrors"in o){var u=o.unionErrors[0].errors[0];n[l]={message:u.message,type:u.code}}else n[l]={message:s,type:a};if("unionErrors"in o&&o.unionErrors.forEach(function(y){return y.errors.forEach(function(v){return e.push(v)})}),r){var c=n[l].types,i=c&&c[o.code];n[l]=k.appendErrors(l,r,n,a,i?[].concat(i,o.message):o.message)}e.shift()}return n},pe=function(e,r,n){return n===void 0&&(n={}),function(o,a,s){try{return Promise.resolve((function(l,u){try{var c=Promise.resolve(e[n.mode==="sync"?"parse":"parseAsync"](o,r)).then(function(i){return s.shouldUseNativeValidation&&H.validateFieldsNatively({},s),{errors:{},values:n.raw?o:i}})}catch(i){return u(i)}return c&&c.then?c.then(void 0,u):c})(0,function(l){if((function(u){return Array.isArray(u?.errors)})(l))return{values:{},errors:H.toNestErrors(ye(l.errors,!s.shouldUseNativeValidation&&s.criteriaMode==="all"),s)};throw l}))}catch(l){return Promise.reject(l)}}};const $=d.createContext(null);function he({children:e,baseSchema:r}){const[n,o]=d.useState([]),a=d.useMemo(()=>r??fe.z.object({}),[r]),s=d.useCallback((i,y)=>{o(v=>v.some(w=>w.id===i)?v:[...v,{id:i,schema:y}])},[]),l=d.useCallback(i=>{o(y=>y.some(v=>v.id===i)?y.filter(v=>v.id!==i):y)},[]),u=d.useMemo(()=>n.length?n.map(i=>i.schema).reduce((i,y)=>i.and(y),a):a,[n,a]),c=d.useMemo(()=>({registerSchema:s,unregisterSchema:l,mergedSchema:u}),[s,l,u]);return S.jsx($.Provider,{value:c,children:e})}function W(){const e=d.useContext($);if(!e)throw new Error("useSchemaRegistry deve ser usado dentro de <SchemaRegistryProvider>");return e}function ee(e){return typeof e=="number"?e:isNaN(Number(e))?null:Number(e)}function te(e,r,n){if(!e)return!0;const o=Array.isArray(r)?r[0]:r,a=e.field??o,s=n?.[a];return e.hasValue!==void 0?e.hasValue?s!=null&&s!=="":s==null||s==="":e.equals!==void 0?s===e.equals:e.notEquals!==void 0?s!==e.notEquals:!0}function we(e,r,n,o,a){const s=new Set(e),l=new Set(r);return n?.forEach(u=>{if(u.from!==void 0){const i=Array.isArray(u.from)?u.from:[u.from];if(o===null||!i.includes(o))return}if(!te(u.when,u.target,a))return;const c=Array.isArray(u.target)?u.target:[u.target];switch(u.type){case"readonly":c.forEach(i=>{l.add(i),s.delete(i)});break;case"active":c.forEach(i=>{s.add(i),l.delete(i)});break;case"hidden":c.forEach(i=>{s.delete(i),l.delete(i)});break}}),{active:Array.from(s),readonly:Array.from(l)}}function be(e,r,n,o){const a=new Set(e.active),s=new Set(e.readonly),l=new Set(e.hidden??[]);return r?.forEach(u=>{if(u.from!==void 0){const i=Array.isArray(u.from)?u.from:[u.from];if(n===null||!i.includes(n))return}if(!te(u.when,u.target,o))return;const c=Array.isArray(u.target)?u.target:[u.target];switch(u.type){case"hidden":c.forEach(i=>{l.add(i),a.delete(i),s.delete(i)});break;case"active":c.forEach(i=>{a.add(i),s.delete(i),l.delete(i)});break;case"readonly":c.forEach(i=>{s.add(i),a.delete(i),l.delete(i)});break}}),{active:Array.from(a),readonly:Array.from(s),hidden:Array.from(l)}}function Ee(e,r){if(!e?.length)return r;const n=new Map(r.map(a=>[a.name,a])),o=[];return e.forEach(a=>{n.has(a)&&(o.push(n.get(a)),n.delete(a))}),n.forEach(a=>o.push(a)),o}function Ae(e){const r=new Set,n=(o=[])=>{o.forEach(a=>{a.target&&(Array.isArray(a.target)?a.target:[a.target]).forEach(l=>r.add(l)),a.when?.field&&r.add(a.when.field)})};return n(e?.fields?.rules),n(e?.sections?.rules),Array.from(r)}function Se({activityId:e,previousActivityId:r,control:n,workflowStructure:o,sectionsRegistry:a}){const{registerSchema:s,unregisterSchema:l}=W(),u=ee(e),c=ee(r),i=u!==null?o[u]:null,y=d.useMemo(()=>Ae(i),[u,i]),v=k.useWatch({control:n,name:y,defaultValue:{}}),w=d.useMemo(()=>{const b={};return y.forEach((p,R)=>{b[p]=Array.isArray(v)?v[R]:v}),b},[v,y]),m=d.useMemo(()=>{if(!i)return{sections:[],fields:{active:[],readonly:[],hidden:[]}};const b=we(i.sections.active,i.sections.readonly,i.sections.rules,c,w);let p=[...b.readonly.map(x=>({name:x,mode:"readonly"})),...b.active.map(x=>({name:x,mode:"active"}))];p=Ee(i.sections.order,p);const R=be({active:i.fields.active,readonly:i.fields.readonly,hidden:i.fields.hidden},i.fields.rules,c,w);return{sections:p,fields:R}},[i,c,w,a]);return d.useEffect(()=>{const b=m.sections.filter(p=>p.mode==="active").map(p=>p.name);b.forEach(p=>{const R=a?.[p]?.schema;R&&s(p,R)}),Object.keys(a??{}).filter(p=>!b.includes(p)).forEach(l)},[m.sections,a,s,l]),m}function Re(){if(typeof document>"u")return{};const e={};return document.querySelectorAll("input[type='radio'][name]").forEach(r=>{const n=r,o=n.getAttribute("name");o&&n.checked&&(e[o]=n.value)}),document.querySelectorAll("input[name], textarea[name], select[name]").forEach(r=>{const n=r,o=n.getAttribute("name");if(!o||e[o]!==void 0)return;const a=n.getAttribute("value")??n.value??n.textContent??"";e[o]=String(a).trim()}),document.querySelectorAll("span[name]").forEach(r=>{const n=r,o=n.getAttribute("name");if(o){const a=n.textContent?.trim()??"";a!==""&&(e[o]=a)}}),e}const re=()=>typeof window>"u"?null:new URLSearchParams(window.location.search).get("edit"),_e=()=>typeof window>"u"||!window.top?null:window.top.ECM?.workflowView?"process":"document",Te=()=>{if(_e()==="process"){const r=window.top?.ECM?.workflowView;if(!r)return!1;const n=r.newRequest??r.isNewRequest,o=r.colleagueLogin;return n===!0||!!o&&o.trim()!==""}return re()===null},xe=()=>re()==="true",ne=d.createContext(null);function ke({children:e,devConfig:r}){const[n,o]=d.useState(null),a=d.useMemo(()=>Re()??{},[]);return d.useEffect(()=>{let s=!0;return(async()=>{const u=typeof window<"u"&&window.location.hostname==="localhost",c=typeof window<"u"&&window.self!==window.top;let i=null;try{const m=await _.parentProxy.top.ECM.workflowView.sequence;m!=null&&(i=Number(m),r?.showDebugLogs&&console.log("[FluigRuntime] Atividade:",i))}catch(m){console.warn("[FluigRuntime] Falha ao detectar atividade:",m)}const y=!u&&c&&!(Te()||xe()),v={isView:y,isReadOnly:y,activityId:i,previousActivityId:null,prefilledValues:a,showDebugSubmit:!1,showDebugLogs:!1,isDev:!1};let w=v;if(r?.enabled){const m=r.isView??v.isView;w={...v,...r,isView:m,isReadOnly:m,isDev:!0,activityId:r.activityId!==void 0?r.activityId:i}}typeof window<"u"&&(window.__FLUIG_DEBUG_ENABLED__=w.showDebugLogs),w.showDebugLogs&&s&&(_.DebugLogger.header("Runtime Initialized"),_.DebugLogger.table("State",{"Detected Activity":i,"Final Activity":w.activityId,"Dev Mode":w.isDev}),_.DebugLogger.end()),s&&o(w)})(),()=>{s=!1}},[r,a]),n?S.jsx(ne.Provider,{value:n,children:e}):null}function V(){const e=d.useContext(ne);if(!e)throw new Error("useFluigRuntime deve ser usado dentro de <FluigRuntimeProvider>");return e}function Ce(e){const{activityId:r,previousActivityId:n}=V();d.useEffect(()=>{r!=null&&e.setValue("CURRENTACTIVITYID",r),n!=null&&e.setValue("LASTACTIVITYID",n)},[r,n,e]),d.useEffect(()=>{if(typeof window>"u")return;const o=window.top?.document.getElementById("send-process-button")||window.parent?.document.getElementById("workflow-actions-send")||document.getElementById("send-process-button");if(!o){console.warn("[FluigWorkflowReact] Botão de envio do Fluig não encontrado. A validação automática pode falhar.");return}return window.beforeSendValidate=()=>(e.handleSubmit(()=>{window.beforeSendValidate=()=>!0;try{o.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))}catch{o.click()}},a=>{console.error("[Validation Errors]",a),window.top?.FLUIGC?.toast?window.top?.FLUIGC.toast({title:"Atenção",message:"Verifique os campos obrigatórios destacados em vermelho.",type:"danger"}):alert("Verifique os campos obrigatórios.")})(),!1),()=>{}},[e])}const Ie=({workflowStructure:e,sectionsRegistry:r,className:n})=>{const{control:o,handleSubmit:a,register:s,setValue:l,getValues:u}=k.useFormContext(),c=V(),i=d.useRef(!1);d.useEffect(()=>{i.current||(c.activityId!=null&&l("CURRENTACTIVITYID",c.activityId),c.previousActivityId!=null&&l("LASTACTIVITYID",c.previousActivityId),i.current=!0)},[c,l]);const{sections:y,fields:v}=Se({control:o,activityId:c.activityId,previousActivityId:c.previousActivityId,workflowStructure:e,sectionsRegistry:r}),w=m=>{console.log("✅ [FluigWorkflowForm] Dados válidos:",m)};return S.jsxs("form",{id:"fluig-react-form",className:n,onSubmit:a(w),noValidate:!0,children:[S.jsxs("div",{className:"hidden",style:{display:"none"},children:[S.jsx("input",{type:"hidden",...s("CURRENTACTIVITYID")}),S.jsx("input",{type:"hidden",...s("LASTACTIVITYID")})]}),y.length===0&&c.activityId!==null&&S.jsxs("p",{children:["Não foi possível encontrar a atividade: ",String(c.activityId)]}),y.map(({name:m,mode:b})=>{if(b==="hidden")return null;const p=r[m];if(!p)return null;const R=p.Component;return S.jsx(R,{id:m,fields:v,readOnly:b==="readonly"},m)}),c.isDev&&c.showDebugSubmit&&S.jsx("div",{style:{width:"100%",padding:"16px",paddingTop:"0"},children:S.jsx("button",{type:"submit",className:"btn btn-primary btn-lg btn-block",children:"Submit (Debug)"})})]})},Pe=e=>{const{mergedSchema:r}=W(),n=V(),o=k.useForm({resolver:r?pe(r):void 0,defaultValues:n.prefilledValues,mode:"onBlur"});return Ce(o),d.useEffect(()=>{n.showDebugLogs&&(_.DebugLogger.header("Form Initialized"),_.DebugLogger.table("Prefilled Values (DOM Capture)",n.prefilledValues),_.DebugLogger.info("RHF Current Values",o.getValues()),_.DebugLogger.end())},[n.showDebugLogs,n.prefilledValues,o]),S.jsx(k.FormProvider,{...o,children:S.jsx(Ie,{...e})})};async function Fe(e){if(!e)return console.warn("[setFluigNextActivity] Nenhuma atividade informada."),!1;const{wfView:r,wkfView:n}=await je();if(!r||!n)return!1;Oe(r);const o=Number(e),a=Ve(r,o);return a?(Ne(r,n,a,o),console.log(`[setFluigNextActivity] Próxima atividade definida: ${o}`),!0):(console.warn(`[setFluigNextActivity] Estado ${o} não encontrado nas próximas atividades disponíveis.`),console.log("Estados disponíveis:",r.availableStatesCOPY||r.availableStates),!1)}async function je(){const e=await _.parentProxy.top.ECM.workflowView,r=await _.parentProxy.top.ECM_WKFView;return!e||!r?(console.warn("[setFluigNextActivity] Contexto Fluig inválido ou não carregado."),{}):{wfView:e,wkfView:r}}function Oe(e){e.availableStatesCOPY||(e.availableStatesCOPY=e.availableStates)}function Ve(e,r){return(e.availableStatesCOPY||e.availableStates)?.find(o=>o.sequence===r)}function Ne(e,r,n,o){e.availableUsers.users=[],e.availableStates=[n],r.selectActivity=()=>o}const oe=d.createContext(null);function De(){const e=d.useContext(oe);if(!e)throw new Error("useSection deve ser usado dentro de um componente <Section>");return e}function Le({id:e,className:r,schema:n,children:o,form:a,prefilledValues:s,readOnly:l,fields:u={},hidden:c=!1}){const{isView:i,activityId:y}=V(),v=y,w=k.useFormContext(),m=a||w;if(!m)return console.error(`[FluigWorkflowReact] Section "${e}" não encontrou o 'form'.`),null;if(c)return null;const b=d.useCallback(T=>u.hidden?.includes(T)?"hidden":u.readonly?.includes(T)?"readonly":u.active?.includes(T)?"active":l?"readonly":"active",[u,l]),p=d.useCallback(T=>b(T)==="hidden",[b]),R=d.useCallback(T=>b(T)==="readonly",[b]),x=d.useCallback(T=>{if(!T)return;const C=m.getValues("CURRENTACTIVITYID");m.setValue("LASTACTIVITYID",C),m.setValue("CURRENTACTIVITYID",v),Fe(Number(T))},[m,v]);d.useEffect(()=>{if(!i||!s||!n||!m)return;const T=m.getValues(),C=n.shape;C&&Object.entries(C).forEach(([M,B])=>{let I=B;for(;I?._def?.schema;)I=I._def.schema;const N=I?._def?.fluig;if(N?.type!=="options"||!Array.isArray(N.values)||T[M]!==void 0)return;const P={};N.values.forEach(Y=>{P[Y]=s[Y]==="on"}),m.setValue(M,P,{shouldDirty:!1,shouldValidate:!1})})},[i,s,n,m]);const z=d.useMemo(()=>({id:e,form:m,isHidden:p,isReadOnly:R,isView:i,next:x,wf_activity_id:v}),[e,m,p,R,i,x,v]);return S.jsx(oe.Provider,{value:z,children:S.jsx("section",{id:e,className:[e,r].filter(Boolean).join(" "),children:o})})}const ae=d.createContext(null);function Me({children:e,config:r}){const n=d.useMemo(()=>_.createFluigClient(r),[r]);return S.jsx(ae.Provider,{value:n,children:e})}function Ye(){const e=d.useContext(ae);if(!e)throw new Error("useFluigApi deve ser usado dentro de um <FluigApiProvider>");return e}function Ue(e){return e._def?.schema??e}function We(e){let r=e._def?.fluig;if(r?.values)return r.values;const n=Ue(e);if(n!==e&&(r=n._def?.fluig,r?.values))return r.values;const o=n._def;return(o?.meta??o?.metadata)?.fluig?.values??null}function ze(e){return e?._def?.typeName!=="ZodObject"?[]:Object.entries(e.shape)}function Be(e){const r=new Set;return(Array.isArray(e)?e:Object.values(e).map(o=>o.schema).filter(Boolean)).forEach(o=>{let a=o;for(;a._def?.schema;)a=a._def.schema;a._def?.typeName==="ZodObject"&&ze(a).forEach(([s,l])=>{r.add(s);const u=We(l);u?.length&&u.forEach(c=>r.add(c))})}),Array.from(r)}function Ge(e){const r=Be(e),n=r.map(o=>`<input type="hidden" name="${o}" />`).join(`
7
- `);return console.log(D.blue.bold(`
1
+ (function(f,v){typeof exports=="object"&&typeof module<"u"?v(exports,require("react/jsx-runtime"),require("react"),require("react-hook-form"),require("@hookform/resolvers"),require("zod"),require("@fluig-kit/core"),require("chalk")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","react-hook-form","@hookform/resolvers","zod","@fluig-kit/core","chalk"],v):(f=typeof globalThis<"u"?globalThis:f||self,v(f.FluigKitECM={},f.jsxRuntime,f.React,f.reactHookForm,f.resolvers,f.zod,f.FluigKitCore,f.chalk))})(this,(function(f,v,c,S,k,U,p,F){"use strict";var Y=function(e,t){for(var n={};e.length;){var i=e[0],o=i.code,a=i.message,u=i.path.join(".");if(!n[u])if("unionErrors"in i){var s=i.unionErrors[0].errors[0];n[u]={message:s.message,type:s.code}}else n[u]={message:a,type:o};if("unionErrors"in i&&i.unionErrors.forEach(function(g){return g.errors.forEach(function(m){return e.push(m)})}),t){var l=n[u].types,r=l&&l[i.code];n[u]=S.appendErrors(u,t,n,o,r?[].concat(r,i.message):i.message)}e.shift()}return n},B=function(e,t,n){return n===void 0&&(n={}),function(i,o,a){try{return Promise.resolve((function(u,s){try{var l=Promise.resolve(e[n.mode==="sync"?"parse":"parseAsync"](i,t)).then(function(r){return a.shouldUseNativeValidation&&k.validateFieldsNatively({},a),{errors:{},values:n.raw?i:r}})}catch(r){return s(r)}return l&&l.then?l.then(void 0,s):l})(0,function(u){if((function(s){return Array.isArray(s?.errors)})(u))return{values:{},errors:k.toNestErrors(Y(u.errors,!a.shouldUseNativeValidation&&a.criteriaMode==="all"),a)};throw u}))}catch(u){return Promise.reject(u)}}};const P=c.createContext(null);function W({children:e,baseSchema:t}){const[n,i]=c.useState([]),o=c.useMemo(()=>t??U.z.object({}),[t]),a=c.useCallback((r,g)=>{i(m=>m.some(h=>h.id===r)?m:[...m,{id:r,schema:g}])},[]),u=c.useCallback(r=>{i(g=>g.some(m=>m.id===r)?g.filter(m=>m.id!==r):g)},[]),s=c.useMemo(()=>n.length?n.map(r=>r.schema).reduce((r,g)=>r.and(g),o):o,[n,o]),l=c.useMemo(()=>({registerSchema:a,unregisterSchema:u,mergedSchema:s}),[a,u,s]);return v.jsx(P.Provider,{value:l,children:e})}function D(){const e=c.useContext(P);if(!e)throw new Error("useSchemaRegistry deve ser usado dentro de <SchemaRegistryProvider>");return e}function T(e){return typeof e=="number"?e:isNaN(Number(e))?null:Number(e)}function L(e,t,n){if(!e)return!0;const i=Array.isArray(t)?t[0]:t,o=e.field??i,a=n?.[o];return e.hasValue!==void 0?e.hasValue?a!=null&&a!=="":a==null||a==="":e.equals!==void 0?a===e.equals:e.notEquals!==void 0?a!==e.notEquals:!0}function z(e,t,n,i,o){const a=new Set(e),u=new Set(t);return n?.forEach(s=>{if(s.from!==void 0){const r=Array.isArray(s.from)?s.from:[s.from];if(i===null||!r.includes(i))return}if(!L(s.when,s.target,o))return;const l=Array.isArray(s.target)?s.target:[s.target];switch(s.type){case"readonly":l.forEach(r=>{u.add(r),a.delete(r)});break;case"active":l.forEach(r=>{a.add(r),u.delete(r)});break;case"hidden":l.forEach(r=>{a.delete(r),u.delete(r)});break}}),{active:Array.from(a),readonly:Array.from(u)}}function $(e,t,n,i){const o=new Set(e.active),a=new Set(e.readonly),u=new Set(e.hidden??[]);return t?.forEach(s=>{if(s.from!==void 0){const r=Array.isArray(s.from)?s.from:[s.from];if(n===null||!r.includes(n))return}if(!L(s.when,s.target,i))return;const l=Array.isArray(s.target)?s.target:[s.target];switch(s.type){case"hidden":l.forEach(r=>{u.add(r),o.delete(r),a.delete(r)});break;case"active":l.forEach(r=>{o.add(r),a.delete(r),u.delete(r)});break;case"readonly":l.forEach(r=>{a.add(r),o.delete(r),u.delete(r)});break}}),{active:Array.from(o),readonly:Array.from(a),hidden:Array.from(u)}}function G(e,t){if(!e?.length)return t;const n=new Map(t.map(o=>[o.name,o])),i=[];return e.forEach(o=>{n.has(o)&&(i.push(n.get(o)),n.delete(o))}),n.forEach(o=>i.push(o)),i}function K(e){const t=new Set,n=(i=[])=>{i.forEach(o=>{o.target&&(Array.isArray(o.target)?o.target:[o.target]).forEach(u=>t.add(u)),o.when?.field&&t.add(o.when.field)})};return n(e?.fields?.rules),n(e?.sections?.rules),Array.from(t)}function Z({activityId:e,previousActivityId:t,control:n,workflowStructure:i,sectionsRegistry:o}){const{registerSchema:a,unregisterSchema:u}=D(),s=T(e),l=T(t),r=s!==null?i[s]:null,g=c.useMemo(()=>K(r),[s,r]),m=S.useWatch({control:n,name:g,defaultValue:{}}),h=c.useMemo(()=>{const w={};return g.forEach((y,A)=>{w[y]=Array.isArray(m)?m[A]:m}),w},[m,g]),d=c.useMemo(()=>{if(!r)return{sections:[],fields:{active:[],readonly:[],hidden:[]}};const w=z(r.sections.active,r.sections.readonly,r.sections.rules,l,h);let y=[...w.readonly.map(E=>({name:E,mode:"readonly"})),...w.active.map(E=>({name:E,mode:"active"}))];y=G(r.sections.order,y);const A=$({active:r.fields.active,readonly:r.fields.readonly,hidden:r.fields.hidden},r.fields.rules,l,h);return{sections:y,fields:A}},[r,l,h,o]);return c.useEffect(()=>{const w=d.sections.filter(y=>y.mode==="active").map(y=>y.name);w.forEach(y=>{const A=o?.[y]?.schema;A&&a(y,A)}),Object.keys(o??{}).filter(y=>!w.includes(y)).forEach(u)},[d.sections,o,a,u]),d}function H(){if(typeof document>"u")return{};const e={};return document.querySelectorAll("input[type='radio'][name]").forEach(t=>{const n=t,i=n.getAttribute("name");i&&n.checked&&(e[i]=n.value)}),document.querySelectorAll("input[name], textarea[name], select[name]").forEach(t=>{const n=t,i=n.getAttribute("name");if(!i||e[i]!==void 0)return;const o=n.getAttribute("value")??n.value??n.textContent??"";e[i]=String(o).trim()}),document.querySelectorAll("span[name]").forEach(t=>{const n=t,i=n.getAttribute("name");if(i){const o=n.textContent?.trim()??"";o!==""&&(e[i]=o)}}),e}const N=()=>typeof window>"u"?null:new URLSearchParams(window.location.search).get("edit"),J=()=>typeof window>"u"||!window.top?null:window.top.ECM?.workflowView?"process":"document",Q=()=>{if(J()==="process"){const t=window.top?.ECM?.workflowView;if(!t)return!1;const n=t.newRequest??t.isNewRequest,i=t.colleagueLogin;return n===!0||!!i&&i.trim()!==""}return N()===null},X=()=>N()==="true",R=c.createContext(null);function ee({children:e,devConfig:t}){const[n,i]=c.useState(null),o=c.useMemo(()=>H()??{},[]);return c.useEffect(()=>{let a=!0;return(async()=>{const s=typeof window<"u"&&window.location.hostname==="localhost",l=typeof window<"u"&&window.self!==window.top;let r=null;try{const d=await p.parentProxy.top.ECM.workflowView.sequence;d!=null&&(r=Number(d),t?.showDebugLogs&&console.log("[FluigRuntime] Atividade:",r))}catch(d){console.warn("[FluigRuntime] Falha ao detectar atividade:",d)}const g=!s&&l&&!(Q()||X()),m={isView:g,isReadOnly:g,activityId:r,previousActivityId:null,prefilledValues:o,showDebugSubmit:!1,showDebugLogs:!1,isDev:!1};let h=m;if(t?.enabled){const d=t.isView??m.isView;h={...m,...t,isView:d,isReadOnly:d,isDev:!0,activityId:t.activityId!==void 0?t.activityId:r}}typeof window<"u"&&(window.__FLUIG_DEBUG_ENABLED__=h.showDebugLogs),h.showDebugLogs&&a&&(p.DebugLogger.header("Runtime Initialized"),p.DebugLogger.table("State",{"Detected Activity":r,"Final Activity":h.activityId,"Dev Mode":h.isDev}),p.DebugLogger.end()),a&&i(h)})(),()=>{a=!1}},[t,o]),n?v.jsx(R.Provider,{value:n,children:e}):null}function I(){const e=c.useContext(R);if(!e)throw new Error("useFluigRuntime deve ser usado dentro de <FluigRuntimeProvider>");return e}function te(e){const{activityId:t,previousActivityId:n}=I();c.useEffect(()=>{t!=null&&e.setValue("CURRENTACTIVITYID",t),n!=null&&e.setValue("LASTACTIVITYID",n)},[t,n,e]),c.useEffect(()=>{if(typeof window>"u")return;const i=window.top?.document.getElementById("send-process-button")||window.parent?.document.getElementById("workflow-actions-send")||document.getElementById("send-process-button");if(!i){console.warn("[FluigWorkflowReact] Botão de envio do Fluig não encontrado. A validação automática pode falhar.");return}return window.beforeSendValidate=()=>(e.handleSubmit(()=>{window.beforeSendValidate=()=>!0;try{i.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))}catch{i.click()}},o=>{console.error("[Validation Errors]",o),window.top?.FLUIGC?.toast?window.top?.FLUIGC.toast({title:"Atenção",message:"Verifique os campos obrigatórios destacados em vermelho.",type:"danger"}):alert("Verifique os campos obrigatórios.")})(),!1),()=>{}},[e])}const ne=({workflowStructure:e,sectionsRegistry:t,className:n})=>{const{control:i,handleSubmit:o,register:a,setValue:u,getValues:s}=S.useFormContext(),l=I(),r=c.useRef(!1);c.useEffect(()=>{r.current||(l.activityId!=null&&u("CURRENTACTIVITYID",l.activityId),l.previousActivityId!=null&&u("LASTACTIVITYID",l.previousActivityId),r.current=!0)},[l,u]);const{sections:g,fields:m}=Z({control:i,activityId:l.activityId,previousActivityId:l.previousActivityId,workflowStructure:e,sectionsRegistry:t}),h=d=>{console.log("✅ [FluigWorkflowForm] Dados válidos:",d)};return v.jsxs("form",{id:"fluig-react-form",className:n,onSubmit:o(h),noValidate:!0,children:[v.jsxs("div",{className:"hidden",style:{display:"none"},children:[v.jsx("input",{type:"hidden",...a("CURRENTACTIVITYID")}),v.jsx("input",{type:"hidden",...a("LASTACTIVITYID")})]}),g.length===0&&l.activityId!==null&&v.jsxs("p",{children:["Não foi possível encontrar a atividade: ",String(l.activityId)]}),g.map(({name:d,mode:w})=>{if(w==="hidden")return null;const y=t[d];if(!y)return null;const A=y.Component;return v.jsx(A,{id:d,fields:m,readOnly:w==="readonly"},d)}),l.isDev&&l.showDebugSubmit&&v.jsx("div",{style:{width:"100%",padding:"16px",paddingTop:"0"},children:v.jsx("button",{type:"submit",className:"btn btn-primary btn-lg btn-block",children:"Submit (Debug)"})})]})},ie=e=>{const{mergedSchema:t}=D(),n=I(),i=S.useForm({resolver:t?B(t):void 0,defaultValues:n.prefilledValues,mode:"onBlur"});return te(i),c.useEffect(()=>{n.showDebugLogs&&(p.DebugLogger.header("Form Initialized"),p.DebugLogger.table("Prefilled Values (DOM Capture)",n.prefilledValues),p.DebugLogger.info("RHF Current Values",i.getValues()),p.DebugLogger.end())},[n.showDebugLogs,n.prefilledValues,i]),v.jsx(S.FormProvider,{...i,children:v.jsx(ne,{...e})})};async function re(e){if(!e)return console.warn("[setFluigNextActivity] Nenhuma atividade informada."),!1;const{wfView:t,wkfView:n}=await oe();if(!t||!n)return!1;se(t);const i=Number(e),o=ae(t,i);return o?(ue(t,n,o,i),console.log(`[setFluigNextActivity] Próxima atividade definida: ${i}`),!0):(console.warn(`[setFluigNextActivity] Estado ${i} não encontrado nas próximas atividades disponíveis.`),console.log("Estados disponíveis:",t.availableStatesCOPY||t.availableStates),!1)}async function oe(){const e=await p.parentProxy.top.ECM.workflowView,t=await p.parentProxy.top.ECM_WKFView;return!e||!t?(console.warn("[setFluigNextActivity] Contexto Fluig inválido ou não carregado."),{}):{wfView:e,wkfView:t}}function se(e){e.availableStatesCOPY||(e.availableStatesCOPY=e.availableStates)}function ae(e,t){return(e.availableStatesCOPY||e.availableStates)?.find(i=>i.sequence===t)}function ue(e,t,n,i){e.availableUsers.users=[],e.availableStates=[n],t.selectActivity=()=>i}const M=c.createContext(null);function le(){const e=c.useContext(M);if(!e)throw new Error("useSection deve ser usado dentro de um componente <Section>");return e}function ce({id:e,className:t,schema:n,children:i,form:o,prefilledValues:a,readOnly:u,fields:s={},hidden:l=!1}){const{isView:r,activityId:g}=I(),m=g,h=S.useFormContext(),d=o||h;if(!d)return console.error(`[FluigWorkflowReact] Section "${e}" não encontrou o 'form'.`),null;if(l)return null;const w=c.useCallback(b=>s.hidden?.includes(b)?"hidden":s.readonly?.includes(b)?"readonly":s.active?.includes(b)?"active":u?"readonly":"active",[s,u]),y=c.useCallback(b=>w(b)==="hidden",[w]),A=c.useCallback(b=>w(b)==="readonly",[w]),E=c.useCallback(b=>{if(!b)return;const C=d.getValues("CURRENTACTIVITYID");d.setValue("LASTACTIVITYID",C),d.setValue("CURRENTACTIVITYID",m),re(Number(b))},[d,m]);c.useEffect(()=>{if(!r||!a||!n||!d)return;const b=d.getValues(),C=n.shape;C&&Object.entries(C).forEach(([O,pe])=>{let V=pe;for(;V?._def?.schema;)V=V._def.schema;const x=V?._def?.fluig;if(x?.type!=="options"||!Array.isArray(x.values)||b[O]!==void 0)return;const j={};x.values.forEach(_=>{j[_]=a[_]==="on"}),d.setValue(O,j,{shouldDirty:!1,shouldValidate:!1})})},[r,a,n,d]);const we=c.useMemo(()=>({id:e,form:d,isHidden:y,isReadOnly:A,isView:r,next:E,wf_activity_id:m}),[e,d,y,A,r,E,m]);return v.jsx(M.Provider,{value:we,children:v.jsx("section",{id:e,className:[e,t].filter(Boolean).join(" "),children:i})})}const q=c.createContext(null);function de({children:e,config:t}){const n=c.useMemo(()=>p.createFluigClient(t),[t]);return v.jsx(q.Provider,{value:n,children:e})}function fe(){const e=c.useContext(q);if(!e)throw new Error("useFluigApi deve ser usado dentro de um <FluigApiProvider>");return e}function me(e){return e._def?.schema??e}function ge(e){let t=e._def?.fluig;if(t?.values)return t.values;const n=me(e);if(n!==e&&(t=n._def?.fluig,t?.values))return t.values;const i=n._def;return(i?.meta??i?.metadata)?.fluig?.values??null}function ye(e){return e?._def?.typeName!=="ZodObject"?[]:Object.entries(e.shape)}function ve(e){const t=new Set;return(Array.isArray(e)?e:Object.values(e).map(i=>i.schema).filter(Boolean)).forEach(i=>{let o=i;for(;o._def?.schema;)o=o._def.schema;o._def?.typeName==="ZodObject"&&ye(o).forEach(([a,u])=>{t.add(a);const s=ge(u);s?.length&&s.forEach(l=>t.add(l))})}),Array.from(t)}function he(e){const t=ve(e),n=t.map(i=>`<input type="hidden" name="${i}" />`).join(`
2
+ `);return console.log(F.blue.bold(`
8
3
  === Inputs gerados (Build Script) ===
9
- `)),r.forEach((o,a)=>{console.log(`${D.yellow(a+1+".")} ${D.green(o)}`)}),console.log(D.blue.bold(`
4
+ `)),t.forEach((i,o)=>{console.log(`${F.yellow(o+1+".")} ${F.green(i)}`)}),console.log(F.blue.bold(`
10
5
  =====================================
11
6
  `)),`<!DOCTYPE html>
12
7
  <html lang="pt-br">
@@ -16,7 +11,6 @@ React keys must be passed directly to JSX without using spread:
16
11
  <title>Workflow Fluig</title>
17
12
 
18
13
  <link rel="stylesheet" href="/portal/style-guide/css/fluig-style-guide.min.css">
19
-
20
14
  <link rel="stylesheet" crossorigin href="./main.css">
21
15
  </head>
22
16
  <body>
@@ -28,4 +22,4 @@ React keys must be passed directly to JSX without using spread:
28
22
 
29
23
  <script src="./bundle.js"><\/script>
30
24
  </body>
31
- </html>`}Object.defineProperty(g,"DebugLogger",{enumerable:!0,get:()=>_.DebugLogger}),Object.defineProperty(g,"createFluigClient",{enumerable:!0,get:()=>_.createFluigClient}),Object.defineProperty(g,"parentProxy",{enumerable:!0,get:()=>_.parentProxy}),g.FluigApiProvider=Me,g.FluigRuntimeProvider=ke,g.FluigWorkflowForm=Pe,g.SchemaRegistryProvider=he,g.Section=Le,g.generateHtmlTemplate=Ge,g.useFluigApi=Ye,g.useFluigRuntime=V,g.useSchemaRegistry=W,g.useSection=De,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})}));
25
+ </html>`}Object.defineProperty(f,"DebugLogger",{enumerable:!0,get:()=>p.DebugLogger}),Object.defineProperty(f,"createFluigClient",{enumerable:!0,get:()=>p.createFluigClient}),Object.defineProperty(f,"parentProxy",{enumerable:!0,get:()=>p.parentProxy}),f.FluigApiProvider=de,f.FluigRuntimeProvider=ee,f.FluigWorkflowForm=ie,f.SchemaRegistryProvider=W,f.Section=ce,f.generateHtmlTemplate=he,f.useFluigApi=fe,f.useFluigRuntime=I,f.useSchemaRegistry=D,f.useSection=le,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluig-kit/ecm",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/fluig-kit-ecm.umd.js",
6
6
  "private": false,
@@ -15,19 +15,24 @@
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/fluig-kit-ecm.es.js",
17
17
  "require": "./dist/fluig-kit-ecm.umd.js"
18
+ },
19
+ "./node": {
20
+ "types": "./src/services/generateHtmlTemplate.ts",
21
+ "import": "./src/services/generateHtmlTemplate.ts",
22
+ "require": "./src/services/generateHtmlTemplate.ts"
18
23
  }
19
24
  },
20
25
  "scripts": {
21
26
  "build": "vite build && shx cp ../../README.md ."
22
27
  },
23
28
  "dependencies": {
24
- "@fluig-kit/core": "*",
25
29
  "chalk": "^4.1.2"
26
30
  },
27
31
  "peerDependencies": {
28
32
  "react": "^18.0.0 || ^19.0.0",
29
33
  "react-dom": "^18.0.0 || ^19.0.0",
30
34
  "react-hook-form": "^7.0.0",
35
+ "@fluig-kit/core": "1.0.0",
31
36
  "@hookform/resolvers": "^3.0.0",
32
37
  "zod": "^3.0.0"
33
38
  },