dataface 0.3.2.dev22__py3-none-any.whl → 0.3.2.dev150__py3-none-any.whl

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 (227) hide show
  1. dataface/DATAFACE_SYNTAX.md +15 -4
  2. dataface/__init__.py +70 -23
  3. dataface/agent_api/__init__.py +162 -68
  4. dataface/agent_api/_paths.py +9 -3
  5. dataface/agent_api/docs/yaml-reference.md +273 -239
  6. dataface/agent_api/init.py +1 -1
  7. dataface/agent_api/project_session.py +2 -1
  8. dataface/agent_api/serve.py +113 -0
  9. dataface/agent_api/validate.py +8 -0
  10. dataface/ai/agent.py +28 -2
  11. dataface/cli/_project.py +100 -1
  12. dataface/cli/commands/board_artifact.py +5 -2
  13. dataface/cli/commands/describe.py +7 -3
  14. dataface/cli/commands/docs.py +12 -3
  15. dataface/cli/commands/init.py +7 -14
  16. dataface/cli/commands/inspect.py +6 -1
  17. dataface/cli/commands/mcp_init.py +23 -43
  18. dataface/cli/commands/migrate.py +8 -3
  19. dataface/cli/commands/query.py +11 -8
  20. dataface/cli/commands/render.py +26 -9
  21. dataface/cli/commands/search.py +8 -2
  22. dataface/cli/commands/serve.py +25 -81
  23. dataface/cli/commands/skills_init.py +2 -19
  24. dataface/cli/commands/validate.py +7 -2
  25. dataface/cli/filesystem_project.py +5 -4
  26. dataface/cli/main.py +22 -33
  27. dataface/core/__init__.py +73 -28
  28. dataface/core/aliases.py +27 -0
  29. dataface/core/{compile/colors.py → colors.py} +20 -5
  30. dataface/core/compile/__init__.py +0 -8
  31. dataface/core/compile/channel.py +0 -13
  32. dataface/core/compile/compiler.py +161 -96
  33. dataface/core/compile/data_table.py +7 -2
  34. dataface/core/compile/enrich.py +18 -44
  35. dataface/core/compile/face_warnings.py +46 -8
  36. dataface/core/compile/format.py +47 -1
  37. dataface/core/compile/inherit_graph.py +3 -3
  38. dataface/core/compile/inherit_registry.yaml +1 -1
  39. dataface/core/compile/introspection.py +2 -13
  40. dataface/core/compile/migrations.py +112 -9
  41. dataface/core/compile/models/chart/authored/_base.py +1 -1
  42. dataface/core/compile/models/chart/normalized/__init__.py +2 -0
  43. dataface/core/compile/models/chart/normalized/_base.py +26 -0
  44. dataface/core/compile/models/chart/normalized/kpi.py +0 -4
  45. dataface/core/compile/models/chart/resolved/_base.py +28 -10
  46. dataface/core/compile/models/chart/resolved/callout.py +2 -3
  47. dataface/core/compile/models/chart/resolved/kpi.py +7 -3
  48. dataface/core/compile/models/chart/resolved/table.py +16 -2
  49. dataface/core/compile/models/config.py +5 -0
  50. dataface/core/compile/models/face/authored.py +24 -89
  51. dataface/core/compile/models/markers.py +1 -1
  52. dataface/core/compile/models/primitives.py +175 -2
  53. dataface/core/compile/models/query/authored.py +1 -119
  54. dataface/core/compile/models/refs.py +0 -2
  55. dataface/core/compile/models/source.py +78 -164
  56. dataface/core/compile/models/style/authored/__init__.py +32 -8
  57. dataface/core/compile/models/style/authored/_base.py +126 -69
  58. dataface/core/compile/models/style/authored/table.py +61 -3
  59. dataface/core/compile/models/style/resolved/__init__.py +12 -2
  60. dataface/core/compile/models/style/resolved/_base.py +142 -57
  61. dataface/core/compile/models/style/resolved/_cartesian.py +6 -11
  62. dataface/core/compile/models/style/resolved/_cascade.py +141 -54
  63. dataface/core/compile/models/style/resolved/area.py +1 -1
  64. dataface/core/compile/models/style/resolved/bar.py +1 -1
  65. dataface/core/compile/models/style/resolved/line.py +1 -1
  66. dataface/core/compile/models/style/resolved/scatter.py +3 -2
  67. dataface/core/compile/models/style/theme/__init__.py +36 -14
  68. dataface/core/compile/models/style/theme/_chart_base.py +17 -9
  69. dataface/core/compile/models/style/theme/axis.py +432 -312
  70. dataface/core/compile/models/style/theme/charts.py +10 -6
  71. dataface/core/compile/models/style/theme/kpi.py +2 -1
  72. dataface/core/compile/models/style/theme/page.py +5 -2
  73. dataface/core/compile/models/style/theme/table.py +2 -2
  74. dataface/core/compile/models/style/theme/variables.py +0 -3
  75. dataface/core/compile/models/vega_lite/config.py +1 -1
  76. dataface/core/compile/normalize_charts.py +10 -154
  77. dataface/core/compile/normalize_layout.py +20 -284
  78. dataface/core/compile/normalize_queries.py +24 -513
  79. dataface/core/compile/normalizer.py +4 -10
  80. dataface/core/compile/palette.py +19 -7
  81. dataface/core/compile/resolve/__init__.py +2 -0
  82. dataface/core/compile/resolve/_axes.py +147 -44
  83. dataface/core/compile/resolve/_channels.py +1 -1
  84. dataface/core/compile/resolve/_dispatch.py +1 -1
  85. dataface/core/compile/resolve/_domain.py +49 -32
  86. dataface/core/compile/resolve/_kwargs.py +39 -12
  87. dataface/core/compile/resolve/_marks.py +8 -3
  88. dataface/core/compile/resolve/_palette.py +7 -3
  89. dataface/core/compile/resolve/_table.py +124 -33
  90. dataface/core/compile/resolve/area.py +48 -18
  91. dataface/core/compile/resolve/bar.py +245 -64
  92. dataface/core/compile/resolve/geo.py +10 -3
  93. dataface/core/compile/resolve/heatmap.py +16 -8
  94. dataface/core/compile/resolve/line.py +35 -12
  95. dataface/core/compile/resolve/pie.py +4 -1
  96. dataface/core/compile/resolve/pie_attachment.py +1 -1
  97. dataface/core/compile/resolve/scatter.py +25 -13
  98. dataface/core/compile/resolve/simple.py +25 -2
  99. dataface/core/compile/schema_renderers/prompt.py +1 -1
  100. dataface/core/compile/schema_renderers/textmate_grammar.py +8 -1
  101. dataface/core/compile/source_map.py +211 -28
  102. dataface/core/compile/style_cascade.py +126 -55
  103. dataface/core/compile/validator.py +121 -44
  104. dataface/core/compile/yaml_error_formatter.py +108 -3
  105. dataface/core/connections.py +10 -3
  106. dataface/core/dashboard.py +27 -19
  107. dataface/core/defaults/default_config.yml +4 -0
  108. dataface/core/defaults/themes/_base.yaml +49 -40
  109. dataface/core/defaults/themes/cream.yaml +4 -4
  110. dataface/core/defaults/themes/diagnostics-title-baseline.yaml +1 -1
  111. dataface/core/defaults/themes/diagnostics-title-color-extreme.yaml +1 -1
  112. dataface/core/defaults/themes/diagnostics-title-font-extreme.yaml +1 -1
  113. dataface/core/defaults/themes/diagnostics-title-size-extreme.yaml +1 -1
  114. dataface/core/defaults/themes/diagnostics-title-weight-extreme.yaml +1 -1
  115. dataface/core/defaults/themes/editorial.yaml +9 -6
  116. dataface/core/defaults/themes/neon.yaml +15 -8
  117. dataface/core/defaults/themes/plain.yaml +6 -4
  118. dataface/core/defaults/themes/stark.yaml +24 -7
  119. dataface/core/defaults/themes/vivid.yaml +15 -8
  120. dataface/core/diagnostics/__init__.py +12 -2
  121. dataface/core/diagnostics/codes_compile.py +17 -33
  122. dataface/core/diagnostics/codes_execute.py +149 -0
  123. dataface/core/diagnostics/codes_render.py +144 -31
  124. dataface/core/diagnostics/diagnostic.py +30 -0
  125. dataface/core/diagnostics/hints.py +19 -0
  126. dataface/core/dialects/base.py +17 -0
  127. dataface/core/dialects/postgres.py +14 -0
  128. dataface/core/dialects/redshift.py +5 -0
  129. dataface/core/execute/__init__.py +59 -14
  130. dataface/core/execute/adapters/__init__.py +1 -1
  131. dataface/core/execute/adapters/dbt_adapter.py +4 -1
  132. dataface/core/execute/adapters/dbt_adapter_factory.py +19 -0
  133. dataface/core/execute/adapters/dbt_utils.py +84 -20
  134. dataface/core/execute/adapters/postgres_connection_manager.py +48 -0
  135. dataface/core/execute/adapters/sql_adapter.py +72 -4
  136. dataface/core/execute/cache_keys.py +4 -9
  137. dataface/core/execute/dbt_jinja.py +65 -10
  138. dataface/core/execute/executor.py +94 -19
  139. dataface/core/execute/file_source_materializer.py +185 -32
  140. dataface/core/execute/trivial_local_cache.py +5 -2
  141. dataface/core/font_measure.py +28 -0
  142. dataface/core/fonts.py +8 -5
  143. dataface/core/inspect/__init__.py +46 -7
  144. dataface/core/project.py +19 -3
  145. dataface/core/render/chart/data_table_attachment.py +14 -12
  146. dataface/core/render/chart/emitters/_cartesian.py +21 -18
  147. dataface/core/render/chart/emitters/_channels.py +56 -8
  148. dataface/core/render/chart/emitters/_label_overlap.py +18 -15
  149. dataface/core/render/chart/emitters/_measured_label_padding.py +4 -4
  150. dataface/core/render/chart/emitters/area.py +3 -3
  151. dataface/core/render/chart/emitters/bar.py +60 -35
  152. dataface/core/render/chart/emitters/geo.py +8 -13
  153. dataface/core/render/chart/emitters/heatmap.py +20 -26
  154. dataface/core/render/chart/emitters/line.py +2 -2
  155. dataface/core/render/chart/emitters/scatter.py +7 -30
  156. dataface/core/render/chart/features/baseline.py +22 -9
  157. dataface/core/render/chart/features/endpoint_labels.py +55 -32
  158. dataface/core/render/chart/features/mirror_axis.py +12 -9
  159. dataface/core/render/chart/features/value_labels.py +1 -1
  160. dataface/core/render/chart/kpi.py +11 -90
  161. dataface/core/render/chart/mark_extents.py +339 -0
  162. dataface/core/render/chart/presentation.py +6 -8
  163. dataface/core/render/chart/rendering.py +100 -46
  164. dataface/core/render/chart/session.py +10 -0
  165. dataface/core/render/chart/spec.py +3 -0
  166. dataface/core/render/chart/spec_builders.py +18 -18
  167. dataface/core/render/chart/table.py +81 -36
  168. dataface/core/render/chart/table_support.py +2 -53
  169. dataface/core/render/chart/time_unit_detect.py +3 -2
  170. dataface/core/render/chart/translate.py +82 -44
  171. dataface/core/render/chart/type_inference.py +45 -25
  172. dataface/core/render/chart/validation.py +91 -0
  173. dataface/core/render/chart/vega_lite.py +30 -11
  174. dataface/core/render/chart/vl_field_maps.py +111 -76
  175. dataface/core/render/conditions.py +122 -0
  176. dataface/core/render/controls.py +60 -187
  177. dataface/core/render/converters/chart.py +16 -6
  178. dataface/core/render/data_format.py +1 -1
  179. dataface/core/render/face_resolve.py +7 -0
  180. dataface/core/render/faces.py +97 -32
  181. dataface/core/render/fonts/DFTSerifOldstyleProportional-Regular.woff2 +0 -0
  182. dataface/core/render/fonts/DFTSerifOldstyleTabular-Regular.woff2 +0 -0
  183. dataface/core/render/fonts/SOURCE_CODE_PRO_LICENSE.txt +93 -93
  184. dataface/core/render/fonts/_font_face.css +10 -0
  185. dataface/core/render/layout_sizing.py +313 -238
  186. dataface/core/render/numeral_expr.py +80 -0
  187. dataface/core/render/renderer.py +14 -1
  188. dataface/core/render/sizing.py +42 -105
  189. dataface/core/render/svg_utils.py +60 -14
  190. dataface/core/render/terminal.py +1 -1
  191. dataface/core/render/variables_layout.py +211 -0
  192. dataface/core/render/variables_resolve.py +376 -0
  193. dataface/core/render/variables_strip.py +291 -368
  194. dataface/core/render/warnings/bar_band_width_too_narrow.py +64 -6
  195. dataface/core/render/warnings/base.py +18 -0
  196. dataface/core/render/warnings/layered_chart_shared_y_axis_scale_mismatch.py +25 -3
  197. dataface/core/render/warnings/layout_min_exceeds_height.py +68 -0
  198. dataface/core/render/warnings/likely_currency_or_percent_missing_formatter.py +12 -6
  199. dataface/core/render/warnings/palette_unsupported.py +6 -0
  200. dataface/core/render/warnings/pie_dominant_segment.py +1 -0
  201. dataface/core/render/warnings/pie_too_many_segments.py +1 -0
  202. dataface/core/render/warnings/point_map_out_of_projection.py +1 -0
  203. dataface/core/render/warnings/query_returned_zero_rows.py +1 -0
  204. dataface/core/render/warnings/redundant_encoding.py +20 -1
  205. dataface/core/render/warnings/registry.py +9 -3
  206. dataface/core/render/warnings/temporal_single_point.py +1 -0
  207. dataface/core/render/warnings/too_many_color_categories.py +1 -0
  208. dataface/core/render/warnings/too_many_x_categories.py +18 -2
  209. dataface/core/render/warnings/value_labels_crowd_width.py +9 -0
  210. dataface/core/render/warnings/y_encoding_mostly_null.py +1 -0
  211. dataface/core/render_format.py +18 -0
  212. dataface/core/serve/alias_index.py +16 -22
  213. dataface/core/text/format_d3.py +56 -0
  214. dataface/core/text/numeral_scale.py +218 -0
  215. dataface/core/utils.py +103 -10
  216. dataface/data/schemas/board-resolved/board-resolved.schema.json +8589 -7578
  217. dataface/data/schemas/yaml/0.3.2.json +1 -0
  218. dataface/data/schemas/yaml/manifest.json +7 -0
  219. {dataface-0.3.2.dev22.dist-info → dataface-0.3.2.dev150.dist-info}/METADATA +1 -3
  220. {dataface-0.3.2.dev22.dist-info → dataface-0.3.2.dev150.dist-info}/RECORD +223 -213
  221. dataface/core/inspect/partials/categorical.yml +0 -38
  222. dataface/core/inspect/partials/date.yml +0 -38
  223. dataface/core/inspect/partials/numeric.yml +0 -53
  224. dataface/core/inspect/templates/charts.yml +0 -94
  225. {dataface-0.3.2.dev22.dist-info → dataface-0.3.2.dev150.dist-info}/WHEEL +0 -0
  226. {dataface-0.3.2.dev22.dist-info → dataface-0.3.2.dev150.dist-info}/entry_points.txt +0 -0
  227. {dataface-0.3.2.dev22.dist-info → dataface-0.3.2.dev150.dist-info}/licenses/LICENSE +0 -0
@@ -15,10 +15,10 @@ AuthoredFace (dataface) definition from YAML.
15
15
  | `source` | str | ✓ | Default source name for all queries in this face. Inheritable via meta.yaml cascade. |
16
16
  | `cache` | [Cache](#cache) | ✓ | Cache policy for every query in this dashboard, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts the whole dashboard out. Inheritable via the meta.yaml cascade. |
17
17
  | `variables` | dict[str, [Variable](#variable) \| VariableRef] | ✓ | Variable definitions for dynamic filtering and UI controls. |
18
- | `queries` | dict[str, [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef] | ✓ | Named query definitions (SQL, CSV, MetricFlow, HTTP, etc.). |
18
+ | `queries` | dict[str, [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef] | ✓ | Named query definitions (SQL, CSV, MetricFlow, HTTP, etc.). |
19
19
  | `charts` | dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| ChartRef] | ✓ | Named chart definitions. When no explicit layout is present, charts render as an implicit row layout in authored order. |
20
- | `rows` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout: list of chart names or inline chart/face definitions. |
21
- | `cols` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout: list of chart names or inline chart/face definitions. |
20
+ | `rows` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout: list of chart names or inline chart/face definitions. |
21
+ | `cols` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout: list of chart names or inline chart/face definitions. |
22
22
  | `grid` | [GridLayout](#gridlayout) | ✓ | CSS-grid style layout with explicit row/column placement. |
23
23
  | `tabs` | [TabLayout](#tablayout) | ✓ | Tabbed navigation layout where each tab contains its own layout. |
24
24
  | `card_gap` | bool | ✓ | When True, adds gap between cards. Default: cards are edge-to-edge (0 gap). |
@@ -55,7 +55,7 @@ Variable definition from YAML.
55
55
  | `visible` | bool | ✓ | When False, the variable is not rendered in the UI but can still be set via URL params. |
56
56
  | `enabled` | bool \| str \| [SingleRowBoolProbe](#singlerowboolprobe) | ✓ | Enable this control. Accepts: static bool; a variable name or Jinja boolean expression string (no {{ }} required — bare names auto-wrap); or a {query, column} form that reads a single boolean cell from a named query. None = enabled. Absent variable in a string expression raises (use a default). |
57
57
  | `column` | str | ✓ | Column name in the query result to use as option values. |
58
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) | ✓ | Query name or inline query definition for populating options. |
58
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) | ✓ | Query name or inline query definition for populating options. |
59
59
  | `dimension` | str | ✓ | MetricFlow dimension name for populating options. |
60
60
  | `measure` | str | ✓ | MetricFlow measure name for populating options. |
61
61
  | `model` | str | ✓ | dbt model name for populating options. |
@@ -159,54 +159,6 @@ dbt source schema query.
159
159
  | `table` | str | ✓ | Table name for schema queries. |
160
160
  | `column` | str | ✓ | Column name for schema queries. |
161
161
 
162
- <a id="lookmlquery"></a>
163
- ## LookmlQuery
164
- LookML query rooted at one explore.
165
-
166
- | Field | Type | Optional | Description |
167
- |-------|------|:--------:|-------------|
168
- | `explore` | str | | LookML explore name. Presence of this key infers type: lookml. Use a merge query instead to combine multiple sources. |
169
- | `source` | str \| dict[str, Any] | ✓ | Source name reference, or an inline file path (e.g. `./data/sales.csv`). File paths are detected by `/` or data file extension. An inline connection-bearing dict (`{type: postgres, ...}`) is rejected at compile time — reference a named source instead. |
170
- | `description` | str | ✓ | Human-readable description of the query. Used by AI search and tooling. |
171
- | `ignore` | list[str] | ✓ | Diagnostic codes to suppress for this query (e.g., ['WARN-FANOUT-RISK', 'WARN-REAGGREGATION']). |
172
- | `cache` | [Cache](#cache) | ✓ | Cache policy override for this query, e.g. cache: 5m — refines the policy inherited from the source and project scopes; cache: false opts out of result caching entirely. Queries with cache: false cannot be used as {{ queries.X.cache }} upstream references. |
173
- | `type` | enum: "lookml" | ✓ | Query adapter type. |
174
- | `fields` | list[str] | ✓ | Qualified 'view.field' refs to select. Optional at authoring time: collected from chart channels when absent. |
175
- | `sorts` | list[str] | ✓ | Looker sort clauses, e.g. ['view.field', 'view.other desc']. Lowered to ORDER BY via likeml. |
176
- | `pivots` | list[str] | ✓ | Qualified 'view.field' refs to pivot on. |
177
- | `pivots_unwrapped` | bool | ✓ | Which of Looker's two pivot SQL shapes to emit: False/None = wrapped (5-layer DENSE_RANK), True = plain GROUP BY. |
178
- | `total` | bool | ✓ | Looker grand-totals flag. |
179
- | `subtotals` | list[str] | ✓ | Dimension refs to subtotal via GROUP BY ROLLUP. |
180
- | `filter_expression` | str | ✓ | Looker query-level free-form boolean filter over ${view.field} refs. |
181
- | `dynamic_fields` | list[dict[str, Any]] | ✓ | Looker dynamic fields: custom measures / custom dimensions synthesized into SQL. Table calculations compose as a derived wrapper query, not here. |
182
- | `limit` | int | ✓ | Maximum number of rows returned. |
183
- | `column_limit` | int | ✓ | Looker column_limit — caps wrapped-pivot columns. |
184
- | `filters` | dict[str, Any] | ✓ | RAW Looker filter expressions keyed by 'view.field' (e.g. "13 months", "gold") — translated to SQL predicates by likeml. |
185
-
186
- <a id="lookmlmergequery"></a>
187
- ## LookmlMergeQuery
188
- LookML query that merges multiple sources.
189
-
190
- | Field | Type | Optional | Description |
191
- |-------|------|:--------:|-------------|
192
- | `merge` | list[dict[str, Any]] | | LookML merge sources — a list of source specs. Each is either an explore spec ({explore, fields, filters?, merge_on?}) or a query reference ({query, columns, merge_on?}) for a derived source such as a table-calc wrapper. First is the primary; each secondary's `merge_on` maps its key to the primary's. Presence of this key infers type: lookml. Compiled to a FULL OUTER JOIN via likeml. |
193
- | `source` | str \| dict[str, Any] | ✓ | Source name reference, or an inline file path (e.g. `./data/sales.csv`). File paths are detected by `/` or data file extension. An inline connection-bearing dict (`{type: postgres, ...}`) is rejected at compile time — reference a named source instead. |
194
- | `description` | str | ✓ | Human-readable description of the query. Used by AI search and tooling. |
195
- | `ignore` | list[str] | ✓ | Diagnostic codes to suppress for this query (e.g., ['WARN-FANOUT-RISK', 'WARN-REAGGREGATION']). |
196
- | `cache` | [Cache](#cache) | ✓ | Cache policy override for this query, e.g. cache: 5m — refines the policy inherited from the source and project scopes; cache: false opts out of result caching entirely. Queries with cache: false cannot be used as {{ queries.X.cache }} upstream references. |
197
- | `type` | enum: "lookml" | ✓ | Query adapter type. |
198
- | `fields` | list[str] | ✓ | Qualified 'view.field' refs to select. Optional at authoring time: collected from chart channels when absent. |
199
- | `sorts` | list[str] | ✓ | Looker sort clauses, e.g. ['view.field', 'view.other desc']. Lowered to ORDER BY via likeml. |
200
- | `pivots` | list[str] | ✓ | Qualified 'view.field' refs to pivot on. |
201
- | `pivots_unwrapped` | bool | ✓ | Which of Looker's two pivot SQL shapes to emit: False/None = wrapped (5-layer DENSE_RANK), True = plain GROUP BY. |
202
- | `total` | bool | ✓ | Looker grand-totals flag. |
203
- | `subtotals` | list[str] | ✓ | Dimension refs to subtotal via GROUP BY ROLLUP. |
204
- | `filter_expression` | str | ✓ | Looker query-level free-form boolean filter over ${view.field} refs. |
205
- | `dynamic_fields` | list[dict[str, Any]] | ✓ | Looker dynamic fields: custom measures / custom dimensions synthesized into SQL. Table calculations compose as a derived wrapper query, not here. |
206
- | `limit` | int | ✓ | Maximum number of rows returned. |
207
- | `column_limit` | int | ✓ | Looker column_limit — caps wrapped-pivot columns. |
208
- | `filters` | dict[str, Any] | ✓ | RAW Looker filter expressions keyed by 'view.field' (e.g. "13 months", "gold") — translated to SQL predicates by likeml. |
209
-
210
162
  <a id="barchart"></a>
211
163
  ## BarChart
212
164
  Authored patch for bar and histogram charts.
@@ -217,9 +169,9 @@ Authored patch for bar and histogram charts.
217
169
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
218
170
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
219
171
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
220
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
172
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
221
173
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
222
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
174
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
223
175
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
224
176
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
225
177
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -246,9 +198,9 @@ Authored patch for line charts.
246
198
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
247
199
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
248
200
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
249
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
201
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
250
202
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
251
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
203
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
252
204
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
253
205
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
254
206
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -275,9 +227,9 @@ Authored patch for area charts.
275
227
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
276
228
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
277
229
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
278
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
230
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
279
231
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
280
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
232
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
281
233
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
282
234
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
283
235
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -304,9 +256,9 @@ Authored patch for scatter charts.
304
256
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
305
257
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
306
258
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
307
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
259
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
308
260
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
309
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
261
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
310
262
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
311
263
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
312
264
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -334,9 +286,9 @@ Authored patch for heatmap charts.
334
286
  | `type` | enum: "heatmap" | | Heatmap chart type. |
335
287
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
336
288
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
337
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
289
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
338
290
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
339
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
291
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
340
292
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
341
293
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
342
294
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -363,9 +315,9 @@ Authored patch for pie and donut charts.
363
315
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
364
316
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
365
317
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
366
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
318
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
367
319
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
368
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
320
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
369
321
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
370
322
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
371
323
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -386,9 +338,9 @@ Authored patch for KPI (key performance indicator) charts.
386
338
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
387
339
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
388
340
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
389
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
341
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
390
342
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
391
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
343
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
392
344
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
393
345
  | `label` | str | ✓ | KPI label rendered above the headline value. |
394
346
  | `variant` | enum: "stacked", "inline", "compact" | ✓ | Layout variant. 'stacked' (default) shows value, label, and support on three vertical lines. 'inline' lays value, label, and support out on a single baseline-aligned row. 'compact' is 2-column — big value on the left, up to two stacked lines on the right with the bottom line sharing baseline with the value; a lone `support` block splits across the two right-column lines. |
@@ -406,9 +358,9 @@ Authored patch for table charts.
406
358
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
407
359
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
408
360
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
409
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
361
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
410
362
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
411
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
363
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
412
364
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
413
365
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
414
366
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -427,9 +379,9 @@ Authored patch for point_map and bubble_map charts.
427
379
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
428
380
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
429
381
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
430
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
382
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
431
383
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
432
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
384
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
433
385
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
434
386
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
435
387
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -457,9 +409,9 @@ Authored patch for map and geoshape charts.
457
409
  | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
458
410
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
459
411
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
460
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
412
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
461
413
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
462
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
414
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
463
415
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
464
416
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
465
417
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -494,9 +446,9 @@ Authored patch for spark_bar charts (compact horizontal bars).
494
446
  | `type` | enum: "spark_bar" | | SparkBar chart type. |
495
447
  | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
496
448
  | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
497
- | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| [LookmlQuery](#lookmlquery) \| [LookmlMergeQuery](#lookmlmergequery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
449
+ | `query` | str \| [SqlQuery](#sqlquery) \| [MetricflowQuery](#metricflowquery) \| [HttpQuery](#httpquery) \| [ValuesQuery](#valuesquery) \| [CompactValuesQuery](#compactvaluesquery) \| [SchemaQuery](#schemaquery) \| QueryRef | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
498
450
  | `link` | str | ✓ | Click-through URL template for drill-down links. |
499
- | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'model.explore' for a LookML source, or 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the LookML catalog / dbt semantic manifest. Mutually exclusive with `query:`. |
451
+ | `model` | str | ✓ | Semantic-layer entry point, two dot-joined names: 'source.semantic_model' for a dbt_profile (MetricFlow) source. Channel fields name the model's fields directly; roles are inferred from the dbt semantic manifest. Mutually exclusive with `query:`. |
500
452
  | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
501
453
  | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
502
454
  | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
@@ -504,14 +456,6 @@ Authored patch for spark_bar charts (compact horizontal bars).
504
456
  | `y` | str \| list[str] | ✓ | Y-axis (value) column name(s). |
505
457
  | `style` | [SparkBarChartStyle](#sparkbarchartstyle) | ✓ | Chart-local style overrides. |
506
458
 
507
- <a id="foreachitem"></a>
508
- ## ForeachItem
509
- Top-level foreach construct in a layout list.
510
-
511
- | Field | Type | Description |
512
- |-------|------|-------------|
513
- | `foreach` | [ForeachConfig](#foreachconfig) | foreach loop configuration with query, as, and items. |
514
-
515
459
  <a id="gridlayout"></a>
516
460
  ## GridLayout
517
461
  Grid layout configuration.
@@ -651,14 +595,14 @@ Authored overlay for BarChartStyle. Bar chart style: chart-level fields + marks
651
595
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
652
596
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
653
597
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
654
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
655
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
656
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
657
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
658
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
598
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
599
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
600
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
601
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
602
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
659
603
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
660
604
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
661
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
605
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
662
606
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
663
607
  | `orientation` | enum: "horizontal", "vertical", "auto" | ✓ | Preferred bar orientation; None uses the renderer default (vertical). |
664
608
  | `stack` | enum: "none", "zero", "normalize", "center" | ✓ | Default stack mode for bar charts; none renders side-by-side columns. |
@@ -746,14 +690,14 @@ Authored overlay for LineChartStyle. Line chart style: chart-level fields + mark
746
690
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
747
691
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
748
692
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
749
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
750
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
751
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
752
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
753
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
693
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
694
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
695
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
696
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
697
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
754
698
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
755
699
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
756
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
700
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
757
701
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
758
702
  | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration for line charts. |
759
703
  | `marks` | [LineChartMarksStyle](#linechartmarksstyle) | ✓ | Line-family mark overrides. Unset fields fall back to [`style.charts.marks`](#chartsstyle). |
@@ -777,14 +721,14 @@ Authored overlay for AreaChartStyle. Area chart style: chart-level fields + mark
777
721
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
778
722
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
779
723
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
780
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
781
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
782
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
783
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
784
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
724
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
725
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
726
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
727
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
728
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
785
729
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
786
730
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
787
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
731
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
788
732
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
789
733
  | `stack` | enum: "none", "zero", "normalize", "center" | ✓ | Default stack mode for area charts: 'none', 'zero', 'normalize', or 'center'. |
790
734
  | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration for area charts. |
@@ -809,14 +753,14 @@ Authored overlay for ScatterChartStyle. Scatter chart style: chart-level fields
809
753
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
810
754
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
811
755
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
812
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
813
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
814
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
815
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
816
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
756
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
757
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
758
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
759
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
760
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
817
761
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
818
762
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
819
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
763
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
820
764
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
821
765
  | `marks` | [ScatterChartMarksStyle](#scatterchartmarksstyle) | ✓ | Scatter-family mark overrides. Unset fields fall back to [`style.charts.marks`](#chartsstyle). |
822
766
 
@@ -839,14 +783,14 @@ Authored overlay for HeatmapChartStyle. Heatmap chart style.
839
783
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
840
784
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
841
785
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
842
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
843
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
844
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
845
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
846
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
786
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
787
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
788
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
789
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
790
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
847
791
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
848
792
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
849
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
793
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
850
794
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
851
795
  | `cell_padding` | float | ✓ | Padding between heatmap cells in pixels. |
852
796
  | `marks` | [HeatmapChartMarksStyle](#heatmapchartmarksstyle) | ✓ | Heatmap-family mark overrides. Unset fields fall back to [`style.charts.marks`](#chartsstyle). |
@@ -1050,23 +994,13 @@ Authored overlay for SparkBarChartStyle. Produced by cascade from theme YAML.
1050
994
  | `border` | [BorderStyle](#borderstyle) | ✓ | Spark_bar outer border style. |
1051
995
  | `subtitle` | [SubtitleStyle](#subtitlestyle) | ✓ | Spark_bar subtitle font-sizing constants. |
1052
996
 
1053
- <a id="foreachconfig"></a>
1054
- ## ForeachConfig
1055
- foreach loop configuration.
1056
-
1057
- | Field | Type | Description |
1058
- |-------|------|-------------|
1059
- | `query` | [ForeachQuery](#foreachquery) | Inline data source providing the rows to iterate over. |
1060
- | `as` | str | Variable name bound to each row (accessible as {{ as.field }}). |
1061
- | `items` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | Layout item templates resolved once per data row. |
1062
-
1063
997
  <a id="griditem"></a>
1064
998
  ## GridItem
1065
999
  Grid layout item with position and span.
1066
1000
 
1067
1001
  | Field | Type | Optional | Description |
1068
1002
  |-------|------|:--------:|-------------|
1069
- | `item` | str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)] | | Chart name or inline chart/face definition to place in this grid cell. |
1003
+ | `item` | str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)] | | Chart name or inline chart/face definition to place in this grid cell. |
1070
1004
  | `col` | int | ✓ | Column position (0-indexed). Auto-placed if omitted. |
1071
1005
  | `row` | int | ✓ | Row position (0-indexed). Auto-placed if omitted. |
1072
1006
  | `col_span` | int | ✓ | Number of columns to span (width in grid units). |
@@ -1086,8 +1020,8 @@ Tab layout item.
1086
1020
  | `description` | str | ✓ | Optional metadata for AI search and context tooltips. |
1087
1021
  | `text` | str | ✓ | Markdown text content shown in this tab. |
1088
1022
  | `style` | [Style](#style) | ✓ | Style patch for this tab's content area. |
1089
- | `rows` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout for this tab's content. |
1090
- | `cols` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| [ForeachItem](#foreachitem) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout for this tab's content. |
1023
+ | `rows` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout for this tab's content. |
1024
+ | `cols` | list[str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout for this tab's content. |
1091
1025
  | `grid` | [GridLayout](#gridlayout) | ✓ | CSS-grid layout for this tab's content. |
1092
1026
  | `tabs` | [TabLayout](#tablayout) | ✓ | Nested tab layout (tabs within tabs). |
1093
1027
 
@@ -1192,10 +1126,10 @@ Authored overlay for ChartsStyle. Registry of all chart-type styles plus shared
1192
1126
  | `default_chart_height` | float | ✓ | Fallback chart height in pixels when aspect-ratio sizing is unavailable. |
1193
1127
  | `default_table_height` | float | ✓ | Placeholder table height in pixels; replaced by data-aware row-count sizing at render time. |
1194
1128
  | `label_usable_ratio` | float | ✓ | Fraction of chart width usable for axis labels (0–1); labels are tilted when full labels exceed this width. |
1195
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Shared axis style applied to all axes before per-axis overrides. |
1196
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | X-axis style overrides applied after the shared axis. Unset fields fall back to style.charts.axis. |
1197
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Y-axis style overrides applied after the shared axis. Unset fields fall back to style.charts.axis. |
1198
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Quantitative axis style overrides applied after axis_x/axis_y. Unset fields fall back to style.charts.axis. |
1129
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Shared axis style applied to all axes before per-axis overrides. |
1130
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | X-axis style overrides applied after the shared axis. Unset fields fall back to style.charts.axis. |
1131
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Y-axis style overrides applied after the shared axis. Unset fields fall back to style.charts.axis. |
1132
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Quantitative axis style overrides applied after axis_x/axis_y. Unset fields fall back to style.charts.axis. |
1199
1133
  | `view` | [ViewStyle](#viewstyle) | ✓ | Vega-Lite view dimensions and border. |
1200
1134
  | `marks` | [GlobalMarksStyle](#globalmarksstyle) | ✓ | Global mark defaults (tier-1 of the marks cascade). |
1201
1135
  | `bar` | [BarChartStyle](#barchartstyle) | ✓ | Bar chart style. |
@@ -1242,7 +1176,6 @@ Authored overlay for VariablesStyle. Variable controls chrome styling.
1242
1176
  | `label` | [VariablesLabelStyle](#variableslabelstyle) | ✓ | Variable label typography. |
1243
1177
  | `value` | [VariablesValueStyle](#variablesvaluestyle) | ✓ | Variable value typography. |
1244
1178
  | `placeholder` | [VariablesPlaceholderStyle](#variablesplaceholderstyle) | ✓ | Style for unselected/hint text in variable inputs. |
1245
- | `line_height` | float | ✓ | Line height for variable control text in pixels. |
1246
1179
  | `padding` | float | ✓ | Outer padding around the variables panel in pixels. |
1247
1180
  | `container_height` | float | ✓ | Height of the variables panel container in pixels. |
1248
1181
  | `container_padding` | float | ✓ | Inner padding of the variables panel container in pixels. |
@@ -1425,58 +1358,92 @@ Authored overlay for ColorStyle. Unified chart color config: static paint, categ
1425
1358
  | `gradient` | [ScaleTargetConfig](#scaletargetconfig) | ✓ | Continuous gradient scale for the color encoding. |
1426
1359
  | `categorical` | [CategoricalColorStyle](#categoricalcolorstyle) | ✓ | Categorical color and single-series palette config. |
1427
1360
 
1428
- <a id="axisstyle"></a>
1429
- ## AxisStyle
1430
- Authored overlay for AxisStyle.
1361
+ <a id="baseaxisstyle"></a>
1362
+ ## BaseAxisStyle
1363
+ Authored overlay for BaseAxisStyle. Universal axis surface — grid/line/ticks/labels/title/scale.
1431
1364
 
1432
1365
  | Field | Type | Optional | Description |
1433
1366
  |-------|------|:--------:|-------------|
1434
- | `grid` | [AxisGridStyle](#axisgridstyle) | ✓ | Grid line style for this axis. |
1435
- | `domain` | [AxisDomainStyle](#axisdomainstyle) | ✓ | Domain line style for this axis. |
1367
+ | `grid` | [BaseAxisGridStyle](#baseaxisgridstyle) | ✓ | Grid line style for this axis. |
1368
+ | `line` | [AxisLineStyle](#axislinestyle) | ✓ | Domain line style for this axis. |
1436
1369
  | `ticks` | [AxisTicksStyle](#axisticksstyle) | ✓ | Tick mark style for this axis. |
1437
- | `label` | [AxisElementStyle](#axiselementstyle) | ✓ | Axis label style. |
1438
- | `title` | [AxisElementStyle](#axiselementstyle) | ✓ | Axis title style. |
1439
- | `position` | enum: "left", "right", "top", "bottom", "auto" | ✓ | Axis position; auto flips y-axis when endpoint labels are present. |
1440
- | `categorical_orient` | str | ✓ | Orientation for categorical y-axis (e.g. 'left'); None skips this VL property. |
1441
- | `mirror` | bool \| [AxisMirrorStyle](#axismirrorstyle) | ✓ | Draw the y-scale on both left and right edges (wide charts). true mirrors the primary axis's label verbatim; an object (format/expr) relabels only the mirrored edge — e.g. a percent-of-total right axis next to an absolute-value left axis — while ticks stay aligned to the single shared scale. Only meaningful on axis_y. |
1442
- | `band_position` | float | ✓ | Band position within the step (0–1); None uses Vega-Lite's default. |
1443
- | `offset` | float | ✓ | Pixel offset of the axis from its default position; None means no offset. |
1444
- | `format` | str | ✓ | Tick value format string; None uses auto-format. |
1445
- | `values` | list[Any] | ✓ | Explicit tick values; None uses Vega-Lite's auto tick values. |
1370
+ | `labels` | [AxisLabelStyle](#axislabelstyle) | ✓ | Axis label style. |
1371
+ | `title` | [AxisTitleStyle](#axistitlestyle) | ✓ | Axis title style. |
1372
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1373
+
1374
+ <a id="axisxstyle"></a>
1375
+ ## AxisXStyle
1376
+ Authored overlay for AxisXStyle. Dimension/category-time axis style. Theme slot: axis_x.
1377
+
1378
+ | Field | Type | Optional | Description |
1379
+ |-------|------|:--------:|-------------|
1380
+ | `grid` | [BaseAxisGridStyle](#baseaxisgridstyle) | ✓ | Grid line style for this axis. |
1381
+ | `line` | [AxisLineStyle](#axislinestyle) | ✓ | Domain line style for this axis. |
1382
+ | `ticks` | [DimensionTicksStyle](#dimensionticksstyle) | ✓ | Dimension axis tick style. |
1383
+ | `labels` | [DimensionLabelStyle](#dimensionlabelstyle) | ✓ | Dimension axis label style. |
1384
+ | `title` | [AxisTitleStyle](#axistitlestyle) | ✓ | Axis title style. |
1385
+ | `scale` | [XScaleStyle](#xscalestyle) | ✓ | X-axis scale overrides including x_reverse; None means no override. |
1386
+ | `position` | enum: "top", "bottom" | ✓ | X-axis position; None uses Vega-Lite's default (bottom). |
1446
1387
  | `time_unit` | enum: "auto", "year", "yearquarter", "yearmonth", "yearweek", "yearmonthdate", "monthofyear", "dayofweek", "dayofmonth", "dayofyear", "hourofday", "none" | ✓ | Time-unit bucketing for temporal x-axes; None or 'auto' auto-detects from data. |
1447
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1448
1388
  | `type` | enum: "auto", "ordinal", "temporal" | ✓ | Scale type for bucketed-time x-axes; None/'auto' infers from time_unit grain. |
1449
1389
  | `fill` | enum: "null", "zero", "linear", "step-after", "step-before", "step-center", "curve" | ✓ | Fill for synthesized missing-bucket rows: null, zero, linear, step-after / step-before / step-center (Looker step), or curve (smoothstep). |
1450
1390
  | `fiscal_year_start_month` | int | ✓ | Calendar month (1=Jan..12=Dec) that opens a fiscal year/quarter for year/yearquarter bucketing; theme default 1 is the calendar convention (Q1=Jan-Mar). A non-default value always wins over axis_x.type: temporal for year/yearquarter grains - Vega-Lite's native timeUnit transform has no fiscal-offset concept and would otherwise silently discard the offset. |
1451
1391
 
1452
- <a id="scalestyle"></a>
1453
- ## ScaleStyle
1454
- Authored overlay for ScaleStyle. Scale configuration primitive.
1392
+ <a id="axisystyle"></a>
1393
+ ## AxisYStyle
1394
+ Authored overlay for AxisYStyle. Measure axis style. Theme slot: axis_y.
1395
+
1396
+ | Field | Type | Optional | Description |
1397
+ |-------|------|:--------:|-------------|
1398
+ | `grid` | [MeasureGridStyle](#measuregridstyle) | ✓ | Measure axis grid style (includes zero-baseline override). |
1399
+ | `line` | [AxisLineStyle](#axislinestyle) | ✓ | Domain line style for this axis. |
1400
+ | `ticks` | [AxisTicksStyle](#axisticksstyle) | ✓ | Tick mark style for this axis. |
1401
+ | `labels` | [AxisLabelStyle](#axislabelstyle) | ✓ | Axis label style. |
1402
+ | `title` | [AxisTitleStyle](#axistitlestyle) | ✓ | Axis title style. |
1403
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1404
+ | `position` | enum: "left", "right", "auto" | ✓ | Y-axis position; auto flips when endpoint labels are on the right. |
1405
+ | `mirror` | bool \| [AxisMirrorStyle](#axismirrorstyle) | ✓ | Draw the y-scale on both left and right edges (wide charts). true mirrors the primary axis's label verbatim; an object (format/expr) relabels only the mirrored edge — e.g. a percent-of-total right axis next to an absolute-value left axis — while ticks stay aligned to the single shared scale. Only meaningful on axis_y. |
1406
+
1407
+ <a id="quantitativeaxisstyle"></a>
1408
+ ## QuantitativeAxisStyle
1409
+ Authored overlay for QuantitativeAxisStyle. Scale-type overlay for quantitative axes. Theme slot: axis_quantitative.
1410
+
1411
+ | Field | Type | Optional | Description |
1412
+ |-------|------|:--------:|-------------|
1413
+ | `grid` | [BaseAxisGridStyle](#baseaxisgridstyle) | ✓ | Grid line style for this axis. |
1414
+ | `line` | [AxisLineStyle](#axislinestyle) | ✓ | Domain line style for this axis. |
1415
+ | `ticks` | [AxisTicksStyle](#axisticksstyle) | ✓ | Tick mark style for this axis. |
1416
+ | `labels` | [AxisLabelStyle](#axislabelstyle) | ✓ | Axis label style. |
1417
+ | `title` | [AxisTitleStyle](#axistitlestyle) | ✓ | Axis title style. |
1418
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1419
+
1420
+ <a id="bandaxisstyle"></a>
1421
+ ## BandAxisStyle
1422
+ Authored overlay for BandAxisStyle. Scale-type overlay for band (categorical) axes. Theme slot: axis_band.
1423
+
1424
+ | Field | Type | Optional | Description |
1425
+ |-------|------|:--------:|-------------|
1426
+ | `grid` | [BaseAxisGridStyle](#baseaxisgridstyle) | ✓ | Grid line style for this axis. |
1427
+ | `line` | [AxisLineStyle](#axislinestyle) | ✓ | Domain line style for this axis. |
1428
+ | `ticks` | [AxisTicksStyle](#axisticksstyle) | ✓ | Tick mark style for this axis. |
1429
+ | `labels` | [AxisLabelStyle](#axislabelstyle) | ✓ | Axis label style. |
1430
+ | `title` | [AxisTitleStyle](#axistitlestyle) | ✓ | Axis title style. |
1431
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1432
+ | `band_position` | float | ✓ | Band position within the step (0–1); None uses Vega-Lite's default. |
1433
+
1434
+ <a id="basescalestyle"></a>
1435
+ ## BaseScaleStyle
1436
+ Authored overlay for BaseScaleStyle. Universal + continuous-only scale config.
1455
1437
 
1456
1438
  | Field | Type | Optional | Description |
1457
1439
  |-------|------|:--------:|-------------|
1458
- | `band_padding_inner` | float | ✓ | Inner padding fraction for band scales; None uses Vega-Lite's default. |
1459
- | `band_padding_outer` | float | ✓ | Outer padding fraction for band scales; None uses Vega-Lite's default. |
1460
- | `point_padding` | float | ✓ | Padding fraction for point scales; None uses Vega-Lite's default. |
1461
- | `rect_band_padding_inner` | float | ✓ | Inner padding fraction for rect band scales; None uses Vega-Lite's default. |
1462
1440
  | `round` | bool | ✓ | Round scale outputs to nearest integer; None uses Vega-Lite's default (no rounding). |
1463
- | `zero` | bool \| enum: "auto" | ✓ | Force scale zero-baseline: True/False pins it; "auto" runs the Dataface smart-zero heuristic; None passes through to Vega-Lite. |
1464
1441
  | `clamp` | bool | ✓ | Clamp values to scale domain; None uses Vega-Lite's default (no clamping). |
1465
- | `continuous_padding` | float | ✓ | Padding in pixels for continuous scales; None uses Vega-Lite's default. |
1466
- | `band` | [ScaleBandStyle](#scalebandstyle) | ✓ | Band mark size constraints; None uses Vega-Lite's defaults. |
1467
- | `quantile_count` | int | ✓ | Number of quantile buckets; None uses Vega-Lite's default. |
1468
- | `quantize_count` | int | ✓ | Number of quantize buckets; None uses Vega-Lite's default. |
1469
- | `use_unaggregated_domain` | bool | ✓ | Use unaggregated domain for scale extent; None uses Vega-Lite's default. |
1470
- | `x_reverse` | bool | ✓ | Reverse the x-axis scale direction; None means no reversal. |
1471
- | `type` | enum: "linear", "log", "pow", "sqrt", "symlog", "temporal" | ✓ | Scale type override. 'linear'/'log'/'pow'/'sqrt'/'symlog' pass straight through to Vega-Lite's quantitative scale.type. 'temporal' is a Dataface escape hatch for a cartesian x-axis: it forces a continuous temporal scale instead of the auto-inferred ordinal/nominal bucketed type, which is required before an authored ``domain`` of ISO dates can extend the visible range past the data extent. None lets Dataface/Vega-Lite infer from the field type. |
1472
- | `domain` | list[Any] | ✓ | Explicit [low, high] scale domain; None lets Vega-Lite auto-determine from data. Must have exactly 2 elements — Dataface only wires a continuous range override through to Vega-Lite, not an explicit category enumeration. When ``type: temporal`` is set, both elements must be ISO-8601 date/datetime strings. |
1473
- | `base` | float | ✓ | Log base; only meaningful with type: log. None lets Vega-Lite apply its own default (10). |
1474
- | `exponent` | float | ✓ | Power exponent; only meaningful with type: pow. None uses Vega-Lite's default. |
1475
- | `constant` | float | ✓ | Symlog constant; only meaningful with type: symlog. None uses Vega-Lite's default. |
1476
- | `domain_strategy` | enum: "stable", "auto" | ✓ | How the numeric domain responds to filter-variable changes when no explicit `domain` is authored. 'stable' (the default when None) pins the domain to the chart query's full unfiltered extent — the same value lands at the same pixel across variable changes. 'auto' rescales the domain to the current filtered subset on every variable change. An explicit `domain` always wins over either strategy. |
1477
1442
  | `nice` | bool | ✓ | Round scale domain to nice values; None uses Vega-Lite's default. |
1478
1443
  | `padding` | float | ✓ | Unified scale padding shortcut; dispatches to band, point, or continuous padding per scale type. |
1479
1444
  | `headroom` | float | ✓ | Fractional breathing room at measure-axis edges, exact (never nice-rounded). Zero-anchored axes (bar; line/area/scatter near zero): domain_max = data_max * (1 + headroom). Zoomed axes (line/area/scatter far from zero): both edges expand — domain_max = data_max + headroom * span; domain_min = data_min - headroom * span. None inherits the theme default; 0 disables headroom. Ignored with an explicit `domain` or `stack: normalize`. |
1445
+ | `values` | list[Any] | ✓ | Explicit tick values; None uses Vega-Lite's auto tick values. |
1446
+ | `continuous` | [ScaleContinuousStyle](#scalecontinuousstyle) | ✓ | Continuous-scale overrides (type, domain, zero, log/pow/symlog params); None means no override. |
1480
1447
 
1481
1448
  <a id="datatablestyle"></a>
1482
1449
  ## DataTableStyle
@@ -1887,16 +1854,6 @@ Authored overlay for SparkBarCountStyle. Count-value sub-block for SparkBarChart
1887
1854
  | `visible` | bool | ✓ | Show count/value text next to bars. |
1888
1855
  | `width` | float | ✓ | Reserved width for bar count text in pixels. |
1889
1856
 
1890
- <a id="foreachquery"></a>
1891
- ## ForeachQuery
1892
- Inline data source for compile-time foreach loops.
1893
-
1894
- | Field | Type | Optional | Description |
1895
- |-------|------|:--------:|-------------|
1896
- | `data` | list[dict[str, Any]] | ✓ | Inline row data for compile-time iteration. |
1897
- | `static_data` | list[dict[str, Any]] | ✓ | Alias for data; inline row data for compile-time iteration. |
1898
- | `palette` | str | ✓ | Palette name to iterate its live stops from the palette YAML source of truth (one row per stop: {n: 1-indexed position, hex: sRGB hex}). Accepts the same 'name:steps' / 'name_r' shorthand as palette(). |
1899
-
1900
1857
  <a id="titlewidthoffsetsstyle"></a>
1901
1858
  ## TitleWidthOffsetsStyle
1902
1859
  Authored overlay for TitleWidthOffsetsStyle. Additive level offsets applied to a face/chart title's heading level, by card pixel width.
@@ -2039,14 +1996,14 @@ Authored overlay for HistogramChartStyle. Histogram chart style.
2039
1996
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2040
1997
  | `color` | [ColorStyle](#colorstyle) | ✓ | Chart color: static mark paint, categorical palette, and/or gradient scale. |
2041
1998
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2042
- | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
2043
- | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
2044
- | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
2045
- | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
2046
- | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
1999
+ | `axis` | [BaseAxisStyle](#baseaxisstyle) | ✓ | Override applied to both x and y axes; None inherits the global axis at render. |
2000
+ | `axis_x` | [AxisXStyle](#axisxstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits the global axis_x at render. |
2001
+ | `axis_y` | [AxisYStyle](#axisystyle) | ✓ | Per-chart-type y-axis style overrides; None inherits the global axis_y at render. |
2002
+ | `axis_quantitative` | [QuantitativeAxisStyle](#quantitativeaxisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits the global axis_quantitative at render. |
2003
+ | `axis_band` | [BandAxisStyle](#bandaxisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits the global band axis at render. |
2047
2004
  | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2048
2005
  | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2049
- | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2006
+ | `scale` | [BaseScaleStyle](#basescalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2050
2007
  | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override. Unset fields fall back to [`style.charts.data_table`](#chartsstyle). |
2051
2008
  | `bin_maxbins` | int | ✓ | Maximum number of bins for auto-binning. |
2052
2009
  | `marks` | [HistogramChartMarksStyle](#histogramchartmarksstyle) | ✓ | Histogram-family mark overrides. Unset fields fall back to [`style.charts.marks`](#chartsstyle). |
@@ -2229,9 +2186,9 @@ Authored overlay for CategoricalColorStyle. Categorical palette config: per-seri
2229
2186
  | `palette` | list[str] \| str | ✓ | Categorical color palette: list of stops or a named palette. Expanded to list[str] at validation time. |
2230
2187
  | `single_series_palette` | list[str] \| str | ✓ | Ordered list of single-series mark inks (must be non-empty when set), or a palette name. |
2231
2188
 
2232
- <a id="axisgridstyle"></a>
2233
- ## AxisGridStyle
2234
- Authored overlay for AxisGridStyle.
2189
+ <a id="baseaxisgridstyle"></a>
2190
+ ## BaseAxisGridStyle
2191
+ Authored overlay for BaseAxisGridStyle. Grid line style for all axis variants.
2235
2192
 
2236
2193
  | Field | Type | Optional | Description |
2237
2194
  |-------|------|:--------:|-------------|
@@ -2240,11 +2197,10 @@ Authored overlay for AxisGridStyle.
2240
2197
  | `width` | float | ✓ | Grid line width in pixels; None uses Vega-Lite's default. |
2241
2198
  | `color` | str | ✓ | Grid line color; None uses Vega-Lite's default. |
2242
2199
  | `dash` | list[float] | ✓ | Dash pattern for grid lines; None renders a solid line. |
2243
- | `zero` | [AxisGridZeroStyle](#axisgridzerostyle) | ✓ | Zero-baseline gridline style; None inherits from parent axis. |
2244
2200
 
2245
- <a id="axisdomainstyle"></a>
2246
- ## AxisDomainStyle
2247
- Authored overlay for AxisDomainStyle.
2201
+ <a id="axislinestyle"></a>
2202
+ ## AxisLineStyle
2203
+ Authored overlay for AxisLineStyle. Axis domain/baseline line style. Renamed from ``AxisDomainStyle`` —
2248
2204
 
2249
2205
  | Field | Type | Optional | Description |
2250
2206
  |-------|------|:--------:|-------------|
@@ -2254,21 +2210,21 @@ Authored overlay for AxisDomainStyle.
2254
2210
 
2255
2211
  <a id="axisticksstyle"></a>
2256
2212
  ## AxisTicksStyle
2257
- Authored overlay for AxisTicksStyle.
2213
+ Authored overlay for AxisTicksStyle. Universal tick config. ``step``-anchored cadence needs a named time
2258
2214
 
2259
2215
  | Field | Type | Optional | Description |
2260
2216
  |-------|------|:--------:|-------------|
2261
2217
  | `visible` | bool | ✓ | Show axis ticks; None inherits from parent axis. |
2262
2218
  | `color` | str | ✓ | Tick color; None uses Vega-Lite's default. |
2263
- | `size` | float | ✓ | Tick length in pixels; None uses Vega-Lite's default. |
2219
+ | `length` | float | ✓ | Tick length in pixels; None uses Vega-Lite's default. |
2264
2220
  | `width` | float | ✓ | Tick stroke width in pixels; None uses Vega-Lite's default. |
2221
+ | `offset` | float | ✓ | Pixel offset of ticks from their default position; None means no offset. |
2265
2222
  | `count` | int | ✓ | Target number of axis ticks. On a quantitative axis the renderer computes explicit tickValues so VL emits exactly this many ticks — VL's tickCount is advisory and frequently ignored there. On a temporal axis_x, count is passed through as VL's axis.tickCount, which VL's time-scale tick logic honours as a target. |
2266
- | `interval` | enum: "year", "quarter", "month" | ✓ | Step-anchored tick cadence unit — 'ticks every N &lt;interval&gt;, anchored on multiples of N'. Mutually exclusive with count. Meaningful on a continuous-temporal axis_x only — raises at compile on axis_y, and at render if the x-axis resolves to a non-temporal (ordinal) scale. |
2267
- | `step` | int | ✓ | Step multiple for the interval cadence (e.g. interval: year, step: 5 -&gt; ticks every 5 years). Requires interval to also be set — step alone doesn't name a unit. |
2223
+ | `step` | int | ✓ | Step multiple for a step-anchored tick cadence (e.g. on DimensionTicksStyle: time_unit: year, step: 5 -&gt; ticks every 5 years). Inert on this base class alone — a channel that wants step-anchored cadence adds the unit field (DimensionTicksStyle.time_unit). |
2268
2224
 
2269
- <a id="axiselementstyle"></a>
2270
- ## AxisElementStyle
2271
- Authored overlay for AxisElementStyle. Axis label or title: font + padding + VL-passthrough.
2225
+ <a id="axislabelstyle"></a>
2226
+ ## AxisLabelStyle
2227
+ Authored overlay for AxisLabelStyle. Axis label: font + padding + VL-passthrough.
2272
2228
 
2273
2229
  | Field | Type | Optional | Description |
2274
2230
  |-------|------|:--------:|-------------|
@@ -2277,19 +2233,92 @@ Authored overlay for AxisElementStyle. Axis label or title: font + padding + VL-
2277
2233
  | `max_width` | float | ✓ | Maximum label width in pixels; None uses Vega-Lite's default (180px). |
2278
2234
  | `angle` | float | ✓ | Label rotation angle in degrees; None uses Vega-Lite's default. |
2279
2235
  | `align` | enum: "left", "right", "center", "inward", "outward" | ✓ | Horizontal text alignment of labels. 'left'/'right'/'center' are absolute. 'inward' hugs the plot (own-side: left on a left axis, right on a right axis); 'outward' hugs away from the plot (Vega-Lite's default growth direction). inward/outward are a no-op on an axis with no left/right edge. None uses Vega-Lite's default. |
2280
- | `baseline` | str | ✓ | Vertical text baseline of labels; None uses Vega-Lite's default. |
2281
2236
  | `overlap` | [AxisLabelOverlapConfig](#axislabeloverlapconfig) | ✓ | Label overlap strategy enablement. None inherits from the theme cascade. Set individual bools to enable/disable; the resolver applies them in fixed order skip→tilt. On bucketed temporal axes, skip thins label visibility to a coarser calendar period without changing the axis or label time unit. |
2282
- | `separation` | float | ✓ | Minimum pixel separation between labels; None uses Vega-Lite's default (0px). |
2237
+ | `min_gap` | float | ✓ | Minimum pixel gap between labels; None uses Vega-Lite's default (0px). |
2238
+ | `visible` | bool | ✓ | Show axis labels; None uses Vega-Lite's default (labels shown). |
2239
+ | `expr` | str | ✓ | Custom Vega expression for label text; None uses smart temporal defaults when applicable. |
2240
+ | `bound` | bool \| float | ✓ | Hide labels that overflow the axis range; None uses Vega-Lite's default. |
2241
+ | `flush` | bool \| float | ✓ | Align first/last label flush with the scale range; None uses Vega-Lite's default. |
2242
+ | `offset` | float | ✓ | Pixel offset of the label from its tick anchor; None uses Vega-Lite's default. |
2243
+ | `format` | str | ✓ | Tick value format string; None uses auto-format. |
2244
+
2245
+ <a id="axistitlestyle"></a>
2246
+ ## AxisTitleStyle
2247
+ Authored overlay for AxisTitleStyle. Axis title typography — deliberately thin. A title is one short static
2248
+
2249
+ | Field | Type | Optional | Description |
2250
+ |-------|------|:--------:|-------------|
2251
+ | `font` | [FontStyle](#fontstyle) | ✓ | Axis title font style overrides. Unset fields fall back to [`style.charts.font`](#chartsstyle). |
2252
+ | `padding` | float | ✓ | Padding between axis title and labels in pixels; None uses Vega-Lite's default. |
2253
+ | `angle` | float | ✓ | Title rotation angle in degrees; None uses Vega-Lite's default. |
2254
+ | `align` | enum: "left", "right", "center", "inward", "outward" | ✓ | Horizontal text alignment of the title. 'left'/'right'/'center' are absolute. 'inward'/'outward' resolve against the axis's own left/right edge, same as label.align; a no-op on an axis with no left/right edge. None uses Vega-Lite's default. |
2255
+ | `visible` | bool | ✓ | Show the axis title; None uses Vega-Lite's default (title shown). |
2256
+
2257
+ <a id="dimensionticksstyle"></a>
2258
+ ## DimensionTicksStyle
2259
+ Authored overlay for DimensionTicksStyle. axis_x-only: step-anchored tick cadence needs a named time unit.
2260
+
2261
+ | Field | Type | Optional | Description |
2262
+ |-------|------|:--------:|-------------|
2263
+ | `visible` | bool | ✓ | Show axis ticks; None inherits from parent axis. |
2264
+ | `color` | str | ✓ | Tick color; None uses Vega-Lite's default. |
2265
+ | `length` | float | ✓ | Tick length in pixels; None uses Vega-Lite's default. |
2266
+ | `width` | float | ✓ | Tick stroke width in pixels; None uses Vega-Lite's default. |
2267
+ | `offset` | float | ✓ | Pixel offset of ticks from their default position; None means no offset. |
2268
+ | `count` | int | ✓ | Target number of axis ticks. On a quantitative axis the renderer computes explicit tickValues so VL emits exactly this many ticks — VL's tickCount is advisory and frequently ignored there. On a temporal axis_x, count is passed through as VL's axis.tickCount, which VL's time-scale tick logic honours as a target. |
2269
+ | `step` | int | ✓ | Step multiple for a step-anchored tick cadence (e.g. on DimensionTicksStyle: time_unit: year, step: 5 -&gt; ticks every 5 years). Inert on this base class alone — a channel that wants step-anchored cadence adds the unit field (DimensionTicksStyle.time_unit). |
2270
+ | `time_unit` | enum: "auto", "year", "yearquarter", "yearmonth", "yearweek", "yearmonthdate", "monthofyear", "dayofweek", "dayofmonth", "dayofyear", "hourofday", "none" | ✓ | Step-anchored tick cadence unit; None disables step-anchored ticks. |
2271
+
2272
+ <a id="dimensionlabelstyle"></a>
2273
+ ## DimensionLabelStyle
2274
+ Authored overlay for DimensionLabelStyle. AxisLabelStyle + dimension-axis-only label fields.
2275
+
2276
+ | Field | Type | Optional | Description |
2277
+ |-------|------|:--------:|-------------|
2278
+ | `font` | [FontStyle](#fontstyle) | ✓ | Axis element font style overrides. Unset fields fall back to [`style.charts.font`](#chartsstyle). |
2279
+ | `padding` | float | ✓ | Padding between axis labels and ticks in pixels; None inherits from parent axis. |
2280
+ | `max_width` | float | ✓ | Maximum label width in pixels; None uses Vega-Lite's default (180px). |
2281
+ | `angle` | float | ✓ | Label rotation angle in degrees; None uses Vega-Lite's default. |
2282
+ | `align` | enum: "left", "right", "center", "inward", "outward" | ✓ | Horizontal text alignment of labels. 'left'/'right'/'center' are absolute. 'inward' hugs the plot (own-side: left on a left axis, right on a right axis); 'outward' hugs away from the plot (Vega-Lite's default growth direction). inward/outward are a no-op on an axis with no left/right edge. None uses Vega-Lite's default. |
2283
+ | `overlap` | [AxisLabelOverlapConfig](#axislabeloverlapconfig) | ✓ | Label overlap strategy enablement. None inherits from the theme cascade. Set individual bools to enable/disable; the resolver applies them in fixed order skip→tilt. On bucketed temporal axes, skip thins label visibility to a coarser calendar period without changing the axis or label time unit. |
2284
+ | `min_gap` | float | ✓ | Minimum pixel gap between labels; None uses Vega-Lite's default (0px). |
2283
2285
  | `visible` | bool | ✓ | Show axis labels; None uses Vega-Lite's default (labels shown). |
2284
- | `time_unit` | enum: "auto", "year", "yearquarter", "yearmonth", "yearweek", "yearmonthdate", "monthofyear", "dayofweek", "dayofmonth", "dayofyear", "hourofday", "none" | ✓ | Label cadence for temporal axes; None inherits from the parent axis time_unit. |
2285
2286
  | `expr` | str | ✓ | Custom Vega expression for label text; None uses smart temporal defaults when applicable. |
2286
2287
  | `bound` | bool \| float | ✓ | Hide labels that overflow the axis range; None uses Vega-Lite's default. |
2287
2288
  | `flush` | bool \| float | ✓ | Align first/last label flush with the scale range; None uses Vega-Lite's default. |
2288
2289
  | `offset` | float | ✓ | Pixel offset of the label from its tick anchor; None uses Vega-Lite's default. |
2289
- | `line_height` | float | ✓ | Line height for multi-line labels in pixels; None uses Vega-Lite's default. |
2290
- | `anchor` | enum: "start", "middle", "end" | ✓ | Label anchor position; None uses Vega-Lite's default. |
2290
+ | `format` | str | ✓ | Tick value format string; None uses auto-format. |
2291
+ | `time_unit` | enum: "auto", "year", "yearquarter", "yearmonth", "yearweek", "yearmonthdate", "monthofyear", "dayofweek", "dayofmonth", "dayofyear", "hourofday", "none" | ✓ | Label cadence for temporal axes; None inherits from the parent axis time_unit. |
2291
2292
  | `tilt_increments` | list[float] | ✓ | Descending tilt angles for label overlap resolution on discrete x-axes; None disables tilt. |
2292
- | `values` | list[Any] | ✓ | Dates to keep label text on, chosen from among the axis's ticks (whatever axis_x.values or the auto-fill cadence already produced) — this filters which ticks show text, it does not add or remove ticks. Every tick not in this list keeps its position and gridline but has its label blanked. Set axis_x.values separately to change tick/grid density itself. Temporal x-axes only; None labels every tick as usual. |
2293
+ | `values` | list[Any] | ✓ | Dates to keep label text on, chosen from among the axis's ticks (whatever axis_x.values or the auto-fill cadence already produced) — this filters which ticks show text, it does not add or remove ticks. Every tick not in this list keeps its position and gridline but has its label blanked. Set axis_x.values separately to change tick/grid density itself. Temporal x-axes only; not supported on a horizontal bar's categorical axis. None labels every tick as usual. |
2294
+
2295
+ <a id="xscalestyle"></a>
2296
+ ## XScaleStyle
2297
+ Authored overlay for XScaleStyle. Scale config for axis_x.scale only.
2298
+
2299
+ | Field | Type | Optional | Description |
2300
+ |-------|------|:--------:|-------------|
2301
+ | `round` | bool | ✓ | Round scale outputs to nearest integer; None uses Vega-Lite's default (no rounding). |
2302
+ | `clamp` | bool | ✓ | Clamp values to scale domain; None uses Vega-Lite's default (no clamping). |
2303
+ | `nice` | bool | ✓ | Round scale domain to nice values; None uses Vega-Lite's default. |
2304
+ | `padding` | float | ✓ | Unified scale padding shortcut; dispatches to band, point, or continuous padding per scale type. |
2305
+ | `headroom` | float | ✓ | Fractional breathing room at measure-axis edges, exact (never nice-rounded). Zero-anchored axes (bar; line/area/scatter near zero): domain_max = data_max * (1 + headroom). Zoomed axes (line/area/scatter far from zero): both edges expand — domain_max = data_max + headroom * span; domain_min = data_min - headroom * span. None inherits the theme default; 0 disables headroom. Ignored with an explicit `domain` or `stack: normalize`. |
2306
+ | `values` | list[Any] | ✓ | Explicit tick values; None uses Vega-Lite's auto tick values. |
2307
+ | `continuous` | [ScaleContinuousStyle](#scalecontinuousstyle) | ✓ | Continuous-scale overrides (type, domain, zero, log/pow/symlog params); None means no override. |
2308
+ | `x_reverse` | bool | ✓ | Reverse the x-axis scale direction; None means no reversal. |
2309
+
2310
+ <a id="measuregridstyle"></a>
2311
+ ## MeasureGridStyle
2312
+ Authored overlay for MeasureGridStyle. BaseAxisGridStyle + zero-baseline override for the measure (y) axis.
2313
+
2314
+ | Field | Type | Optional | Description |
2315
+ |-------|------|:--------:|-------------|
2316
+ | `visible` | bool | ✓ | Show grid lines; None inherits from parent axis. |
2317
+ | `opacity` | float | ✓ | Grid line opacity; None uses Vega-Lite's default. |
2318
+ | `width` | float | ✓ | Grid line width in pixels; None uses Vega-Lite's default. |
2319
+ | `color` | str | ✓ | Grid line color; None uses Vega-Lite's default. |
2320
+ | `dash` | list[float] | ✓ | Dash pattern for grid lines; None renders a solid line. |
2321
+ | `zero` | [AxisGridZeroStyle](#axisgridzerostyle) | ✓ | Zero-baseline gridline style; None inherits from parent axis. |
2293
2322
 
2294
2323
  <a id="axismirrorstyle"></a>
2295
2324
  ## AxisMirrorStyle
@@ -2300,14 +2329,19 @@ Per-edge label override for the mirrored ``axis_y.mirror`` ghost axis.
2300
2329
  | `format` | str | ✓ | Tick value format string for the mirrored edge; None reuses the primary axis's format. |
2301
2330
  | `expr` | str | ✓ | Custom Vega expression for the mirrored edge's label text; None reuses the primary axis's label expression. |
2302
2331
 
2303
- <a id="scalebandstyle"></a>
2304
- ## ScaleBandStyle
2305
- Authored overlay for ScaleBandStyle. Band mark size constraints (min/max pixel width for band-scale marks).
2332
+ <a id="scalecontinuousstyle"></a>
2333
+ ## ScaleContinuousStyle
2334
+ Authored overlay for ScaleContinuousStyle. Continuous-scale-only config: type, domain, zero-baseline, log/pow/symlog params.
2306
2335
 
2307
2336
  | Field | Type | Optional | Description |
2308
2337
  |-------|------|:--------:|-------------|
2309
- | `min_size` | float | ✓ | Minimum band mark width in pixels; None uses Vega-Lite's default. |
2310
- | `max_size` | float | ✓ | Maximum band mark width in pixels; None uses Vega-Lite's default. |
2338
+ | `zero` | bool \| enum: "auto" | ✓ | Force scale zero-baseline: True/False pins it; "auto" runs the Dataface smart-zero heuristic; None passes through to Vega-Lite. |
2339
+ | `type` | enum: "linear", "log", "pow", "sqrt", "symlog", "temporal" | ✓ | Scale type override. 'linear'/'log'/'pow'/'sqrt'/'symlog' pass straight through to Vega-Lite's quantitative scale.type. 'temporal' is a Dataface escape hatch for a cartesian x-axis: it forces a continuous temporal scale instead of the auto-inferred ordinal/nominal bucketed type, which is required before an authored ``domain`` of ISO dates can extend the visible range past the data extent. None lets Dataface/Vega-Lite infer from the field type. |
2340
+ | `domain` | list[Any] | ✓ | Explicit [low, high] scale domain; None lets Vega-Lite auto-determine from data. Must have exactly 2 elements — Dataface only wires a continuous range override through to Vega-Lite, not an explicit category enumeration. When ``type: temporal`` is set, both elements must be ISO-8601 date/datetime strings. |
2341
+ | `domain_strategy` | enum: "stable", "auto" | ✓ | How the numeric domain responds to filter-variable changes when no explicit `domain` is authored. 'stable' (the default when None) pins the domain to the chart query's full unfiltered extent — the same value lands at the same pixel across variable changes. 'auto' rescales the domain to the current filtered subset on every variable change. An explicit `domain` always wins over either strategy. |
2342
+ | `log` | [ScaleLogStyle](#scalelogstyle) | ✓ | Log-scale param (base); only meaningful with type: log. |
2343
+ | `pow` | [ScalePowStyle](#scalepowstyle) | ✓ | Power-scale param (exponent); only meaningful with type: pow. |
2344
+ | `symlog` | [ScaleSymlogStyle](#scalesymlogstyle) | ✓ | Symlog-scale param (constant); only meaningful with type: symlog. |
2311
2345
 
2312
2346
  <a id="rulestyle"></a>
2313
2347
  ## RuleStyle
@@ -2684,6 +2718,15 @@ Authored overlay for RangeDefaults.
2684
2718
  | `default_max` | float | ✓ | Default maximum value for range inputs. |
2685
2719
  | `default_step` | float | ✓ | Default step size for range inputs. |
2686
2720
 
2721
+ <a id="axislabeloverlapconfig"></a>
2722
+ ## AxisLabelOverlapConfig
2723
+ Authored overlay for AxisLabelOverlapConfig. Two-bool overlap strategy enablement for x-axis labels.
2724
+
2725
+ | Field | Type | Optional | Description |
2726
+ |-------|------|:--------:|-------------|
2727
+ | `tilt` | bool | ✓ | Enable label tilt strategy; None inherits from parent axis. |
2728
+ | `skip` | bool | ✓ | Enable temporal label thinning; ignored on categorical axes; None inherits from parent axis. |
2729
+
2687
2730
  <a id="axisgridzerostyle"></a>
2688
2731
  ## AxisGridZeroStyle
2689
2732
  Authored overlay for AxisGridZeroStyle. Zero-baseline gridline color and width overrides.
@@ -2693,14 +2736,29 @@ Authored overlay for AxisGridZeroStyle. Zero-baseline gridline color and width o
2693
2736
  | `color` | str | ✓ | Color of the zero-baseline grid line; None inherits from parent axis. |
2694
2737
  | `width` | float | ✓ | Width of the zero-baseline grid line in pixels; None inherits from parent axis. |
2695
2738
 
2696
- <a id="axislabeloverlapconfig"></a>
2697
- ## AxisLabelOverlapConfig
2698
- Authored overlay for AxisLabelOverlapConfig. Two-bool overlap strategy enablement for x-axis labels.
2739
+ <a id="scalelogstyle"></a>
2740
+ ## ScaleLogStyle
2741
+ Authored overlay for ScaleLogStyle. Log-scale-only param.
2699
2742
 
2700
2743
  | Field | Type | Optional | Description |
2701
2744
  |-------|------|:--------:|-------------|
2702
- | `tilt` | bool | ✓ | Enable label tilt strategy; None inherits from parent axis. |
2703
- | `skip` | bool | ✓ | Enable temporal label thinning; ignored on categorical axes; None inherits from parent axis. |
2745
+ | `base` | float | ✓ | Log base; only meaningful with type: log. None lets Vega-Lite apply its own default (10). |
2746
+
2747
+ <a id="scalepowstyle"></a>
2748
+ ## ScalePowStyle
2749
+ Authored overlay for ScalePowStyle. Power-scale-only param.
2750
+
2751
+ | Field | Type | Optional | Description |
2752
+ |-------|------|:--------:|-------------|
2753
+ | `exponent` | float | ✓ | Power exponent; only meaningful with type: pow. None uses Vega-Lite's default. |
2754
+
2755
+ <a id="scalesymlogstyle"></a>
2756
+ ## ScaleSymlogStyle
2757
+ Authored overlay for ScaleSymlogStyle. Symlog-scale-only param.
2758
+
2759
+ | Field | Type | Optional | Description |
2760
+ |-------|------|:--------:|-------------|
2761
+ | `constant` | float | ✓ | Symlog constant; only meaningful with type: symlog. None uses Vega-Lite's default. |
2704
2762
 
2705
2763
  <a id="datatablerowpaddingstyle"></a>
2706
2764
  ## DataTableRowPaddingStyle
@@ -2850,8 +2908,6 @@ Postgres source configuration.
2850
2908
  | `password` | str | | Database password (dbt accepts pass as an input alias). |
2851
2909
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
2852
2910
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
2853
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
2854
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
2855
2911
  | `attribution` | dict[str, str] | ✓ | Cost-attribution pairs sent with every query against this source, e.g. attribution: {team: analytics}. Emitted as BigQuery job labels and as a query comment elsewhere. Keys and values must match BigQuery's label rules ([a-z][a-z0-9_-]{0,62} / [a-z0-9_-]{0,63}). The dft_ prefix and the app key are reserved for the engine's own identity. |
2856
2912
  | `port` | int | ✓ | Database port number. |
2857
2913
  | `schema` | str | ✓ | Default schema for queries. |
@@ -2877,8 +2933,6 @@ Snowflake source configuration.
2877
2933
  | `database` | str | | Snowflake database name. |
2878
2934
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
2879
2935
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
2880
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
2881
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
2882
2936
  | `attribution` | dict[str, str] | ✓ | Cost-attribution pairs sent with every query against this source, e.g. attribution: {team: analytics}. Emitted as BigQuery job labels and as a query comment elsewhere. Keys and values must match BigQuery's label rules ([a-z][a-z0-9_-]{0,62} / [a-z0-9_-]{0,63}). The dft_ prefix and the app key are reserved for the engine's own identity. |
2883
2937
  | `user` | str | ✓ | Snowflake user name. Omit for token-based authentication when supported. |
2884
2938
  | `password` | str | ✓ | Snowflake password. Omit when using OAuth or key-pair auth. |
@@ -2919,8 +2973,6 @@ BigQuery source configuration.
2919
2973
  | `dataset` | str | | BigQuery dataset name (equivalent to schema). |
2920
2974
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
2921
2975
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
2922
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
2923
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
2924
2976
  | `attribution` | dict[str, str] | ✓ | Cost-attribution pairs sent with every query against this source, e.g. attribution: {team: analytics}. Emitted as BigQuery job labels and as a query comment elsewhere. Keys and values must match BigQuery's label rules ([a-z][a-z0-9_-]{0,62} / [a-z0-9_-]{0,63}). The dft_ prefix and the app key are reserved for the engine's own identity. |
2925
2977
  | `keyfile` | str | ✓ | Path to service account JSON key file. |
2926
2978
  | `keyfile_json` | dict[str, str \| int \| float \| bool] | ✓ | Inline service account JSON dict. |
@@ -2962,8 +3014,6 @@ Redshift source configuration.
2962
3014
  | `dbname` | str | | Redshift database name (dbt accepts database as an input alias). |
2963
3015
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
2964
3016
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
2965
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
2966
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
2967
3017
  | `attribution` | dict[str, str] | ✓ | Cost-attribution pairs sent with every query against this source, e.g. attribution: {team: analytics}. Emitted as BigQuery job labels and as a query comment elsewhere. Keys and values must match BigQuery's label rules ([a-z][a-z0-9_-]{0,62} / [a-z0-9_-]{0,63}). The dft_ prefix and the app key are reserved for the engine's own identity. |
2968
3018
  | `port` | int | ✓ | Redshift port number. |
2969
3019
  | `schema` | str | ✓ | Default schema for queries. |
@@ -2981,7 +3031,6 @@ Redshift source configuration.
2981
3031
  | `retries` | int | ✓ | Number of Redshift connection retry attempts. |
2982
3032
  | `retry_all` | bool | ✓ | Whether all connection errors are retried. |
2983
3033
  | `region` | str | ✓ | AWS region containing the Redshift target. |
2984
- | `autocommit` | bool | ✓ | Whether Redshift statements autocommit. |
2985
3034
  | `access_key_id` | str | ✓ | AWS access key identifier. |
2986
3035
  | `secret_access_key` | str | ✓ | AWS secret access key. |
2987
3036
  | `idc_region` | str | ✓ | AWS IAM Identity Center region. |
@@ -3011,8 +3060,6 @@ MySQL source configuration.
3011
3060
  | `password` | str | | MySQL password. |
3012
3061
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3013
3062
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
3014
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
3015
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
3016
3063
  | `attribution` | dict[str, str] | ✓ | Cost-attribution pairs sent with every query against this source, e.g. attribution: {team: analytics}. Emitted as BigQuery job labels and as a query comment elsewhere. Keys and values must match BigQuery's label rules ([a-z][a-z0-9_-]{0,62} / [a-z0-9_-]{0,63}). The dft_ prefix and the app key are reserved for the engine's own identity. |
3017
3064
  | `port` | int | ✓ | MySQL port number. |
3018
3065
  | `schema` | str | ✓ | Default schema for queries. |
@@ -3026,8 +3073,6 @@ DuckDB source configuration.
3026
3073
  | `type` | enum: "duckdb" | | Source type identifier. |
3027
3074
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3028
3075
  | `max_query_duration_seconds` | int | ✓ | Maximum execution time for one query in seconds. Overrides execution.max_query_duration_seconds for this source. |
3029
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
3030
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
3031
3076
  | `path` | str | ✓ | DuckDB file path or ':memory:' for an in-memory database. |
3032
3077
  | `schema` | str | ✓ | Default schema for unqualified table names (sets search_path). |
3033
3078
  | `duckdb_config` | dict[str, str \| int \| float \| bool] | ✓ | DuckDB connection configuration values, such as enable_external_access. |
@@ -3054,8 +3099,6 @@ SQLite source configuration.
3054
3099
  |-------|------|:--------:|-------------|
3055
3100
  | `type` | enum: "sqlite" | | Source type identifier. |
3056
3101
  | `path` | str | | Path to the SQLite database file. |
3057
- | `lookml_path` | str | ✓ | Relative path to the directory of .lkml files backing this source's models. |
3058
- | `models` | dict[str, [LookMLModelConfig](#lookmlmodelconfig)] | ✓ | Named LookML model collections nested under this source. |
3059
3102
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3060
3103
 
3061
3104
  <a id="csvsourceconfig"></a>
@@ -3065,7 +3108,7 @@ CSV file source configuration.
3065
3108
  | Field | Type | Optional | Description |
3066
3109
  |-------|------|:--------:|-------------|
3067
3110
  | `type` | enum: "csv" | | Source type identifier. |
3068
- | `files` | dict[str, str] | | Mapping of table_name → file path. Each key is the SQL table name; the value is the path relative to the project root. Required and must not be empty. |
3111
+ | `files` | dict[str, str] | | Mapping of table_name → relative path or glob pattern. Each key is the SQL table name. The value is a path relative to the project root, or a glob pattern using ``*`` (matches within a directory) and ``?`` (matches one character). A glob must match at least one file; all matched files must share the same column schema and are concatenated into one table. The fan-out limit is ``execution.max_glob_file_count`` in ``dataface.yml`` (default 1000). Required and must not be empty. |
3069
3112
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3070
3113
  | `delimiter` | str | ✓ | Field delimiter character. |
3071
3114
  | `encoding` | str | ✓ | File encoding. |
@@ -3077,7 +3120,7 @@ Parquet file source configuration.
3077
3120
  | Field | Type | Optional | Description |
3078
3121
  |-------|------|:--------:|-------------|
3079
3122
  | `type` | enum: "parquet" | | Source type identifier. |
3080
- | `files` | dict[str, str] | | Mapping of table_name → file path. Each key is the SQL table name; the value is the path relative to the project root. Required and must not be empty. |
3123
+ | `files` | dict[str, str] | | Mapping of table_name → relative path or glob pattern. Each key is the SQL table name. The value is a path relative to the project root, or a glob pattern using ``*`` (matches within a directory) and ``?`` (matches one character). A glob must match at least one file; all matched files must share the same column schema and are concatenated into one table. The fan-out limit is ``execution.max_glob_file_count`` in ``dataface.yml`` (default 1000). Required and must not be empty. |
3081
3124
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3082
3125
 
3083
3126
  <a id="jsonsourceconfig"></a>
@@ -3087,8 +3130,9 @@ JSON file source configuration.
3087
3130
  | Field | Type | Optional | Description |
3088
3131
  |-------|------|:--------:|-------------|
3089
3132
  | `type` | enum: "json" | | Source type identifier. |
3090
- | `files` | dict[str, str] | | Mapping of table_name → file path. Each key is the SQL table name; the value is the path relative to the project root. Required and must not be empty. |
3133
+ | `files` | dict[str, str] | | Mapping of table_name → relative path or glob pattern. Each key is the SQL table name. The value is a path relative to the project root, or a glob pattern using ``*`` (matches within a directory) and ``?`` (matches one character). A glob must match at least one file and all matched files are concatenated into one table. The fan-out limit is ``execution.max_glob_file_count`` in ``dataface.yml`` (default 1000). Required and must not be empty. |
3091
3134
  | `cache` | [Cache](#cache) | ✓ | Cache policy default for every query against this source, e.g. cache: 1h — queries inherit it and may refine it; cache: false opts them out. |
3135
+ | `union_by_name` | bool | ✓ | When True, rows from different files in a glob set are unified by column name: columns absent in a particular file are filled with NULL. When False (default), all files in a glob set must share the same column schema — a mismatch raises an error. |
3092
3136
 
3093
3137
  <a id="httpsourceconfig"></a>
3094
3138
  ## HttpSourceConfig
@@ -3137,13 +3181,3 @@ Cross-file chart reference. Bare string is coerced automatically.
3137
3181
  | Field | Type | Description |
3138
3182
  |-------|------|-------------|
3139
3183
  | `ref` | str | Reference path: '&lt;file&gt;.charts.&lt;name&gt;'. May start with one or more '../' segments to reach a sibling directory. A bare string value is coerced automatically. |
3140
-
3141
- <a id="lookmlmodelconfig"></a>
3142
- ## LookMLModelConfig
3143
- One LookML model: a named collection of explores under a warehouse source.
3144
-
3145
- | Field | Type | Optional | Description |
3146
- |-------|------|:--------:|-------------|
3147
- | `lkml` | str | ✓ | Path to a specific .lkml model file, relative to the project root. |
3148
- | `group_label` | str | ✓ | LookML group_label selecting this model's explores. Not yet enforced at compile time. |
3149
- | `explores` | list[str] | ✓ | Explicit list of explore names in this model. |