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