@malloy-publisher/sdk 0.0.138 → 0.0.139
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 +122 -1
- package/dist/ServerProvider-Bzid56gJ.cjs.js +1 -0
- package/dist/{ServerProvider-B8JWg8Mo.es.js → ServerProvider-D-y63tG0.es.js} +68 -68
- package/dist/client/api.d.ts +18 -0
- package/dist/client/index.cjs.js +1 -1
- package/dist/client/index.es.js +1 -1
- package/dist/components/Notebook/Notebook.d.ts +4 -1
- package/dist/components/filter/DimensionFilter.d.ts +43 -0
- package/dist/components/filter/index.d.ts +4 -0
- package/dist/components/filter/utils.d.ts +75 -0
- package/dist/components/index.d.ts +7 -6
- package/dist/components/styles.d.ts +3 -3
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/useDimensionFilters.d.ts +84 -0
- package/dist/hooks/useDimensionFiltersFromSpec.d.ts +52 -0
- package/dist/hooks/useDimensionFiltersQuery.d.ts +79 -0
- package/dist/hooks/useDimensionalFilterRangeData.d.ts +106 -0
- package/dist/index.cjs.js +141 -112
- package/dist/index.d.ts +3 -2
- package/dist/index.es.js +47795 -39755
- package/dist/sdk.css +1 -1
- package/package.json +16 -11
- package/src/components/Home/Home.tsx +15 -11
- package/src/components/Notebook/Notebook.tsx +315 -31
- package/src/components/RenderedResult/RenderedResult.tsx +22 -3
- package/src/components/filter/DimensionFilter.tsx +738 -0
- package/src/components/filter/index.ts +20 -0
- package/src/components/filter/utils.ts +354 -0
- package/src/components/highlighter.ts +14 -6
- package/src/components/index.ts +7 -6
- package/src/hooks/index.ts +31 -0
- package/src/hooks/useDimensionFilters.ts +322 -0
- package/src/hooks/useDimensionFiltersFromSpec.ts +117 -0
- package/src/hooks/useDimensionFiltersQuery.ts +300 -0
- package/src/hooks/useDimensionalFilterRangeData.ts +758 -0
- package/src/index.ts +3 -2
- package/dist/ServerProvider-DC74Txr5.cjs.js +0 -1
- package/dist/abap-BmBUA35e.es.js +0 -6
- package/dist/abap-Dwt2rH6y.cjs.js +0 -1
- package/dist/actionscript-3-mj8Uhnsc.cjs.js +0 -1
- package/dist/actionscript-3-zFUbzQa9.es.js +0 -6
- package/dist/ada-CBvPkFpZ.es.js +0 -6
- package/dist/ada-DZM58Vqs.cjs.js +0 -1
- package/dist/andromeeda-BXc5FOIb.cjs.js +0 -1
- package/dist/andromeeda-uXNdzNpk.es.js +0 -4
- package/dist/angular-html-B60m4jt-.cjs.js +0 -1
- package/dist/angular-html-D3aW1y6T.es.js +0 -32
- package/dist/angular-ts-Jud40GrY.es.js +0 -21
- package/dist/angular-ts-SIlYrqkG.cjs.js +0 -1
- package/dist/apache-CVNlsSDc.es.js +0 -6
- package/dist/apache-D7v5fxtZ.cjs.js +0 -1
- package/dist/apex-4hrAnw0a.cjs.js +0 -1
- package/dist/apex-DFk3KRB1.es.js +0 -6
- package/dist/apl-CKSaOFbt.cjs.js +0 -1
- package/dist/apl-pE3PRTDr.es.js +0 -16
- package/dist/applescript-CYMR_y0g.es.js +0 -6
- package/dist/applescript-Cnd3Dxju.cjs.js +0 -1
- package/dist/ara-4QmU5e04.es.js +0 -6
- package/dist/ara-BQ2aGbFQ.cjs.js +0 -1
- package/dist/asciidoc-C6nYvw8K.cjs.js +0 -1
- package/dist/asciidoc-v_1bjgUg.es.js +0 -6
- package/dist/asm-CQnBVCj-.cjs.js +0 -1
- package/dist/asm-RC0Yh-NZ.es.js +0 -6
- package/dist/astro-Be6fybGX.es.js +0 -16
- package/dist/astro-KhYkz6Xu.cjs.js +0 -1
- package/dist/aurora-x-BwoVEUWZ.es.js +0 -4
- package/dist/aurora-x-C5IpmIOG.cjs.js +0 -1
- package/dist/awk-DUx4h__E.cjs.js +0 -1
- package/dist/awk-gPH8MVMW.es.js +0 -6
- package/dist/ayu-dark-Cv7nTiif.cjs.js +0 -1
- package/dist/ayu-dark-CxPZkpb2.es.js +0 -4
- package/dist/ballerina-CXlzbmzl.cjs.js +0 -1
- package/dist/ballerina-kvLnRU_e.es.js +0 -6
- package/dist/bat-BHYy44sT.es.js +0 -6
- package/dist/bat-DlMT9sut.cjs.js +0 -1
- package/dist/beancount-CyyiuUzM.cjs.js +0 -1
- package/dist/beancount-D-MADTs_.es.js +0 -6
- package/dist/berry-B0EjuzrL.cjs.js +0 -1
- package/dist/berry-Ci9U0o4h.es.js +0 -6
- package/dist/bibtex-CX618D15.es.js +0 -6
- package/dist/bibtex-CfoG9xRq.cjs.js +0 -1
- package/dist/bicep-D6PH_9IY.cjs.js +0 -1
- package/dist/bicep-iuYiPopT.es.js +0 -6
- package/dist/blade-C0tMuk8f.cjs.js +0 -1
- package/dist/blade-DmXp5Zcz.es.js +0 -18
- package/dist/bsl-CfHcite8.cjs.js +0 -1
- package/dist/bsl-NPX_d-bb.es.js +0 -8
- package/dist/c-C4sXGJZM.cjs.js +0 -1
- package/dist/c-DASdrs7p.es.js +0 -6
- package/dist/cadence-BDALQi26.es.js +0 -6
- package/dist/cadence-Dq2CYzXG.cjs.js +0 -1
- package/dist/cairo-17kO8-kb.es.js +0 -8
- package/dist/cairo-CcKpJkyf.cjs.js +0 -1
- package/dist/catppuccin-frappe-BrTOiad2.es.js +0 -4
- package/dist/catppuccin-frappe-DXAedND3.cjs.js +0 -1
- package/dist/catppuccin-latte-D-dc_R4m.es.js +0 -4
- package/dist/catppuccin-latte-mwGw3-Ej.cjs.js +0 -1
- package/dist/catppuccin-macchiato-DN4jOp0G.es.js +0 -4
- package/dist/catppuccin-macchiato-cQCk9ADg.cjs.js +0 -1
- package/dist/catppuccin-mocha-B8yCE3-3.es.js +0 -4
- package/dist/catppuccin-mocha-ClSzDZSl.cjs.js +0 -1
- package/dist/clarity-CNgV2Ths.es.js +0 -6
- package/dist/clarity-ytMkUD5Q.cjs.js +0 -1
- package/dist/clojure-B_Wv414H.cjs.js +0 -1
- package/dist/clojure-CsKKFGwv.es.js +0 -6
- package/dist/cmake-Dr-A3iJx.es.js +0 -6
- package/dist/cmake-TBUaQXYY.cjs.js +0 -1
- package/dist/cobol-BzcJm6ie.es.js +0 -10
- package/dist/cobol-DXFNH4EH.cjs.js +0 -1
- package/dist/codeowners-Bt9yU6NX.es.js +0 -6
- package/dist/codeowners-QhPK6lIJ.cjs.js +0 -1
- package/dist/codeql-B7Q9tkDJ.cjs.js +0 -1
- package/dist/codeql-DBNTqJi1.es.js +0 -6
- package/dist/coffee-GRRSkgX1.cjs.js +0 -1
- package/dist/coffee-q2iaxUnQ.es.js +0 -8
- package/dist/common-lisp-Ced3ctK5.cjs.js +0 -1
- package/dist/common-lisp-r7ZEOG7T.es.js +0 -6
- package/dist/coq-BTRB4iqi.cjs.js +0 -1
- package/dist/coq-CB6Pv_W9.es.js +0 -6
- package/dist/cpp-CPOvHZqs.cjs.js +0 -1
- package/dist/cpp-CPQtoCcU.es.js +0 -18
- package/dist/crystal-BY_Cg265.es.js +0 -18
- package/dist/crystal-C6AG-iew.cjs.js +0 -1
- package/dist/csharp-CYWRhZ2R.es.js +0 -6
- package/dist/csharp-TKds-MhG.cjs.js +0 -1
- package/dist/css-B0kbn78J.cjs.js +0 -1
- package/dist/css-D1aVdRIU.es.js +0 -6
- package/dist/csv-BVJjiaC3.cjs.js +0 -1
- package/dist/csv-DvCncUGQ.es.js +0 -6
- package/dist/cue-BXMrmvay.es.js +0 -6
- package/dist/cue-Cz4J-rnd.cjs.js +0 -1
- package/dist/cypher-DTm5zNR1.es.js +0 -6
- package/dist/cypher-DuKTiyez.cjs.js +0 -1
- package/dist/d-BW9Wd7aK.cjs.js +0 -1
- package/dist/d-D6ZXmn3l.es.js +0 -6
- package/dist/dark-plus-Cd5emcYO.cjs.js +0 -1
- package/dist/dark-plus-pUHDTVV0.es.js +0 -4
- package/dist/dart-CWs-er6b.cjs.js +0 -1
- package/dist/dart-Dz59Is3F.es.js +0 -6
- package/dist/dax-CDxFL2Kb.cjs.js +0 -1
- package/dist/dax-DTVGzydb.es.js +0 -6
- package/dist/desktop-CFgo0jo7.cjs.js +0 -1
- package/dist/desktop-Db9vb-dl.es.js +0 -6
- package/dist/diff-BsEkKwI8.cjs.js +0 -1
- package/dist/diff-XmNrvgM1.es.js +0 -6
- package/dist/docker-DWH2onkn.es.js +0 -6
- package/dist/docker-hwiw4W8I.cjs.js +0 -1
- package/dist/dotenv-4337wvzu.es.js +0 -6
- package/dist/dotenv-CJ5o3G1C.cjs.js +0 -1
- package/dist/dracula-BNgwAJ-d.cjs.js +0 -1
- package/dist/dracula-BtZx2Kac.es.js +0 -4
- package/dist/dracula-soft-BHZ7sHFu.cjs.js +0 -1
- package/dist/dracula-soft-BKa-aqBv.es.js +0 -4
- package/dist/dream-maker-CvvfrJSx.es.js +0 -6
- package/dist/dream-maker-DBharE9Q.cjs.js +0 -1
- package/dist/edge-DI6_BHKG.es.js +0 -12
- package/dist/edge-i77KJtJz.cjs.js +0 -1
- package/dist/elixir-D00NoPSM.cjs.js +0 -1
- package/dist/elixir-ic9y5jcd.es.js +0 -8
- package/dist/elm-Bhj5Vf-e.cjs.js +0 -1
- package/dist/elm-DxnUqUaW.es.js +0 -8
- package/dist/emacs-lisp-BAefI874.es.js +0 -6
- package/dist/emacs-lisp-CDDyFsvQ.cjs.js +0 -1
- package/dist/erb-Cbj2YePa.es.js +0 -10
- package/dist/erb-Dybaw01v.cjs.js +0 -1
- package/dist/erlang-3VgdrQXV.cjs.js +0 -1
- package/dist/erlang-CmIiwF3I.es.js +0 -6
- package/dist/everforest-dark-DMCBqXCK.es.js +0 -4
- package/dist/everforest-dark-_sBMomR1.cjs.js +0 -1
- package/dist/everforest-light-BbXl82Em.es.js +0 -4
- package/dist/everforest-light-H0xoYxl0.cjs.js +0 -1
- package/dist/fennel-BvcDRFAV.cjs.js +0 -1
- package/dist/fennel-DNqkz9pE.es.js +0 -6
- package/dist/fish-CnamI0Ar.cjs.js +0 -1
- package/dist/fish-DIm72t2T.es.js +0 -6
- package/dist/fluent-BapTxJsC.es.js +0 -6
- package/dist/fluent-DFpT66K8.cjs.js +0 -1
- package/dist/fortran-fixed-form-DECY15PY.es.js +0 -8
- package/dist/fortran-fixed-form-u_RcUPMu.cjs.js +0 -1
- package/dist/fortran-free-form-CNDsBFUj.es.js +0 -6
- package/dist/fortran-free-form-IaGrWIda.cjs.js +0 -1
- package/dist/fsharp-B-aK2rr3.cjs.js +0 -1
- package/dist/fsharp-D2ZqviWP.es.js +0 -8
- package/dist/gdresource-BBAqNWe4.cjs.js +0 -1
- package/dist/gdresource-RIsK8sku.es.js +0 -10
- package/dist/gdscript-5N_43TPQ.cjs.js +0 -1
- package/dist/gdscript-D7aheHm-.es.js +0 -6
- package/dist/gdshader-BGJEsM2Z.es.js +0 -6
- package/dist/gdshader-Bl85Hrm5.cjs.js +0 -1
- package/dist/genie-C9gPjc6J.es.js +0 -6
- package/dist/genie-DGsxMAbQ.cjs.js +0 -1
- package/dist/gherkin-CVV6nEUH.cjs.js +0 -1
- package/dist/gherkin-bka1Exbx.es.js +0 -6
- package/dist/git-commit-BRJ1E4Bx.es.js +0 -8
- package/dist/git-commit-CwfgI4fD.cjs.js +0 -1
- package/dist/git-rebase-C3X7aMpn.es.js +0 -8
- package/dist/git-rebase-DUvbIQDw.cjs.js +0 -1
- package/dist/github-dark-BKL9xNgN.cjs.js +0 -1
- package/dist/github-dark-DenFmJkN.es.js +0 -4
- package/dist/github-dark-default-BJPUVz4H.es.js +0 -4
- package/dist/github-dark-default-Dsv5MuSi.cjs.js +0 -1
- package/dist/github-dark-dimmed-CtB9hz8U.cjs.js +0 -1
- package/dist/github-dark-dimmed-DUshB20C.es.js +0 -4
- package/dist/github-dark-high-contrast-BqZVM-jF.cjs.js +0 -1
- package/dist/github-dark-high-contrast-D3aGCnF8.es.js +0 -4
- package/dist/github-light-BFTOhCbz.cjs.js +0 -1
- package/dist/github-light-JYsPkUQd.es.js +0 -4
- package/dist/github-light-default-BZoWH9dH.cjs.js +0 -1
- package/dist/github-light-default-D99KPAby.es.js +0 -4
- package/dist/github-light-high-contrast-BbmZE-Mp.es.js +0 -4
- package/dist/github-light-high-contrast-Ks3kPGJU.cjs.js +0 -1
- package/dist/gleam-B4k9YFGD.es.js +0 -6
- package/dist/gleam-nR4mjrhK.cjs.js +0 -1
- package/dist/glimmer-js-C4MQf3Na.es.js +0 -14
- package/dist/glimmer-js-CNfyUqSb.cjs.js +0 -1
- package/dist/glimmer-ts-Bp7_dELi.cjs.js +0 -1
- package/dist/glimmer-ts-CoYpqZrZ.es.js +0 -14
- package/dist/glsl-BYTq1Tfl.es.js +0 -8
- package/dist/glsl-CIu1PL9X.cjs.js +0 -1
- package/dist/gnuplot-CurtDYoJ.cjs.js +0 -1
- package/dist/gnuplot-DnWoRZt-.es.js +0 -6
- package/dist/go-BErP6iv1.es.js +0 -6
- package/dist/go-CM9_GlwL.cjs.js +0 -1
- package/dist/graphql-BnnSMMC2.cjs.js +0 -1
- package/dist/graphql-g3nHRc0M.es.js +0 -14
- package/dist/groovy-BaVp9Il5.cjs.js +0 -1
- package/dist/groovy-IWs5-NIO.es.js +0 -6
- package/dist/hack-BVxH3fsq.cjs.js +0 -1
- package/dist/hack-wPAsyujS.es.js +0 -10
- package/dist/haml-4TJ757dz.es.js +0 -10
- package/dist/haml-vutdexHh.cjs.js +0 -1
- package/dist/handlebars-7GDLw__F.es.js +0 -14
- package/dist/handlebars-COmZnO8P.cjs.js +0 -1
- package/dist/haskell-CtlGos0K.es.js +0 -6
- package/dist/haskell-suhyCHEm.cjs.js +0 -1
- package/dist/haxe-BIQU1qHi.cjs.js +0 -1
- package/dist/haxe-CZZ33vZw.es.js +0 -6
- package/dist/hcl-6hOg9WP4.es.js +0 -6
- package/dist/hcl-CbQ1yCnz.cjs.js +0 -1
- package/dist/hjson-CgwED-oz.es.js +0 -6
- package/dist/hjson-Ddklb4QM.cjs.js +0 -1
- package/dist/hlsl-3-lv4gi7.es.js +0 -6
- package/dist/hlsl-B4NkiBfC.cjs.js +0 -1
- package/dist/houston-BDYrDoDW.es.js +0 -4
- package/dist/houston-T57H3gQZ.cjs.js +0 -1
- package/dist/html-Dc-Bg17s.cjs.js +0 -1
- package/dist/html-PSPajZka.es.js +0 -10
- package/dist/html-derivative-Brb3b4aI.es.js +0 -8
- package/dist/html-derivative-CY9mJeT0.cjs.js +0 -1
- package/dist/http-BrKsebcH.cjs.js +0 -1
- package/dist/http-CWBcr-Ch.es.js +0 -14
- package/dist/hxml-DLduiIv3.es.js +0 -8
- package/dist/hxml-DbGPHkY4.cjs.js +0 -1
- package/dist/hy-C2xHhR6I.es.js +0 -6
- package/dist/hy-DpyTdO3T.cjs.js +0 -1
- package/dist/imba-BEYqRZzB.es.js +0 -8
- package/dist/imba-CAIkF-GD.cjs.js +0 -1
- package/dist/ini-BUcvsX-U.es.js +0 -6
- package/dist/ini-CymULaw_.cjs.js +0 -1
- package/dist/java-B7odJ7Ap.es.js +0 -6
- package/dist/java-Bn1Lvoni.cjs.js +0 -1
- package/dist/javascript-Bnnicc83.cjs.js +0 -1
- package/dist/javascript-fa8UlHZE.es.js +0 -6
- package/dist/jinja-BoeZymy4.cjs.js +0 -1
- package/dist/jinja-DKLHYjK0.es.js +0 -11
- package/dist/jison-C0DlFEjB.cjs.js +0 -1
- package/dist/jison-CzPfUIvM.es.js +0 -8
- package/dist/json-71t8ZF9g.es.js +0 -6
- package/dist/json-y-J1j5EW.cjs.js +0 -1
- package/dist/json5-CzvlWgZ7.cjs.js +0 -1
- package/dist/json5-Z7F6rA6a.es.js +0 -6
- package/dist/jsonc-BnhWfmQw.cjs.js +0 -1
- package/dist/jsonc-Dphhs4m2.es.js +0 -6
- package/dist/jsonl-BbGkWPJz.cjs.js +0 -1
- package/dist/jsonl-D9jj92Gg.es.js +0 -6
- package/dist/jsonnet-Bn--UDZ1.cjs.js +0 -1
- package/dist/jsonnet-DEQ7IUoJ.es.js +0 -6
- package/dist/jssm-4CSVp8lc.cjs.js +0 -1
- package/dist/jssm-j74e88UX.es.js +0 -6
- package/dist/jsx-Bkesy5tT.es.js +0 -6
- package/dist/jsx-D8YwVp-7.cjs.js +0 -1
- package/dist/julia-B_r6juN7.es.js +0 -16
- package/dist/julia-DLxGoAlk.cjs.js +0 -1
- package/dist/kanagawa-dragon-BJZF7xDr.cjs.js +0 -1
- package/dist/kanagawa-dragon-CiKur4Hl.es.js +0 -4
- package/dist/kanagawa-lotus-BKu-smKu.es.js +0 -4
- package/dist/kanagawa-lotus-BhgzmRV4.cjs.js +0 -1
- package/dist/kanagawa-wave-BgJip59C.cjs.js +0 -1
- package/dist/kanagawa-wave-CQwozSzG.es.js +0 -4
- package/dist/kotlin-DCgZY7Ii.es.js +0 -6
- package/dist/kotlin-DDI6myF6.cjs.js +0 -1
- package/dist/kusto-Cw029H-v.es.js +0 -6
- package/dist/kusto-OZxALJZT.cjs.js +0 -1
- package/dist/laserwave--izBLY1I.cjs.js +0 -1
- package/dist/laserwave-6a00oqik.es.js +0 -4
- package/dist/latex-CXOK56Uv.cjs.js +0 -1
- package/dist/latex-GxBxlqbc.es.js +0 -8
- package/dist/lean-CYSet4vs.es.js +0 -6
- package/dist/lean-D1iY-35j.cjs.js +0 -1
- package/dist/less-DIaY7vQJ.cjs.js +0 -1
- package/dist/less-DQA4v-Nm.es.js +0 -6
- package/dist/light-plus-B5D0le0o.cjs.js +0 -1
- package/dist/light-plus-CZuVqSLX.es.js +0 -4
- package/dist/liquid-BYouVITI.cjs.js +0 -1
- package/dist/liquid-BxBkR-z5.es.js +0 -14
- package/dist/log-BIXUeBaj.cjs.js +0 -1
- package/dist/log-D2eRfqDn.es.js +0 -6
- package/dist/logo-B2d3b27P.cjs.js +0 -1
- package/dist/logo-QEAtGWZ9.es.js +0 -6
- package/dist/lua-B2_GGnC5.cjs.js +0 -1
- package/dist/lua-DeXVjwzF.es.js +0 -8
- package/dist/luau-BjYGiqID.es.js +0 -6
- package/dist/luau-CvqAeq4F.cjs.js +0 -1
- package/dist/make-BjuHP00g.es.js +0 -6
- package/dist/make-Oob5Z9Pk.cjs.js +0 -1
- package/dist/markdown-B6guhLWd.es.js +0 -6
- package/dist/markdown-BGBuj4LZ.cjs.js +0 -1
- package/dist/marko-CS7eEGs3.cjs.js +0 -1
- package/dist/marko-DwPYPpB3.es.js +0 -14
- package/dist/material-theme-D6KBX41T.es.js +0 -4
- package/dist/material-theme-Dj0-OyRN.cjs.js +0 -1
- package/dist/material-theme-darker-CkRroheE.es.js +0 -4
- package/dist/material-theme-darker-Dvfs29ir.cjs.js +0 -1
- package/dist/material-theme-lighter-BUBw43Yz.es.js +0 -4
- package/dist/material-theme-lighter-EU3ZGl_r.cjs.js +0 -1
- package/dist/material-theme-ocean-ClGX14Ja.es.js +0 -4
- package/dist/material-theme-ocean-px_3Pwqa.cjs.js +0 -1
- package/dist/material-theme-palenight-38jxvsGX.cjs.js +0 -1
- package/dist/material-theme-palenight-C1RVm8K1.es.js +0 -4
- package/dist/matlab-BpQlIJiw.es.js +0 -6
- package/dist/matlab-CbN2rF6P.cjs.js +0 -1
- package/dist/mdc-Bkl-bu_Z.cjs.js +0 -1
- package/dist/mdc-X4YjkufV.es.js +0 -12
- package/dist/mdx-Cl31h8mi.cjs.js +0 -1
- package/dist/mdx-DIoECIFU.es.js +0 -6
- package/dist/mermaid-BZ7WHNIe.es.js +0 -6
- package/dist/mermaid-CSogK_LM.cjs.js +0 -1
- package/dist/min-dark-C7ak0t6c.es.js +0 -4
- package/dist/min-dark-tt5o_I5e.cjs.js +0 -1
- package/dist/min-light-CKFxVcPp.es.js +0 -4
- package/dist/min-light-tmTHl_CQ.cjs.js +0 -1
- package/dist/mipsasm-BseoYJQp.cjs.js +0 -1
- package/dist/mipsasm-DusDYkFc.es.js +0 -6
- package/dist/mojo-CY9jaezJ.es.js +0 -6
- package/dist/mojo-D8QAG3Ze.cjs.js +0 -1
- package/dist/monokai-C1KBYcO0.es.js +0 -4
- package/dist/monokai-DMIxv6MM.cjs.js +0 -1
- package/dist/move-ChphFumd.es.js +0 -6
- package/dist/move-DaBrcjat.cjs.js +0 -1
- package/dist/narrat-Dz4d7OmN.es.js +0 -6
- package/dist/narrat-oOfAO4q8.cjs.js +0 -1
- package/dist/nextflow-BxJSKvPb.cjs.js +0 -1
- package/dist/nextflow-DW0Yq9a2.es.js +0 -6
- package/dist/nginx-ChI-VqNT.es.js +0 -8
- package/dist/nginx-LuyFICzP.cjs.js +0 -1
- package/dist/night-owl-BN78kThQ.cjs.js +0 -1
- package/dist/night-owl-Bm2rzalh.es.js +0 -4
- package/dist/nim-BiJA-5u7.es.js +0 -20
- package/dist/nim-DkC83hsN.cjs.js +0 -1
- package/dist/nix-Cg5uV_xg.es.js +0 -6
- package/dist/nix-DNME0Ea7.cjs.js +0 -1
- package/dist/nord-CC5OiUXg.es.js +0 -4
- package/dist/nord-Ca5AGUWc.cjs.js +0 -1
- package/dist/nushell-BfRnzRWn.es.js +0 -6
- package/dist/nushell-DI9Z3l3M.cjs.js +0 -1
- package/dist/objective-c-BGg9R27G.es.js +0 -6
- package/dist/objective-c-DVx8Rcni.cjs.js +0 -1
- package/dist/objective-cpp-CJ3y3V_5.es.js +0 -6
- package/dist/objective-cpp-s6XI7Jvk.cjs.js +0 -1
- package/dist/ocaml-BZLsfx_o.es.js +0 -6
- package/dist/ocaml-kUzDDUf2.cjs.js +0 -1
- package/dist/one-dark-pro-D7-kP8fv.es.js +0 -4
- package/dist/one-dark-pro-JOzzHStv.cjs.js +0 -1
- package/dist/one-light-020-h_lv.cjs.js +0 -1
- package/dist/one-light-D9sNaUtq.es.js +0 -4
- package/dist/pascal-D509_I72.cjs.js +0 -1
- package/dist/pascal-l2bqd7Dz.es.js +0 -6
- package/dist/perl-CkXYjL3t.es.js +0 -16
- package/dist/perl-DUnCLRB_.cjs.js +0 -1
- package/dist/php-D0k1sQr6.cjs.js +0 -1
- package/dist/php-q40Yjh5d.es.js +0 -18
- package/dist/plastic-CSTz3KZp.es.js +0 -4
- package/dist/plastic-r5piqq-S.cjs.js +0 -1
- package/dist/plsql-C_qH_YOK.cjs.js +0 -1
- package/dist/plsql-oVq_K_wH.es.js +0 -6
- package/dist/po-5jaeIyVd.es.js +0 -6
- package/dist/po-CBsLQIcu.cjs.js +0 -1
- package/dist/poimandres-BLP3NNjc.cjs.js +0 -1
- package/dist/poimandres-C-VADXHD.es.js +0 -4
- package/dist/polar-De-CDeYv.cjs.js +0 -1
- package/dist/polar-wcLp8ci7.es.js +0 -6
- package/dist/postcss-BZ3MNRIJ.es.js +0 -6
- package/dist/postcss-BtcsgaYj.cjs.js +0 -1
- package/dist/powerquery-B0rHn13V.cjs.js +0 -1
- package/dist/powerquery-CgRa2XRw.es.js +0 -6
- package/dist/powershell-Diwyv8Eh.es.js +0 -6
- package/dist/powershell-rCX2OYXT.cjs.js +0 -1
- package/dist/prisma-BaaUHYMp.cjs.js +0 -1
- package/dist/prisma-COL_v1x4.es.js +0 -6
- package/dist/prolog-CuvJOxqT.es.js +0 -6
- package/dist/prolog-DrXD2tGS.cjs.js +0 -1
- package/dist/proto-BtmQjBQu.cjs.js +0 -1
- package/dist/proto-o9HLmF90.es.js +0 -6
- package/dist/pug-Br4hpvIv.es.js +0 -12
- package/dist/pug-CFQMpTUe.cjs.js +0 -1
- package/dist/puppet-cIrXIuy8.cjs.js +0 -1
- package/dist/puppet-wpGOnQp5.es.js +0 -6
- package/dist/purescript-B_1NgE2N.es.js +0 -6
- package/dist/purescript-CX9QPs2N.cjs.js +0 -1
- package/dist/python-B9x3euv6.cjs.js +0 -1
- package/dist/python-xYxLFJY-.es.js +0 -6
- package/dist/qml-CzqrIM5W.cjs.js +0 -1
- package/dist/qml-D5gi21kK.es.js +0 -8
- package/dist/qmldir-BInDYbpo.es.js +0 -6
- package/dist/qmldir-DNF9H2ir.cjs.js +0 -1
- package/dist/qss-C744dLby.cjs.js +0 -1
- package/dist/qss-D-h4NdUG.es.js +0 -6
- package/dist/r-DgOc9oMe.cjs.js +0 -1
- package/dist/r-F-9I-ITZ.es.js +0 -6
- package/dist/racket-BoD1TBFT.es.js +0 -6
- package/dist/racket-Do9_vqnd.cjs.js +0 -1
- package/dist/raku-BW8wAUIz.cjs.js +0 -1
- package/dist/raku-IaYcw19m.es.js +0 -6
- package/dist/razor-Bt_t1YJb.es.js +0 -10
- package/dist/razor-COQhlwWF.cjs.js +0 -1
- package/dist/red-7y8PH7HH.es.js +0 -4
- package/dist/red-BQGOv1D5.cjs.js +0 -1
- package/dist/reg-CGWN_v-z.cjs.js +0 -1
- package/dist/reg-CMUdAgIP.es.js +0 -6
- package/dist/regexp-GiFkbxS-.es.js +0 -6
- package/dist/regexp-N7Z4hEeU.cjs.js +0 -1
- package/dist/rel-BYqA7mnV.cjs.js +0 -1
- package/dist/rel-BaRn3QX7.es.js +0 -6
- package/dist/riscv-B9V3SsvW.es.js +0 -6
- package/dist/riscv-ayQMUpo9.cjs.js +0 -1
- package/dist/rose-pine-DKEdv1Oe.cjs.js +0 -1
- package/dist/rose-pine-DhT-HZE9.es.js +0 -4
- package/dist/rose-pine-dawn-Bvt6DtVH.cjs.js +0 -1
- package/dist/rose-pine-dawn-DiCjL2i4.es.js +0 -4
- package/dist/rose-pine-moon-BNmGHlcn.es.js +0 -4
- package/dist/rose-pine-moon-cHuJy0Ng.cjs.js +0 -1
- package/dist/rst-BmKw97ch.es.js +0 -22
- package/dist/rst-Bq-h_T5U.cjs.js +0 -1
- package/dist/ruby-Bw5IEIKD.cjs.js +0 -1
- package/dist/ruby-cs7BSa_9.es.js +0 -30
- package/dist/rust-BnFKGEfa.cjs.js +0 -1
- package/dist/rust-Pc7DCsZD.es.js +0 -6
- package/dist/sas-BWKaSYkZ.cjs.js +0 -1
- package/dist/sas-DgvHx4mL.es.js +0 -8
- package/dist/sass-B9gYryDE.cjs.js +0 -1
- package/dist/sass-iCyS6eP9.es.js +0 -6
- package/dist/scala-C85dOwSU.cjs.js +0 -1
- package/dist/scala-Cly-fENF.es.js +0 -6
- package/dist/scheme-B_XUaARm.cjs.js +0 -1
- package/dist/scheme-Zi24oEYu.es.js +0 -6
- package/dist/scss-B_hSZppj.es.js +0 -8
- package/dist/scss-CV3c8_Y7.cjs.js +0 -1
- package/dist/sdbl-7Y5u0OW0.cjs.js +0 -1
- package/dist/sdbl-BBamrXFL.es.js +0 -6
- package/dist/shaderlab-CJ8U2E2w.cjs.js +0 -1
- package/dist/shaderlab-U9mqcu_f.es.js +0 -8
- package/dist/shellscript-3DYM9fut.cjs.js +0 -1
- package/dist/shellscript-Dn0-btNd.es.js +0 -6
- package/dist/shellsession-CbKmorC3.cjs.js +0 -1
- package/dist/shellsession-LvXGClmj.es.js +0 -8
- package/dist/slack-dark-akqwQ7ED.cjs.js +0 -1
- package/dist/slack-dark-i7wN4OET.es.js +0 -4
- package/dist/slack-ochin-BoQQWmTv.cjs.js +0 -1
- package/dist/slack-ochin-ndHf0LoP.es.js +0 -4
- package/dist/smalltalk-CCvytUuW.cjs.js +0 -1
- package/dist/smalltalk-Cns31tKw.es.js +0 -6
- package/dist/snazzy-light-BlSJXAu4.es.js +0 -4
- package/dist/snazzy-light-D_IwRieF.cjs.js +0 -1
- package/dist/solarized-dark-UTmkh7lw.es.js +0 -4
- package/dist/solarized-dark-gmm-WbDC.cjs.js +0 -1
- package/dist/solarized-light-BheCkDPT.es.js +0 -4
- package/dist/solarized-light-DzcxRSZP.cjs.js +0 -1
- package/dist/solidity-BG_k8fA_.es.js +0 -6
- package/dist/solidity-BcNcjFC4.cjs.js +0 -1
- package/dist/soy-B2d9ZydM.cjs.js +0 -1
- package/dist/soy-C0yEn39K.es.js +0 -8
- package/dist/sparql-CiBxIK0g.cjs.js +0 -1
- package/dist/sparql-CuZaxpno.es.js +0 -8
- package/dist/splunk-CTqDjQdo.es.js +0 -6
- package/dist/splunk-CzITjJj7.cjs.js +0 -1
- package/dist/sql-BqWZrLHB.cjs.js +0 -1
- package/dist/sql-DCkt643-.es.js +0 -6
- package/dist/ssh-config-DHHGll-v.es.js +0 -6
- package/dist/ssh-config-DUPeuEdB.cjs.js +0 -1
- package/dist/stata-B8m3qL-x.cjs.js +0 -1
- package/dist/stata-Dv81f34z.es.js +0 -8
- package/dist/stylus-ByHs6N-o.cjs.js +0 -1
- package/dist/stylus-n_9f0QQ5.es.js +0 -6
- package/dist/svelte-CfLoBBrI.cjs.js +0 -1
- package/dist/svelte-SoJd35Jr.es.js +0 -14
- package/dist/swift-BAWqNR8A.es.js +0 -6
- package/dist/swift-C5DnOriA.cjs.js +0 -1
- package/dist/synthwave-84-BBRLOmNT.cjs.js +0 -1
- package/dist/synthwave-84-NU3C_KFZ.es.js +0 -4
- package/dist/system-verilog-ClPLYLwh.cjs.js +0 -1
- package/dist/system-verilog-Cui-g-ut.es.js +0 -6
- package/dist/systemd-BASX0DlX.cjs.js +0 -1
- package/dist/systemd-CsKYQIQK.es.js +0 -6
- package/dist/talonscript-D2dGh8FO.es.js +0 -6
- package/dist/talonscript-DkCSnLHD.cjs.js +0 -1
- package/dist/tasl-BAQJK7KZ.cjs.js +0 -1
- package/dist/tasl-D3W8HMV6.es.js +0 -6
- package/dist/tcl-2y0Fuc4S.es.js +0 -6
- package/dist/tcl-CwJAYTvh.cjs.js +0 -1
- package/dist/templ-BSMv2wKZ.cjs.js +0 -1
- package/dist/templ-C7he2afp.es.js +0 -12
- package/dist/terraform-BGW6Oerf.es.js +0 -6
- package/dist/terraform-s-pzyVvp.cjs.js +0 -1
- package/dist/tex-B0y3cEZp.es.js +0 -8
- package/dist/tex-DwtFCA08.cjs.js +0 -1
- package/dist/tokyo-night-9T7_vGSy.cjs.js +0 -1
- package/dist/tokyo-night-LhP3hHhi.es.js +0 -4
- package/dist/toml-CQSfOn0e.es.js +0 -6
- package/dist/toml-CyMM7IXy.cjs.js +0 -1
- package/dist/ts-tags-C5-4VQhf.es.js +0 -41
- package/dist/ts-tags-MIr66hKK.cjs.js +0 -1
- package/dist/tsv-BtvSkaG0.es.js +0 -6
- package/dist/tsv-DqNGnuVj.cjs.js +0 -1
- package/dist/tsx-DiGsgWT8.es.js +0 -6
- package/dist/tsx-DpBRUnKC.cjs.js +0 -1
- package/dist/turtle-BJ2wmjPc.es.js +0 -6
- package/dist/turtle-DfO3eAsu.cjs.js +0 -1
- package/dist/twig-BzjoX4ZJ.cjs.js +0 -1
- package/dist/twig-OmkATFdv.es.js +0 -18
- package/dist/typescript-BqvpT6pB.cjs.js +0 -1
- package/dist/typescript-buWNZFwO.es.js +0 -6
- package/dist/typespec-P-ZVy8yC.cjs.js +0 -1
- package/dist/typespec-bLbdsxJL.es.js +0 -6
- package/dist/typst-BVh2IsT9.cjs.js +0 -1
- package/dist/typst-Y9_SmXTs.es.js +0 -6
- package/dist/v-BUlE9136.cjs.js +0 -1
- package/dist/v-wa8Orrdd.es.js +0 -6
- package/dist/vala-BIymb2K_.cjs.js +0 -1
- package/dist/vala-DRdriFr_.es.js +0 -6
- package/dist/vb-E2_-jk4M.es.js +0 -6
- package/dist/vb-IXOh8mqV.cjs.js +0 -1
- package/dist/verilog-B1iBoR5_.es.js +0 -6
- package/dist/verilog-BiglCqvO.cjs.js +0 -1
- package/dist/vesper-CJsaOsSM.es.js +0 -4
- package/dist/vesper-DqLWLxOu.cjs.js +0 -1
- package/dist/vhdl-CJUzuS2t.cjs.js +0 -1
- package/dist/vhdl-CRVaAhXk.es.js +0 -6
- package/dist/viml-B-zWOd7Z.es.js +0 -6
- package/dist/viml-B1nKLcgt.cjs.js +0 -1
- package/dist/vitesse-black-BoGvW84i.es.js +0 -4
- package/dist/vitesse-black-MF-1S1MG.cjs.js +0 -1
- package/dist/vitesse-dark-Cym-eLtO.es.js +0 -4
- package/dist/vitesse-dark-SIffJYSe.cjs.js +0 -1
- package/dist/vitesse-light-CcmG315c.es.js +0 -4
- package/dist/vitesse-light-U63SkYGT.cjs.js +0 -1
- package/dist/vue-DCwwWMGI.es.js +0 -31
- package/dist/vue-DYZqcRaZ.cjs.js +0 -1
- package/dist/vue-html-CdPbyrq1.cjs.js +0 -1
- package/dist/vue-html-sRE_Ny23.es.js +0 -10
- package/dist/vyper-CO9xUkIY.cjs.js +0 -1
- package/dist/vyper-DWutKXpa.es.js +0 -6
- package/dist/wasm-Bv5f0gKv.es.js +0 -6
- package/dist/wasm-CdIThIat.cjs.js +0 -1
- package/dist/wenyan-BMYnfus1.es.js +0 -6
- package/dist/wenyan-BSJ3fk7e.cjs.js +0 -1
- package/dist/wgsl-DnPoPGDU.es.js +0 -6
- package/dist/wgsl-d3zZE7ZN.cjs.js +0 -1
- package/dist/wikitext-BRCqXN2g.cjs.js +0 -1
- package/dist/wikitext-CntM04PE.es.js +0 -6
- package/dist/wolfram-C3rR92zj.cjs.js +0 -1
- package/dist/wolfram-Ws5qPlX9.es.js +0 -6
- package/dist/xml-BRLTD55J.cjs.js +0 -1
- package/dist/xml-Ch1q_kJp.es.js +0 -8
- package/dist/xsl-DyL8yqXw.es.js +0 -8
- package/dist/xsl-ETbYGV_-.cjs.js +0 -1
- package/dist/yaml-7DV6pRKj.cjs.js +0 -1
- package/dist/yaml-Bbg74JKr.es.js +0 -6
- package/dist/zenscript-BWMxwjeH.cjs.js +0 -1
- package/dist/zenscript-C0RKE4nU.es.js +0 -6
- package/dist/zig-D6SXBGNm.es.js +0 -6
- package/dist/zig-yAcNfpgW.cjs.js +0 -1
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import "@malloydata/malloy-explorer/styles.css";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import * as Malloy from "@malloydata/malloy-interfaces";
|
|
3
|
+
import { Box, Paper, Stack, Typography } from "@mui/material";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
5
|
import { RawNotebook } from "../../client";
|
|
6
|
+
import { useDimensionalFilterRangeData } from "../../hooks/useDimensionalFilterRangeData";
|
|
7
|
+
import {
|
|
8
|
+
FilterSelection,
|
|
9
|
+
useDimensionFilters,
|
|
10
|
+
} from "../../hooks/useDimensionFilters";
|
|
5
11
|
import { useQueryWithApiError } from "../../hooks/useQueryWithApiError";
|
|
6
12
|
import { ApiErrorDisplay } from "../ApiErrorDisplay";
|
|
13
|
+
import { DimensionFilter, RetrievalFunction } from "../filter/DimensionFilter";
|
|
14
|
+
import {
|
|
15
|
+
extractDimensionSpecs,
|
|
16
|
+
extractSourceFromQuery,
|
|
17
|
+
generateFilterClause,
|
|
18
|
+
getJoinedSources,
|
|
19
|
+
injectWhereClause,
|
|
20
|
+
parseAllSourceInfos,
|
|
21
|
+
parseNotebookFilterAnnotation,
|
|
22
|
+
} from "../filter/utils";
|
|
7
23
|
|
|
8
24
|
import { parseResourceUri } from "../../utils/formatting";
|
|
9
25
|
import { Loading } from "../Loading";
|
|
@@ -15,12 +31,15 @@ import { EnhancedNotebookCell } from "./types";
|
|
|
15
31
|
interface NotebookProps {
|
|
16
32
|
resourceUri: string;
|
|
17
33
|
maxResultSize?: number;
|
|
34
|
+
/** Optional retrieval function for semantic search filters */
|
|
35
|
+
retrievalFn?: RetrievalFunction;
|
|
18
36
|
}
|
|
19
37
|
|
|
20
38
|
// Requires PackageProvider
|
|
21
39
|
export default function Notebook({
|
|
22
40
|
resourceUri,
|
|
23
41
|
maxResultSize = 0,
|
|
42
|
+
retrievalFn,
|
|
24
43
|
}: NotebookProps) {
|
|
25
44
|
const { apiClients } = useServer();
|
|
26
45
|
const {
|
|
@@ -56,11 +75,84 @@ export default function Notebook({
|
|
|
56
75
|
const [isExecuting, setIsExecuting] = useState(false);
|
|
57
76
|
const [executionError, setExecutionError] = useState<Error | null>(null);
|
|
58
77
|
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
if (!
|
|
78
|
+
// Parse filter configuration from notebook annotations
|
|
79
|
+
const filterConfig = useMemo(() => {
|
|
80
|
+
if (!notebook) return null;
|
|
81
|
+
return parseNotebookFilterAnnotation(notebook.annotations);
|
|
82
|
+
}, [notebook]);
|
|
83
|
+
|
|
84
|
+
// Parse all SourceInfos from notebook cells and create a map
|
|
85
|
+
const sourceData = useMemo(() => {
|
|
86
|
+
if (!notebook?.notebookCells) return null;
|
|
87
|
+
return parseAllSourceInfos(notebook.notebookCells);
|
|
88
|
+
}, [notebook]);
|
|
89
|
+
|
|
90
|
+
const sourceInfoMap = useMemo(
|
|
91
|
+
() => sourceData?.sourceInfoMap ?? new Map<string, Malloy.SourceInfo>(),
|
|
92
|
+
[sourceData],
|
|
93
|
+
);
|
|
94
|
+
const modelPath = sourceData?.modelPath ?? null;
|
|
95
|
+
|
|
96
|
+
// Build dimension specs from filter config and source info map
|
|
97
|
+
// Each spec includes source and model for proper query routing
|
|
98
|
+
const dimensionSpecs = useMemo(() => {
|
|
99
|
+
if (!filterConfig || sourceInfoMap.size === 0 || !modelPath) return [];
|
|
100
|
+
return extractDimensionSpecs(
|
|
101
|
+
sourceInfoMap,
|
|
102
|
+
filterConfig.filters,
|
|
103
|
+
modelPath,
|
|
104
|
+
);
|
|
105
|
+
}, [filterConfig, sourceInfoMap, modelPath]);
|
|
106
|
+
|
|
107
|
+
// Initialize dimension filters hook
|
|
108
|
+
const { filterStates, updateFilter, getActiveFilters } = useDimensionFilters(
|
|
109
|
+
{
|
|
110
|
+
dimensionSpecs,
|
|
111
|
+
},
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
// Get active filters - include filterStates in deps to ensure updates when individual items change
|
|
115
|
+
const activeFilters = useMemo(
|
|
116
|
+
() => getActiveFilters(),
|
|
117
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
118
|
+
[filterStates, getActiveFilters],
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
// Create a map of dimension name -> source name for quick lookup
|
|
122
|
+
const dimensionToSourceMap = useMemo(() => {
|
|
123
|
+
const map = new Map<string, string>();
|
|
124
|
+
for (const spec of dimensionSpecs) {
|
|
125
|
+
map.set(spec.dimensionName, spec.source);
|
|
126
|
+
}
|
|
127
|
+
return map;
|
|
128
|
+
}, [dimensionSpecs]);
|
|
129
|
+
|
|
130
|
+
// Create a map of source name -> set of joined source names
|
|
131
|
+
const sourceJoinsMap = useMemo(() => {
|
|
132
|
+
const map = new Map<string, Set<string>>();
|
|
133
|
+
for (const [sourceName, sourceInfo] of sourceInfoMap) {
|
|
134
|
+
map.set(sourceName, getJoinedSources(sourceInfo));
|
|
135
|
+
}
|
|
136
|
+
return map;
|
|
137
|
+
}, [sourceInfoMap]);
|
|
138
|
+
|
|
139
|
+
// Fetch filter range data when we have dimension specs
|
|
140
|
+
// The hook now handles multiple source/model combos internally
|
|
141
|
+
const { data: filterValuesData } = useDimensionalFilterRangeData({
|
|
142
|
+
project: projectName,
|
|
143
|
+
package: packageName,
|
|
144
|
+
dimensionSpecs,
|
|
145
|
+
versionId,
|
|
146
|
+
enabled: dimensionSpecs.length > 0,
|
|
147
|
+
activeFilters,
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Unified cell execution function
|
|
151
|
+
// Executes all notebook cells, optionally applying filters to query cells
|
|
152
|
+
const executeCells = useCallback(
|
|
153
|
+
async (filtersToApply: FilterSelection[] = []) => {
|
|
154
|
+
if (!isSuccess || !notebook?.notebookCells) return;
|
|
62
155
|
|
|
63
|
-
const executeCells = async () => {
|
|
64
156
|
setIsExecuting(true);
|
|
65
157
|
setExecutionError(null);
|
|
66
158
|
const cells: EnhancedNotebookCell[] = [];
|
|
@@ -80,32 +172,93 @@ export default function Notebook({
|
|
|
80
172
|
}
|
|
81
173
|
|
|
82
174
|
// Execute code cells
|
|
175
|
+
const cellText = rawCell.text || "";
|
|
176
|
+
const hasQuery =
|
|
177
|
+
cellText.includes("run:") ||
|
|
178
|
+
cellText.includes("->") ||
|
|
179
|
+
/^\s*(run|query)\s*:/m.test(cellText);
|
|
180
|
+
|
|
83
181
|
try {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
182
|
+
if (hasQuery && modelPath) {
|
|
183
|
+
// Query cell - use models API with optional filters
|
|
184
|
+
let queryToExecute = cellText;
|
|
185
|
+
|
|
186
|
+
// Apply filters if any match this query's source
|
|
187
|
+
if (filtersToApply.length > 0) {
|
|
188
|
+
const querySourceName =
|
|
189
|
+
extractSourceFromQuery(cellText);
|
|
190
|
+
|
|
191
|
+
// Get the set of joined sources for this query's source
|
|
192
|
+
const joinedSources =
|
|
193
|
+
(querySourceName &&
|
|
194
|
+
sourceJoinsMap.get(querySourceName)) ||
|
|
195
|
+
new Set<string>();
|
|
196
|
+
|
|
197
|
+
// Filter to only include those matching this query's source or joined sources
|
|
198
|
+
const filtersForSource = querySourceName
|
|
199
|
+
? filtersToApply.filter((filter) => {
|
|
200
|
+
const filterSourceName =
|
|
201
|
+
dimensionToSourceMap.get(
|
|
202
|
+
filter.dimensionName,
|
|
203
|
+
);
|
|
204
|
+
if (!filterSourceName) return false;
|
|
205
|
+
return (
|
|
206
|
+
filterSourceName === querySourceName ||
|
|
207
|
+
joinedSources.has(filterSourceName)
|
|
208
|
+
);
|
|
209
|
+
})
|
|
210
|
+
: [];
|
|
211
|
+
|
|
212
|
+
if (filtersForSource.length > 0) {
|
|
213
|
+
const filterClause = generateFilterClause(
|
|
214
|
+
filtersForSource,
|
|
215
|
+
dimensionToSourceMap,
|
|
216
|
+
querySourceName,
|
|
217
|
+
);
|
|
218
|
+
if (filterClause) {
|
|
219
|
+
queryToExecute = injectWhereClause(
|
|
220
|
+
cellText,
|
|
221
|
+
filterClause,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Execute using models API
|
|
228
|
+
const response = await apiClients.models.executeQueryModel(
|
|
229
|
+
projectName,
|
|
230
|
+
packageName,
|
|
231
|
+
modelPath,
|
|
232
|
+
{
|
|
233
|
+
query: queryToExecute,
|
|
234
|
+
versionId,
|
|
235
|
+
},
|
|
96
236
|
);
|
|
97
|
-
}
|
|
98
237
|
|
|
99
|
-
|
|
238
|
+
cells.push({
|
|
239
|
+
type: rawCell.type,
|
|
240
|
+
text: rawCell.text,
|
|
241
|
+
result: response.data.result,
|
|
242
|
+
});
|
|
243
|
+
} else {
|
|
244
|
+
// Non-query code cell - use notebook cell execution API
|
|
245
|
+
const response =
|
|
246
|
+
await apiClients.notebooks.executeNotebookCell(
|
|
247
|
+
projectName,
|
|
248
|
+
packageName,
|
|
249
|
+
notebookPath,
|
|
250
|
+
i,
|
|
251
|
+
versionId,
|
|
252
|
+
);
|
|
100
253
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
254
|
+
const executedCell = response.data;
|
|
255
|
+
cells.push({
|
|
256
|
+
type: rawCell.type,
|
|
257
|
+
text: rawCell.text,
|
|
258
|
+
result: executedCell.result,
|
|
259
|
+
newSources: executedCell.newSources,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
109
262
|
} catch (cellError) {
|
|
110
263
|
// If a cell fails, add it without execution results
|
|
111
264
|
console.error(`Error executing cell ${i}:`, cellError);
|
|
@@ -123,15 +276,142 @@ export default function Notebook({
|
|
|
123
276
|
} finally {
|
|
124
277
|
setIsExecuting(false);
|
|
125
278
|
}
|
|
126
|
-
}
|
|
279
|
+
},
|
|
280
|
+
[
|
|
281
|
+
isSuccess,
|
|
282
|
+
notebook,
|
|
283
|
+
modelPath,
|
|
284
|
+
dimensionToSourceMap,
|
|
285
|
+
sourceJoinsMap,
|
|
286
|
+
projectName,
|
|
287
|
+
packageName,
|
|
288
|
+
notebookPath,
|
|
289
|
+
versionId,
|
|
290
|
+
apiClients.models,
|
|
291
|
+
apiClients.notebooks,
|
|
292
|
+
],
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
// Execute cells when notebook is loaded (no filters initially)
|
|
296
|
+
useEffect(() => {
|
|
297
|
+
if (!isSuccess || !notebook?.notebookCells) return;
|
|
298
|
+
executeCells([]);
|
|
299
|
+
}, [isSuccess, notebook, executeCells]);
|
|
300
|
+
|
|
301
|
+
// Re-execute when filters change
|
|
302
|
+
// Track previous activeFilters to detect actual changes (not just reference changes)
|
|
303
|
+
const prevActiveFiltersRef = useRef<string>("");
|
|
304
|
+
|
|
305
|
+
useEffect(() => {
|
|
306
|
+
// Serialize activeFilters to detect actual value changes
|
|
307
|
+
const serialized = JSON.stringify(
|
|
308
|
+
activeFilters.map((f) => ({
|
|
309
|
+
dim: f.dimensionName,
|
|
310
|
+
type: f.matchType,
|
|
311
|
+
val: f.value,
|
|
312
|
+
val2: f.value2,
|
|
313
|
+
})),
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
// Skip if no actual change or if this is the initial empty state
|
|
317
|
+
if (serialized === prevActiveFiltersRef.current) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Skip the initial render (when prevActiveFiltersRef is empty and filters are also empty)
|
|
322
|
+
if (prevActiveFiltersRef.current === "" && activeFilters.length === 0) {
|
|
323
|
+
prevActiveFiltersRef.current = serialized;
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
127
326
|
|
|
128
|
-
|
|
129
|
-
|
|
327
|
+
prevActiveFiltersRef.current = serialized;
|
|
328
|
+
|
|
329
|
+
// Re-execute with current filters (or no filters if cleared)
|
|
330
|
+
if (!isExecuting) {
|
|
331
|
+
executeCells(activeFilters);
|
|
332
|
+
}
|
|
333
|
+
}, [activeFilters, isExecuting, executeCells]);
|
|
334
|
+
|
|
335
|
+
// Handle filter change
|
|
336
|
+
const handleFilterChange = useCallback(
|
|
337
|
+
(dimensionName: string) => (selection: FilterSelection | null) => {
|
|
338
|
+
updateFilter(dimensionName, selection);
|
|
339
|
+
},
|
|
340
|
+
[updateFilter],
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
// Check if retrieval is supported
|
|
344
|
+
const hasRetrievalFilters = dimensionSpecs.some(
|
|
345
|
+
(spec) => spec.filterType === "Retrieval",
|
|
346
|
+
);
|
|
347
|
+
const _retrievalSupported = !hasRetrievalFilters || !!retrievalFn;
|
|
130
348
|
|
|
131
349
|
return (
|
|
132
350
|
<CleanNotebookContainer>
|
|
133
351
|
<CleanNotebookSection>
|
|
134
352
|
<Stack spacing={3} component="section">
|
|
353
|
+
{/* Filter Panel */}
|
|
354
|
+
{dimensionSpecs.length > 0 && filterValuesData && (
|
|
355
|
+
<Paper
|
|
356
|
+
elevation={0}
|
|
357
|
+
sx={{
|
|
358
|
+
p: 3,
|
|
359
|
+
backgroundColor: "#f8f9fa",
|
|
360
|
+
border: "1px solid #e0e0e0",
|
|
361
|
+
borderRadius: 2,
|
|
362
|
+
}}
|
|
363
|
+
>
|
|
364
|
+
<Typography
|
|
365
|
+
variant="subtitle2"
|
|
366
|
+
sx={{
|
|
367
|
+
fontWeight: 600,
|
|
368
|
+
mb: 2,
|
|
369
|
+
color: "#333",
|
|
370
|
+
}}
|
|
371
|
+
>
|
|
372
|
+
Filters
|
|
373
|
+
</Typography>
|
|
374
|
+
<Box
|
|
375
|
+
sx={{
|
|
376
|
+
display: "grid",
|
|
377
|
+
gridTemplateColumns:
|
|
378
|
+
"repeat(auto-fill, minmax(250px, 1fr))",
|
|
379
|
+
gap: 3,
|
|
380
|
+
}}
|
|
381
|
+
>
|
|
382
|
+
{dimensionSpecs.map((spec) => {
|
|
383
|
+
const values =
|
|
384
|
+
filterValuesData.get(spec.dimensionName) || [];
|
|
385
|
+
const filterState = filterStates.get(
|
|
386
|
+
spec.dimensionName,
|
|
387
|
+
);
|
|
388
|
+
// Skip Retrieval filters if no retrievalFn provided
|
|
389
|
+
if (
|
|
390
|
+
spec.filterType === "Retrieval" &&
|
|
391
|
+
!retrievalFn
|
|
392
|
+
) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<Box key={spec.dimensionName}>
|
|
398
|
+
<DimensionFilter
|
|
399
|
+
spec={spec}
|
|
400
|
+
values={values}
|
|
401
|
+
selection={filterState?.selection}
|
|
402
|
+
onChange={handleFilterChange(
|
|
403
|
+
spec.dimensionName,
|
|
404
|
+
)}
|
|
405
|
+
retrievalFn={retrievalFn}
|
|
406
|
+
/>
|
|
407
|
+
</Box>
|
|
408
|
+
);
|
|
409
|
+
})}
|
|
410
|
+
</Box>
|
|
411
|
+
</Paper>
|
|
412
|
+
)}
|
|
413
|
+
|
|
414
|
+
{/* Loading State */}
|
|
135
415
|
{(!isSuccess || isExecuting) && !isError && (
|
|
136
416
|
<Loading
|
|
137
417
|
text={
|
|
@@ -141,6 +421,8 @@ export default function Notebook({
|
|
|
141
421
|
}
|
|
142
422
|
/>
|
|
143
423
|
)}
|
|
424
|
+
|
|
425
|
+
{/* Notebook Cells */}
|
|
144
426
|
{isSuccess &&
|
|
145
427
|
!isExecuting &&
|
|
146
428
|
enhancedCells.map((cell, index) => (
|
|
@@ -152,6 +434,8 @@ export default function Notebook({
|
|
|
152
434
|
maxResultSize={maxResultSize}
|
|
153
435
|
/>
|
|
154
436
|
))}
|
|
437
|
+
|
|
438
|
+
{/* Error States */}
|
|
155
439
|
{isError && error.status === 404 && (
|
|
156
440
|
<Typography variant="body2" sx={{ color: "#666666" }}>
|
|
157
441
|
<code>{`${projectName} > ${packageName} > ${notebookPath}`}</code>{" "}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React, {
|
|
2
|
+
Suspense,
|
|
2
3
|
useEffect,
|
|
4
|
+
useLayoutEffect,
|
|
3
5
|
useRef,
|
|
4
6
|
useState,
|
|
5
|
-
useLayoutEffect,
|
|
6
|
-
Suspense,
|
|
7
7
|
} from "react";
|
|
8
8
|
|
|
9
9
|
type MalloyRenderElement = HTMLElement & Record<string, unknown>;
|
|
@@ -45,6 +45,21 @@ const createRenderer = async (onDrill?: (element: unknown) => void) => {
|
|
|
45
45
|
return renderer.createViz();
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
function RenderResultSimple({ result, onDrill }: RenderedResultProps) {
|
|
49
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
50
|
+
|
|
51
|
+
useLayoutEffect(() => {
|
|
52
|
+
if (!ref.current || !result) return;
|
|
53
|
+
const element = ref.current;
|
|
54
|
+
|
|
55
|
+
createRenderer(onDrill).then((viz) => {
|
|
56
|
+
viz.setResult(JSON.parse(result));
|
|
57
|
+
viz.render(element);
|
|
58
|
+
});
|
|
59
|
+
}, [result, onDrill]);
|
|
60
|
+
|
|
61
|
+
return <div ref={ref} style={{ width: "100%", height: "100%" }} />;
|
|
62
|
+
}
|
|
48
63
|
// Inner component that actually renders the visualization
|
|
49
64
|
function RenderedResultInner({
|
|
50
65
|
result,
|
|
@@ -219,7 +234,11 @@ export default function RenderedResult(props: RenderedResultProps) {
|
|
|
219
234
|
</div>
|
|
220
235
|
}
|
|
221
236
|
>
|
|
222
|
-
|
|
237
|
+
{props.onSizeChange ? (
|
|
238
|
+
<RenderedResultInner {...props} />
|
|
239
|
+
) : (
|
|
240
|
+
<RenderResultSimple {...props} />
|
|
241
|
+
)}
|
|
223
242
|
</Suspense>
|
|
224
243
|
);
|
|
225
244
|
}
|