react-semaphor 0.1.506 → 0.1.508

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 (247) hide show
  1. package/DATA_APP_SDK.md +56 -0
  2. package/dist/analytics-protocol/index.cjs +1 -1
  3. package/dist/analytics-protocol/index.js +194 -172
  4. package/dist/appearance/index.cjs +1 -1
  5. package/dist/appearance/index.js +1 -1
  6. package/dist/appearance-runtime/index.cjs +1 -1
  7. package/dist/appearance-runtime/index.js +1 -1
  8. package/dist/brand-studio/index.cjs +2 -2
  9. package/dist/brand-studio/index.js +139 -119
  10. package/dist/briefings/index.cjs +1 -1
  11. package/dist/briefings/index.js +3 -3
  12. package/dist/chunks/appearance-context-DzqCdhB4.cjs +1 -0
  13. package/dist/chunks/{appearance-context-XviHOhWJ.js → appearance-context-VJdrKi7r.js} +2 -1
  14. package/dist/chunks/{appearance-runtime-provider-D0xVQWnH.js → appearance-runtime-provider-CC4HT2Gi.js} +2 -2
  15. package/dist/chunks/{appearance-runtime-provider-Ca8rxO86.cjs → appearance-runtime-provider-D5pkvgE4.cjs} +1 -1
  16. package/dist/chunks/calculated-field-identity-BiTGmnST.cjs +1 -0
  17. package/dist/chunks/calculated-field-identity-CJL54uFx.js +1373 -0
  18. package/dist/chunks/{constants-NUleP4DY.js → card-config-utils-Bq1enstT.js} +260 -260
  19. package/dist/chunks/card-config-utils-CMO4_zVs.cjs +1 -0
  20. package/dist/chunks/{dashboard-briefing-launcher-DXTpU85p.js → dashboard-briefing-launcher-B9l0ZAbv.js} +12 -12
  21. package/dist/chunks/{dashboard-briefing-launcher-C8nDSDnV.cjs → dashboard-briefing-launcher-C4zsM3Hd.cjs} +1 -1
  22. package/dist/chunks/{dashboard-controls-CyL0yimg.js → dashboard-controls-BCQv4xWM.js} +16 -14
  23. package/dist/chunks/dashboard-controls-CWwllVOe.cjs +52 -0
  24. package/dist/chunks/{dashboard-json-5Jr3RudV.js → dashboard-json-BtU_q_0A.js} +9 -9
  25. package/dist/chunks/dashboard-json-DVj2xLsH.cjs +1 -0
  26. package/dist/chunks/edit-dashboard-visual-CO2IVBOq.cjs +172 -0
  27. package/dist/chunks/{edit-dashboard-visual-C7X-um9g.js → edit-dashboard-visual-RgFUx-py.js} +1986 -1990
  28. package/dist/chunks/{editor-action-buttons-CcDm8nA5.cjs → editor-action-buttons-BE8Fby6n.cjs} +2 -2
  29. package/dist/chunks/{editor-action-buttons-C5Wja_J4.js → editor-action-buttons-D-MaqTIs.js} +6 -6
  30. package/dist/chunks/field-aggregations-DUb0NU6c.js +1229 -0
  31. package/dist/chunks/field-aggregations-jSi77h9Z.cjs +1 -0
  32. package/dist/chunks/{field-dependencies-DVl2p1Nm.js → field-dependencies-Cl97kkHy.js} +30 -34
  33. package/dist/chunks/{field-dependencies-r_U0CGQ-.cjs → field-dependencies-DIab72rQ.cjs} +1 -1
  34. package/dist/chunks/{index-BVr4fcCB.js → index-0pdaQ9e1.js} +5 -5
  35. package/dist/chunks/index-BaIrLSBb.cjs +1422 -0
  36. package/dist/chunks/{index-De2QNsqV.js → index-ByiS9sB4.js} +45343 -43665
  37. package/dist/chunks/{index-C9KXfCkC.js → index-CLIro-EG.js} +3 -0
  38. package/dist/chunks/index-Cx3qmRUB.cjs +1 -0
  39. package/dist/chunks/{index-BlYf8gNa.cjs → index-DhlVxvyI.cjs} +1 -1
  40. package/dist/chunks/{matrix-card-DACDwdTq.js → matrix-card-CnKQpnsj.js} +1 -1
  41. package/dist/chunks/{matrix-card-CRXcmAjp.cjs → matrix-card-U4c72doZ.cjs} +1 -1
  42. package/dist/chunks/{matrix-control-sources-ClQzIk7E.js → matrix-control-sources-CRRdP03Q.js} +165 -134
  43. package/dist/chunks/matrix-control-sources-FjxGIbqk.cjs +1 -0
  44. package/dist/chunks/{matrix-formatter-7GLTcBuy.cjs → matrix-formatter-CveLJo6S.cjs} +1 -1
  45. package/dist/chunks/{matrix-formatter-xsq7n_e6.js → matrix-formatter-ZVS5QOuq.js} +2 -2
  46. package/dist/chunks/matrix-member-presentation-CFHjdrxT.cjs +1 -0
  47. package/dist/chunks/matrix-member-presentation-CzGZJd3a.js +182 -0
  48. package/dist/chunks/matrix-operation-contract-DoiWTUbT.cjs +1 -0
  49. package/dist/chunks/matrix-operation-contract-xL8IhFzp.js +1802 -0
  50. package/dist/chunks/{pivot-header-presentation-3wqWChFd.cjs → pivot-header-presentation-Cxz8-06f.cjs} +1 -1
  51. package/dist/chunks/{pivot-header-presentation-D44ODZGn.js → pivot-header-presentation-DVylCBHB.js} +2 -2
  52. package/dist/chunks/{pivot-result-lifecycle-DZ0ZSMoM.cjs → pivot-result-lifecycle-BiERyXnS.cjs} +1 -1
  53. package/dist/chunks/{pivot-result-lifecycle-BSmqVkVG.js → pivot-result-lifecycle-CmjpW7qG.js} +1 -1
  54. package/dist/chunks/{report-preferences-dialog-xADifRXs.js → report-preferences-dialog-BbkXcnnn.js} +4 -4
  55. package/dist/chunks/report-preferences-dialog-C9rpWgQZ.cjs +1 -0
  56. package/dist/chunks/{search-BHsQIWBV.js → selection-reducer-B94WgZ9V.js} +55 -11
  57. package/dist/chunks/selection-reducer-CGKKsaPa.cjs +26 -0
  58. package/dist/chunks/{semantic-format-BhIL1PXP.cjs → semantic-format-BzH69TRq.cjs} +1 -1
  59. package/dist/chunks/{semantic-format-C3amkGmY.js → semantic-format-CBlRO8Aw.js} +1 -1
  60. package/dist/chunks/{switch-DHGiC0aU.js → switch-CD4uGTZI.js} +7450 -7694
  61. package/dist/chunks/switch-iC1x2dcE.cjs +134 -0
  62. package/dist/chunks/token-types-Ahh5u4iT.cjs +1 -0
  63. package/dist/chunks/token-types-CPde8_LG.js +8 -0
  64. package/dist/chunks/{update-policy-Cc9h57pA.cjs → update-policy-COjFudhl.cjs} +1 -1
  65. package/dist/chunks/{update-policy-eTcz52jO.js → update-policy-D9q1Tz8k.js} +1 -1
  66. package/dist/dashboard/index.cjs +1 -1
  67. package/dist/dashboard/index.js +1 -1
  68. package/dist/dashboard-authoring/index.cjs +3 -3
  69. package/dist/dashboard-authoring/index.js +734 -622
  70. package/dist/data-app-builder/index.cjs +1 -1
  71. package/dist/data-app-builder/index.js +3 -3
  72. package/dist/data-app-codegen/index.cjs +1 -1
  73. package/dist/data-app-codegen/index.js +2 -2
  74. package/dist/data-app-codegen-node/index.cjs +94 -92
  75. package/dist/data-app-codegen-node/index.js +337 -333
  76. package/dist/data-app-sdk/index.cjs +9 -9
  77. package/dist/data-app-sdk/index.js +1091 -969
  78. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  79. package/dist/data-app-sdk-adapters/index.js +104 -96
  80. package/dist/data-app-sdk-validation/index.cjs +1 -1
  81. package/dist/data-app-sdk-validation/index.js +2 -2
  82. package/dist/format-utils/index.cjs +1 -1
  83. package/dist/format-utils/index.js +8 -8
  84. package/dist/index.cjs +1 -1
  85. package/dist/index.js +15 -15
  86. package/dist/style.css +1 -1
  87. package/dist/surfboard/index.cjs +1 -1
  88. package/dist/surfboard/index.js +2 -2
  89. package/dist/types/brand-studio/brand-studio-draft.d.ts +3 -1
  90. package/dist/types/components/dashboard/card-selection-pill.d.ts +5 -0
  91. package/dist/types/components/dashboard/dashboard-container.d.ts +1 -1
  92. package/dist/types/components/dashboard/drill-breadcrumb.d.ts +1 -0
  93. package/dist/types/components/dashboard/drill-navigation-controls.d.ts +3 -3
  94. package/dist/types/components/interactions/applied-filters-display.d.ts +6 -1
  95. package/dist/types/components/interactions/click-to-filter-review-dialog.d.ts +21 -0
  96. package/dist/types/components/interactions/dashboard-drill-host.d.ts +13 -0
  97. package/dist/types/components/interactions/filter-badge-tooltip.d.ts +4 -4
  98. package/dist/types/components/interactions/insight-modal.d.ts +4 -14
  99. package/dist/types/components/interactions/insight-viewer.d.ts +7 -19
  100. package/dist/types/components/interactions/interactions-sheet.d.ts +6 -0
  101. package/dist/types/components/interactions/panels/click-to-filter-panel.d.ts +20 -0
  102. package/dist/types/components/interactions/reusable/interaction-selection-popover.d.ts +2 -2
  103. package/dist/types/components/interactions/sheet/action-editor.d.ts +17 -0
  104. package/dist/types/components/interactions/sheet/action-meta.d.ts +45 -0
  105. package/dist/types/components/interactions/sheet/action-picker.d.ts +7 -0
  106. package/dist/types/components/interactions/sheet/click-outcome-preview.d.ts +10 -0
  107. package/dist/types/components/interactions/sheet/interactions-home.d.ts +28 -0
  108. package/dist/types/components/interactions/sheet/sheet-parts.d.ts +37 -0
  109. package/dist/types/components/surfboard/filter/dashboard-filter-mapping-panel.d.ts +28 -1
  110. package/dist/types/components/surfboard/filter/selection-chip.d.ts +11 -0
  111. package/dist/types/components/surfboard/filter/selection-filter-section.d.ts +4 -0
  112. package/dist/types/components/surfboard/filter/use-dashboard-filter-mapping-popover.d.ts +3 -0
  113. package/dist/types/components/ui/resizable.d.ts +1 -1
  114. package/dist/types/components/visual/matrix-table/matrix-interaction-actions.d.ts +13 -1
  115. package/dist/types/components/visual/matrix-table/matrix-selection-click.d.ts +6 -0
  116. package/dist/types/data-app-sdk/adapters.d.ts +3 -2
  117. package/dist/types/data-app-sdk/builders.d.ts +2 -1
  118. package/dist/types/data-app-sdk/contracts.d.ts +44 -2
  119. package/dist/types/data-app-sdk/index.d.ts +1 -0
  120. package/dist/types/data-app-sdk/query-request.d.ts +7 -2
  121. package/dist/types/data-app-sdk/selection.d.ts +2 -0
  122. package/dist/types/index.cjs +1 -1
  123. package/dist/types/index.js +24 -23
  124. package/dist/types/lib/appearance/types.d.ts +3 -1
  125. package/dist/types/lib/briefings/briefing-attachment-model.d.ts +0 -2
  126. package/dist/types/lib/contexts/interactions-popover-context.d.ts +1 -8
  127. package/dist/types/lib/dashboard/click-to-filter-card-references.d.ts +23 -0
  128. package/dist/types/lib/dashboard-inputs/build-normalized-dashboard-inputs.d.ts +16 -2
  129. package/dist/types/lib/dashboard-inputs/build-selection-dashboard-inputs.d.ts +31 -0
  130. package/dist/types/lib/dashboard-inputs/click-to-filter-emitted-fields.d.ts +17 -0
  131. package/dist/types/lib/dashboard-inputs/click-to-filter-mapping-draft.d.ts +99 -0
  132. package/dist/types/lib/dashboard-inputs/click-to-filter-sheet-reach.d.ts +12 -0
  133. package/dist/types/lib/dashboard-inputs/dashboard-filter-mapping-authoring.d.ts +18 -1
  134. package/dist/types/lib/dashboard-inputs/dashboard-filter-mapping-candidate-metadata.d.ts +4 -1
  135. package/dist/types/lib/dashboard-inputs/dashboard-input-scope.d.ts +10 -0
  136. package/dist/types/lib/dashboard-inputs/dashboard-input-snapshot.d.ts +8 -1
  137. package/dist/types/lib/dashboard-inputs/index.d.ts +1 -0
  138. package/dist/types/lib/dashboard-inputs/resolve-dashboard-input-context.d.ts +18 -7
  139. package/dist/types/lib/dashboard-inputs/resolve-field-date-comparison-coverage.d.ts +5 -2
  140. package/dist/types/lib/dashboard-inputs/resolve-selection-input.d.ts +77 -0
  141. package/dist/types/lib/dashboard-inputs/selection-targets.d.ts +26 -0
  142. package/dist/types/lib/dashboard-inputs/transient-input-context.d.ts +102 -0
  143. package/dist/types/lib/dashboard-navigation/build-carried-click-context.d.ts +50 -0
  144. package/dist/types/lib/dashboard-navigation/describe-carried-context.d.ts +11 -0
  145. package/dist/types/lib/dashboard-navigation/index.d.ts +1 -0
  146. package/dist/types/lib/dashboard-navigation/navigation-state.d.ts +120 -0
  147. package/dist/types/lib/dashboard-navigation/run-one-off-drill.d.ts +11 -0
  148. package/dist/types/lib/dashboard-navigation/use-transient-contexts.d.ts +17 -0
  149. package/dist/types/lib/dashboard-view-state/card-view-state.d.ts +48 -0
  150. package/dist/types/lib/dashboard-view-state/drill-path.d.ts +20 -0
  151. package/dist/types/lib/dashboard-view-state/index.d.ts +2 -0
  152. package/dist/types/lib/download-pdf.d.ts +0 -3
  153. package/dist/types/lib/formatters/metric-formatting.d.ts +1 -1
  154. package/dist/types/lib/hooks/ai/dashboard-context.d.ts +15 -8
  155. package/dist/types/lib/hooks/chartjs/use-chart-blur.d.ts +10 -2
  156. package/dist/types/lib/hooks/interactions/{use-event-engine.d.ts → use-drill-actions.d.ts} +28 -7
  157. package/dist/types/lib/hooks/selection/use-active-selections.d.ts +15 -0
  158. package/dist/types/lib/hooks/selection/use-click-to-filter-mapping-draft.d.ts +20 -0
  159. package/dist/types/lib/hooks/selection/use-selection-click.d.ts +34 -0
  160. package/dist/types/lib/hooks/selection/use-selection-gestures.d.ts +38 -0
  161. package/dist/types/lib/hooks/selection/use-table-row-selection.d.ts +46 -0
  162. package/dist/types/lib/hooks/use-dashboard-card.d.ts +0 -2
  163. package/dist/types/lib/hooks/use-dashboard-filter-mapping-candidates.d.ts +18 -0
  164. package/dist/types/lib/hooks/use-dashboard-frame-query.d.ts +0 -1
  165. package/dist/types/lib/hooks/use-dashboard.d.ts +1 -3
  166. package/dist/types/lib/hooks/use-interactions-popover.d.ts +1 -8
  167. package/dist/types/lib/hooks/use-resolved-card-config.d.ts +6 -0
  168. package/dist/types/lib/interactions/click-outcome.d.ts +25 -0
  169. package/dist/types/lib/interactions/get-click-context-from-chartjs.d.ts +3 -1
  170. package/dist/types/lib/interactions/get-click-context-from-matrix.d.ts +1 -1
  171. package/dist/types/lib/interactions/get-click-context-from-table.d.ts +7 -0
  172. package/dist/types/lib/interactions/interaction-utils.d.ts +17 -1
  173. package/dist/types/lib/matrix-table/build-matrix-drill-to-detail.d.ts +15 -0
  174. package/dist/types/lib/matrix-table/matrix-card-interactions.d.ts +14 -3
  175. package/dist/types/lib/query-context/build-card-query-context.d.ts +19 -8
  176. package/dist/types/lib/query-context/build-dashboard-execution-snapshot.d.ts +5 -3
  177. package/dist/types/lib/query-context/build-dashboard-frame-base-query-contexts.d.ts +12 -4
  178. package/dist/types/lib/query-context/compile-selection-filters.d.ts +5 -0
  179. package/dist/types/lib/query-context/dashboard-filter-mapping-resolution.d.ts +46 -0
  180. package/dist/types/lib/query-context/filter-group-utils.d.ts +3 -0
  181. package/dist/types/lib/query-context/resolve-runtime-card-filters.d.ts +29 -0
  182. package/dist/types/lib/selection/click-to-filter-authoring-support.d.ts +9 -0
  183. package/dist/types/lib/selection/selection-from-click-context.d.ts +41 -0
  184. package/dist/types/lib/selection/selection-labels.d.ts +3 -0
  185. package/dist/types/lib/selection/selection-notices.d.ts +9 -0
  186. package/dist/types/lib/selection/selection-reducer.d.ts +46 -0
  187. package/dist/types/lib/stores/dashboard-store.d.ts +62 -17
  188. package/dist/types/lib/stores/editor-store.d.ts +1 -2
  189. package/dist/types/lib/stores/index.d.ts +0 -2
  190. package/dist/types/lib/types/common-types.d.ts +60 -6
  191. package/dist/types/lib/types/explorer-types.d.ts +1 -22
  192. package/dist/types/lib/types/interaction-types.d.ts +6 -198
  193. package/dist/types/lib/utils/calculate-context-aware-filters.d.ts +21 -12
  194. package/dist/types/lib/utils/card-utils.d.ts +11 -0
  195. package/dist/types/lib/utils/date-hierarchy-utils.d.ts +3 -1
  196. package/dist/types/lib/utils/drag-and-drop-utils.d.ts +1 -1
  197. package/dist/types/lib/utils/interaction-icons.d.ts +1 -1
  198. package/dist/types/shared/analytics-protocol/execution-input-schemas.d.ts +32 -32
  199. package/dist/types/shared/analytics-protocol/index.d.ts +2 -0
  200. package/dist/types/shared/analytics-protocol/selection-contract.d.ts +100 -0
  201. package/dist/types/shared/analytics-protocol/selection-filter-compiler.d.ts +12 -0
  202. package/dist/types/shared/dashboard-authoring/apply-group-by-override.d.ts +19 -0
  203. package/dist/types/shared/dashboard-authoring/click-to-filter-settings.d.ts +88 -0
  204. package/dist/types/shared/dashboard-authoring/contracts.d.ts +8 -0
  205. package/dist/types/shared/dashboard-authoring/index.d.ts +3 -0
  206. package/dist/types/shared/dashboard-authoring/linked-click-to-filter-overrides.d.ts +32 -0
  207. package/dist/types/shared/format-utils/matrix-continuation.d.ts +3 -3
  208. package/package.json +1 -1
  209. package/src/data-app-sdk/README.md +58 -1
  210. package/dist/chunks/appearance-context-tNjvTJj3.cjs +0 -1
  211. package/dist/chunks/calculated-field-identity-BTpUqfEu.js +0 -1276
  212. package/dist/chunks/calculated-field-identity-rMuXuzEY.cjs +0 -1
  213. package/dist/chunks/constants-vtu7_IUo.cjs +0 -1
  214. package/dist/chunks/dashboard-controls-DlxeddZN.cjs +0 -52
  215. package/dist/chunks/dashboard-json-DhS4yJfc.cjs +0 -1
  216. package/dist/chunks/edit-dashboard-visual-X3OCnivL.cjs +0 -172
  217. package/dist/chunks/field-aggregations-BU_3gHKR.js +0 -957
  218. package/dist/chunks/field-aggregations-CDCamEsQ.cjs +0 -1
  219. package/dist/chunks/index-C8XCKzB6.cjs +0 -1
  220. package/dist/chunks/index-DSa6RSdg.cjs +0 -1417
  221. package/dist/chunks/matrix-control-sources-CeC5EMyq.cjs +0 -1
  222. package/dist/chunks/matrix-member-presentation-E2B4k3ws.cjs +0 -1
  223. package/dist/chunks/matrix-member-presentation-qiHxv67e.js +0 -105
  224. package/dist/chunks/matrix-operation-contract-Cqy4EW2H.js +0 -1638
  225. package/dist/chunks/matrix-operation-contract-D9dLX-Wr.cjs +0 -1
  226. package/dist/chunks/report-preferences-dialog-7Vsc_fsG.cjs +0 -1
  227. package/dist/chunks/search-BqqhaMx9.cjs +0 -26
  228. package/dist/chunks/switch-BytP6QY8.cjs +0 -139
  229. package/dist/types/components/interactions/configuration-popover.d.ts +0 -1
  230. package/dist/types/components/interactions/interaction-card.d.ts +0 -59
  231. package/dist/types/components/interactions/interaction-event-handler.d.ts +0 -11
  232. package/dist/types/components/interactions/interactions-list.d.ts +0 -50
  233. package/dist/types/components/interactions/panels/cross-filter-panel.d.ts +0 -24
  234. package/dist/types/components/interactions/panels/inline-drill-panel.d.ts +0 -24
  235. package/dist/types/components/interactions/selectors/action-selector.d.ts +0 -31
  236. package/dist/types/components/interactions/selectors/trigger-selector.d.ts +0 -38
  237. package/dist/types/components/surfboard/filter/click-filter-section.d.ts +0 -5
  238. package/dist/types/lib/interactions/build-interaction-event.d.ts +0 -25
  239. package/dist/types/lib/interactions/convert-click-filters-to-filter-group.d.ts +0 -10
  240. package/dist/types/lib/interactions/execute-interaction-event.d.ts +0 -80
  241. package/dist/types/lib/interactions/field-utils.d.ts +0 -11
  242. package/dist/types/lib/interactions/handle-chart-click.d.ts +0 -75
  243. package/dist/types/lib/interactions/linked-interaction-utils.d.ts +0 -14
  244. package/dist/types/lib/interactions/source-card-filter-utils.d.ts +0 -9
  245. package/dist/types/lib/stores/drill-actions.d.ts +0 -139
  246. package/dist/types/lib/stores/interaction-store.d.ts +0 -113
  247. package/dist/types/lib/stores/pointer-interaction-store.d.ts +0 -18
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-DSa6RSdg.cjs"),r=require("../chunks/common-types-nBuCd3u2.cjs"),o=require("../chunks/report-preferences-dialog-7Vsc_fsG.cjs");exports.DisplayFormatPreferencesFields=e.DisplayFormatPreferencesFields;exports.Surfboard=e.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=r.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=r.EMPTY_SELECTION;exports.ReportPreferencesDialog=o.ReportPreferencesDialog;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-BaIrLSBb.cjs"),r=require("../chunks/common-types-nBuCd3u2.cjs"),o=require("../chunks/report-preferences-dialog-C9rpWgQZ.cjs");exports.DisplayFormatPreferencesFields=e.DisplayFormatPreferencesFields;exports.Surfboard=e.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=r.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=r.EMPTY_SELECTION;exports.ReportPreferencesDialog=o.ReportPreferencesDialog;
@@ -1,6 +1,6 @@
1
- import { b as a, a as o } from "../chunks/index-De2QNsqV.js";
1
+ import { b as a, a as o } from "../chunks/index-ByiS9sB4.js";
2
2
  import { C as f, E } from "../chunks/common-types-C6cAQgyh.js";
3
- import { R as t } from "../chunks/report-preferences-dialog-xADifRXs.js";
3
+ import { R as t } from "../chunks/report-preferences-dialog-BbkXcnnn.js";
4
4
  export {
5
5
  f as CONTROL_CARD_DEFAULT_VALUE,
6
6
  a as DisplayFormatPreferencesFields,
@@ -42,7 +42,7 @@ type RequiredTableAppearance = {
42
42
  density: AppearanceDensity;
43
43
  container: NonNullable<AppearanceTable['container']>;
44
44
  header: Required<NonNullable<AppearanceTable['header']>>;
45
- row: Required<NonNullable<AppearanceTable['row']>>;
45
+ row: Required<Omit<NonNullable<AppearanceTable['row']>, 'selectedBackground'>>;
46
46
  cell: Required<NonNullable<AppearanceTable['cell']>>;
47
47
  subtotal: Required<NonNullable<AppearanceTable['subtotal']>>;
48
48
  grandTotal: Required<NonNullable<AppearanceTable['grandTotal']>>;
@@ -67,6 +67,8 @@ type PresetScheme = {
67
67
  primaryForeground: string;
68
68
  accent: string;
69
69
  accentForeground: string;
70
+ /** What a viewer selected to filter by. A colored preset uses its primary. */
71
+ selection: string;
70
72
  card: string;
71
73
  cardForeground: string;
72
74
  chartPalette: string[];
@@ -0,0 +1,5 @@
1
+ import { TCard } from '../../lib/types/common-types.js';
2
+ /** On the source card while it holds a selection: what the click is doing, and a way out. */
3
+ export declare function CardSelectionPill({ card }: {
4
+ card: TCard;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -5,5 +5,5 @@ type ContainerProps = DashboardProps & HTMLAttributes<HTMLDivElement> & {
5
5
  cardId?: string;
6
6
  dashboardId?: string;
7
7
  };
8
- export declare function Container({ className, customStyle, onSave, onEvent, onDashboardLifecycleEvent, LoadingComponent, ErrorComponent, onChartElementClicked, id, authToken, currentTheme, appearance: _appearance, version, customCards, showAssistant, defaultFilterValues, defaultControlValues, controlContractOverrides, documentInputValues: _documentInputValues, dashboardInputExecutionSnapshot, interactionExecutionSnapshot, presentationExecutionSnapshot, renderMode: _renderMode, onFilterValuesChange, selectedSheetId, eventHandlers, type, cardId, dashboardId, style, ...props }: ContainerProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Container({ className, customStyle, onSave, onEvent, onDashboardLifecycleEvent, LoadingComponent, ErrorComponent, onChartElementClicked, id, authToken, currentTheme, appearance: _appearance, version, customCards, showAssistant, defaultFilterValues, defaultControlValues, controlContractOverrides, documentInputValues: _documentInputValues, dashboardInputExecutionSnapshot, presentationExecutionSnapshot, renderMode: _renderMode, onFilterValuesChange, selectedSheetId, eventHandlers, type, cardId, dashboardId, style, ...props }: ContainerProps): import("react/jsx-runtime").JSX.Element;
9
9
  export {};
@@ -2,5 +2,6 @@ interface DrillBreadcrumbProps {
2
2
  cardId: string;
3
3
  className?: string;
4
4
  }
5
+ /** The card's drill path, from card view state. Each crumb drills back up to its level. */
5
6
  export declare function DrillBreadcrumb({ cardId, className }: DrillBreadcrumbProps): import("react/jsx-runtime").JSX.Element | null;
6
7
  export {};
@@ -4,10 +4,10 @@
4
4
  * Floating UI controls for drill-through navigation.
5
5
  * Displays:
6
6
  * - Back button to return to previous dashboard
7
- * - Drill context badges showing active filters
8
- * - Clear button to remove drill context
7
+ * - Badges showing the click the viewer drilled through on
8
+ * - Clear button to remove the carried context
9
9
  *
10
- * Only visible when drill context exists (user has drilled through).
10
+ * Only visible on a dashboard the viewer drilled through to.
11
11
  * Draggable to allow repositioning if blocking view.
12
12
  */
13
13
  export declare function DrillNavigationControls(): import("react/jsx-runtime").JSX.Element | null;
@@ -1,6 +1,11 @@
1
1
  import { ClickFilterCondition } from '../../lib/types/interaction-types.js';
2
2
  import { TFilterValue, TFilter } from '../surfboard/filter/types.js';
3
+ import { CarriedContextItem } from '../../lib/dashboard-navigation/describe-carried-context.js';
3
4
  interface AppliedFiltersDisplayProps {
5
+ /**
6
+ * Already described lines, for a carried context. Used instead of `filters`.
7
+ */
8
+ items?: CarriedContextItem[];
4
9
  /**
5
10
  * Filters applied to the insight
6
11
  * Can be either ClickFilterCondition (interaction filters) or TFilterValue (dashboard filters)
@@ -31,5 +36,5 @@ interface AppliedFiltersDisplayProps {
31
36
  */
32
37
  icon?: React.ReactNode;
33
38
  }
34
- export declare function AppliedFiltersDisplay({ filters, filterDefinitions, contextMode, className, showLabel, labelText, icon, }: AppliedFiltersDisplayProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export declare function AppliedFiltersDisplay({ items, filters, filterDefinitions, contextMode, className, showLabel, labelText, icon, }: AppliedFiltersDisplayProps): import("react/jsx-runtime").JSX.Element | null;
35
40
  export {};
@@ -0,0 +1,21 @@
1
+ import { DashboardFilterMappingFieldLabels } from '../../lib/dashboard-inputs/dashboard-filter-mapping-candidate-metadata.js';
2
+ import { ClickToFilterMappingDraft } from '../../lib/dashboard-inputs/click-to-filter-mapping-draft.js';
3
+ import { ClickToFilterSettings, NormalizedFilterDashboardInput } from '../../lib/types/common-types.js';
4
+ /**
5
+ * Which cards a click reaches and which field each clicked field lands on.
6
+ * Rows are the toolbar filter's `MappingRow`, so the field picker, search,
7
+ * grouping by source and field labels are the same components. Done applies
8
+ * the draft to the panel's settings; the popover's Save persists them.
9
+ */
10
+ export declare function ClickToFilterReviewDialog({ open, onOpenChange, sourceTitle, draft, settings, onSettingsChange, fieldLabels, filterInputs, isLoading, onRetry, }: {
11
+ open: boolean;
12
+ onOpenChange: (open: boolean) => void;
13
+ sourceTitle: string;
14
+ draft: ClickToFilterMappingDraft | undefined;
15
+ settings: ClickToFilterSettings;
16
+ onSettingsChange: (settings: ClickToFilterSettings) => void;
17
+ fieldLabels?: DashboardFilterMappingFieldLabels;
18
+ filterInputs: NormalizedFilterDashboardInput[];
19
+ isLoading: boolean;
20
+ onRetry: () => void;
21
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * DashboardDrillHost Component
3
+ *
4
+ * A logic-only observer mounted once at the dashboard root. It owns the two
5
+ * side effects a drill has outside its card:
6
+ *
7
+ * - Drill through. A pending drill-through waits here for its destination to
8
+ * load, then becomes a navigation entry. This is also the one place where
9
+ * dashboard selection follows `navigationTarget`, forward and back.
10
+ * - Drill to insight in a modal. The open request lives in the dashboard
11
+ * store; this renders it.
12
+ */
13
+ export declare function DashboardDrillHost(): import("react/jsx-runtime").JSX.Element;
@@ -1,13 +1,13 @@
1
- import { ClickFilterCondition } from '../../lib/types/interaction-types.js';
1
+ import { CarriedContextItem } from '../../lib/dashboard-navigation/describe-carried-context.js';
2
2
  interface FilterBadgeTooltipProps {
3
3
  /**
4
- * Filters applied to the insight
4
+ * What the insight was opened with: the click and any carried filters
5
5
  */
6
- filters?: ClickFilterCondition[];
6
+ items?: CarriedContextItem[];
7
7
  /**
8
8
  * Context mode indicating how filters were passed
9
9
  */
10
10
  contextMode?: 'filters' | 'full' | 'none' | 'interactionFilters';
11
11
  }
12
- export declare function FilterBadgeTooltip({ filters, contextMode, }: FilterBadgeTooltipProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export declare function FilterBadgeTooltip({ items: filters, contextMode, }: FilterBadgeTooltipProps): import("react/jsx-runtime").JSX.Element | null;
13
13
  export {};
@@ -1,5 +1,4 @@
1
- import { ClickFilterCondition } from '../../lib/types/interaction-types.js';
2
- import { TFilter, TFilterValue } from '../surfboard/filter/types.js';
1
+ import { TransientInputContext } from '../../lib/dashboard-inputs/transient-input-context.js';
3
2
  interface InsightModalProps {
4
3
  /**
5
4
  * Whether the modal is open
@@ -14,18 +13,9 @@ interface InsightModalProps {
14
13
  */
15
14
  insightId: string;
16
15
  /**
17
- * Filters to apply to the insight
18
- * Can be either ClickFilterCondition (interaction filters) or TFilterValue (dashboard filters)
16
+ * The insight request's runtime; absent while no insight is open
19
17
  */
20
- filters?: (ClickFilterCondition | TFilterValue)[];
21
- /**
22
- * Filter definitions for looking up titles
23
- */
24
- filterDefinitions?: TFilter[];
25
- /**
26
- * How context was passed to the insight
27
- */
28
- contextMode?: 'interactionFilters' | 'full' | 'none';
18
+ runtime?: TransientInputContext;
29
19
  /**
30
20
  * Title of the insight card (displayed in modal header)
31
21
  */
@@ -35,5 +25,5 @@ interface InsightModalProps {
35
25
  */
36
26
  cardDescription?: string;
37
27
  }
38
- export declare function InsightModal({ open, onOpenChange, insightId, filters, filterDefinitions, contextMode, cardTitle, cardDescription, }: InsightModalProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function InsightModal({ open, onOpenChange, insightId, runtime, cardTitle, cardDescription, }: InsightModalProps): import("react/jsx-runtime").JSX.Element;
39
29
  export {};
@@ -1,28 +1,16 @@
1
- /**
2
- * InsightViewer Component
3
- *
4
- * Renders a saved insight/visual by ID.
5
- * Used in both modal and replace-card display modes.
6
- *
7
- * Features:
8
- * - Fetches visual data by ID
9
- * - Extracts and renders the card from the frame
10
- * - Applies context filters based on contextMode
11
- * - Loading and error states
12
- */
1
+ import { TransientInputContext } from '../../lib/dashboard-inputs/transient-input-context.js';
13
2
  interface InsightViewerProps {
14
3
  /**
15
4
  * ID of the insight/visual to display
16
5
  */
17
6
  insightId: string;
18
7
  /**
19
- * Filters to apply to the insight
8
+ * The insight request's runtime: the click it was opened with, and under
9
+ * `full` what the dashboard itself had received. It is the only carried
10
+ * context the insight's card resolves under, and its context mode decides
11
+ * whether the dashboard's own toolbar filters apply.
20
12
  */
21
- filters?: any[];
22
- /**
23
- * How context was passed to the insight
24
- */
25
- contextMode?: 'interactionFilters' | 'full' | 'none';
13
+ runtime: TransientInputContext;
26
14
  }
27
- export declare function InsightViewer({ insightId, filters, contextMode, }: InsightViewerProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function InsightViewer({ insightId, runtime }: InsightViewerProps): import("react/jsx-runtime").JSX.Element;
28
16
  export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * What a click on a card does, authored in one side sheet: the filter, every
3
+ * drill action, and whether the card listens to the others. Everything edits a
4
+ * local draft that Save writes at once.
5
+ */
6
+ export declare function InteractionsSheet(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,20 @@
1
+ import { ClickToFilterDimension } from '../../../lib/dashboard-inputs/click-to-filter-emitted-fields.js';
2
+ import { ClickToFilterMappingDraft } from '../../../lib/dashboard-inputs/click-to-filter-mapping-draft.js';
3
+ import { ClickToFilterSettings, TCard } from '../../../lib/types/common-types.js';
4
+ /**
5
+ * Everything about click to filter, one step in from the sheet's list: the
6
+ * switch, what a click carries, which cards it reaches, and multiple
7
+ * selection. It edits a draft; the sheet saves it with everything else.
8
+ */
9
+ export declare function ClickToFilterPanel({ card, settings, onSettingsChange, dimensions, draft, isLoadingDraft, onReviewCards, isLinked, }: {
10
+ card: Pick<TCard, 'type' | 'title'>;
11
+ settings: ClickToFilterSettings;
12
+ onSettingsChange: (settings: ClickToFilterSettings) => void;
13
+ /** The card's groundable dimension fields, for the chosen-columns checklist. */
14
+ dimensions: ClickToFilterDimension[];
15
+ draft: ClickToFilterMappingDraft | undefined;
16
+ isLoadingDraft: boolean;
17
+ onReviewCards: () => void;
18
+ /** A linked library visual: behavior saves to the library, card targeting to this dashboard. */
19
+ isLinked?: boolean;
20
+ }): import("react/jsx-runtime").JSX.Element;
@@ -8,7 +8,7 @@ import { TCard } from '../../../lib/types/index.js';
8
8
  *
9
9
  * Features:
10
10
  * - Shows interaction label, icon, and target information
11
- * - Positioned at click location (from anchorPosition)
11
+ * - Positioned at the supplied click coordinates
12
12
  * - Displays selected element context
13
13
  * - Handles interaction selection and event application
14
14
  *
@@ -95,7 +95,7 @@ interface InteractionSelectionPopoverProps {
95
95
  */
96
96
  drillHierarchies?: DrillHierarchy[];
97
97
  /**
98
- * Card ID for accessing current drill depth from interaction store
98
+ * Card ID for reading the current drill depth from card view state
99
99
  */
100
100
  cardId?: string;
101
101
  /**
@@ -0,0 +1,17 @@
1
+ import { DrillHierarchy, Interaction } from '../../../lib/types/interaction-types.js';
2
+ import { Field } from '../../../lib/types/explorer-types.js';
3
+ import { TCard } from '../../../lib/types/common-types.js';
4
+ /** One action, one step in from the list. Edits the sheet's draft in place. */
5
+ export declare function ActionEditor({ interaction, isNew, metrics, attributes, availableFields, card, onUpdateHierarchies, onUpdate, onRemove, onDone, }: {
6
+ interaction: Interaction;
7
+ /** Added in this visit and not yet confirmed with Done. */
8
+ isNew: boolean;
9
+ metrics: Field[];
10
+ attributes: Field[];
11
+ availableFields: Field[];
12
+ card: TCard;
13
+ onUpdateHierarchies: (hierarchies: DrillHierarchy[]) => void;
14
+ onUpdate: (interaction: Interaction) => void;
15
+ onRemove: () => void;
16
+ onDone: () => void;
17
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,45 @@
1
+ import { DrillThroughInteraction, DrillToDetailInteraction, Interaction, InteractionTrigger } from '../../../lib/types/interaction-types.js';
2
+ import { Field } from '../../../lib/types/explorer-types.js';
3
+ import { TCard } from '../../../lib/types/common-types.js';
4
+ export declare const TABLE_TYPES: ReadonlyArray<TCard['type']>;
5
+ /** What a viewer clicks on this kind of card, with its article: "a row", "a mark". */
6
+ export declare function clickUnit(type: TCard['type']): string;
7
+ /** "Applies to 1 of 2 cards on this sheet". A click reaches its own sheet only. */
8
+ export declare function reachSentence(draft: {
9
+ cards: readonly unknown[];
10
+ counts: {
11
+ covered: number;
12
+ toReview: number;
13
+ };
14
+ }): string;
15
+ /** The actions an author can add. Click to filter is a card setting, not one of these. */
16
+ export type ActionMode = 'drillDown' | 'dynamicDrill' | 'drillThrough' | 'drillToDetail' | 'drillToURL';
17
+ export declare const ACTION_META: Record<ActionMode, {
18
+ name: string;
19
+ line: string;
20
+ term: string;
21
+ group: 'stay' | 'go';
22
+ }>;
23
+ export declare const ACTION_GROUPS: Array<{
24
+ id: 'stay' | 'go';
25
+ title: string;
26
+ }>;
27
+ /** A matrix offers drills from its context menu, which only opens an insight. */
28
+ export declare function allowedActionModes(cardType: TCard['type']): ActionMode[];
29
+ export declare function isActionMode(mode: Interaction['mode']): mode is ActionMode;
30
+ /**
31
+ * The field a new action listens on. A metric carries every dimension of the
32
+ * clicked value, which suits going somewhere; an in-place drill follows one
33
+ * dimension.
34
+ */
35
+ export declare function defaultTrigger(mode: ActionMode, metrics: Field[], attributes: Field[]): InteractionTrigger | undefined;
36
+ export declare function createAction(mode: ActionMode, id: string, trigger: InteractionTrigger | undefined): Interaction & {
37
+ id: string;
38
+ };
39
+ /** What the author still has to fill in, or undefined when the action can run. */
40
+ export declare function actionGap(interaction: Interaction): string | undefined;
41
+ /** The name a viewer sees in the menu, which is also the row title here. */
42
+ export declare function actionTitle(interaction: Interaction): string;
43
+ /** Drill-through and insight default differently at runtime (`run-one-off-drill.ts`). */
44
+ export declare function effectiveContextMode(interaction: DrillThroughInteraction | DrillToDetailInteraction): 'interactionFilters' | 'full' | 'none';
45
+ export declare function actionSummary(interaction: Interaction, card: Pick<TCard, 'interactionConfig'>): string;
@@ -0,0 +1,7 @@
1
+ import { ActionMode } from './action-meta.js';
2
+ /** Pick what the click should do first; the editor asks for the rest. */
3
+ export declare function ActionPicker({ allowedModes, onPick, onBack, }: {
4
+ allowedModes: ActionMode[];
5
+ onPick: (mode: ActionMode) => void;
6
+ onBack: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { ClickOutcome } from '../../../lib/interactions/click-outcome.js';
2
+ /**
3
+ * The sentence the sheet exists to answer: what does a click on this card do.
4
+ * It reads the draft, so it changes as the author edits.
5
+ */
6
+ export declare function ClickOutcomePreview({ outcome, clickUnit, }: {
7
+ outcome: ClickOutcome;
8
+ /** "a row", "a mark", … */
9
+ clickUnit: string;
10
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,28 @@
1
+ import { ClickOutcome } from '../../../lib/interactions/click-outcome.js';
2
+ import { ClickToFilterMappingDraft } from '../../../lib/dashboard-inputs/click-to-filter-mapping-draft.js';
3
+ import { Interaction } from '../../../lib/types/interaction-types.js';
4
+ import { TCard } from '../../../lib/types/common-types.js';
5
+ /**
6
+ * The sheet's first view. One question at the top, then the two things an
7
+ * author decides: what a click on this card does, and whether the card listens
8
+ * to clicks on the others.
9
+ */
10
+ export declare function InteractionsHome({ card, clickUnit, outcome, canFilter, filterEnabled, onFilterEnabledChange, hasFullFilterAuthoring, draft, isLoadingDraft, interactions, canAddAction, onOpenFilter, onOpenAction, onAddAction, respondsToSelections, onRespondsToSelectionsChange, }: {
11
+ card: Pick<TCard, 'interactionConfig'>;
12
+ clickUnit: string;
13
+ outcome: ClickOutcome;
14
+ /** False when the card has no field a click can filter by. */
15
+ canFilter: boolean;
16
+ filterEnabled: boolean;
17
+ onFilterEnabledChange: (enabled: boolean) => void;
18
+ hasFullFilterAuthoring: boolean;
19
+ draft: ClickToFilterMappingDraft | undefined;
20
+ isLoadingDraft: boolean;
21
+ interactions: Interaction[];
22
+ canAddAction: boolean;
23
+ onOpenFilter: () => void;
24
+ onOpenAction: (index: number) => void;
25
+ onAddAction: () => void;
26
+ respondsToSelections: boolean;
27
+ onRespondsToSelectionsChange: (responds: boolean) => void;
28
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { ReactNode } from 'react';
2
+ /** Caption above a group (design/TOKENS.md `text-caption`). */
3
+ export declare const SECTION_LABEL_CLASS = "text-[10px] font-medium uppercase tracking-[0.08em] text-muted-foreground";
4
+ /**
5
+ * A box as tall as a row's title line. Icons, switches and chevrons sit in one
6
+ * so they center on the title, not between the title and the hint under it.
7
+ */
8
+ export declare function TitleLine({ children }: {
9
+ children: ReactNode;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare const ROW_TITLE_CLASS = "text-[13px] font-medium leading-[18px] text-foreground";
12
+ export declare const ROW_HINT_CLASS = "mt-0.5 text-[12px] leading-[1.45] text-muted-foreground";
13
+ /** One setting with its switch on the right. Every switch in the sheet uses this. */
14
+ export declare function SwitchRow({ title, hint, checked, onCheckedChange, disabled, className, }: {
15
+ title: string;
16
+ hint?: ReactNode;
17
+ checked: boolean;
18
+ onCheckedChange: (checked: boolean) => void;
19
+ disabled?: boolean;
20
+ className?: string;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ /** Header of a view one step in: a way back, and where you are. */
23
+ export declare function SubHeader({ title, onBack }: {
24
+ title: string;
25
+ onBack: () => void;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
+ /** A short list of exclusive choices, each with a line of explanation. */
28
+ export declare function RadioCards<T extends string>({ label, value, onChange, options, }: {
29
+ label: string;
30
+ value: T;
31
+ onChange: (value: T) => void;
32
+ options: ReadonlyArray<{
33
+ value: T;
34
+ title: string;
35
+ line: string;
36
+ }>;
37
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,33 @@
1
1
  import { TDashboard } from '../../../lib/types/common-types.js';
2
- import { DashboardFilterMappingDraftDecision, DashboardFilterMappingDraftResult } from '../../../lib/dashboard-inputs/dashboard-filter-mapping-authoring.js';
2
+ import { DashboardFilterMappingDraftDecision, DashboardFilterMappingDraftResult, DashboardFilterMappingDraftRow } from '../../../lib/dashboard-inputs/dashboard-filter-mapping-authoring.js';
3
+ import { DashboardFilterTarget } from '../../../shared/dashboard-authoring/index.js';
3
4
  import { DashboardFilterMappingFieldLabels } from '../../../lib/dashboard-inputs/dashboard-filter-mapping-candidate-metadata.js';
5
+ import * as React from 'react';
6
+ /** Searchable candidate menu: search input past the dense threshold, fields
7
+ * grouped by source with counts, "Don't apply this filter" pinned at the
8
+ * bottom. No ranked or suggested section — suggestion happens once, at the
9
+ * binding level; the menu stays a plain list. */
10
+ export declare function CandidateMenuContent({ row, fieldLabels, onPickTarget, onExclude, excludeLabel, }: {
11
+ /** What choosing "don't apply" means on the calling surface. */
12
+ excludeLabel?: string;
13
+ row: DashboardFilterMappingDraftRow;
14
+ fieldLabels?: DashboardFilterMappingFieldLabels;
15
+ onPickTarget: (target: DashboardFilterTarget) => void;
16
+ onExclude: () => void;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ export declare function MappingRow({ mode, row, cardTitle, cardMeta, fieldLabels, onDecision, onRetry, excludeLabel, trailing, }: {
19
+ /** Passed to the field menu; defaults to the toolbar filter's wording. */
20
+ excludeLabel?: string;
21
+ /** An extra control after the field picker, such as a one-click Accept. */
22
+ trailing?: React.ReactNode;
23
+ mode: 'popover' | 'table';
24
+ row: DashboardFilterMappingDraftRow;
25
+ cardTitle: string;
26
+ cardMeta?: string;
27
+ fieldLabels?: DashboardFilterMappingFieldLabels;
28
+ onDecision: (decision: DashboardFilterMappingDraftDecision) => void;
29
+ onRetry: () => void;
30
+ }): import("react/jsx-runtime").JSX.Element;
4
31
  export declare function DashboardFilterMappingPanel({ dashboard, filterTitle, isLoading, draftResult, fieldLabels, onDecision, onRetry, }: {
5
32
  dashboard: Pick<TDashboard, 'sheets'>;
6
33
  filterTitle?: string;
@@ -0,0 +1,11 @@
1
+ import { SelectionTuple } from '../../../shared/analytics-protocol/selection-contract.js';
2
+ /**
3
+ * One source card's click selection in the filter bar. The chip is the record
4
+ * of the click: it names what was clicked and where, and removes it.
5
+ */
6
+ export declare function SelectionChip({ tuples, sourceTitle, targetCount, onRemove, }: {
7
+ tuples: SelectionTuple[];
8
+ sourceTitle: string;
9
+ targetCount: number;
10
+ onRemove: () => void;
11
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ /** Selections that narrow this card, per source card, with what applied and what was dropped. */
2
+ export default function SelectionFilterSection({ cardId }: {
3
+ cardId?: string;
4
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -36,6 +36,9 @@ export declare function useDashboardFilterMappingPopover(params: {
36
36
  filters: TFilter[];
37
37
  id: string;
38
38
  title?: string;
39
+ interactionDefaults?: {
40
+ clickToFilter: "on" | "off";
41
+ };
39
42
  aiContext?: import('../../../lib/types/assistant-types.js').DashboardAIContext;
40
43
  summary?: {
41
44
  enabled?: boolean;
@@ -1,6 +1,6 @@
1
1
  import * as ResizablePrimitive from "react-resizable-panels";
2
2
  declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => import("react/jsx-runtime").JSX.Element;
3
- declare const ResizablePanel: import('react').ForwardRefExoticComponent<Omit<import('react').HTMLAttributes<HTMLElement | HTMLObjectElement | HTMLMapElement | HTMLLabelElement | HTMLSourceElement | HTMLInputElement | HTMLTimeElement | HTMLTableElement | HTMLBodyElement | HTMLStyleElement | HTMLTitleElement | HTMLAreaElement | HTMLLinkElement | HTMLProgressElement | HTMLHRElement | HTMLOutputElement | HTMLAnchorElement | HTMLDataElement | HTMLBaseElement | HTMLCanvasElement | HTMLSlotElement | HTMLAudioElement | HTMLQuoteElement | HTMLBRElement | HTMLButtonElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLegendElement | HTMLLIElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLParagraphElement | HTMLPictureElement | HTMLPreElement | HTMLScriptElement | HTMLSelectElement | HTMLSpanElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
3
+ declare const ResizablePanel: import('react').ForwardRefExoticComponent<Omit<import('react').HTMLAttributes<HTMLElement | HTMLObjectElement | HTMLMapElement | HTMLLabelElement | HTMLSourceElement | HTMLInputElement | HTMLTimeElement | HTMLTableElement | HTMLBodyElement | HTMLStyleElement | HTMLTitleElement | HTMLAreaElement | HTMLOutputElement | HTMLLinkElement | HTMLProgressElement | HTMLHRElement | HTMLAnchorElement | HTMLDataElement | HTMLBaseElement | HTMLCanvasElement | HTMLAudioElement | HTMLQuoteElement | HTMLBRElement | HTMLButtonElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLegendElement | HTMLLIElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLParagraphElement | HTMLPictureElement | HTMLPreElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSpanElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
4
4
  className?: string | undefined;
5
5
  collapsedSize?: number | undefined;
6
6
  collapsible?: boolean | undefined;
@@ -1,10 +1,22 @@
1
1
  import { MatrixInteractionInput, MatrixInteraction } from '../../../lib/interactions/get-click-context-from-matrix.js';
2
+ export type MatrixSelectionSource = 'rowMembers' | 'columnMembers' | 'cells';
2
3
  export type MatrixInteractionHost = Pick<MatrixInteractionInput, 'resolveField' | 'capabilities'> & {
3
4
  canDispatch?: (mode: 'clickFilter' | 'drillToDetail', context: NonNullable<MatrixInteraction['context']>) => boolean;
4
5
  filter: (context: NonNullable<MatrixInteraction['context']>) => void;
6
+ /**
7
+ * A direct click on a member or a cell. The host decides whether that part
8
+ * of the grid starts a selection and which gesture the pointer asked for.
9
+ */
10
+ select?: (context: NonNullable<MatrixInteraction['context']>, source: MatrixSelectionSource, event: Pick<React.MouseEvent, 'shiftKey' | 'metaKey' | 'ctrlKey' | 'nativeEvent'>) => void;
11
+ /**
12
+ * Whether this part of the grid is in the card's filter selection, so the
13
+ * viewer can mark it. Absent when the card has nothing selected, which lets
14
+ * the viewer skip the question for every member and cell.
15
+ */
16
+ isSelected?: (context: NonNullable<MatrixInteraction['context']>) => boolean;
5
17
  drill: (context: NonNullable<MatrixInteraction['context']>, measure: NonNullable<MatrixInteraction['measure']>) => void;
6
18
  };
7
- /** The host adapts callbacks to the existing event engine; no query or permission owner here. */
19
+ /** The host adapts Matrix gestures to selection and drill callbacks; it owns no query or permission policy. */
8
20
  export declare function MatrixInteractionActions({ input, host, menu, }: {
9
21
  input: Omit<MatrixInteractionInput, 'resolveField' | 'capabilities'>;
10
22
  host?: MatrixInteractionHost;
@@ -0,0 +1,6 @@
1
+ import { MatrixInteractionInput } from '../../../lib/interactions/get-click-context-from-matrix.js';
2
+ import { MatrixInteractionHost, MatrixSelectionSource } from './matrix-interaction-actions.js';
3
+ /** Turns a direct click into the host's selection gesture when the clicked paths can filter. */
4
+ export declare function selectFromMatrixClick(host: MatrixInteractionHost | undefined, input: Omit<MatrixInteractionInput, 'resolveField' | 'capabilities'>, source: MatrixSelectionSource, event: Parameters<NonNullable<MatrixInteractionHost['select']>>[2]): void;
5
+ /** Whether this member or cell is in the card's filter selection. */
6
+ export declare function isMatrixClickSelected(host: MatrixInteractionHost | undefined, input: Omit<MatrixInteractionInput, 'resolveField' | 'capabilities'>): boolean;
@@ -1,5 +1,5 @@
1
- import { SemaphorAnalyticsIntent, SemaphorFieldRef, SemaphorInputBinding, SemaphorInputOperator, SemaphorMatrixIntent, SemaphorMetricIntent, SemaphorRecordsIntent, SemaphorSqlIntent } from '../shared/analytics-protocol/index.js';
2
- import { SemaphorInputOptionsQuerySpec, SemaphorInputReference, SemaphorActiveInput, SemaphorInputSpec, SemaphorInputValue, SemaphorAnalysisQueryOptions, SemaphorAnalysisQuerySpec, SemaphorControlRole, SemaphorMatrixQuerySpec, SemaphorMetricQuerySpec, SemaphorOptionValue, SemaphorRecordsQuerySpec, SemaphorSqlQuerySpec } from './contracts.js';
1
+ import { AnalyticsSelection, SemaphorAnalyticsIntent, SemaphorFieldRef, SemaphorInputBinding, SemaphorInputOperator, SemaphorMatrixIntent, SemaphorMetricIntent, SemaphorRecordsIntent, SemaphorSqlIntent } from '../shared/analytics-protocol/index.js';
2
+ import { SemaphorInputOptionsQuerySpec, SemaphorInputReference, SemaphorActiveInput, SemaphorInputSpec, SemaphorInputValue, SemaphorAnalysisQueryOptions, SemaphorAnalysisQuerySpec, SemaphorControlRole, SemaphorMatrixQuerySpec, SemaphorMetricQuerySpec, SemaphorOptionValue, SemaphorRecordsQuerySpec, SemaphorSelectionReference, SemaphorSqlQuerySpec } from './contracts.js';
3
3
  export declare function toSemaphorMetricIntent(spec: SemaphorMetricQuerySpec): SemaphorMetricIntent;
4
4
  export declare function toSemaphorAnalysisIntent(spec: SemaphorAnalysisQuerySpec): SemaphorMetricIntent;
5
5
  export declare function toSemaphorAnalysisQueryOptions(spec: SemaphorAnalysisQuerySpec): SemaphorAnalysisQueryOptions;
@@ -13,6 +13,7 @@ export declare function toSemaphorInputBinding(input: SemaphorInputReference): S
13
13
  export declare function toSemaphorInputBindings(inputs: SemaphorInputReference[] | undefined): SemaphorInputBinding[] | undefined;
14
14
  export declare function toSemaphorInputSnapshots(inputs: SemaphorInputReference[] | undefined): SemaphorActiveInput[];
15
15
  export declare function toSemaphorActiveInputSnapshots(inputs: SemaphorInputReference[] | undefined): SemaphorActiveInput[];
16
+ export declare function toSemaphorSelectionSnapshots(selections: SemaphorSelectionReference[] | undefined): AnalyticsSelection[];
16
17
  export declare function toSemaphorInputSpec<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorInputSpec<TValue>): SemaphorInputBinding & {
17
18
  kind: SemaphorInputSpec['kind'];
18
19
  label?: string;
@@ -1,4 +1,4 @@
1
- import { SemaphorAnalysisQueryDefinition, SemaphorAnalysisQuerySpec, SemaphorControlInputSpec, SemaphorControlRole, SemaphorDataAppDefinition, SemaphorDerivedFieldDefinition, SemaphorFilterInputSpec, SemaphorInputOptionsQueryDefinition, SemaphorInputOptionsQuerySpec, SemaphorInputBinding, SemaphorInputBindingReference, SemaphorInputReference, SemaphorInputSpec, SemaphorInputValue, SemaphorMatrixQueryDefinition, SemaphorMatrixQuerySpec, SemaphorMetricQueryDefinition, SemaphorMetricQuerySpec, SemaphorRecordsQueryDefinition, SemaphorRecordsQuerySpec, SemaphorSqlParameterValue, SemaphorSqlQueryDefinition, SemaphorSqlQuerySpec } from './contracts.js';
1
+ import { SemaphorAnalysisQueryDefinition, SemaphorAnalysisQuerySpec, SemaphorControlInputSpec, SemaphorControlRole, SemaphorDataAppDefinition, SemaphorDerivedFieldDefinition, SemaphorFilterInputSpec, SemaphorInputOptionsQueryDefinition, SemaphorInputOptionsQuerySpec, SemaphorInputBinding, SemaphorInputBindingReference, SemaphorInputReference, SemaphorInputSpec, SemaphorInputValue, SemaphorMatrixQueryDefinition, SemaphorMatrixQuerySpec, SemaphorMetricQueryDefinition, SemaphorMetricQuerySpec, SemaphorRecordsQueryDefinition, SemaphorRecordsQuerySpec, SemaphorSelectionInputSpec, SemaphorSqlParameterValue, SemaphorSqlQueryDefinition, SemaphorSqlQuerySpec } from './contracts.js';
2
2
  import { SemaphorFieldRef, SemaphorSemanticSourceRef, SemaphorSourceRef } from '../shared/analytics-protocol/index.js';
3
3
  export type SemaphorSqlParamInputSpec<TValue extends SemaphorInputValue = SemaphorInputValue> = Omit<SemaphorControlInputSpec<TValue>, 'kind' | 'role'> & {
4
4
  defaultValue?: TValue;
@@ -46,6 +46,7 @@ export declare const semaphor: {
46
46
  };
47
47
  };
48
48
  filter<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: Omit<SemaphorFilterInputSpec<TValue>, "kind">): SemaphorFilterInputSpec<TValue>;
49
+ selection(spec: Omit<SemaphorSelectionInputSpec, "kind">): SemaphorSelectionInputSpec;
49
50
  bindInput(input: SemaphorInputReference, binding: SemaphorBindInputSpec): SemaphorInputBindingReference;
50
51
  control<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorControlBuilderSpec<TValue>): SemaphorControlInputSpec<TValue>;
51
52
  sqlParam<TValue extends SemaphorSqlParameterValue = SemaphorSqlParameterValue>(spec: SemaphorSqlParamInputSpec<TValue>): SemaphorControlInputSpec<TValue>;