@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
@@ -0,0 +1,300 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+ import { createEmbeddedQueryResult } from "../components/QueryResult";
3
+ import { encodeResourceUri } from "../utils/formatting";
4
+ import { FilterSelection, FilterValuePrimitive } from "./useDimensionFilters";
5
+
6
+ /**
7
+ * Parameters for the useDimensionFiltersQuery hook
8
+ */
9
+ export interface UseDimensionFiltersQueryParams {
10
+ /** Project name */
11
+ project: string;
12
+ /** Package name */
13
+ package: string;
14
+ /** Model path */
15
+ model: string;
16
+ /** Source name within the model */
17
+ source: string;
18
+ /** Active filter selections */
19
+ filterSelections: FilterSelection[];
20
+ /** Optional fields to select in the query */
21
+ fields?: string[];
22
+ /** Maximum number of results to return (default: 1000) */
23
+ limit?: number;
24
+ }
25
+
26
+ /**
27
+ * Result from the useDimensionFiltersQuery hook
28
+ */
29
+ export interface DimensionFiltersQueryResult {
30
+ /** Embedded query result string suitable for rendering with EmbeddedQueryResult */
31
+ embeddedQueryResult: string | null;
32
+ /** The generated Malloy query string (preview only, not executed) */
33
+ queryString: string;
34
+ /** The resource URI for the model */
35
+ resourceUri: string;
36
+ /** Function to execute the query and generate the embedded result */
37
+ executeQuery: () => void;
38
+ /** Whether a query can be executed (has filter selections) */
39
+ canExecute: boolean;
40
+ }
41
+
42
+ /**
43
+ * Escapes special characters in strings for Malloy queries
44
+ */
45
+ function escapeMalloyString(value: string): string {
46
+ return value.replace(/'/g, "\\'").replace(/\\/g, "\\\\");
47
+ }
48
+
49
+ /**
50
+ * Formats a value for use in Malloy query
51
+ */
52
+ function formatMalloyValue(
53
+ value: FilterValuePrimitive | null | undefined,
54
+ isDate: boolean = false,
55
+ ): string {
56
+ if (value === null || value === undefined) {
57
+ return "null";
58
+ }
59
+
60
+ if (isDate) {
61
+ if (value instanceof Date) {
62
+ // Format as YYYY-MM-DD
63
+ return `@${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, "0")}-${String(value.getDate()).padStart(2, "0")}`;
64
+ }
65
+ // If it's a string, assume it's already in ISO format
66
+ return `@${value}`;
67
+ }
68
+
69
+ if (typeof value === "string") {
70
+ return `'${escapeMalloyString(value)}'`;
71
+ }
72
+
73
+ if (typeof value === "number") {
74
+ return String(value);
75
+ }
76
+
77
+ if (typeof value === "boolean") {
78
+ return value ? "true" : "false";
79
+ }
80
+
81
+ return String(value);
82
+ }
83
+
84
+ /**
85
+ * Generates a Malloy filter condition for a single filter selection
86
+ */
87
+ function generateFilterCondition(selection: FilterSelection): string {
88
+ const { dimensionName, matchType, value, value2 } = selection;
89
+ const fieldName = `\`${dimensionName}\``;
90
+
91
+ // Determine if this is a date field based on the value
92
+ const isDate = value instanceof Date;
93
+
94
+ switch (matchType) {
95
+ case "Equals":
96
+ case "Concept Search":
97
+ if (Array.isArray(value) && value.length > 0) {
98
+ // Handle multi-select: (field = val1 or field = val2)
99
+ const conditions = value.map(
100
+ (v) => `${fieldName} = ${formatMalloyValue(v, isDate)}`,
101
+ );
102
+ return `(${conditions.join(" or ")})`;
103
+ }
104
+ // Empty array or single value
105
+ if (Array.isArray(value)) return "";
106
+ return `${fieldName} = ${formatMalloyValue(value, isDate)}`;
107
+
108
+ case "Contains":
109
+ if (typeof value === "string") {
110
+ return `${fieldName} ~ f'%${escapeMalloyString(value)}%'`;
111
+ }
112
+ if (Array.isArray(value)) return "";
113
+ return `${fieldName} = ${formatMalloyValue(value)}`;
114
+
115
+ case "After":
116
+ if (Array.isArray(value)) return "";
117
+ return `${fieldName} > ${formatMalloyValue(value, isDate)}`;
118
+
119
+ case "Before":
120
+ if (Array.isArray(value)) return "";
121
+ return `${fieldName} < ${formatMalloyValue(value, isDate)}`;
122
+
123
+ case "Greater Than":
124
+ if (Array.isArray(value)) return "";
125
+ return `${fieldName} > ${formatMalloyValue(value)}`;
126
+
127
+ case "Less Than":
128
+ if (Array.isArray(value)) return "";
129
+ return `${fieldName} < ${formatMalloyValue(value)}`;
130
+
131
+ case "Between":
132
+ if (Array.isArray(value)) return "";
133
+ if (value2 !== undefined) {
134
+ return `${fieldName} >= ${formatMalloyValue(value, isDate)} and ${fieldName} <= ${formatMalloyValue(value2, isDate)}`;
135
+ }
136
+ return `${fieldName} >= ${formatMalloyValue(value, isDate)}`;
137
+
138
+ default:
139
+ return "";
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Generates a Malloy WHERE clause from active filters
145
+ */
146
+ function generateWhereClause(filterSelections: FilterSelection[]): string {
147
+ if (filterSelections.length === 0) {
148
+ return "";
149
+ }
150
+
151
+ const conditions = filterSelections
152
+ .map((selection) => generateFilterCondition(selection))
153
+ .filter((condition) => condition.length > 0);
154
+
155
+ if (conditions.length === 0) {
156
+ return "";
157
+ }
158
+
159
+ return conditions.join(" and ");
160
+ }
161
+
162
+ /**
163
+ * Builds a Malloy query with the specified filters and fields
164
+ */
165
+ function buildFilteredQuery(
166
+ source: string,
167
+ filterSelections: FilterSelection[],
168
+ fields?: string[],
169
+ limit: number = 1000,
170
+ ): string {
171
+ const whereClause = generateWhereClause(filterSelections);
172
+
173
+ // Use group_by with specific fields, or select * if none specified
174
+ const hasFields = fields && fields.length > 0;
175
+ const fieldClause = hasFields
176
+ ? `group_by: ${fields.map((f) => `\`${f}\``).join(", ")}`
177
+ : "select: *";
178
+
179
+ // Build the query
180
+ if (whereClause) {
181
+ return `
182
+ run: ${source} -> {
183
+ where: ${whereClause}
184
+ ${fieldClause}
185
+ limit: ${limit}
186
+ }
187
+ `;
188
+ } else {
189
+ return `
190
+ run: ${source} -> {
191
+ ${fieldClause}
192
+ limit: ${limit}
193
+ }
194
+ `;
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Custom hook to generate an embedded Malloy query with dimensional filters
200
+ *
201
+ * This hook takes filter selections from useDimensionFilters, builds a complete
202
+ * Malloy query with WHERE clauses, and provides a function to execute the query
203
+ * and create an embedded query result string that can be rendered with the
204
+ * EmbeddedQueryResult component.
205
+ *
206
+ * The query is not executed automatically - you must call executeQuery() to
207
+ * generate the embedded result.
208
+ *
209
+ * @param params - Parameters including model info, source, and filter selections
210
+ * @returns Query metadata, embedded result, and execute function
211
+ *
212
+ * @example
213
+ * ```tsx
214
+ * const { filterStates, getActiveFilters } = useDimensionFilters({
215
+ * dimensionSpecs: [
216
+ * { dimensionName: "category", filterType: "Star", source: "my_source", model: "model.malloy" },
217
+ * ],
218
+ * });
219
+ *
220
+ * const { embeddedQueryResult, executeQuery, canExecute } = useDimensionFiltersQuery({
221
+ * project: "my-project",
222
+ * package: "my-package",
223
+ * model: "model.malloy",
224
+ * source: "my_source",
225
+ * filterSelections: getActiveFilters(),
226
+ * fields: ["category", "price", "quantity"],
227
+ * limit: 1000, // Optional: defaults to 1000
228
+ * });
229
+ *
230
+ * // Execute button
231
+ * <Button onClick={executeQuery} disabled={!canExecute}>
232
+ * Execute Query
233
+ * </Button>
234
+ *
235
+ * // Render with EmbeddedQueryResult component
236
+ * {embeddedQueryResult && (
237
+ * <EmbeddedQueryResult embeddedQueryResult={embeddedQueryResult} />
238
+ * )}
239
+ * ```
240
+ */
241
+ export function useDimensionFiltersQuery(
242
+ params: UseDimensionFiltersQueryParams,
243
+ ): DimensionFiltersQueryResult {
244
+ const {
245
+ project,
246
+ package: packageName,
247
+ model,
248
+ source,
249
+ filterSelections,
250
+ fields,
251
+ limit = 1000,
252
+ } = params;
253
+
254
+ // State to store the executed query result
255
+ const [embeddedQueryResult, setEmbeddedQueryResult] = useState<
256
+ string | null
257
+ >(null);
258
+
259
+ // Build the query string (for preview)
260
+ const queryString = useMemo(
261
+ () => buildFilteredQuery(source, filterSelections, fields, limit),
262
+ [source, filterSelections, fields, limit],
263
+ );
264
+
265
+ // Build the resource URI
266
+ const resourceUri = useMemo(
267
+ () =>
268
+ encodeResourceUri({
269
+ projectName: project,
270
+ packageName,
271
+ modelPath: model,
272
+ }),
273
+ [project, packageName, model],
274
+ );
275
+
276
+ // Check if query can be executed
277
+ const canExecute = filterSelections.length > 0;
278
+
279
+ // Function to execute the query
280
+ const executeQuery = useCallback(() => {
281
+ if (!canExecute) {
282
+ setEmbeddedQueryResult(null);
283
+ return;
284
+ }
285
+
286
+ const result = createEmbeddedQueryResult({
287
+ resourceUri,
288
+ query: queryString,
289
+ });
290
+ setEmbeddedQueryResult(result);
291
+ }, [canExecute, resourceUri, queryString]);
292
+
293
+ return {
294
+ embeddedQueryResult,
295
+ queryString,
296
+ resourceUri,
297
+ executeQuery,
298
+ canExecute,
299
+ };
300
+ }