@marimo-team/frontend 0.23.7-dev55 → 0.23.7-dev57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{CellStatus-DXNmZJpi.js → CellStatus-DGBvmSvq.js} +1 -1
- package/dist/assets/JsonOutput-BEbyS3oG.js +53 -0
- package/dist/assets/{LazyAnyLanguageCodeMirror-B2pl_WA3.js → LazyAnyLanguageCodeMirror-GdhQ07zA.js} +2 -2
- package/dist/assets/{MarimoErrorOutput-YGhIA85d.js → MarimoErrorOutput-XWqnhvJ6.js} +1 -1
- package/dist/assets/{RenderHTML-Dz1OIbOh.js → RenderHTML-B5r25cP5.js} +1 -1
- package/dist/assets/{RunButton-D1IZ1Yr0.js → RunButton-Dbak5hfa.js} +1 -1
- package/dist/assets/{add-cell-with-ai-hIPYl46r.js → add-cell-with-ai-BbZkMqv2.js} +1 -1
- package/dist/assets/{add-connection-dialog-CMR-c9XE.js → add-connection-dialog-Cw6_iYno.js} +1 -1
- package/dist/assets/{agent-panel-DnBAoLsM.js → agent-panel-StLA6gDR.js} +1 -1
- package/dist/assets/{ai-model-dropdown-zvokTxf_.js → ai-model-dropdown-CjhUqXgj.js} +1 -1
- package/dist/assets/{any-language-editor-BgxVFHQ8.js → any-language-editor-Bdhmwznp.js} +1 -1
- package/dist/assets/{app-config-button-BjFAqaTN.js → app-config-button-CCs8Jepz.js} +1 -1
- package/dist/assets/{cell-editor-Dak_jwhB.js → cell-editor-Cgyoqdi5.js} +1 -1
- package/dist/assets/{cell-link-pRI-YfIp.js → cell-link-PQYiMZw1.js} +1 -1
- package/dist/assets/{cells-DbE28H1u.js → cells-Dnu4nDoy.js} +1 -1
- package/dist/assets/{chat-display-D_nDPZek.js → chat-display-DetTBnqK.js} +1 -1
- package/dist/assets/{chat-panel-BktSpl2P.js → chat-panel-CEgw_vg0.js} +1 -1
- package/dist/assets/{chat-ui-C0_KcXrv.js → chat-ui-D-Y7p_cT.js} +1 -1
- package/dist/assets/{chunk-5FQGJX7Z-DILIU9Rm.js → chunk-5FQGJX7Z-BSzccEgu.js} +3 -3
- package/dist/assets/{code-block-37QAKDTI-Bgm-HPiB.js → code-block-37QAKDTI-U2R1jyOo.js} +1 -1
- package/dist/assets/{column-preview-CNeXQtKn.js → column-preview-DA6nf5_Q.js} +1 -1
- package/dist/assets/{command-palette-CcjZs_TG.js → command-palette-n_e11WBA.js} +1 -1
- package/dist/assets/{common-CWRr25jC.js → common-BaBE_ygg.js} +1 -1
- package/dist/assets/{components-DUd0ki0p.js → components-CvGaLA5d.js} +1 -1
- package/dist/assets/{components-Cj3Al1Y6.js → components-zB5yT_R8.js} +1 -1
- package/dist/assets/config-C2lTvbuU.js +1 -0
- package/dist/assets/{datasource-Prn_GWOB.js → datasource-I-LOgxeP.js} +1 -1
- package/dist/assets/{dependency-graph-panel-DUUCij85.js → dependency-graph-panel-BjOeXp74.js} +1 -1
- package/dist/assets/{dist-DxnNQmQo.js → dist-CW3rweKM.js} +1 -1
- package/dist/assets/{documentation-panel-CB8xalFX.js → documentation-panel-DMdFXuBf.js} +1 -1
- package/dist/assets/{download-DEJbA1IY.js → download-BO6T2USS.js} +1 -1
- package/dist/assets/{edit-page-BkHYt2if.js → edit-page-Dos8zz_9.js} +6 -6
- package/dist/assets/{error-panel-DG6AtqLR.js → error-panel-iXznkJZ1.js} +1 -1
- package/dist/assets/{file-explorer-panel-Co6MlwYD.js → file-explorer-panel-_77UepGi.js} +3 -3
- package/dist/assets/{file-icons-BjTIuMQg.js → file-icons-B6DaZdP0.js} +1 -1
- package/dist/assets/{file-name-input-CQVbWhL8.js → file-name-input-g2H2sY2h.js} +1 -1
- package/dist/assets/{floating-outline-uy6dAsIe.js → floating-outline-DbOtUfo-.js} +1 -1
- package/dist/assets/{focus-0RBjdtZw.js → focus-BaOnnMs-.js} +1 -1
- package/dist/assets/{form-DNa2VnwU.js → form-CM8vYbSt.js} +1 -1
- package/dist/assets/{globals-DI5QlXvl.js → globals-CpVAcN9Z.js} +1 -1
- package/dist/assets/{home-page-BSuXANlw.js → home-page-De1W6q6f.js} +1 -1
- package/dist/assets/{hooks-B7pYZHjF.js → hooks-7OHHugrQ.js} +1 -1
- package/dist/assets/{html-to-image-CIu-0LbU.js → html-to-image-D6SgvARi.js} +1 -1
- package/dist/assets/index-1EIgCVR_.js +38 -0
- package/dist/assets/{kiosk-mode-Ch75k65P.js → kiosk-mode-Czvj3vmL.js} +1 -1
- package/dist/assets/{layout-DFhJt7oJ.js → layout-DQGNHEpb.js} +5 -5
- package/dist/assets/{logs-panel-DR-1BC0S.js → logs-panel-BMAfoMJg.js} +1 -1
- package/dist/assets/{markdown-renderer-DGqYztXR.js → markdown-renderer-BQ-BQLiJ.js} +3 -3
- package/dist/assets/mermaid-4DMBBIKO-C0OyyVdo.js +1 -0
- package/dist/assets/{name-cell-input-DwfyLq31.js → name-cell-input-bwfAyC0i.js} +1 -1
- package/dist/assets/{outline-panel-CWunrooQ.js → outline-panel-CkZUQcZ1.js} +1 -1
- package/dist/assets/{packages-panel-BdcXUFQJ.js → packages-panel-B3dRYuRM.js} +1 -1
- package/dist/assets/panels-DvIOAb34.js +1 -0
- package/dist/assets/{process-output-CS4QGJvL.js → process-output-9W-JyYdE.js} +1 -1
- package/dist/assets/{radio-group-BS2PIEzV.js → radio-group-rsi1ibXY.js} +1 -1
- package/dist/assets/{readonly-python-code-C5JNX2fu.js → readonly-python-code-BKYj8PNf.js} +1 -1
- package/dist/assets/{reveal-component-PiSHIrbA.js → reveal-component-ClM8W-TD.js} +1 -1
- package/dist/assets/{run-page-BovrPK0f.js → run-page-DJOwAe2z.js} +1 -1
- package/dist/assets/{scratchpad-panel-CAWFveBD.js → scratchpad-panel-CpM3jVv7.js} +1 -1
- package/dist/assets/{secrets-panel-CEh4Wjfn.js → secrets-panel-DqHGq3V8.js} +1 -1
- package/dist/assets/{session-panel-BR9h5w96.js → session-panel-jVcSUURP.js} +1 -1
- package/dist/assets/{snippets-panel-Y2etH9Qg.js → snippets-panel-DFJd1ui5.js} +1 -1
- package/dist/assets/{state-Fa6RzVTL.js → state-BXNNuw9g.js} +1 -1
- package/dist/assets/{state-1SbOXCLX.js → state-D9EoHCkz.js} +1 -1
- package/dist/assets/{switch-CTn-kJzM.js → switch-BtkQp293.js} +1 -1
- package/dist/assets/{terminal-DI2XRUUH.js → terminal-BSE1Vg5d.js} +1 -1
- package/dist/assets/{textarea-wgoQLrBS.js → textarea-BBTcSr-i.js} +1 -1
- package/dist/assets/{tracing-C9PZ0Pr1.js → tracing-BQU8fBDM.js} +1 -1
- package/dist/assets/{tracing-panel-C20Rk6hU.js → tracing-panel-DEVpyGX3.js} +2 -2
- package/dist/assets/useBoolean-B8LMGUHl.js +1 -0
- package/dist/assets/{useCellActionButton-D_-iAhme.js → useCellActionButton-CpNJthj4.js} +1 -1
- package/dist/assets/{useDeleteCell-41mvwiyA.js → useDeleteCell-DFahVcdW.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-ELdrL73c.js → useDependencyPanelTab-BNbEyT1o.js} +1 -1
- package/dist/assets/{useNotebookActions-CgN-58GN.js → useNotebookActions-DqlAe4Ea.js} +1 -1
- package/dist/assets/{useRunCells-CfHlqXY6.js → useRunCells-C0BPo9m1.js} +1 -1
- package/dist/assets/{useSplitCell-gHtyz873.js → useSplitCell-BN53wD86.js} +1 -1
- package/dist/assets/{vega-component-BPU1T-x7.js → vega-component-C9fDGx86.js} +1 -1
- package/dist/assets/{write-secret-modal-DjVzKit_.js → write-secret-modal-Liv_9MXS.js} +1 -1
- package/dist/index.html +40 -40
- package/package.json +1 -1
- package/src/components/data-table/__tests__/column-header.test.tsx +106 -1
- package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +88 -2
- package/src/components/data-table/__tests__/filters.test.ts +84 -13
- package/src/components/data-table/column-header.tsx +152 -26
- package/src/components/data-table/date-filter-inputs.tsx +325 -0
- package/src/components/data-table/filter-pill-editor.tsx +139 -30
- package/src/components/data-table/filter-pills.tsx +31 -57
- package/src/components/data-table/filters.ts +88 -66
- package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
- package/src/core/runtime/__tests__/runtime.test.ts +38 -17
- package/src/core/runtime/runtime.ts +57 -34
- package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +5 -4
- package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +18 -54
- package/src/core/websocket/transports/__tests__/ws.test.ts +125 -0
- package/src/core/websocket/transports/basic.ts +1 -3
- package/src/core/websocket/transports/transport.ts +0 -1
- package/src/core/websocket/transports/ws.ts +96 -0
- package/src/core/websocket/useMarimoKernelConnection.tsx +30 -26
- package/src/core/websocket/useWebSocket.tsx +3 -18
- package/dist/assets/JsonOutput-Dxol3ZtH.js +0 -49
- package/dist/assets/config-DGudsRYK.js +0 -1
- package/dist/assets/index-DySiGerD.js +0 -42
- package/dist/assets/mermaid-4DMBBIKO-B-uFGNnk.js +0 -1
- package/dist/assets/panels-CJ1t18_z.js +0 -1
- package/dist/assets/useBoolean-DP3412N2.js +0 -1
- /package/dist/assets/{bundle.esm-DjhGJy4I.js → bundle.esm-BXIlAZ6T.js} +0 -0
- /package/dist/assets/{esm-DLYpPRvw.js → esm-Cb2bnV6o.js} +0 -0
- /package/dist/assets/{field-CQGpbXj3.js → field-DNlzfMKW.js} +0 -0
- /package/dist/assets/{formats-CJQ67TPE.js → formats-BRq458WH.js} +0 -0
- /package/dist/assets/{icons-Ol38nIbL.js → icons-8tfAri2V.js} +0 -0
- /package/dist/assets/{micromark-factory-space-P--XWZhg.js → micromark-factory-space-BUQpMdx2.js} +0 -0
- /package/dist/assets/{react-resizable-panels.browser.esm-CgWOEYeG.js → react-resizable-panels.browser.esm-Ce2ksurd.js} +0 -0
- /package/dist/assets/{renderShortcut-D7FYCtYQ.js → renderShortcut-DK-VjfaX.js} +0 -0
- /package/dist/assets/{table-DUSsaCYD.js → table-DQE9hQzM.js} +0 -0
- /package/dist/assets/{tree-actions-D9i3o3Zk.js → tree-actions-DY8FUp3V.js} +0 -0
- /package/dist/assets/{useDeepCompareMemoize-zUHU--0D.js → useDeepCompareMemoize-CWcgQCbT.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as Z}from"./chunk-LvLJmgfZ.js";import{n as C}from"./useEvent-D91BmmQi.js";import{t as Y}from"./react-Bj1aDYRI.js";import"./react-dom-CSu739Rf.js";import{t as tt}from"./compiler-runtime-B3qBwwSJ.js";import{t as et}from"./debounce-DhnxH9Rh.js";import{_,d as V}from"./useEventListener-DvoEXWke.js";import{n as H}from"./config-DGudsRYK.js";import{t as nt}from"./cn-DCUzRj2J.js";import{t as rt}from"./jsx-runtime-BqBOg78p.js";import"./fullscreen-eipL3i3Y.js";import{t as at}from"./tooltip-DTV9tlSr.js";import{r as it}from"./button-BbCh-29a.js";import{d as N}from"./arrays-DYDL-3-i.js";import{u as ot}from"./toDate-B5A0DFEz.js";import"./session-DGdfs0bJ.js";import{r as lt}from"./useTheme-Kwyx4PvL.js";import{t as ct}from"./isValid-DdlR4-BY.js";import{a as st,r as mt,t as pt}from"./utils-DQRuLEof.js";import{n as ut}from"./vega-loader.browser-xq8miGHn.js";import{t as ft}from"./react-vega-4VQqM03t.js";import"./defaultLocale-DPBdGRrH.js";import"./defaultLocale-Lfi0pexn.js";import{r as dt,t as ht}from"./alert-DrHguQlr.js";import{n as gt}from"./error-banner-CLO6LFll.js";import{n as yt}from"./useAsyncData-C5i0IRVM.js";import{t as vt}from"./formats-CJQ67TPE.js";import{t as F}from"./useDeepCompareMemoize-zUHU--0D.js";import{t as kt}from"./semaphore-X3ApuO41.js";var bt=tt(),S=Z(Y(),1);function wt(t){return t.data&&"url"in t.data&&(t.data.url=H(t.data.url).href),t}const u={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"};var W=new Set(["boxplot","errorband","errorbar"]);const x={getMarkType(t){let e=typeof t=="string"?t:t.type;if(W.has(e))throw Error("Not supported");return e},isInteractive(t){let e=typeof t=="string"?t:t.type;return!W.has(e)},makeClickable(t){let e=typeof t=="string"?t:t.type;return e in u?typeof t=="string"?{type:t,cursor:"pointer",tooltip:!0}:{...t,type:e,cursor:"pointer",tooltip:!0}:t},getOpacity(t){return typeof t=="string"?null:"opacity"in t&&typeof t.opacity=="number"?t.opacity:null}},v={point(t){return t==null?"select_point":`select_point_${t}`},interval(t){return t==null?"select_interval":`select_interval_${t}`},legendSelection(t){return`legend_selection_${t}`},binColoring(t){return t==null?"bin_coloring":`bin_coloring_${t}`},HIGHLIGHT:"highlight",PAN_ZOOM:"pan_zoom",hasPoint(t){return t.some(e=>e.startsWith("select_point"))},hasInterval(t){return t.some(e=>e.startsWith("select_interval"))},hasLegend(t){return t.some(e=>e.startsWith("legend_selection"))},hasPanZoom(t){return t.some(e=>e.startsWith("pan_zoom"))},isBinColoring(t){return t.startsWith("bin_coloring")}},j={highlight(){return{name:v.HIGHLIGHT,select:{type:"point",on:"mouseover"}}},interval(t,e){return{name:v.interval(e),select:{type:"interval",encodings:D(t),mark:{fill:"#669EFF",fillOpacity:.07,stroke:"#669EFF",strokeOpacity:.4},on:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]",translate:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]"}}},point(t,e){return{name:v.point(e),select:{type:"point",encodings:D(t),on:"click[!event.metaKey]"}}},binColoring(t){return{name:v.binColoring(t),select:{type:"point",on:"click[!event.metaKey]"}}},legend(t){return{name:v.legendSelection(t),select:{type:"point",fields:[t]},bind:"legend"}},panZoom(){return{name:v.PAN_ZOOM,bind:"scales",select:{type:"interval",on:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",translate:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",zoom:"wheel![event.metaKey]"}}}};function D(t){switch(x.getMarkType(t.mark)){case u.image:case u.trail:return;case u.area:case u.arc:return["color"];case u.bar:{let e=St(t);return e==="horizontal"?["y"]:e==="vertical"?["x"]:void 0}case u.circle:case u.geoshape:case u.line:case u.point:case u.rect:case u.rule:case u.square:case u.text:case u.tick:return["x","y"]}}function P(t){return"params"in t&&t.params&&t.params.length>0?N(t.params.filter(e=>e==null?!1:"select"in e&&e.select!==void 0).map(e=>e.name)):"layer"in t?N(t.layer.flatMap(P)):"vconcat"in t?N(t.vconcat.flatMap(P)):"hconcat"in t?N(t.hconcat.flatMap(P)):[]}function St(t){var a,i;if(!t||!("mark"in t))return;let e=(a=t.encoding)==null?void 0:a.x,n=(i=t.encoding)==null?void 0:i.y;if(e&&"type"in e&&e.type==="nominal")return"vertical";if(n&&"type"in n&&n.type==="nominal"||e&&"aggregate"in e)return"horizontal";if(n&&"aggregate"in n)return"vertical"}function xt(t){if(!t.encoding)return[];let e=[];for(let n of Object.values(t.encoding))n&&typeof n=="object"&&"bin"in n&&n.bin&&"field"in n&&typeof n.field=="string"&&e.push(n.field);return e}function G(t){if(!t||!("encoding"in t))return[];let{encoding:e}=t;return e?Object.entries(e).flatMap(n=>{let[a,i]=n;return!i||!At.has(a)?[]:"field"in i&&typeof i.field=="string"?[i.field]:"condition"in i&&i.condition&&typeof i.condition=="object"&&"field"in i.condition&&i.condition.field&&typeof i.condition.field=="string"?[i.condition.field]:[]}):[]}var At=new Set(["color","fill","fillOpacity","opacity","shape","size"]);function $(t,e,n,a){let i=n.filter(o=>v.isBinColoring(o)),r={and:(i.length>0?i:n).map(o=>({param:o}))};if(t==="opacity"){let o=x.getOpacity(a)||1;return{...e,opacity:{condition:{test:r,value:o},value:o/5}}}else return e}function _t(t){if(!("select"in t)||!t.select)return JSON.stringify(t);let e=t.select;if(typeof e=="string")return JSON.stringify({type:e,bind:t.bind});let n={type:e.type,encodings:"encodings"in e&&e.encodings?[...e.encodings].toSorted():void 0,fields:"fields"in e&&e.fields?[...e.fields].toSorted():void 0,bind:t.bind};return JSON.stringify(n)}function q(t){let e=E(t);if(e.length===0)return t;let n=jt(e);return n.length===0?t:{...L(K(t,new Set(n.map(a=>a.name))),n.map(a=>a.name)),params:[...t.params||[],...n]}}function E(t){let e=[];if("vconcat"in t&&Array.isArray(t.vconcat))for(let n of t.vconcat)e.push(...E(n));else if("hconcat"in t&&Array.isArray(t.hconcat))for(let n of t.hconcat)e.push(...E(n));else{if("layer"in t)return[];"mark"in t&&"params"in t&&t.params&&t.params.length>0&&e.push({params:t.params})}return e}function jt(t){if(t.length===0)return[];let e=new Map,n=t.length;for(let{params:i}of t){let r=new Set;for(let o of i){let s=_t(o);r.has(s)||(r.add(s),e.has(s)||e.set(s,{count:0,param:o}),e.get(s).count++)}}let a=[];for(let[,{count:i,param:r}]of e)i===n&&a.push(r);return a}function K(t,e){if("vconcat"in t&&Array.isArray(t.vconcat))return{...t,vconcat:t.vconcat.map(n=>K(n,e))};if("hconcat"in t&&Array.isArray(t.hconcat))return{...t,hconcat:t.hconcat.map(n=>K(n,e))};if("mark"in t&&"params"in t&&t.params){let n=t.params,a=[];for(let i of n){if(!i||typeof i!="object"||!("name"in i)){a.push(i);continue}e.has(i.name)||a.push(i)}if(a.length===0){let{params:i,...r}=t;return r}return{...t,params:a}}return t}function L(t,e){return"vconcat"in t&&Array.isArray(t.vconcat)?{...t,vconcat:t.vconcat.map(n=>L(n,e))}:"hconcat"in t&&Array.isArray(t.hconcat)?{...t,hconcat:t.hconcat.map(n=>L(n,e))}:"layer"in t?t:"mark"in t&&x.isInteractive(t.mark)?{...t,mark:x.makeClickable(t.mark),encoding:$("opacity",t.encoding||{},e,t.mark)}:t}function T(t,e){var s,h;let{chartSelection:n=!0,fieldSelection:a=!0}=e;if(!n&&!a)return t;(s=t.params)!=null&&s.some(l=>l.bind==="legend")&&(a=!1);let i=(h=t.params)==null?void 0:h.some(l=>!l.bind);i&&(n=!1);let r="vconcat"in t||"hconcat"in t;if(i&&r)return t;if("vconcat"in t){let l=t.vconcat.map(m=>"mark"in m?T(m,{chartSelection:n,fieldSelection:a}):m);return q({...t,vconcat:l})}if("hconcat"in t){let l=t.hconcat.map(m=>"mark"in m?T(m,{chartSelection:n,fieldSelection:a}):m);return q({...t,hconcat:l})}if("layer"in t){let l=t.params&&t.params.length>0,m=a!==!1&&!l,k=[];if(m){let p=t.layer.flatMap(f=>"mark"in f?G(f):[]);k=[...new Set(p)],Array.isArray(a)&&(k=k.filter(f=>a.includes(f)))}let w=t.layer.map((p,f)=>{if(!("mark"in p))return p;let g=p;if(f===0&&k.length>0){let O=k.map(M=>j.legend(M));g={...g,params:[...g.params||[],...O]}}return g=z(g,n,f),g=J(g),f===0&&(g=B(g)),g});return{...t,layer:w}}if(!("mark"in t)||!x.isInteractive(t.mark))return t;let o=t;return o=Ot(o,a),o=z(o,n,void 0),o=J(o),o=B(o),o}function Ot(t,e){if(e===!1)return t;let n=G(t);Array.isArray(e)&&(n=n.filter(r=>e.includes(r)));let a=n.map(r=>j.legend(r)),i=[...t.params||[],...a];return{...t,params:i}}function z(t,e,n){if(e===!1)return t;let a;try{a=x.getMarkType(t.mark)}catch{return t}if(a==="geoshape")return t;let i=xt(t),r=e===!0?i.length>0?["point"]:Mt(a):[e];if(!r||r.length===0)return t;let o=r.map(h=>h==="interval"?j.interval(t,n):j.point(t,n)),s=[...t.params||[],...o];return i.length>0&&r.includes("point")&&s.push(j.binColoring(n)),{...t,params:s}}function B(t){let e;try{e=x.getMarkType(t.mark)}catch{}if(e==="geoshape")return t;let n=t.params||[];return n.some(a=>a.bind==="scales")?t:{...t,params:[...n,j.panZoom()]}}function J(t){let e="encoding"in t?t.encoding:void 0,n=t.params||[],a=n.map(i=>i.name);return n.length===0||!x.isInteractive(t.mark)?t:{...t,mark:x.makeClickable(t.mark),encoding:$("opacity",e||{},a,t.mark)}}function Mt(t){switch(t){case"arc":case"area":return["point"];case"text":case"bar":return["point","interval"];case"line":return;default:return["point","interval"]}}var Nt=5;async function Pt(t){if(!t)return t;let e="datasets"in t?{...t.datasets}:{},n=new kt(Nt),a=async r=>{if(!r)return r;if("layer"in r){let l=await Promise.all(r.layer.map(a));r={...r,layer:l}}if("hconcat"in r){let l=await Promise.all(r.hconcat.map(a));r={...r,hconcat:l}}if("vconcat"in r){let l=await Promise.all(r.vconcat.map(a));r={...r,vconcat:l}}if("spec"in r&&(r={...r,spec:await a(r.spec)}),!r.data||!("url"in r.data))return r;let o;try{o=H(r.data.url)}catch{return r}let s=r.data.format,h=await n.run(()=>st(o.href,s));return e[o.pathname]=h,{...r,data:{name:o.pathname}}},i=await a(t);return Object.keys(e).length===0?i:{...i,datasets:e}}var d=Z(rt(),1);ut("arrow",vt);var It=t=>{let e=(0,bt.c)(12),{value:n,setValue:a,chartSelection:i,fieldSelection:r,spec:o,embedOptions:s}=t,h,l;e[0]===o?(h=e[1],l=e[2]):(h=async()=>Pt(o),l=[o],e[0]=o,e[1]=h,e[2]=l);let{data:m,error:k}=yt(h,l);if(k){let p;return e[3]===k?p=e[4]:(p=(0,d.jsx)(gt,{error:k}),e[3]=k,e[4]=p),p}if(!m)return null;let w;return e[5]!==i||e[6]!==s||e[7]!==r||e[8]!==m||e[9]!==a||e[10]!==n?(w=(0,d.jsx)(Ct,{value:n,setValue:a,chartSelection:i,fieldSelection:r,spec:m,embedOptions:s}),e[5]=i,e[6]=s,e[7]=r,e[8]=m,e[9]=a,e[10]=n,e[11]=w):w=e[11],w},Ct=({value:t,setValue:e,chartSelection:n,fieldSelection:a,spec:i,embedOptions:r})=>{let{theme:o}=lt(),s=(0,S.useRef)(null),h=(0,S.useRef)(void 0),[l,m]=(0,S.useState)(),k=(0,S.useMemo)(()=>r&&"actions"in r?r.actions:{source:!1,compiled:!1},[r]),w=F(i),p=(0,S.useMemo)(()=>T(wt(w),{chartSelection:n,fieldSelection:a}),[w,n,a]),f=(0,S.useMemo)(()=>P(p),[p]),g=C(c=>{e({...t,...c})}),O=(0,S.useMemo)(()=>et((c,y)=>{_.debug("[Vega signal]",c,y);let b=V.mapValues(y,Kt);b=V.mapValues(b,Et),g({[c]:b})},100),[g]),M=F(f),I=(0,S.useMemo)(()=>M.reduce((c,y)=>(v.PAN_ZOOM===y||v.isBinColoring(y)||c.push({signalName:y,handler:(b,X)=>O(b,X)}),c),[]),[M,O]),R=C(c=>{_.error(c),_.debug(p),m(c)}),Q=C(c=>{_.debug("[Vega view] created",c),h.current=c,m(void 0)}),U=()=>{let c=[];return v.hasPoint(f)&&c.push(["Point selection","click to select a point; hold shift for multi-select"]),v.hasInterval(f)&&c.push(["Interval selection","click and drag to select an interval"]),v.hasLegend(f)&&c.push(["Legend selection","click to select a legend item; hold shift for multi-select"]),v.hasPanZoom(f)&&c.push(["Pan","hold the meta key and drag"],["Zoom","hold the meta key and scroll"]),c.length===0?null:(0,d.jsx)(at,{delayDuration:300,side:"left",content:(0,d.jsx)("div",{className:"text-xs flex flex-col",children:c.map((y,b)=>(0,d.jsxs)("div",{children:[(0,d.jsxs)("span",{className:"font-bold tracking-wide",children:[y[0],":"]})," ",y[1]]},b))}),children:(0,d.jsx)(ot,{className:"absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground"})})},A=ft({ref:s,spec:p,options:{theme:o==="dark"?"dark":void 0,actions:k,mode:"vega-lite",tooltip:mt.call,renderer:"canvas"},onError:R,onEmbed:Q});return(0,S.useEffect)(()=>(I.forEach(({signalName:c,handler:y})=>{try{A==null||A.view.addSignalListener(c,y)}catch(b){_.error(b)}}),()=>{I.forEach(({signalName:c,handler:y})=>{try{A==null||A.view.removeSignalListener(c,y)}catch(b){_.error(b)}})}),[A,I]),(0,d.jsxs)(d.Fragment,{children:[l&&(0,d.jsxs)(ht,{variant:"destructive",children:[(0,d.jsx)(dt,{children:l.message}),(0,d.jsx)("div",{className:"text-md",children:l.stack})]}),(0,d.jsxs)("div",{className:nt("relative"),onPointerDown:it.stopPropagation(),children:[(0,d.jsx)("div",{ref:s,"data-container-width":pt(p)}),U()]})]})};function Et(t){return t instanceof Set?[...t]:t}function Kt(t){return Array.isArray(t)?t.map(e=>e instanceof Date&&ct(e)?new Date(e).getTime():e):t}var Lt=It;export{Lt as default};
|
|
1
|
+
import{s as Z}from"./chunk-LvLJmgfZ.js";import{n as C}from"./useEvent-D91BmmQi.js";import{t as Y}from"./react-Bj1aDYRI.js";import"./react-dom-CSu739Rf.js";import{t as tt}from"./compiler-runtime-B3qBwwSJ.js";import{t as et}from"./debounce-DhnxH9Rh.js";import{_,d as V}from"./useEventListener-DvoEXWke.js";import{n as H}from"./config-C2lTvbuU.js";import{t as nt}from"./cn-DCUzRj2J.js";import{t as rt}from"./jsx-runtime-BqBOg78p.js";import"./fullscreen-eipL3i3Y.js";import{t as at}from"./tooltip-DTV9tlSr.js";import{r as it}from"./button-BbCh-29a.js";import{d as N}from"./arrays-DYDL-3-i.js";import{u as ot}from"./toDate-B5A0DFEz.js";import"./session-DGdfs0bJ.js";import{r as lt}from"./useTheme-Kwyx4PvL.js";import{t as ct}from"./isValid-DdlR4-BY.js";import{a as st,r as mt,t as pt}from"./utils-DQRuLEof.js";import{n as ut}from"./vega-loader.browser-xq8miGHn.js";import{t as ft}from"./react-vega-4VQqM03t.js";import"./defaultLocale-DPBdGRrH.js";import"./defaultLocale-Lfi0pexn.js";import{r as dt,t as ht}from"./alert-DrHguQlr.js";import{n as gt}from"./error-banner-CLO6LFll.js";import{n as yt}from"./useAsyncData-C5i0IRVM.js";import{t as vt}from"./formats-BRq458WH.js";import{t as F}from"./useDeepCompareMemoize-CWcgQCbT.js";import{t as kt}from"./semaphore-X3ApuO41.js";var bt=tt(),S=Z(Y(),1);function wt(t){return t.data&&"url"in t.data&&(t.data.url=H(t.data.url).href),t}const u={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"};var W=new Set(["boxplot","errorband","errorbar"]);const x={getMarkType(t){let e=typeof t=="string"?t:t.type;if(W.has(e))throw Error("Not supported");return e},isInteractive(t){let e=typeof t=="string"?t:t.type;return!W.has(e)},makeClickable(t){let e=typeof t=="string"?t:t.type;return e in u?typeof t=="string"?{type:t,cursor:"pointer",tooltip:!0}:{...t,type:e,cursor:"pointer",tooltip:!0}:t},getOpacity(t){return typeof t=="string"?null:"opacity"in t&&typeof t.opacity=="number"?t.opacity:null}},v={point(t){return t==null?"select_point":`select_point_${t}`},interval(t){return t==null?"select_interval":`select_interval_${t}`},legendSelection(t){return`legend_selection_${t}`},binColoring(t){return t==null?"bin_coloring":`bin_coloring_${t}`},HIGHLIGHT:"highlight",PAN_ZOOM:"pan_zoom",hasPoint(t){return t.some(e=>e.startsWith("select_point"))},hasInterval(t){return t.some(e=>e.startsWith("select_interval"))},hasLegend(t){return t.some(e=>e.startsWith("legend_selection"))},hasPanZoom(t){return t.some(e=>e.startsWith("pan_zoom"))},isBinColoring(t){return t.startsWith("bin_coloring")}},j={highlight(){return{name:v.HIGHLIGHT,select:{type:"point",on:"mouseover"}}},interval(t,e){return{name:v.interval(e),select:{type:"interval",encodings:D(t),mark:{fill:"#669EFF",fillOpacity:.07,stroke:"#669EFF",strokeOpacity:.4},on:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]",translate:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]"}}},point(t,e){return{name:v.point(e),select:{type:"point",encodings:D(t),on:"click[!event.metaKey]"}}},binColoring(t){return{name:v.binColoring(t),select:{type:"point",on:"click[!event.metaKey]"}}},legend(t){return{name:v.legendSelection(t),select:{type:"point",fields:[t]},bind:"legend"}},panZoom(){return{name:v.PAN_ZOOM,bind:"scales",select:{type:"interval",on:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",translate:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",zoom:"wheel![event.metaKey]"}}}};function D(t){switch(x.getMarkType(t.mark)){case u.image:case u.trail:return;case u.area:case u.arc:return["color"];case u.bar:{let e=St(t);return e==="horizontal"?["y"]:e==="vertical"?["x"]:void 0}case u.circle:case u.geoshape:case u.line:case u.point:case u.rect:case u.rule:case u.square:case u.text:case u.tick:return["x","y"]}}function P(t){return"params"in t&&t.params&&t.params.length>0?N(t.params.filter(e=>e==null?!1:"select"in e&&e.select!==void 0).map(e=>e.name)):"layer"in t?N(t.layer.flatMap(P)):"vconcat"in t?N(t.vconcat.flatMap(P)):"hconcat"in t?N(t.hconcat.flatMap(P)):[]}function St(t){var a,i;if(!t||!("mark"in t))return;let e=(a=t.encoding)==null?void 0:a.x,n=(i=t.encoding)==null?void 0:i.y;if(e&&"type"in e&&e.type==="nominal")return"vertical";if(n&&"type"in n&&n.type==="nominal"||e&&"aggregate"in e)return"horizontal";if(n&&"aggregate"in n)return"vertical"}function xt(t){if(!t.encoding)return[];let e=[];for(let n of Object.values(t.encoding))n&&typeof n=="object"&&"bin"in n&&n.bin&&"field"in n&&typeof n.field=="string"&&e.push(n.field);return e}function G(t){if(!t||!("encoding"in t))return[];let{encoding:e}=t;return e?Object.entries(e).flatMap(n=>{let[a,i]=n;return!i||!At.has(a)?[]:"field"in i&&typeof i.field=="string"?[i.field]:"condition"in i&&i.condition&&typeof i.condition=="object"&&"field"in i.condition&&i.condition.field&&typeof i.condition.field=="string"?[i.condition.field]:[]}):[]}var At=new Set(["color","fill","fillOpacity","opacity","shape","size"]);function $(t,e,n,a){let i=n.filter(o=>v.isBinColoring(o)),r={and:(i.length>0?i:n).map(o=>({param:o}))};if(t==="opacity"){let o=x.getOpacity(a)||1;return{...e,opacity:{condition:{test:r,value:o},value:o/5}}}else return e}function _t(t){if(!("select"in t)||!t.select)return JSON.stringify(t);let e=t.select;if(typeof e=="string")return JSON.stringify({type:e,bind:t.bind});let n={type:e.type,encodings:"encodings"in e&&e.encodings?[...e.encodings].toSorted():void 0,fields:"fields"in e&&e.fields?[...e.fields].toSorted():void 0,bind:t.bind};return JSON.stringify(n)}function q(t){let e=E(t);if(e.length===0)return t;let n=jt(e);return n.length===0?t:{...L(K(t,new Set(n.map(a=>a.name))),n.map(a=>a.name)),params:[...t.params||[],...n]}}function E(t){let e=[];if("vconcat"in t&&Array.isArray(t.vconcat))for(let n of t.vconcat)e.push(...E(n));else if("hconcat"in t&&Array.isArray(t.hconcat))for(let n of t.hconcat)e.push(...E(n));else{if("layer"in t)return[];"mark"in t&&"params"in t&&t.params&&t.params.length>0&&e.push({params:t.params})}return e}function jt(t){if(t.length===0)return[];let e=new Map,n=t.length;for(let{params:i}of t){let r=new Set;for(let o of i){let s=_t(o);r.has(s)||(r.add(s),e.has(s)||e.set(s,{count:0,param:o}),e.get(s).count++)}}let a=[];for(let[,{count:i,param:r}]of e)i===n&&a.push(r);return a}function K(t,e){if("vconcat"in t&&Array.isArray(t.vconcat))return{...t,vconcat:t.vconcat.map(n=>K(n,e))};if("hconcat"in t&&Array.isArray(t.hconcat))return{...t,hconcat:t.hconcat.map(n=>K(n,e))};if("mark"in t&&"params"in t&&t.params){let n=t.params,a=[];for(let i of n){if(!i||typeof i!="object"||!("name"in i)){a.push(i);continue}e.has(i.name)||a.push(i)}if(a.length===0){let{params:i,...r}=t;return r}return{...t,params:a}}return t}function L(t,e){return"vconcat"in t&&Array.isArray(t.vconcat)?{...t,vconcat:t.vconcat.map(n=>L(n,e))}:"hconcat"in t&&Array.isArray(t.hconcat)?{...t,hconcat:t.hconcat.map(n=>L(n,e))}:"layer"in t?t:"mark"in t&&x.isInteractive(t.mark)?{...t,mark:x.makeClickable(t.mark),encoding:$("opacity",t.encoding||{},e,t.mark)}:t}function T(t,e){var s,h;let{chartSelection:n=!0,fieldSelection:a=!0}=e;if(!n&&!a)return t;(s=t.params)!=null&&s.some(l=>l.bind==="legend")&&(a=!1);let i=(h=t.params)==null?void 0:h.some(l=>!l.bind);i&&(n=!1);let r="vconcat"in t||"hconcat"in t;if(i&&r)return t;if("vconcat"in t){let l=t.vconcat.map(m=>"mark"in m?T(m,{chartSelection:n,fieldSelection:a}):m);return q({...t,vconcat:l})}if("hconcat"in t){let l=t.hconcat.map(m=>"mark"in m?T(m,{chartSelection:n,fieldSelection:a}):m);return q({...t,hconcat:l})}if("layer"in t){let l=t.params&&t.params.length>0,m=a!==!1&&!l,k=[];if(m){let p=t.layer.flatMap(f=>"mark"in f?G(f):[]);k=[...new Set(p)],Array.isArray(a)&&(k=k.filter(f=>a.includes(f)))}let w=t.layer.map((p,f)=>{if(!("mark"in p))return p;let g=p;if(f===0&&k.length>0){let O=k.map(M=>j.legend(M));g={...g,params:[...g.params||[],...O]}}return g=z(g,n,f),g=J(g),f===0&&(g=B(g)),g});return{...t,layer:w}}if(!("mark"in t)||!x.isInteractive(t.mark))return t;let o=t;return o=Ot(o,a),o=z(o,n,void 0),o=J(o),o=B(o),o}function Ot(t,e){if(e===!1)return t;let n=G(t);Array.isArray(e)&&(n=n.filter(r=>e.includes(r)));let a=n.map(r=>j.legend(r)),i=[...t.params||[],...a];return{...t,params:i}}function z(t,e,n){if(e===!1)return t;let a;try{a=x.getMarkType(t.mark)}catch{return t}if(a==="geoshape")return t;let i=xt(t),r=e===!0?i.length>0?["point"]:Mt(a):[e];if(!r||r.length===0)return t;let o=r.map(h=>h==="interval"?j.interval(t,n):j.point(t,n)),s=[...t.params||[],...o];return i.length>0&&r.includes("point")&&s.push(j.binColoring(n)),{...t,params:s}}function B(t){let e;try{e=x.getMarkType(t.mark)}catch{}if(e==="geoshape")return t;let n=t.params||[];return n.some(a=>a.bind==="scales")?t:{...t,params:[...n,j.panZoom()]}}function J(t){let e="encoding"in t?t.encoding:void 0,n=t.params||[],a=n.map(i=>i.name);return n.length===0||!x.isInteractive(t.mark)?t:{...t,mark:x.makeClickable(t.mark),encoding:$("opacity",e||{},a,t.mark)}}function Mt(t){switch(t){case"arc":case"area":return["point"];case"text":case"bar":return["point","interval"];case"line":return;default:return["point","interval"]}}var Nt=5;async function Pt(t){if(!t)return t;let e="datasets"in t?{...t.datasets}:{},n=new kt(Nt),a=async r=>{if(!r)return r;if("layer"in r){let l=await Promise.all(r.layer.map(a));r={...r,layer:l}}if("hconcat"in r){let l=await Promise.all(r.hconcat.map(a));r={...r,hconcat:l}}if("vconcat"in r){let l=await Promise.all(r.vconcat.map(a));r={...r,vconcat:l}}if("spec"in r&&(r={...r,spec:await a(r.spec)}),!r.data||!("url"in r.data))return r;let o;try{o=H(r.data.url)}catch{return r}let s=r.data.format,h=await n.run(()=>st(o.href,s));return e[o.pathname]=h,{...r,data:{name:o.pathname}}},i=await a(t);return Object.keys(e).length===0?i:{...i,datasets:e}}var d=Z(rt(),1);ut("arrow",vt);var It=t=>{let e=(0,bt.c)(12),{value:n,setValue:a,chartSelection:i,fieldSelection:r,spec:o,embedOptions:s}=t,h,l;e[0]===o?(h=e[1],l=e[2]):(h=async()=>Pt(o),l=[o],e[0]=o,e[1]=h,e[2]=l);let{data:m,error:k}=yt(h,l);if(k){let p;return e[3]===k?p=e[4]:(p=(0,d.jsx)(gt,{error:k}),e[3]=k,e[4]=p),p}if(!m)return null;let w;return e[5]!==i||e[6]!==s||e[7]!==r||e[8]!==m||e[9]!==a||e[10]!==n?(w=(0,d.jsx)(Ct,{value:n,setValue:a,chartSelection:i,fieldSelection:r,spec:m,embedOptions:s}),e[5]=i,e[6]=s,e[7]=r,e[8]=m,e[9]=a,e[10]=n,e[11]=w):w=e[11],w},Ct=({value:t,setValue:e,chartSelection:n,fieldSelection:a,spec:i,embedOptions:r})=>{let{theme:o}=lt(),s=(0,S.useRef)(null),h=(0,S.useRef)(void 0),[l,m]=(0,S.useState)(),k=(0,S.useMemo)(()=>r&&"actions"in r?r.actions:{source:!1,compiled:!1},[r]),w=F(i),p=(0,S.useMemo)(()=>T(wt(w),{chartSelection:n,fieldSelection:a}),[w,n,a]),f=(0,S.useMemo)(()=>P(p),[p]),g=C(c=>{e({...t,...c})}),O=(0,S.useMemo)(()=>et((c,y)=>{_.debug("[Vega signal]",c,y);let b=V.mapValues(y,Kt);b=V.mapValues(b,Et),g({[c]:b})},100),[g]),M=F(f),I=(0,S.useMemo)(()=>M.reduce((c,y)=>(v.PAN_ZOOM===y||v.isBinColoring(y)||c.push({signalName:y,handler:(b,X)=>O(b,X)}),c),[]),[M,O]),R=C(c=>{_.error(c),_.debug(p),m(c)}),Q=C(c=>{_.debug("[Vega view] created",c),h.current=c,m(void 0)}),U=()=>{let c=[];return v.hasPoint(f)&&c.push(["Point selection","click to select a point; hold shift for multi-select"]),v.hasInterval(f)&&c.push(["Interval selection","click and drag to select an interval"]),v.hasLegend(f)&&c.push(["Legend selection","click to select a legend item; hold shift for multi-select"]),v.hasPanZoom(f)&&c.push(["Pan","hold the meta key and drag"],["Zoom","hold the meta key and scroll"]),c.length===0?null:(0,d.jsx)(at,{delayDuration:300,side:"left",content:(0,d.jsx)("div",{className:"text-xs flex flex-col",children:c.map((y,b)=>(0,d.jsxs)("div",{children:[(0,d.jsxs)("span",{className:"font-bold tracking-wide",children:[y[0],":"]})," ",y[1]]},b))}),children:(0,d.jsx)(ot,{className:"absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground"})})},A=ft({ref:s,spec:p,options:{theme:o==="dark"?"dark":void 0,actions:k,mode:"vega-lite",tooltip:mt.call,renderer:"canvas"},onError:R,onEmbed:Q});return(0,S.useEffect)(()=>(I.forEach(({signalName:c,handler:y})=>{try{A==null||A.view.addSignalListener(c,y)}catch(b){_.error(b)}}),()=>{I.forEach(({signalName:c,handler:y})=>{try{A==null||A.view.removeSignalListener(c,y)}catch(b){_.error(b)}})}),[A,I]),(0,d.jsxs)(d.Fragment,{children:[l&&(0,d.jsxs)(ht,{variant:"destructive",children:[(0,d.jsx)(dt,{children:l.message}),(0,d.jsx)("div",{className:"text-md",children:l.stack})]}),(0,d.jsxs)("div",{className:nt("relative"),onPointerDown:it.stopPropagation(),children:[(0,d.jsx)("div",{ref:s,"data-container-width":pt(p)}),U()]})]})};function Et(t){return t instanceof Set?[...t]:t}function Kt(t){return Array.isArray(t)?t.map(e=>e instanceof Date&&ct(e)?new Date(e).getTime():e):t}var Lt=It;export{Lt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as V}from"./chunk-LvLJmgfZ.js";import{t as B}from"./react-Bj1aDYRI.js";import{t as G}from"./compiler-runtime-B3qBwwSJ.js";import{t as H}from"./jsx-runtime-BqBOg78p.js";import{c as I,i as J,n as O,s as Q,t as U}from"./select-DZcFyKFQ.js";import{t as P}from"./label-xHqFtfdz.js";import{t as W}from"./button-BbCh-29a.js";import{r as X}from"./requests-DIwGYs0l.js";import{r as D}from"./input-CVE-gIjt.js";import{t as E}from"./use-toast-ERM44-k9.js";import{a as Z,c as $,i as ee,n as te,r as re}from"./dialog-DqOQT_n4.js";import{t as ae}from"./links-B8WzCnbo.js";import{r as L}from"./field-
|
|
1
|
+
import{s as V}from"./chunk-LvLJmgfZ.js";import{t as B}from"./react-Bj1aDYRI.js";import{t as G}from"./compiler-runtime-B3qBwwSJ.js";import{t as H}from"./jsx-runtime-BqBOg78p.js";import{c as I,i as J,n as O,s as Q,t as U}from"./select-DZcFyKFQ.js";import{t as P}from"./label-xHqFtfdz.js";import{t as W}from"./button-BbCh-29a.js";import{r as X}from"./requests-DIwGYs0l.js";import{r as D}from"./input-CVE-gIjt.js";import{t as E}from"./use-toast-ERM44-k9.js";import{a as Z,c as $,i as ee,n as te,r as re}from"./dialog-DqOQT_n4.js";import{t as ae}from"./links-B8WzCnbo.js";import{r as L}from"./field-DNlzfMKW.js";var oe=G(),T=V(B(),1),t=V(H(),1);function ne(a){return a.toSorted((e,r)=>e.provider==="env"?1:r.provider==="env"?-1:0)}const le=a=>{let e=(0,oe.c)(43),{providerNames:r,onClose:A,onSuccess:F}=a,{writeSecret:Y}=X(),[o,M]=T.useState(""),[l,R]=T.useState(""),[n,z]=T.useState(r[0]),g;e[0]!==o||e[1]!==n||e[2]!==F||e[3]!==l||e[4]!==Y?(g=async i=>{if(i.preventDefault(),!n){E({title:"Error",description:"No location selected for the secret.",variant:"danger"});return}if(!o||!l||!n){E({title:"Error",description:"Please fill in all fields.",variant:"danger"});return}try{await Y({key:o,value:l,provider:"dotenv",name:n}),E({title:"Secret created",description:"The secret has been created successfully."}),F(o)}catch{E({title:"Error",description:"Failed to create secret. Please try again.",variant:"danger"})}},e[0]=o,e[1]=n,e[2]=F,e[3]=l,e[4]=Y,e[5]=g):g=e[5];let q=g,j;e[6]===Symbol.for("react.memo_cache_sentinel")?(j=(0,t.jsxs)(Z,{children:[(0,t.jsx)($,{children:"Add Secret"}),(0,t.jsx)(re,{children:"Add a new secret to your environment variables."})]}),e[6]=j):j=e[6];let y;e[7]===Symbol.for("react.memo_cache_sentinel")?(y=(0,t.jsx)(P,{htmlFor:"key",children:"Key"}),e[7]=y):y=e[7];let S;e[8]===Symbol.for("react.memo_cache_sentinel")?(S=i=>{M(ie(i.target.value))},e[8]=S):S=e[8];let s;e[9]===o?s=e[10]:(s=(0,t.jsxs)("div",{className:"grid gap-2",children:[y,(0,t.jsx)(D,{id:"key",value:o,onChange:S,placeholder:"MY_SECRET_KEY",required:!0})]}),e[9]=o,e[10]=s);let _;e[11]===Symbol.for("react.memo_cache_sentinel")?(_=(0,t.jsx)(P,{htmlFor:"value",children:"Value"}),e[11]=_):_=e[11];let b;e[12]===Symbol.for("react.memo_cache_sentinel")?(b=i=>R(i.target.value),e[12]=b):b=e[12];let c;e[13]===l?c=e[14]:(c=(0,t.jsx)(D,{id:"value",type:"password",value:l,onChange:b,required:!0,autoComplete:"off"}),e[13]=l,e[14]=c);let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=se()&&(0,t.jsx)(L,{children:"Note: You are sending this key over http."}),e[15]=C):C=e[15];let d;e[16]===c?d=e[17]:(d=(0,t.jsxs)("div",{className:"grid gap-2",children:[_,c,C]}),e[16]=c,e[17]=d);let N;e[18]===Symbol.for("react.memo_cache_sentinel")?(N=(0,t.jsx)(P,{htmlFor:"location",children:"Location"}),e[18]=N):N=e[18];let m;e[19]===r.length?m=e[20]:(m=r.length===0&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"No dotenv locations configured."}),e[19]=r.length,e[20]=m);let h;e[21]!==n||e[22]!==r?(h=r.length>0&&(0,t.jsxs)(U,{value:n,onValueChange:i=>z(i),children:[(0,t.jsx)(Q,{children:(0,t.jsx)(I,{placeholder:"Select a provider"})}),(0,t.jsx)(O,{children:r.map(ce)})]}),e[21]=n,e[22]=r,e[23]=h):h=e[23];let k;e[24]===Symbol.for("react.memo_cache_sentinel")?(k=(0,t.jsxs)(L,{children:["You can configure the location by setting the"," ",(0,t.jsx)(ae,{href:"https://links.marimo.app/dotenv",children:"dotenv configuration"}),"."]}),e[24]=k):k=e[24];let p;e[25]!==m||e[26]!==h?(p=(0,t.jsxs)("div",{className:"grid gap-2",children:[N,m,h,k]}),e[25]=m,e[26]=h,e[27]=p):p=e[27];let u;e[28]!==d||e[29]!==p||e[30]!==s?(u=(0,t.jsxs)("div",{className:"grid gap-4 py-4",children:[s,d,p]}),e[28]=d,e[29]=p,e[30]=s,e[31]=u):u=e[31];let f;e[32]===A?f=e[33]:(f=(0,t.jsx)(W,{type:"button",variant:"outline",onClick:A,children:"Cancel"}),e[32]=A,e[33]=f);let K=!o||!l||!n,v;e[34]===K?v=e[35]:(v=(0,t.jsx)(W,{type:"submit",disabled:K,children:"Add Secret"}),e[34]=K,e[35]=v);let x;e[36]!==f||e[37]!==v?(x=(0,t.jsxs)(ee,{children:[f,v]}),e[36]=f,e[37]=v,e[38]=x):x=e[38];let w;return e[39]!==q||e[40]!==u||e[41]!==x?(w=(0,t.jsx)(te,{children:(0,t.jsxs)("form",{onSubmit:q,children:[j,u,x]})}),e[39]=q,e[40]=u,e[41]=x,e[42]=w):w=e[42],w};function ie(a){return a.replaceAll(/\W/g,"_")}function se(){return window.location.href.startsWith("http://")}function ce(a){return(0,t.jsx)(J,{value:a,children:a},a)}export{ne as n,le as t};
|
package/dist/index.html
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
67
67
|
<!-- /TODO -->
|
|
68
68
|
<title>{{ title }}</title>
|
|
69
|
-
<script type="module" crossorigin src="./assets/index-
|
|
69
|
+
<script type="module" crossorigin src="./assets/index-1EIgCVR_.js"></script>
|
|
70
70
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-DdZsAcJe.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="./assets/chunk-LvLJmgfZ.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/react-Bj1aDYRI.js">
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
<link rel="modulepreload" crossorigin href="./assets/DeferredRequestRegistry-CzVJLtsG.js">
|
|
105
105
|
<link rel="modulepreload" crossorigin href="./assets/constants-DMpttj8Q.js">
|
|
106
106
|
<link rel="modulepreload" crossorigin href="./assets/session-DGdfs0bJ.js">
|
|
107
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
107
|
+
<link rel="modulepreload" crossorigin href="./assets/config-C2lTvbuU.js">
|
|
108
108
|
<link rel="modulepreload" crossorigin href="./assets/requests-DIwGYs0l.js">
|
|
109
109
|
<link rel="modulepreload" crossorigin href="./assets/useLifecycle-DieWOfXE.js">
|
|
110
110
|
<link rel="modulepreload" crossorigin href="./assets/useNonce-DfoVjkkH.js">
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<link rel="modulepreload" crossorigin href="./assets/debounce-DhnxH9Rh.js">
|
|
134
134
|
<link rel="modulepreload" crossorigin href="./assets/database-zap-kIkTfzTX.js">
|
|
135
135
|
<link rel="modulepreload" crossorigin href="./assets/main-B0OX4z33.js">
|
|
136
|
-
<link rel="modulepreload" crossorigin href="./assets/cells-
|
|
136
|
+
<link rel="modulepreload" crossorigin href="./assets/cells-Dnu4nDoy.js">
|
|
137
137
|
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-DyYDV0HI.js">
|
|
138
138
|
<link rel="modulepreload" crossorigin href="./assets/kbd-BJB2rf7K.js">
|
|
139
139
|
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-hKfTes-m.js">
|
|
@@ -147,38 +147,39 @@
|
|
|
147
147
|
<link rel="modulepreload" crossorigin href="./assets/usePress-jH2RfcUG.js">
|
|
148
148
|
<link rel="modulepreload" crossorigin href="./assets/input-CVE-gIjt.js">
|
|
149
149
|
<link rel="modulepreload" crossorigin href="./assets/ImperativeModal-DEC1mXgV.js">
|
|
150
|
-
<link rel="modulepreload" crossorigin href="./assets/cell-link-
|
|
150
|
+
<link rel="modulepreload" crossorigin href="./assets/cell-link-PQYiMZw1.js">
|
|
151
151
|
<link rel="modulepreload" crossorigin href="./assets/multi-map-CUuNtzHt.js">
|
|
152
152
|
<link rel="modulepreload" crossorigin href="./assets/alert-DrHguQlr.js">
|
|
153
153
|
<link rel="modulepreload" crossorigin href="./assets/chevron-right-CG5QYXYk.js">
|
|
154
154
|
<link rel="modulepreload" crossorigin href="./assets/dropdown-menu-CR7cnzLX.js">
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/links-B8WzCnbo.js">
|
|
156
|
-
<link rel="modulepreload" crossorigin href="./assets/useRunCells-
|
|
156
|
+
<link rel="modulepreload" crossorigin href="./assets/useRunCells-C0BPo9m1.js">
|
|
157
157
|
<link rel="modulepreload" crossorigin href="./assets/copy-Ch48HVPK.js">
|
|
158
158
|
<link rel="modulepreload" crossorigin href="./assets/copy-BwrPA9zQ.js">
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/copy-icon-BdZPgXgo.js">
|
|
160
|
-
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-
|
|
161
|
-
<link rel="modulepreload" crossorigin href="./assets/datasource-
|
|
162
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
160
|
+
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-B5r25cP5.js">
|
|
161
|
+
<link rel="modulepreload" crossorigin href="./assets/datasource-I-LOgxeP.js">
|
|
162
|
+
<link rel="modulepreload" crossorigin href="./assets/state-D9EoHCkz.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="./assets/package-B8oXOUM-.js">
|
|
164
164
|
<link rel="modulepreload" crossorigin href="./assets/sparkles-CC9Bko6a.js">
|
|
165
|
-
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-
|
|
165
|
+
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-XWqnhvJ6.js">
|
|
166
166
|
<link rel="modulepreload" crossorigin href="./assets/spinner-UuZAUjoP.js">
|
|
167
|
-
<link rel="modulepreload" crossorigin href="./assets/html-to-image-
|
|
168
|
-
<link rel="modulepreload" crossorigin href="./assets/focus-
|
|
167
|
+
<link rel="modulepreload" crossorigin href="./assets/html-to-image-D6SgvARi.js">
|
|
168
|
+
<link rel="modulepreload" crossorigin href="./assets/focus-BaOnnMs-.js">
|
|
169
169
|
<link rel="modulepreload" crossorigin href="./assets/useAsyncData-C5i0IRVM.js">
|
|
170
|
-
<link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-
|
|
171
|
-
<link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-
|
|
172
|
-
<link rel="modulepreload" crossorigin href="./assets/chunk-5FQGJX7Z-
|
|
173
|
-
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-
|
|
170
|
+
<link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-GdhQ07zA.js">
|
|
171
|
+
<link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-BUQpMdx2.js">
|
|
172
|
+
<link rel="modulepreload" crossorigin href="./assets/chunk-5FQGJX7Z-BSzccEgu.js">
|
|
173
|
+
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-BQ-BQLiJ.js">
|
|
174
174
|
<link rel="modulepreload" crossorigin href="./assets/command-2NPJCYDa.js">
|
|
175
|
+
<link rel="modulepreload" crossorigin href="./assets/field-DNlzfMKW.js">
|
|
175
176
|
<link rel="modulepreload" crossorigin href="./assets/popover-Bz_0Vkyf.js">
|
|
176
177
|
<link rel="modulepreload" crossorigin href="./assets/errors-iwK4b4VF.js">
|
|
177
|
-
<link rel="modulepreload" crossorigin href="./assets/download-
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/table-
|
|
178
|
+
<link rel="modulepreload" crossorigin href="./assets/download-BO6T2USS.js">
|
|
179
|
+
<link rel="modulepreload" crossorigin href="./assets/table-DQE9hQzM.js">
|
|
179
180
|
<link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-DPVTppnD.js">
|
|
180
181
|
<link rel="modulepreload" crossorigin href="./assets/error-banner-CLO6LFll.js">
|
|
181
|
-
<link rel="modulepreload" crossorigin href="./assets/formats-
|
|
182
|
+
<link rel="modulepreload" crossorigin href="./assets/formats-BRq458WH.js">
|
|
182
183
|
<link rel="modulepreload" crossorigin href="./assets/en-US-C7vnqfgk.js">
|
|
183
184
|
<link rel="modulepreload" crossorigin href="./assets/isValid-DdlR4-BY.js">
|
|
184
185
|
<link rel="modulepreload" crossorigin href="./assets/dates-DI1TvEEK.js">
|
|
@@ -187,51 +188,50 @@
|
|
|
187
188
|
<link rel="modulepreload" crossorigin href="./assets/emotion-is-prop-valid.esm-Dangy3Bv.js">
|
|
188
189
|
<link rel="modulepreload" crossorigin href="./assets/useDateFormatter-d3yglQmW.js">
|
|
189
190
|
<link rel="modulepreload" crossorigin href="./assets/react-icons.esm--O4lBTlZ.js">
|
|
191
|
+
<link rel="modulepreload" crossorigin href="./assets/RSPContexts-Bk1r00gJ.js">
|
|
190
192
|
<link rel="modulepreload" crossorigin href="./assets/table-6NxtGaCm.js">
|
|
191
193
|
<link rel="modulepreload" crossorigin href="./assets/ellipsis-KAhMaCIV.js">
|
|
192
194
|
<link rel="modulepreload" crossorigin href="./assets/external-link-BTNxSavU.js">
|
|
193
195
|
<link rel="modulepreload" crossorigin href="./assets/message-circle-1YLdnr8A.js">
|
|
194
196
|
<link rel="modulepreload" crossorigin href="./assets/trash-2-BJLYnZpG.js">
|
|
195
|
-
<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-
|
|
196
|
-
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-
|
|
197
|
+
<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-Ce2ksurd.js">
|
|
198
|
+
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-BEbyS3oG.js">
|
|
197
199
|
<link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-nqk474t8.js">
|
|
198
200
|
<link rel="modulepreload" crossorigin href="./assets/square-function-blYaQso8.js">
|
|
199
201
|
<link rel="modulepreload" crossorigin href="./assets/spec-D1ptWKg6.js">
|
|
200
202
|
<link rel="modulepreload" crossorigin href="./assets/ellipsis-vertical-CkwWkOQL.js">
|
|
201
203
|
<link rel="modulepreload" crossorigin href="./assets/refresh-cw-a_9k9BK7.js">
|
|
202
|
-
<link rel="modulepreload" crossorigin href="./assets/tree-actions-
|
|
203
|
-
<link rel="modulepreload" crossorigin href="./assets/components-
|
|
204
|
-
<link rel="modulepreload" crossorigin href="./assets/column-preview-
|
|
205
|
-
<link rel="modulepreload" crossorigin href="./assets/icons-
|
|
206
|
-
<link rel="modulepreload" crossorigin href="./assets/radio-group-
|
|
207
|
-
<link rel="modulepreload" crossorigin href="./assets/floating-outline-
|
|
204
|
+
<link rel="modulepreload" crossorigin href="./assets/tree-actions-DY8FUp3V.js">
|
|
205
|
+
<link rel="modulepreload" crossorigin href="./assets/components-zB5yT_R8.js">
|
|
206
|
+
<link rel="modulepreload" crossorigin href="./assets/column-preview-DA6nf5_Q.js">
|
|
207
|
+
<link rel="modulepreload" crossorigin href="./assets/icons-8tfAri2V.js">
|
|
208
|
+
<link rel="modulepreload" crossorigin href="./assets/radio-group-rsi1ibXY.js">
|
|
209
|
+
<link rel="modulepreload" crossorigin href="./assets/floating-outline-DbOtUfo-.js">
|
|
208
210
|
<link rel="modulepreload" crossorigin href="./assets/objectWithoutPropertiesLoose-DoKw85w0.js">
|
|
209
|
-
<link rel="modulepreload" crossorigin href="./assets/esm-
|
|
211
|
+
<link rel="modulepreload" crossorigin href="./assets/esm-Cb2bnV6o.js">
|
|
210
212
|
<link rel="modulepreload" crossorigin href="./assets/eye-off-BT-KOYV5.js">
|
|
211
213
|
<link rel="modulepreload" crossorigin href="./assets/plus-CxkHs8QM.js">
|
|
212
|
-
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-
|
|
214
|
+
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-BKYj8PNf.js">
|
|
213
215
|
<link rel="modulepreload" crossorigin href="./assets/file-headphone-B3fuktN0.js">
|
|
214
216
|
<link rel="modulepreload" crossorigin href="./assets/file-HTLbeC2b.js">
|
|
215
217
|
<link rel="modulepreload" crossorigin href="./assets/image-BIibSXT6.js">
|
|
216
|
-
<link rel="modulepreload" crossorigin href="./assets/file-icons-
|
|
217
|
-
<link rel="modulepreload" crossorigin href="./assets/switch-
|
|
218
|
+
<link rel="modulepreload" crossorigin href="./assets/file-icons-B6DaZdP0.js">
|
|
219
|
+
<link rel="modulepreload" crossorigin href="./assets/switch-BtkQp293.js">
|
|
218
220
|
<link rel="modulepreload" crossorigin href="./assets/events-CBm-hwqS.js">
|
|
219
|
-
<link rel="modulepreload" crossorigin href="./assets/globals-
|
|
221
|
+
<link rel="modulepreload" crossorigin href="./assets/globals-CpVAcN9Z.js">
|
|
220
222
|
<link rel="modulepreload" crossorigin href="./assets/share-oorMPghT.js">
|
|
221
223
|
<link rel="modulepreload" crossorigin href="./assets/blob-3_FN0u9S.js">
|
|
222
224
|
<link rel="modulepreload" crossorigin href="./assets/memoize-Tp7rARFe.js">
|
|
223
225
|
<link rel="modulepreload" crossorigin href="./assets/get-C-qh_et5.js">
|
|
224
226
|
<link rel="modulepreload" crossorigin href="./assets/_baseSet-CxV9N1bc.js">
|
|
225
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
227
|
+
<link rel="modulepreload" crossorigin href="./assets/state-BXNNuw9g.js">
|
|
226
228
|
<link rel="modulepreload" crossorigin href="./assets/label-xHqFtfdz.js">
|
|
227
|
-
<link rel="modulepreload" crossorigin href="./assets/textarea-
|
|
229
|
+
<link rel="modulepreload" crossorigin href="./assets/textarea-BBTcSr-i.js">
|
|
228
230
|
<link rel="modulepreload" crossorigin href="./assets/refresh-ccw-DLc784Sj.js">
|
|
229
|
-
<link rel="modulepreload" crossorigin href="./assets/form-
|
|
230
|
-
<link rel="modulepreload" crossorigin href="./assets/renderShortcut-
|
|
231
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
232
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
233
|
-
<link rel="modulepreload" crossorigin href="./assets/useBoolean-DP3412N2.js">
|
|
234
|
-
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-zUHU--0D.js">
|
|
231
|
+
<link rel="modulepreload" crossorigin href="./assets/form-CM8vYbSt.js">
|
|
232
|
+
<link rel="modulepreload" crossorigin href="./assets/renderShortcut-DK-VjfaX.js">
|
|
233
|
+
<link rel="modulepreload" crossorigin href="./assets/useBoolean-B8LMGUHl.js">
|
|
234
|
+
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-CWcgQCbT.js">
|
|
235
235
|
<link rel="modulepreload" crossorigin href="./assets/types-BYwxXaSY.js">
|
|
236
236
|
<link rel="modulepreload" crossorigin href="./assets/semaphore-X3ApuO41.js">
|
|
237
237
|
<link rel="modulepreload" crossorigin href="./assets/fileToBase64-BeYUTUzO.js">
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
<link rel="modulepreload" crossorigin href="./assets/house-D2ldnAB9.js">
|
|
246
246
|
<link rel="modulepreload" crossorigin href="./assets/square-rACnnz-q.js">
|
|
247
247
|
<link rel="modulepreload" crossorigin href="./assets/triangle-alert-CJ0ZIqcz.js">
|
|
248
|
-
<link rel="modulepreload" crossorigin href="./assets/bundle.esm-
|
|
248
|
+
<link rel="modulepreload" crossorigin href="./assets/bundle.esm-BXIlAZ6T.js">
|
|
249
249
|
<link rel="stylesheet" crossorigin href="./assets/cells-jmgGt1lS.css">
|
|
250
250
|
<link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DdDKmWlR.css">
|
|
251
251
|
<link rel="stylesheet" crossorigin href="./assets/JsonOutput-B7vuddcd.css">
|
package/package.json
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
import type { Column } from "@tanstack/react-table";
|
|
3
3
|
import { fireEvent, render, screen, within } from "@testing-library/react";
|
|
4
4
|
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
DateFilterMenu,
|
|
7
|
+
NumberFilterMenu,
|
|
8
|
+
TextFilterMenu,
|
|
9
|
+
} from "../column-header";
|
|
6
10
|
import { Filter } from "../filters";
|
|
7
11
|
|
|
8
12
|
beforeAll(() => {
|
|
@@ -201,3 +205,104 @@ describe("TextFilterMenu", () => {
|
|
|
201
205
|
expect(screen.getByRole("button", { name: /apply/i })).not.toBeDisabled();
|
|
202
206
|
});
|
|
203
207
|
});
|
|
208
|
+
|
|
209
|
+
type DateFilterValue = ReturnType<typeof Filter.date>;
|
|
210
|
+
|
|
211
|
+
function mockDateColumn(
|
|
212
|
+
filterType: "date" | "datetime" | "time" = "date",
|
|
213
|
+
initial?: DateFilterValue,
|
|
214
|
+
): Column<unknown, unknown> & {
|
|
215
|
+
setFilterValue: ReturnType<typeof vi.fn>;
|
|
216
|
+
} {
|
|
217
|
+
let filterValue = initial;
|
|
218
|
+
const setFilterValue = vi.fn((next) => {
|
|
219
|
+
filterValue = next;
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
id: "when",
|
|
223
|
+
columnDef: { meta: { dataType: filterType, filterType } },
|
|
224
|
+
getFilterValue: () => filterValue,
|
|
225
|
+
setFilterValue,
|
|
226
|
+
} as unknown as Column<unknown, unknown> & {
|
|
227
|
+
setFilterValue: ReturnType<typeof vi.fn>;
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
describe("DateFilterMenu", () => {
|
|
232
|
+
it("shows all expected operators in the dropdown", () => {
|
|
233
|
+
const column = mockDateColumn("date");
|
|
234
|
+
render(<DateFilterMenu column={column} filterType="date" />);
|
|
235
|
+
fireEvent.click(screen.getByRole("combobox"));
|
|
236
|
+
const listbox = screen.getByRole("listbox");
|
|
237
|
+
const labels = within(listbox)
|
|
238
|
+
.getAllByRole("option")
|
|
239
|
+
.map((o) => o.textContent);
|
|
240
|
+
expect(labels).toEqual([
|
|
241
|
+
"Between",
|
|
242
|
+
"Equals",
|
|
243
|
+
"Doesn't equal",
|
|
244
|
+
"Greater than",
|
|
245
|
+
"Greater than or equal",
|
|
246
|
+
"Less than",
|
|
247
|
+
"Less than or equal",
|
|
248
|
+
"Is null",
|
|
249
|
+
"Is not null",
|
|
250
|
+
]);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it("defaults to between mode and disables Apply until both bounds set", () => {
|
|
254
|
+
const column = mockDateColumn("date");
|
|
255
|
+
render(<DateFilterMenu column={column} filterType="date" />);
|
|
256
|
+
expect(screen.getByLabelText("range")).toBeInTheDocument();
|
|
257
|
+
expect(screen.getByRole("button", { name: /apply/i })).toBeDisabled();
|
|
258
|
+
expect(screen.queryByLabelText("value")).not.toBeInTheDocument();
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it("seeds between min/max from current filter", () => {
|
|
262
|
+
const column = mockDateColumn(
|
|
263
|
+
"date",
|
|
264
|
+
Filter.date({
|
|
265
|
+
operator: "between",
|
|
266
|
+
min: new Date("2024-01-01T00:00:00Z"),
|
|
267
|
+
max: new Date("2024-06-01T00:00:00Z"),
|
|
268
|
+
}),
|
|
269
|
+
);
|
|
270
|
+
render(<DateFilterMenu column={column} filterType="date" />);
|
|
271
|
+
expect(screen.getByLabelText("range")).toBeInTheDocument();
|
|
272
|
+
expect(screen.getByRole("button", { name: /apply/i })).not.toBeDisabled();
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
it("comparison operator swaps range for a single value picker", () => {
|
|
276
|
+
const column = mockDateColumn(
|
|
277
|
+
"date",
|
|
278
|
+
Filter.date({
|
|
279
|
+
operator: ">",
|
|
280
|
+
value: new Date("2024-01-01T00:00:00Z"),
|
|
281
|
+
}),
|
|
282
|
+
);
|
|
283
|
+
render(<DateFilterMenu column={column} filterType="date" />);
|
|
284
|
+
expect(screen.getByLabelText("value")).toBeInTheDocument();
|
|
285
|
+
expect(screen.queryByLabelText("range")).not.toBeInTheDocument();
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
it("time filter type renders two TimeFields for between", () => {
|
|
289
|
+
const column = mockDateColumn("time");
|
|
290
|
+
render(<DateFilterMenu column={column} filterType="time" />);
|
|
291
|
+
expect(screen.getByLabelText("min")).toBeInTheDocument();
|
|
292
|
+
expect(screen.getByLabelText("max")).toBeInTheDocument();
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it("selecting a nullish operator hides value inputs and commits on Apply", () => {
|
|
296
|
+
const column = mockDateColumn("date");
|
|
297
|
+
render(<DateFilterMenu column={column} filterType="date" />);
|
|
298
|
+
fireEvent.click(screen.getByRole("combobox"));
|
|
299
|
+
const listbox = screen.getByRole("listbox");
|
|
300
|
+
fireEvent.click(within(listbox).getByText("Is null"));
|
|
301
|
+
expect(screen.queryByLabelText("range")).not.toBeInTheDocument();
|
|
302
|
+
expect(screen.queryByLabelText("value")).not.toBeInTheDocument();
|
|
303
|
+
fireEvent.click(screen.getByRole("button", { name: /apply/i }));
|
|
304
|
+
expect(column.setFilterValue).toHaveBeenCalledWith(
|
|
305
|
+
Filter.date({ operator: "is_null" }),
|
|
306
|
+
);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
@@ -26,7 +26,14 @@ beforeAll(() => {
|
|
|
26
26
|
|
|
27
27
|
function makeColumn(
|
|
28
28
|
id: string,
|
|
29
|
-
filterType:
|
|
29
|
+
filterType:
|
|
30
|
+
| "text"
|
|
31
|
+
| "number"
|
|
32
|
+
| "boolean"
|
|
33
|
+
| "select"
|
|
34
|
+
| "date"
|
|
35
|
+
| "datetime"
|
|
36
|
+
| "time",
|
|
30
37
|
): Column<unknown, unknown> {
|
|
31
38
|
return {
|
|
32
39
|
id,
|
|
@@ -35,7 +42,13 @@ function makeColumn(
|
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
function mockTable(): Table<unknown> {
|
|
38
|
-
const columns = [
|
|
45
|
+
const columns = [
|
|
46
|
+
makeColumn("name", "text"),
|
|
47
|
+
makeColumn("age", "number"),
|
|
48
|
+
makeColumn("when", "date"),
|
|
49
|
+
makeColumn("at", "datetime"),
|
|
50
|
+
makeColumn("clock", "time"),
|
|
51
|
+
];
|
|
39
52
|
return {
|
|
40
53
|
getAllColumns: () => columns,
|
|
41
54
|
getColumn: (id: string) => columns.find((c) => c.id === id),
|
|
@@ -144,6 +157,79 @@ describe("FilterPillEditor — snapshot rehydration", () => {
|
|
|
144
157
|
});
|
|
145
158
|
});
|
|
146
159
|
|
|
160
|
+
describe("FilterPillEditor — date/datetime/time", () => {
|
|
161
|
+
it("rehydrates a date between snapshot with the range picker", () => {
|
|
162
|
+
renderWithProviders(
|
|
163
|
+
<FilterPillEditor
|
|
164
|
+
snapshot={{
|
|
165
|
+
columnId: "when",
|
|
166
|
+
value: Filter.date({
|
|
167
|
+
operator: "between",
|
|
168
|
+
min: new Date("2024-01-01T00:00:00Z"),
|
|
169
|
+
max: new Date("2024-06-01T00:00:00Z"),
|
|
170
|
+
}),
|
|
171
|
+
}}
|
|
172
|
+
table={mockTable()}
|
|
173
|
+
onClose={vi.fn()}
|
|
174
|
+
/>,
|
|
175
|
+
);
|
|
176
|
+
expect(screen.getByLabelText("range")).toBeInTheDocument();
|
|
177
|
+
expect(screen.queryByLabelText("value")).not.toBeInTheDocument();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("rehydrates a datetime <= snapshot with a single value picker", () => {
|
|
181
|
+
renderWithProviders(
|
|
182
|
+
<FilterPillEditor
|
|
183
|
+
snapshot={{
|
|
184
|
+
columnId: "at",
|
|
185
|
+
value: Filter.datetime({
|
|
186
|
+
operator: "<=",
|
|
187
|
+
value: new Date("2024-06-01T12:00:00Z"),
|
|
188
|
+
}),
|
|
189
|
+
}}
|
|
190
|
+
table={mockTable()}
|
|
191
|
+
onClose={vi.fn()}
|
|
192
|
+
/>,
|
|
193
|
+
);
|
|
194
|
+
expect(screen.getByLabelText("value")).toBeInTheDocument();
|
|
195
|
+
expect(screen.queryByLabelText("range")).not.toBeInTheDocument();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it("renders min/max TimeFields for time between", () => {
|
|
199
|
+
renderWithProviders(
|
|
200
|
+
<FilterPillEditor
|
|
201
|
+
snapshot={{
|
|
202
|
+
columnId: "clock",
|
|
203
|
+
value: Filter.time({
|
|
204
|
+
operator: "between",
|
|
205
|
+
min: new Date("2024-01-01T08:00:00Z"),
|
|
206
|
+
max: new Date("2024-01-01T17:00:00Z"),
|
|
207
|
+
}),
|
|
208
|
+
}}
|
|
209
|
+
table={mockTable()}
|
|
210
|
+
onClose={vi.fn()}
|
|
211
|
+
/>,
|
|
212
|
+
);
|
|
213
|
+
expect(screen.getByLabelText("min")).toBeInTheDocument();
|
|
214
|
+
expect(screen.getByLabelText("max")).toBeInTheDocument();
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it("hides the value slot for date is_null", () => {
|
|
218
|
+
renderWithProviders(
|
|
219
|
+
<FilterPillEditor
|
|
220
|
+
snapshot={{
|
|
221
|
+
columnId: "when",
|
|
222
|
+
value: Filter.date({ operator: "is_null" }),
|
|
223
|
+
}}
|
|
224
|
+
table={mockTable()}
|
|
225
|
+
onClose={vi.fn()}
|
|
226
|
+
/>,
|
|
227
|
+
);
|
|
228
|
+
expect(screen.queryByText("Value")).not.toBeInTheDocument();
|
|
229
|
+
expect(screen.queryByLabelText("range")).not.toBeInTheDocument();
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
147
233
|
describe("FilterPillEditor — apply", () => {
|
|
148
234
|
it("commits a number > filter via setColumnFilters", () => {
|
|
149
235
|
const table = mockTable();
|
|
@@ -215,22 +215,93 @@ describe("filterToFilterCondition", () => {
|
|
|
215
215
|
]);
|
|
216
216
|
});
|
|
217
217
|
|
|
218
|
-
it("handles date filter
|
|
219
|
-
const min = new Date(
|
|
220
|
-
const max = new Date(
|
|
218
|
+
it("handles date between filter", () => {
|
|
219
|
+
const min = new Date(2024, 0, 1);
|
|
220
|
+
const max = new Date(2024, 11, 31);
|
|
221
221
|
const result = filterToFilterCondition(
|
|
222
222
|
"created",
|
|
223
|
-
Filter.date({ min, max }),
|
|
223
|
+
Filter.date({ operator: "between", min, max }),
|
|
224
224
|
);
|
|
225
|
-
expect(result).
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
225
|
+
expect(result).toEqual([
|
|
226
|
+
{
|
|
227
|
+
column_id: "created",
|
|
228
|
+
operator: "between",
|
|
229
|
+
value: { min: "2024-01-01", max: "2024-12-31" },
|
|
230
|
+
type: "condition",
|
|
231
|
+
negate: false,
|
|
232
|
+
},
|
|
233
|
+
]);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it("handles date comparison filter", () => {
|
|
237
|
+
const value = new Date(2024, 5, 15);
|
|
238
|
+
const result = filterToFilterCondition(
|
|
239
|
+
"created",
|
|
240
|
+
Filter.date({ operator: ">=", value }),
|
|
241
|
+
);
|
|
242
|
+
expect(result).toEqual([
|
|
243
|
+
{
|
|
244
|
+
column_id: "created",
|
|
245
|
+
operator: ">=",
|
|
246
|
+
value: "2024-06-15",
|
|
247
|
+
type: "condition",
|
|
248
|
+
negate: false,
|
|
249
|
+
},
|
|
250
|
+
]);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it("handles datetime between filter as local ISO string without TZ", () => {
|
|
254
|
+
const min = new Date(2024, 0, 1, 0, 0, 0);
|
|
255
|
+
const max = new Date(2024, 11, 31, 23, 59, 59);
|
|
256
|
+
const result = filterToFilterCondition(
|
|
257
|
+
"created",
|
|
258
|
+
Filter.datetime({ operator: "between", min, max }),
|
|
259
|
+
);
|
|
260
|
+
expect(result).toEqual([
|
|
261
|
+
{
|
|
262
|
+
column_id: "created",
|
|
263
|
+
operator: "between",
|
|
264
|
+
value: {
|
|
265
|
+
min: "2024-01-01T00:00:00",
|
|
266
|
+
max: "2024-12-31T23:59:59",
|
|
267
|
+
},
|
|
268
|
+
type: "condition",
|
|
269
|
+
negate: false,
|
|
270
|
+
},
|
|
271
|
+
]);
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
it("handles time between filter as HH:MM:SS", () => {
|
|
275
|
+
const min = new Date(2024, 0, 1, 9, 30, 0);
|
|
276
|
+
const max = new Date(2024, 0, 1, 17, 45, 15);
|
|
277
|
+
const result = filterToFilterCondition(
|
|
278
|
+
"start",
|
|
279
|
+
Filter.time({ operator: "between", min, max }),
|
|
280
|
+
);
|
|
281
|
+
expect(result).toEqual([
|
|
282
|
+
{
|
|
283
|
+
column_id: "start",
|
|
284
|
+
operator: "between",
|
|
285
|
+
value: { min: "09:30:00", max: "17:45:15" },
|
|
286
|
+
type: "condition",
|
|
287
|
+
negate: false,
|
|
288
|
+
},
|
|
289
|
+
]);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
it("handles date is_null filter", () => {
|
|
293
|
+
const result = filterToFilterCondition(
|
|
294
|
+
"created",
|
|
295
|
+
Filter.date({ operator: "is_null" }),
|
|
296
|
+
);
|
|
297
|
+
expect(result).toEqual([
|
|
298
|
+
{
|
|
299
|
+
column_id: "created",
|
|
300
|
+
operator: "is_null",
|
|
301
|
+
type: "condition",
|
|
302
|
+
negate: false,
|
|
303
|
+
},
|
|
304
|
+
]);
|
|
234
305
|
});
|
|
235
306
|
|
|
236
307
|
it("every condition has type and negate fields", () => {
|