formio-react-native 1.0.10 → 1.0.11-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/FormioField.js +1 -1
- package/lib/commonjs/components/FormioForm.js +1 -1
- package/lib/commonjs/context/FormioContext.js +1 -1
- package/lib/module/components/FormioField.js +1 -1
- package/lib/module/components/FormioForm.js +1 -1
- package/lib/module/context/FormioContext.js +1 -1
- package/lib/typescript/commonjs/context/FormioContext.d.ts +1 -11
- package/package.json +9 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from'react';import{View,Text,StyleSheet}from'react-native';import{useTheme}from'../hooks/useTheme';import{useI18n}from'../i18n/I18nContext';import{useFormioContext}from'../context/FormioContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS,FallbackRenderer}from'../components/renderers';let Picker=null;try{Picker=require('@react-native-picker/picker').Picker;}catch(e){Picker=null;}const getOptions=component=>{const ds=component.data;if(!ds)return[];if(ds.values)return ds.values;if(ds.json&&Array.isArray(ds.json))return ds.json;return[];};export const FormioField=({component,value,onChange,error})=>{
|
|
1
|
+
import React from'react';import{View,Text,StyleSheet}from'react-native';import{useTheme}from'../hooks/useTheme';import{useI18n}from'../i18n/I18nContext';import{useFormioContext}from'../context/FormioContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS,FallbackRenderer}from'../components/renderers';let Picker=null;try{Picker=require('@react-native-picker/picker').Picker;}catch(e){Picker=null;}const getOptions=component=>{const ds=component.data;if(!ds)return[];if(ds.values)return ds.values;if(ds.json&&Array.isArray(ds.json))return ds.json;return[];};export const FormioField=({component,value,onChange,error})=>{const{type,key,label,placeholder,required,disabled}=component;const{createStyles,getColor,getComponent}=useTheme();const{translate,isRTL}=useI18n();const formioContext=useFormioContext();const translatedLabel=translate(label||'',label);const translatedPlaceholder=translate(placeholder||'',placeholder);const translatedError=translate(error||'',error);const themedStyles=createStyles(theme=>({fieldContainer:{marginBottom:getComponent('container.marginBottom',16)},label:{fontSize:getComponent('label.fontSize',16),fontWeight:getComponent('label.fontWeight','500'),marginBottom:getComponent('label.marginBottom',8),color:getComponent('label.color')||getColor('text','#333'),textAlign:isRTL?'right':'left',width:'100%'},input:{borderWidth:getComponent('input.borderWidth',1),borderColor:error?getColor('error','#e74c3c'):getColor('border','#ddd'),borderRadius:getComponent('input.borderRadius',8),padding:getComponent('input.padding',12),fontSize:getComponent('input.fontSize',16),minHeight:getComponent('input.minHeight',44),backgroundColor:disabled?getColor('disabled','#f0f0f0'):getColor('background','#fff'),textAlign:isRTL?'right':'left',writingDirection:isRTL?'rtl':'ltr'},errorText:{color:getColor('error','#e74c3c'),fontSize:getComponent('error.fontSize',14),marginTop:getComponent('error.marginTop',4)}}));const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);const overrides=formioContext==null?void 0:formioContext.componentOverrides;if(overrides){Object.entries(overrides).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,override);}});}return reg;},[formioContext==null?void 0:formioContext.componentOverrides]);const renderField=()=>{const renderer=registry.get(type);if(renderer){return React.createElement(React.Fragment,null,renderer({component,value,onChange:val=>onChange(key,val),error:translatedError,disabled,readOnly:!!component.readOnly}));}return React.createElement(FallbackRenderer,{component:component,value:value,onChange:v=>onChange(key,v),error:translatedError,disabled:disabled});};if(component.input===false)return null;if(type==='checkbox'){return renderField();}return React.createElement(View,{style:themedStyles.fieldContainer},translatedLabel&&React.createElement(Text,{style:[themedStyles.label]},translatedLabel,required&&React.createElement(Text,{style:[themedStyles.required,{color:getColor('error')}]}," *")),renderField(),component.description?React.createElement(Text,{style:[themedStyles.description,{color:getColor('textSecondary'),textAlign:isRTL?'right':'left'}]},translate(component.description,component.description)):null,translatedError&&React.createElement(Text,{style:themedStyles.errorText},translatedError));};const styles=StyleSheet.create({fieldContainer:{marginBottom:16},label:{fontSize:16,fontWeight:'500',marginBottom:8,color:'#333'},required:{color:'#e74c3c'},input:{borderWidth:1,borderColor:'#ddd',borderRadius:8,padding:12,fontSize:16,backgroundColor:'#fff'},disabled:{backgroundColor:'#f0f0f0',color:'#999'},textarea:{height:100,textAlignVertical:'top'},selectPlaceholder:{padding:12,fontSize:16,color:'#999',fontStyle:'italic'},inputError:{borderColor:'#e74c3c'},description:{color:'#666',fontSize:13,marginTop:4},errorText:{color:'#e74c3c',fontSize:14,marginTop:4},pickerWrapper:{borderWidth:1,borderColor:'#ddd',borderRadius:8,overflow:'hidden',backgroundColor:'#fff'},radioGroup:{gap:8},radioItem:{fontSize:16,paddingVertical:6},switchRow:{flexDirection:'row',alignItems:'center',gap:8},switchLabel:{fontSize:16}});
|
|
2
2
|
//# sourceMappingURL=FormioField.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{useState,useEffect}from'react';import{ScrollView,View,Text,TouchableOpacity,StyleSheet}from'react-native';import{useI18n}from'../i18n/I18nContext';import{FormioField}from'./FormioField';import{DatePicker}from'./DatePicker';import{FileUpload}from'./FileUpload';import{ResourceSelect}from'./ResourceSelect';import{DataGrid}from'./DataGrid';import{EditGrid}from'./EditGrid';import{Wizard}from'./Wizard';import{validateForm}from'../validation';import{useFormioContext}from'../context/FormioContext';import{safeEvalConditional,safeEvalValue}from'../utils';const traverseComponents=(components,cb)=>{const walk=comp=>{cb(comp);if(comp.components)comp.components.forEach(walk);if(comp.type==='columns'&&Array.isArray(comp.columns)){comp.columns.forEach(col=>{if(Array.isArray(col.components))col.components.forEach(walk);});}};components.forEach(walk);};const flatten=components=>{const out=[];traverseComponents(components,c=>out.push(c));return out;};const initDefaults=(components,data)=>{const flat=flatten(components);const next={...data};for(const c of flat){if(c.input!==false&&c.key&&next[c.key]===undefined){if(c.defaultValue!==undefined)next[c.key]=c.defaultValue;}}return next;};const isHidden=(component,data)=>{if(component.hidden)return true;const value=data[component.key];if(component.customConditional){const res=safeEvalConditional(component.customConditional,{data,value,row:data,util:{}});return!res;}if(component.conditional&&component.conditional.when){const whenVal=data[component.conditional.when];const eq=component.conditional.eq;const show=component.conditional.show!==false;const match=whenVal===eq;return show?!match:match;}return false;};const applyCalculations=(components,data)=>{const flat=flatten(components);let changed=true;let guard=0;let next={...data};while(changed&&guard<5){changed=false;guard++;for(const c of flat){if(c.calculateValue){const current=next[c.key];const calc=safeEvalValue(c.calculateValue,{data:next,value:current,row:next,util:{}});if(calc!==undefined&&calc!==current){next={...next,[c.key]:calc};changed=true;}}}}return next;};export const FormioForm=({form,data:initialData={},options,components:propComponents,onSubmit,onChange,onValidation})=>{const context=useFormioContext();const{translate,isRTL}=useI18n();const componentOverrides={...(context==null?void 0:context.componentOverrides),...propComponents};const theme=context==null?void 0:context.theme;const[formData,setFormData]=useState(initialData);const[errors,setErrors]=useState([]);if(form.display==='wizard'){return React.createElement(ScrollView,{style:styles.form},form.title&&React.createElement(Text,{style:styles.title},form.title),React.createElement(Wizard,{form:form,component:{type:'wizard',key:'wizard',pages:form.components},data:formData,setData:setFormData,errors:errors,onValidation:setErrors,onFinish:()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}}}));}useEffect(()=>{let next=initDefaults(form.components,initialData);next=applyCalculations(form.components,next);setFormData(next);const validationErrors=validateForm(form.components,next,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[form]);useEffect(()=>{const validationErrors=validateForm(form.components,formData,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[formData]);const handleFieldChange=(key,value)=>{let next={...formData,[key]:value};next=applyCalculations(form.components,next);setFormData(next);onChange==null||onChange(next);};const handleSubmit=()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}};const getFieldError=key=>{var _errors$find;return(_errors$find=errors.find(e=>e.field===key))==null?void 0:_errors$find.message;};const renderComponent=component=>{if(isHidden(component,formData))return null;const customRenderer=(componentOverrides==null?void 0:componentOverrides[component.type])||(componentOverrides==null?void 0:componentOverrides[component.key]);if(customRenderer){return customRenderer(component,
|
|
1
|
+
import React,{useState,useEffect}from'react';import{ScrollView,View,Text,TouchableOpacity,StyleSheet}from'react-native';import{useI18n}from'../i18n/I18nContext';import{FormioField}from'./FormioField';import{DatePicker}from'./DatePicker';import{FileUpload}from'./FileUpload';import{ResourceSelect}from'./ResourceSelect';import{DataGrid}from'./DataGrid';import{EditGrid}from'./EditGrid';import{Wizard}from'./Wizard';import{validateForm}from'../validation';import{useFormioContext}from'../context/FormioContext';import{safeEvalConditional,safeEvalValue}from'../utils';const traverseComponents=(components,cb)=>{const walk=comp=>{cb(comp);if(comp.components)comp.components.forEach(walk);if(comp.type==='columns'&&Array.isArray(comp.columns)){comp.columns.forEach(col=>{if(Array.isArray(col.components))col.components.forEach(walk);});}};components.forEach(walk);};const flatten=components=>{const out=[];traverseComponents(components,c=>out.push(c));return out;};const initDefaults=(components,data)=>{const flat=flatten(components);const next={...data};for(const c of flat){if(c.input!==false&&c.key&&next[c.key]===undefined){if(c.defaultValue!==undefined)next[c.key]=c.defaultValue;}}return next;};const isHidden=(component,data)=>{if(component.hidden)return true;const value=data[component.key];if(component.customConditional){const res=safeEvalConditional(component.customConditional,{data,value,row:data,util:{}});return!res;}if(component.conditional&&component.conditional.when){const whenVal=data[component.conditional.when];const eq=component.conditional.eq;const show=component.conditional.show!==false;const match=whenVal===eq;return show?!match:match;}return false;};const applyCalculations=(components,data)=>{const flat=flatten(components);let changed=true;let guard=0;let next={...data};while(changed&&guard<5){changed=false;guard++;for(const c of flat){if(c.calculateValue){const current=next[c.key];const calc=safeEvalValue(c.calculateValue,{data:next,value:current,row:next,util:{}});if(calc!==undefined&&calc!==current){next={...next,[c.key]:calc};changed=true;}}}}return next;};export const FormioForm=({form,data:initialData={},options,components:propComponents,onSubmit,onChange,onValidation})=>{const context=useFormioContext();const{translate,isRTL}=useI18n();const componentOverrides={...(context==null?void 0:context.componentOverrides),...propComponents};const theme=context==null?void 0:context.theme;const[formData,setFormData]=useState(initialData);const[errors,setErrors]=useState([]);if(form.display==='wizard'){return React.createElement(ScrollView,{style:styles.form},form.title&&React.createElement(Text,{style:styles.title},form.title),React.createElement(Wizard,{form:form,component:{type:'wizard',key:'wizard',pages:form.components},data:formData,setData:setFormData,errors:errors,onValidation:setErrors,onFinish:()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}}}));}useEffect(()=>{let next=initDefaults(form.components,initialData);next=applyCalculations(form.components,next);setFormData(next);const validationErrors=validateForm(form.components,next,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[form]);useEffect(()=>{const validationErrors=validateForm(form.components,formData,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[formData]);const handleFieldChange=(key,value)=>{let next={...formData,[key]:value};next=applyCalculations(form.components,next);setFormData(next);onChange==null||onChange(next);};const handleSubmit=()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}};const getFieldError=key=>{var _errors$find;return(_errors$find=errors.find(e=>e.field===key))==null?void 0:_errors$find.message;};const renderComponent=component=>{if(isHidden(component,formData))return null;const customRenderer=(componentOverrides==null?void 0:componentOverrides[component.type])||(componentOverrides==null?void 0:componentOverrides[component.key]);if(customRenderer){return customRenderer({component,value:formData[component.key],onChange:value=>handleFieldChange(component.key,value),error:getFieldError(component.key),disabled:component.disabled||false,readOnly:(options==null?void 0:options.readOnly)||false,formData});}if(component.type==='button'&&component.key==='submit'){var _theme$colors;return React.createElement(TouchableOpacity,{key:component.key,style:[styles.submitButton,(theme==null||(_theme$colors=theme.colors)==null?void 0:_theme$colors.primary)&&{backgroundColor:theme.colors.primary}],onPress:handleSubmit},React.createElement(Text,{style:styles.submitButtonText},translate(component.label||'Submit',component.label||'Submit')));}if(component.type==='wizard'||form.display==='wizard'){const wizardPages=component.pages||form.components||[];return React.createElement(Wizard,{key:component.key||'wizard',form:form,component:{...component,pages:wizardPages,type:'wizard'},data:formData,setData:d=>setFormData(d),errors:errors,onFinish:handleSubmit});}if(component.type==='columns'&&Array.isArray(component.columns)){const cols=component.columns;const shouldShowLabel=component.label&&!component.hideLabel;return React.createElement(View,{key:component.key,style:styles.columnsContainer},shouldShowLabel?React.createElement(Text,{style:[styles.containerLabel,{textAlign:isRTL?'right':'left'}]},translate(component.label,component.label)):null,React.createElement(View,{style:styles.columnsRow},cols.map((col,i)=>React.createElement(View,{key:`${component.key}-col-${i}`,style:styles.column},Array.isArray(col.components)?col.components.map(renderComponent):null))));}if(component.components&&component.components.length&&component.type!=='wizard'){const children=component.components.map(renderComponent).filter(Boolean);if(children.length===0)return null;const displayText=component.title||component.label;const shouldShowLabel=displayText&&!component.hideLabel;return React.createElement(View,{key:component.key,style:styles.container},shouldShowLabel?React.createElement(Text,{style:[styles.containerLabel,{textAlign:isRTL?'right':'left'}]},translate(displayText,displayText)):null,children);}if(component.input===false)return null;switch(component.type){case'date':case'datetime':case'time':return React.createElement(DatePicker,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'file':return React.createElement(FileUpload,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'datagrid':return React.createElement(DataGrid,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'editgrid':return React.createElement(EditGrid,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'select':{return React.createElement(ResourceSelect,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});}case'PlatformFileInput':return React.createElement(FileUpload,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});}return React.createElement(FormioField,{key:component.key,component:component,value:formData[component.key],onChange:handleFieldChange,error:getFieldError(component.key)});};return React.createElement(ScrollView,{style:[styles.form,{direction:isRTL?'rtl':'ltr'}]},form.components.map((c,index)=>React.createElement(React.Fragment,{key:c.key||index},renderComponent(c))));};const styles=StyleSheet.create({form:{flex:1,padding:16,backgroundColor:'#f5f5f5'},title:{fontSize:24,fontWeight:'bold',marginBottom:24,textAlign:'center',color:'#333'},container:{marginBottom:16},columnsContainer:{marginBottom:16},columnsRow:{flexDirection:'row',gap:12},column:{flex:1},containerLabel:{fontSize:18,fontWeight:'600',marginBottom:12,color:'#333'},submitButton:{backgroundColor:'#007bff',padding:16,borderRadius:8,alignItems:'center',marginTop:24},submitButtonText:{color:'#fff',fontSize:16,fontWeight:'600'}});
|
|
2
2
|
//# sourceMappingURL=FormioForm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{createContext,useContext,useState,useCallback}from'react';import{I18nProvider}from'../i18n/I18nContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS}from'../components/renderers';const FormioContext=createContext(undefined);export const useFormioContext=()=>{const context=useContext(FormioContext);return context;};export const useRegistry=()=>{const context=useContext(FormioContext);return context==null?void 0:context.registry;};const defaultTheme={colors:{primary:'#007AFF',secondary:'#5856D6',error:'#FF3B30',success:'#34C759',warning:'#FF9500',info:'#5AC8FA',background:'#FFFFFF',surface:'#F2F2F7',text:'#000000',textSecondary:'#8E8E93',border:'#C7C7CC',borderFocus:'#007AFF',disabled:'#F2F2F7',placeholder:'#C7C7CC'},spacing:{xs:4,sm:8,md:16,lg:24,xl:32},typography:{fontSize:{xs:12,sm:14,md:16,lg:18,xl:20},fontWeight:{light:'300',normal:'400',medium:'500',bold:'600'},lineHeight:{tight:1.2,normal:1.4,relaxed:1.6}},borderRadius:{none:0,sm:4,md:8,lg:12,full:9999},components:{input:{borderRadius:8,borderWidth:1,padding:12,fontSize:16,minHeight:44},label:{fontSize:16,fontWeight:'500',marginBottom:8},error:{fontSize:14,marginTop:4},button:{borderRadius:8,padding:12,fontSize:16,fontWeight:'600',minHeight:44},container:{padding:16,marginBottom:16}}};const getNestedValue=(obj,path,fallback)=>{var _path$split$reduce;return(_path$split$reduce=path.split('.').reduce((current,key)=>current==null?void 0:current[key],obj))!=null?_path$split$reduce:fallback;};const mergeTheme=(base,override)=>{var _base$typography,_override$typography,_base$typography2,_override$typography2,_base$typography3,_override$typography3,_base$components,_override$components,_base$components2,_override$components2,_base$components3,_override$components3,_base$components4,_override$components4,_base$components5,_override$components5;if(!override)return base;return{colors:{...base.colors,...override.colors},spacing:{...base.spacing,...override.spacing},typography:{...base.typography,...override.typography,fontSize:{...((_base$typography=base.typography)==null?void 0:_base$typography.fontSize),...((_override$typography=override.typography)==null?void 0:_override$typography.fontSize)},fontWeight:{...((_base$typography2=base.typography)==null?void 0:_base$typography2.fontWeight),...((_override$typography2=override.typography)==null?void 0:_override$typography2.fontWeight)},lineHeight:{...((_base$typography3=base.typography)==null?void 0:_base$typography3.lineHeight),...((_override$typography3=override.typography)==null?void 0:_override$typography3.lineHeight)}},borderRadius:{...base.borderRadius,...override.borderRadius},shadows:{...base.shadows,...override.shadows},components:{...base.components,...override.components,input:{...((_base$components=base.components)==null?void 0:_base$components.input),...((_override$components=override.components)==null?void 0:_override$components.input)},label:{...((_base$components2=base.components)==null?void 0:_base$components2.label),...((_override$components2=override.components)==null?void 0:_override$components2.label)},error:{...((_base$components3=base.components)==null?void 0:_base$components3.error),...((_override$components3=override.components)==null?void 0:_override$components3.error)},button:{...((_base$components4=base.components)==null?void 0:_base$components4.button),...((_override$components4=override.components)==null?void 0:_override$components4.button)},container:{...((_base$components5=base.components)==null?void 0:_base$components5.container),...((_override$components5=override.components)==null?void 0:_override$components5.container)}}};};export const FormioProvider=({children,components:initialComponents,theme:userTheme,i18n})=>{const[componentOverrides,setComponentOverrides]=useState(initialComponents||{});const theme=mergeTheme(defaultTheme,userTheme);const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);if(initialComponents){Object.entries(initialComponents).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,
|
|
1
|
+
import React,{createContext,useContext,useState,useCallback}from'react';import{I18nProvider}from'../i18n/I18nContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS}from'../components/renderers';const FormioContext=createContext(undefined);export const useFormioContext=()=>{const context=useContext(FormioContext);return context;};export const useRegistry=()=>{const context=useContext(FormioContext);return context==null?void 0:context.registry;};const defaultTheme={colors:{primary:'#007AFF',secondary:'#5856D6',error:'#FF3B30',success:'#34C759',warning:'#FF9500',info:'#5AC8FA',background:'#FFFFFF',surface:'#F2F2F7',text:'#000000',textSecondary:'#8E8E93',border:'#C7C7CC',borderFocus:'#007AFF',disabled:'#F2F2F7',placeholder:'#C7C7CC'},spacing:{xs:4,sm:8,md:16,lg:24,xl:32},typography:{fontSize:{xs:12,sm:14,md:16,lg:18,xl:20},fontWeight:{light:'300',normal:'400',medium:'500',bold:'600'},lineHeight:{tight:1.2,normal:1.4,relaxed:1.6}},borderRadius:{none:0,sm:4,md:8,lg:12,full:9999},components:{input:{borderRadius:8,borderWidth:1,padding:12,fontSize:16,minHeight:44},label:{fontSize:16,fontWeight:'500',marginBottom:8},error:{fontSize:14,marginTop:4},button:{borderRadius:8,padding:12,fontSize:16,fontWeight:'600',minHeight:44},container:{padding:16,marginBottom:16}}};const getNestedValue=(obj,path,fallback)=>{var _path$split$reduce;return(_path$split$reduce=path.split('.').reduce((current,key)=>current==null?void 0:current[key],obj))!=null?_path$split$reduce:fallback;};const mergeTheme=(base,override)=>{var _base$typography,_override$typography,_base$typography2,_override$typography2,_base$typography3,_override$typography3,_base$components,_override$components,_base$components2,_override$components2,_base$components3,_override$components3,_base$components4,_override$components4,_base$components5,_override$components5;if(!override)return base;return{colors:{...base.colors,...override.colors},spacing:{...base.spacing,...override.spacing},typography:{...base.typography,...override.typography,fontSize:{...((_base$typography=base.typography)==null?void 0:_base$typography.fontSize),...((_override$typography=override.typography)==null?void 0:_override$typography.fontSize)},fontWeight:{...((_base$typography2=base.typography)==null?void 0:_base$typography2.fontWeight),...((_override$typography2=override.typography)==null?void 0:_override$typography2.fontWeight)},lineHeight:{...((_base$typography3=base.typography)==null?void 0:_base$typography3.lineHeight),...((_override$typography3=override.typography)==null?void 0:_override$typography3.lineHeight)}},borderRadius:{...base.borderRadius,...override.borderRadius},shadows:{...base.shadows,...override.shadows},components:{...base.components,...override.components,input:{...((_base$components=base.components)==null?void 0:_base$components.input),...((_override$components=override.components)==null?void 0:_override$components.input)},label:{...((_base$components2=base.components)==null?void 0:_base$components2.label),...((_override$components2=override.components)==null?void 0:_override$components2.label)},error:{...((_base$components3=base.components)==null?void 0:_base$components3.error),...((_override$components3=override.components)==null?void 0:_override$components3.error)},button:{...((_base$components4=base.components)==null?void 0:_base$components4.button),...((_override$components4=override.components)==null?void 0:_override$components4.button)},container:{...((_base$components5=base.components)==null?void 0:_base$components5.container),...((_override$components5=override.components)==null?void 0:_override$components5.container)}}};};export const FormioProvider=({children,components:initialComponents,theme:userTheme,i18n})=>{const[componentOverrides,setComponentOverrides]=useState(initialComponents||{});const theme=mergeTheme(defaultTheme,userTheme);const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);if(initialComponents){Object.entries(initialComponents).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,override);}});}return reg;},[]);const registerComponent=useCallback((type,renderer)=>{setComponentOverrides(prev=>({...prev,[type]:renderer}));if(registry){registry.register(type,renderer);}},[registry]);const getThemeValue=useCallback((path,fallback)=>getNestedValue(theme,path,fallback),[theme]);const value={componentOverrides,theme,registerComponent,getThemeValue,registry};return React.createElement(FormioContext.Provider,{value:value},React.createElement(I18nProvider,{config:i18n},children));};
|
|
2
2
|
//# sourceMappingURL=FormioContext.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from'react';import{View,Text,StyleSheet}from'react-native';import{useTheme}from'../hooks/useTheme';import{useI18n}from'../i18n/I18nContext';import{useFormioContext}from'../context/FormioContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS,FallbackRenderer}from'../components/renderers';let Picker=null;try{Picker=require('@react-native-picker/picker').Picker;}catch(e){Picker=null;}const getOptions=component=>{const ds=component.data;if(!ds)return[];if(ds.values)return ds.values;if(ds.json&&Array.isArray(ds.json))return ds.json;return[];};export const FormioField=({component,value,onChange,error})=>{
|
|
1
|
+
import React from'react';import{View,Text,StyleSheet}from'react-native';import{useTheme}from'../hooks/useTheme';import{useI18n}from'../i18n/I18nContext';import{useFormioContext}from'../context/FormioContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS,FallbackRenderer}from'../components/renderers';let Picker=null;try{Picker=require('@react-native-picker/picker').Picker;}catch(e){Picker=null;}const getOptions=component=>{const ds=component.data;if(!ds)return[];if(ds.values)return ds.values;if(ds.json&&Array.isArray(ds.json))return ds.json;return[];};export const FormioField=({component,value,onChange,error})=>{const{type,key,label,placeholder,required,disabled}=component;const{createStyles,getColor,getComponent}=useTheme();const{translate,isRTL}=useI18n();const formioContext=useFormioContext();const translatedLabel=translate(label||'',label);const translatedPlaceholder=translate(placeholder||'',placeholder);const translatedError=translate(error||'',error);const themedStyles=createStyles(theme=>({fieldContainer:{marginBottom:getComponent('container.marginBottom',16)},label:{fontSize:getComponent('label.fontSize',16),fontWeight:getComponent('label.fontWeight','500'),marginBottom:getComponent('label.marginBottom',8),color:getComponent('label.color')||getColor('text','#333'),textAlign:isRTL?'right':'left',width:'100%'},input:{borderWidth:getComponent('input.borderWidth',1),borderColor:error?getColor('error','#e74c3c'):getColor('border','#ddd'),borderRadius:getComponent('input.borderRadius',8),padding:getComponent('input.padding',12),fontSize:getComponent('input.fontSize',16),minHeight:getComponent('input.minHeight',44),backgroundColor:disabled?getColor('disabled','#f0f0f0'):getColor('background','#fff'),textAlign:isRTL?'right':'left',writingDirection:isRTL?'rtl':'ltr'},errorText:{color:getColor('error','#e74c3c'),fontSize:getComponent('error.fontSize',14),marginTop:getComponent('error.marginTop',4)}}));const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);const overrides=formioContext==null?void 0:formioContext.componentOverrides;if(overrides){Object.entries(overrides).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,override);}});}return reg;},[formioContext==null?void 0:formioContext.componentOverrides]);const renderField=()=>{const renderer=registry.get(type);if(renderer){return React.createElement(React.Fragment,null,renderer({component,value,onChange:val=>onChange(key,val),error:translatedError,disabled,readOnly:!!component.readOnly}));}return React.createElement(FallbackRenderer,{component:component,value:value,onChange:v=>onChange(key,v),error:translatedError,disabled:disabled});};if(component.input===false)return null;if(type==='checkbox'){return renderField();}return React.createElement(View,{style:themedStyles.fieldContainer},translatedLabel&&React.createElement(Text,{style:[themedStyles.label]},translatedLabel,required&&React.createElement(Text,{style:[themedStyles.required,{color:getColor('error')}]}," *")),renderField(),component.description?React.createElement(Text,{style:[themedStyles.description,{color:getColor('textSecondary'),textAlign:isRTL?'right':'left'}]},translate(component.description,component.description)):null,translatedError&&React.createElement(Text,{style:themedStyles.errorText},translatedError));};const styles=StyleSheet.create({fieldContainer:{marginBottom:16},label:{fontSize:16,fontWeight:'500',marginBottom:8,color:'#333'},required:{color:'#e74c3c'},input:{borderWidth:1,borderColor:'#ddd',borderRadius:8,padding:12,fontSize:16,backgroundColor:'#fff'},disabled:{backgroundColor:'#f0f0f0',color:'#999'},textarea:{height:100,textAlignVertical:'top'},selectPlaceholder:{padding:12,fontSize:16,color:'#999',fontStyle:'italic'},inputError:{borderColor:'#e74c3c'},description:{color:'#666',fontSize:13,marginTop:4},errorText:{color:'#e74c3c',fontSize:14,marginTop:4},pickerWrapper:{borderWidth:1,borderColor:'#ddd',borderRadius:8,overflow:'hidden',backgroundColor:'#fff'},radioGroup:{gap:8},radioItem:{fontSize:16,paddingVertical:6},switchRow:{flexDirection:'row',alignItems:'center',gap:8},switchLabel:{fontSize:16}});
|
|
2
2
|
//# sourceMappingURL=FormioField.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{useState,useEffect}from'react';import{ScrollView,View,Text,TouchableOpacity,StyleSheet}from'react-native';import{useI18n}from'../i18n/I18nContext';import{FormioField}from'./FormioField';import{DatePicker}from'./DatePicker';import{FileUpload}from'./FileUpload';import{ResourceSelect}from'./ResourceSelect';import{DataGrid}from'./DataGrid';import{EditGrid}from'./EditGrid';import{Wizard}from'./Wizard';import{validateForm}from'../validation';import{useFormioContext}from'../context/FormioContext';import{safeEvalConditional,safeEvalValue}from'../utils';const traverseComponents=(components,cb)=>{const walk=comp=>{cb(comp);if(comp.components)comp.components.forEach(walk);if(comp.type==='columns'&&Array.isArray(comp.columns)){comp.columns.forEach(col=>{if(Array.isArray(col.components))col.components.forEach(walk);});}};components.forEach(walk);};const flatten=components=>{const out=[];traverseComponents(components,c=>out.push(c));return out;};const initDefaults=(components,data)=>{const flat=flatten(components);const next={...data};for(const c of flat){if(c.input!==false&&c.key&&next[c.key]===undefined){if(c.defaultValue!==undefined)next[c.key]=c.defaultValue;}}return next;};const isHidden=(component,data)=>{if(component.hidden)return true;const value=data[component.key];if(component.customConditional){const res=safeEvalConditional(component.customConditional,{data,value,row:data,util:{}});return!res;}if(component.conditional&&component.conditional.when){const whenVal=data[component.conditional.when];const eq=component.conditional.eq;const show=component.conditional.show!==false;const match=whenVal===eq;return show?!match:match;}return false;};const applyCalculations=(components,data)=>{const flat=flatten(components);let changed=true;let guard=0;let next={...data};while(changed&&guard<5){changed=false;guard++;for(const c of flat){if(c.calculateValue){const current=next[c.key];const calc=safeEvalValue(c.calculateValue,{data:next,value:current,row:next,util:{}});if(calc!==undefined&&calc!==current){next={...next,[c.key]:calc};changed=true;}}}}return next;};export const FormioForm=({form,data:initialData={},options,components:propComponents,onSubmit,onChange,onValidation})=>{const context=useFormioContext();const{translate,isRTL}=useI18n();const componentOverrides={...(context==null?void 0:context.componentOverrides),...propComponents};const theme=context==null?void 0:context.theme;const[formData,setFormData]=useState(initialData);const[errors,setErrors]=useState([]);if(form.display==='wizard'){return React.createElement(ScrollView,{style:styles.form},form.title&&React.createElement(Text,{style:styles.title},form.title),React.createElement(Wizard,{form:form,component:{type:'wizard',key:'wizard',pages:form.components},data:formData,setData:setFormData,errors:errors,onValidation:setErrors,onFinish:()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}}}));}useEffect(()=>{let next=initDefaults(form.components,initialData);next=applyCalculations(form.components,next);setFormData(next);const validationErrors=validateForm(form.components,next,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[form]);useEffect(()=>{const validationErrors=validateForm(form.components,formData,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[formData]);const handleFieldChange=(key,value)=>{let next={...formData,[key]:value};next=applyCalculations(form.components,next);setFormData(next);onChange==null||onChange(next);};const handleSubmit=()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}};const getFieldError=key=>{var _errors$find;return(_errors$find=errors.find(e=>e.field===key))==null?void 0:_errors$find.message;};const renderComponent=component=>{if(isHidden(component,formData))return null;const customRenderer=(componentOverrides==null?void 0:componentOverrides[component.type])||(componentOverrides==null?void 0:componentOverrides[component.key]);if(customRenderer){return customRenderer(component,
|
|
1
|
+
import React,{useState,useEffect}from'react';import{ScrollView,View,Text,TouchableOpacity,StyleSheet}from'react-native';import{useI18n}from'../i18n/I18nContext';import{FormioField}from'./FormioField';import{DatePicker}from'./DatePicker';import{FileUpload}from'./FileUpload';import{ResourceSelect}from'./ResourceSelect';import{DataGrid}from'./DataGrid';import{EditGrid}from'./EditGrid';import{Wizard}from'./Wizard';import{validateForm}from'../validation';import{useFormioContext}from'../context/FormioContext';import{safeEvalConditional,safeEvalValue}from'../utils';const traverseComponents=(components,cb)=>{const walk=comp=>{cb(comp);if(comp.components)comp.components.forEach(walk);if(comp.type==='columns'&&Array.isArray(comp.columns)){comp.columns.forEach(col=>{if(Array.isArray(col.components))col.components.forEach(walk);});}};components.forEach(walk);};const flatten=components=>{const out=[];traverseComponents(components,c=>out.push(c));return out;};const initDefaults=(components,data)=>{const flat=flatten(components);const next={...data};for(const c of flat){if(c.input!==false&&c.key&&next[c.key]===undefined){if(c.defaultValue!==undefined)next[c.key]=c.defaultValue;}}return next;};const isHidden=(component,data)=>{if(component.hidden)return true;const value=data[component.key];if(component.customConditional){const res=safeEvalConditional(component.customConditional,{data,value,row:data,util:{}});return!res;}if(component.conditional&&component.conditional.when){const whenVal=data[component.conditional.when];const eq=component.conditional.eq;const show=component.conditional.show!==false;const match=whenVal===eq;return show?!match:match;}return false;};const applyCalculations=(components,data)=>{const flat=flatten(components);let changed=true;let guard=0;let next={...data};while(changed&&guard<5){changed=false;guard++;for(const c of flat){if(c.calculateValue){const current=next[c.key];const calc=safeEvalValue(c.calculateValue,{data:next,value:current,row:next,util:{}});if(calc!==undefined&&calc!==current){next={...next,[c.key]:calc};changed=true;}}}}return next;};export const FormioForm=({form,data:initialData={},options,components:propComponents,onSubmit,onChange,onValidation})=>{const context=useFormioContext();const{translate,isRTL}=useI18n();const componentOverrides={...(context==null?void 0:context.componentOverrides),...propComponents};const theme=context==null?void 0:context.theme;const[formData,setFormData]=useState(initialData);const[errors,setErrors]=useState([]);if(form.display==='wizard'){return React.createElement(ScrollView,{style:styles.form},form.title&&React.createElement(Text,{style:styles.title},form.title),React.createElement(Wizard,{form:form,component:{type:'wizard',key:'wizard',pages:form.components},data:formData,setData:setFormData,errors:errors,onValidation:setErrors,onFinish:()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}}}));}useEffect(()=>{let next=initDefaults(form.components,initialData);next=applyCalculations(form.components,next);setFormData(next);const validationErrors=validateForm(form.components,next,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[form]);useEffect(()=>{const validationErrors=validateForm(form.components,formData,{translate});setErrors(validationErrors);onValidation==null||onValidation(validationErrors);},[formData]);const handleFieldChange=(key,value)=>{let next={...formData,[key]:value};next=applyCalculations(form.components,next);setFormData(next);onChange==null||onChange(next);};const handleSubmit=()=>{const validationErrors=validateForm(form.components,formData,{translate});if(validationErrors.length===0){onSubmit==null||onSubmit(formData);}else{setErrors(validationErrors);}};const getFieldError=key=>{var _errors$find;return(_errors$find=errors.find(e=>e.field===key))==null?void 0:_errors$find.message;};const renderComponent=component=>{if(isHidden(component,formData))return null;const customRenderer=(componentOverrides==null?void 0:componentOverrides[component.type])||(componentOverrides==null?void 0:componentOverrides[component.key]);if(customRenderer){return customRenderer({component,value:formData[component.key],onChange:value=>handleFieldChange(component.key,value),error:getFieldError(component.key),disabled:component.disabled||false,readOnly:(options==null?void 0:options.readOnly)||false,formData});}if(component.type==='button'&&component.key==='submit'){var _theme$colors;return React.createElement(TouchableOpacity,{key:component.key,style:[styles.submitButton,(theme==null||(_theme$colors=theme.colors)==null?void 0:_theme$colors.primary)&&{backgroundColor:theme.colors.primary}],onPress:handleSubmit},React.createElement(Text,{style:styles.submitButtonText},translate(component.label||'Submit',component.label||'Submit')));}if(component.type==='wizard'||form.display==='wizard'){const wizardPages=component.pages||form.components||[];return React.createElement(Wizard,{key:component.key||'wizard',form:form,component:{...component,pages:wizardPages,type:'wizard'},data:formData,setData:d=>setFormData(d),errors:errors,onFinish:handleSubmit});}if(component.type==='columns'&&Array.isArray(component.columns)){const cols=component.columns;const shouldShowLabel=component.label&&!component.hideLabel;return React.createElement(View,{key:component.key,style:styles.columnsContainer},shouldShowLabel?React.createElement(Text,{style:[styles.containerLabel,{textAlign:isRTL?'right':'left'}]},translate(component.label,component.label)):null,React.createElement(View,{style:styles.columnsRow},cols.map((col,i)=>React.createElement(View,{key:`${component.key}-col-${i}`,style:styles.column},Array.isArray(col.components)?col.components.map(renderComponent):null))));}if(component.components&&component.components.length&&component.type!=='wizard'){const children=component.components.map(renderComponent).filter(Boolean);if(children.length===0)return null;const displayText=component.title||component.label;const shouldShowLabel=displayText&&!component.hideLabel;return React.createElement(View,{key:component.key,style:styles.container},shouldShowLabel?React.createElement(Text,{style:[styles.containerLabel,{textAlign:isRTL?'right':'left'}]},translate(displayText,displayText)):null,children);}if(component.input===false)return null;switch(component.type){case'date':case'datetime':case'time':return React.createElement(DatePicker,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'file':return React.createElement(FileUpload,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'datagrid':return React.createElement(DataGrid,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'editgrid':return React.createElement(EditGrid,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});case'select':{return React.createElement(ResourceSelect,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});}case'PlatformFileInput':return React.createElement(FileUpload,{key:component.key,component:component,value:formData[component.key],onChange:val=>handleFieldChange(component.key,val),error:getFieldError(component.key),disabled:component.disabled,readOnly:options==null?void 0:options.readOnly});}return React.createElement(FormioField,{key:component.key,component:component,value:formData[component.key],onChange:handleFieldChange,error:getFieldError(component.key)});};return React.createElement(ScrollView,{style:[styles.form,{direction:isRTL?'rtl':'ltr'}]},form.components.map((c,index)=>React.createElement(React.Fragment,{key:c.key||index},renderComponent(c))));};const styles=StyleSheet.create({form:{flex:1,padding:16,backgroundColor:'#f5f5f5'},title:{fontSize:24,fontWeight:'bold',marginBottom:24,textAlign:'center',color:'#333'},container:{marginBottom:16},columnsContainer:{marginBottom:16},columnsRow:{flexDirection:'row',gap:12},column:{flex:1},containerLabel:{fontSize:18,fontWeight:'600',marginBottom:12,color:'#333'},submitButton:{backgroundColor:'#007bff',padding:16,borderRadius:8,alignItems:'center',marginTop:24},submitButtonText:{color:'#fff',fontSize:16,fontWeight:'600'}});
|
|
2
2
|
//# sourceMappingURL=FormioForm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{createContext,useContext,useState,useCallback}from'react';import{I18nProvider}from'../i18n/I18nContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS}from'../components/renderers';const FormioContext=createContext(undefined);export const useFormioContext=()=>{const context=useContext(FormioContext);return context;};export const useRegistry=()=>{const context=useContext(FormioContext);return context==null?void 0:context.registry;};const defaultTheme={colors:{primary:'#007AFF',secondary:'#5856D6',error:'#FF3B30',success:'#34C759',warning:'#FF9500',info:'#5AC8FA',background:'#FFFFFF',surface:'#F2F2F7',text:'#000000',textSecondary:'#8E8E93',border:'#C7C7CC',borderFocus:'#007AFF',disabled:'#F2F2F7',placeholder:'#C7C7CC'},spacing:{xs:4,sm:8,md:16,lg:24,xl:32},typography:{fontSize:{xs:12,sm:14,md:16,lg:18,xl:20},fontWeight:{light:'300',normal:'400',medium:'500',bold:'600'},lineHeight:{tight:1.2,normal:1.4,relaxed:1.6}},borderRadius:{none:0,sm:4,md:8,lg:12,full:9999},components:{input:{borderRadius:8,borderWidth:1,padding:12,fontSize:16,minHeight:44},label:{fontSize:16,fontWeight:'500',marginBottom:8},error:{fontSize:14,marginTop:4},button:{borderRadius:8,padding:12,fontSize:16,fontWeight:'600',minHeight:44},container:{padding:16,marginBottom:16}}};const getNestedValue=(obj,path,fallback)=>{var _path$split$reduce;return(_path$split$reduce=path.split('.').reduce((current,key)=>current==null?void 0:current[key],obj))!=null?_path$split$reduce:fallback;};const mergeTheme=(base,override)=>{var _base$typography,_override$typography,_base$typography2,_override$typography2,_base$typography3,_override$typography3,_base$components,_override$components,_base$components2,_override$components2,_base$components3,_override$components3,_base$components4,_override$components4,_base$components5,_override$components5;if(!override)return base;return{colors:{...base.colors,...override.colors},spacing:{...base.spacing,...override.spacing},typography:{...base.typography,...override.typography,fontSize:{...((_base$typography=base.typography)==null?void 0:_base$typography.fontSize),...((_override$typography=override.typography)==null?void 0:_override$typography.fontSize)},fontWeight:{...((_base$typography2=base.typography)==null?void 0:_base$typography2.fontWeight),...((_override$typography2=override.typography)==null?void 0:_override$typography2.fontWeight)},lineHeight:{...((_base$typography3=base.typography)==null?void 0:_base$typography3.lineHeight),...((_override$typography3=override.typography)==null?void 0:_override$typography3.lineHeight)}},borderRadius:{...base.borderRadius,...override.borderRadius},shadows:{...base.shadows,...override.shadows},components:{...base.components,...override.components,input:{...((_base$components=base.components)==null?void 0:_base$components.input),...((_override$components=override.components)==null?void 0:_override$components.input)},label:{...((_base$components2=base.components)==null?void 0:_base$components2.label),...((_override$components2=override.components)==null?void 0:_override$components2.label)},error:{...((_base$components3=base.components)==null?void 0:_base$components3.error),...((_override$components3=override.components)==null?void 0:_override$components3.error)},button:{...((_base$components4=base.components)==null?void 0:_base$components4.button),...((_override$components4=override.components)==null?void 0:_override$components4.button)},container:{...((_base$components5=base.components)==null?void 0:_base$components5.container),...((_override$components5=override.components)==null?void 0:_override$components5.container)}}};};export const FormioProvider=({children,components:initialComponents,theme:userTheme,i18n})=>{const[componentOverrides,setComponentOverrides]=useState(initialComponents||{});const theme=mergeTheme(defaultTheme,userTheme);const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);if(initialComponents){Object.entries(initialComponents).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,
|
|
1
|
+
import React,{createContext,useContext,useState,useCallback}from'react';import{I18nProvider}from'../i18n/I18nContext';import{createRegistryWithComponents}from'../registry';import{DEFAULT_RENDERERS}from'../components/renderers';const FormioContext=createContext(undefined);export const useFormioContext=()=>{const context=useContext(FormioContext);return context;};export const useRegistry=()=>{const context=useContext(FormioContext);return context==null?void 0:context.registry;};const defaultTheme={colors:{primary:'#007AFF',secondary:'#5856D6',error:'#FF3B30',success:'#34C759',warning:'#FF9500',info:'#5AC8FA',background:'#FFFFFF',surface:'#F2F2F7',text:'#000000',textSecondary:'#8E8E93',border:'#C7C7CC',borderFocus:'#007AFF',disabled:'#F2F2F7',placeholder:'#C7C7CC'},spacing:{xs:4,sm:8,md:16,lg:24,xl:32},typography:{fontSize:{xs:12,sm:14,md:16,lg:18,xl:20},fontWeight:{light:'300',normal:'400',medium:'500',bold:'600'},lineHeight:{tight:1.2,normal:1.4,relaxed:1.6}},borderRadius:{none:0,sm:4,md:8,lg:12,full:9999},components:{input:{borderRadius:8,borderWidth:1,padding:12,fontSize:16,minHeight:44},label:{fontSize:16,fontWeight:'500',marginBottom:8},error:{fontSize:14,marginTop:4},button:{borderRadius:8,padding:12,fontSize:16,fontWeight:'600',minHeight:44},container:{padding:16,marginBottom:16}}};const getNestedValue=(obj,path,fallback)=>{var _path$split$reduce;return(_path$split$reduce=path.split('.').reduce((current,key)=>current==null?void 0:current[key],obj))!=null?_path$split$reduce:fallback;};const mergeTheme=(base,override)=>{var _base$typography,_override$typography,_base$typography2,_override$typography2,_base$typography3,_override$typography3,_base$components,_override$components,_base$components2,_override$components2,_base$components3,_override$components3,_base$components4,_override$components4,_base$components5,_override$components5;if(!override)return base;return{colors:{...base.colors,...override.colors},spacing:{...base.spacing,...override.spacing},typography:{...base.typography,...override.typography,fontSize:{...((_base$typography=base.typography)==null?void 0:_base$typography.fontSize),...((_override$typography=override.typography)==null?void 0:_override$typography.fontSize)},fontWeight:{...((_base$typography2=base.typography)==null?void 0:_base$typography2.fontWeight),...((_override$typography2=override.typography)==null?void 0:_override$typography2.fontWeight)},lineHeight:{...((_base$typography3=base.typography)==null?void 0:_base$typography3.lineHeight),...((_override$typography3=override.typography)==null?void 0:_override$typography3.lineHeight)}},borderRadius:{...base.borderRadius,...override.borderRadius},shadows:{...base.shadows,...override.shadows},components:{...base.components,...override.components,input:{...((_base$components=base.components)==null?void 0:_base$components.input),...((_override$components=override.components)==null?void 0:_override$components.input)},label:{...((_base$components2=base.components)==null?void 0:_base$components2.label),...((_override$components2=override.components)==null?void 0:_override$components2.label)},error:{...((_base$components3=base.components)==null?void 0:_base$components3.error),...((_override$components3=override.components)==null?void 0:_override$components3.error)},button:{...((_base$components4=base.components)==null?void 0:_base$components4.button),...((_override$components4=override.components)==null?void 0:_override$components4.button)},container:{...((_base$components5=base.components)==null?void 0:_base$components5.container),...((_override$components5=override.components)==null?void 0:_override$components5.container)}}};};export const FormioProvider=({children,components:initialComponents,theme:userTheme,i18n})=>{const[componentOverrides,setComponentOverrides]=useState(initialComponents||{});const theme=mergeTheme(defaultTheme,userTheme);const registry=React.useMemo(()=>{const reg=createRegistryWithComponents(DEFAULT_RENDERERS);if(initialComponents){Object.entries(initialComponents).forEach(([t,override])=>{if(override&&typeof override==='function'){reg.register(t,override);}});}return reg;},[]);const registerComponent=useCallback((type,renderer)=>{setComponentOverrides(prev=>({...prev,[type]:renderer}));if(registry){registry.register(type,renderer);}},[registry]);const getThemeValue=useCallback((path,fallback)=>getNestedValue(theme,path,fallback),[theme]);const value={componentOverrides,theme,registerComponent,getThemeValue,registry};return React.createElement(FormioContext.Provider,{value:value},React.createElement(I18nProvider,{config:i18n},children));};
|
|
2
2
|
//# sourceMappingURL=FormioContext.js.map
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
|
-
import { FormioComponent } from '../types';
|
|
3
2
|
import { I18nConfig } from '../i18n/types';
|
|
4
|
-
import { ComponentRegistry } from '../registry';
|
|
5
|
-
export type ComponentRenderer = (component: FormioComponent, props: ComponentRenderProps) => ReactNode;
|
|
6
|
-
export interface ComponentRenderProps {
|
|
7
|
-
value: any;
|
|
8
|
-
onChange: (value: any) => void;
|
|
9
|
-
error?: string;
|
|
10
|
-
disabled?: boolean;
|
|
11
|
-
readOnly?: boolean;
|
|
12
|
-
formData?: Record<string, any>;
|
|
13
|
-
}
|
|
3
|
+
import { ComponentRegistry, ComponentRenderer } from '../registry';
|
|
14
4
|
export interface ComponentOverrides {
|
|
15
5
|
textfield?: ComponentRenderer;
|
|
16
6
|
number?: ComponentRenderer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "formio-react-native",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11-beta.1",
|
|
4
4
|
"description": "React Native renderer for Form.io forms",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -11,7 +11,13 @@
|
|
|
11
11
|
"build": "bob build && yarn build:cleanup",
|
|
12
12
|
"build:cleanup": "node scripts/cleanup.js",
|
|
13
13
|
"prepare": "bob build",
|
|
14
|
-
"prepack": "bob build"
|
|
14
|
+
"prepack": "bob build",
|
|
15
|
+
"version:beta": "npm version preminor --preid=beta",
|
|
16
|
+
"version:prerelease": "npm version prerelease",
|
|
17
|
+
"publish:beta": "npm publish --tag beta",
|
|
18
|
+
"publish:latest": "npm publish",
|
|
19
|
+
"release:beta": "npm run version:beta && npm run publish:beta",
|
|
20
|
+
"release:latest": "npm run publish:latest"
|
|
15
21
|
},
|
|
16
22
|
"keywords": [
|
|
17
23
|
"react-native",
|
|
@@ -77,7 +83,7 @@
|
|
|
77
83
|
]
|
|
78
84
|
]
|
|
79
85
|
},
|
|
80
|
-
|
|
86
|
+
"repository": {
|
|
81
87
|
"type": "git",
|
|
82
88
|
"url": "https://github.com/yassine-mrad/formio-react-native.git"
|
|
83
89
|
},
|