UNPKG

vue-formik

Version:
3 lines (2 loc) 18.9 kB
(function(E,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(E=typeof globalThis<"u"?globalThis:E||self,e(E.VueFormik={},E.Vue))})(this,function(E,e){"use strict";const P=t=>{const o=t.split(/[[\]]/g).filter(Boolean);if(!o.length)throw new Error(`Invalid path segment: ${t}`);const n=o[0],i=o.slice(1).map(d=>{const r=parseInt(d,10);if(isNaN(r))throw new Error(`Invalid array index: ${d}`);if(r<0)throw new Error(`Negative array index: ${r}`);return r});return{key:n,indices:i}};function V(t,o,n){if(t==null)return console.error("Cannot update null/undefined object"),t;if(typeof t!="object")return console.error("Target must be an object"),t;if(!o)return console.error("Path cannot be empty"),t;const i=o.split("."),d=Array.isArray(t)?[...t]:{...t};let r=d;for(let l=0;l<i.length;l++){const a=l===i.length-1,c=i[l],{key:f,indices:p}=P(c);if(!f)throw new Error(`Invalid path segment: ${c}`);let s=r,u=f;for(let y=0;y<p.length;y++){const b=p[y],g=l<i.length-1,h=y<p.length-1,$=g||h;Array.isArray(s[u])||(s[u]=[]);const B=[...s[u]];if(b>=B.length){const k=$?{}:void 0,C=Array(b-B.length+1).fill(k);B.push(...C)}B[b]===void 0&&$&&(B[b]={}),s[u]=B,s=B,u=b}if(a)s[u]=n;else{const y=i[l+1],b=P(y).indices.length>0;s[u]===void 0||s[u]===null?s[u]=b?[]:{}:typeof s[u]!="object"&&(s[u]=b?[]:{}),s[u]=Array.isArray(s[u])?[...s[u]]:{...s[u]},r=s[u]}}return Object.assign(t,d),d}function w(t,o){if(t==null||typeof t!="object")return;let n=t;const i=o.split(".");for(const d of i){let r;try{if(r=P(d),!r.key)return}catch{return}if(n=n[r.key],n==null)return;for(const l of r.indices)if(!Array.isArray(n)||l<0||l>=n.length||(n=n[l],n==null))return}return n}function A(t,o={}){if(!t||typeof t!="object")return;const{preservePrototype:n=!0,deep:i=!0,preserveEmpty:d=!1,exclude:r=new Set}=o;if(t instanceof Map||t instanceof Set||t instanceof WeakMap||t instanceof WeakSet||a(t)||c(t)){T(t);return}const l=s=>r.has(s);function a(s){return typeof window<"u"&&s&&typeof s=="object"&&"nodeType"in s}function c(s){return!!s&&("__v_isRef"in s||"__v_isReactive"in s)}function f(s){return s instanceof Map||s instanceof Set||s instanceof WeakMap||s instanceof WeakSet||a(s)||c(s)}const p=(s,u="",y=new WeakSet)=>{if(!s||typeof s!="object"||y.has(s)||(y.add(s),Object.isFrozen(s)))return;const b=Object.getPrototypeOf(s),g=[...Object.getOwnPropertyNames(s),...Object.getOwnPropertySymbols(s)];for(const h of g){const $=u?`${u}.${String(h)}`:String(h);if(l($))continue;const B=Object.getOwnPropertyDescriptor(s,h);if(!(B!=null&&B.configurable))continue;const k=s[h];if(k&&typeof k=="object"){if(f(k)){T(k);continue}if(k===s){delete s[h];continue}if(Array.isArray(k)){d?k.length=0:delete s[h];continue}i&&(p(k,$,y),!d&&Object.keys(k).length===0&&delete s[h]);continue}try{delete s[h]}catch(C){console.warn(`Could not delete property ${String(h)}:`,C)}}n&&Object.setPrototypeOf(s,b)};try{p(t)}catch(s){console.warn("Error during object clearing:",s)}}const U={Map:t=>t.clear(),Set:t=>t.clear()};function T(t){const o=U[t.constructor.name];o==null||o(t)}const S=t=>{if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(n=>S(n));const o={};for(const n in t)t.hasOwnProperty(n)&&(o[n]=S(t[n]));return o},O=(t,o=!1)=>`${t}${o?" *":""}`,X=(t,o)=>{var i;const n={};try{o.validateSync(t,{abortEarly:!1})}catch(d){const r=d;(i=r==null?void 0:r.inner)!=null&&i.length&&r.inner.forEach(({path:l,message:a})=>{V(n,l,a)})}return n},K=(t,o)=>{var d;const n={},{error:i}=o.validate(t,{abortEarly:!1});if(i){const r=i;(d=r==null?void 0:r.details)!=null&&d.length&&r.details.forEach(({context:l,message:a})=>{V(n,l.label,a)})}return n},R=t=>{let o="";return t.forEach((n,i)=>{o+=typeof n=="number"?`[${n}]`:i===0?n:`.${n}`}),o},v=(t,o)=>{const n={},i=o.safeParse(t);return i.success||i.error.errors.forEach(({path:d,message:r})=>{V(n,R(d),r)}),n},M=t=>typeof t=="function",_=t=>typeof t=="function",L=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),x=(t,o)=>{if(_(o))return o(t);const n={},i=(r,l,a)=>{const c=w(t,l),f=r(c,t);f!=null&&V(a,l,f)},d=(r,l,a)=>{Object.entries(r).forEach(([c,f])=>{const p=l?`${l}.${c}`:c;M(f)?i(f,p,a):L(f)&&d(f,p,a)})};return Object.entries(o).forEach(([r,l])=>{M(l)?i(l,r,n):L(l)&&d(l,r,n)}),n};class W extends TypeError{constructor(o,n){let i;const{message:d,explanation:r,...l}=o,{path:a}=o,c=a.length===0?d:`At path: ${a.join(".")} -- ${d}`;super(r??c),r!=null&&(this.cause=c),Object.assign(this,l),this.name=this.constructor.name,this.failures=()=>i??(i=[o,...n()])}}function ee(t){return typeof t=="object"&&t!=null}function re(t){const{done:o,value:n}=t.next();return o?void 0:n}function*z(t,o,n={}){const{path:i=[],branch:d=[t],coerce:r=!1,mask:l=!1}=n,a={path:i,branch:d,mask:l};r&&(t=o.coercer(t,a));let c="valid";for(const f of o.validator(t,a))f.explanation=n.message,c="not_valid",yield[f,void 0];for(let[f,p,s]of o.entries(t,a)){const u=z(p,s,{path:f===void 0?i:[...i,f],branch:f===void 0?d:[...d,p],coerce:r,mask:l,message:n.message});for(const y of u)y[0]?(c=y[0].refinement!=null?"not_refined":"not_valid",yield[y[0],void 0]):r&&(p=y[1],f===void 0?t=p:t instanceof Map?t.set(f,p):t instanceof Set?t.add(p):ee(t)&&(p!==void 0||f in t)&&(t[f]=p))}if(c!=="not_valid")for(const f of o.refiner(t,a))f.explanation=n.message,c="not_refined",yield[f,void 0];c==="valid"&&(yield[void 0,t])}function ne(t,o,n){const i=te(t,o,{message:n});if(i[0])throw i[0]}function te(t,o,n={}){const i=z(t,o,n),d=re(i);return d[0]?[new W(d[0],function*(){for(const l of i)l[0]&&(yield l[0])}),void 0]:[void 0,d[1]]}const oe=(t,o)=>{const n={};try{ne(t,o)}catch(i){if(i instanceof W){const d=i.failures();console.log(d,"---");for(const r of d){const{path:l,message:a}=r;V(n,R(l),a)}}}return n},ae=(t,{yupSchema:o,joiSchema:n,zodSchema:i,structSchema:d,validationSchema:r})=>{let l={};return o?l=X(t,o):n?l=K(t,n):i?l=v(t,i):r?l=x(t,r):d&&(l=oe(t,d)),l},ie=({initialValues:t,validationSchema:o,yupSchema:n,zodSchema:i,joiSchema:d,structSchema:r,onSubmit:l,validateOnMount:a=!0,preventDefault:c=!0})=>{const f=e.ref(!1),p=e.ref(!1),s=e.ref(0),u=e.reactive(S(t)),y=()=>ae(e.toRaw(b),{yupSchema:n,joiSchema:d,zodSchema:i,validationSchema:o,structSchema:r}),b=e.reactive({...S(t)}),g=e.reactive({}),h=e.reactive({}),$=e.computed(()=>Object.keys(g).length===0),B=e.computed(()=>JSON.stringify(b)!==JSON.stringify(u)),k=m=>{Object.assign(b,m)},C=m=>{A(g),Object.assign(g,m)},H=m=>{A(h),Object.assign(h,m)},J=({values:m,keepTouched:F=!1}={})=>{m?(k(Object.assign(u,S(m))),Object.assign(u,S(m))):k(S(u)),F||A(h),s.value=0},I=(m,F)=>{V(b,m,F)},N=(m,F)=>{V(h,m,F)},j=m=>{f.value=m},Ie=m=>{if(typeof l=="function"){c&&m&&m.preventDefault(),s.value++,j(!0),p.value=!0;try{const F=y();C(F),Object.keys(F).length===0&&l(e.toRaw(b),{reset:J,setErrors:C,setValues:k,setSubmitting:j,setTouched:H,setFieldValue:I,setFieldTouched:N})}catch(F){console.error("Form submission error:",F)}finally{p.value=!1}}},Y=m=>{const F=m.target;N(F.name,!0)},Z=m=>{const F=m.target,D=F.type==="checkbox"?F.checked:F.value;I(F.name,D),N(F.name,!0)},G=()=>{p.value=!0;const m=y();A(g),Object.assign(g,m),p.value=!1};a&&G(),e.watch(()=>b,()=>{G()},{deep:!0});const Q=m=>{const F=w(g,m),D=w(h,m);return!!(F&&D)},je=m=>Q(m)?w(g,m):"",De=m=>w(b,m),Te=m=>w(h,m),Re=e.computed(()=>({onBlur:Y,onChange:Z}));return{values:b,errors:g,touched:h,isValid:$,isDirty:B,isSubmitting:f,isValidating:p,submitCount:s,fieldHandlers:Re,setValues:k,setErrors:C,setTouched:H,setFieldValue:I,setFieldTouched:N,setSubmitting:j,reset:J,handleSubmit:Ie,handleFieldBlur:Y,handleFieldChange:Z,hasFieldError:Q,getFieldError:je,getFieldValue:De,getFieldTouched:Te}};function le(t){return{push:(i,d,r)=>{const l=t.getFieldValue(i);if(!Array.isArray(l)){console.warn(`Field "${i}" is not an array`);return}if(!t.setFieldValue||typeof t.setFieldValue!="function"){console.warn("formik.setFieldValue is not a function or not available");return}const a=[...l];if(r===void 0)a.push(d);else{if(r<0||r>a.length){console.warn(`Index ${r} out of bounds for field "${i}"`);return}a.splice(r,0,d)}t.setFieldValue(i,a)},pop:(i,d)=>{const r=t.getFieldValue(i);if(!Array.isArray(r)){console.warn(`Field "${i}" is not an array`);return}if(r.length===0){console.warn(`Field "${i}" is an empty array`);return}const l=[...r];if(d===void 0)l.pop();else{if(d<0||d>=l.length){console.warn(`Index ${d} out of bounds for field "${i}"`);return}l.splice(d,1)}t.setFieldValue(i,l),d!==void 0&&t.setFieldTouched(`${i}[${d}]`)}}}function q(t){const o=e.inject("formik",null);return{formik:e.computed(()=>{const i=t||o;return i||(console.error("No Formik instance provided via injection or props"),null)}).value}}const se=["for","id"],de={class:"vf-input"},ce=["id","name","placeholder","value","readonly","disabled","rows","required","aria-labelledby","aria-describedby","aria-invalid","aria-required","aria-readonly","aria-disabled"],fe=["id"],ue=e.defineComponent({__name:"FormTextArea",props:{formik:{},name:{},label:{},placeholder:{},rows:{},readonly:{type:Boolean},disabled:{type:Boolean},required:{type:Boolean},inputProps:{}},setup(t){const o=t,{formik:n}=q(o.formik),i=e.computed(()=>n==null?void 0:n.getFieldValue(o.name)),d=r=>{const l=r.target.value;n==null||n.setFieldValue(o.name,l)};return(r,l)=>{var a,c,f,p,s,u;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"vf-field vf-textarea-field":!0,"vf-field--error":(a=e.unref(n))==null?void 0:a.hasFieldError(r.name)})},[r.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:r.name,id:r.name+"-label"},e.toDisplayString(e.unref(O)(r.label,r.required)),9,se)):e.createCommentVNode("",!0),e.createElementVNode("div",de,[e.renderSlot(r.$slots,"prepend"),e.createElementVNode("textarea",e.mergeProps({id:r.name,name:r.name,placeholder:r.placeholder,value:i.value,onInput:d,onBlur:l[0]||(l[0]=(...y)=>{var b,g;return((b=e.unref(n))==null?void 0:b.handleFieldBlur)&&((g=e.unref(n))==null?void 0:g.handleFieldBlur(...y))}),class:{"vf-input--disabled":r.disabled,"vf-input--readonly":r.readonly,"vf-input--error":(c=e.unref(n))==null?void 0:c.hasFieldError(r.name)},readonly:r.readonly,disabled:r.disabled,rows:r.rows,required:r.required},r.inputProps,{"aria-labelledby":r.label?r.name+"-label":void 0,"aria-describedby":(f=e.unref(n))!=null&&f.hasFieldError(r.name)?r.name+"-error":void 0,"aria-invalid":(p=e.unref(n))!=null&&p.hasFieldError(r.name)?"true":"false","aria-required":r.required?"true":void 0,"aria-readonly":r.readonly?"true":void 0,"aria-disabled":r.disabled?"true":void 0}),null,16,ce),e.renderSlot(r.$slots,"append")]),(s=e.unref(n))!=null&&s.hasFieldError(r.name)?(e.openBlock(),e.createElementBlock("p",{key:1,class:"vf-error",id:r.name+"-error"},e.toDisplayString((u=e.unref(n))==null?void 0:u.getFieldError(r.name)),9,fe)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],2)}}}),pe=["for","id"],me={class:"vf-input"},ye=["id","name","type","placeholder","value","readonly","required","disabled","aria-labelledby","aria-describedby","aria-invalid","aria-required","aria-readonly","aria-disabled"],be=["id"],he=["id"],ge=e.defineComponent({__name:"FormInput",props:{formik:{},name:{},label:{},type:{},placeholder:{},readonly:{type:Boolean},disabled:{type:Boolean},required:{type:Boolean},inputProps:{},validation:{}},setup(t){const o=t,{formik:n}=q(o.formik),i=e.computed(()=>n==null?void 0:n.getFieldValue(o.name)),d=c=>{const f=c.target.value;n==null||n.setFieldValue(o.name,f)},r=e.computed(()=>`vf-${o.type||"text"}-field`),l=e.computed(()=>n==null?void 0:n.hasFieldError(o.name)),a=e.computed(()=>n==null?void 0:n.getFieldError(o.name));return(c,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"vf-field":!0,[r.value]:!0,"vf-field--error":l.value})},[c.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:c.name,id:c.name+"-label"},e.toDisplayString(e.unref(O)(c.label,c.required)),9,pe)):e.createCommentVNode("",!0),e.createElementVNode("div",me,[e.renderSlot(c.$slots,"prepend"),e.createElementVNode("input",e.mergeProps({id:c.name,name:c.name,type:c.type||"text",placeholder:c.placeholder,value:i.value,readonly:c.readonly,required:c.required,disabled:c.disabled,onInput:d,onBlur:f[0]||(f[0]=(...p)=>{var s,u;return((s=e.unref(n))==null?void 0:s.handleFieldBlur)&&((u=e.unref(n))==null?void 0:u.handleFieldBlur(...p))}),class:{"vf-input--error":l.value,"vf-input--readonly":c.readonly,"vf-input--disabled":c.disabled}},c.inputProps,{"aria-labelledby":c.label?c.name+"-label":void 0,"aria-describedby":l.value?c.name+"-error":void 0,"aria-invalid":l.value?"true":"false","aria-required":c.required?"true":void 0,"aria-readonly":c.readonly?"true":void 0,"aria-disabled":c.disabled?"true":void 0}),null,16,ye),e.renderSlot(c.$slots,"append")]),l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[typeof a.value=="string"?(e.openBlock(),e.createElementBlock("p",{key:0,class:"vf-error",id:c.name+"-error"},e.toDisplayString(a.value),9,be)):Array.isArray(a.value)?(e.openBlock(),e.createElementBlock("ul",{key:1,class:"vf-error",id:c.name+"-error"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(p,s)=>(e.openBlock(),e.createElementBlock("li",{key:s},e.toDisplayString(p),1))),128))],8,he)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.renderSlot(c.$slots,"default")],2))}}),Fe=["for","id"],ke={class:"vf-input"},Ee=["id","name","value","disabled","required","aria-labelledby","aria-describedby","aria-invalid","aria-required","aria-disabled"],Be={key:0,disabled:"",value:""},$e=["value"],Ve=["id"],Se=e.defineComponent({__name:"FormSelectField",props:{formik:{},name:{},label:{},options:{},placeholder:{},inputProps:{},disabled:{type:Boolean},required:{type:Boolean}},setup(t){const o=t,{formik:n}=q(o.formik),i=e.computed(()=>n==null?void 0:n.getFieldValue(o.name)),d=r=>{const l=r.target.value;n==null||n.setFieldValue(o.name,l)};return(r,l)=>{var a,c,f,p,s,u;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"vf-field vf-select-field":!0,"vf-field--error":(a=e.unref(n))==null?void 0:a.hasFieldError(r.name)})},[r.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:r.name,id:r.name+"-label"},e.toDisplayString(e.unref(O)(r.label,r.required)),9,Fe)):e.createCommentVNode("",!0),e.createElementVNode("div",ke,[e.renderSlot(r.$slots,"prepend"),e.createElementVNode("select",e.mergeProps({id:r.name,name:r.name,value:i.value,onChange:d,onBlur:l[0]||(l[0]=(...y)=>{var b,g;return((b=e.unref(n))==null?void 0:b.handleFieldBlur)&&((g=e.unref(n))==null?void 0:g.handleFieldBlur(...y))}),class:{"vf-input--error":(c=e.unref(n))==null?void 0:c.hasFieldError(r.name),"vf-input--disabled":r.disabled},disabled:r.disabled,required:r.required},r.inputProps,{"aria-labelledby":r.label?r.name+"-label":void 0,"aria-describedby":(f=e.unref(n))!=null&&f.hasFieldError(r.name)?r.name+"-error":void 0,"aria-invalid":(p=e.unref(n))!=null&&p.hasFieldError(r.name)?"true":"false","aria-required":r.required?"true":void 0,"aria-disabled":r.disabled?"true":void 0}),[r.placeholder?(e.openBlock(),e.createElementBlock("option",Be,e.toDisplayString(r.placeholder),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.options,y=>(e.openBlock(),e.createElementBlock("option",{key:y.value,value:y.value},e.toDisplayString(y.label),9,$e))),128))],16,Ee),e.renderSlot(r.$slots,"append")]),(s=e.unref(n))!=null&&s.hasFieldError(r.name)?(e.openBlock(),e.createElementBlock("p",{key:1,class:"vf-error",id:r.name+"-error"},e.toDisplayString((u=e.unref(n))==null?void 0:u.getFieldError(r.name)),9,Ve)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],2)}}}),Ce=["for","id"],we={class:"vf-input"},qe=["id","aria-labelledby","aria-describedby","aria-invalid","aria-required","aria-disabled","aria-readonly","contenteditable","tabindex"],Ae={key:0},Oe=["id"],Ne=e.defineComponent({__name:"FormContentEditable",props:{formik:{},name:{},label:{},placeholder:{},contentProps:{},disabled:{type:Boolean},readonly:{type:Boolean},required:{type:Boolean}},setup(t){const o=t,{formik:n}=q(o.formik),i=e.computed(()=>n==null?void 0:n.getFieldValue(o.name)),d=e.computed(()=>i.value.trim().length>0),r=a=>{if(o.disabled||o.readonly)return;const c=a.target.innerText;n==null||n.setFieldValue(o.name,c)},l=a=>{o.disabled||o.readonly||d.value||(a.target.innerHTML="")};return(a,c)=>{var f,p,s,u,y,b;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"vf-field":!0,"vf-content-editable-field":!0,"vf-field--error":(f=e.unref(n))==null?void 0:f.hasFieldError(a.name),"vf-field--disabled":a.disabled,"vf-field--readonly":a.readonly})},[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:a.name,id:a.name+"-label"},e.toDisplayString(e.unref(O)(a.label,a.required)),9,Ce)):e.createCommentVNode("",!0),e.createElementVNode("div",we,[e.renderSlot(a.$slots,"prepend"),e.createElementVNode("div",e.mergeProps({id:a.name,role:"textbox","aria-labelledby":a.label?a.name+"-label":void 0,"aria-describedby":(p=e.unref(n))!=null&&p.hasFieldError(a.name)?a.name+"-error":void 0,"aria-invalid":(s=e.unref(n))!=null&&s.hasFieldError(a.name)?"true":"false","aria-required":a.required?"true":void 0,"aria-disabled":a.disabled?"true":void 0,"aria-readonly":a.readonly?"true":void 0,contenteditable:!a.disabled&&!a.readonly,class:{"vf-input--error":(u=e.unref(n))==null?void 0:u.hasFieldError(a.name),"vf-input--placeholder":!d.value,"vf-input--disabled":a.disabled,"vf-input--readonly":a.readonly}},a.contentProps,{onInput:r,onBlur:c[0]||(c[0]=(...g)=>{var h,$;return((h=e.unref(n))==null?void 0:h.handleFieldBlur)&&(($=e.unref(n))==null?void 0:$.handleFieldBlur(...g))}),onFocus:l,tabindex:a.disabled?-1:0}),[d.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Ae,e.toDisplayString(a.placeholder),1)),e.createTextVNode(e.toDisplayString(i.value),1)],16,qe),e.renderSlot(a.$slots,"append")]),(y=e.unref(n))!=null&&y.hasFieldError(a.name)?(e.openBlock(),e.createElementBlock("p",{key:1,class:"vf--error",id:a.name+"-error"},e.toDisplayString((b=e.unref(n))==null?void 0:b.getFieldError(a.name)),9,Oe)):e.createCommentVNode("",!0),e.renderSlot(a.$slots,"default")],2)}}}),Pe=e.defineComponent({__name:"FormikForm",props:{formik:{},resetOptions:{}},setup(t){const o=t,{formik:n}=q(o.formik);return(i,d)=>(e.openBlock(),e.createElementBlock("form",e.mergeProps({class:"vf-form",onSubmit:d[0]||(d[0]=()=>{var r;return(r=e.unref(n))==null?void 0:r.handleSubmit()}),onReset:d[1]||(d[1]=()=>{var r;return(r=e.unref(n))==null?void 0:r.reset(i.resetOptions)})},i.$attrs),[e.renderSlot(i.$slots,"default")],16))}});E.FormContentEditable=Ne,E.FormInput=ge,E.FormSelectField=Se,E.FormTextArea=ue,E.FormikForm=Pe,E.useFieldArray=le,E.useFormik=ie,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})}); //# sourceMappingURL=vue-formik.umd.js.map