@sqlrooms/kepler 0.29.0-rc.2 → 0.29.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/dist/KeplerSlice.d.ts +7 -5
- package/dist/KeplerSlice.d.ts.map +1 -1
- package/dist/KeplerSlice.js +48 -141
- package/dist/KeplerSlice.js.map +1 -1
- package/dist/components/CustomDndContext.d.ts.map +1 -1
- package/dist/components/CustomDndContext.js +5 -2
- package/dist/components/CustomDndContext.js.map +1 -1
- package/dist/components/CustomFilterPanelHeader.d.ts.map +1 -1
- package/dist/components/CustomFilterPanelHeader.js +5 -5
- package/dist/components/CustomFilterPanelHeader.js.map +1 -1
- package/dist/components/CustomMapLegend.d.ts +4 -1
- package/dist/components/CustomMapLegend.d.ts.map +1 -1
- package/dist/components/CustomMapLegend.js +15 -5
- package/dist/components/CustomMapLegend.js.map +1 -1
- package/dist/components/CustomMapLegendPanel.d.ts +3 -3
- package/dist/components/CustomMapLegendPanel.d.ts.map +1 -1
- package/dist/components/CustomMapLegendPanel.js +19 -4
- package/dist/components/CustomMapLegendPanel.js.map +1 -1
- package/dist/components/KeplerMapContainer.d.ts.map +1 -1
- package/dist/components/KeplerMapContainer.js +36 -4
- package/dist/components/KeplerMapContainer.js.map +1 -1
- package/dist/components/SplitMapIndexContext.d.ts +2 -0
- package/dist/components/SplitMapIndexContext.d.ts.map +1 -0
- package/dist/components/SplitMapIndexContext.js +3 -0
- package/dist/components/SplitMapIndexContext.js.map +1 -0
- package/dist/hooks/useDndEffects.d.ts +1 -1
- package/dist/hooks/useDndEffects.d.ts.map +1 -1
- package/dist/hooks/useDndEffects.js +4 -0
- package/dist/hooks/useDndEffects.js.map +1 -1
- package/dist/hooks/useDndLayers.d.ts +1 -1
- package/dist/hooks/useDndLayers.d.ts.map +1 -1
- package/dist/hooks/useDndLayers.js +4 -0
- package/dist/hooks/useDndLayers.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/KeplerSlice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,SAAS,IAAI,eAAe,EAC5B,QAAQ,IAAI,cAAc,EAC1B,WAAW,EACX,uBAAuB,EACvB,WAAW,IAAI,iBAAiB,EAChC,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,IAAI,eAAe,EAC5B,sBAAsB,IAAI,4BAA4B,EACtD,wBAAwB,IAAI,8BAA8B,EAC1D,MAAM,GACP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,eAAe,EAA4B,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,gBAAgB,EAChB,eAAe,GAGhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAM7C,OAAO,EAEL,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAEL,WAAW,EAEX,wBAAwB,EAGxB,0BAA0B,EAC1B,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,QAAQ,EAAqB,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAC,OAAO,EAAE,aAAa,EAAC,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAOhD,OAAO,EAAC,OAAO,EAAuB,MAAM,OAAO,CAAC;AACpD,OAAO,EAAC,YAAY,EAAqB,MAAM,cAAc,CAAC;AAE9D,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,mGAAmG;AAEzH,MAAM,qBAAqB,GAAG,IAAI,mBAAmB,EAAE,CAAC;AACxD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,MAAM,kBAAmB,SAAQ,WAAW;IAC1C,MAAM,CAAC,qBAAqB,GAAG;QAC7B,mDAAmD;QACnD,OAAO,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;;AAoCJ,SAAS,2BAA2B,CAClC,aAA4B;IAE5B,OAAO;QACL,QAAQ,EAAE;YACR,SAAS,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;SACrD;QACb,OAAO,EAAE;YACP,GAAG,gBAAgB;YACnB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACX,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,aAAa;gBACzD,SAAS,EAAE;oBACT,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,KAAK;iBACd;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,KAAK;iBACd;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,KAAK;iBACd;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAkC;IAElC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO;QACL,IAAI,EAAE;YACJ;gBACE,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;SACF;QACD,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAG3B,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;IAExD,yEAAyE;IACzE,MAAM,WAAW,GAAG;QAClB,aAAa,EAAE,eAAe;QAC9B,yBAAyB,EAAE,2BAA2B;KACvD,CAAC;IAEF,OAAO;QACL;YACE,EAAE,EAAE,wBAAwB;YAC5B,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC;YACvD,QAAQ,EAAE;gBACR,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,KAAK;aACjB;YACD,OAAO,EAAE,KAAK,EAAE,EAAC,QAAQ,EAAC,EAAE,EAAE;gBAC5B,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC3D,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAC7B,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,wBAAwB;wBACnC,OAAO,EAAE,gDAAgD;wBACzD,IAAI,EAAE,WAAW,CAAC,aAAa;qBAChC,CAAC;gBACJ,CAAC;gBAED,4EAA4E;gBAC5E,QAAQ,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;gBAC7D,wDAAwD;gBACxD,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAE3D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,wBAAwB;wBACnC,OAAO,EAAE,oDAAoD;wBAC7D,IAAI,EAAE,WAAW,CAAC,yBAAyB;qBAC5C,CAAC;gBACJ,CAAC;gBAED,MAAM,eAAe,GACnB,MAAM,QAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC7B,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,wBAAwB;wBACnC,OAAO,EAAE,eAAe,CAAC,OAAO;wBAChC,IAAI,EAAE,eAAe,CAAC,IAAI;qBAC3B,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,wBAAwB;oBACnC,OAAO,EAAE,oBAAoB;iBAC9B,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAG3C,OAAO,CACL,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAClC,MAAM,CAAC,OAAO,KAAK,IAAI;QACvB,MAAM,IAAI,MAAM,CAAC,OAAO;QACxB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;QACvC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI;QAC5B,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAC9B,CAAC;AACJ,CAAC;AAyFD,mEAAmE;AACnE,+CAA+C;AAC/C,MAAM,sBAAsB,GAAa;IACvC,iBAAiB,CAAC,WAAW;IAC7B,iBAAiB,CAAC,UAAU;IAC5B,iBAAiB,CAAC,UAAU;CAC7B,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAChC,gBAAgB,GAAG,EAAE,EACrB,MAAM,EAAE,kBAAkB,EAC1B,2BAA2B,EAC3B,aAAa,GAAG,KAAK,EACrB,WAAW,EAAE,qBAAqB,GAAG,EAAE,EACvC,iBAAiB,EACjB,QAAQ,MACoB,EAAE;IAC9B,MAAM,aAAa,GAAG,yBAAyB,CAAC,kBAAkB,CAAC,CAAC;IACpE,qBAAqB,CAAC;QACpB,KAAK,EAAE,kBAAkB;QACzB,GAAG,iBAAiB;KACrB,CAAC,CAAC;IACH,IAAI,iBAAiB,GAAyB,IAAI,CAAC;IACnD,6EAA6E;IAC7E,8EAA8E;IAC9E,8EAA8E;IAC9E,2EAA2E;IAC3E,6CAA6C;IAC7C,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,MAAM,qBAAqB,GAAG,CAC5B,IAA+B,EAC/B,KAAa,EACb,MAAc,IAAI,CAAC,GAAG,EAAE,EACxB,EAAE;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QACnD,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,WAAW,CAGhB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACpB,SAAS,4BAA4B,CACnC,OAGC;YAED,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;YACjC,MAAM,4BAA4B,GAChC,2BAA2B,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CACL,2BAA2B,EAAE,CAAC;gBAC5B,GAAG,OAAO;gBACV,4BAA4B;aAC7B,CAAC,IAAI,4BAA4B,CACnC,CAAC;QACJ,CAAC;QAED,SAAS,mBAAmB,CAC1B,OAGC;YAED,OAAO,eAAe,CAAC,YAAY,CACjC,4BAA4B,CAAC,OAAO,CAAC,CACtC,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAC,MAAM,EAAE,YAAY,EAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAiB;YAChC,cAAc;YACd,0BAA0B;YAC1B,GAAG,qBAAqB;SACzB,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,YAAY,CACzB,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,aAAa,CAC7C,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAA2B,CAAC,MAAM,EAAE,EAAE;YACvD,GAAG,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;iBAC7C;aACF,CAAC,CAAC,CAAC;YAEJ,gCAAgC;YAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAClE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,wDAAwD;QACxD,OAAO;YACL,MAAM,EAAE;gBACN,MAAM,EAAE,aAAa;gBACrB,gBAAgB;gBAChB,GAAG,EAAE,EAAE;gBACP,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;gBACxB,oBAAoB,EAAE,SAAS;gBAC/B,eAAe,EAAE,EAAE;gBAEnB,SAAS,EAAE,CAAC,MAAyB,EAAE,EAAE;oBACvC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC/B,CAAC,CAAC,CACH,CAAC;oBACF,oBAAoB,EAAE,CAAC;oBACvB,qBAAqB,EAAE,CAAC;oBACxB,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAClC,gBAAgB,EAAE,CAAC;gBACrB,CAAC;gBAED,KAAK,CAAC,UAAU;oBACd,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;oBACnC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;oBACzC,MAAM,kBAAkB,GAAuB,mBAAmB,CAAC;wBACjE,MAAM,EAAE,YAAY;wBACpB,KAAK,EAAE,YAAY;qBACpB,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,EAAC,EAAE,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;oBACjD,GAAG,CAAC;wBACF,MAAM,EAAE;4BACN,GAAG,GAAG,EAAE,CAAC,MAAM;4BACf,GAAG,EAAE,kBAAkB;4BACvB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gCAC9B,uCAAuC;gCACvC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gCACxD,IAAI,aAAa,EAAE,CAAC;oCAClB,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gCACrC,CAAC;qCAAM,CAAC;oCACN,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;gCACxD,CAAC;4BACH,CAAC;4BACD,oBAAoB,EAAE;gCACpB,QAAQ,EAAE,aAAa;gCACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;gCACtC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;gCACzB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;gCACxB,oFAAoF;gCACpF,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC;6BAC9B;yBACF;qBACF,CAAC,CAAC;oBACH,qBAAqB,EAAE,CAAC;oBACxB,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBACxC,gBAAgB,EAAE,CAAC;oBACnB,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAErC,2BAA2B;oBAC3B,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;oBAC9C,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;gBACxE,CAAC;gBAED,KAAK,CAAC,OAAO;oBACX,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;gBAC1D,CAAC;gBAED,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;oBACpC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gBACvE,CAAC;gBAED,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;oBAC9B,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjE,CAAC;gBAED,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;oBACvD,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CACpD,CAAC;gBACJ,CAAC;gBAED,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;oBACxD,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,4BAA4B,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CACrD,CAAC;gBACJ,CAAC;gBAED,wBAAwB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE;oBAC7D,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,8BAA8B,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAC,CAAC,CAChE,CAAC;gBACJ,CAAC;gBAED,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;oBACpD,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACzC,MAAM,aAAa,GAAG,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,CAAC;oBACrE,IAAI,CAAC,aAAa;wBAAE,OAAO;oBAC3B,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;oBACrE,MAAM,cAAc,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC5D,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,cAAc,CAAC,GAAG,CAChB,CAAC,KAA4C,EAAE,EAAE,CAAC;wBAChD,KAAK,CAAC,IAAI;wBACV,KAAK;qBACN,CACF,CACF,CAAC;oBACF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CACpD,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAC3D,CAAC;oBACF,IACE,UAAU,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;wBAC3C,UAAU,CAAC,KAAK,CACd,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI;4BAC1C,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CACjD,EACD,CAAC;wBACD,OAAO;oBACT,CAAC;oBACD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,uBAAuB,CAAC;wBACtB,GAAG,aAAa;wBAChB,MAAM,EAAE;4BACN,GAAG,aAAa,CAAC,MAAM;4BACvB,YAAY,EAAE;gCACZ,GAAG,mBAAmB;gCACtB,CAAC,SAAS,CAAC,EAAE,UAAU;6BACxB;yBACF;qBACF,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;oBACnE,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;oBAChD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAC9C;wBACE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;qBAClC,EACvB,SAAS,CACV,CAAC;oBACF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;oBAChE,MAAM,aAAa,GAAG,wBAAwB,CAC5C,SAAS,EACT,aAAa,CACd,CAAC;oBACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;oBAChE,uBAAuB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACpD,yDAAyD;oBACzD,uBAAuB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;oBAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC9D,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAC1B,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAmB,CAAC;oBAEzC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;wBACnB,MAAM,QAAQ,GAAoC;4BAChD,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAC;4BACvD,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAC;4BACvC,QAAQ,EAAE,EAAC,SAAS,EAAC;yBACtB,CAAC;wBACF,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,YAAY,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC,CAC1C,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,aAAa,EAAE,GAAG,EAAE;oBAClB,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAClC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CACrD,CAAC;gBACJ,CAAC;gBAED,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;wBACzC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9D,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;oBAClB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEvB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC5B,EAAE,EAAE,KAAK;4BACT,IAAI,EAAE,IAAI,IAAI,cAAc;4BAC5B,YAAY,EAAE,GAAG;yBAClB,CAAC,CAAC;wBACH,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,mBAAmB,CAAC;4BACrC,MAAM,EAAE,YAAY;4BACpB,KAAK;4BACL,IAAI;yBACL,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;wBACjD,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAClE,CAAC,CAAC,CACH,CAAC;oBACF,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAClC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,KAAK,CAAC,kBAAkB;oBACtB,IAAI,iBAAiB,EAAE,CAAC;wBACtB,iBAAiB,GAAG,IAAI,CAAC;wBACzB,OAAO,iBAAiB,CAAC;oBAC3B,CAAC;oBACD,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;wBAC9B,gEAAgE;wBAChE,qEAAqE;wBACrE,oEAAoE;wBACpE,GAAG,CAAC;4BACF,iBAAiB,GAAG,KAAK,CAAC;4BAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gCAClD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gCACzC,IAAI,CAAC,QAAQ;oCAAE,SAAS;gCACxB,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCAElD,qEAAqE;gCACrE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;gCAC5C,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oCACnD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wCACxB,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oCAC7C,CAAC;gCACH,CAAC;gCACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oCACrD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;wCACzC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oCAChC,CAAC;gCACH,CAAC;gCAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,GAAG,EAAE;qCACF,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;qCAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC7B,CAAC;gCAEF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;oCACvC,IACE,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;wCACzB,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAC3B,CAAC;wCACD,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;4CAC9C,gBAAgB,EAAE,KAAK;4CACvB,SAAS,EAAE,KAAK;yCACjB,CAAC,CAAC;oCACL,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC,QAAQ,iBAAiB,EAAE;oBAC9B,CAAC,CAAC,EAAE,CAAC;oBACL,IAAI,CAAC;wBACH,MAAM,iBAAiB,CAAC;oBAC1B,CAAC;4BAAS,CAAC;wBACT,iBAAiB,GAAG,IAAI,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAED,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;oBACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;wBACtC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC;wBACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAE9C,gCAAgC;wBAChC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;wBAClE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CACrB,CAAC;wBAEF,oDAAoD;wBACpD,IAAI,aAAa,EAAE,CAAC;4BAClB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;4BAE/C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC3B,kCAAkC;gCAClC,MAAM,QAAQ,GACZ,aAAa,KAAK,CAAC;oCACjB,CAAC,CAAC,CAAC;oCACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gCAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gCAC5C,IAAI,aAAa,EAAE,CAAC;oCAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC;oCACjD,qBAAqB,CACnB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EACxB,aAAa,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gCACJ,CAAC;4BACH,CAAC;iCAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACpC,uCAAuC;gCACvC,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gCACnC,IAAI,SAAS,EAAE,CAAC;oCACd,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oCAChD,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;oCAChD,qBAAqB,CACnB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EACxB,SAAS,CAAC,EAAE,EACZ,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gCACJ,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,aAAa,CAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,EAChB,WAAW,CAAC,KAAK,CAAC,CACnB,CAAC;wBAEF,OAAO,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC7C,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBAC5B,mFAAmF;oBACnF,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBAEjD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CACtB,CAAC;oBACF,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;wBAClC,OAAO;4BACL,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,wDAAwD;4BACjE,IAAI,EAAE,sBAAsB;yBAC7B,CAAC;oBACJ,CAAC;oBAED,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEvB,0DAA0D;oBAC1D,MAAM,WAAW,GACf,qBAAqB,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;oBAExD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC5B,EAAE,EAAE,QAAQ;4BACZ,IAAI,EAAE,WAAW,SAAS,CAAC,IAAI,EAAE;4BACjC,MAAM,EAAE,WAAkB;4BAC1B,YAAY,EAAE,GAAG;yBAClB,CAAC,CAAC;wBACH,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC5C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC;wBAC5C,8DAA8D;wBAC9D,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,mBAAmB,CAAC;4BACrC,MAAM,EAAE,eAAe;4BACvB,KAAK,EAAE,QAAQ;4BACf,IAAI,EAAE,WAAW,SAAS,CAAC,IAAI,EAAE;yBAClC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAC;wBACpD,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;4BACpC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;oBACjC,CAAC,CAAC,CACH,CAAC;oBAEF,yCAAyC;oBACzC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAkB,CAAC,CAAC;oBAC1D,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAC1B,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAElC,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,6BAA6B;qBACvC,CAAC;gBACJ,CAAC;gBAED,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CACvC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAC1B,CAAC;wBACF,IAAI,GAAG,EAAE,CAAC;4BACR,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;wBAClB,CAAC;oBACH,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAE9C,uFAAuF;wBACvF,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;4BAAE,OAAO;wBAEjC,6FAA6F;wBAC7F,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CACrB,CAAC;oBACJ,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;oBACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;oBACxC,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,YAAY,EAAE,CAAC,KAAa,EAAE,IAAS,EAAE,EAAE;oBACzC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,eAAe,EAAE,CACf,KAAK,EACL,SAAS,EACT,OAAO,EACP,YAAY,EACZ,gBAAgB,GAAG,IAAI,EACvB,EAAE;oBACF,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,MAAM,OAAO,GAAG;wBACd,IAAI,EAAE;4BACJ,KAAK,EAAE,OAAO,CAAC,IAAI;4BACnB,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,MAAM,EAAE,MAAM;4BACd,8CAA8C;4BAC9C,EAAE,EAAE,SAAS;yBACd;wBACD,IAAI,EAAE;4BACJ,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE;4BAClC,IAAI,EAAE,EAAE;yBACT;wBACD,QAAQ,EAAE;4BACR,oBAAoB;4BACpB,SAAS;4BACT,GAAG,YAAY;4BACf,GAAG,OAAO,CAAC,QAAQ;yBACpB;wBACD,wDAAwD;wBACxD,oBAAoB,EAAE;4BACpB,eAAe,CAAC,IAAI;4BACpB,eAAe,CAAC,OAAO;yBACxB;wBACD,oBAAoB,EAAE,IAAI;qBAC3B,CAAC;oBACF,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,YAAY,CAAC;wBACX,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE;4BACP,gBAAgB;4BAChB,SAAS,EAAE,IAAI;yBAChB;qBACF,CAAC,CACH,CAAC;gBACJ,CAAC;gBAED,cAAc,EAAE,CAAC,KAAa,EAAE,MAAW,EAAE,EAAE;oBAC7C,qCAAqC;oBACrC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;oBACjD,MAAM,YAAY,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACpE,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;oBAC5C,CAAC;oBACD,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,YAAY,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC,CACnD,CAAC;gBACJ,CAAC;gBAED,4BAA4B,CAAC,KAAa;oBACxC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,GAAG,CAAC;4BACF,MAAM,EAAE;gCACN,GAAG,GAAG,EAAE,CAAC,MAAM;gCACf,GAAG,EAAE,mBAAmB,CAAC;oCACvB,MAAM,EAAE,cAAc;oCACtB,KAAK;iCACN,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC,CAAC;gCAChD,eAAe,EAAE;oCACf,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe;oCAC/B,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC;iCACnC;6BACF;yBACF,CAAC,CAAC;wBACH,eAAe,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,qBAAqB,EAAE,CAAC,SAAiB,EAAE,EAAE;oBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;wBAClD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,GAAG,EAAE,CAAC;4BACR,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC/D,CAAC;oBACH,CAAC;gBACH,CAAC;aACF;SACF,CAAC;QAEF,SAAS,eAAe,CAAC,KAAa;YACpC,MAAM,EAAC,QAAQ,EAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CACzB,KAAK,EACL,gBAAgB,CAAC,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAC,CAAC,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,SAAS,0BAA0B;YACjC,OAAO,CAAC,IAAoC,EAAE,EAAE,CAC9C,CAAC,MAAoB,EAAE,EAAE;gBACvB,yCAAyC;gBACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtE,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;oBAC3D,8BAA8B;oBAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAC7C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAC1B,CAAC;wBACF,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC3C,SAAS,CAAC,MAAM,GAAG,qBAAqB,CAAC,eAAe,CACtD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CACjB,CAAC;wBACX,CAAC;oBACH,CAAC,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,sCAAsC;gBACtC,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACN,CAAC;QAED,SAAS,gBAAgB;YACvB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/B,KAAK,MAAM,EAAC,EAAE,EAAE,MAAM,EAAC,IAAI,UAAU,EAAE,CAAC;gBACtC,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAoC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS,oBAAoB;YAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,wDAAwD;gBACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;wBAC9D,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,aAAa,CAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,EAChB,WAAW,CAAC,KAAK,CAAC,CACnB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,0DAA0D;gBAC1D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,mBAAmB,CAAC;4BACrC,MAAM,EAAE,aAAa;4BACrB,KAAK,EAAE,GAAG,CAAC,EAAE;4BACb,IAAI,EAAE,GAAG,CAAC,IAAI;yBACf,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC;wBAClD,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,SAAS,qBAAqB;YAC5B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACzC,MAAM,eAAe,GAAG;gBACtB,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC;aACjD,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,EAAC,EAAE,EAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC/B,eAAe,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;YACjD,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,SAAS,kBAAkB,CAAC,KAAa;YACvC,6CAA6C;YAC7C,IAAI,YAAY,GAGI,GAAG,EAAE;gBACvB,MAAM,IAAI,KAAK,CACb,iEAAiE;oBAC/D,yDAAyD,CAC5D,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,aAAa,GAA4B;gBAC7C,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE,CAAC,MAAc,EAAE,GAAG,IAAS,EAAE,EAAE;oBACzC,+BAA+B;oBAC/B,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAClD,CAAC;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;YACzE,YAAY,GAAG,OAAO,CAAW,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;YAC1D,OAAO,YAAsC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAID,MAAM,UAAU,kBAAkB,CAChC,QAA4C;IAE5C,OAAO,qBAAqB,CAA0B,CAAC,KAAK,EAAE,EAAE,CAC9D,QAAQ,CAAC,KAA6B,CAAC,CACxC,CAAC;AACJ,CAAC","sourcesContent":["import {\n addDataToMap,\n addFilter as addFilterAction,\n addLayer as addLayerAction,\n deleteEntry,\n interactionConfigChange,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n setFilter as setFilterAction,\n setFilterAnimationTime as setFilterAnimationTimeAction,\n setFilterAnimationWindow as setFilterAnimationWindowAction,\n wrapTo,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport {KeplerGLSchemaClass} from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {\n AddDataToMapPayload,\n MinSavedLayer,\n ParsedLayer,\n} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n DbSliceState,\n registerCommandsForOwner,\n RoomCommand,\n RoomShellSliceState,\n unregisterCommandsForOwner,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport {getTheme, type ResolvedTheme} from '@sqlrooms/ui';\nimport * as arrow from 'apache-arrow';\nimport {produce, setAutoFreeze} from 'immer';\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\n\nsetAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors\n\nconst KeplerGLSchemaManager = new KeplerGLSchemaClass();\nconst KEPLER_COMMAND_OWNER = '@sqlrooms/kepler';\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateInitialMapKeplerStateContext = {\n reason:\n | 'initialize'\n | 'create-map'\n | 'duplicate-map'\n | 'register-map'\n | 'sync-config';\n defaultInitialMapKeplerState: Partial<KeplerGlState>;\n mapId?: string;\n name?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n createInitialMapKeplerState?: (\n context: CreateInitialMapKeplerStateContext,\n ) => Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nfunction createDefaultMapKeplerState(\n resolvedTheme: ResolvedTheme,\n): Partial<KeplerGlState> {\n return {\n mapStyle: {\n styleType: resolvedTheme === 'dark' ? 'dark-matter' : 'positron',\n } as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n mapDraw: {\n show: true,\n active: false,\n },\n },\n },\n };\n}\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n return {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n lastOpenedAt: Date.now(),\n },\n ],\n currentMapId: mapId,\n openTabs: [mapId],\n ...props,\n };\n}\n\nfunction createKeplerCommands(): RoomCommand<\n BaseRoomStoreState & KeplerSliceState & DbSliceState\n>[] {\n const DUPLICATE_MAP_COMMAND_ID = 'kepler.duplicate-tab';\n\n // Error codes for internal tracking/logging (kebab-case for consistency)\n const ERROR_CODES = {\n MAP_NOT_FOUND: 'map-not-found',\n MAP_STATE_NOT_INITIALIZED: 'map-state-not-initialized',\n };\n\n return [\n {\n id: DUPLICATE_MAP_COMMAND_ID,\n name: 'Duplicate Tab',\n description: 'Duplicate the current map tab',\n group: 'Kepler',\n keywords: ['kepler', 'map', 'duplicate', 'tab', 'copy'],\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'low',\n },\n execute: async ({getState}) => {\n const currentMapId = getState().kepler.config.currentMapId;\n const sourceMap = getState().kepler.config.maps.find(\n (m) => m.id === currentMapId,\n );\n\n if (!sourceMap) {\n return {\n success: false,\n commandId: DUPLICATE_MAP_COMMAND_ID,\n message: 'Unable to duplicate map: current map not found',\n code: ERROR_CODES.MAP_NOT_FOUND,\n };\n }\n\n // Ensure the map's redux state is registered before attempting to duplicate\n getState().kepler.registerKeplerMapIfNotExists(currentMapId);\n // Re-read state after registration to avoid stale state\n const sourceMapState = getState().kepler.map[currentMapId];\n\n if (!sourceMapState) {\n return {\n success: false,\n commandId: DUPLICATE_MAP_COMMAND_ID,\n message: 'Unable to duplicate map: map state not initialized',\n code: ERROR_CODES.MAP_STATE_NOT_INITIALIZED,\n };\n }\n\n const duplicateResult =\n await getState().kepler.duplicateMap(currentMapId);\n if (!duplicateResult.success) {\n return {\n success: false,\n commandId: DUPLICATE_MAP_COMMAND_ID,\n message: duplicateResult.message,\n code: duplicateResult.code,\n };\n }\n\n return {\n success: true,\n commandId: DUPLICATE_MAP_COMMAND_ID,\n message: 'Duplicated map tab',\n };\n },\n },\n ];\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n destroy: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (\n mapId: string,\n layer: ParsedLayer | MinSavedLayer | undefined,\n datasetId: string,\n ) => void;\n addFilter: (mapId: string, datasetId: string) => void;\n setFilter: (\n mapId: string,\n filterIdx: number,\n prop: string | string[],\n value: any,\n valueIndex?: number,\n ) => void;\n setFilterAnimationTime: (\n mapId: string,\n filterIdx: number,\n prop: string,\n value: any,\n ) => void;\n setFilterAnimationWindow: (\n mapId: string,\n filterId: string,\n animationWindow: string,\n ) => void;\n updateTooltipFields: (\n mapId: string,\n datasetId: string,\n fieldNames: string[],\n ) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n config?: AddDataToMapPayload['config'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n autoCreateLayers: boolean,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n setCurrentMapId: (mapId: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string) => string;\n deleteMap: (mapId: string) => void;\n duplicateMap: (\n mapId: string,\n ) => Promise<{success: boolean; message?: string; code?: string}>;\n renameMap: (mapId: string, name: string) => void;\n closeMap: (mapId: string) => void;\n setOpenTabs: (tabIds: string[]) => void;\n getCurrentMap: () => KeplerMapSchema | undefined;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n KeplerActionTypes.MOUSE_MOVE,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n createInitialMapKeplerState,\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n let syncKeplerPromise: Promise<void> | null = null;\n // When a caller arrives while a sync is already in-flight, the in-flight run\n // may have captured a stale snapshot of db.tables/kepler.map (missing maps or\n // tables added by createMap, duplicateMap, etc.). Setting this flag tells the\n // active run to loop once more with a fresh snapshot after it finishes, so\n // late mutations are never silently dropped.\n let pendingKeplerSync = false;\n const updateMapLastOpenedAt = (\n maps: KeplerSliceConfig['maps'],\n mapId: string,\n now: number = Date.now(),\n ) => {\n const map = maps.find((item) => item.id === mapId);\n if (map) {\n map.lastOpenedAt = now;\n }\n };\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DbSliceState\n >((set, get, store) => {\n function resolveInitialMapKeplerState(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ): Partial<KeplerGlState> {\n const resolvedTheme = getTheme();\n const defaultInitialMapKeplerState =\n createDefaultMapKeplerState(resolvedTheme);\n return (\n createInitialMapKeplerState?.({\n ...context,\n defaultInitialMapKeplerState,\n }) ?? defaultInitialMapKeplerState\n );\n }\n\n function createKeplerReducer(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ) {\n return keplerGlReducer.initialState(\n resolveInitialMapKeplerState(context),\n );\n }\n\n const keplerReducer = createKeplerReducer({reason: 'initialize'});\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = config;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const keplerInitialState: KeplerGlReduxState = createKeplerReducer({\n reason: 'initialize',\n mapId: currentMapId,\n })(undefined, registerEntry({id: currentMapId}));\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-expect-error - Symbol.observable is not defined in the Redux type definitions\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n await get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n requestMapStyle(config.currentMapId);\n\n // Register Kepler commands\n const keplerCommands = createKeplerCommands();\n registerCommandsForOwner(store, KEPLER_COMMAND_OWNER, keplerCommands);\n },\n\n async destroy() {\n unregisterCommandsForOwner(store, KEPLER_COMMAND_OWNER);\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addFilter: (mapId, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addFilterAction(datasetId));\n },\n\n setFilter: (mapId, filterIdx, prop, value, valueIndex) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAction(filterIdx, prop, value, valueIndex),\n );\n },\n\n setFilterAnimationTime: (mapId, filterIdx, prop, value) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationTimeAction(filterIdx, prop, value),\n );\n },\n\n setFilterAnimationWindow: (mapId, filterId, animationWindow) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationWindowAction({id: filterId, animationWindow}),\n );\n },\n\n updateTooltipFields: (mapId, datasetId, fieldNames) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const mapState = get().kepler.map[mapId];\n const tooltipConfig = mapState?.visState?.interactionConfig?.tooltip;\n if (!tooltipConfig) return;\n const currentFieldsToShow = tooltipConfig.config?.fieldsToShow || {};\n const existingFields = currentFieldsToShow[datasetId] || [];\n const existingByName = new Map(\n existingFields.map(\n (field: {name: string; format: string | null}) => [\n field.name,\n field,\n ],\n ),\n );\n const nextFields = Array.from(new Set(fieldNames)).map(\n (name) => existingByName.get(name) ?? {name, format: null},\n );\n if (\n nextFields.length === existingFields.length &&\n nextFields.every(\n (field, index) =>\n field.name === existingFields[index]?.name &&\n field.format === existingFields[index]?.format,\n )\n ) {\n return;\n }\n get().kepler.dispatchAction(\n mapId,\n interactionConfigChange({\n ...tooltipConfig,\n config: {\n ...tooltipConfig.config,\n fieldsToShow: {\n ...currentFieldsToShow,\n [datasetId]: nextFields,\n },\n },\n }),\n );\n },\n\n addTableToMap: async (mapId, tableName, options = {}, config = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options, config}),\n );\n }\n },\n\n getCurrentMap: () => {\n return get().kepler.config.maps.find(\n (map) => map.id === get().kepler.config.currentMapId,\n );\n },\n\n setCurrentMapId: (mapId) => {\n return set((state) =>\n produce(state, (draft) => {\n const now = Date.now();\n draft.kepler.config.currentMapId = mapId;\n updateMapLastOpenedAt(draft.kepler.config.maps, mapId, now);\n }),\n );\n },\n\n createMap: (name) => {\n const mapId = createId();\n const now = Date.now();\n\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n lastOpenedAt: now,\n });\n draft.kepler.config.openTabs.push(mapId);\n draft.kepler.map = createKeplerReducer({\n reason: 'create-map',\n mapId,\n name,\n })(draft.kepler.map, registerEntry({id: mapId}));\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n return mapId;\n },\n\n async syncKeplerDatasets() {\n if (syncKeplerPromise) {\n pendingKeplerSync = true;\n return syncKeplerPromise;\n }\n syncKeplerPromise = (async () => {\n // Loop until no new sync was requested during the current pass.\n // Each iteration reads a fresh snapshot of db.tables and kepler.map,\n // so tables/maps added concurrently are picked up on the next pass.\n do {\n pendingKeplerSync = false;\n for (const mapId of Object.keys(get().kepler.map)) {\n const mapState = get().kepler.map[mapId];\n if (!mapState) continue;\n const keplerDatasets = mapState.visState.datasets;\n\n // Only sync tables that are referenced by existing layers or filters\n const referencedDataIds = new Set<string>();\n for (const layer of mapState.visState.layers ?? []) {\n if (layer.config.dataId) {\n referencedDataIds.add(layer.config.dataId);\n }\n }\n for (const filter of mapState.visState.filters ?? []) {\n for (const dataId of filter.dataId ?? []) {\n referencedDataIds.add(dataId);\n }\n }\n\n const availableTables = new Set(\n get()\n .db.tables.filter((t) => t.table.schema === 'main')\n .map((t) => t.table.table),\n );\n\n for (const dataId of referencedDataIds) {\n if (\n !keplerDatasets?.[dataId] &&\n availableTables.has(dataId)\n ) {\n await get().kepler.addTableToMap(mapId, dataId, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n } while (pendingKeplerSync);\n })();\n try {\n await syncKeplerPromise;\n } finally {\n syncKeplerPromise = null;\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const openTabs = draft.kepler.config.openTabs;\n const maps = draft.kepler.config.maps;\n const wasCurrentMap = draft.kepler.config.currentMapId === mapId;\n const deletingIndex = openTabs.indexOf(mapId);\n\n // Remove from maps and openTabs\n draft.kepler.config.maps = maps.filter((map) => map.id !== mapId);\n draft.kepler.config.openTabs = openTabs.filter(\n (id) => id !== mapId,\n );\n\n // If we deleted the current map, select another one\n if (wasCurrentMap) {\n const newOpenTabs = draft.kepler.config.openTabs;\n const remainingMaps = draft.kepler.config.maps;\n\n if (newOpenTabs.length > 0) {\n // Select from remaining open tabs\n const newIndex =\n deletingIndex === 0\n ? 0\n : Math.min(deletingIndex - 1, newOpenTabs.length - 1);\n const newSelectedId = newOpenTabs[newIndex];\n if (newSelectedId) {\n draft.kepler.config.currentMapId = newSelectedId;\n updateMapLastOpenedAt(\n draft.kepler.config.maps,\n newSelectedId,\n Date.now(),\n );\n }\n } else if (remainingMaps.length > 0) {\n // No open tabs left, open a closed map\n const mapToOpen = remainingMaps[0];\n if (mapToOpen) {\n draft.kepler.config.openTabs.push(mapToOpen.id);\n draft.kepler.config.currentMapId = mapToOpen.id;\n updateMapLastOpenedAt(\n draft.kepler.config.maps,\n mapToOpen.id,\n Date.now(),\n );\n }\n }\n }\n\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n duplicateMap: async (mapId) => {\n // Ensure the map's redux state is registered, consistent with other kepler actions\n get().kepler.registerKeplerMapIfNotExists(mapId);\n\n const sourceMap = get().kepler.config.maps.find(\n (m) => m.id === mapId,\n );\n const sourceMapState = get().kepler.map[mapId];\n if (!sourceMap || !sourceMapState) {\n return {\n success: false,\n message: 'Unable to duplicate map: source map or state not found',\n code: 'source-map-not-found',\n };\n }\n\n const newMapId = createId();\n const now = Date.now();\n\n // Save the source map state using Kepler's schema manager\n const savedConfig =\n KeplerGLSchemaManager.getConfigToSave(sourceMapState);\n\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: newMapId,\n name: `Copy of ${sourceMap.name}`,\n config: savedConfig as any,\n lastOpenedAt: now,\n });\n draft.kepler.config.openTabs.push(newMapId);\n draft.kepler.config.currentMapId = newMapId;\n // Register the new map with empty state, then load the config\n draft.kepler.map = createKeplerReducer({\n reason: 'duplicate-map',\n mapId: newMapId,\n name: `Copy of ${sourceMap.name}`,\n })(draft.kepler.map, registerEntry({id: newMapId}));\n draft.kepler.forwardDispatch[newMapId] =\n getForwardDispatch(newMapId);\n }),\n );\n\n // Load the saved config into the new map\n get().kepler.addConfigToMap(newMapId, savedConfig as any);\n requestMapStyle(newMapId);\n get().kepler.syncKeplerDatasets();\n\n return {\n success: true,\n message: 'Map duplicated successfully',\n };\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n closeMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const openTabs = draft.kepler.config.openTabs;\n\n // Don't close if it's the last open tab (defensive check, TabStrip also prevents this)\n if (openTabs.length <= 1) return;\n\n // Just remove from openTabs - TabStrip handles selection via onSelect before calling onClose\n draft.kepler.config.openTabs = openTabs.filter(\n (id) => id !== mapId,\n );\n }),\n );\n },\n\n setOpenTabs: (tabIds) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.openTabs = tabIds;\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (\n mapId,\n tableName,\n tileset,\n tileMetadata,\n autoCreateLayers = true,\n ) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: createKeplerReducer({\n reason: 'register-map',\n mapId,\n })(get().kepler.map, registerEntry({id: mapId})),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = createKeplerReducer({\n reason: 'sync-config',\n mapId: map.id,\n name: map.name,\n })(draft.kepler.map, registerEntry({id: map.id}));\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const forwardDispatch = {\n [currentMapId]: getForwardDispatch(currentMapId),\n };\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDataToMap,\n addFilter as addFilterAction,\n addLayer as addLayerAction,\n deleteEntry,\n interactionConfigChange,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n setFilter as setFilterAction,\n setFilterAnimationTime as setFilterAnimationTimeAction,\n setFilterAnimationWindow as setFilterAnimationWindowAction,\n setFilterView as setFilterViewAction,\n toggleLayerForMap as toggleLayerForMapAction,\n toggleSplitMap as toggleSplitMapAction,\n wrapTo,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport {KeplerGLSchemaClass} from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {\n AddDataToMapPayload,\n MinSavedLayer,\n ParsedLayer,\n} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n DbSliceState,\n RoomShellSliceState,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport {getTheme, type ResolvedTheme} from '@sqlrooms/ui';\nimport * as arrow from 'apache-arrow';\nimport {produce, setAutoFreeze} from 'immer';\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\n\nsetAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors\n\nconst KeplerGLSchemaManager = new KeplerGLSchemaClass();\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateInitialMapKeplerStateContext = {\n reason:\n | 'initialize'\n | 'create-map'\n | 'duplicate-map'\n | 'register-map'\n | 'sync-config';\n defaultInitialMapKeplerState: Partial<KeplerGlState>;\n mapId?: string;\n name?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n createInitialMapKeplerState?: (\n context: CreateInitialMapKeplerStateContext,\n ) => Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nfunction createDefaultMapKeplerState(\n resolvedTheme: ResolvedTheme,\n): Partial<KeplerGlState> {\n return {\n mapStyle: {\n styleType: resolvedTheme === 'dark' ? 'dark-matter' : 'positron',\n } as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n splitMap: {\n show: true,\n active: false,\n },\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n mapDraw: {\n show: true,\n active: false,\n },\n },\n },\n };\n}\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n const config: KeplerSliceConfig = {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n lastOpenedAt: Date.now(),\n },\n ],\n ...props,\n };\n return KeplerSliceConfig.parse(config);\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n destroy: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (\n mapId: string,\n layer: ParsedLayer | MinSavedLayer | undefined,\n datasetId: string,\n ) => void;\n addFilter: (mapId: string, datasetId: string) => void;\n setFilter: (\n mapId: string,\n filterIdx: number,\n prop: string | string[],\n value: any,\n valueIndex?: number,\n ) => void;\n setFilterAnimationTime: (\n mapId: string,\n filterIdx: number,\n prop: string,\n value: any,\n ) => void;\n setFilterAnimationWindow: (\n mapId: string,\n filterId: string,\n animationWindow: string,\n ) => void;\n setFilterView: (\n mapId: string,\n filterIdx: number,\n view: 'side' | 'enlarged' | 'minified',\n ) => void;\n updateTooltipFields: (\n mapId: string,\n datasetId: string,\n fieldNames: string[],\n ) => void;\n toggleSplitMap: (mapId: string, index?: number) => void;\n toggleLayerForMap: (\n mapId: string,\n mapIndex: number,\n layerId: string,\n ) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n config?: AddDataToMapPayload['config'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n autoCreateLayers: boolean,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n ensureMap: (mapId: string, name?: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string, options?: {id?: string}) => string;\n deleteMap: (mapId: string) => void;\n duplicateMap: (\n mapId: string,\n ) => Promise<{success: boolean; message?: string; code?: string}>;\n renameMap: (mapId: string, name: string) => void;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n KeplerActionTypes.MOUSE_MOVE,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n createInitialMapKeplerState,\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n let syncKeplerPromise: Promise<void> | null = null;\n // When a caller arrives while a sync is already in-flight, the in-flight run\n // may have captured a stale snapshot of db.tables/kepler.map (missing maps or\n // tables added by createMap, duplicateMap, etc.). Setting this flag tells the\n // active run to loop once more with a fresh snapshot after it finishes, so\n // late mutations are never silently dropped.\n let pendingKeplerSync = false;\n const updateMapLastOpenedAt = (\n maps: KeplerSliceConfig['maps'],\n mapId: string,\n now: number = Date.now(),\n ) => {\n const map = maps.find((item) => item.id === mapId);\n if (map) {\n map.lastOpenedAt = now;\n }\n };\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DbSliceState\n >((set, get, _store) => {\n function resolveInitialMapKeplerState(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ): Partial<KeplerGlState> {\n const resolvedTheme = getTheme();\n const defaultInitialMapKeplerState =\n createDefaultMapKeplerState(resolvedTheme);\n return (\n createInitialMapKeplerState?.({\n ...context,\n defaultInitialMapKeplerState,\n }) ?? defaultInitialMapKeplerState\n );\n }\n\n function createKeplerReducer(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ) {\n return keplerGlReducer.initialState(\n resolveInitialMapKeplerState(context),\n );\n }\n\n const keplerReducer = createKeplerReducer({reason: 'initialize'});\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n const nextConfig = KeplerSliceConfig.parse(config);\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = nextConfig;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const keplerInitialState = config.maps.reduce<KeplerGlReduxState>(\n (mapState, map) =>\n createKeplerReducer({\n reason: 'initialize',\n mapId: map.id,\n name: map.name,\n })(mapState, registerEntry({id: map.id})),\n {},\n );\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-expect-error - Symbol.observable is not defined in the Redux type definitions\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n await get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n for (const mapId of Object.keys(get().kepler.map)) {\n requestMapStyle(mapId);\n }\n },\n\n async destroy() {\n // no-op\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addFilter: (mapId, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addFilterAction(datasetId));\n },\n\n setFilter: (mapId, filterIdx, prop, value, valueIndex) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAction(filterIdx, prop, value, valueIndex),\n );\n },\n\n setFilterAnimationTime: (mapId, filterIdx, prop, value) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationTimeAction(filterIdx, prop, value),\n );\n },\n\n setFilterAnimationWindow: (mapId, filterId, animationWindow) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationWindowAction({id: filterId, animationWindow}),\n );\n },\n\n setFilterView: (mapId, filterIdx, view) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterViewAction(filterIdx, view),\n );\n },\n\n updateTooltipFields: (mapId, datasetId, fieldNames) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const mapState = get().kepler.map[mapId];\n const tooltipConfig = mapState?.visState?.interactionConfig?.tooltip;\n if (!tooltipConfig) return;\n const currentFieldsToShow = tooltipConfig.config?.fieldsToShow || {};\n const existingFields = currentFieldsToShow[datasetId] || [];\n const existingByName = new Map(\n existingFields.map(\n (field: {name: string; format: string | null}) => [\n field.name,\n field,\n ],\n ),\n );\n const nextFields = Array.from(new Set(fieldNames)).map(\n (name) => existingByName.get(name) ?? {name, format: null},\n );\n if (\n nextFields.length === existingFields.length &&\n nextFields.every(\n (field, index) =>\n field.name === existingFields[index]?.name &&\n field.format === existingFields[index]?.format,\n )\n ) {\n return;\n }\n get().kepler.dispatchAction(\n mapId,\n interactionConfigChange({\n ...tooltipConfig,\n config: {\n ...tooltipConfig.config,\n fieldsToShow: {\n ...currentFieldsToShow,\n [datasetId]: nextFields,\n },\n },\n }),\n );\n },\n\n toggleSplitMap: (mapId, index) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n toggleSplitMapAction(index as number),\n );\n },\n\n toggleLayerForMap: (mapId, mapIndex, layerId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n toggleLayerForMapAction(mapIndex, layerId),\n );\n },\n\n addTableToMap: async (mapId, tableName, options = {}, config = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options, config}),\n );\n }\n },\n\n ensureMap: (mapId, name) => {\n const now = Date.now();\n set((state) =>\n produce(state, (draft) => {\n const existing = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (existing) {\n if (name && existing.name !== name) {\n existing.name = name;\n }\n return;\n }\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n lastOpenedAt: now,\n });\n draft.kepler.map = createKeplerReducer({\n reason: 'create-map',\n mapId,\n name,\n })(draft.kepler.map, registerEntry({id: mapId}));\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n if (!get().kepler.map[mapId]) {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n }\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n },\n\n createMap: (name, options) => {\n const mapId = options?.id ?? createId();\n get().kepler.ensureMap(mapId, name);\n return mapId;\n },\n\n async syncKeplerDatasets() {\n if (syncKeplerPromise) {\n pendingKeplerSync = true;\n return syncKeplerPromise;\n }\n syncKeplerPromise = (async () => {\n // Loop until no new sync was requested during the current pass.\n // Each iteration reads a fresh snapshot of db.tables and kepler.map,\n // so tables/maps added concurrently are picked up on the next pass.\n do {\n pendingKeplerSync = false;\n for (const mapId of Object.keys(get().kepler.map)) {\n const mapState = get().kepler.map[mapId];\n if (!mapState) continue;\n const keplerDatasets = mapState.visState.datasets;\n\n // Only sync tables that are referenced by existing layers or filters\n const referencedDataIds = new Set<string>();\n for (const layer of mapState.visState.layers ?? []) {\n if (layer.config.dataId) {\n referencedDataIds.add(layer.config.dataId);\n }\n }\n for (const filter of mapState.visState.filters ?? []) {\n for (const dataId of filter.dataId ?? []) {\n referencedDataIds.add(dataId);\n }\n }\n\n const availableTables = new Set(\n get()\n .db.tables.filter((t) => t.table.schema === 'main')\n .map((t) => t.table.table),\n );\n\n for (const dataId of referencedDataIds) {\n if (\n !keplerDatasets?.[dataId] &&\n availableTables.has(dataId)\n ) {\n await get().kepler.addTableToMap(mapId, dataId, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n } while (pendingKeplerSync);\n })();\n try {\n await syncKeplerPromise;\n } finally {\n syncKeplerPromise = null;\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const maps = draft.kepler.config.maps;\n\n draft.kepler.config.maps = maps.filter((map) => map.id !== mapId);\n\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n duplicateMap: async (mapId) => {\n // Ensure the map's redux state is registered, consistent with other kepler actions\n get().kepler.registerKeplerMapIfNotExists(mapId);\n\n const sourceMap = get().kepler.config.maps.find(\n (m) => m.id === mapId,\n );\n const sourceMapState = get().kepler.map[mapId];\n if (!sourceMap || !sourceMapState) {\n return {\n success: false,\n message: 'Unable to duplicate map: source map or state not found',\n code: 'source-map-not-found',\n };\n }\n\n const newMapId = createId();\n const now = Date.now();\n\n // Save the source map state using Kepler's schema manager\n const savedConfig =\n KeplerGLSchemaManager.getConfigToSave(sourceMapState);\n\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: newMapId,\n name: `Copy of ${sourceMap.name}`,\n config: savedConfig as any,\n lastOpenedAt: now,\n });\n // Register the new map with empty state, then load the config\n draft.kepler.map = createKeplerReducer({\n reason: 'duplicate-map',\n mapId: newMapId,\n name: `Copy of ${sourceMap.name}`,\n })(draft.kepler.map, registerEntry({id: newMapId}));\n draft.kepler.forwardDispatch[newMapId] =\n getForwardDispatch(newMapId);\n }),\n );\n\n // Load the saved config into the new map\n get().kepler.addConfigToMap(newMapId, savedConfig as any);\n requestMapStyle(newMapId);\n get().kepler.syncKeplerDatasets();\n\n return {\n success: true,\n message: 'Map duplicated successfully',\n };\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (\n mapId,\n tableName,\n tileset,\n tileMetadata,\n autoCreateLayers = true,\n ) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: createKeplerReducer({\n reason: 'register-map',\n mapId,\n })(get().kepler.map, registerEntry({id: mapId})),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = createKeplerReducer({\n reason: 'sync-config',\n mapId: map.id,\n name: map.name,\n })(draft.kepler.map, registerEntry({id: map.id}));\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const forwardDispatch: Record<string, Dispatch<KeplerAction>> = {};\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDndContext.d.ts","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAC3D,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"CustomDndContext.d.ts","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAC3D,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAiH3B;yBAnHe,uBAAuB"}
|
|
@@ -18,8 +18,11 @@ export function CustomDndContextFactory(LayerPanelHeader) {
|
|
|
18
18
|
return (_jsx(LayerPanelHeader, { isConfigActive: false, layerId: layer.id, isVisible: true, isValid: true, label: layer.config.label, labelRCGColorValues: color, onToggleVisibility: nop, onResetIsValid: nop, onUpdateLayerLabel: nop, onToggleEnableConfig: nop, onDuplicateLayer: nop, onRemoveLayer: nop, onZoomToLayer: nop, layerType: layer.type, allowDuplicate: false, isDragNDropEnabled: false }));
|
|
19
19
|
};
|
|
20
20
|
const DndContext = ({ children, visState }) => {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const mapId = useStoreWithKepler((state) => {
|
|
22
|
+
if (!visState)
|
|
23
|
+
return undefined;
|
|
24
|
+
return Object.entries(state.kepler.map).find(([, mapState]) => mapState?.visState === visState)?.[0];
|
|
25
|
+
});
|
|
23
26
|
const { datasets, layerOrder, layers, splitMaps, effects, effectOrder } = visState || {};
|
|
24
27
|
// Use our custom hooks that include mapId
|
|
25
28
|
const { activeLayer, onDragStart: onLayerDragStart, onDragEnd: onLayerDragEnd, } = useDndLayers(mapId, layers || [], layerOrder || []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDndContext.js","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAE,OAAO,EAAoB,MAAM,OAAO,CAAC;AACrE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,UAAU,IAAI,aAAa,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAEvE,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAElD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;CAE1B,CAAC;AAEF,MAAM,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAMrB,MAAM,UAAU,uBAAuB,CACrC,gBAA4D;IAE5D,MAAM,iBAAiB,GAAG,CAAC,EACzB,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;QACH,MAAM,KAAK,GACT,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK;YACrC,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,CACL,KAAC,gBAAgB,IACf,cAAc,EAAE,KAAK,EACrB,OAAO,EAAE,KAAK,CAAC,EAAE,EACjB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EACzB,mBAAmB,EAAE,KAAK,EAC1B,kBAAkB,EAAE,GAAG,EACvB,cAAc,EAAE,GAAG,EACnB,kBAAkB,EAAE,GAAG,EACvB,oBAAoB,EAAE,GAAG,EACzB,gBAAgB,EAAE,GAAG,EACrB,aAAa,EAAE,GAAG,EAClB,aAAa,EAAE,GAAG,EAClB,SAAS,EAAE,KAAK,CAAC,IAAI,EACrB,cAAc,EAAE,KAAK,EACrB,kBAAkB,EAAE,KAAK,GACzB,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAkB,EAAE,EAAE;QAC3D,
|
|
1
|
+
{"version":3,"file":"CustomDndContext.js","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo, PropsWithChildren} from 'react';\nimport styled from 'styled-components';\nimport {DndContext as DndKitContext, DragOverlay} from '@dnd-kit/core';\nimport {VisState} from '@kepler.gl/schemas';\nimport {\n LayerPanelHeaderFactory,\n DND_MODIFIERS,\n DND_EMPTY_MODIFIERS,\n SORTABLE_LAYER_TYPE,\n SORTABLE_EFFECT_TYPE,\n} from '@kepler.gl/components';\n\nimport useDndLayers from '../hooks/useDndLayers';\nimport useDndEffects from '../hooks/useDndEffects';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\nconst DragItem = styled.div`\n cursor: grabbing;\n`;\n\nconst nop = () => {};\n\nexport type DndContextProps = PropsWithChildren<{\n visState?: VisState;\n}>;\n\nexport function CustomDndContextFactory(\n LayerPanelHeader: ReturnType<typeof LayerPanelHeaderFactory>,\n): React.FC<DndContextProps> {\n const LayerPanelOverlay = ({\n layer,\n datasets,\n }: {\n layer: any;\n datasets: any;\n }) => {\n const color =\n layer.config.dataId && datasets[layer.config.dataId]\n ? datasets[layer.config.dataId].color\n : null;\n return (\n <LayerPanelHeader\n isConfigActive={false}\n layerId={layer.id}\n isVisible={true}\n isValid={true}\n label={layer.config.label}\n labelRCGColorValues={color}\n onToggleVisibility={nop}\n onResetIsValid={nop}\n onUpdateLayerLabel={nop}\n onToggleEnableConfig={nop}\n onDuplicateLayer={nop}\n onRemoveLayer={nop}\n onZoomToLayer={nop}\n layerType={layer.type}\n allowDuplicate={false}\n isDragNDropEnabled={false}\n />\n );\n };\n\n const DndContext = ({children, visState}: DndContextProps) => {\n const mapId = useStoreWithKepler((state) => {\n if (!visState) return undefined;\n return Object.entries(state.kepler.map).find(\n ([, mapState]) => mapState?.visState === visState,\n )?.[0];\n });\n const {datasets, layerOrder, layers, splitMaps, effects, effectOrder} =\n visState || {};\n\n // Use our custom hooks that include mapId\n const {\n activeLayer,\n onDragStart: onLayerDragStart,\n onDragEnd: onLayerDragEnd,\n } = useDndLayers(mapId, layers || [], layerOrder || []);\n\n const {onDragStart: onEffectDragStart, onDragEnd: onEffectDragEnd} =\n useDndEffects(mapId, effects || [], effectOrder || []);\n\n const isSplit = useMemo(() => (splitMaps?.length || 0) > 1, [splitMaps]);\n const dndModifiers = useMemo(\n () => (isSplit ? DND_EMPTY_MODIFIERS : DND_MODIFIERS),\n [isSplit],\n );\n\n const onDragStart = useCallback(\n (event: any) => {\n const activeType = event.active.data?.current?.type;\n switch (activeType) {\n case SORTABLE_LAYER_TYPE:\n onLayerDragStart(event);\n break;\n case SORTABLE_EFFECT_TYPE:\n onEffectDragStart(event);\n break;\n default:\n console.log(`activeType ${activeType} unknown`);\n }\n },\n [onLayerDragStart, onEffectDragStart],\n );\n\n const onDragEnd = useCallback(\n (event: any) => {\n const activeType = event.active.data?.current?.type;\n switch (activeType) {\n case SORTABLE_LAYER_TYPE:\n onLayerDragEnd(event);\n break;\n case SORTABLE_EFFECT_TYPE:\n onEffectDragEnd(event);\n break;\n default:\n console.log(`activeType ${activeType} unknown`);\n }\n },\n [onLayerDragEnd, onEffectDragEnd],\n );\n\n return (\n <DndKitContext\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n modifiers={dndModifiers}\n >\n {children}\n {activeLayer ? (\n <DragOverlay modifiers={dndModifiers} dropAnimation={null}>\n <DragItem>\n <LayerPanelOverlay layer={activeLayer} datasets={datasets} />\n </DragItem>\n </DragOverlay>\n ) : null}\n </DndKitContext>\n );\n };\n\n return DndContext;\n}\n\nCustomDndContextFactory.deps = [LayerPanelHeaderFactory];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterPanelHeader.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAUzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,kBAAkB,EAAE,GAgBhC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"CustomFilterPanelHeader.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAUzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,kBAAkB,EAAE,GAgBhC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,CA2D5F"}
|
|
@@ -23,12 +23,12 @@ export const StyledFilterHeader = styled(StyledPanelHeader) `
|
|
|
23
23
|
export function CustomFilterPanelHeaderFactory() {
|
|
24
24
|
const FilterPanelHeader = ({ idx, children, className = '', datasets, filter, }) => {
|
|
25
25
|
const dispatchAction = useStoreWithKepler((state) => state.kepler.dispatchAction);
|
|
26
|
-
const mapId = useStoreWithKepler(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
const mapId = useStoreWithKepler((state) => Object.entries(state.kepler.map).find(([, mapState]) => Boolean(mapState?.visState?.filters?.some((f) => f.id === filter.id)))?.[0]);
|
|
27
|
+
const filterIdx = useStoreWithKepler((state) => mapId
|
|
28
|
+
? state.kepler.map[mapId]?.visState?.filters?.findIndex((f) => f.id === filter.id)
|
|
29
|
+
: undefined);
|
|
30
30
|
return (_jsxs(StyledFilterHeader, { className: cn('filter-panel__header gap-2', className), "$labelRCGColorValues": Object.values(datasets).map((d) => d.color), children: [_jsx("div", { className: "flex flex-1 overflow-hidden", children: children }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "hover:bg-foreground/10 h-8 w-8", onClick: () => {
|
|
31
|
-
if (filterIdx === undefined) {
|
|
31
|
+
if (!mapId || filterIdx === undefined) {
|
|
32
32
|
throw new Error('Filter index not found by id ${filter.id}');
|
|
33
33
|
}
|
|
34
34
|
return dispatchAction(mapId, removeFilter(filterIdx));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterPanelHeader.js","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,MAAM,EACN,EAAE,EACF,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,kBAAkB,GAAQ,MAAM,CAC3C,iBAAiB,CAClB,CAAyB;;;;;;;;;;IAUtB,CAAC,KAAK,EAAE,EAAE,CACV,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;IACjE,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK;IAClF,CAAC,CAAC,4BAA4B;CACnC,CAAC;AAWF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,GAAG,EACH,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,MAAM,GACiB,EAAE,EAAE;QAC3B,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,KAAK,GAAG,kBAAkB
|
|
1
|
+
{"version":3,"file":"CustomFilterPanelHeader.js","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,MAAM,EACN,EAAE,EACF,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,kBAAkB,GAAQ,MAAM,CAC3C,iBAAiB,CAClB,CAAyB;;;;;;;;;;IAUtB,CAAC,KAAK,EAAE,EAAE,CACV,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;IACjE,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK;IAClF,CAAC,CAAC,4BAA4B;CACnC,CAAC;AAWF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,GAAG,EACH,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,MAAM,GACiB,EAAE,EAAE;QAC3B,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,CAAC,KAAK,EAAE,EAAE,CACR,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CACrD,OAAO,CACL,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAC/B,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAClC,CACF,CACF,EAAE,CAAC,CAAC,CAAC,CACT,CAAC;QACF,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK;YACH,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CACnD,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAClC;YACH,CAAC,CAAC,SAAS,CACd,CAAC;QACF,OAAO,CACL,MAAC,kBAAkB,IACjB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,0BAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAC/C,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAC5B,aAED,cAAK,SAAS,EAAC,6BAA6B,YAAE,QAAQ,GAAO,EAC7D,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wCACtC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;oCAC/D,CAAC;oCACD,OAAO,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;gCACxD,CAAC,YAED,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,GACM,EACjB,KAAC,cAAc,gCAA+B,IACtC,IACS,CACtB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import {removeFilter} from '@kepler.gl/actions';\nimport {StyledPanelHeader, StyledPanelHeaderProps} from '@kepler.gl/components';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {Field, Filter, RGBColor} from '@kepler.gl/types';\nimport {createLinearGradient} from '@kepler.gl/utils';\nimport {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {Trash} from 'lucide-react';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\ninterface StyledFilterHeaderProps extends StyledPanelHeaderProps {\n $labelRCGColorValues: RGBColor[];\n}\n\nexport const StyledFilterHeader: any = styled(\n StyledPanelHeader,\n)<StyledFilterHeaderProps>`\n cursor: pointer;\n padding: 10px 12px;\n\n .field-selector {\n width: 100%;\n flex: 2;\n }\n\n border-left: 3px solid;\n ${(props) =>\n props.$labelRCGColorValues && props.$labelRCGColorValues.length > 0\n ? `border-image: ${createLinearGradient('bottom', props.$labelRCGColorValues)} 3;`\n : 'border-color: transparent;'};\n`;\n\nexport type FilterPanelHeaderProps = {\n className?: string;\n datasets: KeplerTable[];\n filter: Filter;\n allAvailableFields?: Field[];\n idx?: number;\n children: React.ReactNode;\n};\n\nexport function CustomFilterPanelHeaderFactory(): React.ComponentType<FilterPanelHeaderProps> {\n const FilterPanelHeader: React.FC<FilterPanelHeaderProps> = ({\n idx,\n children,\n className = '',\n datasets,\n filter,\n }: FilterPanelHeaderProps) => {\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const mapId = useStoreWithKepler(\n (state) =>\n Object.entries(state.kepler.map).find(([, mapState]) =>\n Boolean(\n mapState?.visState?.filters?.some(\n (f: Filter) => f.id === filter.id,\n ),\n ),\n )?.[0],\n );\n const filterIdx = useStoreWithKepler((state) =>\n mapId\n ? state.kepler.map[mapId]?.visState?.filters?.findIndex(\n (f: Filter) => f.id === filter.id,\n )\n : undefined,\n );\n return (\n <StyledFilterHeader\n className={cn('filter-panel__header gap-2', className)}\n $labelRCGColorValues={Object.values(datasets).map(\n (d: KeplerTable) => d.color,\n )}\n >\n <div className=\"flex flex-1 overflow-hidden\">{children}</div>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"hover:bg-foreground/10 h-8 w-8\"\n onClick={() => {\n if (!mapId || filterIdx === undefined) {\n throw new Error('Filter index not found by id ${filter.id}');\n }\n return dispatchAction(mapId, removeFilter(filterIdx));\n }}\n >\n <Trash className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Delete Filter</TooltipContent>\n </Tooltip>\n </StyledFilterHeader>\n );\n };\n\n return FilterPanelHeader;\n}\n"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { LayerLegendContentFactory, LayerLegendHeaderFactory } from '@kepler.gl/components';
|
|
2
2
|
import { MapLegendProps } from '@kepler.gl/components/dist/map/map-legend';
|
|
3
|
-
export declare function CustomMapLegendFactory(LayerLegendHeader: ReturnType<typeof LayerLegendHeaderFactory>, LayerLegendContent: ReturnType<typeof LayerLegendContentFactory>): import("react").FC<MapLegendProps
|
|
3
|
+
export declare function CustomMapLegendFactory(LayerLegendHeader: ReturnType<typeof LayerLegendHeaderFactory>, LayerLegendContent: ReturnType<typeof LayerLegendContentFactory>): import("react").FC<MapLegendProps & {
|
|
4
|
+
mapIndex?: number;
|
|
5
|
+
onClose?: () => void;
|
|
6
|
+
}>;
|
|
4
7
|
export declare namespace CustomMapLegendFactory {
|
|
5
8
|
var deps: (typeof LayerLegendHeaderFactory | typeof LayerLegendContentFactory)[];
|
|
6
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMapLegend.d.ts","sourceRoot":"","sources":["../../src/components/CustomMapLegend.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomMapLegend.d.ts","sourceRoot":"","sources":["../../src/components/CustomMapLegend.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,2CAA2C,CAAC;AAiCzE,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAC9D,kBAAkB,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC;eAGjC,MAAM;cAAY,MAAM,IAAI;GAuK5D;yBA5Ke,sBAAsB"}
|
|
@@ -8,6 +8,7 @@ import { Button } from '@sqlrooms/ui';
|
|
|
8
8
|
import { ArrowDown, ArrowRight, ChevronDownIcon, ChevronRightIcon, XIcon, } from 'lucide-react';
|
|
9
9
|
import { useCallback, useContext, useRef, useState, } from 'react';
|
|
10
10
|
import { useStoreWithKepler } from '../KeplerSlice';
|
|
11
|
+
import { SplitMapIndexContext } from './SplitMapIndexContext';
|
|
11
12
|
const defaultActionIcons = {
|
|
12
13
|
expanded: ArrowDown,
|
|
13
14
|
collapsed: ArrowRight,
|
|
@@ -17,17 +18,26 @@ CustomMapLegendFactory.deps = [
|
|
|
17
18
|
LayerLegendContentFactory,
|
|
18
19
|
];
|
|
19
20
|
export function CustomMapLegendFactory(LayerLegendHeader, LayerLegendContent) {
|
|
20
|
-
const MapLegend = ({ layers = [], width, isExport, ...restProps }) => {
|
|
21
|
+
const MapLegend = ({ layers = [], width, isExport, mapIndex: mapIndexProp, onClose, ...restProps }) => {
|
|
21
22
|
const containerW = width || DIMENSIONS.mapControl.width;
|
|
22
23
|
const mapId = useContext(KeplerGlContext).id;
|
|
24
|
+
const splitMapIndex = useContext(SplitMapIndexContext);
|
|
25
|
+
const mapIndex = mapIndexProp ?? splitMapIndex;
|
|
23
26
|
const dispatchAction = useStoreWithKepler((state) => state.kepler.dispatchAction);
|
|
27
|
+
const splitMaps = useStoreWithKepler((state) => state.kepler.map[mapId]?.visState?.splitMaps);
|
|
24
28
|
const handleClose = (evt) => {
|
|
25
29
|
evt.stopPropagation();
|
|
26
|
-
|
|
30
|
+
if (onClose) {
|
|
31
|
+
onClose();
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
dispatchAction(mapId, toggleMapControl('mapLegend', 0));
|
|
35
|
+
}
|
|
27
36
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
const isSplit = splitMaps && splitMaps.length > 1;
|
|
38
|
+
const panelLayers = isSplit && mapIndex != null ? splitMaps[mapIndex]?.layers : undefined;
|
|
39
|
+
const visibleLayers = layers.filter((layer) => layer.config.isVisible && (!panelLayers || panelLayers[layer.id]));
|
|
40
|
+
return (_jsx("div", { className: "map-legend border-border border", style: { width: containerW }, children: _jsxs("div", { className: "relative flex flex-col", children: [!isExport && (_jsxs("div", { className: "border-muted bg-background sticky top-0 flex w-full items-center justify-between border-b p-2", children: [_jsx("div", { className: "text-xs font-medium", children: "Legend" }), _jsx(Button, { variant: "ghost", size: "xs", className: "h-6 w-6", onClick: handleClose, children: _jsx(XIcon, { className: "h-4 w-4" }) })] })), _jsx("div", { className: "flex w-full flex-1 flex-col items-center", children: visibleLayers.map((layer, index) => {
|
|
31
41
|
return (_jsx(LayerLegendItem, { layer: layer, containerW: containerW, isExport: isExport, ...restProps }, index));
|
|
32
42
|
}) })] }) }));
|
|
33
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMapLegend.js","sourceRoot":"","sources":["../../src/components/CustomMapLegend.tsx"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,kDAAkD;AAElD,OAAO,EAAoB,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,gBAAgB,EAGhB,KAAK,GACN,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAElD,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,UAAU;CACtB,CAAC;AAEF,sBAAsB,CAAC,IAAI,GAAG;IAC5B,wBAAwB;IACxB,yBAAyB;CAC1B,CAAC;AAEF,MAAM,UAAU,sBAAsB,CACpC,iBAA8D,EAC9D,kBAAgE;IAEhE,MAAM,SAAS,GAA6B,CAAC,EAC3C,MAAM,GAAG,EAAE,EACX,KAAK,EACL,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,EAAE;QACH,MAAM,UAAU,GAAG,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAwC,EAAE,EAAE;YAC/D,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;QAEF,OAAO,CACL,cACE,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,YAE1B,eAAK,SAAS,EAAC,wBAAwB,aACpC,CAAC,QAAQ,IAAI,CACZ,eAAK,SAAS,EAAC,+FAA+F,aAC5G,cAAK,SAAS,EAAC,qBAAqB,uBAAa,EACjD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,WAAW,YAEpB,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,IACL,CACP,EACD,cAAK,SAAS,EAAC,0CAA0C,YACtD,MAAM;6BACJ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;6BACzC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;4BACpB,OAAO,CACL,KAAC,eAAe,IAEd,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,KACd,SAAS,IAJR,KAAK,CAKV,CACH,CAAC;wBACJ,CAAC,CAAC,GACA,IACF,GACF,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,EACvB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,sBAAsB,GAC8B,EAAE,EAAE;QACxD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAErE,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC;oBACnC,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,oBAAoB,GAAmC,CAAC,GAAG,EAAE,EAAE;YACnE,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;YACjC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,eACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAC,yDAAyD,aAEnE,0BAAQ,2EAA2E,GAAS,EAC5F,eACE,SAAS,EAAC,yCAAyC,EACnD,OAAO,EAAE,oBAAoB,aAE7B,cAAK,SAAS,EAAC,qGAAqG,YACjH,KAAK,CAAC,MAAM,CAAC,KAAK,GACf,EACN,cAAK,SAAS,EAAC,QAAQ,GAAG,EAC1B,cAAK,SAAS,EAAC,8CAA8C,YAC3D,KAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,oBAAoB,YAE5B,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,eAAe,IAAC,SAAS,EAAC,SAAS,GAAG,CACxC,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,SAAS,EAAC,SAAS,GAAG,CACzC,GACM,GACL,IACF,EAEL,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,kBAAkB,IACjB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,sBAAsB,EAC9C,WAAW,EAAE,kBAAkB,GAC/B,GACE,CACP,IACG,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IAEpC,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {layerConfigChange, toggleMapControl} from '@kepler.gl/actions';\nimport {\n KeplerGlContext,\n LayerLegendContentFactory,\n LayerLegendHeaderFactory,\n} from '@kepler.gl/components';\nimport {MapLegendProps} from '@kepler.gl/components/dist/map/map-legend';\nimport {DIMENSIONS} from '@kepler.gl/constants';\nimport {Layer} from '@kepler.gl/layers';\nimport {Button} from '@sqlrooms/ui';\nimport {\n ArrowDown,\n ArrowRight,\n ChevronDownIcon,\n ChevronRightIcon,\n EyeIcon,\n EyeOffIcon,\n XIcon,\n} from 'lucide-react';\nimport {\n MouseEventHandler,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\nconst defaultActionIcons = {\n expanded: ArrowDown,\n collapsed: ArrowRight,\n};\n\nCustomMapLegendFactory.deps = [\n LayerLegendHeaderFactory,\n LayerLegendContentFactory,\n];\n\nexport function CustomMapLegendFactory(\n LayerLegendHeader: ReturnType<typeof LayerLegendHeaderFactory>,\n LayerLegendContent: ReturnType<typeof LayerLegendContentFactory>,\n) {\n const MapLegend: React.FC<MapLegendProps> = ({\n layers = [],\n width,\n isExport,\n ...restProps\n }) => {\n const containerW = width || DIMENSIONS.mapControl.width;\n const mapId = useContext(KeplerGlContext).id;\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const handleClose = (evt: React.MouseEvent<HTMLButtonElement>) => {\n evt.stopPropagation();\n dispatchAction(mapId, toggleMapControl('mapLegend', 0));\n };\n\n return (\n <div\n className=\"map-legend border-border border\"\n style={{width: containerW}}\n >\n <div className=\"relative flex flex-col\">\n {!isExport && (\n <div className=\"border-muted bg-background sticky top-0 flex w-full items-center justify-between border-b p-2\">\n <div className=\"text-xs font-medium\">Legend</div>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"h-6 w-6\"\n onClick={handleClose}\n >\n <XIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n <div className=\"flex w-full flex-1 flex-col items-center\">\n {layers\n .filter((layer) => layer.config.isVisible)\n .map((layer, index) => {\n return (\n <LayerLegendItem\n key={index}\n layer={layer}\n containerW={containerW}\n isExport={isExport}\n {...restProps}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n };\n\n const LayerLegendItem = ({\n layer,\n containerW,\n isExport,\n mapState,\n disableEdit,\n onLayerVisConfigChange,\n }: {layer: Layer; containerW: number} & MapLegendProps) => {\n const [isExpanded, setIsExpanded] = useState(layer.config.isVisible);\n\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const scrollIntoView = useCallback(() => {\n requestAnimationFrame(() => {\n containerRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n });\n }, []);\n\n const handleToggleExpanded: MouseEventHandler<HTMLElement> = (evt) => {\n evt.stopPropagation();\n const nextExpanded = !isExpanded;\n setIsExpanded(nextExpanded);\n if (!isExpanded) {\n scrollIntoView();\n }\n };\n\n const mapId = useContext(KeplerGlContext).id;\n const containerRef = useRef<HTMLDivElement>(null);\n\n if (!layer.isValidToSave() || layer.config.hidden) {\n return null;\n }\n\n if (isExport && !layer.config.isVisible) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n className=\"border-muted flex w-full flex-col items-center border-b\"\n >\n <style>{`.legend--layer__item .panel--header__action { display: none !important; }`}</style>\n <div\n className=\"flex w-full flex-row items-center gap-2\"\n onClick={handleToggleExpanded}\n >\n <div className=\"cursor-pointer items-center overflow-hidden p-2 text-xs text-ellipsis whitespace-nowrap select-none\">\n {layer.config.label}\n </div>\n <div className=\"flex-1\" />\n <div className=\"flex flex-row items-center justify-end gap-1\">\n <Button\n className=\"h-7 w-7\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleToggleExpanded}\n >\n {isExpanded ? (\n <ChevronDownIcon className=\"h-4 w-4\" />\n ) : (\n <ChevronRightIcon className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n\n {isExpanded && (\n <div className=\"w-full px-[8px] py-[5px] text-xs\">\n <LayerLegendContent\n containerW={containerW}\n layer={layer}\n mapState={mapState}\n disableEdit={disableEdit}\n isExport={isExport}\n onLayerVisConfigChange={onLayerVisConfigChange}\n actionIcons={defaultActionIcons}\n />\n </div>\n )}\n </div>\n );\n };\n\n MapLegend.displayName = 'MapLegend';\n\n return MapLegend;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CustomMapLegend.js","sourceRoot":"","sources":["../../src/components/CustomMapLegend.tsx"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {layerConfigChange, toggleMapControl} from '@kepler.gl/actions';\nimport {\n KeplerGlContext,\n LayerLegendContentFactory,\n LayerLegendHeaderFactory,\n} from '@kepler.gl/components';\nimport {MapLegendProps} from '@kepler.gl/components/dist/map/map-legend';\nimport {DIMENSIONS} from '@kepler.gl/constants';\nimport {Layer} from '@kepler.gl/layers';\nimport {Button} from '@sqlrooms/ui';\nimport {\n ArrowDown,\n ArrowRight,\n ChevronDownIcon,\n ChevronRightIcon,\n EyeIcon,\n EyeOffIcon,\n XIcon,\n} from 'lucide-react';\nimport {\n MouseEventHandler,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport {useStoreWithKepler} from '../KeplerSlice';\nimport {SplitMapIndexContext} from './SplitMapIndexContext';\n\nconst defaultActionIcons = {\n expanded: ArrowDown,\n collapsed: ArrowRight,\n};\n\nCustomMapLegendFactory.deps = [\n LayerLegendHeaderFactory,\n LayerLegendContentFactory,\n];\n\nexport function CustomMapLegendFactory(\n LayerLegendHeader: ReturnType<typeof LayerLegendHeaderFactory>,\n LayerLegendContent: ReturnType<typeof LayerLegendContentFactory>,\n) {\n const MapLegend: React.FC<\n MapLegendProps & {mapIndex?: number; onClose?: () => void}\n > = ({\n layers = [],\n width,\n isExport,\n mapIndex: mapIndexProp,\n onClose,\n ...restProps\n }) => {\n const containerW = width || DIMENSIONS.mapControl.width;\n const mapId = useContext(KeplerGlContext).id;\n const splitMapIndex = useContext(SplitMapIndexContext);\n const mapIndex = mapIndexProp ?? splitMapIndex;\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const splitMaps = useStoreWithKepler(\n (state) => state.kepler.map[mapId]?.visState?.splitMaps,\n );\n const handleClose = (evt: React.MouseEvent<HTMLButtonElement>) => {\n evt.stopPropagation();\n if (onClose) {\n onClose();\n } else {\n dispatchAction(mapId, toggleMapControl('mapLegend', 0));\n }\n };\n\n const isSplit = splitMaps && splitMaps.length > 1;\n const panelLayers =\n isSplit && mapIndex != null ? splitMaps[mapIndex]?.layers : undefined;\n\n const visibleLayers = layers.filter(\n (layer) =>\n layer.config.isVisible && (!panelLayers || panelLayers[layer.id]),\n );\n\n return (\n <div\n className=\"map-legend border-border border\"\n style={{width: containerW}}\n >\n <div className=\"relative flex flex-col\">\n {!isExport && (\n <div className=\"border-muted bg-background sticky top-0 flex w-full items-center justify-between border-b p-2\">\n <div className=\"text-xs font-medium\">Legend</div>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"h-6 w-6\"\n onClick={handleClose}\n >\n <XIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n <div className=\"flex w-full flex-1 flex-col items-center\">\n {visibleLayers.map((layer, index) => {\n return (\n <LayerLegendItem\n key={index}\n layer={layer}\n containerW={containerW}\n isExport={isExport}\n {...restProps}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n };\n\n const LayerLegendItem = ({\n layer,\n containerW,\n isExport,\n mapState,\n disableEdit,\n onLayerVisConfigChange,\n }: {layer: Layer; containerW: number} & MapLegendProps) => {\n const [isExpanded, setIsExpanded] = useState(layer.config.isVisible);\n\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const scrollIntoView = useCallback(() => {\n requestAnimationFrame(() => {\n containerRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n });\n }, []);\n\n const handleToggleExpanded: MouseEventHandler<HTMLElement> = (evt) => {\n evt.stopPropagation();\n const nextExpanded = !isExpanded;\n setIsExpanded(nextExpanded);\n if (!isExpanded) {\n scrollIntoView();\n }\n };\n\n const mapId = useContext(KeplerGlContext).id;\n const containerRef = useRef<HTMLDivElement>(null);\n\n if (!layer.isValidToSave() || layer.config.hidden) {\n return null;\n }\n\n if (isExport && !layer.config.isVisible) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n className=\"border-muted flex w-full flex-col items-center border-b\"\n >\n <style>{`.legend--layer__item .panel--header__action { display: none !important; }`}</style>\n <div\n className=\"flex w-full flex-row items-center gap-2\"\n onClick={handleToggleExpanded}\n >\n <div className=\"cursor-pointer items-center overflow-hidden p-2 text-xs text-ellipsis whitespace-nowrap select-none\">\n {layer.config.label}\n </div>\n <div className=\"flex-1\" />\n <div className=\"flex flex-row items-center justify-end gap-1\">\n <Button\n className=\"h-7 w-7\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleToggleExpanded}\n >\n {isExpanded ? (\n <ChevronDownIcon className=\"h-4 w-4\" />\n ) : (\n <ChevronRightIcon className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n\n {isExpanded && (\n <div className=\"w-full px-[8px] py-[5px] text-xs\">\n <LayerLegendContent\n containerW={containerW}\n layer={layer}\n mapState={mapState}\n disableEdit={disableEdit}\n isExport={isExport}\n onLayerVisConfigChange={onLayerVisConfigChange}\n actionIcons={defaultActionIcons}\n />\n </div>\n )}\n </div>\n );\n };\n\n MapLegend.displayName = 'MapLegend';\n\n return MapLegend;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MapLegendPanelFactory } from '@kepler.gl/components';
|
|
2
|
-
export declare function CustomMapLegendPanelFactory(
|
|
1
|
+
import { MapControlPanelFactory, MapControlTooltipFactory, MapLegendFactory, MapLegendPanelFactory } from '@kepler.gl/components';
|
|
2
|
+
export declare function CustomMapLegendPanelFactory(MapControlTooltip: ReturnType<typeof MapControlTooltipFactory>, MapControlPanel: ReturnType<typeof MapControlPanelFactory>, MapLegend: ReturnType<typeof MapLegendFactory>): ReturnType<typeof MapLegendPanelFactory>;
|
|
3
3
|
export declare namespace CustomMapLegendPanelFactory {
|
|
4
|
-
var deps: (typeof
|
|
4
|
+
var deps: (typeof MapControlTooltipFactory | typeof MapControlPanelFactory | typeof MapLegendFactory)[];
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=CustomMapLegendPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMapLegendPanel.d.ts","sourceRoot":"","sources":["../../src/components/CustomMapLegendPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomMapLegendPanel.d.ts","sourceRoot":"","sources":["../../src/components/CustomMapLegendPanel.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAI/B,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAC9D,eAAe,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAC1D,SAAS,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC7C,UAAU,CAAC,OAAO,qBAAqB,CAAC,CA0E1C;yBA9Ee,2BAA2B"}
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
import { Icons, MapControlButton, MapLegendPanelFactory, } from '@kepler.gl/components';
|
|
3
4
|
CustomMapLegendPanelFactory.deps = MapLegendPanelFactory.deps;
|
|
4
|
-
export function CustomMapLegendPanelFactory(
|
|
5
|
-
const
|
|
5
|
+
export function CustomMapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend) {
|
|
6
|
+
const OriginalMapLegendPanel = MapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend);
|
|
7
|
+
const SplitPaneLegend = (props) => {
|
|
8
|
+
const [isActive, setIsActive] = useState(false);
|
|
9
|
+
const mapLegend = props.mapControls?.mapLegend;
|
|
10
|
+
const toggleLegend = useCallback((e) => {
|
|
11
|
+
e?.preventDefault();
|
|
12
|
+
setIsActive((prev) => !prev);
|
|
13
|
+
}, []);
|
|
14
|
+
if (!mapLegend?.show)
|
|
15
|
+
return null;
|
|
16
|
+
return isActive ? (_jsxs(_Fragment, { children: [_jsx("style", { children: `.split-legend .map-control__panel-header { display: none !important; }` }), _jsx("div", { className: "split-legend", children: _jsx(MapControlPanel, { scale: props.scale, header: "header.layerLegend", onClick: toggleLegend, pinnable: false, disableClose: false, isExport: props.isExport, logoComponent: props.logoComponent, children: _jsx(MapLegend, { layers: props.layers, mapState: props.mapState, disableEdit: mapLegend.disableEdit, isExport: props.isExport, onLayerVisConfigChange: props.onLayerVisConfigChange, onToggleLayerVisibility: props.onToggleLayerVisibility, ...{ onClose: toggleLegend } }) }) })] })) : (_jsx(MapControlTooltip, { id: "show-legend", message: "tooltip.showLegend", children: _jsx(MapControlButton, { className: "map-control-button show-legend", onClick: toggleLegend, children: _jsx(Icons.Legend, { height: "22px" }) }) }));
|
|
17
|
+
};
|
|
6
18
|
const CustomMapLegendPanel = (props) => {
|
|
7
|
-
|
|
19
|
+
if (props.isSplit) {
|
|
20
|
+
return _jsx(SplitPaneLegend, { ...props });
|
|
21
|
+
}
|
|
22
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { children: `.draggable-legend .map-control__panel-header { display: none !important; }` }), _jsx(OriginalMapLegendPanel, { ...props })] }));
|
|
8
23
|
};
|
|
9
24
|
CustomMapLegendPanel.displayName = 'CustomMapLegendPanel';
|
|
10
25
|
return CustomMapLegendPanel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMapLegendPanel.js","sourceRoot":"","sources":["../../src/components/CustomMapLegendPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAE/B,2BAA2B,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAE9D,MAAM,UAAU,2BAA2B,CACzC,
|
|
1
|
+
{"version":3,"file":"CustomMapLegendPanel.js","sourceRoot":"","sources":["../../src/components/CustomMapLegendPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EACL,KAAK,EACL,gBAAgB,EAIhB,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAE/B,2BAA2B,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAE9D,MAAM,UAAU,2BAA2B,CACzC,iBAA8D,EAC9D,eAA0D,EAC1D,SAA8C;IAE9C,MAAM,sBAAsB,GAAG,qBAAqB,CAClD,iBAAiB,EACjB,eAAe,EACf,SAAS,CACV,CAAC;IAEF,MAAM,eAAe,GAAG,CACtB,KAAgD,EAChD,EAAE;QACF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC;QAE/C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAoB,EAAE,EAAE;YACxD,CAAC,EAAE,cAAc,EAAE,CAAC;YACpB,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC,SAAS,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC;QAElC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAChB,8BACE,0BAAQ,wEAAwE,GAAS,EACzF,cAAK,SAAS,EAAC,cAAc,YAC3B,KAAC,eAAe,IACd,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAC,oBAAoB,EAC3B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,KAAK,EACf,YAAY,EAAE,KAAK,EACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,aAAa,EAAE,KAAK,CAAC,aAAa,YAElC,KAAC,SAAS,IACR,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,WAAW,EAAE,SAAS,CAAC,WAAW,EAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EACpD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,KACjD,EAAC,OAAO,EAAE,YAAY,EAAS,GACpC,GACc,GACd,IACL,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAAC,EAAE,EAAC,aAAa,EAAC,OAAO,EAAC,oBAAoB,YAC9D,KAAC,gBAAgB,IACf,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,YAAY,YAErB,KAAC,KAAK,CAAC,MAAM,IAAC,MAAM,EAAC,MAAM,GAAG,GACb,GACD,CACrB,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAC3B,KAAmE,EACnE,EAAE;QACF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,KAAC,eAAe,OAAK,KAAK,GAAI,CAAC;QACxC,CAAC;QAED,OAAO,CACL,8BACE,0BAAQ,4EAA4E,GAAS,EAC7F,KAAC,sBAAsB,OAAK,KAAK,GAAI,IACpC,CACJ,CAAC;IACJ,CAAC,CAAC;IAEF,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAC1D,OAAO,oBAAoB,CAAC;AAC9B,CAAC","sourcesContent":["import {useCallback, useState} from 'react';\nimport {\n Icons,\n MapControlButton,\n MapControlPanelFactory,\n MapControlTooltipFactory,\n MapLegendFactory,\n MapLegendPanelFactory,\n MapLegendPanelProps,\n} from '@kepler.gl/components';\n\nCustomMapLegendPanelFactory.deps = MapLegendPanelFactory.deps;\n\nexport function CustomMapLegendPanelFactory(\n MapControlTooltip: ReturnType<typeof MapControlTooltipFactory>,\n MapControlPanel: ReturnType<typeof MapControlPanelFactory>,\n MapLegend: ReturnType<typeof MapLegendFactory>,\n): ReturnType<typeof MapLegendPanelFactory> {\n const OriginalMapLegendPanel = MapLegendPanelFactory(\n MapControlTooltip,\n MapControlPanel,\n MapLegend,\n );\n\n const SplitPaneLegend = (\n props: MapLegendPanelProps & {mapIndex?: number},\n ) => {\n const [isActive, setIsActive] = useState(false);\n const mapLegend = props.mapControls?.mapLegend;\n\n const toggleLegend = useCallback((e?: React.MouseEvent) => {\n e?.preventDefault();\n setIsActive((prev) => !prev);\n }, []);\n\n if (!mapLegend?.show) return null;\n\n return isActive ? (\n <>\n <style>{`.split-legend .map-control__panel-header { display: none !important; }`}</style>\n <div className=\"split-legend\">\n <MapControlPanel\n scale={props.scale}\n header=\"header.layerLegend\"\n onClick={toggleLegend}\n pinnable={false}\n disableClose={false}\n isExport={props.isExport}\n logoComponent={props.logoComponent}\n >\n <MapLegend\n layers={props.layers}\n mapState={props.mapState}\n disableEdit={mapLegend.disableEdit}\n isExport={props.isExport}\n onLayerVisConfigChange={props.onLayerVisConfigChange}\n onToggleLayerVisibility={props.onToggleLayerVisibility}\n {...({onClose: toggleLegend} as any)}\n />\n </MapControlPanel>\n </div>\n </>\n ) : (\n <MapControlTooltip id=\"show-legend\" message=\"tooltip.showLegend\">\n <MapControlButton\n className=\"map-control-button show-legend\"\n onClick={toggleLegend}\n >\n <Icons.Legend height=\"22px\" />\n </MapControlButton>\n </MapControlTooltip>\n );\n };\n\n const CustomMapLegendPanel = (\n props: MapLegendPanelProps & {mapIndex?: number; isSplit?: boolean},\n ) => {\n if (props.isSplit) {\n return <SplitPaneLegend {...props} />;\n }\n\n return (\n <>\n <style>{`.draggable-legend .map-control__panel-header { display: none !important; }`}</style>\n <OriginalMapLegendPanel {...props} />\n </>\n );\n };\n\n CustomMapLegendPanel.displayName = 'CustomMapLegendPanel';\n return CustomMapLegendPanel;\n}\n"]}
|