@marimo-team/frontend 0.23.14-dev24 → 0.23.14-dev25
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/dist/assets/click-outside-container-C-40Ctlw.js +1 -0
- package/dist/assets/data-grid-overlay-editor-DmMSodPy.js +1 -0
- package/dist/assets/dist-CzcvL_Z9.js +1 -0
- package/dist/assets/glide-data-editor-Bt_UJyRV.css +1 -0
- package/dist/assets/glide-data-editor-BxiDSSba.js +132 -0
- package/dist/assets/{index-D3lxLHpx.js → index-Co7t4LPQ.js} +2 -2
- package/dist/assets/{number-overlay-editor-sLAx_eGw.js → number-overlay-editor-BYYoWTbS.js} +1 -1
- package/dist/index.html +1 -3
- package/package.json +2 -2
- package/src/plugins/impl/data-editor/__tests__/glide-data-editor.test.tsx +187 -0
- package/src/plugins/impl/data-editor/glide-data-editor.tsx +6 -0
- package/src/plugins/impl/data-editor/glide-portal.tsx +73 -0
- package/dist/assets/click-outside-container-CagwJLiG.js +0 -1
- package/dist/assets/data-grid-overlay-editor-D6dQiwlE.js +0 -1
- package/dist/assets/dist-DXfXSpct.js +0 -1
- package/dist/assets/glide-data-editor-4W6CSDdU.js +0 -132
- package/dist/assets/glide-data-editor-bv6Gjy-B.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as It}from"./chunk-LvLJmgfZ.js";import{t as Tt}from"./react-Bj1aDYRI.js";import{t as Ct}from"./dist-DXfXSpct.js";var D=It(Tt());const jt=Ct("div")({name:"NumberOverlayEditorStyle",class:"gdg-n15fjm3e",propsAsIs:!1});function it(t,r){var e={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&r.indexOf(a)<0&&(e[a]=t[a]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,a=Object.getOwnPropertySymbols(t);n<a.length;n++)r.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(t,a[n])&&(e[a[n]]=t[a[n]]);return e}var tt;(function(t){t.event="event",t.props="prop"})(tt||(tt={}));function q(){}function Rt(t){var r,e=void 0;return function(){for(var a=[],n=arguments.length;n--;)a[n]=arguments[n];return r&&a.length===r.length&&a.every(function(u,l){return u===r[l]})||(r=a,e=t.apply(void 0,a)),e}}function Y(t){return!!(t||"").match(/\d/)}function X(t){return t==null}function Ft(t){return typeof t=="number"&&isNaN(t)}function lt(t){return X(t)||Ft(t)||typeof t=="number"&&!isFinite(t)}function ct(t){return t.replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&")}function Bt(t){switch(t){case"lakh":return/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g;case"wan":return/(\d)(?=(\d{4})+(?!\d))/g;default:return/(\d)(?=(\d{3})+(?!\d))/g}}function Mt(t,r,e){var a=Bt(e),n=t.search(/[1-9]/);return n=n===-1?t.length:n,t.substring(0,n)+t.substring(n,t.length).replace(a,"$1"+r)}function kt(t){var r=(0,D.useRef)(t);return r.current=t,(0,D.useRef)(function(){for(var e=[],a=arguments.length;a--;)e[a]=arguments[a];return r.current.apply(r,e)}).current}function nt(t,r){r===void 0&&(r=!0);var e=t[0]==="-",a=e&&r;t=t.replace("-","");var n=t.split(".");return{beforeDecimal:n[0],afterDecimal:n[1]||"",hasNegation:e,addNegation:a}}function Lt(t){if(!t)return t;var r=t[0]==="-";r&&(t=t.substring(1,t.length));var e=t.split("."),a=e[0].replace(/^0+/,"")||"0",n=e[1]||"";return(r?"-":"")+a+(n?"."+n:"")}function st(t,r,e){for(var a="",n=e?"0":"",u=0;u<=r-1;u++)a+=t[u]||n;return a}function ft(t,r){return Array(r+1).join(t)}function vt(t){var r=t+"",e=r[0]==="-"?"-":"";e&&(r=r.substring(1));var a=r.split(/[eE]/g),n=a[0],u=a[1];if(u=Number(u),!u)return e+n;n=n.replace(".","");var l=1+u,m=n.length;return l<0?n="0."+ft("0",Math.abs(l))+n:l>=m?n+=ft("0",l-m):n=(n.substring(0,l)||"0")+"."+n.substring(l),e+n}function dt(t,r,e){if(["","-"].indexOf(t)!==-1)return t;var a=(t.indexOf(".")!==-1||e)&&r,n=nt(t),u=n.beforeDecimal,l=n.afterDecimal,m=n.hasNegation,b=parseFloat("0."+(l||"0")),p=(l.length<=r?"0."+l:b.toFixed(r)).split("."),h=u;u&&Number(p[0])&&(h=u.split("").reverse().reduce(function(c,A,v){return c.length>v?(Number(c[0])+Number(A)).toString()+c.substring(1,c.length):A+c},p[0]));var f=st(p[1]||"",r,e),S=m?"-":"",y=a?".":"";return""+S+h+y+f}function Q(t,r){if(t.value=t.value,t!==null){if(t.createTextRange){var e=t.createTextRange();return e.move("character",r),e.select(),!0}return t.selectionStart||t.selectionStart===0?(t.focus(),t.setSelectionRange(r,r),!0):(t.focus(),!1)}}var gt=Rt(function(t,r){for(var e=0,a=0,n=t.length,u=r.length;t[e]===r[e]&&e<n;)e++;for(;t[n-1-a]===r[u-1-a]&&u-a>e&&n-a>e;)a++;return{from:{start:e,end:n-a},to:{start:e,end:u-a}}}),Wt=function(t,r){var e=Math.min(t.selectionStart,r);return{from:{start:e,end:t.selectionEnd},to:{start:e,end:r}}};function Pt(t,r,e){return Math.min(Math.max(t,r),e)}function ut(t){return Math.max(t.selectionStart,t.selectionEnd)}function Kt(){return typeof navigator<"u"&&!(navigator.platform&&/iPhone|iPod/.test(navigator.platform))}function Gt(t){return{from:{start:0,end:0},to:{start:0,end:t.length},lastValue:""}}function Ut(t){var r=t.currentValue,e=t.formattedValue,a=t.currentValueIndex,n=t.formattedValueIndex;return r[a]===e[n]}function _t(t,r,e,a,n,u,l){l===void 0&&(l=Ut);var m=n.findIndex(function(B){return B}),b=t.slice(0,m);!r&&!e.startsWith(b)&&(r=b,e=b+e,a+=b.length);for(var p=e.length,h=t.length,f={},S=Array(p),y=0;y<p;y++){S[y]=-1;for(var c=0,A=h;c<A;c++)if(l({currentValue:e,lastValue:r,formattedValue:t,currentValueIndex:y,formattedValueIndex:c})&&f[c]!==!0){S[y]=c,f[c]=!0;break}}for(var v=a;v<p&&(S[v]===-1||!u(e[v]));)v++;var E=v===p||S[v]===-1?h:S[v];for(v=a-1;v>0&&S[v]===-1;)v--;var j=v===-1||S[v]===-1?0:S[v]+1;return j>E?E:a-j<E-a?j:E}function mt(t,r,e,a){var n=t.length;if(r=Pt(r,0,n),a==="left"){for(;r>=0&&!e[r];)r--;r===-1&&(r=e.indexOf(!0))}else{for(;r<=n&&!e[r];)r++;r>n&&(r=e.lastIndexOf(!0))}return r===-1&&(r=n),r}function $t(t){for(var r=Array.from({length:t.length+1}).map(function(){return!0}),e=0,a=r.length;e<a;e++)r[e]=!!(Y(t[e])||Y(t[e-1]));return r}function pt(t,r,e,a,n,u){u===void 0&&(u=q);var l=kt(function(c,A){var v,E;return lt(c)?(E="",v=""):typeof c=="number"||A?(E=typeof c=="number"?vt(c):c,v=a(E)):(E=n(c,void 0),v=a(E)),{formattedValue:v,numAsString:E}}),m=(0,D.useState)(function(){return l(X(t)?r:t,e)}),b=m[0],p=m[1],h=function(c,A){c.formattedValue!==b.formattedValue&&p({formattedValue:c.formattedValue,numAsString:c.value}),u(c,A)},f=t,S=e;X(t)&&(f=b.numAsString,S=!0);var y=l(f,S);return(0,D.useMemo)(function(){p(y)},[y.formattedValue]),[b,h]}function qt(t){return t.replace(/[^0-9]/g,"")}function Zt(t){return t}function zt(t){var r=t.type;r===void 0&&(r="text");var e=t.displayType;e===void 0&&(e="input");var a=t.customInput,n=t.renderText,u=t.getInputRef,l=t.format;l===void 0&&(l=Zt);var m=t.removeFormatting;m===void 0&&(m=qt);var b=t.defaultValue,p=t.valueIsNumericString,h=t.onValueChange,f=t.isAllowed,S=t.onChange;S===void 0&&(S=q);var y=t.onKeyDown;y===void 0&&(y=q);var c=t.onMouseUp;c===void 0&&(c=q);var A=t.onFocus;A===void 0&&(A=q);var v=t.onBlur;v===void 0&&(v=q);var E=t.value,j=t.getCaretBoundary;j===void 0&&(j=$t);var B=t.isValidInputCharacter;B===void 0&&(B=Y);var Z=t.isCharacterSame,P=it(t,["type","displayType","customInput","renderText","getInputRef","format","removeFormatting","defaultValue","valueIsNumericString","onValueChange","isAllowed","onChange","onKeyDown","onMouseUp","onFocus","onBlur","value","getCaretBoundary","isValidInputCharacter","isCharacterSame"]),z=pt(E,b,!!p,l,m,h),G=z[0],x=G.formattedValue,k=G.numAsString,H=z[1],K=(0,D.useRef)(),s=(0,D.useRef)({formattedValue:x,numAsString:k}),g=function(o,i){s.current={formattedValue:o.formattedValue,numAsString:o.value},H(o,i)},C=(0,D.useState)(!1),I=C[0],W=C[1],w=(0,D.useRef)(null),T=(0,D.useRef)({setCaretTimeout:null,focusTimeout:null});(0,D.useEffect)(function(){return W(!0),function(){clearTimeout(T.current.setCaretTimeout),clearTimeout(T.current.focusTimeout)}},[]);var J=l,R=function(o,i){var d=parseFloat(i);return{formattedValue:o,value:i,floatValue:isNaN(d)?void 0:d}},L=function(o,i,d){o.selectionStart===0&&o.selectionEnd===o.value.length||(Q(o,i),T.current.setCaretTimeout=setTimeout(function(){o.value===d&&o.selectionStart!==i&&Q(o,i)},0))},M=function(o,i,d){return mt(o,i,j(o),d)},et=function(o,i,d){var O=j(i),F=_t(i,x,o,d,O,B,Z);return F=mt(i,F,O),F},bt=function(o){var i=o.formattedValue;i===void 0&&(i="");var d=o.input,O=o.source,F=o.event,N=o.numAsString,V;if(d){var U=o.inputValue||d.value,_=ut(d);d.value=i,V=et(U,i,_),V!==void 0&&L(d,V,i)}i!==x&&g(R(i,N),{event:F,source:O})};(0,D.useEffect)(function(){var o=s.current,i=o.formattedValue,d=o.numAsString;(x!==i||k!==d)&&g(R(x,k),{event:void 0,source:tt.props})},[x,k]);var yt=w.current?ut(w.current):void 0;(typeof window<"u"?D.useLayoutEffect:D.useEffect)(function(){var o=w.current;if(x!==s.current.formattedValue&&o){var i=et(s.current.formattedValue,x,yt);o.value=x,L(o,i,x)}},[x]);var Vt=function(o,i,d){var O=i.target,F=K.current?Wt(K.current,O.selectionEnd):gt(x,o),N=Object.assign(Object.assign({},F),{lastValue:x}),V=m(o,N),U=J(V);if(V=m(U,void 0),f&&!f(R(U,V))){var _=i.target,$=et(o,x,ut(_));return _.value=x,L(_,$,x),!1}return bt({formattedValue:U,numAsString:V,inputValue:o,event:i,source:d,input:i.target}),!0},at=function(o,i){i===void 0&&(i=0),K.current={selectionStart:o.selectionStart,selectionEnd:o.selectionEnd+i}},xt=function(o){var i=o.target.value;Vt(i,o,tt.event)&&S(o),K.current=void 0},wt=function(o){var i=o.target,d=o.key,O=i.selectionStart,F=i.selectionEnd,N=i.value;N===void 0&&(N="");var V;d==="ArrowLeft"||d==="Backspace"?V=Math.max(O-1,0):d==="ArrowRight"?V=Math.min(O+1,N.length):d==="Delete"&&(V=O);var U=0;d==="Delete"&&O===F&&(U=1);var _=d==="ArrowLeft"||d==="ArrowRight";if(V===void 0||O!==F&&!_){y(o),at(i,U);return}var $=V;_?($=M(N,V,d==="ArrowLeft"?"left":"right"),$!==V&&o.preventDefault()):d==="Delete"&&!B(N[V])?$=M(N,V,"right"):d==="Backspace"&&!B(N[V])&&($=M(N,V,"left")),$!==V&&L(i,$,N),y(o),at(i,U)},Nt=function(o){var i=o.target,d=function(){var O=i.selectionStart,F=i.selectionEnd,N=i.value;if(N===void 0&&(N=""),O===F){var V=M(N,O);V!==O&&L(i,V,N)}};d(),requestAnimationFrame(function(){d()}),c(o),at(i)},Dt=function(o){o.persist&&o.persist();var i=o.target,d=o.currentTarget;w.current=i,T.current.focusTimeout=setTimeout(function(){var O=i.selectionStart,F=i.selectionEnd,N=i.value;N===void 0&&(N="");var V=M(N,O);V!==O&&!(O===0&&F===N.length)&&L(i,V,N),A(Object.assign(Object.assign({},o),{currentTarget:d}))},0)},Et=function(o){w.current=null,clearTimeout(T.current.focusTimeout),clearTimeout(T.current.setCaretTimeout),v(o)},Ot=I&&Kt()?"numeric":void 0,ot=Object.assign({inputMode:Ot},P,{type:r,value:x,onChange:xt,onKeyDown:wt,onMouseUp:Nt,onFocus:Dt,onBlur:Et});if(e==="text")return n?D.createElement(D.Fragment,null,n(x,P)||null):D.createElement("span",Object.assign({},P,{ref:u}),x);if(a){var At=a;return D.createElement(At,Object.assign({},ot,{ref:u}))}return D.createElement("input",Object.assign({},ot,{ref:u}))}function ht(t,r){var e=r.decimalScale,a=r.fixedDecimalScale,n=r.prefix;n===void 0&&(n="");var u=r.suffix;u===void 0&&(u="");var l=r.allowNegative,m=r.thousandsGroupStyle;if(m===void 0&&(m="thousand"),t===""||t==="-")return t;var b=rt(r),p=b.thousandSeparator,h=b.decimalSeparator,f=e!==0&&t.indexOf(".")!==-1||e&&a,S=nt(t,l),y=S.beforeDecimal,c=S.afterDecimal,A=S.addNegation;return e!==void 0&&(c=st(c,e,!!a)),p&&(y=Mt(y,p,m)),n&&(y=n+y),u&&(c+=u),A&&(y="-"+y),t=y+(f&&h||"")+c,t}function rt(t){var r=t.decimalSeparator;r===void 0&&(r=".");var e=t.thousandSeparator,a=t.allowedDecimalSeparators;return e===!0&&(e=","),a||(a=[r,"."]),{decimalSeparator:r,thousandSeparator:e,allowedDecimalSeparators:a}}function Ht(t,r){t===void 0&&(t="");var e=RegExp("(-)"),a=RegExp("(-)(.)*(-)"),n=e.test(t),u=a.test(t);return t=t.replace(/-/g,""),n&&!u&&r&&(t="-"+t),t}function Jt(t,r){return RegExp("(^-)|[0-9]|"+ct(t),r?"g":void 0)}function Qt(t,r,e){return t===""?!0:!(r!=null&&r.match(/\d/))&&!(e!=null&&e.match(/\d/))&&typeof t=="string"&&!isNaN(Number(t))}function Xt(t,r,e){var a;r===void 0&&(r=Gt(t));var n=e.allowNegative,u=e.prefix;u===void 0&&(u="");var l=e.suffix;l===void 0&&(l="");var m=e.decimalScale,b=r.from,p=r.to,h=p.start,f=p.end,S=rt(e),y=S.allowedDecimalSeparators,c=S.decimalSeparator,A=t[f]===c;if(Y(t)&&(t===u||t===l)&&r.lastValue==="")return t;if(f-h===1&&y.indexOf(t[h])!==-1){var v=m===0?"":c;t=t.substring(0,h)+v+t.substring(h+1,t.length)}var E=function(w,T,J){var R=!1,L=!1;u.startsWith("-")?R=!1:w.startsWith("--")?(R=!1,L=!0):l.startsWith("-")&&w.length===l.length?R=!1:w[0]==="-"&&(R=!0);var M=R?1:0;return L&&(M=2),M&&(w=w.substring(M),T-=M,J-=M),{value:w,start:T,end:J,hasNegation:R}},j=E(t,h,f),B=j.hasNegation;a=j,t=a.value,h=a.start,f=a.end;var Z=E(r.lastValue,b.start,b.end),P=Z.start,z=Z.end,G=Z.value,x=t.substring(h,f);t.length&&G.length&&(P>G.length-l.length||z<u.length)&&!(x&&l.startsWith(x))&&(t=G);var k=0;t.startsWith(u)?k+=u.length:h<u.length&&(k=h),t=t.substring(k),f-=k;var H=t.length,K=t.length-l.length;t.endsWith(l)?H=K:(f>K||f>t.length-l.length)&&(H=f),t=t.substring(0,H),t=Ht(B?"-"+t:t,n),t=(t.match(Jt(c,!0))||[]).join("");var s=t.indexOf(c);t=t.replace(new RegExp(ct(c),"g"),function(w,T){return T===s?".":""});var g=nt(t,n),C=g.beforeDecimal,I=g.afterDecimal,W=g.addNegation;return p.end-p.start<b.end-b.start&&C===""&&A&&!parseFloat(I)&&(t=W?"-":""),t}function Yt(t,r){var e=r.prefix;e===void 0&&(e="");var a=r.suffix;a===void 0&&(a="");var n=Array.from({length:t.length+1}).map(function(){return!0}),u=t[0]==="-";n.fill(!1,0,e.length+(u?1:0));var l=t.length;return n.fill(!1,l-a.length+1,l+1),n}function tr(t){var r=rt(t),e=r.thousandSeparator,a=r.decimalSeparator,n=t.prefix;n===void 0&&(n="");var u=t.allowNegative;if(u===void 0&&(u=!0),e===a)throw Error(`
|
|
1
|
+
import{s as It}from"./chunk-LvLJmgfZ.js";import{t as Tt}from"./react-Bj1aDYRI.js";import{t as Ct}from"./dist-CzcvL_Z9.js";var D=It(Tt());const jt=Ct("div")({name:"NumberOverlayEditorStyle",class:"gdg-n15fjm3e",propsAsIs:!1});function it(t,r){var e={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&r.indexOf(a)<0&&(e[a]=t[a]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,a=Object.getOwnPropertySymbols(t);n<a.length;n++)r.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(t,a[n])&&(e[a[n]]=t[a[n]]);return e}var tt;(function(t){t.event="event",t.props="prop"})(tt||(tt={}));function q(){}function Rt(t){var r,e=void 0;return function(){for(var a=[],n=arguments.length;n--;)a[n]=arguments[n];return r&&a.length===r.length&&a.every(function(u,l){return u===r[l]})||(r=a,e=t.apply(void 0,a)),e}}function Y(t){return!!(t||"").match(/\d/)}function X(t){return t==null}function Ft(t){return typeof t=="number"&&isNaN(t)}function lt(t){return X(t)||Ft(t)||typeof t=="number"&&!isFinite(t)}function ct(t){return t.replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&")}function Bt(t){switch(t){case"lakh":return/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g;case"wan":return/(\d)(?=(\d{4})+(?!\d))/g;default:return/(\d)(?=(\d{3})+(?!\d))/g}}function Mt(t,r,e){var a=Bt(e),n=t.search(/[1-9]/);return n=n===-1?t.length:n,t.substring(0,n)+t.substring(n,t.length).replace(a,"$1"+r)}function kt(t){var r=(0,D.useRef)(t);return r.current=t,(0,D.useRef)(function(){for(var e=[],a=arguments.length;a--;)e[a]=arguments[a];return r.current.apply(r,e)}).current}function nt(t,r){r===void 0&&(r=!0);var e=t[0]==="-",a=e&&r;t=t.replace("-","");var n=t.split(".");return{beforeDecimal:n[0],afterDecimal:n[1]||"",hasNegation:e,addNegation:a}}function Lt(t){if(!t)return t;var r=t[0]==="-";r&&(t=t.substring(1,t.length));var e=t.split("."),a=e[0].replace(/^0+/,"")||"0",n=e[1]||"";return(r?"-":"")+a+(n?"."+n:"")}function st(t,r,e){for(var a="",n=e?"0":"",u=0;u<=r-1;u++)a+=t[u]||n;return a}function ft(t,r){return Array(r+1).join(t)}function vt(t){var r=t+"",e=r[0]==="-"?"-":"";e&&(r=r.substring(1));var a=r.split(/[eE]/g),n=a[0],u=a[1];if(u=Number(u),!u)return e+n;n=n.replace(".","");var l=1+u,m=n.length;return l<0?n="0."+ft("0",Math.abs(l))+n:l>=m?n+=ft("0",l-m):n=(n.substring(0,l)||"0")+"."+n.substring(l),e+n}function dt(t,r,e){if(["","-"].indexOf(t)!==-1)return t;var a=(t.indexOf(".")!==-1||e)&&r,n=nt(t),u=n.beforeDecimal,l=n.afterDecimal,m=n.hasNegation,b=parseFloat("0."+(l||"0")),p=(l.length<=r?"0."+l:b.toFixed(r)).split("."),h=u;u&&Number(p[0])&&(h=u.split("").reverse().reduce(function(c,A,v){return c.length>v?(Number(c[0])+Number(A)).toString()+c.substring(1,c.length):A+c},p[0]));var f=st(p[1]||"",r,e),S=m?"-":"",y=a?".":"";return""+S+h+y+f}function Q(t,r){if(t.value=t.value,t!==null){if(t.createTextRange){var e=t.createTextRange();return e.move("character",r),e.select(),!0}return t.selectionStart||t.selectionStart===0?(t.focus(),t.setSelectionRange(r,r),!0):(t.focus(),!1)}}var gt=Rt(function(t,r){for(var e=0,a=0,n=t.length,u=r.length;t[e]===r[e]&&e<n;)e++;for(;t[n-1-a]===r[u-1-a]&&u-a>e&&n-a>e;)a++;return{from:{start:e,end:n-a},to:{start:e,end:u-a}}}),Wt=function(t,r){var e=Math.min(t.selectionStart,r);return{from:{start:e,end:t.selectionEnd},to:{start:e,end:r}}};function Pt(t,r,e){return Math.min(Math.max(t,r),e)}function ut(t){return Math.max(t.selectionStart,t.selectionEnd)}function Kt(){return typeof navigator<"u"&&!(navigator.platform&&/iPhone|iPod/.test(navigator.platform))}function Gt(t){return{from:{start:0,end:0},to:{start:0,end:t.length},lastValue:""}}function Ut(t){var r=t.currentValue,e=t.formattedValue,a=t.currentValueIndex,n=t.formattedValueIndex;return r[a]===e[n]}function _t(t,r,e,a,n,u,l){l===void 0&&(l=Ut);var m=n.findIndex(function(B){return B}),b=t.slice(0,m);!r&&!e.startsWith(b)&&(r=b,e=b+e,a+=b.length);for(var p=e.length,h=t.length,f={},S=Array(p),y=0;y<p;y++){S[y]=-1;for(var c=0,A=h;c<A;c++)if(l({currentValue:e,lastValue:r,formattedValue:t,currentValueIndex:y,formattedValueIndex:c})&&f[c]!==!0){S[y]=c,f[c]=!0;break}}for(var v=a;v<p&&(S[v]===-1||!u(e[v]));)v++;var E=v===p||S[v]===-1?h:S[v];for(v=a-1;v>0&&S[v]===-1;)v--;var j=v===-1||S[v]===-1?0:S[v]+1;return j>E?E:a-j<E-a?j:E}function mt(t,r,e,a){var n=t.length;if(r=Pt(r,0,n),a==="left"){for(;r>=0&&!e[r];)r--;r===-1&&(r=e.indexOf(!0))}else{for(;r<=n&&!e[r];)r++;r>n&&(r=e.lastIndexOf(!0))}return r===-1&&(r=n),r}function $t(t){for(var r=Array.from({length:t.length+1}).map(function(){return!0}),e=0,a=r.length;e<a;e++)r[e]=!!(Y(t[e])||Y(t[e-1]));return r}function pt(t,r,e,a,n,u){u===void 0&&(u=q);var l=kt(function(c,A){var v,E;return lt(c)?(E="",v=""):typeof c=="number"||A?(E=typeof c=="number"?vt(c):c,v=a(E)):(E=n(c,void 0),v=a(E)),{formattedValue:v,numAsString:E}}),m=(0,D.useState)(function(){return l(X(t)?r:t,e)}),b=m[0],p=m[1],h=function(c,A){c.formattedValue!==b.formattedValue&&p({formattedValue:c.formattedValue,numAsString:c.value}),u(c,A)},f=t,S=e;X(t)&&(f=b.numAsString,S=!0);var y=l(f,S);return(0,D.useMemo)(function(){p(y)},[y.formattedValue]),[b,h]}function qt(t){return t.replace(/[^0-9]/g,"")}function Zt(t){return t}function zt(t){var r=t.type;r===void 0&&(r="text");var e=t.displayType;e===void 0&&(e="input");var a=t.customInput,n=t.renderText,u=t.getInputRef,l=t.format;l===void 0&&(l=Zt);var m=t.removeFormatting;m===void 0&&(m=qt);var b=t.defaultValue,p=t.valueIsNumericString,h=t.onValueChange,f=t.isAllowed,S=t.onChange;S===void 0&&(S=q);var y=t.onKeyDown;y===void 0&&(y=q);var c=t.onMouseUp;c===void 0&&(c=q);var A=t.onFocus;A===void 0&&(A=q);var v=t.onBlur;v===void 0&&(v=q);var E=t.value,j=t.getCaretBoundary;j===void 0&&(j=$t);var B=t.isValidInputCharacter;B===void 0&&(B=Y);var Z=t.isCharacterSame,P=it(t,["type","displayType","customInput","renderText","getInputRef","format","removeFormatting","defaultValue","valueIsNumericString","onValueChange","isAllowed","onChange","onKeyDown","onMouseUp","onFocus","onBlur","value","getCaretBoundary","isValidInputCharacter","isCharacterSame"]),z=pt(E,b,!!p,l,m,h),G=z[0],x=G.formattedValue,k=G.numAsString,H=z[1],K=(0,D.useRef)(),s=(0,D.useRef)({formattedValue:x,numAsString:k}),g=function(o,i){s.current={formattedValue:o.formattedValue,numAsString:o.value},H(o,i)},C=(0,D.useState)(!1),I=C[0],W=C[1],w=(0,D.useRef)(null),T=(0,D.useRef)({setCaretTimeout:null,focusTimeout:null});(0,D.useEffect)(function(){return W(!0),function(){clearTimeout(T.current.setCaretTimeout),clearTimeout(T.current.focusTimeout)}},[]);var J=l,R=function(o,i){var d=parseFloat(i);return{formattedValue:o,value:i,floatValue:isNaN(d)?void 0:d}},L=function(o,i,d){o.selectionStart===0&&o.selectionEnd===o.value.length||(Q(o,i),T.current.setCaretTimeout=setTimeout(function(){o.value===d&&o.selectionStart!==i&&Q(o,i)},0))},M=function(o,i,d){return mt(o,i,j(o),d)},et=function(o,i,d){var O=j(i),F=_t(i,x,o,d,O,B,Z);return F=mt(i,F,O),F},bt=function(o){var i=o.formattedValue;i===void 0&&(i="");var d=o.input,O=o.source,F=o.event,N=o.numAsString,V;if(d){var U=o.inputValue||d.value,_=ut(d);d.value=i,V=et(U,i,_),V!==void 0&&L(d,V,i)}i!==x&&g(R(i,N),{event:F,source:O})};(0,D.useEffect)(function(){var o=s.current,i=o.formattedValue,d=o.numAsString;(x!==i||k!==d)&&g(R(x,k),{event:void 0,source:tt.props})},[x,k]);var yt=w.current?ut(w.current):void 0;(typeof window<"u"?D.useLayoutEffect:D.useEffect)(function(){var o=w.current;if(x!==s.current.formattedValue&&o){var i=et(s.current.formattedValue,x,yt);o.value=x,L(o,i,x)}},[x]);var Vt=function(o,i,d){var O=i.target,F=K.current?Wt(K.current,O.selectionEnd):gt(x,o),N=Object.assign(Object.assign({},F),{lastValue:x}),V=m(o,N),U=J(V);if(V=m(U,void 0),f&&!f(R(U,V))){var _=i.target,$=et(o,x,ut(_));return _.value=x,L(_,$,x),!1}return bt({formattedValue:U,numAsString:V,inputValue:o,event:i,source:d,input:i.target}),!0},at=function(o,i){i===void 0&&(i=0),K.current={selectionStart:o.selectionStart,selectionEnd:o.selectionEnd+i}},xt=function(o){var i=o.target.value;Vt(i,o,tt.event)&&S(o),K.current=void 0},wt=function(o){var i=o.target,d=o.key,O=i.selectionStart,F=i.selectionEnd,N=i.value;N===void 0&&(N="");var V;d==="ArrowLeft"||d==="Backspace"?V=Math.max(O-1,0):d==="ArrowRight"?V=Math.min(O+1,N.length):d==="Delete"&&(V=O);var U=0;d==="Delete"&&O===F&&(U=1);var _=d==="ArrowLeft"||d==="ArrowRight";if(V===void 0||O!==F&&!_){y(o),at(i,U);return}var $=V;_?($=M(N,V,d==="ArrowLeft"?"left":"right"),$!==V&&o.preventDefault()):d==="Delete"&&!B(N[V])?$=M(N,V,"right"):d==="Backspace"&&!B(N[V])&&($=M(N,V,"left")),$!==V&&L(i,$,N),y(o),at(i,U)},Nt=function(o){var i=o.target,d=function(){var O=i.selectionStart,F=i.selectionEnd,N=i.value;if(N===void 0&&(N=""),O===F){var V=M(N,O);V!==O&&L(i,V,N)}};d(),requestAnimationFrame(function(){d()}),c(o),at(i)},Dt=function(o){o.persist&&o.persist();var i=o.target,d=o.currentTarget;w.current=i,T.current.focusTimeout=setTimeout(function(){var O=i.selectionStart,F=i.selectionEnd,N=i.value;N===void 0&&(N="");var V=M(N,O);V!==O&&!(O===0&&F===N.length)&&L(i,V,N),A(Object.assign(Object.assign({},o),{currentTarget:d}))},0)},Et=function(o){w.current=null,clearTimeout(T.current.focusTimeout),clearTimeout(T.current.setCaretTimeout),v(o)},Ot=I&&Kt()?"numeric":void 0,ot=Object.assign({inputMode:Ot},P,{type:r,value:x,onChange:xt,onKeyDown:wt,onMouseUp:Nt,onFocus:Dt,onBlur:Et});if(e==="text")return n?D.createElement(D.Fragment,null,n(x,P)||null):D.createElement("span",Object.assign({},P,{ref:u}),x);if(a){var At=a;return D.createElement(At,Object.assign({},ot,{ref:u}))}return D.createElement("input",Object.assign({},ot,{ref:u}))}function ht(t,r){var e=r.decimalScale,a=r.fixedDecimalScale,n=r.prefix;n===void 0&&(n="");var u=r.suffix;u===void 0&&(u="");var l=r.allowNegative,m=r.thousandsGroupStyle;if(m===void 0&&(m="thousand"),t===""||t==="-")return t;var b=rt(r),p=b.thousandSeparator,h=b.decimalSeparator,f=e!==0&&t.indexOf(".")!==-1||e&&a,S=nt(t,l),y=S.beforeDecimal,c=S.afterDecimal,A=S.addNegation;return e!==void 0&&(c=st(c,e,!!a)),p&&(y=Mt(y,p,m)),n&&(y=n+y),u&&(c+=u),A&&(y="-"+y),t=y+(f&&h||"")+c,t}function rt(t){var r=t.decimalSeparator;r===void 0&&(r=".");var e=t.thousandSeparator,a=t.allowedDecimalSeparators;return e===!0&&(e=","),a||(a=[r,"."]),{decimalSeparator:r,thousandSeparator:e,allowedDecimalSeparators:a}}function Ht(t,r){t===void 0&&(t="");var e=RegExp("(-)"),a=RegExp("(-)(.)*(-)"),n=e.test(t),u=a.test(t);return t=t.replace(/-/g,""),n&&!u&&r&&(t="-"+t),t}function Jt(t,r){return RegExp("(^-)|[0-9]|"+ct(t),r?"g":void 0)}function Qt(t,r,e){return t===""?!0:!(r!=null&&r.match(/\d/))&&!(e!=null&&e.match(/\d/))&&typeof t=="string"&&!isNaN(Number(t))}function Xt(t,r,e){var a;r===void 0&&(r=Gt(t));var n=e.allowNegative,u=e.prefix;u===void 0&&(u="");var l=e.suffix;l===void 0&&(l="");var m=e.decimalScale,b=r.from,p=r.to,h=p.start,f=p.end,S=rt(e),y=S.allowedDecimalSeparators,c=S.decimalSeparator,A=t[f]===c;if(Y(t)&&(t===u||t===l)&&r.lastValue==="")return t;if(f-h===1&&y.indexOf(t[h])!==-1){var v=m===0?"":c;t=t.substring(0,h)+v+t.substring(h+1,t.length)}var E=function(w,T,J){var R=!1,L=!1;u.startsWith("-")?R=!1:w.startsWith("--")?(R=!1,L=!0):l.startsWith("-")&&w.length===l.length?R=!1:w[0]==="-"&&(R=!0);var M=R?1:0;return L&&(M=2),M&&(w=w.substring(M),T-=M,J-=M),{value:w,start:T,end:J,hasNegation:R}},j=E(t,h,f),B=j.hasNegation;a=j,t=a.value,h=a.start,f=a.end;var Z=E(r.lastValue,b.start,b.end),P=Z.start,z=Z.end,G=Z.value,x=t.substring(h,f);t.length&&G.length&&(P>G.length-l.length||z<u.length)&&!(x&&l.startsWith(x))&&(t=G);var k=0;t.startsWith(u)?k+=u.length:h<u.length&&(k=h),t=t.substring(k),f-=k;var H=t.length,K=t.length-l.length;t.endsWith(l)?H=K:(f>K||f>t.length-l.length)&&(H=f),t=t.substring(0,H),t=Ht(B?"-"+t:t,n),t=(t.match(Jt(c,!0))||[]).join("");var s=t.indexOf(c);t=t.replace(new RegExp(ct(c),"g"),function(w,T){return T===s?".":""});var g=nt(t,n),C=g.beforeDecimal,I=g.afterDecimal,W=g.addNegation;return p.end-p.start<b.end-b.start&&C===""&&A&&!parseFloat(I)&&(t=W?"-":""),t}function Yt(t,r){var e=r.prefix;e===void 0&&(e="");var a=r.suffix;a===void 0&&(a="");var n=Array.from({length:t.length+1}).map(function(){return!0}),u=t[0]==="-";n.fill(!1,0,e.length+(u?1:0));var l=t.length;return n.fill(!1,l-a.length+1,l+1),n}function tr(t){var r=rt(t),e=r.thousandSeparator,a=r.decimalSeparator,n=t.prefix;n===void 0&&(n="");var u=t.allowNegative;if(u===void 0&&(u=!0),e===a)throw Error(`
|
|
2
2
|
Decimal separator can't be same as thousand separator.
|
|
3
3
|
thousandSeparator: `+e+` (thousandSeparator = {true} is same as thousandSeparator = ",")
|
|
4
4
|
decimalSeparator: `+a+` (default value for decimalSeparator is .)
|
package/dist/index.html
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
67
67
|
<!-- /TODO -->
|
|
68
68
|
<title>{{ title }}</title>
|
|
69
|
-
<script type="module" crossorigin src="./assets/index-
|
|
69
|
+
<script type="module" crossorigin src="./assets/index-Co7t4LPQ.js"></script>
|
|
70
70
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BW0IMuFq.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="./assets/chunk-LvLJmgfZ.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/react-Bj1aDYRI.js">
|
|
@@ -252,8 +252,6 @@
|
|
|
252
252
|
</head>
|
|
253
253
|
<body>
|
|
254
254
|
<div id="root"></div>
|
|
255
|
-
<!-- This is a portal for the data editor to render in -->
|
|
256
|
-
<div id="portal" data-testid="glide-portal" style="position: fixed; left: 0; top: 0; z-index: 9999"></div>
|
|
257
255
|
<script data-marimo="true">
|
|
258
256
|
Object.defineProperty(window, "__MARIMO_MOUNT_CONFIG__", {
|
|
259
257
|
value: Object.freeze('{{ mount_config }}'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marimo-team/frontend",
|
|
3
|
-
"version": "0.23.14-
|
|
3
|
+
"version": "0.23.14-dev25",
|
|
4
4
|
"main": "dist/main.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@dnd-kit/utilities": "^3.2.2",
|
|
46
46
|
"@emotion/cache": "^11.14.0",
|
|
47
47
|
"@emotion/react": "^11.14.0",
|
|
48
|
-
"@glideapps/glide-data-grid": "6.0.4-
|
|
48
|
+
"@glideapps/glide-data-grid": "6.0.4-alpha24",
|
|
49
49
|
"@hookform/resolvers": "^5.2.2",
|
|
50
50
|
"@img-comparison-slider/react": "^8.0.2",
|
|
51
51
|
"@internationalized/date": "^3.10.1",
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { act, render, screen, waitFor } from "@testing-library/react";
|
|
5
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
7
|
+
import { GlideDataEditor } from "../glide-data-editor";
|
|
8
|
+
|
|
9
|
+
const capturedPortalRef = vi.hoisted(() => ({
|
|
10
|
+
ref: undefined as React.RefObject<HTMLElement> | undefined,
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
vi.mock("@glideapps/glide-data-grid", async () => {
|
|
14
|
+
const React = await import("react");
|
|
15
|
+
return {
|
|
16
|
+
default: React.forwardRef(function MockDataEditor(
|
|
17
|
+
props: { portalElementRef?: React.RefObject<HTMLElement> },
|
|
18
|
+
_ref: React.Ref<HTMLDivElement>,
|
|
19
|
+
) {
|
|
20
|
+
capturedPortalRef.ref = props.portalElementRef;
|
|
21
|
+
return <div data-testid="mock-data-editor" />;
|
|
22
|
+
}),
|
|
23
|
+
CompactSelection: {
|
|
24
|
+
empty: () => ({}),
|
|
25
|
+
},
|
|
26
|
+
GridCellKind: {
|
|
27
|
+
Text: "text",
|
|
28
|
+
Number: "number",
|
|
29
|
+
Boolean: "boolean",
|
|
30
|
+
},
|
|
31
|
+
GridColumnIcon: {
|
|
32
|
+
ProtectedColumnOverlay: "protected",
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
vi.mock("@/theme/useTheme", () => ({
|
|
38
|
+
useTheme: () => ({ theme: "light" }),
|
|
39
|
+
}));
|
|
40
|
+
|
|
41
|
+
const editorProps = {
|
|
42
|
+
data: [{ name: "alice" }],
|
|
43
|
+
setData: vi.fn(),
|
|
44
|
+
columnFields: new Map([["name", "string"]]) as Map<string, "string">,
|
|
45
|
+
setColumnFields: vi.fn(),
|
|
46
|
+
editableColumns: "all" as const,
|
|
47
|
+
edits: [],
|
|
48
|
+
onAddEdits: vi.fn(),
|
|
49
|
+
onAddRows: vi.fn(),
|
|
50
|
+
onDeleteRows: vi.fn(),
|
|
51
|
+
onRenameColumn: vi.fn(),
|
|
52
|
+
onDeleteColumn: vi.fn(),
|
|
53
|
+
onAddColumn: vi.fn(),
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
describe("GlideDataEditor portal", () => {
|
|
57
|
+
let fullscreenElement: Element | null;
|
|
58
|
+
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
fullscreenElement = null;
|
|
61
|
+
Object.defineProperty(document, "fullscreenElement", {
|
|
62
|
+
get: () => fullscreenElement,
|
|
63
|
+
configurable: true,
|
|
64
|
+
});
|
|
65
|
+
document.body
|
|
66
|
+
.querySelectorAll("[data-testid='glide-data-editor-portal']")
|
|
67
|
+
.forEach((node) => {
|
|
68
|
+
node.remove();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("renders a body-level portal and passes it to DataEditor", async () => {
|
|
73
|
+
const { container } = render(
|
|
74
|
+
<TooltipProvider>
|
|
75
|
+
<GlideDataEditor {...editorProps} />
|
|
76
|
+
</TooltipProvider>,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const portal = screen.getByTestId("glide-data-editor-portal");
|
|
80
|
+
expect(portal.parentElement).toBe(document.body);
|
|
81
|
+
expect(container.contains(portal)).toBe(false);
|
|
82
|
+
expect(capturedPortalRef.ref).toBeDefined();
|
|
83
|
+
await waitFor(() => {
|
|
84
|
+
expect(capturedPortalRef.ref?.current).toBe(portal);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("mounts into the fullscreen element when fullscreen is already active", () => {
|
|
89
|
+
const fullscreenContainer = document.createElement("div");
|
|
90
|
+
document.body.appendChild(fullscreenContainer);
|
|
91
|
+
fullscreenElement = fullscreenContainer;
|
|
92
|
+
|
|
93
|
+
render(
|
|
94
|
+
<TooltipProvider>
|
|
95
|
+
<GlideDataEditor {...editorProps} />
|
|
96
|
+
</TooltipProvider>,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const portal = fullscreenContainer.querySelector(
|
|
100
|
+
"[data-testid='glide-data-editor-portal']",
|
|
101
|
+
);
|
|
102
|
+
expect(portal).not.toBeNull();
|
|
103
|
+
expect(portal?.parentElement).toBe(fullscreenContainer);
|
|
104
|
+
|
|
105
|
+
fullscreenContainer.remove();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("moves the portal into the fullscreen element while fullscreen is active", async () => {
|
|
109
|
+
render(
|
|
110
|
+
<TooltipProvider>
|
|
111
|
+
<GlideDataEditor {...editorProps} />
|
|
112
|
+
</TooltipProvider>,
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
expect(
|
|
116
|
+
document.body.querySelector("[data-testid='glide-data-editor-portal']"),
|
|
117
|
+
).not.toBeNull();
|
|
118
|
+
|
|
119
|
+
const fullscreenContainer = document.createElement("div");
|
|
120
|
+
document.body.appendChild(fullscreenContainer);
|
|
121
|
+
|
|
122
|
+
act(() => {
|
|
123
|
+
fullscreenElement = fullscreenContainer;
|
|
124
|
+
document.dispatchEvent(new Event("fullscreenchange"));
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
await waitFor(() => {
|
|
128
|
+
const portal = fullscreenContainer.querySelector(
|
|
129
|
+
"[data-testid='glide-data-editor-portal']",
|
|
130
|
+
);
|
|
131
|
+
expect(portal?.parentElement).toBe(fullscreenContainer);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
act(() => {
|
|
135
|
+
fullscreenElement = null;
|
|
136
|
+
document.dispatchEvent(new Event("fullscreenchange"));
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
await waitFor(() => {
|
|
140
|
+
const portal = document.body.querySelector(
|
|
141
|
+
"[data-testid='glide-data-editor-portal']",
|
|
142
|
+
);
|
|
143
|
+
expect(portal?.parentElement).toBe(document.body);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
fullscreenContainer.remove();
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it("unmounts cleanly while fullscreen is active", async () => {
|
|
150
|
+
const fullscreenContainer = document.createElement("div");
|
|
151
|
+
document.body.appendChild(fullscreenContainer);
|
|
152
|
+
|
|
153
|
+
const { unmount } = render(
|
|
154
|
+
<TooltipProvider>
|
|
155
|
+
<GlideDataEditor {...editorProps} />
|
|
156
|
+
</TooltipProvider>,
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
act(() => {
|
|
160
|
+
fullscreenElement = fullscreenContainer;
|
|
161
|
+
document.dispatchEvent(new Event("fullscreenchange"));
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
await waitFor(() => {
|
|
165
|
+
expect(
|
|
166
|
+
fullscreenContainer.querySelector(
|
|
167
|
+
"[data-testid='glide-data-editor-portal']",
|
|
168
|
+
),
|
|
169
|
+
).not.toBeNull();
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
expect(() => {
|
|
173
|
+
act(() => unmount());
|
|
174
|
+
}).not.toThrow();
|
|
175
|
+
|
|
176
|
+
expect(
|
|
177
|
+
fullscreenContainer.querySelector(
|
|
178
|
+
"[data-testid='glide-data-editor-portal']",
|
|
179
|
+
),
|
|
180
|
+
).toBeNull();
|
|
181
|
+
expect(
|
|
182
|
+
document.body.querySelector("[data-testid='glide-data-editor-portal']"),
|
|
183
|
+
).toBeNull();
|
|
184
|
+
|
|
185
|
+
fullscreenContainer.remove();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
@@ -56,6 +56,7 @@ import {
|
|
|
56
56
|
removeColumn,
|
|
57
57
|
renameColumn,
|
|
58
58
|
} from "./data-utils";
|
|
59
|
+
import { GlideDataEditorPortal } from "./glide-portal";
|
|
59
60
|
|
|
60
61
|
interface GlideDataEditorProps<T> {
|
|
61
62
|
data: T[];
|
|
@@ -88,6 +89,7 @@ export const GlideDataEditor = <T,>({
|
|
|
88
89
|
}: GlideDataEditorProps<T>) => {
|
|
89
90
|
const { theme } = useTheme();
|
|
90
91
|
const dataEditorRef = useRef<DataEditorRef>(null);
|
|
92
|
+
const portalElementRef = useRef<HTMLDivElement>(null);
|
|
91
93
|
|
|
92
94
|
const [menu, setMenu] = useState<{ col: number; bounds: Rectangle }>();
|
|
93
95
|
const [showSearch, setShowSearch] = useState<boolean>(false);
|
|
@@ -613,9 +615,13 @@ export const GlideDataEditor = <T,>({
|
|
|
613
615
|
|
|
614
616
|
return (
|
|
615
617
|
<div className="relative w-full min-w-0">
|
|
618
|
+
<GlideDataEditorPortal portalRef={portalElementRef} />
|
|
616
619
|
<ErrorBoundary>
|
|
617
620
|
<DataEditor
|
|
618
621
|
ref={dataEditorRef}
|
|
622
|
+
// Glide types portalElementRef as RefObject<HTMLElement> (non-null); React 19 refs include null.
|
|
623
|
+
// @ts-expect-error glide-data-grid stale RefObject typing
|
|
624
|
+
portalElementRef={portalElementRef}
|
|
619
625
|
getCellContent={getCellContent}
|
|
620
626
|
columns={columns}
|
|
621
627
|
gridSelection={selection}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useState } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Dismiss any open Glide Data Grid overlay by firing Escape on it.
|
|
8
|
+
*/
|
|
9
|
+
export function dismissGlideOverlay() {
|
|
10
|
+
const overlay = document.querySelector(
|
|
11
|
+
"[data-testid='glide-data-editor-portal'] .gdg-clip-region",
|
|
12
|
+
);
|
|
13
|
+
if (overlay) {
|
|
14
|
+
overlay.dispatchEvent(
|
|
15
|
+
new KeyboardEvent("keydown", { key: "Escape", bubbles: true }),
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getGlidePortalContainer(): Element {
|
|
21
|
+
return document.fullscreenElement ?? document.body;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function useGlidePortalContainer(): Element {
|
|
25
|
+
const [container, setContainer] = useState<Element>(getGlidePortalContainer);
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const handleFullscreenChange = () => {
|
|
29
|
+
if (document.fullscreenElement) {
|
|
30
|
+
setContainer(document.fullscreenElement);
|
|
31
|
+
} else {
|
|
32
|
+
dismissGlideOverlay();
|
|
33
|
+
setContainer(document.body);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
document.addEventListener("fullscreenchange", handleFullscreenChange);
|
|
38
|
+
// Sync on mount in case fullscreen became active before this editor mounted.
|
|
39
|
+
handleFullscreenChange();
|
|
40
|
+
|
|
41
|
+
return () => {
|
|
42
|
+
document.removeEventListener("fullscreenchange", handleFullscreenChange);
|
|
43
|
+
};
|
|
44
|
+
}, []);
|
|
45
|
+
|
|
46
|
+
return container;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Per-instance Glide Data Grid overlay portal on document.body.
|
|
51
|
+
* Moves into the active fullscreen element via createPortal so edit overlays stay visible
|
|
52
|
+
*/
|
|
53
|
+
export function GlideDataEditorPortal({
|
|
54
|
+
portalRef,
|
|
55
|
+
}: {
|
|
56
|
+
portalRef: React.RefObject<HTMLDivElement | null>;
|
|
57
|
+
}) {
|
|
58
|
+
const container = useGlidePortalContainer();
|
|
59
|
+
|
|
60
|
+
return createPortal(
|
|
61
|
+
<div
|
|
62
|
+
ref={portalRef}
|
|
63
|
+
data-testid="glide-data-editor-portal"
|
|
64
|
+
style={{
|
|
65
|
+
position: "fixed",
|
|
66
|
+
left: 0,
|
|
67
|
+
top: 0,
|
|
68
|
+
zIndex: 9999,
|
|
69
|
+
}}
|
|
70
|
+
/>,
|
|
71
|
+
container,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var se=Object.defineProperty;var le=(e,t,r)=>t in e?se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var y=(e,t,r)=>le(e,typeof t!="symbol"?t+"":t,r);var h;import{s as A,t as l}from"./chunk-LvLJmgfZ.js";import{t as ue}from"./react-Bj1aDYRI.js";function D(e="This should not happen"){throw Error(e)}function de(e,t="Assertion failed"){if(!e)return D(t)}function L(e,t){return D(t??"Hell froze over")}function ce(e,t){try{return e()}catch{return t}}var M=Object.prototype.hasOwnProperty;function B(e,t){let r,n;if(e===t)return!0;if(e&&t&&(r=e.constructor)===t.constructor){if(r===Date)return e.getTime()===t.getTime();if(r===RegExp)return e.toString()===t.toString();if(r===Array){if((n=e.length)===t.length)for(;n--&&B(e[n],t[n]););return n===-1}if(!r||typeof e=="object"){for(r in n=0,e)if(M.call(e,r)&&++n&&!M.call(t,r)||!(r in t)||!B(e[r],t[r]))return!1;return Object.keys(t).length===n}}return e!==e&&t!==t}var pe=l(((e,t)=>{var r=Object.prototype.hasOwnProperty;function n(o,i){return o!=null&&r.call(o,i)}t.exports=n})),x=l(((e,t)=>{t.exports=Array.isArray})),N=l(((e,t)=>{t.exports=typeof global=="object"&&global&&global.Object===Object&&global})),F=l(((e,t)=>{var r=N(),n=typeof self=="object"&&self&&self.Object===Object&&self;t.exports=r||n||Function("return this")()})),_=l(((e,t)=>{t.exports=F().Symbol})),fe=l(((e,t)=>{var r=_(),n=Object.prototype,o=n.hasOwnProperty,i=n.toString,a=r?r.toStringTag:void 0;function s(d){var u=o.call(d,a),c=d[a];try{d[a]=void 0;var p=!0}catch{}var b=i.call(d);return p&&(u?d[a]=c:delete d[a]),b}t.exports=s})),he=l(((e,t)=>{var r=Object.prototype.toString;function n(o){return r.call(o)}t.exports=n})),w=l(((e,t)=>{var r=_(),n=fe(),o=he(),i="[object Null]",a="[object Undefined]",s=r?r.toStringTag:void 0;function d(u){return u==null?u===void 0?a:i:s&&s in Object(u)?n(u):o(u)}t.exports=d})),k=l(((e,t)=>{function r(n){return typeof n=="object"&&!!n}t.exports=r})),S=l(((e,t)=>{var r=w(),n=k(),o="[object Symbol]";function i(a){return typeof a=="symbol"||n(a)&&r(a)==o}t.exports=i})),U=l(((e,t)=>{var r=x(),n=S(),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;function a(s,d){if(r(s))return!1;var u=typeof s;return u=="number"||u=="symbol"||u=="boolean"||s==null||n(s)?!0:i.test(s)||!o.test(s)||d!=null&&s in Object(d)}t.exports=a})),z=l(((e,t)=>{function r(n){var o=typeof n;return n!=null&&(o=="object"||o=="function")}t.exports=r})),V=l(((e,t)=>{var r=w(),n=z(),o="[object AsyncFunction]",i="[object Function]",a="[object GeneratorFunction]",s="[object Proxy]";function d(u){if(!n(u))return!1;var c=r(u);return c==i||c==a||c==o||c==s}t.exports=d})),ge=l(((e,t)=>{t.exports=F()["__core-js_shared__"]})),ve=l(((e,t)=>{var r=ge(),n=(function(){var i=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""})();function o(i){return!!n&&n in i}t.exports=o})),G=l(((e,t)=>{var r=Function.prototype.toString;function n(o){if(o!=null){try{return r.call(o)}catch{}try{return o+""}catch{}}return""}t.exports=n})),be=l(((e,t)=>{var r=V(),n=ve(),o=z(),i=G(),a=/[\\^$.*+?()[\]{}|]/g,s=/^\[object .+?Constructor\]$/,d=Function.prototype,u=Object.prototype,c=d.toString,p=u.hasOwnProperty,b=RegExp("^"+c.call(p).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function g(v){return!o(v)||n(v)?!1:(r(v)?b:s).test(i(v))}t.exports=g})),me=l(((e,t)=>{function r(n,o){return n==null?void 0:n[o]}t.exports=r})),R=l(((e,t)=>{var r=be(),n=me();function o(i,a){var s=n(i,a);return r(s)?s:void 0}t.exports=o})),H=l(((e,t)=>{t.exports=R()(Object,"create")})),ye=l(((e,t)=>{var r=H();function n(){this.__data__=r?r(null):{},this.size=0}t.exports=n})),xe=l(((e,t)=>{function r(n){var o=this.has(n)&&delete this.__data__[n];return this.size-=o?1:0,o}t.exports=r})),Fe=l(((e,t)=>{var r=H(),n="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;function i(a){var s=this.__data__;if(r){var d=s[a];return d===n?void 0:d}return o.call(s,a)?s[a]:void 0}t.exports=i})),_e=l(((e,t)=>{var r=H(),n=Object.prototype.hasOwnProperty;function o(i){var a=this.__data__;return r?a[i]!==void 0:n.call(a,i)}t.exports=o})),we=l(((e,t)=>{var r=H(),n="__lodash_hash_undefined__";function o(i,a){var s=this.__data__;return this.size+=this.has(i)?0:1,s[i]=r&&a===void 0?n:a,this}t.exports=o})),ke=l(((e,t)=>{var r=ye(),n=xe(),o=Fe(),i=_e(),a=we();function s(d){var u=-1,c=d==null?0:d.length;for(this.clear();++u<c;){var p=d[u];this.set(p[0],p[1])}}s.prototype.clear=r,s.prototype.delete=n,s.prototype.get=o,s.prototype.has=i,s.prototype.set=a,t.exports=s})),Se=l(((e,t)=>{function r(){this.__data__=[],this.size=0}t.exports=r})),J=l(((e,t)=>{function r(n,o){return n===o||n!==n&&o!==o}t.exports=r})),O=l(((e,t)=>{var r=J();function n(o,i){for(var a=o.length;a--;)if(r(o[a][0],i))return a;return-1}t.exports=n})),He=l(((e,t)=>{var r=O(),n=Array.prototype.splice;function o(i){var a=this.__data__,s=r(a,i);return s<0?!1:(s==a.length-1?a.pop():n.call(a,s,1),--this.size,!0)}t.exports=o})),Oe=l(((e,t)=>{var r=O();function n(o){var i=this.__data__,a=r(i,o);return a<0?void 0:i[a][1]}t.exports=n})),Ce=l(((e,t)=>{var r=O();function n(o){return r(this.__data__,o)>-1}t.exports=n})),je=l(((e,t)=>{var r=O();function n(o,i){var a=this.__data__,s=r(a,o);return s<0?(++this.size,a.push([o,i])):a[s][1]=i,this}t.exports=n})),q=l(((e,t)=>{var r=Se(),n=He(),o=Oe(),i=Ce(),a=je();function s(d){var u=-1,c=d==null?0:d.length;for(this.clear();++u<c;){var p=d[u];this.set(p[0],p[1])}}s.prototype.clear=r,s.prototype.delete=n,s.prototype.get=o,s.prototype.has=i,s.prototype.set=a,t.exports=s})),W=l(((e,t)=>{t.exports=R()(F(),"Map")})),Ee=l(((e,t)=>{var r=ke(),n=q(),o=W();function i(){this.size=0,this.__data__={hash:new r,map:new(o||n),string:new r}}t.exports=i})),$e=l(((e,t)=>{function r(n){var o=typeof n;return o=="string"||o=="number"||o=="symbol"||o=="boolean"?n!=="__proto__":n===null}t.exports=r})),C=l(((e,t)=>{var r=$e();function n(o,i){var a=o.__data__;return r(i)?a[typeof i=="string"?"string":"hash"]:a.map}t.exports=n})),Be=l(((e,t)=>{var r=C();function n(o){var i=r(this,o).delete(o);return this.size-=i?1:0,i}t.exports=n})),ze=l(((e,t)=>{var r=C();function n(o){return r(this,o).get(o)}t.exports=n})),Re=l(((e,t)=>{var r=C();function n(o){return r(this,o).has(o)}t.exports=n})),Ie=l(((e,t)=>{var r=C();function n(o,i){var a=r(this,o),s=a.size;return a.set(o,i),this.size+=a.size==s?0:1,this}t.exports=n})),K=l(((e,t)=>{var r=Ee(),n=Be(),o=ze(),i=Re(),a=Ie();function s(d){var u=-1,c=d==null?0:d.length;for(this.clear();++u<c;){var p=d[u];this.set(p[0],p[1])}}s.prototype.clear=r,s.prototype.delete=n,s.prototype.get=o,s.prototype.has=i,s.prototype.set=a,t.exports=s})),Pe=l(((e,t)=>{var r=K(),n="Expected a function";function o(i,a){if(typeof i!="function"||a!=null&&typeof a!="function")throw TypeError(n);var s=function(){var d=arguments,u=a?a.apply(this,d):d[0],c=s.cache;if(c.has(u))return c.get(u);var p=i.apply(this,d);return s.cache=c.set(u,p)||c,p};return s.cache=new(o.Cache||r),s}o.Cache=r,t.exports=o})),Te=l(((e,t)=>{var r=Pe(),n=500;function o(i){var a=r(i,function(d){return s.size===n&&s.clear(),d}),s=a.cache;return a}t.exports=o})),Ae=l(((e,t)=>{var r=Te(),n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g;t.exports=r(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(n,function(s,d,u,c){a.push(u?c.replace(o,"$1"):d||s)}),a})})),De=l(((e,t)=>{function r(n,o){for(var i=-1,a=n==null?0:n.length,s=Array(a);++i<a;)s[i]=o(n[i],i,n);return s}t.exports=r})),Le=l(((e,t)=>{var r=_(),n=De(),o=x(),i=S(),a=1/0,s=r?r.prototype:void 0,d=s?s.toString:void 0;function u(c){if(typeof c=="string")return c;if(o(c))return n(c,u)+"";if(i(c))return d?d.call(c):"";var p=c+"";return p=="0"&&1/c==-a?"-0":p}t.exports=u})),Me=l(((e,t)=>{var r=Le();function n(o){return o==null?"":r(o)}t.exports=n})),Q=l(((e,t)=>{var r=x(),n=U(),o=Ae(),i=Me();function a(s,d){return r(s)?s:n(s,d)?[s]:o(i(s))}t.exports=a})),Ne=l(((e,t)=>{var r=w(),n=k(),o="[object Arguments]";function i(a){return n(a)&&r(a)==o}t.exports=i})),X=l(((e,t)=>{var r=Ne(),n=k(),o=Object.prototype,i=o.hasOwnProperty,a=o.propertyIsEnumerable;t.exports=r((function(){return arguments})())?r:function(s){return n(s)&&i.call(s,"callee")&&!a.call(s,"callee")}})),Y=l(((e,t)=>{var r=9007199254740991,n=/^(?:0|[1-9]\d*)$/;function o(i,a){var s=typeof i;return a??(a=r),!!a&&(s=="number"||s!="symbol"&&n.test(i))&&i>-1&&i%1==0&&i<a}t.exports=o})),Z=l(((e,t)=>{var r=9007199254740991;function n(o){return typeof o=="number"&&o>-1&&o%1==0&&o<=r}t.exports=n})),ee=l(((e,t)=>{var r=S(),n=1/0;function o(i){if(typeof i=="string"||r(i))return i;var a=i+"";return a=="0"&&1/i==-n?"-0":a}t.exports=o})),te=l(((e,t)=>{var r=Q(),n=X(),o=x(),i=Y(),a=Z(),s=ee();function d(u,c,p){c=r(c,u);for(var b=-1,g=c.length,v=!1;++b<g;){var $=s(c[b]);if(!(v=u!=null&&p(u,$)))break;u=u[$]}return v||++b!=g?v:(g=u==null?0:u.length,!!g&&a(g)&&i($,g)&&(o(u)||n(u)))}t.exports=d})),Ue=A(l(((e,t)=>{var r=pe(),n=te();function o(i,a){return i!=null&&n(i,a,r)}t.exports=o}))(),1);const Ve=null,Ge=void 0;var f;(function(e){e.Uri="uri",e.Text="text",e.Image="image",e.RowID="row-id",e.Number="number",e.Bubble="bubble",e.Boolean="boolean",e.Loading="loading",e.Markdown="markdown",e.Drilldown="drilldown",e.Protected="protected",e.Custom="custom"})(f||(f={}));var re;(function(e){e.HeaderRowID="headerRowID",e.HeaderCode="headerCode",e.HeaderNumber="headerNumber",e.HeaderString="headerString",e.HeaderBoolean="headerBoolean",e.HeaderAudioUri="headerAudioUri",e.HeaderVideoUri="headerVideoUri",e.HeaderEmoji="headerEmoji",e.HeaderImage="headerImage",e.HeaderUri="headerUri",e.HeaderPhone="headerPhone",e.HeaderMarkdown="headerMarkdown",e.HeaderDate="headerDate",e.HeaderTime="headerTime",e.HeaderEmail="headerEmail",e.HeaderReference="headerReference",e.HeaderIfThenElse="headerIfThenElse",e.HeaderSingleValue="headerSingleValue",e.HeaderLookup="headerLookup",e.HeaderTextTemplate="headerTextTemplate",e.HeaderMath="headerMath",e.HeaderRollup="headerRollup",e.HeaderJoinStrings="headerJoinStrings",e.HeaderSplitString="headerSplitString",e.HeaderGeoDistance="headerGeoDistance",e.HeaderArray="headerArray",e.RowOwnerOverlay="rowOwnerOverlay",e.ProtectedColumnOverlay="protectedColumnOverlay"})(re||(re={}));var ne;(function(e){e.Triangle="triangle",e.Dots="dots"})(ne||(ne={}));function Je(e){return"width"in e&&typeof e.width=="number"}async function qe(e){return typeof e=="object"?e:await e()}function oe(e){return!(e.kind===f.Loading||e.kind===f.Bubble||e.kind===f.RowID||e.kind===f.Protected||e.kind===f.Drilldown)}function We(e){return e.kind===j.Marker||e.kind===j.NewRow}function Ke(e){if(!oe(e)||e.kind===f.Image)return!1;if(e.kind===f.Text||e.kind===f.Number||e.kind===f.Markdown||e.kind===f.Uri||e.kind===f.Custom||e.kind===f.Boolean)return e.readonly!==!0;L(e,"A cell was passed with an invalid kind")}function Qe(e){return(0,Ue.default)(e,"editor")}function Xe(e){return!(e.readonly??!1)}var j;(function(e){e.NewRow="new-row",e.Marker="marker"})(j||(j={}));function Ye(e){if(e.length===0)return[];let t=[...e],r=[];t.sort(function(n,o){return n[0]-o[0]}),r.push([...t[0]]);for(let n of t.slice(1)){let o=r[r.length-1];o[1]<n[0]?r.push([...n]):o[1]<n[1]&&(o[1]=n[1])}return r}var Ze,et=(h=class{constructor(t){y(this,"items");this.items=t}offset(t){return t===0?this:new h(this.items.map(r=>[r[0]+t,r[1]+t]))}add(t){let r=typeof t=="number"?[t,t+1]:t;return new h(Ye([...this.items,r]))}remove(t){let r=[...this.items],n=typeof t=="number"?t:t[0],o=typeof t=="number"?t+1:t[1];for(let[i,a]of r.entries()){let[s,d]=a;if(s<=o&&n<=d){let u=[];s<n&&u.push([s,n]),o<d&&u.push([o,d]),r.splice(i,1,...u)}}return new h(r)}first(){if(this.items.length!==0)return this.items[0][0]}last(){if(this.items.length!==0)return this.items.slice(-1)[0][1]-1}hasIndex(t){for(let r=0;r<this.items.length;r++){let[n,o]=this.items[r];if(t>=n&&t<o)return!0}return!1}hasAll(t){for(let r=t[0];r<t[1];r++)if(!this.hasIndex(r))return!1;return!0}some(t){for(let r of this)if(t(r))return!0;return!1}equals(t){if(t===this)return!0;if(t.items.length!==this.items.length)return!1;for(let r=0;r<this.items.length;r++){let n=t.items[r],o=this.items[r];if(n[0]!==o[0]||n[1]!==o[1])return!1}return!0}toArray(){let t=[];for(let[r,n]of this.items)for(let o=r;o<n;o++)t.push(o);return t}get length(){let t=0;for(let[r,n]of this.items)t+=n-r;return t}*[Symbol.iterator](){for(let[t,r]of this.items)for(let n=t;n<r;n++)yield n}},y(h,"empty",()=>Ze??(Ze=new h([]))),y(h,"fromSingleSelection",t=>h.empty().add(t)),h),I={},m=null;function tt(){let e=document.createElement("div");return e.style.opacity="0",e.style.pointerEvents="none",e.style.position="fixed",document.body.append(e),e}function P(e){let t=e.toLowerCase().trim();if(I[t]!==void 0)return I[t];m||(m=tt()),m.style.color="#000",m.style.color=t;let r=getComputedStyle(m).color;m.style.color="#fff",m.style.color=t;let n=getComputedStyle(m).color;if(n!==r)return[0,0,0,1];let o=n.replace(/[^\d.,]/g,"").split(",").map(Number.parseFloat);return o.length<4&&o.push(1),o=o.map(i=>Number.isNaN(i)?0:i),I[t]=o,o}function rt(e,t){let[r,n,o]=P(e);return`rgba(${r}, ${n}, ${o}, ${t})`}var ie=new Map;function nt(e,t){let r=`${e}-${t}`,n=ie.get(r);if(n!==void 0)return n;let o=T(e,t);return ie.set(r,o),o}function T(e,t){if(t===void 0)return e;let[r,n,o,i]=P(e);if(i===1)return e;let[a,s,d,u]=P(t),c=i+u*(1-i);return`rgba(${(i*r+u*a*(1-i))/c}, ${(i*n+u*s*(1-i))/c}, ${(i*o+u*d*(1-i))/c}, ${c})`}var E=A(ue(),1);function ot(e){return{"--gdg-accent-color":e.accentColor,"--gdg-accent-fg":e.accentFg,"--gdg-accent-light":e.accentLight,"--gdg-text-dark":e.textDark,"--gdg-text-medium":e.textMedium,"--gdg-text-light":e.textLight,"--gdg-text-bubble":e.textBubble,"--gdg-bg-icon-header":e.bgIconHeader,"--gdg-fg-icon-header":e.fgIconHeader,"--gdg-text-header":e.textHeader,"--gdg-text-group-header":e.textGroupHeader??e.textHeader,"--gdg-text-header-selected":e.textHeaderSelected,"--gdg-bg-cell":e.bgCell,"--gdg-bg-cell-medium":e.bgCellMedium,"--gdg-bg-header":e.bgHeader,"--gdg-bg-header-has-focus":e.bgHeaderHasFocus,"--gdg-bg-header-hovered":e.bgHeaderHovered,"--gdg-bg-bubble":e.bgBubble,"--gdg-bg-bubble-selected":e.bgBubbleSelected,"--gdg-bg-search-result":e.bgSearchResult,"--gdg-border-color":e.borderColor,"--gdg-horizontal-border-color":e.horizontalBorderColor??e.borderColor,"--gdg-drilldown-border":e.drilldownBorder,"--gdg-link-color":e.linkColor,"--gdg-cell-horizontal-padding":`${e.cellHorizontalPadding}px`,"--gdg-cell-vertical-padding":`${e.cellVerticalPadding}px`,"--gdg-header-font-style":e.headerFontStyle,"--gdg-base-font-style":e.baseFontStyle,"--gdg-marker-font-style":e.markerFontStyle,"--gdg-font-family":e.fontFamily,"--gdg-editor-font-size":e.editorFontSize,...e.resizeIndicatorColor===void 0?{}:{"--gdg-resize-indicator-color":e.resizeIndicatorColor},...e.headerBottomBorderColor===void 0?{}:{"--gdg-header-bottom-border-color":e.headerBottomBorderColor},...e.roundingRadius===void 0?{}:{"--gdg-rounding-radius":`${e.roundingRadius}px`}}}var ae={accentColor:"#4F5DFF",accentFg:"#FFFFFF",accentLight:"rgba(62, 116, 253, 0.1)",textDark:"#313139",textMedium:"#737383",textLight:"#B2B2C0",textBubble:"#313139",bgIconHeader:"#737383",fgIconHeader:"#FFFFFF",textHeader:"#313139",textGroupHeader:"#313139BB",textHeaderSelected:"#FFFFFF",bgCell:"#FFFFFF",bgCellMedium:"#FAFAFB",bgHeader:"#F7F7F8",bgHeaderHasFocus:"#E9E9EB",bgHeaderHovered:"#EFEFF1",bgBubble:"#EDEDF3",bgBubbleSelected:"#FFFFFF",bgSearchResult:"#fff9e3",borderColor:"rgba(115, 116, 131, 0.16)",drilldownBorder:"rgba(0, 0, 0, 0)",linkColor:"#353fb5",cellHorizontalPadding:8,cellVerticalPadding:3,headerIconSize:18,headerFontStyle:"600 13px",baseFontStyle:"13px",markerFontStyle:"9px",fontFamily:"Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif",editorFontSize:"13px",lineHeight:1.4};function it(){return ae}const at=E.createContext(ae);function st(e,...t){let r={...e};for(let n of t)if(n!==void 0)for(let o in n)n.hasOwnProperty(o)&&(o==="bgCell"?r[o]=T(n[o],r[o]):r[o]=n[o]);return(r.headerFontFull===void 0||e.fontFamily!==r.fontFamily||e.headerFontStyle!==r.headerFontStyle)&&(r.headerFontFull=`${r.headerFontStyle} ${r.fontFamily}`),(r.baseFontFull===void 0||e.fontFamily!==r.fontFamily||e.baseFontStyle!==r.baseFontStyle)&&(r.baseFontFull=`${r.baseFontStyle} ${r.fontFamily}`),(r.markerFontFull===void 0||e.fontFamily!==r.fontFamily||e.markerFontStyle!==r.markerFontStyle)&&(r.markerFontFull=`${r.markerFontStyle} ${r.fontFamily}`),r}var lt=class extends E.PureComponent{constructor(){super(...arguments);y(this,"wrapperRef",E.createRef());y(this,"clickOutside",t=>{if(!(this.props.isOutsideClick&&!this.props.isOutsideClick(t))&&this.wrapperRef.current!==null&&!this.wrapperRef.current.contains(t.target)){let r=t.target;for(;r!==null;){if(r.classList.contains("click-outside-ignore"))return;r=r.parentElement}this.props.onClickOutside()}})}componentDidMount(){let t=this.props.customEventTarget??document;t.addEventListener("touchend",this.clickOutside,!0),t.addEventListener("mousedown",this.clickOutside,!0),t.addEventListener("contextmenu",this.clickOutside,!0)}componentWillUnmount(){let t=this.props.customEventTarget??document;t.removeEventListener("touchend",this.clickOutside,!0),t.removeEventListener("mousedown",this.clickOutside,!0),t.removeEventListener("contextmenu",this.clickOutside,!0)}render(){let{onClickOutside:t,isOutsideClick:r,customEventTarget:n,...o}=this.props;return E.createElement("div",{...o,ref:this.wrapperRef},this.props.children)}};export{W as A,w as B,te as C,X as D,Y as E,V as F,de as G,F as H,z as I,ce as J,L as K,U as L,J as M,R as N,Q as O,G as P,S as R,qe as S,Z as T,N as U,_ as V,x as W,oe as _,st as a,Ke as b,rt as c,et as d,f,Xe as g,j as h,ot as i,q as j,K as k,Ve as l,ne as m,at as n,T as o,re as p,B as q,it as r,nt as s,lt as t,Ge as u,We as v,ee as w,Je as x,Qe as y,k as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as z}from"./chunk-LvLJmgfZ.js";import{t as J}from"./react-Bj1aDYRI.js";import{t as Q}from"./react-dom-CSu739Rf.js";import{_ as P,i as U,n as Z,t as ee,v as te,y as re}from"./click-outside-container-CagwJLiG.js";import{t as ie}from"./dist-DXfXSpct.js";var ae=Q(),r=z(J(),1),ne=()=>t=>t.targetX,oe=()=>t=>t.targetY,le=()=>t=>t.targetWidth,de=()=>t=>t.targetHeight,se=()=>t=>t.targetY+10,ue=()=>t=>Math.max(0,(t.targetHeight-28)/2);const ce=ie("div")({name:"DataGridOverlayEditorStyle",class:"gdg-d19meir1",propsAsIs:!1,vars:{"d19meir1-0":[oe(),"px"],"d19meir1-1":[ne(),"px"],"d19meir1-2":[le(),"px"],"d19meir1-3":[de(),"px"],"d19meir1-4":[se(),"px"],"d19meir1-5":[ue(),"px"]}});function ge(){let[t,n]=r.useState();return[t??void 0,n]}function me(){let[t,n]=ge(),[a,f]=r.useState(0),[v,b]=r.useState(!0);return r.useLayoutEffect(()=>{if(t===void 0||!("IntersectionObserver"in window))return;let o=new IntersectionObserver(l=>{l.length!==0&&b(l[0].isIntersecting)},{threshold:1});return o.observe(t),()=>o.disconnect()},[t]),r.useEffect(()=>{if(v||t===void 0)return;let o,l=()=>{let{right:k}=t.getBoundingClientRect();f(x=>Math.min(x+window.innerWidth-k-10,0)),o=requestAnimationFrame(l)};return o=requestAnimationFrame(l),()=>{o!==void 0&&cancelAnimationFrame(o)}},[t,v]),{ref:n,style:r.useMemo(()=>({transform:`translateX(${a}px)`}),[a])}}var ve=t=>{let{target:n,content:a,onFinishEditing:f,forceEditMode:v,initialValue:b,imageEditorOverride:o,markdownDivCreateNode:l,highlight:k,className:x,theme:C,id:V,cell:w,bloom:c,validateCell:d,getCellRenderer:M,provideEditor:p,isOutsideClick:W,customEventTarget:X}=t,[s,Y]=r.useState(v?a:void 0),O=r.useRef(s??a);O.current=s??a;let[h,N]=r.useState(()=>d===void 0?!0:!(P(a)&&(d==null?void 0:d(w,a,O.current))===!1)),g=r.useCallback((e,i)=>{f(h?e:void 0,i)},[h,f]),q=r.useCallback(e=>{if(d!==void 0&&e!==void 0&&P(e)){let i=d(w,e,O.current);i===!1?N(!1):(typeof i=="object"&&(e=i),N(!0))}Y(e)},[w,d]),y=r.useRef(!1),m=r.useRef(void 0),B=r.useCallback(()=>{g(s,[0,0]),y.current=!0},[s,g]),G=r.useCallback((e,i)=>{g(e,i??m.current??[0,0]),y.current=!0},[g]),_=r.useCallback(async e=>{let i=!1;e.key==="Escape"?(e.stopPropagation(),e.preventDefault(),m.current=[0,0]):e.key==="Enter"&&!e.shiftKey?(e.stopPropagation(),e.preventDefault(),m.current=[0,1],i=!0):e.key==="Tab"&&(e.stopPropagation(),e.preventDefault(),m.current=[e.shiftKey?-1:1,0],i=!0),window.setTimeout(()=>{!y.current&&m.current!==void 0&&(g(i?s:void 0,m.current),y.current=!0)},0)},[g,s]),D=s??a,[u,j]=r.useMemo(()=>{var i,K;if(te(a))return[];let e=p==null?void 0:p(a);return e===void 0?[(K=(i=M(a))==null?void 0:i.provideEditor)==null?void 0:K.call(i,a),!1]:[e,!1]},[a,M,p]),{ref:L,style:$}=me(),R=!0,F,I=!0,E;if(u!==void 0){R=u.disablePadding!==!0,I=u.disableStyling!==!0;let e=re(u);e&&(E=u.styleOverride);let i=e?u.editor:u;F=r.createElement(i,{isHighlighted:k,onChange:q,value:D,initialValue:b,onFinishedEditing:G,validatedSelection:P(D)?D.selectionRange:void 0,forceEditMode:v,target:n,imageEditorOverride:o,markdownDivCreateNode:l,isValid:h,theme:C})}E={...E,...$};let A=document.getElementById("portal");if(A===null)return console.error('Cannot open Data Grid overlay editor, because portal not found. Please add `<div id="portal" />` as the last child of your `<body>`.'),null;let S=I?"gdg-style":"gdg-unstyle";h||(S+=" gdg-invalid"),R&&(S+=" gdg-pad");let H=(c==null?void 0:c[0])??1,T=(c==null?void 0:c[1])??1;return(0,ae.createPortal)(r.createElement(Z.Provider,{value:C},r.createElement(ee,{style:U(C),className:x,onClickOutside:B,isOutsideClick:W,customEventTarget:X},r.createElement(ce,{ref:L,id:V,className:S,style:E,as:j===!0?"label":void 0,targetX:n.x-H,targetY:n.y-T,targetWidth:n.width+H*2,targetHeight:n.height+T*2},r.createElement("div",{className:"gdg-clip-region",onKeyDown:_},F)))),A)};export{ve as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as b}from"./chunk-LvLJmgfZ.js";import{t as v}from"./react-Bj1aDYRI.js";import{t as m}from"./emotion-is-prop-valid.esm-CK2zY6a8.js";var O=function(){let r=Array.prototype.slice.call(arguments).filter(Boolean),e={},a=[];r.forEach(s=>{(s?s.split(" "):[]).forEach(l=>{if(l.startsWith("atm_")){let[,o]=l.split("_");e[o]=l}else a.push(l)})});let t=[];for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.push(e[s]);return t.push(...a),t.join(" ")},f=b(v(),1),x=r=>r.toUpperCase()===r,R=r=>e=>r.indexOf(e)===-1,_=(r,e)=>{let a={};return Object.keys(r).filter(R(e)).forEach(t=>{a[t]=r[t]}),a};function g(r,e,a){let t=_(e,a);if(!r){let s=typeof m=="function"?{default:m}:m;Object.keys(t).forEach(l=>{s.default(l)||delete t[l]})}return t}function k(r){return e=>{let a=(s,l)=>{let{as:o=r,class:y=""}=s,n=g(e.propsAsIs===void 0?!(typeof o=="string"&&o.indexOf("-")===-1&&!x(o[0])):e.propsAsIs,s,["as","class"]);n.ref=l,n.className=e.atomic?O(e.class,n.className||y):O(n.className||y,e.class);let{vars:c}=e;if(c){let p={};for(let i in c){let E=c[i],u=E[0],j=E[1]||"",N=typeof u=="function"?u(s):u;e.name,p[`--${i}`]=`${N}${j}`}let d=n.style||{},h=Object.keys(d);h.length>0&&h.forEach(i=>{p[i]=d[i]}),n.style=p}return r.__linaria&&r!==o?(n.as=o,f.createElement(r,n)):f.createElement(o,n)},t=f.forwardRef?f.forwardRef(a):s=>a(_(s,["innerRef"]),s.innerRef);return t.displayName=e.name,t.__linaria={className:e.class||"",extends:r},t}}var w=k;export{w as t};
|