@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.
Files changed (581) hide show
  1. package/README.md +122 -1
  2. package/dist/ServerProvider-Bzid56gJ.cjs.js +1 -0
  3. package/dist/{ServerProvider-B8JWg8Mo.es.js → ServerProvider-D-y63tG0.es.js} +68 -68
  4. package/dist/client/api.d.ts +18 -0
  5. package/dist/client/index.cjs.js +1 -1
  6. package/dist/client/index.es.js +1 -1
  7. package/dist/components/Notebook/Notebook.d.ts +4 -1
  8. package/dist/components/filter/DimensionFilter.d.ts +43 -0
  9. package/dist/components/filter/index.d.ts +4 -0
  10. package/dist/components/filter/utils.d.ts +75 -0
  11. package/dist/components/index.d.ts +7 -6
  12. package/dist/components/styles.d.ts +3 -3
  13. package/dist/hooks/index.d.ts +4 -0
  14. package/dist/hooks/useDimensionFilters.d.ts +84 -0
  15. package/dist/hooks/useDimensionFiltersFromSpec.d.ts +52 -0
  16. package/dist/hooks/useDimensionFiltersQuery.d.ts +79 -0
  17. package/dist/hooks/useDimensionalFilterRangeData.d.ts +106 -0
  18. package/dist/index.cjs.js +141 -112
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.es.js +47795 -39755
  21. package/dist/sdk.css +1 -1
  22. package/package.json +16 -11
  23. package/src/components/Home/Home.tsx +15 -11
  24. package/src/components/Notebook/Notebook.tsx +315 -31
  25. package/src/components/RenderedResult/RenderedResult.tsx +22 -3
  26. package/src/components/filter/DimensionFilter.tsx +738 -0
  27. package/src/components/filter/index.ts +20 -0
  28. package/src/components/filter/utils.ts +354 -0
  29. package/src/components/highlighter.ts +14 -6
  30. package/src/components/index.ts +7 -6
  31. package/src/hooks/index.ts +31 -0
  32. package/src/hooks/useDimensionFilters.ts +322 -0
  33. package/src/hooks/useDimensionFiltersFromSpec.ts +117 -0
  34. package/src/hooks/useDimensionFiltersQuery.ts +300 -0
  35. package/src/hooks/useDimensionalFilterRangeData.ts +758 -0
  36. package/src/index.ts +3 -2
  37. package/dist/ServerProvider-DC74Txr5.cjs.js +0 -1
  38. package/dist/abap-BmBUA35e.es.js +0 -6
  39. package/dist/abap-Dwt2rH6y.cjs.js +0 -1
  40. package/dist/actionscript-3-mj8Uhnsc.cjs.js +0 -1
  41. package/dist/actionscript-3-zFUbzQa9.es.js +0 -6
  42. package/dist/ada-CBvPkFpZ.es.js +0 -6
  43. package/dist/ada-DZM58Vqs.cjs.js +0 -1
  44. package/dist/andromeeda-BXc5FOIb.cjs.js +0 -1
  45. package/dist/andromeeda-uXNdzNpk.es.js +0 -4
  46. package/dist/angular-html-B60m4jt-.cjs.js +0 -1
  47. package/dist/angular-html-D3aW1y6T.es.js +0 -32
  48. package/dist/angular-ts-Jud40GrY.es.js +0 -21
  49. package/dist/angular-ts-SIlYrqkG.cjs.js +0 -1
  50. package/dist/apache-CVNlsSDc.es.js +0 -6
  51. package/dist/apache-D7v5fxtZ.cjs.js +0 -1
  52. package/dist/apex-4hrAnw0a.cjs.js +0 -1
  53. package/dist/apex-DFk3KRB1.es.js +0 -6
  54. package/dist/apl-CKSaOFbt.cjs.js +0 -1
  55. package/dist/apl-pE3PRTDr.es.js +0 -16
  56. package/dist/applescript-CYMR_y0g.es.js +0 -6
  57. package/dist/applescript-Cnd3Dxju.cjs.js +0 -1
  58. package/dist/ara-4QmU5e04.es.js +0 -6
  59. package/dist/ara-BQ2aGbFQ.cjs.js +0 -1
  60. package/dist/asciidoc-C6nYvw8K.cjs.js +0 -1
  61. package/dist/asciidoc-v_1bjgUg.es.js +0 -6
  62. package/dist/asm-CQnBVCj-.cjs.js +0 -1
  63. package/dist/asm-RC0Yh-NZ.es.js +0 -6
  64. package/dist/astro-Be6fybGX.es.js +0 -16
  65. package/dist/astro-KhYkz6Xu.cjs.js +0 -1
  66. package/dist/aurora-x-BwoVEUWZ.es.js +0 -4
  67. package/dist/aurora-x-C5IpmIOG.cjs.js +0 -1
  68. package/dist/awk-DUx4h__E.cjs.js +0 -1
  69. package/dist/awk-gPH8MVMW.es.js +0 -6
  70. package/dist/ayu-dark-Cv7nTiif.cjs.js +0 -1
  71. package/dist/ayu-dark-CxPZkpb2.es.js +0 -4
  72. package/dist/ballerina-CXlzbmzl.cjs.js +0 -1
  73. package/dist/ballerina-kvLnRU_e.es.js +0 -6
  74. package/dist/bat-BHYy44sT.es.js +0 -6
  75. package/dist/bat-DlMT9sut.cjs.js +0 -1
  76. package/dist/beancount-CyyiuUzM.cjs.js +0 -1
  77. package/dist/beancount-D-MADTs_.es.js +0 -6
  78. package/dist/berry-B0EjuzrL.cjs.js +0 -1
  79. package/dist/berry-Ci9U0o4h.es.js +0 -6
  80. package/dist/bibtex-CX618D15.es.js +0 -6
  81. package/dist/bibtex-CfoG9xRq.cjs.js +0 -1
  82. package/dist/bicep-D6PH_9IY.cjs.js +0 -1
  83. package/dist/bicep-iuYiPopT.es.js +0 -6
  84. package/dist/blade-C0tMuk8f.cjs.js +0 -1
  85. package/dist/blade-DmXp5Zcz.es.js +0 -18
  86. package/dist/bsl-CfHcite8.cjs.js +0 -1
  87. package/dist/bsl-NPX_d-bb.es.js +0 -8
  88. package/dist/c-C4sXGJZM.cjs.js +0 -1
  89. package/dist/c-DASdrs7p.es.js +0 -6
  90. package/dist/cadence-BDALQi26.es.js +0 -6
  91. package/dist/cadence-Dq2CYzXG.cjs.js +0 -1
  92. package/dist/cairo-17kO8-kb.es.js +0 -8
  93. package/dist/cairo-CcKpJkyf.cjs.js +0 -1
  94. package/dist/catppuccin-frappe-BrTOiad2.es.js +0 -4
  95. package/dist/catppuccin-frappe-DXAedND3.cjs.js +0 -1
  96. package/dist/catppuccin-latte-D-dc_R4m.es.js +0 -4
  97. package/dist/catppuccin-latte-mwGw3-Ej.cjs.js +0 -1
  98. package/dist/catppuccin-macchiato-DN4jOp0G.es.js +0 -4
  99. package/dist/catppuccin-macchiato-cQCk9ADg.cjs.js +0 -1
  100. package/dist/catppuccin-mocha-B8yCE3-3.es.js +0 -4
  101. package/dist/catppuccin-mocha-ClSzDZSl.cjs.js +0 -1
  102. package/dist/clarity-CNgV2Ths.es.js +0 -6
  103. package/dist/clarity-ytMkUD5Q.cjs.js +0 -1
  104. package/dist/clojure-B_Wv414H.cjs.js +0 -1
  105. package/dist/clojure-CsKKFGwv.es.js +0 -6
  106. package/dist/cmake-Dr-A3iJx.es.js +0 -6
  107. package/dist/cmake-TBUaQXYY.cjs.js +0 -1
  108. package/dist/cobol-BzcJm6ie.es.js +0 -10
  109. package/dist/cobol-DXFNH4EH.cjs.js +0 -1
  110. package/dist/codeowners-Bt9yU6NX.es.js +0 -6
  111. package/dist/codeowners-QhPK6lIJ.cjs.js +0 -1
  112. package/dist/codeql-B7Q9tkDJ.cjs.js +0 -1
  113. package/dist/codeql-DBNTqJi1.es.js +0 -6
  114. package/dist/coffee-GRRSkgX1.cjs.js +0 -1
  115. package/dist/coffee-q2iaxUnQ.es.js +0 -8
  116. package/dist/common-lisp-Ced3ctK5.cjs.js +0 -1
  117. package/dist/common-lisp-r7ZEOG7T.es.js +0 -6
  118. package/dist/coq-BTRB4iqi.cjs.js +0 -1
  119. package/dist/coq-CB6Pv_W9.es.js +0 -6
  120. package/dist/cpp-CPOvHZqs.cjs.js +0 -1
  121. package/dist/cpp-CPQtoCcU.es.js +0 -18
  122. package/dist/crystal-BY_Cg265.es.js +0 -18
  123. package/dist/crystal-C6AG-iew.cjs.js +0 -1
  124. package/dist/csharp-CYWRhZ2R.es.js +0 -6
  125. package/dist/csharp-TKds-MhG.cjs.js +0 -1
  126. package/dist/css-B0kbn78J.cjs.js +0 -1
  127. package/dist/css-D1aVdRIU.es.js +0 -6
  128. package/dist/csv-BVJjiaC3.cjs.js +0 -1
  129. package/dist/csv-DvCncUGQ.es.js +0 -6
  130. package/dist/cue-BXMrmvay.es.js +0 -6
  131. package/dist/cue-Cz4J-rnd.cjs.js +0 -1
  132. package/dist/cypher-DTm5zNR1.es.js +0 -6
  133. package/dist/cypher-DuKTiyez.cjs.js +0 -1
  134. package/dist/d-BW9Wd7aK.cjs.js +0 -1
  135. package/dist/d-D6ZXmn3l.es.js +0 -6
  136. package/dist/dark-plus-Cd5emcYO.cjs.js +0 -1
  137. package/dist/dark-plus-pUHDTVV0.es.js +0 -4
  138. package/dist/dart-CWs-er6b.cjs.js +0 -1
  139. package/dist/dart-Dz59Is3F.es.js +0 -6
  140. package/dist/dax-CDxFL2Kb.cjs.js +0 -1
  141. package/dist/dax-DTVGzydb.es.js +0 -6
  142. package/dist/desktop-CFgo0jo7.cjs.js +0 -1
  143. package/dist/desktop-Db9vb-dl.es.js +0 -6
  144. package/dist/diff-BsEkKwI8.cjs.js +0 -1
  145. package/dist/diff-XmNrvgM1.es.js +0 -6
  146. package/dist/docker-DWH2onkn.es.js +0 -6
  147. package/dist/docker-hwiw4W8I.cjs.js +0 -1
  148. package/dist/dotenv-4337wvzu.es.js +0 -6
  149. package/dist/dotenv-CJ5o3G1C.cjs.js +0 -1
  150. package/dist/dracula-BNgwAJ-d.cjs.js +0 -1
  151. package/dist/dracula-BtZx2Kac.es.js +0 -4
  152. package/dist/dracula-soft-BHZ7sHFu.cjs.js +0 -1
  153. package/dist/dracula-soft-BKa-aqBv.es.js +0 -4
  154. package/dist/dream-maker-CvvfrJSx.es.js +0 -6
  155. package/dist/dream-maker-DBharE9Q.cjs.js +0 -1
  156. package/dist/edge-DI6_BHKG.es.js +0 -12
  157. package/dist/edge-i77KJtJz.cjs.js +0 -1
  158. package/dist/elixir-D00NoPSM.cjs.js +0 -1
  159. package/dist/elixir-ic9y5jcd.es.js +0 -8
  160. package/dist/elm-Bhj5Vf-e.cjs.js +0 -1
  161. package/dist/elm-DxnUqUaW.es.js +0 -8
  162. package/dist/emacs-lisp-BAefI874.es.js +0 -6
  163. package/dist/emacs-lisp-CDDyFsvQ.cjs.js +0 -1
  164. package/dist/erb-Cbj2YePa.es.js +0 -10
  165. package/dist/erb-Dybaw01v.cjs.js +0 -1
  166. package/dist/erlang-3VgdrQXV.cjs.js +0 -1
  167. package/dist/erlang-CmIiwF3I.es.js +0 -6
  168. package/dist/everforest-dark-DMCBqXCK.es.js +0 -4
  169. package/dist/everforest-dark-_sBMomR1.cjs.js +0 -1
  170. package/dist/everforest-light-BbXl82Em.es.js +0 -4
  171. package/dist/everforest-light-H0xoYxl0.cjs.js +0 -1
  172. package/dist/fennel-BvcDRFAV.cjs.js +0 -1
  173. package/dist/fennel-DNqkz9pE.es.js +0 -6
  174. package/dist/fish-CnamI0Ar.cjs.js +0 -1
  175. package/dist/fish-DIm72t2T.es.js +0 -6
  176. package/dist/fluent-BapTxJsC.es.js +0 -6
  177. package/dist/fluent-DFpT66K8.cjs.js +0 -1
  178. package/dist/fortran-fixed-form-DECY15PY.es.js +0 -8
  179. package/dist/fortran-fixed-form-u_RcUPMu.cjs.js +0 -1
  180. package/dist/fortran-free-form-CNDsBFUj.es.js +0 -6
  181. package/dist/fortran-free-form-IaGrWIda.cjs.js +0 -1
  182. package/dist/fsharp-B-aK2rr3.cjs.js +0 -1
  183. package/dist/fsharp-D2ZqviWP.es.js +0 -8
  184. package/dist/gdresource-BBAqNWe4.cjs.js +0 -1
  185. package/dist/gdresource-RIsK8sku.es.js +0 -10
  186. package/dist/gdscript-5N_43TPQ.cjs.js +0 -1
  187. package/dist/gdscript-D7aheHm-.es.js +0 -6
  188. package/dist/gdshader-BGJEsM2Z.es.js +0 -6
  189. package/dist/gdshader-Bl85Hrm5.cjs.js +0 -1
  190. package/dist/genie-C9gPjc6J.es.js +0 -6
  191. package/dist/genie-DGsxMAbQ.cjs.js +0 -1
  192. package/dist/gherkin-CVV6nEUH.cjs.js +0 -1
  193. package/dist/gherkin-bka1Exbx.es.js +0 -6
  194. package/dist/git-commit-BRJ1E4Bx.es.js +0 -8
  195. package/dist/git-commit-CwfgI4fD.cjs.js +0 -1
  196. package/dist/git-rebase-C3X7aMpn.es.js +0 -8
  197. package/dist/git-rebase-DUvbIQDw.cjs.js +0 -1
  198. package/dist/github-dark-BKL9xNgN.cjs.js +0 -1
  199. package/dist/github-dark-DenFmJkN.es.js +0 -4
  200. package/dist/github-dark-default-BJPUVz4H.es.js +0 -4
  201. package/dist/github-dark-default-Dsv5MuSi.cjs.js +0 -1
  202. package/dist/github-dark-dimmed-CtB9hz8U.cjs.js +0 -1
  203. package/dist/github-dark-dimmed-DUshB20C.es.js +0 -4
  204. package/dist/github-dark-high-contrast-BqZVM-jF.cjs.js +0 -1
  205. package/dist/github-dark-high-contrast-D3aGCnF8.es.js +0 -4
  206. package/dist/github-light-BFTOhCbz.cjs.js +0 -1
  207. package/dist/github-light-JYsPkUQd.es.js +0 -4
  208. package/dist/github-light-default-BZoWH9dH.cjs.js +0 -1
  209. package/dist/github-light-default-D99KPAby.es.js +0 -4
  210. package/dist/github-light-high-contrast-BbmZE-Mp.es.js +0 -4
  211. package/dist/github-light-high-contrast-Ks3kPGJU.cjs.js +0 -1
  212. package/dist/gleam-B4k9YFGD.es.js +0 -6
  213. package/dist/gleam-nR4mjrhK.cjs.js +0 -1
  214. package/dist/glimmer-js-C4MQf3Na.es.js +0 -14
  215. package/dist/glimmer-js-CNfyUqSb.cjs.js +0 -1
  216. package/dist/glimmer-ts-Bp7_dELi.cjs.js +0 -1
  217. package/dist/glimmer-ts-CoYpqZrZ.es.js +0 -14
  218. package/dist/glsl-BYTq1Tfl.es.js +0 -8
  219. package/dist/glsl-CIu1PL9X.cjs.js +0 -1
  220. package/dist/gnuplot-CurtDYoJ.cjs.js +0 -1
  221. package/dist/gnuplot-DnWoRZt-.es.js +0 -6
  222. package/dist/go-BErP6iv1.es.js +0 -6
  223. package/dist/go-CM9_GlwL.cjs.js +0 -1
  224. package/dist/graphql-BnnSMMC2.cjs.js +0 -1
  225. package/dist/graphql-g3nHRc0M.es.js +0 -14
  226. package/dist/groovy-BaVp9Il5.cjs.js +0 -1
  227. package/dist/groovy-IWs5-NIO.es.js +0 -6
  228. package/dist/hack-BVxH3fsq.cjs.js +0 -1
  229. package/dist/hack-wPAsyujS.es.js +0 -10
  230. package/dist/haml-4TJ757dz.es.js +0 -10
  231. package/dist/haml-vutdexHh.cjs.js +0 -1
  232. package/dist/handlebars-7GDLw__F.es.js +0 -14
  233. package/dist/handlebars-COmZnO8P.cjs.js +0 -1
  234. package/dist/haskell-CtlGos0K.es.js +0 -6
  235. package/dist/haskell-suhyCHEm.cjs.js +0 -1
  236. package/dist/haxe-BIQU1qHi.cjs.js +0 -1
  237. package/dist/haxe-CZZ33vZw.es.js +0 -6
  238. package/dist/hcl-6hOg9WP4.es.js +0 -6
  239. package/dist/hcl-CbQ1yCnz.cjs.js +0 -1
  240. package/dist/hjson-CgwED-oz.es.js +0 -6
  241. package/dist/hjson-Ddklb4QM.cjs.js +0 -1
  242. package/dist/hlsl-3-lv4gi7.es.js +0 -6
  243. package/dist/hlsl-B4NkiBfC.cjs.js +0 -1
  244. package/dist/houston-BDYrDoDW.es.js +0 -4
  245. package/dist/houston-T57H3gQZ.cjs.js +0 -1
  246. package/dist/html-Dc-Bg17s.cjs.js +0 -1
  247. package/dist/html-PSPajZka.es.js +0 -10
  248. package/dist/html-derivative-Brb3b4aI.es.js +0 -8
  249. package/dist/html-derivative-CY9mJeT0.cjs.js +0 -1
  250. package/dist/http-BrKsebcH.cjs.js +0 -1
  251. package/dist/http-CWBcr-Ch.es.js +0 -14
  252. package/dist/hxml-DLduiIv3.es.js +0 -8
  253. package/dist/hxml-DbGPHkY4.cjs.js +0 -1
  254. package/dist/hy-C2xHhR6I.es.js +0 -6
  255. package/dist/hy-DpyTdO3T.cjs.js +0 -1
  256. package/dist/imba-BEYqRZzB.es.js +0 -8
  257. package/dist/imba-CAIkF-GD.cjs.js +0 -1
  258. package/dist/ini-BUcvsX-U.es.js +0 -6
  259. package/dist/ini-CymULaw_.cjs.js +0 -1
  260. package/dist/java-B7odJ7Ap.es.js +0 -6
  261. package/dist/java-Bn1Lvoni.cjs.js +0 -1
  262. package/dist/javascript-Bnnicc83.cjs.js +0 -1
  263. package/dist/javascript-fa8UlHZE.es.js +0 -6
  264. package/dist/jinja-BoeZymy4.cjs.js +0 -1
  265. package/dist/jinja-DKLHYjK0.es.js +0 -11
  266. package/dist/jison-C0DlFEjB.cjs.js +0 -1
  267. package/dist/jison-CzPfUIvM.es.js +0 -8
  268. package/dist/json-71t8ZF9g.es.js +0 -6
  269. package/dist/json-y-J1j5EW.cjs.js +0 -1
  270. package/dist/json5-CzvlWgZ7.cjs.js +0 -1
  271. package/dist/json5-Z7F6rA6a.es.js +0 -6
  272. package/dist/jsonc-BnhWfmQw.cjs.js +0 -1
  273. package/dist/jsonc-Dphhs4m2.es.js +0 -6
  274. package/dist/jsonl-BbGkWPJz.cjs.js +0 -1
  275. package/dist/jsonl-D9jj92Gg.es.js +0 -6
  276. package/dist/jsonnet-Bn--UDZ1.cjs.js +0 -1
  277. package/dist/jsonnet-DEQ7IUoJ.es.js +0 -6
  278. package/dist/jssm-4CSVp8lc.cjs.js +0 -1
  279. package/dist/jssm-j74e88UX.es.js +0 -6
  280. package/dist/jsx-Bkesy5tT.es.js +0 -6
  281. package/dist/jsx-D8YwVp-7.cjs.js +0 -1
  282. package/dist/julia-B_r6juN7.es.js +0 -16
  283. package/dist/julia-DLxGoAlk.cjs.js +0 -1
  284. package/dist/kanagawa-dragon-BJZF7xDr.cjs.js +0 -1
  285. package/dist/kanagawa-dragon-CiKur4Hl.es.js +0 -4
  286. package/dist/kanagawa-lotus-BKu-smKu.es.js +0 -4
  287. package/dist/kanagawa-lotus-BhgzmRV4.cjs.js +0 -1
  288. package/dist/kanagawa-wave-BgJip59C.cjs.js +0 -1
  289. package/dist/kanagawa-wave-CQwozSzG.es.js +0 -4
  290. package/dist/kotlin-DCgZY7Ii.es.js +0 -6
  291. package/dist/kotlin-DDI6myF6.cjs.js +0 -1
  292. package/dist/kusto-Cw029H-v.es.js +0 -6
  293. package/dist/kusto-OZxALJZT.cjs.js +0 -1
  294. package/dist/laserwave--izBLY1I.cjs.js +0 -1
  295. package/dist/laserwave-6a00oqik.es.js +0 -4
  296. package/dist/latex-CXOK56Uv.cjs.js +0 -1
  297. package/dist/latex-GxBxlqbc.es.js +0 -8
  298. package/dist/lean-CYSet4vs.es.js +0 -6
  299. package/dist/lean-D1iY-35j.cjs.js +0 -1
  300. package/dist/less-DIaY7vQJ.cjs.js +0 -1
  301. package/dist/less-DQA4v-Nm.es.js +0 -6
  302. package/dist/light-plus-B5D0le0o.cjs.js +0 -1
  303. package/dist/light-plus-CZuVqSLX.es.js +0 -4
  304. package/dist/liquid-BYouVITI.cjs.js +0 -1
  305. package/dist/liquid-BxBkR-z5.es.js +0 -14
  306. package/dist/log-BIXUeBaj.cjs.js +0 -1
  307. package/dist/log-D2eRfqDn.es.js +0 -6
  308. package/dist/logo-B2d3b27P.cjs.js +0 -1
  309. package/dist/logo-QEAtGWZ9.es.js +0 -6
  310. package/dist/lua-B2_GGnC5.cjs.js +0 -1
  311. package/dist/lua-DeXVjwzF.es.js +0 -8
  312. package/dist/luau-BjYGiqID.es.js +0 -6
  313. package/dist/luau-CvqAeq4F.cjs.js +0 -1
  314. package/dist/make-BjuHP00g.es.js +0 -6
  315. package/dist/make-Oob5Z9Pk.cjs.js +0 -1
  316. package/dist/markdown-B6guhLWd.es.js +0 -6
  317. package/dist/markdown-BGBuj4LZ.cjs.js +0 -1
  318. package/dist/marko-CS7eEGs3.cjs.js +0 -1
  319. package/dist/marko-DwPYPpB3.es.js +0 -14
  320. package/dist/material-theme-D6KBX41T.es.js +0 -4
  321. package/dist/material-theme-Dj0-OyRN.cjs.js +0 -1
  322. package/dist/material-theme-darker-CkRroheE.es.js +0 -4
  323. package/dist/material-theme-darker-Dvfs29ir.cjs.js +0 -1
  324. package/dist/material-theme-lighter-BUBw43Yz.es.js +0 -4
  325. package/dist/material-theme-lighter-EU3ZGl_r.cjs.js +0 -1
  326. package/dist/material-theme-ocean-ClGX14Ja.es.js +0 -4
  327. package/dist/material-theme-ocean-px_3Pwqa.cjs.js +0 -1
  328. package/dist/material-theme-palenight-38jxvsGX.cjs.js +0 -1
  329. package/dist/material-theme-palenight-C1RVm8K1.es.js +0 -4
  330. package/dist/matlab-BpQlIJiw.es.js +0 -6
  331. package/dist/matlab-CbN2rF6P.cjs.js +0 -1
  332. package/dist/mdc-Bkl-bu_Z.cjs.js +0 -1
  333. package/dist/mdc-X4YjkufV.es.js +0 -12
  334. package/dist/mdx-Cl31h8mi.cjs.js +0 -1
  335. package/dist/mdx-DIoECIFU.es.js +0 -6
  336. package/dist/mermaid-BZ7WHNIe.es.js +0 -6
  337. package/dist/mermaid-CSogK_LM.cjs.js +0 -1
  338. package/dist/min-dark-C7ak0t6c.es.js +0 -4
  339. package/dist/min-dark-tt5o_I5e.cjs.js +0 -1
  340. package/dist/min-light-CKFxVcPp.es.js +0 -4
  341. package/dist/min-light-tmTHl_CQ.cjs.js +0 -1
  342. package/dist/mipsasm-BseoYJQp.cjs.js +0 -1
  343. package/dist/mipsasm-DusDYkFc.es.js +0 -6
  344. package/dist/mojo-CY9jaezJ.es.js +0 -6
  345. package/dist/mojo-D8QAG3Ze.cjs.js +0 -1
  346. package/dist/monokai-C1KBYcO0.es.js +0 -4
  347. package/dist/monokai-DMIxv6MM.cjs.js +0 -1
  348. package/dist/move-ChphFumd.es.js +0 -6
  349. package/dist/move-DaBrcjat.cjs.js +0 -1
  350. package/dist/narrat-Dz4d7OmN.es.js +0 -6
  351. package/dist/narrat-oOfAO4q8.cjs.js +0 -1
  352. package/dist/nextflow-BxJSKvPb.cjs.js +0 -1
  353. package/dist/nextflow-DW0Yq9a2.es.js +0 -6
  354. package/dist/nginx-ChI-VqNT.es.js +0 -8
  355. package/dist/nginx-LuyFICzP.cjs.js +0 -1
  356. package/dist/night-owl-BN78kThQ.cjs.js +0 -1
  357. package/dist/night-owl-Bm2rzalh.es.js +0 -4
  358. package/dist/nim-BiJA-5u7.es.js +0 -20
  359. package/dist/nim-DkC83hsN.cjs.js +0 -1
  360. package/dist/nix-Cg5uV_xg.es.js +0 -6
  361. package/dist/nix-DNME0Ea7.cjs.js +0 -1
  362. package/dist/nord-CC5OiUXg.es.js +0 -4
  363. package/dist/nord-Ca5AGUWc.cjs.js +0 -1
  364. package/dist/nushell-BfRnzRWn.es.js +0 -6
  365. package/dist/nushell-DI9Z3l3M.cjs.js +0 -1
  366. package/dist/objective-c-BGg9R27G.es.js +0 -6
  367. package/dist/objective-c-DVx8Rcni.cjs.js +0 -1
  368. package/dist/objective-cpp-CJ3y3V_5.es.js +0 -6
  369. package/dist/objective-cpp-s6XI7Jvk.cjs.js +0 -1
  370. package/dist/ocaml-BZLsfx_o.es.js +0 -6
  371. package/dist/ocaml-kUzDDUf2.cjs.js +0 -1
  372. package/dist/one-dark-pro-D7-kP8fv.es.js +0 -4
  373. package/dist/one-dark-pro-JOzzHStv.cjs.js +0 -1
  374. package/dist/one-light-020-h_lv.cjs.js +0 -1
  375. package/dist/one-light-D9sNaUtq.es.js +0 -4
  376. package/dist/pascal-D509_I72.cjs.js +0 -1
  377. package/dist/pascal-l2bqd7Dz.es.js +0 -6
  378. package/dist/perl-CkXYjL3t.es.js +0 -16
  379. package/dist/perl-DUnCLRB_.cjs.js +0 -1
  380. package/dist/php-D0k1sQr6.cjs.js +0 -1
  381. package/dist/php-q40Yjh5d.es.js +0 -18
  382. package/dist/plastic-CSTz3KZp.es.js +0 -4
  383. package/dist/plastic-r5piqq-S.cjs.js +0 -1
  384. package/dist/plsql-C_qH_YOK.cjs.js +0 -1
  385. package/dist/plsql-oVq_K_wH.es.js +0 -6
  386. package/dist/po-5jaeIyVd.es.js +0 -6
  387. package/dist/po-CBsLQIcu.cjs.js +0 -1
  388. package/dist/poimandres-BLP3NNjc.cjs.js +0 -1
  389. package/dist/poimandres-C-VADXHD.es.js +0 -4
  390. package/dist/polar-De-CDeYv.cjs.js +0 -1
  391. package/dist/polar-wcLp8ci7.es.js +0 -6
  392. package/dist/postcss-BZ3MNRIJ.es.js +0 -6
  393. package/dist/postcss-BtcsgaYj.cjs.js +0 -1
  394. package/dist/powerquery-B0rHn13V.cjs.js +0 -1
  395. package/dist/powerquery-CgRa2XRw.es.js +0 -6
  396. package/dist/powershell-Diwyv8Eh.es.js +0 -6
  397. package/dist/powershell-rCX2OYXT.cjs.js +0 -1
  398. package/dist/prisma-BaaUHYMp.cjs.js +0 -1
  399. package/dist/prisma-COL_v1x4.es.js +0 -6
  400. package/dist/prolog-CuvJOxqT.es.js +0 -6
  401. package/dist/prolog-DrXD2tGS.cjs.js +0 -1
  402. package/dist/proto-BtmQjBQu.cjs.js +0 -1
  403. package/dist/proto-o9HLmF90.es.js +0 -6
  404. package/dist/pug-Br4hpvIv.es.js +0 -12
  405. package/dist/pug-CFQMpTUe.cjs.js +0 -1
  406. package/dist/puppet-cIrXIuy8.cjs.js +0 -1
  407. package/dist/puppet-wpGOnQp5.es.js +0 -6
  408. package/dist/purescript-B_1NgE2N.es.js +0 -6
  409. package/dist/purescript-CX9QPs2N.cjs.js +0 -1
  410. package/dist/python-B9x3euv6.cjs.js +0 -1
  411. package/dist/python-xYxLFJY-.es.js +0 -6
  412. package/dist/qml-CzqrIM5W.cjs.js +0 -1
  413. package/dist/qml-D5gi21kK.es.js +0 -8
  414. package/dist/qmldir-BInDYbpo.es.js +0 -6
  415. package/dist/qmldir-DNF9H2ir.cjs.js +0 -1
  416. package/dist/qss-C744dLby.cjs.js +0 -1
  417. package/dist/qss-D-h4NdUG.es.js +0 -6
  418. package/dist/r-DgOc9oMe.cjs.js +0 -1
  419. package/dist/r-F-9I-ITZ.es.js +0 -6
  420. package/dist/racket-BoD1TBFT.es.js +0 -6
  421. package/dist/racket-Do9_vqnd.cjs.js +0 -1
  422. package/dist/raku-BW8wAUIz.cjs.js +0 -1
  423. package/dist/raku-IaYcw19m.es.js +0 -6
  424. package/dist/razor-Bt_t1YJb.es.js +0 -10
  425. package/dist/razor-COQhlwWF.cjs.js +0 -1
  426. package/dist/red-7y8PH7HH.es.js +0 -4
  427. package/dist/red-BQGOv1D5.cjs.js +0 -1
  428. package/dist/reg-CGWN_v-z.cjs.js +0 -1
  429. package/dist/reg-CMUdAgIP.es.js +0 -6
  430. package/dist/regexp-GiFkbxS-.es.js +0 -6
  431. package/dist/regexp-N7Z4hEeU.cjs.js +0 -1
  432. package/dist/rel-BYqA7mnV.cjs.js +0 -1
  433. package/dist/rel-BaRn3QX7.es.js +0 -6
  434. package/dist/riscv-B9V3SsvW.es.js +0 -6
  435. package/dist/riscv-ayQMUpo9.cjs.js +0 -1
  436. package/dist/rose-pine-DKEdv1Oe.cjs.js +0 -1
  437. package/dist/rose-pine-DhT-HZE9.es.js +0 -4
  438. package/dist/rose-pine-dawn-Bvt6DtVH.cjs.js +0 -1
  439. package/dist/rose-pine-dawn-DiCjL2i4.es.js +0 -4
  440. package/dist/rose-pine-moon-BNmGHlcn.es.js +0 -4
  441. package/dist/rose-pine-moon-cHuJy0Ng.cjs.js +0 -1
  442. package/dist/rst-BmKw97ch.es.js +0 -22
  443. package/dist/rst-Bq-h_T5U.cjs.js +0 -1
  444. package/dist/ruby-Bw5IEIKD.cjs.js +0 -1
  445. package/dist/ruby-cs7BSa_9.es.js +0 -30
  446. package/dist/rust-BnFKGEfa.cjs.js +0 -1
  447. package/dist/rust-Pc7DCsZD.es.js +0 -6
  448. package/dist/sas-BWKaSYkZ.cjs.js +0 -1
  449. package/dist/sas-DgvHx4mL.es.js +0 -8
  450. package/dist/sass-B9gYryDE.cjs.js +0 -1
  451. package/dist/sass-iCyS6eP9.es.js +0 -6
  452. package/dist/scala-C85dOwSU.cjs.js +0 -1
  453. package/dist/scala-Cly-fENF.es.js +0 -6
  454. package/dist/scheme-B_XUaARm.cjs.js +0 -1
  455. package/dist/scheme-Zi24oEYu.es.js +0 -6
  456. package/dist/scss-B_hSZppj.es.js +0 -8
  457. package/dist/scss-CV3c8_Y7.cjs.js +0 -1
  458. package/dist/sdbl-7Y5u0OW0.cjs.js +0 -1
  459. package/dist/sdbl-BBamrXFL.es.js +0 -6
  460. package/dist/shaderlab-CJ8U2E2w.cjs.js +0 -1
  461. package/dist/shaderlab-U9mqcu_f.es.js +0 -8
  462. package/dist/shellscript-3DYM9fut.cjs.js +0 -1
  463. package/dist/shellscript-Dn0-btNd.es.js +0 -6
  464. package/dist/shellsession-CbKmorC3.cjs.js +0 -1
  465. package/dist/shellsession-LvXGClmj.es.js +0 -8
  466. package/dist/slack-dark-akqwQ7ED.cjs.js +0 -1
  467. package/dist/slack-dark-i7wN4OET.es.js +0 -4
  468. package/dist/slack-ochin-BoQQWmTv.cjs.js +0 -1
  469. package/dist/slack-ochin-ndHf0LoP.es.js +0 -4
  470. package/dist/smalltalk-CCvytUuW.cjs.js +0 -1
  471. package/dist/smalltalk-Cns31tKw.es.js +0 -6
  472. package/dist/snazzy-light-BlSJXAu4.es.js +0 -4
  473. package/dist/snazzy-light-D_IwRieF.cjs.js +0 -1
  474. package/dist/solarized-dark-UTmkh7lw.es.js +0 -4
  475. package/dist/solarized-dark-gmm-WbDC.cjs.js +0 -1
  476. package/dist/solarized-light-BheCkDPT.es.js +0 -4
  477. package/dist/solarized-light-DzcxRSZP.cjs.js +0 -1
  478. package/dist/solidity-BG_k8fA_.es.js +0 -6
  479. package/dist/solidity-BcNcjFC4.cjs.js +0 -1
  480. package/dist/soy-B2d9ZydM.cjs.js +0 -1
  481. package/dist/soy-C0yEn39K.es.js +0 -8
  482. package/dist/sparql-CiBxIK0g.cjs.js +0 -1
  483. package/dist/sparql-CuZaxpno.es.js +0 -8
  484. package/dist/splunk-CTqDjQdo.es.js +0 -6
  485. package/dist/splunk-CzITjJj7.cjs.js +0 -1
  486. package/dist/sql-BqWZrLHB.cjs.js +0 -1
  487. package/dist/sql-DCkt643-.es.js +0 -6
  488. package/dist/ssh-config-DHHGll-v.es.js +0 -6
  489. package/dist/ssh-config-DUPeuEdB.cjs.js +0 -1
  490. package/dist/stata-B8m3qL-x.cjs.js +0 -1
  491. package/dist/stata-Dv81f34z.es.js +0 -8
  492. package/dist/stylus-ByHs6N-o.cjs.js +0 -1
  493. package/dist/stylus-n_9f0QQ5.es.js +0 -6
  494. package/dist/svelte-CfLoBBrI.cjs.js +0 -1
  495. package/dist/svelte-SoJd35Jr.es.js +0 -14
  496. package/dist/swift-BAWqNR8A.es.js +0 -6
  497. package/dist/swift-C5DnOriA.cjs.js +0 -1
  498. package/dist/synthwave-84-BBRLOmNT.cjs.js +0 -1
  499. package/dist/synthwave-84-NU3C_KFZ.es.js +0 -4
  500. package/dist/system-verilog-ClPLYLwh.cjs.js +0 -1
  501. package/dist/system-verilog-Cui-g-ut.es.js +0 -6
  502. package/dist/systemd-BASX0DlX.cjs.js +0 -1
  503. package/dist/systemd-CsKYQIQK.es.js +0 -6
  504. package/dist/talonscript-D2dGh8FO.es.js +0 -6
  505. package/dist/talonscript-DkCSnLHD.cjs.js +0 -1
  506. package/dist/tasl-BAQJK7KZ.cjs.js +0 -1
  507. package/dist/tasl-D3W8HMV6.es.js +0 -6
  508. package/dist/tcl-2y0Fuc4S.es.js +0 -6
  509. package/dist/tcl-CwJAYTvh.cjs.js +0 -1
  510. package/dist/templ-BSMv2wKZ.cjs.js +0 -1
  511. package/dist/templ-C7he2afp.es.js +0 -12
  512. package/dist/terraform-BGW6Oerf.es.js +0 -6
  513. package/dist/terraform-s-pzyVvp.cjs.js +0 -1
  514. package/dist/tex-B0y3cEZp.es.js +0 -8
  515. package/dist/tex-DwtFCA08.cjs.js +0 -1
  516. package/dist/tokyo-night-9T7_vGSy.cjs.js +0 -1
  517. package/dist/tokyo-night-LhP3hHhi.es.js +0 -4
  518. package/dist/toml-CQSfOn0e.es.js +0 -6
  519. package/dist/toml-CyMM7IXy.cjs.js +0 -1
  520. package/dist/ts-tags-C5-4VQhf.es.js +0 -41
  521. package/dist/ts-tags-MIr66hKK.cjs.js +0 -1
  522. package/dist/tsv-BtvSkaG0.es.js +0 -6
  523. package/dist/tsv-DqNGnuVj.cjs.js +0 -1
  524. package/dist/tsx-DiGsgWT8.es.js +0 -6
  525. package/dist/tsx-DpBRUnKC.cjs.js +0 -1
  526. package/dist/turtle-BJ2wmjPc.es.js +0 -6
  527. package/dist/turtle-DfO3eAsu.cjs.js +0 -1
  528. package/dist/twig-BzjoX4ZJ.cjs.js +0 -1
  529. package/dist/twig-OmkATFdv.es.js +0 -18
  530. package/dist/typescript-BqvpT6pB.cjs.js +0 -1
  531. package/dist/typescript-buWNZFwO.es.js +0 -6
  532. package/dist/typespec-P-ZVy8yC.cjs.js +0 -1
  533. package/dist/typespec-bLbdsxJL.es.js +0 -6
  534. package/dist/typst-BVh2IsT9.cjs.js +0 -1
  535. package/dist/typst-Y9_SmXTs.es.js +0 -6
  536. package/dist/v-BUlE9136.cjs.js +0 -1
  537. package/dist/v-wa8Orrdd.es.js +0 -6
  538. package/dist/vala-BIymb2K_.cjs.js +0 -1
  539. package/dist/vala-DRdriFr_.es.js +0 -6
  540. package/dist/vb-E2_-jk4M.es.js +0 -6
  541. package/dist/vb-IXOh8mqV.cjs.js +0 -1
  542. package/dist/verilog-B1iBoR5_.es.js +0 -6
  543. package/dist/verilog-BiglCqvO.cjs.js +0 -1
  544. package/dist/vesper-CJsaOsSM.es.js +0 -4
  545. package/dist/vesper-DqLWLxOu.cjs.js +0 -1
  546. package/dist/vhdl-CJUzuS2t.cjs.js +0 -1
  547. package/dist/vhdl-CRVaAhXk.es.js +0 -6
  548. package/dist/viml-B-zWOd7Z.es.js +0 -6
  549. package/dist/viml-B1nKLcgt.cjs.js +0 -1
  550. package/dist/vitesse-black-BoGvW84i.es.js +0 -4
  551. package/dist/vitesse-black-MF-1S1MG.cjs.js +0 -1
  552. package/dist/vitesse-dark-Cym-eLtO.es.js +0 -4
  553. package/dist/vitesse-dark-SIffJYSe.cjs.js +0 -1
  554. package/dist/vitesse-light-CcmG315c.es.js +0 -4
  555. package/dist/vitesse-light-U63SkYGT.cjs.js +0 -1
  556. package/dist/vue-DCwwWMGI.es.js +0 -31
  557. package/dist/vue-DYZqcRaZ.cjs.js +0 -1
  558. package/dist/vue-html-CdPbyrq1.cjs.js +0 -1
  559. package/dist/vue-html-sRE_Ny23.es.js +0 -10
  560. package/dist/vyper-CO9xUkIY.cjs.js +0 -1
  561. package/dist/vyper-DWutKXpa.es.js +0 -6
  562. package/dist/wasm-Bv5f0gKv.es.js +0 -6
  563. package/dist/wasm-CdIThIat.cjs.js +0 -1
  564. package/dist/wenyan-BMYnfus1.es.js +0 -6
  565. package/dist/wenyan-BSJ3fk7e.cjs.js +0 -1
  566. package/dist/wgsl-DnPoPGDU.es.js +0 -6
  567. package/dist/wgsl-d3zZE7ZN.cjs.js +0 -1
  568. package/dist/wikitext-BRCqXN2g.cjs.js +0 -1
  569. package/dist/wikitext-CntM04PE.es.js +0 -6
  570. package/dist/wolfram-C3rR92zj.cjs.js +0 -1
  571. package/dist/wolfram-Ws5qPlX9.es.js +0 -6
  572. package/dist/xml-BRLTD55J.cjs.js +0 -1
  573. package/dist/xml-Ch1q_kJp.es.js +0 -8
  574. package/dist/xsl-DyL8yqXw.es.js +0 -8
  575. package/dist/xsl-ETbYGV_-.cjs.js +0 -1
  576. package/dist/yaml-7DV6pRKj.cjs.js +0 -1
  577. package/dist/yaml-Bbg74JKr.es.js +0 -6
  578. package/dist/zenscript-BWMxwjeH.cjs.js +0 -1
  579. package/dist/zenscript-C0RKE4nU.es.js +0 -6
  580. package/dist/zig-D6SXBGNm.es.js +0 -6
  581. package/dist/zig-yAcNfpgW.cjs.js +0 -1
@@ -1,9 +1,25 @@
1
1
  import "@malloydata/malloy-explorer/styles.css";
2
- import { Stack, Typography } from "@mui/material";
3
- import { useEffect, useState } from "react";
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
- // Execute cells sequentially when notebook is loaded
60
- useEffect(() => {
61
- if (!isSuccess || !notebook.notebookCells) return;
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
- // Call the executeNotebookCell API
85
- const response = await fetch(
86
- `/api/v0/projects/${projectName}/packages/${packageName}/notebooks/${notebookPath}/cells/${i}${versionId ? `?versionId=${versionId}` : ""}`,
87
- {
88
- method: "GET",
89
- credentials: "include",
90
- },
91
- );
92
-
93
- if (!response.ok) {
94
- throw new Error(
95
- `Failed to execute cell ${i}: ${response.statusText}`,
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
- const executedCell = await response.json();
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
- // Combine raw cell with execution results
102
- cells.push({
103
- type: rawCell.type,
104
- text: rawCell.text,
105
- queryName: executedCell.queryName,
106
- result: executedCell.result,
107
- newSources: executedCell.newSources,
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
- executeCells();
129
- }, [isSuccess, notebook, projectName, packageName, notebookPath, versionId]);
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
- <RenderedResultInner {...props} />
237
+ {props.onSizeChange ? (
238
+ <RenderedResultInner {...props} />
239
+ ) : (
240
+ <RenderResultSimple {...props} />
241
+ )}
223
242
  </Suspense>
224
243
  );
225
244
  }