dataface 0.1.2__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 (455) hide show
  1. d3_format/__init__.py +14 -0
  2. d3_format/errors.py +19 -0
  3. d3_format/format.py +551 -0
  4. d3_format/spec.py +159 -0
  5. dataface/DATAFACE_SYNTAX.md +1135 -0
  6. dataface/__init__.py +93 -0
  7. dataface/_docs_site.py +20 -0
  8. dataface/_install_hint.py +26 -0
  9. dataface/agent_api/__init__.py +79 -0
  10. dataface/agent_api/_init_templates/__init__.py +0 -0
  11. dataface/agent_api/_init_templates/agents_dft_snippet.md +26 -0
  12. dataface/agent_api/_init_templates/dataface.yml +15 -0
  13. dataface/agent_api/_init_templates/faces-dataface.yml +144 -0
  14. dataface/agent_api/_init_templates/index.md +24 -0
  15. dataface/agent_api/_paths.py +118 -0
  16. dataface/agent_api/_project_agents_md.py +43 -0
  17. dataface/agent_api/_session_store.py +486 -0
  18. dataface/agent_api/_state.py +28 -0
  19. dataface/agent_api/chat.py +221 -0
  20. dataface/agent_api/dashboards.py +257 -0
  21. dataface/agent_api/describe.py +366 -0
  22. dataface/agent_api/describe_query.py +120 -0
  23. dataface/agent_api/docs/__init__.py +25 -0
  24. dataface/agent_api/docs/_loader.py +292 -0
  25. dataface/agent_api/docs/yaml-reference.md +2757 -0
  26. dataface/agent_api/file_refs.py +118 -0
  27. dataface/agent_api/init.py +126 -0
  28. dataface/agent_api/inspect.py +128 -0
  29. dataface/agent_api/mcp_install.py +170 -0
  30. dataface/agent_api/query.py +274 -0
  31. dataface/agent_api/schema.py +658 -0
  32. dataface/agent_api/schema_search.py +284 -0
  33. dataface/agent_api/search.py +270 -0
  34. dataface/agent_api/skill_install.py +141 -0
  35. dataface/agent_api/skill_render.py +90 -0
  36. dataface/agent_api/skills.py +293 -0
  37. dataface/agent_api/surface_aliases.yaml +128 -0
  38. dataface/agent_api/validate.py +175 -0
  39. dataface/agent_api/validate_query.py +84 -0
  40. dataface/ai/__init__.py +39 -0
  41. dataface/ai/agent.py +139 -0
  42. dataface/ai/context.py +45 -0
  43. dataface/ai/events.py +62 -0
  44. dataface/ai/external_mcp.py +610 -0
  45. dataface/ai/generate_sql.py +96 -0
  46. dataface/ai/llm.py +403 -0
  47. dataface/ai/mcp/__init__.py +51 -0
  48. dataface/ai/mcp/server.py +289 -0
  49. dataface/ai/memories.py +85 -0
  50. dataface/ai/prompts.py +177 -0
  51. dataface/ai/schema_context.py +138 -0
  52. dataface/ai/skills/before-after-comparison/SKILL.md +102 -0
  53. dataface/ai/skills/before-after-comparison/examples/before-after-comparison.yml +24 -0
  54. dataface/ai/skills/dashboard-build/SKILL.md +212 -0
  55. dataface/ai/skills/dashboard-build/examples/_smoke.yml +15 -0
  56. dataface/ai/skills/dashboard-design/SKILL.md +182 -0
  57. dataface/ai/skills/dashboard-review/SKILL.md +113 -0
  58. dataface/ai/skills/dashboard-structural-review/SKILL.md +173 -0
  59. dataface/ai/skills/dashboard-visual-review/SKILL.md +139 -0
  60. dataface/ai/skills/dataface-mcp-setup/SKILL.md +177 -0
  61. dataface/ai/skills/dataface-troubleshooting/SKILL.md +225 -0
  62. dataface/ai/skills/drill-down-link/SKILL.md +112 -0
  63. dataface/ai/skills/drill-down-link/examples/drill-down-link.yml +27 -0
  64. dataface/ai/skills/faceted-small-multiples/SKILL.md +116 -0
  65. dataface/ai/skills/faceted-small-multiples/examples/faceted-small-multiples.yml +33 -0
  66. dataface/ai/skills/filter-bar-with-variables/SKILL.md +105 -0
  67. dataface/ai/skills/filter-bar-with-variables/examples/filter-bar-with-variables.yml +49 -0
  68. dataface/ai/skills/kpi-row/SKILL.md +101 -0
  69. dataface/ai/skills/kpi-row/examples/kpi-row.yml +55 -0
  70. dataface/ai/skills/report-design/SKILL.md +184 -0
  71. dataface/ai/skills/single-metric-bignum/SKILL.md +90 -0
  72. dataface/ai/skills/single-metric-bignum/examples/single-metric-bignum.yml +27 -0
  73. dataface/ai/skills/table-heavy-ops-dashboard/SKILL.md +114 -0
  74. dataface/ai/skills/table-heavy-ops-dashboard/examples/table-heavy-ops-dashboard.yml +48 -0
  75. dataface/ai/skills/time-series-trend/SKILL.md +93 -0
  76. dataface/ai/skills/time-series-trend/examples/time-series-trend.yml +26 -0
  77. dataface/ai/skills/top-n-with-detail/SKILL.md +98 -0
  78. dataface/ai/skills/top-n-with-detail/examples/top-n-with-detail.yml +45 -0
  79. dataface/ai/skills/two-by-two-grid-overview/SKILL.md +78 -0
  80. dataface/ai/skills/two-by-two-grid-overview/examples/two-by-two-grid-overview.yml +64 -0
  81. dataface/ai/tool_schemas.py +132 -0
  82. dataface/ai/tools/__init__.py +312 -0
  83. dataface/ai/yaml_utils.py +57 -0
  84. dataface/cli/__init__.py +3 -0
  85. dataface/cli/_console.py +48 -0
  86. dataface/cli/_error_format.py +83 -0
  87. dataface/cli/_extras.py +190 -0
  88. dataface/cli/_json_output.py +8 -0
  89. dataface/cli/_parsing.py +17 -0
  90. dataface/cli/_version_info.py +56 -0
  91. dataface/cli/commands/__init__.py +3 -0
  92. dataface/cli/commands/_agent_input.py +205 -0
  93. dataface/cli/commands/_agent_server.py +115 -0
  94. dataface/cli/commands/chat.py +645 -0
  95. dataface/cli/commands/describe.py +107 -0
  96. dataface/cli/commands/docs.py +131 -0
  97. dataface/cli/commands/extension.py +179 -0
  98. dataface/cli/commands/init.py +240 -0
  99. dataface/cli/commands/inspect.py +94 -0
  100. dataface/cli/commands/mcp_init.py +167 -0
  101. dataface/cli/commands/query.py +386 -0
  102. dataface/cli/commands/render.py +291 -0
  103. dataface/cli/commands/schema.py +411 -0
  104. dataface/cli/commands/search.py +49 -0
  105. dataface/cli/commands/serve.py +114 -0
  106. dataface/cli/commands/skills.py +133 -0
  107. dataface/cli/commands/skills_init.py +161 -0
  108. dataface/cli/commands/validate.py +63 -0
  109. dataface/cli/main.py +1501 -0
  110. dataface/core/__init__.py +75 -0
  111. dataface/core/compile/__init__.py +244 -0
  112. dataface/core/compile/_jinja_helpers.py +78 -0
  113. dataface/core/compile/channel.py +222 -0
  114. dataface/core/compile/chart_focus.py +101 -0
  115. dataface/core/compile/chart_resolved.py +169 -0
  116. dataface/core/compile/chart_type_detection.py +489 -0
  117. dataface/core/compile/chart_update.py +261 -0
  118. dataface/core/compile/colors.py +64 -0
  119. dataface/core/compile/compiler.py +904 -0
  120. dataface/core/compile/config.py +823 -0
  121. dataface/core/compile/custom_chart_types.py +208 -0
  122. dataface/core/compile/data_table_attachment.py +1287 -0
  123. dataface/core/compile/detect.py +110 -0
  124. dataface/core/compile/errors.py +302 -0
  125. dataface/core/compile/filter_injection.py +319 -0
  126. dataface/core/compile/introspection.py +527 -0
  127. dataface/core/compile/jinja.py +511 -0
  128. dataface/core/compile/labels_env.py +52 -0
  129. dataface/core/compile/markdown.py +154 -0
  130. dataface/core/compile/meta.py +388 -0
  131. dataface/core/compile/models/__init__.py +0 -0
  132. dataface/core/compile/models/chart/__init__.py +0 -0
  133. dataface/core/compile/models/chart/authored.py +2137 -0
  134. dataface/core/compile/models/chart/compiled.py +398 -0
  135. dataface/core/compile/models/config.py +347 -0
  136. dataface/core/compile/models/face/__init__.py +0 -0
  137. dataface/core/compile/models/face/authored.py +659 -0
  138. dataface/core/compile/models/face/compiled.py +522 -0
  139. dataface/core/compile/models/factories.py +201 -0
  140. dataface/core/compile/models/markers.py +40 -0
  141. dataface/core/compile/models/palette.py +36 -0
  142. dataface/core/compile/models/primitives.py +415 -0
  143. dataface/core/compile/models/query/__init__.py +0 -0
  144. dataface/core/compile/models/query/authored.py +246 -0
  145. dataface/core/compile/models/query/compiled.py +710 -0
  146. dataface/core/compile/models/refs.py +137 -0
  147. dataface/core/compile/models/source.py +611 -0
  148. dataface/core/compile/models/style/__init__.py +0 -0
  149. dataface/core/compile/models/style/authored.py +481 -0
  150. dataface/core/compile/models/style/compiled.py +3399 -0
  151. dataface/core/compile/models/style/merged.py +1682 -0
  152. dataface/core/compile/models/theme.py +362 -0
  153. dataface/core/compile/models/variable/__init__.py +0 -0
  154. dataface/core/compile/models/variable/authored.py +254 -0
  155. dataface/core/compile/models/vega_lite/__init__.py +0 -0
  156. dataface/core/compile/models/vega_lite/config.py +510 -0
  157. dataface/core/compile/models/vega_lite/contracts.py +171 -0
  158. dataface/core/compile/normalize_charts.py +494 -0
  159. dataface/core/compile/normalize_layout.py +1000 -0
  160. dataface/core/compile/normalize_queries.py +297 -0
  161. dataface/core/compile/normalize_variables.py +489 -0
  162. dataface/core/compile/normalizer.py +543 -0
  163. dataface/core/compile/palette.py +1100 -0
  164. dataface/core/compile/parameterized.py +658 -0
  165. dataface/core/compile/parser.py +228 -0
  166. dataface/core/compile/schema.py +20 -0
  167. dataface/core/compile/schema_renderers/__init__.py +0 -0
  168. dataface/core/compile/schema_renderers/json_schema.py +163 -0
  169. dataface/core/compile/schema_renderers/prompt.py +152 -0
  170. dataface/core/compile/schema_renderers/vscode_schema.py +301 -0
  171. dataface/core/compile/sizing.py +2126 -0
  172. dataface/core/compile/sources.py +518 -0
  173. dataface/core/compile/sql_authoring_lint.py +56 -0
  174. dataface/core/compile/style_cascade.py +471 -0
  175. dataface/core/compile/typography.py +299 -0
  176. dataface/core/compile/validator.py +301 -0
  177. dataface/core/compile/variables.py +53 -0
  178. dataface/core/compile/vega_config.py +98 -0
  179. dataface/core/compile/vega_lite/__init__.py +6 -0
  180. dataface/core/compile/vega_lite/validation.py +95 -0
  181. dataface/core/compile/yaml_error_formatter.py +838 -0
  182. dataface/core/connections.py +38 -0
  183. dataface/core/dashboard.py +358 -0
  184. dataface/core/defaults/default_config.yml +101 -0
  185. dataface/core/defaults/palettes/categorical/category-10-dark.yml +32 -0
  186. dataface/core/defaults/palettes/categorical/category-10-light.yml +43 -0
  187. dataface/core/defaults/palettes/categorical/category-10.yml +31 -0
  188. dataface/core/defaults/palettes/categorical/category-6-tonal-blue.yml +22 -0
  189. dataface/core/defaults/palettes/categorical/category-6-tonal-brown.yml +29 -0
  190. dataface/core/defaults/palettes/categorical/category-6-tonal-green.yml +20 -0
  191. dataface/core/defaults/palettes/categorical/category-6-tonal-orange.yml +21 -0
  192. dataface/core/defaults/palettes/categorical/category-6-tonal-purple.yml +20 -0
  193. dataface/core/defaults/palettes/categorical/editorial-10-dark.yml +32 -0
  194. dataface/core/defaults/palettes/categorical/editorial-10.yml +40 -0
  195. dataface/core/defaults/palettes/categorical/hero-6.yml +17 -0
  196. dataface/core/defaults/palettes/categorical/single-blue.yml +11 -0
  197. dataface/core/defaults/palettes/categorical/tableau.yml +20 -0
  198. dataface/core/defaults/palettes/data/xkcd_colors.json +3803 -0
  199. dataface/core/defaults/palettes/diverging/blue-red.yml +25 -0
  200. dataface/core/defaults/palettes/diverging/coolwarm.yml +24 -0
  201. dataface/core/defaults/palettes/diverging/crimson-green.yml +23 -0
  202. dataface/core/defaults/palettes/diverging/orange-teal.yml +23 -0
  203. dataface/core/defaults/palettes/diverging/sunset.yml +24 -0
  204. dataface/core/defaults/palettes/scaffold/dft-creams.yml +38 -0
  205. dataface/core/defaults/palettes/scaffold/dft-grays.yml +53 -0
  206. dataface/core/defaults/palettes/sequential/amber.yml +22 -0
  207. dataface/core/defaults/palettes/sequential/blue.yml +22 -0
  208. dataface/core/defaults/palettes/sequential/brown.yml +22 -0
  209. dataface/core/defaults/palettes/sequential/gray.yml +22 -0
  210. dataface/core/defaults/palettes/sequential/green.yml +22 -0
  211. dataface/core/defaults/palettes/sequential/purple.yml +22 -0
  212. dataface/core/defaults/palettes/sequential/rust.yml +22 -0
  213. dataface/core/defaults/palettes/sequential/teal.yml +22 -0
  214. dataface/core/defaults/palettes/tone/negative.yml +32 -0
  215. dataface/core/defaults/palettes/tone/positive.yml +22 -0
  216. dataface/core/defaults/palettes/tone/warning.yml +22 -0
  217. dataface/core/defaults/themes/_base.yaml +786 -0
  218. dataface/core/defaults/themes/bi.yaml +16 -0
  219. dataface/core/defaults/themes/carbong100.yaml +41 -0
  220. dataface/core/defaults/themes/cream.yaml +122 -0
  221. dataface/core/defaults/themes/dark.yaml +40 -0
  222. dataface/core/defaults/themes/diagnostics-title-angle-extreme.yaml +9 -0
  223. dataface/core/defaults/themes/diagnostics-title-baseline-extreme.yaml +9 -0
  224. dataface/core/defaults/themes/diagnostics-title-baseline.yaml +24 -0
  225. dataface/core/defaults/themes/diagnostics-title-center.yaml +8 -0
  226. dataface/core/defaults/themes/diagnostics-title-color-extreme.yaml +24 -0
  227. dataface/core/defaults/themes/diagnostics-title-font-extreme.yaml +25 -0
  228. dataface/core/defaults/themes/diagnostics-title-left.yaml +8 -0
  229. dataface/core/defaults/themes/diagnostics-title-offset-extreme.yaml +9 -0
  230. dataface/core/defaults/themes/diagnostics-title-size-extreme.yaml +24 -0
  231. dataface/core/defaults/themes/diagnostics-title-weight-extreme.yaml +24 -0
  232. dataface/core/defaults/themes/editorial.yaml +147 -0
  233. dataface/core/defaults/themes/light.yaml +30 -0
  234. dataface/core/defaults/themes/looker.yaml +17 -0
  235. dataface/core/defaults/themes/stark.yaml +134 -0
  236. dataface/core/errors/__init__.py +67 -0
  237. dataface/core/errors/codes_compile.py +56 -0
  238. dataface/core/errors/codes_execute.py +177 -0
  239. dataface/core/errors/codes_render.py +106 -0
  240. dataface/core/errors/codes_unknown.py +15 -0
  241. dataface/core/errors/hints.py +74 -0
  242. dataface/core/errors/registry.py +42 -0
  243. dataface/core/errors/structured.py +92 -0
  244. dataface/core/execute/__init__.py +91 -0
  245. dataface/core/execute/adapters/__init__.py +49 -0
  246. dataface/core/execute/adapters/adapter_registry.py +400 -0
  247. dataface/core/execute/adapters/base.py +245 -0
  248. dataface/core/execute/adapters/csv_adapter.py +239 -0
  249. dataface/core/execute/adapters/dbt_adapter.py +283 -0
  250. dataface/core/execute/adapters/dbt_adapter_factory.py +212 -0
  251. dataface/core/execute/adapters/dbt_macro_loader.py +95 -0
  252. dataface/core/execute/adapters/dbt_utils.py +150 -0
  253. dataface/core/execute/adapters/http_adapter.py +224 -0
  254. dataface/core/execute/adapters/metricflow_adapter.py +94 -0
  255. dataface/core/execute/adapters/schema_resolver_adapter.py +144 -0
  256. dataface/core/execute/adapters/sql_adapter.py +710 -0
  257. dataface/core/execute/adapters/values_adapter.py +58 -0
  258. dataface/core/execute/batch.py +744 -0
  259. dataface/core/execute/cache_backend.py +135 -0
  260. dataface/core/execute/cache_keys.py +66 -0
  261. dataface/core/execute/dbt_jinja.py +21 -0
  262. dataface/core/execute/dialects/__init__.py +121 -0
  263. dataface/core/execute/dialects/athena.py +75 -0
  264. dataface/core/execute/dialects/base.py +302 -0
  265. dataface/core/execute/dialects/bigquery.py +38 -0
  266. dataface/core/execute/dialects/databricks.py +68 -0
  267. dataface/core/execute/dialects/duckdb.py +35 -0
  268. dataface/core/execute/dialects/mysql.py +68 -0
  269. dataface/core/execute/dialects/postgres.py +39 -0
  270. dataface/core/execute/dialects/redshift.py +12 -0
  271. dataface/core/execute/dialects/snowflake.py +51 -0
  272. dataface/core/execute/dialects/sqlserver.py +92 -0
  273. dataface/core/execute/duckdb_cache.py +712 -0
  274. dataface/core/execute/duckdb_config.py +26 -0
  275. dataface/core/execute/errors.py +213 -0
  276. dataface/core/execute/executor.py +1249 -0
  277. dataface/core/execute/parallel.py +162 -0
  278. dataface/core/execute/setup_sql.py +58 -0
  279. dataface/core/execute/source_registry.py +72 -0
  280. dataface/core/execute/source_resolver.py +255 -0
  281. dataface/core/execute/sql_guard.py +387 -0
  282. dataface/core/execute/sql_literals.py +199 -0
  283. dataface/core/fonts.py +52 -0
  284. dataface/core/inspect/__init__.py +32 -0
  285. dataface/core/inspect/cache_factory.py +98 -0
  286. dataface/core/inspect/db_types.py +162 -0
  287. dataface/core/inspect/dbt_schema.py +96 -0
  288. dataface/core/inspect/defaults.yml +37 -0
  289. dataface/core/inspect/fanout_risk.py +109 -0
  290. dataface/core/inspect/manifest_utils.py +77 -0
  291. dataface/core/inspect/partials/categorical.yml +40 -0
  292. dataface/core/inspect/partials/date.yml +40 -0
  293. dataface/core/inspect/partials/numeric.yml +55 -0
  294. dataface/core/inspect/partition_types.py +38 -0
  295. dataface/core/inspect/query_validator.py +975 -0
  296. dataface/core/inspect/renderer.py +354 -0
  297. dataface/core/inspect/resolver.py +808 -0
  298. dataface/core/inspect/search.py +461 -0
  299. dataface/core/inspect/sources/__init__.py +32 -0
  300. dataface/core/inspect/sources/dbt.py +738 -0
  301. dataface/core/inspect/sources/duckdb_utils.py +66 -0
  302. dataface/core/inspect/templates/__init__.py +1 -0
  303. dataface/core/inspect/templates/categorical_column.yml +196 -0
  304. dataface/core/inspect/templates/charts.yml +109 -0
  305. dataface/core/inspect/templates/date_column.yml +248 -0
  306. dataface/core/inspect/templates/model.yml +138 -0
  307. dataface/core/inspect/templates/numeric_column.yml +261 -0
  308. dataface/core/inspect/templates/quality.yml +80 -0
  309. dataface/core/inspect/templates/string_column.yml +263 -0
  310. dataface/core/project_roots.py +165 -0
  311. dataface/core/render/__init__.py +87 -0
  312. dataface/core/render/board_links.py +176 -0
  313. dataface/core/render/chart/__init__.py +27 -0
  314. dataface/core/render/chart/arc_attached_table.py +251 -0
  315. dataface/core/render/chart/artifacts.py +16 -0
  316. dataface/core/render/chart/callout.py +225 -0
  317. dataface/core/render/chart/decisions.py +358 -0
  318. dataface/core/render/chart/geo.py +700 -0
  319. dataface/core/render/chart/kpi.py +916 -0
  320. dataface/core/render/chart/labels.py +76 -0
  321. dataface/core/render/chart/pipeline.py +818 -0
  322. dataface/core/render/chart/presentation.py +36 -0
  323. dataface/core/render/chart/profile.py +3438 -0
  324. dataface/core/render/chart/render_single.py +347 -0
  325. dataface/core/render/chart/renderers.py +193 -0
  326. dataface/core/render/chart/rendering.py +565 -0
  327. dataface/core/render/chart/serialization.py +90 -0
  328. dataface/core/render/chart/spark.py +496 -0
  329. dataface/core/render/chart/spark_bar.py +370 -0
  330. dataface/core/render/chart/spec_builders.py +154 -0
  331. dataface/core/render/chart/standard_renderer.py +2645 -0
  332. dataface/core/render/chart/table.py +2957 -0
  333. dataface/core/render/chart/table_support.py +1452 -0
  334. dataface/core/render/chart/tick_values.py +66 -0
  335. dataface/core/render/chart/time_unit_detect.py +809 -0
  336. dataface/core/render/chart/title_overflow.py +157 -0
  337. dataface/core/render/chart/type_inference.py +122 -0
  338. dataface/core/render/chart/validation.py +99 -0
  339. dataface/core/render/chart/vega_lite.py +125 -0
  340. dataface/core/render/chart/vega_lite_types.py +268 -0
  341. dataface/core/render/chart/vl_field_maps.py +346 -0
  342. dataface/core/render/chart_interactivity.py +24 -0
  343. dataface/core/render/control_registry.py +287 -0
  344. dataface/core/render/converters/__init__.py +24 -0
  345. dataface/core/render/converters/chart.py +276 -0
  346. dataface/core/render/converters/html.py +98 -0
  347. dataface/core/render/converters/pdf.py +40 -0
  348. dataface/core/render/converters/png.py +41 -0
  349. dataface/core/render/errors.py +144 -0
  350. dataface/core/render/face_api.py +160 -0
  351. dataface/core/render/faces.py +1194 -0
  352. dataface/core/render/font_measurement.py +48 -0
  353. dataface/core/render/font_support.py +197 -0
  354. dataface/core/render/fonts/DFTSansTabular-Regular.ttf +0 -0
  355. dataface/core/render/fonts/DFTSansTabular-Regular.woff2 +0 -0
  356. dataface/core/render/fonts/DFTSerifOldstyleProportional-Regular.ttf +0 -0
  357. dataface/core/render/fonts/DFTSerifOldstyleTabular-Regular.ttf +0 -0
  358. dataface/core/render/fonts/InterVariable.ttf +0 -0
  359. dataface/core/render/fonts/InterVariable.woff2 +0 -0
  360. dataface/core/render/fonts/NOTO_COLOR_EMOJI_LICENSE.txt +93 -0
  361. dataface/core/render/fonts/NOTO_EMOJI_LICENSE.txt +93 -0
  362. dataface/core/render/fonts/NotoColorEmoji-Regular.ttf +0 -0
  363. dataface/core/render/fonts/NotoColorEmoji-Regular.woff2 +0 -0
  364. dataface/core/render/fonts/NotoEmoji-Regular.ttf +0 -0
  365. dataface/core/render/fonts/NotoEmoji-Regular.woff2 +0 -0
  366. dataface/core/render/fonts/SOURCE_CODE_PRO_LICENSE.txt +93 -0
  367. dataface/core/render/fonts/SOURCE_SERIF_4_LICENSE.txt +98 -0
  368. dataface/core/render/fonts/SourceCodePro-Regular.ttf +0 -0
  369. dataface/core/render/fonts/SourceSerif4-Regular.ttf +0 -0
  370. dataface/core/render/fonts/_emoji_font_face.css +43 -0
  371. dataface/core/render/fonts/source-serif-4-variable-latin.woff2 +0 -0
  372. dataface/core/render/format_utils.py +329 -0
  373. dataface/core/render/geo_defaults.yml +28 -0
  374. dataface/core/render/json_format.py +146 -0
  375. dataface/core/render/layout_sizing.py +865 -0
  376. dataface/core/render/layouts.py +541 -0
  377. dataface/core/render/markdown_defaults.yml +16 -0
  378. dataface/core/render/missing_vars_prompt.py +79 -0
  379. dataface/core/render/placeholder.py +389 -0
  380. dataface/core/render/render_result.py +14 -0
  381. dataface/core/render/renderer.py +467 -0
  382. dataface/core/render/script_embedding.py +16 -0
  383. dataface/core/render/svg_utils.py +212 -0
  384. dataface/core/render/template_loader.py +69 -0
  385. dataface/core/render/templates/controls/_styles.css +606 -0
  386. dataface/core/render/templates/controls/checkbox.html +16 -0
  387. dataface/core/render/templates/controls/date.html +16 -0
  388. dataface/core/render/templates/controls/number.html +19 -0
  389. dataface/core/render/templates/controls/readonly.html +9 -0
  390. dataface/core/render/templates/controls/select.html +21 -0
  391. dataface/core/render/templates/controls/slider.html +22 -0
  392. dataface/core/render/templates/controls/text.html +16 -0
  393. dataface/core/render/templates/scripts/chart_interactivity.js +191 -0
  394. dataface/core/render/templates/scripts/variables.js +976 -0
  395. dataface/core/render/templates/svg/grid_pattern.svg +3 -0
  396. dataface/core/render/templates/svg/styles.css +51 -0
  397. dataface/core/render/terminal.py +311 -0
  398. dataface/core/render/terminal_charts.py +563 -0
  399. dataface/core/render/terminal_defaults.yml +2 -0
  400. dataface/core/render/terminal_layouts.py +299 -0
  401. dataface/core/render/terminal_text.py +31 -0
  402. dataface/core/render/text/__init__.py +1 -0
  403. dataface/core/render/text/case.py +113 -0
  404. dataface/core/render/text_format.py +129 -0
  405. dataface/core/render/utils.py +106 -0
  406. dataface/core/render/variable_controls.py +946 -0
  407. dataface/core/render/variable_input_refinement.py +140 -0
  408. dataface/core/render/warnings/__init__.py +15 -0
  409. dataface/core/render/warnings/bar_color_1_to_1_with_x.py +80 -0
  410. dataface/core/render/warnings/base.py +44 -0
  411. dataface/core/render/warnings/fanout_risk.py +15 -0
  412. dataface/core/render/warnings/from_query_diagnostic.py +56 -0
  413. dataface/core/render/warnings/missing_join_predicate.py +13 -0
  414. dataface/core/render/warnings/query_parse_error.py +14 -0
  415. dataface/core/render/warnings/query_returned_zero_rows.py +42 -0
  416. dataface/core/render/warnings/reaggregation.py +14 -0
  417. dataface/core/render/warnings/registry.py +45 -0
  418. dataface/core/render/warnings/suppression.py +46 -0
  419. dataface/core/render/warnings/temporal_single_point.py +63 -0
  420. dataface/core/render/warnings/unreferenced_chart.py +15 -0
  421. dataface/core/render/warnings/y_encoding_mostly_null.py +76 -0
  422. dataface/core/render/yaml_format.py +167 -0
  423. dataface/core/resolve_face.py +195 -0
  424. dataface/core/schema/__init__.py +0 -0
  425. dataface/core/schema/guidance.py +151 -0
  426. dataface/core/scoped_paths.py +59 -0
  427. dataface/core/serve/__init__.py +14 -0
  428. dataface/core/serve/bootstrap.py +39 -0
  429. dataface/core/serve/embedded.py +57 -0
  430. dataface/core/serve/port.py +129 -0
  431. dataface/core/serve/server.py +938 -0
  432. dataface/core/serve/templates/__init__.py +0 -0
  433. dataface/core/serve/templates/directory.yml +6 -0
  434. dataface/core/serve/templates/error.html.j2 +217 -0
  435. dataface/core/utils.py +121 -0
  436. dataface/core/validate.py +64 -0
  437. dataface/integrations/__init__.py +0 -0
  438. dataface/integrations/highlighting.py +351 -0
  439. dataface/integrations/markdown.py +537 -0
  440. dataface/py.typed +0 -0
  441. dataface-0.1.2.dist-info/METADATA +375 -0
  442. dataface-0.1.2.dist-info/RECORD +455 -0
  443. dataface-0.1.2.dist-info/WHEEL +4 -0
  444. dataface-0.1.2.dist-info/entry_points.txt +2 -0
  445. dataface-0.1.2.dist-info/licenses/LICENSE +202 -0
  446. mdsvg/__init__.py +168 -0
  447. mdsvg/fonts.py +656 -0
  448. mdsvg/images.py +299 -0
  449. mdsvg/parser.py +629 -0
  450. mdsvg/playground.py +284 -0
  451. mdsvg/py.typed +2 -0
  452. mdsvg/renderer.py +1623 -0
  453. mdsvg/style.py +355 -0
  454. mdsvg/types.py +200 -0
  455. mdsvg/utils.py +86 -0
@@ -0,0 +1,2757 @@
1
+ # Dataface YAML Schema Reference
2
+
3
+ <a id="face"></a>
4
+ ## Face
5
+ AuthoredFace (dataface) definition from YAML.
6
+
7
+ | Field | Type | Optional | Description |
8
+ |-------|------|:--------:|-------------|
9
+ | `title` | str | ✓ | Dashboard title displayed at the top. |
10
+ | `description` | str | ✓ | Description text for the dashboard. |
11
+ | `tags` | list[str] | ✓ | Tags for categorization and search. |
12
+ | `docs` | str | ✓ | Relative path under the docs site for the canonical doc page that explains this face. Surfaced as a 'Docs →' link in the playground gallery when DFT_DOCS_URL is set. |
13
+ | `text` | str | ✓ | Markdown text content for text-only sections. |
14
+ | `sources` | [SourcesSection](#sourcessection) | ✓ | Database source configuration. Use 'default:' to set the default source for all queries. |
15
+ | `source` | str | ✓ | Default source name shorthand (equivalent to sources.default). Sets the connection for all queries. |
16
+ | `variables` | dict[str, [Variable](#variable) \| VariableRef] | ✓ | Variable definitions for dynamic filtering and UI controls. |
17
+ | `queries` | dict[str, [Query](#query) \| QueryRef] | ✓ | Named query definitions (SQL, CSV, MetricFlow, HTTP, etc.). |
18
+ | `charts` | dict[str, [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart) \| ChartRef] | ✓ | Named chart definitions referenced in the layout. |
19
+ | `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) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout: list of chart names or inline chart/face definitions. |
20
+ | `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) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout: list of chart names or inline chart/face definitions. |
21
+ | `grid` | [GridLayout](#gridlayout) | ✓ | CSS-grid style layout with explicit row/column placement. |
22
+ | `tabs` | [TabLayout](#tablayout) | ✓ | Tabbed navigation layout where each tab contains its own layout. |
23
+ | `card_gap` | bool | ✓ | When True, adds gap between cards. Default: cards are edge-to-edge (0 gap). |
24
+ | `chart_focus` | str | ✓ | Render only this named chart with its dependent variables (useful for embedding or SVG export). |
25
+ | `details` | [FaceDetails](#facedetails) | ✓ | Collapsible section metadata. String shorthand: details: 'text' → FaceDetails(summary='text'). Block form: details: {summary: ..., expanded_title: ..., expanded: false}. |
26
+ | `id` | str | ✓ | Explicit ID for this face. Auto-generated from filename if omitted. |
27
+ | `style` | [Style](#style) | ✓ | Style patch (background, padding, border, etc.). Background and semantic color tokens (accent, muted) cascade to nested child faces. |
28
+ | `width` | str \| int | ✓ | Width when nested (e.g., '50%', '400px', or an integer in pixels). |
29
+ | `height` | str \| int | ✓ | Height when nested (e.g., '300px' or an integer in pixels). |
30
+ | `visible` | bool \| str \| [SingleRowBoolProbe](#singlerowboolprobe) | ✓ | Controls whether this layout item is rendered. Accepts a bool, variable name, Jinja expression, or {query, column} probe. |
31
+ | `theme` | str | ✓ | Theme name (e.g., 'editorial', 'cream', 'stark'). |
32
+
33
+ <a id="sourcessection"></a>
34
+ ## SourcesSection
35
+ Sources section for faces.
36
+
37
+ | Field | Type | Optional | Description |
38
+ |-------|------|:--------:|-------------|
39
+ | `default` | str | ✓ | Default source name used for all queries that don't specify a source. |
40
+ | `<name>` | [PostgresSourceConfig](#postgressourceconfig) \| [SnowflakeSourceConfig](#snowflakesourceconfig) \| [BigQuerySourceConfig](#bigquerysourceconfig) \| [RedshiftSourceConfig](#redshiftsourceconfig) \| [MySQLSourceConfig](#mysqlsourceconfig) \| [DuckDBSourceConfig](#duckdbsourceconfig) \| [CsvSourceConfig](#csvsourceconfig) \| [ParquetSourceConfig](#parquetsourceconfig) \| [JsonSourceConfig](#jsonsourceconfig) \| [HttpSourceConfig](#httpsourceconfig) \| [DbtProfileSourceConfig](#dbtprofilesourceconfig) | ✓ | Additional named entry. |
41
+
42
+ <a id="variable"></a>
43
+ ## Variable
44
+ Variable definition from YAML.
45
+
46
+ | Field | Type | Optional | Description |
47
+ |-------|------|:--------:|-------------|
48
+ | `input` | enum: "auto", "select", "multiselect", "input", "text", "number", "textarea", "slider", "range", "date", "datepicker", "daterange", "checkbox", "radio" | ✓ | UI control type (select, multiselect, slider, daterange, etc.). 'auto' detects from options. |
49
+ | `label` | str | ✓ | Display label shown above the input control. |
50
+ | `description` | str | ✓ | Help text shown below the input control. |
51
+ | `default` | Any | ✓ | Default value used when no URL param is set. |
52
+ | `placeholder` | str | ✓ | Placeholder text shown in the input when empty. |
53
+ | `required` | bool | ✓ | When True, a value must be provided before queries execute. |
54
+ | `allow_null` | bool | ✓ | When True, 'null' is a valid selection (useful for optional filters). |
55
+ | `visible` | bool | ✓ | When False, the variable is not rendered in the UI but can still be set via URL params. |
56
+ | `disabled` | bool \| str \| [SingleRowBoolProbe](#singlerowboolprobe) | ✓ | Disable 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. Absent variable in a string expression raises (use a default). |
57
+ | `column` | str | ✓ | Column name in the query result to use as option values. |
58
+ | `query` | str \| dict[str, Any] | ✓ | Query name or inline query definition for populating options. |
59
+ | `dimension` | str | ✓ | MetricFlow dimension name for populating options. |
60
+ | `measure` | str | ✓ | MetricFlow measure name for populating options. |
61
+ | `model` | str | ✓ | dbt model name for populating options. |
62
+ | `options` | [VariableOptions](#variableoptions) | ✓ | Static or query-driven option list configuration. |
63
+ | `data_type` | str | ✓ | Upstream data-type hint preserved through migrations (e.g. 'string', 'number'). Informational; not currently consumed at compile time. |
64
+ | `min` | int \| float | ✓ | Minimum value for slider/range inputs. |
65
+ | `max` | int \| float | ✓ | Maximum value for slider/range inputs. |
66
+ | `step` | int \| float | ✓ | Step size for slider/range inputs. |
67
+ | `operator` | str | ✓ | SQL operator used when generating filter expressions (e.g., '=', 'IN', 'LIKE'). |
68
+
69
+ <a id="query"></a>
70
+ ## Query
71
+ AuthoredQuery definition from YAML.
72
+
73
+ | Field | Type | Optional | Description |
74
+ |-------|------|:--------:|-------------|
75
+ | `type` | enum: "sql", "metricflow", "dbt_model", "http", "csv", "values", "schema_resolver" | ✓ | Query adapter type. Defaults to 'sql'. Options: sql, metricflow, dbt_model, http, csv, values, schema_resolver. |
76
+ | `source` | str \| dict[str, Any] | ✓ | Database source reference (name string) or inline source config dict. |
77
+ | `target` | str | ✓ | dbt target name for dbt_model queries (defaults to 'dev'). |
78
+ | `sql` | str | ✓ | SQL query string. Supports Jinja2 templates referencing variables. |
79
+ | `setup_sql` | str | ✓ | Non-nestable SQL preamble executed before the main query (e.g., CREATE TEMP FUNCTION). |
80
+ | `metrics` | list[str] | ✓ | MetricFlow metric names to query. |
81
+ | `dimensions` | list[str] | ✓ | MetricFlow dimensions to include in the result. |
82
+ | `time_grain` | enum: "day", "week", "month", "quarter", "year" | ✓ | MetricFlow time grain for time-series dimensions (day, week, month, quarter, year). |
83
+ | `model` | str | ✓ | dbt model name to query directly. |
84
+ | `columns` | list[str] | ✓ | Column subset to select from the dbt model. |
85
+ | `url` | str | ✓ | HTTP endpoint URL for REST API queries. |
86
+ | `method` | enum: "GET", "POST", "PUT", "DELETE", "PATCH" | ✓ | HTTP method for REST API queries (GET, POST, PUT, DELETE, PATCH). |
87
+ | `headers` | dict[str, str] | ✓ | HTTP request headers for REST API queries. |
88
+ | `params` | dict[str, Any] | ✓ | HTTP query string parameters for REST API queries. |
89
+ | `body` | dict[str, Any] \| str | ✓ | HTTP request body for POST/PUT queries. |
90
+ | `json_path` | str | ✓ | JSONPath expression to extract tabular data from HTTP response (http queries only). |
91
+ | `file` | str | ✓ | Path to a CSV file for csv-type queries. |
92
+ | `filter` | dict[str, Any] | ✓ | Row-level filter applied to CSV or values data. |
93
+ | `delimiter` | str | ✓ | Column delimiter for CSV queries. Default: comma (','). |
94
+ | `encoding` | str | ✓ | File encoding for CSV queries. Default: UTF-8. |
95
+ | `schema` | str | ✓ | Schema name for schema_resolver queries (YAML key: schema). |
96
+ | `table` | str | ✓ | Table name for schema_resolver queries. |
97
+ | `column` | str | ✓ | Column name for schema_resolver queries. |
98
+ | `rows` | list[dict[str, Any]] | ✓ | Inline data rows for values-type queries (list of row dicts). |
99
+ | `values` | list[list[Any]] | ✓ | Inline column-oriented data for values-type queries (list of lists). |
100
+ | `description` | str | ✓ | Human-readable description of the query. Used by AI search and tooling. |
101
+ | `filters` | dict[str, Any] | ✓ | Jinja2 filter expressions applied to query results. |
102
+ | `limit` | int | ✓ | Maximum number of rows returned. |
103
+ | `pivot` | [Pivot](#pivot) | ✓ | Cross-tab pivot hint: transforms long-form SQL output into a wide table at render time (table consumers only). Does not affect SQL execution. |
104
+ | `ignore` | list[str] | ✓ | Diagnostic codes to suppress for this query (e.g., ['fanout_risk', 'reaggregation']). |
105
+
106
+ <a id="barchart"></a>
107
+ ## BarChart
108
+ Authored patch for bar and histogram charts.
109
+
110
+ | Field | Type | Optional | Description |
111
+ |-------|------|:--------:|-------------|
112
+ | `type` | enum: "bar", "histogram" | | Bar or histogram chart type. |
113
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
114
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
115
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
116
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
117
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
118
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
119
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
120
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
121
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
122
+ | `x` | str | ✓ | X-axis field name from the query result. |
123
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
124
+ | `x_label` | str | ✓ | Custom label for the X axis. |
125
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
126
+ | `color` | str | ✓ | Color data channel: bare field name only. |
127
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
128
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
129
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
130
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
131
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
132
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
133
+ | `size` | str | ✓ | Field used to size-encode data points (quantitative). |
134
+ | `shape` | str | ✓ | Field used to shape-encode data points (categorical). |
135
+ | `style` | [BarChartStyle](#barchartstyle) | ✓ | Chart-local style overrides. |
136
+
137
+ <a id="linechart"></a>
138
+ ## LineChart
139
+ Authored patch for line charts.
140
+
141
+ | Field | Type | Optional | Description |
142
+ |-------|------|:--------:|-------------|
143
+ | `type` | enum: "line" | | Line chart type. |
144
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
145
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
146
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
147
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
148
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
149
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
150
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
151
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
152
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
153
+ | `x` | str | ✓ | X-axis field name from the query result. |
154
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
155
+ | `x_label` | str | ✓ | Custom label for the X axis. |
156
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
157
+ | `color` | str | ✓ | Color data channel: bare field name only. |
158
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
159
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
160
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
161
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
162
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
163
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
164
+ | `style` | [LineChartStyle](#linechartstyle) | ✓ | Chart-local style overrides. |
165
+
166
+ <a id="areachart"></a>
167
+ ## AreaChart
168
+ Authored patch for area charts.
169
+
170
+ | Field | Type | Optional | Description |
171
+ |-------|------|:--------:|-------------|
172
+ | `type` | enum: "area" | | Area chart type. |
173
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
174
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
175
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
176
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
177
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
178
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
179
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
180
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
181
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
182
+ | `x` | str | ✓ | X-axis field name from the query result. |
183
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
184
+ | `x_label` | str | ✓ | Custom label for the X axis. |
185
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
186
+ | `color` | str | ✓ | Color data channel: bare field name only. |
187
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
188
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
189
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
190
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
191
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
192
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
193
+ | `size` | str | ✓ | Field used to size-encode data points (quantitative). |
194
+ | `shape` | str | ✓ | Field used to shape-encode data points (categorical). |
195
+ | `style` | [AreaChartStyle](#areachartstyle) | ✓ | Chart-local style overrides. |
196
+
197
+ <a id="scatterchart"></a>
198
+ ## ScatterChart
199
+ Authored patch for scatter charts.
200
+
201
+ | Field | Type | Optional | Description |
202
+ |-------|------|:--------:|-------------|
203
+ | `type` | enum: "scatter" | | Scatter chart type. |
204
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
205
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
206
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
207
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
208
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
209
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
210
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
211
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
212
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
213
+ | `x` | str | ✓ | X-axis field name from the query result. |
214
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
215
+ | `x_label` | str | ✓ | Custom label for the X axis. |
216
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
217
+ | `color` | str | ✓ | Color data channel: bare field name only. |
218
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
219
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
220
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
221
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
222
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
223
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
224
+ | `size` | str | ✓ | Field used to size-encode data points (quantitative). |
225
+ | `shape` | str | ✓ | Field used to shape-encode data points (categorical). |
226
+ | `style` | [ScatterChartStyle](#scatterchartstyle) | ✓ | Chart-local style overrides. |
227
+
228
+ <a id="heatmapchart"></a>
229
+ ## HeatmapChart
230
+ Authored patch for heatmap charts.
231
+
232
+ | Field | Type | Optional | Description |
233
+ |-------|------|:--------:|-------------|
234
+ | `type` | enum: "heatmap" | | Heatmap chart type. |
235
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
236
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
237
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
238
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
239
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
240
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
241
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
242
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
243
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
244
+ | `x` | str | ✓ | X-axis field name from the query result. |
245
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
246
+ | `x_label` | str | ✓ | Custom label for the X axis. |
247
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
248
+ | `color` | str | ✓ | Color data channel: bare field name only. |
249
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
250
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
251
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
252
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
253
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
254
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
255
+ | `size` | str | ✓ | Field used to size-encode data points (quantitative). |
256
+ | `shape` | str | ✓ | Field used to shape-encode data points (categorical). |
257
+ | `style` | [HeatmapChartStyle](#heatmapchartstyle) | ✓ | Chart-local style overrides. |
258
+
259
+ <a id="piechart"></a>
260
+ ## PieChart
261
+ Authored patch for pie and donut charts.
262
+
263
+ | Field | Type | Optional | Description |
264
+ |-------|------|:--------:|-------------|
265
+ | `type` | enum: "pie", "donut" | | Pie or donut chart type. |
266
+ | `theta` | str | | Field for angular encoding in pie (arc) charts. |
267
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
268
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
269
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
270
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
271
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
272
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
273
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
274
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
275
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
276
+ | `color` | str | ✓ | Color data channel: bare field name only. |
277
+ | `total` | [ChartTotal](#charttotal) | ✓ | Donut center total. |
278
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
279
+ | `style` | [PieChartStyle](#piechartstyle) | ✓ | Chart-local style overrides. |
280
+
281
+ <a id="kpichart"></a>
282
+ ## KpiChart
283
+ Authored patch for KPI (key performance indicator) charts.
284
+
285
+ | Field | Type | Optional | Description |
286
+ |-------|------|:--------:|-------------|
287
+ | `type` | enum: "kpi" | | KPI chart type. |
288
+ | `value` | str | | Column reference (string column name) for the headline number/text. |
289
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
290
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
291
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
292
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
293
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
294
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
295
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
296
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
297
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
298
+ | `label` | str | ✓ | KPI label rendered above the headline value. |
299
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format applied to the headline value: D3 format string, preset name, or FormatConfig object. |
300
+ | `support` | [KpiSupportConfig](#kpisupportconfig) | ✓ | Optional support line beneath the KPI value. |
301
+ | `style` | [KpiChartStyle](#kpichartstyle) | ✓ | Chart-local style overrides. |
302
+
303
+ <a id="tablechart"></a>
304
+ ## TableChart
305
+ Authored patch for table charts.
306
+
307
+ | Field | Type | Optional | Description |
308
+ |-------|------|:--------:|-------------|
309
+ | `type` | enum: "table" | | Table chart type. |
310
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
311
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
312
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
313
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
314
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
315
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
316
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
317
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
318
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
319
+ | `style` | [TableChartStyle](#tablechartstyle) | ✓ | Chart-local style overrides. |
320
+
321
+ <a id="pointmapchart"></a>
322
+ ## PointMapChart
323
+ Authored patch for point_map and bubble_map charts.
324
+
325
+ | Field | Type | Optional | Description |
326
+ |-------|------|:--------:|-------------|
327
+ | `type` | enum: "point_map", "bubble_map" | | Point map or bubble map chart type. |
328
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
329
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
330
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
331
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
332
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
333
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
334
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
335
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
336
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
337
+ | `projection` | str \| Projection | ✓ | Map projection name or Vega-Lite projection config. |
338
+ | `color` | str | ✓ | Color data channel: bare field name only. |
339
+ | `geo` | str \| dict[str, Any] | ✓ | GeoJSON field name or inline GeoJSON spec for geoshape charts. |
340
+ | `geo_source` | str | ✓ | Named geographic data source for loading GeoJSON boundaries. |
341
+ | `lookup` | str | ✓ | Data field to join against geographic data (map join key). |
342
+ | `value` | str | ✓ | Data field mapped to the fill color. |
343
+ | `latitude` | str | ✓ | Field containing latitude values for point/bubble maps. |
344
+ | `longitude` | str | ✓ | Field containing longitude values for point/bubble maps. |
345
+ | `size` | str | ✓ | Data field used to scale bubble radius (quantitative). Only meaningful on bubble_map. |
346
+ | `basemap` | [BasemapConfig](#basemapconfig) | ✓ | Tile-layer configuration for the map background. |
347
+ | `style` | [PointMapChartStyle](#pointmapchartstyle) | ✓ | Chart-local style overrides. |
348
+
349
+ <a id="geoshapechart"></a>
350
+ ## GeoshapeChart
351
+ Authored patch for map and geoshape charts.
352
+
353
+ | Field | Type | Optional | Description |
354
+ |-------|------|:--------:|-------------|
355
+ | `type` | enum: "map", "geoshape" | | Map or geoshape chart type. |
356
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
357
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
358
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
359
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
360
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
361
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
362
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
363
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
364
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
365
+ | `projection` | str \| Projection | ✓ | Map projection name or Vega-Lite projection config. |
366
+ | `color` | str | ✓ | Color data channel: bare field name only. |
367
+ | `geo` | str \| dict[str, Any] | ✓ | GeoJSON field name or inline GeoJSON spec for geoshape charts. |
368
+ | `geo_source` | str | ✓ | Named geographic data source for loading GeoJSON boundaries. |
369
+ | `lookup` | str | ✓ | Data field to join against geographic data (map join key). |
370
+ | `value` | str | ✓ | Data field mapped to the fill color. |
371
+ | `latitude` | str | ✓ | Field containing latitude values for point/bubble maps. |
372
+ | `longitude` | str | ✓ | Field containing longitude values for point/bubble maps. |
373
+ | `style` | [GeoshapeChartStyle](#geoshapechartstyle) | ✓ | Chart-local style overrides. |
374
+
375
+ <a id="layeredchart"></a>
376
+ ## LayeredChart
377
+ Authored patch for layered multi-mark charts.
378
+
379
+ | Field | Type | Optional | Description |
380
+ |-------|------|:--------:|-------------|
381
+ | `type` | enum: "layered" | | Layered chart type. |
382
+ | `layers` | list[[Layer](#layer)] | | Layers for multi-mark charts. Each layer is a chart definition. |
383
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
384
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
385
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
386
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
387
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
388
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
389
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
390
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
391
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
392
+ | `x` | str | ✓ | Shared X-axis field name for all layers. |
393
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration for the shared X axis. |
394
+ | `x_domain` | enum: "union", "primary" | ✓ | Controls how x-values from multiple layer queries are combined. |
395
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached to the chart. |
396
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format override. |
397
+ | `style` | [LayeredChartStyle](#layeredchartstyle) | ✓ | Chart-local style overrides. |
398
+
399
+ <a id="calloutchart"></a>
400
+ ## CalloutChart
401
+ Static callout/message chart. Minimal — no chrome, no styling, no query.
402
+
403
+ | Field | Type | Optional | Description |
404
+ |-------|------|:--------:|-------------|
405
+ | `type` | enum: "callout" | | Callout chart type. |
406
+ | `message` | str | | Static message content. |
407
+ | `title` | str | ✓ | Optional chart title shown above the message. |
408
+ | `style` | [CalloutChartStyle](#calloutchartstyle) | ✓ | Chart-local style overrides (tone). |
409
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
410
+
411
+ <a id="sparkbarchart"></a>
412
+ ## SparkBarChart
413
+ Authored patch for spark_bar charts (compact horizontal bars).
414
+
415
+ | Field | Type | Optional | Description |
416
+ |-------|------|:--------:|-------------|
417
+ | `type` | enum: "spark_bar" | | SparkBar chart type. |
418
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
419
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
420
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
421
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
422
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
423
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
424
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
425
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
426
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
427
+ | `x` | str | ✓ | X-axis (label) field name. |
428
+ | `y` | str \| list[str] | ✓ | Y-axis (value) field name(s). |
429
+ | `style` | [SparkBarChartStyle](#sparkbarchartstyle) | ✓ | Chart-local style overrides. |
430
+
431
+ <a id="foreachitem"></a>
432
+ ## ForeachItem
433
+ Top-level foreach construct in a layout list.
434
+
435
+ | Field | Type | Description |
436
+ |-------|------|-------------|
437
+ | `foreach` | [ForeachConfig](#foreachconfig) | foreach loop configuration with query, as, and items. |
438
+
439
+ <a id="gridlayout"></a>
440
+ ## GridLayout
441
+ Grid layout configuration.
442
+
443
+ | Field | Type | Optional | Description |
444
+ |-------|------|:--------:|-------------|
445
+ | `items` | list[[GridItem](#griditem)] | | List of grid items with position and span configuration. |
446
+ | `columns` | int | ✓ | Number of grid columns (default: 24). |
447
+ | `row_height` | str | ✓ | Default row height as a CSS value (e.g., '200px'). |
448
+ | `gap` | enum: "sm", "md", "lg", "xl" | ✓ | Gap between grid cells (sm, md, lg, xl). |
449
+ | `default_width` | int | ✓ | Default column span for items that don't specify width. |
450
+ | `default_height` | int | ✓ | Default row span for items that don't specify height. |
451
+
452
+ <a id="tablayout"></a>
453
+ ## TabLayout
454
+ Tab layout configuration.
455
+
456
+ | Field | Type | Optional | Description |
457
+ |-------|------|:--------:|-------------|
458
+ | `items` | list[[TabItem](#tabitem)] | | List of tab items. |
459
+ | `id` | str | ✓ | Variable name and URL param base for tab selection (auto-generated if omitted). |
460
+ | `position` | enum: "top", "left" | ✓ | Tab bar position (top or left). |
461
+ | `default` | str | ✓ | Default tab title to activate on load. |
462
+
463
+ <a id="facedetails"></a>
464
+ ## FaceDetails
465
+ Collapsible section metadata for a face.
466
+
467
+ | Field | Type | Optional | Description |
468
+ |-------|------|:--------:|-------------|
469
+ | `summary` | str | | Label shown when the section is collapsed. |
470
+ | `expanded_title` | str | ✓ | Label shown when the section is expanded. Defaults to summary. |
471
+ | `expanded` | bool | ✓ | Whether the section is open by default. |
472
+
473
+ <a id="style"></a>
474
+ ## Style
475
+ Authored overlay for Style — all fields optional. Adds CSS shorthand coercers.
476
+
477
+ | Field | Type | Optional | Description |
478
+ |-------|------|:--------:|-------------|
479
+ | `board` | [BoardStyle](#boardstyle) | ✓ | Face-level structural board dimensions. |
480
+ | `background` | str | ✓ | Working-surface background color (board and card fills). |
481
+ | `accent` | str | ✓ | Accent color token cascaded to sparklines, bars, and focus rings. |
482
+ | `muted` | str | ✓ | Muted color token cascaded to spark backgrounds and bar tracks. |
483
+ | `font` | [RootFontStyle](#rootfontstyle) | ✓ | Root font configuration including emoji mode. |
484
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Default border style cascaded to all chart cards. |
485
+ | `box_shadow` | str | ✓ | CSS box shadow for chart cards; None means no shadow. |
486
+ | `opacity` | float | ✓ | Default mark opacity (0–1). |
487
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Board and face title style. |
488
+ | `text` | [TextStyle](#textstyle) | ✓ | Markdown and plain text content style. |
489
+ | `placeholder` | [PlaceholderStyle](#placeholderstyle) | ✓ | Placeholder overlay style for empty charts. |
490
+ | `charts` | [ChartsStyle](#chartsstyle) | ✓ | Root of all chart-type styles and shared chart configuration. |
491
+ | `layout` | [LayoutStyle](#layoutstyle) | ✓ | Layout container styles (rows, cols, grid, tabs, details). |
492
+ | `variables` | [VariablesStyle](#variablesstyle) | ✓ | Variable controls chrome style. |
493
+ | `page` | [PageStyle](#pagestyle) | ✓ | Page-level canvas style (behind the board). |
494
+ | `formats` | dict[str, str] | ✓ | Format alias map; None means no aliases at this cascade level. |
495
+ | `palettes` | dict[str, str] | ✓ | Theme palette role assignments: open dict mapping role name to palette file name. Default seed: chrome, negative, positive, warning, category, sequence, diverge. |
496
+ | `roles` | dict[str, str] | ✓ | Optional top-level theme role aliases: bare name → role.alias. e.g. ink: chrome.heading |
497
+ | `padding` | [SpacingValues](#spacingvalues) | ✓ | Per-face padding override (CSS shorthand or structured). |
498
+ | `margin` | [SpacingValues](#spacingvalues) | ✓ | Per-face margin override (CSS shorthand or structured). |
499
+ | `gap` | float | ✓ | Per-face gap between layout items in pixels. |
500
+ | `color` | str | ✓ | Per-face text color override as a CSS color string. |
501
+
502
+ <a id="singlerowboolprobe"></a>
503
+ ## SingleRowBoolProbe
504
+ Single-row boolean query probe.
505
+
506
+ | Field | Type | Description |
507
+ |-------|------|-------------|
508
+ | `query` | str | Name of the query to execute. |
509
+ | `column` | str | Column in the single result row holding the boolean value. |
510
+
511
+ <a id="postgressourceconfig"></a>
512
+ ## PostgresSourceConfig
513
+ Postgres source configuration.
514
+
515
+ | Field | Type | Optional | Description |
516
+ |-------|------|:--------:|-------------|
517
+ | `type` | enum: "postgres" | | Source type identifier. |
518
+ | `host` | str | | Database host name or IP address. |
519
+ | `dbname` | str | | Database name (matches dbt 'dbname'). |
520
+ | `user` | str | | Database user name. |
521
+ | `password` | str | | Database password. |
522
+ | `port` | int | ✓ | Database port number. |
523
+ | `schema` | str | ✓ | Default schema for queries. |
524
+
525
+ <a id="snowflakesourceconfig"></a>
526
+ ## SnowflakeSourceConfig
527
+ Snowflake source configuration.
528
+
529
+ | Field | Type | Optional | Description |
530
+ |-------|------|:--------:|-------------|
531
+ | `type` | enum: "snowflake" | | Source type identifier. |
532
+ | `account` | str | | Snowflake account identifier (e.g. xy12345.us-east-1). |
533
+ | `user` | str | | Snowflake user name. |
534
+ | `database` | str | | Snowflake database name. |
535
+ | `warehouse` | str | | Snowflake virtual warehouse name. |
536
+ | `password` | str | ✓ | Snowflake password. Omit when using OAuth or key-pair auth. |
537
+ | `schema` | str | ✓ | Default schema for queries. |
538
+ | `role` | str | ✓ | Snowflake role to assume for the session. |
539
+
540
+ <a id="bigquerysourceconfig"></a>
541
+ ## BigQuerySourceConfig
542
+ BigQuery source configuration.
543
+
544
+ | Field | Type | Optional | Description |
545
+ |-------|------|:--------:|-------------|
546
+ | `type` | enum: "bigquery" | | Source type identifier. |
547
+ | `project` | str | | GCP project ID. |
548
+ | `dataset` | str | | BigQuery dataset name (equivalent to schema). |
549
+ | `keyfile` | str | ✓ | Path to service account JSON key file. |
550
+ | `keyfile_json` | dict[str, Any] | ✓ | Inline service account JSON dict. |
551
+ | `location` | str | ✓ | Dataset location (e.g. US, EU). |
552
+ | `method` | enum: "oauth", "service-account", "service-account-json" | ✓ | dbt-bigquery authentication method. Inferred from keyfile/keyfile_json when omitted: 'service-account-json' if keyfile_json set, 'service-account' if keyfile set, 'oauth' (Application Default Credentials) otherwise. |
553
+
554
+ <a id="redshiftsourceconfig"></a>
555
+ ## RedshiftSourceConfig
556
+ Redshift source configuration.
557
+
558
+ | Field | Type | Optional | Description |
559
+ |-------|------|:--------:|-------------|
560
+ | `type` | enum: "redshift" | | Source type identifier. |
561
+ | `host` | str | | Redshift cluster host name. |
562
+ | `dbname` | str | | Redshift database name. |
563
+ | `user` | str | | Redshift user name. |
564
+ | `password` | str | | Redshift password. |
565
+ | `port` | int | ✓ | Redshift port number. |
566
+ | `schema` | str | ✓ | Default schema for queries. |
567
+
568
+ <a id="mysqlsourceconfig"></a>
569
+ ## MySQLSourceConfig
570
+ MySQL source configuration.
571
+
572
+ | Field | Type | Optional | Description |
573
+ |-------|------|:--------:|-------------|
574
+ | `type` | enum: "mysql" | | Source type identifier. |
575
+ | `host` | str | | MySQL host name or IP address. |
576
+ | `database` | str | | MySQL database name. |
577
+ | `user` | str | | MySQL user name. |
578
+ | `password` | str | | MySQL password. |
579
+ | `port` | int | ✓ | MySQL port number. |
580
+ | `schema` | str | ✓ | Default schema for queries. |
581
+
582
+ <a id="duckdbsourceconfig"></a>
583
+ ## DuckDBSourceConfig
584
+ DuckDB source configuration.
585
+
586
+ | Field | Type | Optional | Description |
587
+ |-------|------|:--------:|-------------|
588
+ | `type` | enum: "duckdb" | | Source type identifier. |
589
+ | `path` | str | ✓ | DuckDB file path or ':memory:' for an in-memory database. |
590
+ | `schema` | str | ✓ | Default schema for unqualified table names (sets search_path). |
591
+
592
+ <a id="csvsourceconfig"></a>
593
+ ## CsvSourceConfig
594
+ CSV file source configuration.
595
+
596
+ | Field | Type | Optional | Description |
597
+ |-------|------|:--------:|-------------|
598
+ | `type` | enum: "csv" | | Source type identifier. |
599
+ | `file` | str | ✓ | Local path to the CSV file. |
600
+ | `url` | str | ✓ | Remote URL of the CSV file. |
601
+ | `headers` | dict[str, str] | ✓ | HTTP headers for authenticated URLs. |
602
+ | `delimiter` | str | ✓ | Field delimiter character. |
603
+ | `encoding` | str | ✓ | File encoding. |
604
+
605
+ <a id="parquetsourceconfig"></a>
606
+ ## ParquetSourceConfig
607
+ Parquet file source configuration.
608
+
609
+ | Field | Type | Optional | Description |
610
+ |-------|------|:--------:|-------------|
611
+ | `type` | enum: "parquet" | | Source type identifier. |
612
+ | `file` | str | ✓ | Local path to the Parquet file. |
613
+ | `url` | str | ✓ | Remote URL of the Parquet file. |
614
+ | `headers` | dict[str, str] | ✓ | HTTP headers for authenticated URLs. |
615
+
616
+ <a id="jsonsourceconfig"></a>
617
+ ## JsonSourceConfig
618
+ JSON file source configuration.
619
+
620
+ | Field | Type | Optional | Description |
621
+ |-------|------|:--------:|-------------|
622
+ | `type` | enum: "json" | | Source type identifier. |
623
+ | `file` | str | ✓ | Local path to the JSON file. |
624
+ | `url` | str | ✓ | Remote URL of the JSON file. |
625
+ | `headers` | dict[str, str] | ✓ | HTTP headers for authenticated URLs. |
626
+ | `json_path` | str | ✓ | JSONPath expression to extract the data array. |
627
+
628
+ <a id="httpsourceconfig"></a>
629
+ ## HttpSourceConfig
630
+ HTTP/REST API source configuration.
631
+
632
+ | Field | Type | Optional | Description |
633
+ |-------|------|:--------:|-------------|
634
+ | `type` | enum: "http" | | Source type identifier. |
635
+ | `url` | str | | Base URL for HTTP requests. |
636
+ | `headers` | dict[str, str] | ✓ | Default HTTP headers (e.g. Authorization). |
637
+
638
+ <a id="dbtprofilesourceconfig"></a>
639
+ ## DbtProfileSourceConfig
640
+ Reference to a dbt profile (for backward compatibility).
641
+
642
+ | Field | Type | Optional | Description |
643
+ |-------|------|:--------:|-------------|
644
+ | `type` | enum: "dbt_profile" | | Source type identifier. |
645
+ | `profile` | str | | dbt profile name from profiles.yml. |
646
+ | `target` | str | ✓ | dbt target to use; defaults to the profile's default target. |
647
+
648
+ <a id="variableoptions"></a>
649
+ ## VariableOptions
650
+ Options configuration for variable inputs.
651
+
652
+ | Field | Type | Optional | Description |
653
+ |-------|------|:--------:|-------------|
654
+ | `static` | list[str \| int \| float] | ✓ | List of static option values (strings or numbers). |
655
+ | `query` | str | ✓ | Query name whose result rows provide option values. |
656
+ | `column` | str | ✓ | Column in the query result to use as option values. |
657
+ | `label_column` | str | ✓ | Column in the query result to use as display labels (separate from values). |
658
+
659
+ <a id="pivot"></a>
660
+ ## Pivot
661
+ Query-level pivot rendering hint for cross-tab table layout.
662
+
663
+ | Field | Type | Description |
664
+ |-------|------|-------------|
665
+ | `column` | str | Dimension whose distinct values become column headers in the cross-tab layout. |
666
+ | `value` | str | Measure that fills each cell in the cross-tab layout. |
667
+
668
+ <a id="filterdef"></a>
669
+ ## FilterDef
670
+ One column→variable binding in chart.filters.
671
+
672
+ | Field | Type | Optional | Description |
673
+ |-------|------|:--------:|-------------|
674
+ | `op` | enum: "eq", "neq", "gt", "gte", "lt", "lte", "like", "ilike", "in", "not_in", "between" | ✓ | Comparison operator. Defaults to 'eq'. |
675
+ | `var` | str | ✓ | Plain variable name (no Jinja). Set when the filter value is a dashboard variable reference. |
676
+ | `template` | str | ✓ | Jinja template resolved at execute time. Only valid with op='eq'. Set when conditional-disable or complex expressions are needed. |
677
+
678
+ <a id="fieldconditionalformatting"></a>
679
+ ## FieldConditionalFormatting
680
+ Conditional formatting rules scoped to a single column.
681
+
682
+ | Field | Type | Description |
683
+ |-------|------|-------------|
684
+ | `when` | list[[ConditionalRule](#conditionalrule)] | Ordered list of conditional rules. The first matching rule applies; a 'default: true' rule must be last. |
685
+
686
+ <a id="chartsort"></a>
687
+ ## ChartSort
688
+ Chart-level sort configuration for categorical axes.
689
+
690
+ | Field | Type | Optional | Description |
691
+ |-------|------|:--------:|-------------|
692
+ | `by` | str | | Field name to sort by. |
693
+ | `order` | enum: "asc", "desc" | ✓ | Sort direction (asc or desc). |
694
+
695
+ <a id="chartlabels"></a>
696
+ ## ChartLabels
697
+ Per-row text annotations rendered near each data anchor.
698
+
699
+ | Field | Type | Optional | Description |
700
+ |-------|------|:--------:|-------------|
701
+ | `template` | str | | Jinja2 template for the label text. Row fields are available as variables. |
702
+ | `where` | str | ✓ | Jinja2 boolean filter expression. Labels only render on rows where this is truthy. |
703
+
704
+ <a id="chartdatatable"></a>
705
+ ## ChartDataTable
706
+ Container for a chart's data_table block.
707
+
708
+ | Field | Type | Description |
709
+ |-------|------|-------------|
710
+ | `entries` | list[[ChartDataTableSource](#chartdatatablesource) \| [ChartDataTableAggregate](#chartdatatableaggregate) \| [ChartDataTablePerSeries](#chartdatatableperseries)] | List of data-table entries (source, aggregate, or per-series rows). |
711
+
712
+ <a id="formatconfig"></a>
713
+ ## FormatConfig
714
+ Format configuration for value display.
715
+
716
+ | Field | Type | Optional | Description |
717
+ |-------|------|:--------:|-------------|
718
+ | `spec` | str | ✓ | D3 format string (e.g., ',.0f'), preset name (e.g., 'currency'), or Excel pattern. |
719
+ | `prefix` | str | ✓ | Custom prefix prepended to the formatted value (e.g., '$'). |
720
+ | `suffix` | str | ✓ | Custom suffix appended to the formatted value (e.g., ' USD', '%'). |
721
+ | `notation` | enum: "analytic", "narrative" | ✓ | Notation style: 'analytic' for SI-prefix (1 B, 1 M) or 'narrative' for prose-style (1bn, 1mn). |
722
+
723
+ <a id="barchartstyle"></a>
724
+ ## BarChartStyle
725
+ Authored overlay for BarChartStyle. Bar chart style: chart-level fields + marks sub-block.
726
+
727
+ | Field | Type | Optional | Description |
728
+ |-------|------|:--------:|-------------|
729
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
730
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
731
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
732
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
733
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
734
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
735
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
736
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
737
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
738
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
739
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
740
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
741
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
742
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
743
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
744
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
745
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
746
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
747
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
748
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
749
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
750
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
751
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
752
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
753
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
754
+ | `orientation` | enum: "horizontal", "vertical", "auto" | ✓ | Preferred bar orientation; None uses the renderer default (vertical). |
755
+ | `stack` | enum: "zero", "normalize", "center" | ✓ | Default stack mode for bar charts; None uses the renderer default (VL stacks by default). |
756
+ | `stack_order` | enum: "value", "data", "alphabetical" | ✓ | Z-order of stacked segments. None/'value' puts the largest aggregate at baseline. 'data' follows SQL row order (orientation-stable not guaranteed). 'alphabetical' sorts by color field name. Ignored when stacking is off or no color. |
757
+ | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration for bar charts. |
758
+ | `marks` | [BarChartMarksStyle](#barchartmarksstyle) | ✓ | Bar-family mark overrides. |
759
+
760
+ <a id="linechartstyle"></a>
761
+ ## LineChartStyle
762
+ Authored overlay for LineChartStyle. Line chart style: chart-level fields + marks sub-block.
763
+
764
+ | Field | Type | Optional | Description |
765
+ |-------|------|:--------:|-------------|
766
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
767
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
768
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
769
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
770
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
771
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
772
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
773
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
774
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
775
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
776
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
777
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
778
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
779
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
780
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
781
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
782
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
783
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
784
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
785
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
786
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
787
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
788
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
789
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
790
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
791
+ | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration for line charts. |
792
+ | `marks` | [LineChartMarksStyle](#linechartmarksstyle) | ✓ | Line-family mark overrides. |
793
+
794
+ <a id="areachartstyle"></a>
795
+ ## AreaChartStyle
796
+ Authored overlay for AreaChartStyle. Area chart style: chart-level fields + marks sub-block.
797
+
798
+ | Field | Type | Optional | Description |
799
+ |-------|------|:--------:|-------------|
800
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
801
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
802
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
803
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
804
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
805
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
806
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
807
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
808
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
809
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
810
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
811
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
812
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
813
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
814
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
815
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
816
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
817
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
818
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
819
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
820
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
821
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
822
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
823
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
824
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
825
+ | `stack` | enum: "zero", "normalize", "center" | ✓ | Default stack mode for area charts; False overlaps silhouettes. |
826
+ | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration for area charts. |
827
+ | `marks` | [AreaChartMarksStyle](#areachartmarksstyle) | ✓ | Area-family mark overrides. |
828
+
829
+ <a id="scatterchartstyle"></a>
830
+ ## ScatterChartStyle
831
+ Authored overlay for ScatterChartStyle. Scatter chart style: chart-level fields + marks sub-block.
832
+
833
+ | Field | Type | Optional | Description |
834
+ |-------|------|:--------:|-------------|
835
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
836
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
837
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
838
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
839
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
840
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
841
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
842
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
843
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
844
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
845
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
846
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
847
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
848
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
849
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
850
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
851
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
852
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
853
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
854
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
855
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
856
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
857
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
858
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
859
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
860
+ | `marks` | [ScatterChartMarksStyle](#scatterchartmarksstyle) | ✓ | Scatter-family mark overrides. |
861
+
862
+ <a id="heatmapchartstyle"></a>
863
+ ## HeatmapChartStyle
864
+ Authored overlay for HeatmapChartStyle. Heatmap chart style.
865
+
866
+ | Field | Type | Optional | Description |
867
+ |-------|------|:--------:|-------------|
868
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
869
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
870
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
871
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
872
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
873
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
874
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
875
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
876
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
877
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
878
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
879
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
880
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
881
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
882
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
883
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
884
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
885
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
886
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
887
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
888
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
889
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
890
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
891
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
892
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
893
+ | `cell_padding` | float | ✓ | Padding between heatmap cells in pixels. |
894
+ | `color_scheme` | str | ✓ | Color scheme name for heatmap gradient (e.g. 'blues', 'viridis'). |
895
+ | `marks` | [HeatmapChartMarksStyle](#heatmapchartmarksstyle) | ✓ | Heatmap-family mark overrides. |
896
+
897
+ <a id="charttotal"></a>
898
+ ## ChartTotal
899
+ Donut center total — opt-in summary at the center of a pie chart.
900
+
901
+ | Field | Type | Optional | Description |
902
+ |-------|------|:--------:|-------------|
903
+ | `label` | str | ✓ | Caption text displayed below the center total value. |
904
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format (D3 spec, preset, or FormatConfig). |
905
+
906
+ <a id="piechartstyle"></a>
907
+ ## PieChartStyle
908
+ Authored overlay for PieChartStyle. Pie/donut chart style: geometry + total (flat) + marks sub-block.
909
+
910
+ | Field | Type | Optional | Description |
911
+ |-------|------|:--------:|-------------|
912
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
913
+ | `aspect_ratio` | float | ✓ | Aspect ratio (width/height) of the pie chart viewport. |
914
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
915
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
916
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
917
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
918
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
919
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
920
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
921
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
922
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
923
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
924
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
925
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
926
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
927
+ | `inner_radius` | float | ✓ | Hole-to-disk ratio 0–1 (inner radius / outer radius). None = solid pie (no hole). |
928
+ | `total` | [TotalStyle](#totalstyle) | ✓ | Donut center total paint (value and label). |
929
+ | `marks` | [PieChartMarksStyle](#piechartmarksstyle) | ✓ | Pie-family mark overrides. |
930
+
931
+ <a id="kpisupportconfig"></a>
932
+ ## KpiSupportConfig
933
+ Support-line block authored alongside a KPI's main value.
934
+
935
+ | Field | Type | Optional | Description |
936
+ |-------|------|:--------:|-------------|
937
+ | `value` | str | ✓ | Column reference (string column name) for the support number/text. |
938
+ | `label` | str | ✓ | Trailing explainer text rendered beside the support value. |
939
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format (D3 spec, preset, or FormatConfig). |
940
+ | `glyph` | str | ✓ | Optional prefix glyph (e.g. '▲', '▼', '●'). |
941
+ | `tone` | enum: "positive", "negative", "warning" | ✓ | Semantic styling for the support value/glyph. |
942
+
943
+ <a id="kpichartstyle"></a>
944
+ ## KpiChartStyle
945
+ Authored overlay for KpiChartStyle. Produced by cascade from theme YAML.
946
+
947
+ | Field | Type | Optional | Description |
948
+ |-------|------|:--------:|-------------|
949
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
950
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
951
+ | `border` | [BorderStyle](#borderstyle) | ✓ | KPI card border style. |
952
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
953
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
954
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
955
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
956
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
957
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
958
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
959
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
960
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
961
+ | `value` | [KpiValueStyle](#kpivaluestyle) | ✓ | KPI headline value slot. |
962
+ | `label` | [KpiSlotStyle](#kpislotstyle) | ✓ | KPI card label slot. |
963
+ | `affix` | [KpiSlotStyle](#kpislotstyle) | ✓ | Currency/percent affix slot. |
964
+ | `glyph` | [KpiSlotStyle](#kpislotstyle) | ✓ | Indicator glyph (▲▼●) slot. |
965
+ | `min_card_width` | float | ✓ | Minimum KPI card width in pixels. |
966
+ | `default_width` | float | ✓ | Default KPI card width in pixels. |
967
+ | `default_height` | float | ✓ | Default KPI card height in pixels. |
968
+ | `content_padding` | [SpacingValues](#spacingvalues) | ✓ | Inner inset (top/right/bottom/left) for KPI card content in pixels. |
969
+ | `tones` | [KpiTonesStyle](#kpitonesstyle) | ✓ | Semantic tone color palette for KPI values and glyphs. |
970
+ | `tone` | str | ✓ | Semantic tone selector (positive \| negative \| warning). None = default chrome. |
971
+
972
+ <a id="tablechartstyle"></a>
973
+ ## TableChartStyle
974
+ Authored overlay for TableChartStyle.
975
+
976
+ | Field | Type | Optional | Description |
977
+ |-------|------|:--------:|-------------|
978
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
979
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
980
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Table outer border style. |
981
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
982
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
983
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
984
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
985
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
986
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
987
+ | `background` | str | ✓ | Table background color; None inherits from theme. |
988
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Table text color override (CSS string) or gradient scale config; None uses the theme default. |
989
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
990
+ | `rule` | [TableRuleStyle](#tablerulestyle) | ✓ | Table rule style overrides (color). None = no override; inherits from theme. |
991
+ | `outer_padding` | float | ✓ | Outer table padding in pixels. |
992
+ | `bottom_padding` | float | ✓ | Extra bottom padding below the last row in pixels. |
993
+ | `column_layout` | [TableColumnsStyle](#tablecolumnsstyle) | ✓ | Default column width and cell padding settings. |
994
+ | `header` | [TableHeaderStyle](#tableheaderstyle) | ✓ | Table header row style. |
995
+ | `row` | [TableRowStyle](#tablerowstyle) | ✓ | Table body row style. |
996
+ | `row_numbers` | [TableRowNumbersStyle](#tablerownumbersstyle) | ✓ | Leading row-number column configuration. |
997
+ | `title_row` | [TableTitleStyle](#tabletitlestyle) | ✓ | Table title row style. |
998
+ | `wrap` | bool | ✓ | Allow cell text wrapping; false clips to single line. |
999
+ | `pagination` | [PaginationConfig](#paginationconfig) | ✓ | Client-side pagination defaults for table charts. |
1000
+ | `column_defaults` | [TableColumnDefaultsConfig](#tablecolumndefaultsconfig) | ✓ | Table-level column defaults applied to every column; None means no defaults authored. |
1001
+ | `columns` | dict[str, Any] | ✓ | Per-column display configuration keyed by column name (label, format, width, etc.). |
1002
+ | `header_overflow` | enum: "clip", "truncate", "wrap-two", "wrap" | ✓ | Table column header text overflow mode; None inherits from theme. |
1003
+ | `paginator` | [PaginatorStyle](#paginatorstyle) | ✓ | Visual style for the paginator control (chevrons + page numbers). |
1004
+ | `symbol_mode` | str | ✓ | Where to show currency-prefix and magnitude/unit suffix symbols in a numeric column. 'all' shows the full formatted value on every row; 'anchors' shows it only on the first data row and summary/total rows, stripping prefix and suffix from plain middle rows so the anchors guide the reader at the top and bottom of the value field. |
1005
+ | `more_rows` | [TableEdgeStyle](#tableedgestyle) | ✓ | Style for the 'more rows' edge-case indicator. |
1006
+ | `empty_state` | [TableEdgeStyle](#tableedgestyle) | ✓ | Style for the empty-state (no data) indicator. |
1007
+ | `spark` | [SparkStyle](#sparkstyle) | ✓ | Inline sparkline defaults for table cells. |
1008
+ | `text_baseline_offset` | float | ✓ | Vertical offset to align SVG text baseline with cell grid in pixels. |
1009
+ | `title_baseline_offset` | float | ✓ | Vertical offset to align SVG title baseline in pixels. |
1010
+ | `title_subtitle_gap` | float | ✓ | Gap between table title and subtitle lines in pixels. |
1011
+ | `subtitle` | [SubtitleStyle](#subtitlestyle) | ✓ | Table subtitle font-sizing constants. |
1012
+
1013
+ <a id="basemapconfig"></a>
1014
+ ## BasemapConfig
1015
+ Tile-layer configuration for point_map and bubble_map charts.
1016
+
1017
+ | Field | Type | Optional | Description |
1018
+ |-------|------|:--------:|-------------|
1019
+ | `type` | str | ✓ | Tile provider type (e.g. 'mapbox', 'raster'). |
1020
+ | `style` | str | ✓ | Tile style URL (e.g. Mapbox style URI). |
1021
+ | `source` | str | ✓ | Named geographic boundary source (e.g. 'us-states') for overlay rendering. |
1022
+ | `attribution` | str | ✓ | Attribution text for the tile provider. |
1023
+ | `fill` | str | ✓ | Fill color for geographic boundary overlay. |
1024
+ | `stroke` | str | ✓ | Stroke color for geographic boundary overlay. |
1025
+
1026
+ <a id="pointmapchartstyle"></a>
1027
+ ## PointMapChartStyle
1028
+ Authored overlay for PointMapChartStyle. Point map chart style.
1029
+
1030
+ | Field | Type | Optional | Description |
1031
+ |-------|------|:--------:|-------------|
1032
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
1033
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
1034
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
1035
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
1036
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
1037
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1038
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1039
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1040
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1041
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1042
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
1043
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
1044
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1045
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1046
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
1047
+ | `projection` | [ProjectionStyle](#projectionstyle) | ✓ | Vega-Lite projection configuration for this geo family. |
1048
+ | `basemap` | [BasemapStyle](#basemapstyle) | ✓ | Background map layer; None source = no topo layer. |
1049
+ | `marks` | [PointMapChartMarksStyle](#pointmapchartmarksstyle) | ✓ | Point-map-family mark overrides. |
1050
+
1051
+ <a id="geoshapechartstyle"></a>
1052
+ ## GeoshapeChartStyle
1053
+ Authored overlay for GeoshapeChartStyle. Geoshape (choropleth) chart style.
1054
+
1055
+ | Field | Type | Optional | Description |
1056
+ |-------|------|:--------:|-------------|
1057
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
1058
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
1059
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
1060
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
1061
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
1062
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1063
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1064
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1065
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1066
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1067
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
1068
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
1069
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1070
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1071
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
1072
+ | `projection` | [ProjectionStyle](#projectionstyle) | ✓ | Vega-Lite projection configuration for this geo family. |
1073
+ | `basemap` | [BasemapStyle](#basemapstyle) | ✓ | Background map layer; None source = no topo layer. |
1074
+ | `color_scheme` | str | ✓ | Color scheme name for choropleth gradient. |
1075
+ | `marks` | [GeoshapeChartMarksStyle](#geoshapechartmarksstyle) | ✓ | Geoshape-family mark overrides. |
1076
+
1077
+ <a id="layer"></a>
1078
+ ## Layer
1079
+ A single layer in a layered chart authored YAML.
1080
+
1081
+ | Field | Type | Optional | Description |
1082
+ |-------|------|:--------:|-------------|
1083
+ | `type` | str | | Mark type for this layer (bar, line, area, circle, square, tick, rule, trail, rect, image, scatter). |
1084
+ | `query` | str | ✓ | Query name for this layer's data (overrides chart-level query). |
1085
+ | `x` | str | ✓ | X-axis field name for this layer. |
1086
+ | `y` | str | ✓ | Y-axis field name for this layer. |
1087
+ | `label` | str | ✓ | Label field name for this layer. |
1088
+ | `color` | str | ✓ | Color data channel for this layer: bare field name only. |
1089
+ | `fill` | str | ✓ | Static fill color for this layer (hex string). Use for fixed-color marks; `color` is for data channels. |
1090
+ | `size` | str | ✓ | Size channel field name for this layer. |
1091
+ | `shape` | str | ✓ | Shape channel field name for this layer. |
1092
+ | `axis_y` | [LayerAxisYStyle](#layeraxisystyle) | ✓ | Y-axis settings for this layer (orientation, title). |
1093
+
1094
+ <a id="layeredchartstyle"></a>
1095
+ ## LayeredChartStyle
1096
+ Flat style patch for layered multi-mark charts.
1097
+
1098
+ | Field | Type | Optional | Description |
1099
+ |-------|------|:--------:|-------------|
1100
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
1101
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
1102
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
1103
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
1104
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding overrides. |
1105
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1106
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1107
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1108
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1109
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1110
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style overrides. |
1111
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style overrides. |
1112
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1113
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1114
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
1115
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
1116
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
1117
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
1118
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
1119
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
1120
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
1121
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
1122
+ | `scale` | ScaleStyle | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
1123
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
1124
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
1125
+ | `orientation` | enum: "horizontal", "vertical", "auto" | ✓ | Preferred bar orientation; None uses the renderer default (vertical). |
1126
+ | `stack` | enum: "zero", "normalize", "center" | ✓ | Default stack mode for bar/area charts. |
1127
+ | `stack_order` | enum: "value", "data", "alphabetical" | ✓ | Z-order of stacked segments. |
1128
+ | `endpoint_labels` | [EndpointLabelsConfig](#endpointlabelsconfig) | ✓ | Endpoint label pane configuration. |
1129
+ | `marks` | [LayeredMarksStyle](#layeredmarksstyle) | ✓ | Per-mark-type style overrides (bar/line/area/point). |
1130
+
1131
+ <a id="calloutchartstyle"></a>
1132
+ ## CalloutChartStyle
1133
+ Authored overlay for CalloutChartStyle. Chart-family style for ``type: callout`` charts and runtime chart-error fallback cards.
1134
+
1135
+ | Field | Type | Optional | Description |
1136
+ |-------|------|:--------:|-------------|
1137
+ | `tone` | str | ✓ | Semantic tone for palette-role lookup (positive \| negative \| warning). Defaults to negative. |
1138
+ | `background` | str | ✓ | Callout card background color (negative.bg default). |
1139
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Callout card border style. |
1140
+ | `padding` | float | ✓ | Inner padding of the callout card in pixels. |
1141
+ | `section_gap` | float | ✓ | Vertical gap between callout title and message in pixels. |
1142
+ | `title` | [CalloutElementStyle](#calloutelementstyle) | ✓ | Callout title element style. |
1143
+ | `message` | [CalloutElementStyle](#calloutelementstyle) | ✓ | Callout message element style. |
1144
+
1145
+ <a id="sparkbarchartstyle"></a>
1146
+ ## SparkBarChartStyle
1147
+ Authored overlay for SparkBarChartStyle. Produced by cascade from theme YAML.
1148
+
1149
+ | Field | Type | Optional | Description |
1150
+ |-------|------|:--------:|-------------|
1151
+ | `bar` | [SparkBarBarStyle](#sparkbarbarstyle) | ✓ | Bar geometry (height, padding, color). |
1152
+ | `label` | [SparkBarChartLabelStyle](#sparkbarchartlabelstyle) | ✓ | Category-label column (visibility, reserved width). |
1153
+ | `count` | [SparkBarCountStyle](#sparkbarcountstyle) | ✓ | Count-value column (visibility, reserved width). |
1154
+ | `max_bars` | int | ✓ | Maximum number of bars to render. |
1155
+ | `font` | [FontStyle](#fontstyle) | ✓ | Spark_bar font style overrides. |
1156
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Spark_bar outer border style. |
1157
+ | `subtitle` | [SubtitleStyle](#subtitlestyle) | ✓ | Spark_bar subtitle font-sizing constants. |
1158
+
1159
+ <a id="foreachconfig"></a>
1160
+ ## ForeachConfig
1161
+ foreach loop configuration.
1162
+
1163
+ | Field | Type | Description |
1164
+ |-------|------|-------------|
1165
+ | `query` | [ForeachQuery](#foreachquery) | Inline data source providing the rows to iterate over. |
1166
+ | `as` | str | Variable name bound to each row (accessible as {{ as.field }}). |
1167
+ | `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) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | Layout item templates resolved once per data row. |
1168
+
1169
+ <a id="griditem"></a>
1170
+ ## GridItem
1171
+ Grid layout item with position and span.
1172
+
1173
+ | Field | Type | Optional | Description |
1174
+ |-------|------|:--------:|-------------|
1175
+ | `item` | str \| [Face](#face) \| [BarChart](#barchart) \| [LineChart](#linechart) \| [AreaChart](#areachart) \| [ScatterChart](#scatterchart) \| [HeatmapChart](#heatmapchart) \| [PieChart](#piechart) \| [KpiChart](#kpichart) \| [TableChart](#tablechart) \| [PointMapChart](#pointmapchart) \| [GeoshapeChart](#geoshapechart) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)] | | Chart name or inline chart/face definition to place in this grid cell. |
1176
+ | `col` | int | ✓ | Column position (0-indexed). Auto-placed if omitted. |
1177
+ | `row` | int | ✓ | Row position (0-indexed). Auto-placed if omitted. |
1178
+ | `col_span` | int | ✓ | Number of columns to span (width in grid units). |
1179
+ | `row_span` | int | ✓ | Number of rows to span (height in grid units). |
1180
+ | `width` | int | ✓ | Alias for col_span (more intuitive name). |
1181
+ | `height` | int | ✓ | Alias for row_span (more intuitive name). |
1182
+ | `description` | str | ✓ | Optional metadata for AI search and context tooltips. |
1183
+
1184
+ <a id="tabitem"></a>
1185
+ ## TabItem
1186
+ Tab layout item.
1187
+
1188
+ | Field | Type | Optional | Description |
1189
+ |-------|------|:--------:|-------------|
1190
+ | `title` | str | | Tab label displayed in the tab bar. |
1191
+ | `icon` | str | ✓ | Optional icon shown in the tab (e.g., emoji or icon name). |
1192
+ | `description` | str | ✓ | Optional metadata for AI search and context tooltips. |
1193
+ | `text` | str | ✓ | Markdown text content shown in this tab. |
1194
+ | `style` | [Style](#style) | ✓ | Style patch for this tab's content area. |
1195
+ | `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) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Vertical stack layout for this tab's content. |
1196
+ | `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) \| [LayeredChart](#layeredchart) \| [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) \| [LayeredChart](#layeredchart) \| [CalloutChart](#calloutchart) \| [SparkBarChart](#sparkbarchart)]] | ✓ | Horizontal layout for this tab's content. |
1197
+ | `grid` | [GridLayout](#gridlayout) | ✓ | CSS-grid layout for this tab's content. |
1198
+ | `tabs` | [TabLayout](#tablayout) | ✓ | Nested tab layout (tabs within tabs). |
1199
+
1200
+ <a id="boardstyle"></a>
1201
+ ## BoardStyle
1202
+ Authored overlay for BoardStyle. Face-level structural dimensions. Do NOT cascade to child faces.
1203
+
1204
+ | Field | Type | Optional | Description |
1205
+ |-------|------|:--------:|-------------|
1206
+ | `width` | float | ✓ | Board width in pixels. |
1207
+ | `default_height` | float | ✓ | Default row height in pixels. |
1208
+ | `min_height` | float | ✓ | Minimum row height in pixels. |
1209
+ | `margin` | float | ✓ | Board outer margin in pixels. |
1210
+ | `card_padding` | float | ✓ | Padding added to each card side in pixels. |
1211
+ | `card_gap` | float | ✓ | Gap between cards in pixels. |
1212
+
1213
+ <a id="rootfontstyle"></a>
1214
+ ## RootFontStyle
1215
+ Authored overlay for RootFontStyle. Root-level font configuration: FontStyle fields plus a required emoji mode.
1216
+
1217
+ | Field | Type | Optional | Description |
1218
+ |-------|------|:--------:|-------------|
1219
+ | `family` | str | ✓ | Font family name (e.g., 'sans-serif', 'Roboto'). |
1220
+ | `color` | str | ✓ | Text color as a CSS color string. |
1221
+ | `size` | float | ✓ | Font size in pixels. |
1222
+ | `weight` | str \| float | ✓ | Font weight (e.g., 'bold', 400, 700). |
1223
+ | `style` | enum: "normal", "italic" | ✓ | Font style (normal or italic). |
1224
+ | `decoration` | enum: "none", "line-through", "underline" | ✓ | Text decoration (underline, line-through, or none). |
1225
+ | `case` | enum: "none", "sentence", "title", "upper", "lower", "slug", "camel" | ✓ | Letter-case transform applied at render time. 'title' uses Chicago/Gruber rules and preserves tokens with internal capitals (ARR, iPhone). 'sentence' uppercases only the first character. 'none' (default) emits the string without any letter-case change. |
1226
+ | `emoji` | enum: "monochrome", "color", "system-default", "disabled" | ✓ | Emoji rendering mode for the dashboard font stack. |
1227
+
1228
+ <a id="borderstyle"></a>
1229
+ ## BorderStyle
1230
+ Box border. Does NOT cascade (ADR-003: box properties reset per level).
1231
+
1232
+ | Field | Type | Optional | Description |
1233
+ |-------|------|:--------:|-------------|
1234
+ | `radius` | float | ✓ | Border corner radius in pixels. |
1235
+ | `color` | str | ✓ | Border color (CSS color string). |
1236
+ | `width` | float | ✓ | Border width in pixels. |
1237
+
1238
+ <a id="titlestyle"></a>
1239
+ ## TitleStyle
1240
+ Authored overlay for TitleStyle. Board and face titles.
1241
+
1242
+ | Field | Type | Optional | Description |
1243
+ |-------|------|:--------:|-------------|
1244
+ | `font` | [FontStyle](#fontstyle) | ✓ | Title font style overrides. |
1245
+ | `line_height` | float | ✓ | Line height multiplier for titles and markdown headings. Headings typically want a tighter multiplier than body prose (~1.1-1.25 vs the body 1.5-1.6). |
1246
+ | `sizes` | list[float] | ✓ | Font sizes for the H1–H6 heading ramp, indexed by ``face.level - 1``. Combined with ``width_offsets`` at render time to size titles responsively by card width. |
1247
+ | `width_offsets` | [TitleWidthOffsetsStyle](#titlewidthoffsetsstyle) | ✓ | Additive level offsets by card width (tiny/narrow/medium/wide). Added to the title's base level before indexing ``sizes``. Consumed by chart_title_spec / face_title_spec. |
1248
+ | `min_height` | float | ✓ | Minimum title row height in pixels. |
1249
+ | `overflow` | str | ✓ | Text overflow mode (clip, truncate, wrap-two, wrap). |
1250
+ | `position` | [TitlePositionStyle](#titlepositionstyle) | ✓ | Vega-Lite title positioning: anchor, angle, offset, baseline. |
1251
+ | `level` | enum: "auto" | ✓ | Heading level override for face titles. ``'auto'`` (default) computes the level semantically as the count of titled ancestors. An integer value locks all titles in this face and its descendants to that H-level. |
1252
+ | `subtitle` | [TitleSubtitleStyle](#titlesubtitlestyle) | ✓ | Subtitle font styles. |
1253
+
1254
+ <a id="textstyle"></a>
1255
+ ## TextStyle
1256
+ Authored overlay for TextStyle. Markdown / plain text content.
1257
+
1258
+ | Field | Type | Optional | Description |
1259
+ |-------|------|:--------:|-------------|
1260
+ | `font` | [FontStyle](#fontstyle) | ✓ | Text font style overrides. |
1261
+ | `line_height` | float | ✓ | Line height multiplier for text content. |
1262
+ | `align` | enum: "left", "center", "right" | ✓ | Text alignment for the face body-text block. |
1263
+ | `column` | [TextColumnStyle](#textcolumnstyle) | ✓ | Multi-column layout for the face body-text block. |
1264
+
1265
+ <a id="placeholderstyle"></a>
1266
+ ## PlaceholderStyle
1267
+ Authored overlay for PlaceholderStyle.
1268
+
1269
+ | Field | Type | Optional | Description |
1270
+ |-------|------|:--------:|-------------|
1271
+ | `opacity` | float | ✓ | Opacity of the placeholder overlay (0–1). |
1272
+ | `overlay` | [PlaceholderOverlay](#placeholderoverlay) | ✓ | Overlay text and background style. |
1273
+
1274
+ <a id="chartsstyle"></a>
1275
+ ## ChartsStyle
1276
+ Authored overlay for ChartsStyle. Registry of all chart-type styles plus shared chart configuration.
1277
+
1278
+ | Field | Type | Optional | Description |
1279
+ |-------|------|:--------:|-------------|
1280
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
1281
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
1282
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
1283
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
1284
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
1285
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1286
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1287
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1288
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1289
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1290
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
1291
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
1292
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1293
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1294
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
1295
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Shared axis style applied to all axes before per-axis overrides. |
1296
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | X-axis style overrides applied after the shared axis. |
1297
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Y-axis style overrides applied after the shared axis. |
1298
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Quantitative axis style overrides applied after axis_x/axis_y. |
1299
+ | `view` | [ViewStyle](#viewstyle) | ✓ | Vega-Lite view dimensions and border. |
1300
+ | `autosize` | [AutosizeStyle](#autosizestyle) | ✓ | Vega-Lite autosize configuration. |
1301
+ | `marks` | [GlobalMarksStyle](#globalmarksstyle) | ✓ | Global mark defaults (tier-1 of the marks cascade). |
1302
+ | `bar` | [BarChartStyle](#barchartstyle) | ✓ | Bar chart style. |
1303
+ | `line` | [LineChartStyle](#linechartstyle) | ✓ | Line chart style. |
1304
+ | `area` | [AreaChartStyle](#areachartstyle) | ✓ | Area chart style. |
1305
+ | `scatter` | [ScatterChartStyle](#scatterchartstyle) | ✓ | Scatter chart style. |
1306
+ | `histogram` | [HistogramChartStyle](#histogramchartstyle) | ✓ | Histogram chart style. |
1307
+ | `heatmap` | [HeatmapChartStyle](#heatmapchartstyle) | ✓ | Heatmap chart style. |
1308
+ | `geoshape` | [GeoshapeChartStyle](#geoshapechartstyle) | ✓ | Geoshape (choropleth) chart style. |
1309
+ | `point_map` | [PointMapChartStyle](#pointmapchartstyle) | ✓ | Point map chart style. |
1310
+ | `boxplot` | [BoxplotChartStyle](#boxplotchartstyle) | ✓ | Boxplot chart style. |
1311
+ | `errorbar` | [ErrorbarChartStyle](#errorbarchartstyle) | ✓ | Error bar chart style. |
1312
+ | `errorband` | [ErrorbandChartStyle](#errorbandchartstyle) | ✓ | Error band chart style. |
1313
+ | `pie` | [PieChartStyle](#piechartstyle) | ✓ | Pie/donut chart style. |
1314
+ | `series_label` | [SeriesLabelStyle](#serieslabelstyle) | ✓ | Shared series-label typography for endpoint labels, stack labels, and slice callouts. |
1315
+ | `kpi` | [KpiChartStyle](#kpichartstyle) | ✓ | KPI card chart style. |
1316
+ | `table` | [TableChartStyle](#tablechartstyle) | ✓ | Table chart style. |
1317
+ | `spark_bar` | [SparkBarChartStyle](#sparkbarchartstyle) | ✓ | Spark_bar (full-chart horizontal bar) style. |
1318
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Attached data_table strip style. |
1319
+ | `callout` | [CalloutChartStyle](#calloutchartstyle) | ✓ | Callout chart-family style for type:callout and runtime fallback cards. |
1320
+
1321
+ <a id="layoutstyle"></a>
1322
+ ## LayoutStyle
1323
+ Authored overlay for LayoutStyle.
1324
+
1325
+ | Field | Type | Optional | Description |
1326
+ |-------|------|:--------:|-------------|
1327
+ | `rows` | [LayoutGapStyle](#layoutgapstyle) | ✓ | Row layout gap configuration. |
1328
+ | `cols` | [LayoutGapStyle](#layoutgapstyle) | ✓ | Column layout gap configuration. |
1329
+ | `grid` | [GridLayoutStyle](#gridlayoutstyle) | ✓ | Grid layout configuration. |
1330
+ | `tabs` | [TabsStyle](#tabsstyle) | ✓ | Tabs layout style. |
1331
+ | `details` | [DetailsStyle](#detailsstyle) | ✓ | Details (accordion) layout style. |
1332
+
1333
+ <a id="variablesstyle"></a>
1334
+ ## VariablesStyle
1335
+ Authored overlay for VariablesStyle. Variable controls chrome styling.
1336
+
1337
+ | Field | Type | Optional | Description |
1338
+ |-------|------|:--------:|-------------|
1339
+ | `visible` | bool | ✓ | Show the variables control panel. |
1340
+ | `position` | enum: "top", "bottom", "title-inline" | ✓ | Variables strip placement: stacked under the title (top/bottom) or on one horizontal band with the face title (title-inline). |
1341
+ | `gap` | float | ✓ | Gap between variable controls in pixels. |
1342
+ | `label_position` | str | ✓ | Position of labels relative to their input controls (e.g. 'left', 'top'). |
1343
+ | `title_inline_title_max_width` | float | ✓ | When position is title-inline: max title column width in px. 0 means no cap (title uses remaining width after reserving space for variables). |
1344
+ | `font` | [FontStyle](#fontstyle) | ✓ | Variables panel base font style overrides. |
1345
+ | `label` | [VariablesLabelStyle](#variableslabelstyle) | ✓ | Variable label typography. |
1346
+ | `value` | [VariablesValueStyle](#variablesvaluestyle) | ✓ | Variable value typography. |
1347
+ | `placeholder` | [VariablesPlaceholderStyle](#variablesplaceholderstyle) | ✓ | Style for unselected/hint text in variable inputs. |
1348
+ | `line_height` | float | ✓ | Line height for variable control text in pixels. |
1349
+ | `padding` | float | ✓ | Outer padding around the variables panel in pixels. |
1350
+ | `container_height` | float | ✓ | Height of the variables panel container in pixels. |
1351
+ | `container_padding` | float | ✓ | Inner padding of the variables panel container in pixels. |
1352
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Variables panel border style. |
1353
+ | `control_gap` | float | ✓ | Gap between label and input within a single control in pixels. |
1354
+ | `input` | [InputStyle](#inputstyle) | ✓ | Input control style. |
1355
+ | `popover_rail_background` | str | ✓ | Background color for the preset rail (left column) inside the daterange chip's popover. Typically the theme's `surface-subtle` step — gray-50 on white-canvas themes, a cream-toned light on warm-canvas themes. Distinct from the popover card itself, which is always white-equivalent. |
1356
+
1357
+ <a id="pagestyle"></a>
1358
+ ## PageStyle
1359
+ Authored overlay for PageStyle. Page-level (outer HTML canvas) styling.
1360
+
1361
+ | Field | Type | Optional | Description |
1362
+ |-------|------|:--------:|-------------|
1363
+ | `background` | str | ✓ | Page canvas background color (behind the face board). |
1364
+
1365
+ <a id="spacingvalues"></a>
1366
+ ## SpacingValues
1367
+ Pre-parsed CSS spacing (margin/padding).
1368
+
1369
+ | Field | Type | Optional | Description |
1370
+ |-------|------|:--------:|-------------|
1371
+ | `top` | float | ✓ | Top spacing in pixels. |
1372
+ | `right` | float | ✓ | Right spacing in pixels. |
1373
+ | `bottom` | float | ✓ | Bottom spacing in pixels. |
1374
+ | `left` | float | ✓ | Left spacing in pixels. |
1375
+
1376
+ <a id="conditionalrule"></a>
1377
+ ## ConditionalRule
1378
+ A single conditional formatting rule.
1379
+
1380
+ | Field | Type | Optional | Description |
1381
+ |-------|------|:--------:|-------------|
1382
+ | `eq` | Any | ✓ | Match rows where the column value equals this value. |
1383
+ | `ne` | Any | ✓ | Match rows where the column value does not equal this value. |
1384
+ | `lt` | int \| float | ✓ | Match rows where the column value is less than this number. |
1385
+ | `lte` | int \| float | ✓ | Match rows where the column value is less than or equal to this number. |
1386
+ | `gt` | int \| float | ✓ | Match rows where the column value is greater than this number. |
1387
+ | `gte` | int \| float | ✓ | Match rows where the column value is greater than or equal to this number. |
1388
+ | `between` | list[int \| float] | ✓ | Match rows where the column value falls in [low, high] (inclusive). |
1389
+ | `in` | list[Any] | ✓ | Match rows where the column value is in this list. |
1390
+ | `is_null` | bool | ✓ | Match null rows (true) or non-null rows (false). |
1391
+ | `default` | enum: "True" | ✓ | Catch-all rule that matches any row not matched by earlier rules. Must be the last entry. |
1392
+ | `background` | str | ✓ | Cell background color applied when the rule matches. |
1393
+ | `font` | [FontStyle](#fontstyle) | ✓ | Font style overrides (color, weight, style, decoration) applied when the rule matches. |
1394
+ | `glyph` | str | ✓ | Glyph character prepended to the cell value when the rule matches. |
1395
+ | `glyph_color` | str | ✓ | Color for the glyph when the rule matches. Requires glyph to be set. |
1396
+
1397
+ <a id="chartdatatablesource"></a>
1398
+ ## ChartDataTableSource
1399
+ A data_table row that reads a column's raw per-x value.
1400
+
1401
+ | Field | Type | Optional | Description |
1402
+ |-------|------|:--------:|-------------|
1403
+ | `source` | str | | Query column the row reads from (per-x raw value). |
1404
+ | `format` | str | ✓ | D3-style format string (Vega-Lite format parity). Optional. |
1405
+ | `label` | str | ✓ | Left-stub row label. Optional. |
1406
+
1407
+ <a id="chartdatatableaggregate"></a>
1408
+ ## ChartDataTableAggregate
1409
+ A data_table row that reads an aggregate of a column grouped by x.
1410
+
1411
+ | Field | Type | Optional | Description |
1412
+ |-------|------|:--------:|-------------|
1413
+ | `aggregate` | enum: "sum", "avg", "min", "max", "median", "count", "count_distinct" | | Aggregate operation applied per x-group. One of: sum, avg, min, max, median, count, count_distinct. Exact names only — no aliases (spec G4). |
1414
+ | `source` | str | | Query column being aggregated. Always required alongside `aggregate:` (spec G2). |
1415
+ | `format` | str | ✓ | D3-style format string for the aggregated value. |
1416
+ | `label` | str | ✓ | Column header label override for this row. |
1417
+
1418
+ <a id="chartdatatableperseries"></a>
1419
+ ## ChartDataTablePerSeries
1420
+ A data_table entry that expands into one row per color: series.
1421
+
1422
+ | Field | Type | Optional | Description |
1423
+ |-------|------|:--------:|-------------|
1424
+ | `per_series` | str | | Query column the row reads from (per-x, per-series value). |
1425
+ | `by_measure` | bool | ✓ | When True, expand one row reading the named measure field directly (no color: groupby). Required for multi-y charts where each measure is its own y-field rather than a color-encoded series. |
1426
+ | `label` | str | ✓ | Row label displayed in the strip's label gutter. When None and by_measure=True, the per_series field name is used. Has no effect when by_measure=False (series name is the label). |
1427
+ | `format` | str | ✓ | D3-style format string (Vega-Lite format parity). Optional. |
1428
+
1429
+ <a id="fontstyle"></a>
1430
+ ## FontStyle
1431
+ Text appearance. Cascades as a unit (ADR-005: color inside font).
1432
+
1433
+ | Field | Type | Optional | Description |
1434
+ |-------|------|:--------:|-------------|
1435
+ | `family` | str | ✓ | Font family name (e.g., 'sans-serif', 'Roboto'). |
1436
+ | `color` | str | ✓ | Text color as a CSS color string. |
1437
+ | `size` | float | ✓ | Font size in pixels. |
1438
+ | `weight` | str \| float | ✓ | Font weight (e.g., 'bold', 400, 700). |
1439
+ | `style` | enum: "normal", "italic" | ✓ | Font style (normal or italic). |
1440
+ | `decoration` | enum: "none", "line-through", "underline" | ✓ | Text decoration (underline, line-through, or none). |
1441
+ | `case` | enum: "none", "sentence", "title", "upper", "lower", "slug", "camel" | ✓ | Letter-case transform applied at render time. 'title' uses Chicago/Gruber rules and preserves tokens with internal capitals (ARR, iPhone). 'sentence' uppercases only the first character. 'none' (default) emits the string without any letter-case change. |
1442
+
1443
+ <a id="paddingstyle"></a>
1444
+ ## PaddingStyle
1445
+ Authored overlay for PaddingStyle. Per-chart padding inset (px). All 4 sides required; theme YAML supplies defaults.
1446
+
1447
+ | Field | Type | Optional | Description |
1448
+ |-------|------|:--------:|-------------|
1449
+ | `left` | float | ✓ | Left padding in pixels. |
1450
+ | `right` | float | ✓ | Right padding in pixels. |
1451
+ | `top` | float | ✓ | Top padding in pixels. |
1452
+ | `bottom` | float | ✓ | Bottom padding in pixels. |
1453
+
1454
+ <a id="inferencestyle"></a>
1455
+ ## InferenceStyle
1456
+ Authored overlay for InferenceStyle.
1457
+
1458
+ | Field | Type | Optional | Description |
1459
+ |-------|------|:--------:|-------------|
1460
+ | `infer_zero_when_missing` | bool | ✓ | Auto-infer zero-baseline when not authored. |
1461
+ | `infer_fields_when_missing` | bool | ✓ | Auto-infer chart fields (x, y, etc.) when not authored. |
1462
+ | `infer_type_when_auto` | bool | ✓ | Auto-infer chart type when type is 'auto'. |
1463
+
1464
+ <a id="legendstyle"></a>
1465
+ ## LegendStyle
1466
+ Authored overlay for LegendStyle.
1467
+
1468
+ | Field | Type | Optional | Description |
1469
+ |-------|------|:--------:|-------------|
1470
+ | `orient` | str | ✓ | Legend orientation (e.g. 'right', 'bottom'). |
1471
+ | `direction` | str | ✓ | Legend layout direction ('vertical' or 'horizontal'). |
1472
+ | `label` | [LegendElementStyle](#legendelementstyle) | ✓ | Legend label style. |
1473
+ | `title` | [LegendElementStyle](#legendelementstyle) | ✓ | Legend title style. |
1474
+ | `disable` | bool | ✓ | Suppress the legend entirely; None means legend is visible. |
1475
+ | `interactive_legend` | bool | ✓ | Emit a dft_legend point-selection param for single-click series toggle. |
1476
+
1477
+ <a id="tooltipstyle"></a>
1478
+ ## TooltipStyle
1479
+ Authored overlay for TooltipStyle. Tooltip rendering defaults.
1480
+
1481
+ | Field | Type | Optional | Description |
1482
+ |-------|------|:--------:|-------------|
1483
+ | `format` | str | ✓ | Default tooltip value format string; theme always provides this. |
1484
+
1485
+ <a id="stylecolorconfig"></a>
1486
+ ## StyleColorConfig
1487
+ Chart-local style color: gradient scale for the color channel.
1488
+
1489
+ | Field | Type | Description |
1490
+ |-------|------|-------------|
1491
+ | `scale` | [ScaleTargetConfig](#scaletargetconfig) | Continuous color scale applied to the chart's color channel. |
1492
+
1493
+ <a id="axisstyle"></a>
1494
+ ## AxisStyle
1495
+ Authored overlay for AxisStyle.
1496
+
1497
+ | Field | Type | Optional | Description |
1498
+ |-------|------|:--------:|-------------|
1499
+ | `grid` | [AxisGridStyle](#axisgridstyle) | ✓ | Grid line style for this axis. |
1500
+ | `domain` | [AxisDomainStyle](#axisdomainstyle) | ✓ | Domain line style for this axis. |
1501
+ | `ticks` | [AxisTicksStyle](#axisticksstyle) | ✓ | Tick mark style for this axis. |
1502
+ | `label` | [AxisElementStyle](#axiselementstyle) | ✓ | Axis label style. |
1503
+ | `title` | [AxisElementStyle](#axiselementstyle) | ✓ | Axis title style. |
1504
+ | `orient` | enum: "left", "right", "top", "bottom", "auto" | ✓ | Axis orientation; auto flips y-axis when endpoint labels are present. |
1505
+ | `categorical_orient` | str | ✓ | Orientation for categorical y-axis (e.g. 'left'); None skips this VL property. |
1506
+ | `band_position` | float | ✓ | Band position within the step (0–1); None uses Vega-Lite's default. |
1507
+ | `offset` | float | ✓ | Pixel offset of the axis from its default position; None means no offset. |
1508
+ | `format` | str | ✓ | Tick value format string; None uses auto-format. |
1509
+ | `values` | list | ✓ | Explicit tick values; None uses Vega-Lite's auto tick values. |
1510
+ | `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. |
1511
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Per-axis scale overrides; None means no override. |
1512
+ | `type` | enum: "auto", "ordinal", "temporal" | ✓ | Scale type for bucketed-time x-axes; None/'auto' infers from time_unit grain. |
1513
+ | `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). |
1514
+
1515
+ <a id="scalestyle"></a>
1516
+ ## ScaleStyle
1517
+ Authored overlay for ScaleStyle. Scale configuration primitive.
1518
+
1519
+ | Field | Type | Optional | Description |
1520
+ |-------|------|:--------:|-------------|
1521
+ | `band_padding_inner` | float | ✓ | Inner padding fraction for band scales; None uses Vega-Lite's default. |
1522
+ | `band_padding_outer` | float | ✓ | Outer padding fraction for band scales; None uses Vega-Lite's default. |
1523
+ | `point_padding` | float | ✓ | Padding fraction for point scales; None uses Vega-Lite's default. |
1524
+ | `rect_band_padding_inner` | float | ✓ | Inner padding fraction for rect band scales; None uses Vega-Lite's default. |
1525
+ | `round` | bool | ✓ | Round scale outputs to nearest integer; None uses Vega-Lite's default (no rounding). |
1526
+ | `zero` | bool | ✓ | Force scale to include zero; None uses Vega-Lite's default. |
1527
+ | `clamp` | bool | ✓ | Clamp values to scale domain; None uses Vega-Lite's default (no clamping). |
1528
+ | `continuous_padding` | float | ✓ | Padding in pixels for continuous scales; None uses Vega-Lite's default. |
1529
+ | `band` | [ScaleBandStyle](#scalebandstyle) | ✓ | Band mark size constraints; None uses Vega-Lite's defaults. |
1530
+ | `quantile_count` | int | ✓ | Number of quantile buckets; None uses Vega-Lite's default. |
1531
+ | `quantize_count` | int | ✓ | Number of quantize buckets; None uses Vega-Lite's default. |
1532
+ | `use_unaggregated_domain` | bool | ✓ | Use unaggregated domain for scale extent; None uses Vega-Lite's default. |
1533
+ | `x_reverse` | bool | ✓ | Reverse the x-axis scale direction; None means no reversal. |
1534
+ | `type` | str | ✓ | Scale type override; None lets Vega-Lite infer from field type. |
1535
+ | `domain` | list | ✓ | Explicit scale domain values; None lets Vega-Lite auto-determine from data. |
1536
+ | `nice` | bool | ✓ | Round scale domain to nice values; None uses Vega-Lite's default. |
1537
+ | `padding` | float | ✓ | Unified scale padding shortcut; dispatches to band, point, or continuous padding per scale type. |
1538
+
1539
+ <a id="datatablestyle"></a>
1540
+ ## DataTableStyle
1541
+ Authored overlay for DataTableStyle. Attached data_table style. Lives at style.charts.data_table.*.
1542
+
1543
+ | Field | Type | Optional | Description |
1544
+ |-------|------|:--------:|-------------|
1545
+ | `font` | [FontStyle](#fontstyle) | ✓ | Data_table font style overrides. |
1546
+ | `divider` | [RuleStyle](#rulestyle) | ✓ | Rule at the boundary between the chart plot and the data strip. For position='bottom': rule sits above the strip (below the axis). For position='top': rule sits below the strip rows (above the plot top). |
1547
+ | `row` | [DataTableRowStyle](#datatablerowstyle) | ✓ | Data_table row padding and rule style. |
1548
+ | `label` | [DataTableLabelStyle](#datatablelabelstyle) | ✓ | Row label (series name) style. |
1549
+ | `number_align` | enum: "left", "right", "decimal" | ✓ | Alignment of numeric values in data_table cells. |
1550
+ | `padding_top` | float | ✓ | Padding above the topmost strip row in pixels. For position='bottom': gap between axis labels and the first row. For position='top': space above the topmost row (outer edge of strip). |
1551
+ | `padding_bottom` | float | ✓ | Padding below the last strip row in pixels. For position='bottom': space below the last row. For position='top': gap between the last row and the plot top edge. |
1552
+ | `label_max_lines` | int | ✓ | Number of x-axis label lines to reserve in the axis gap (only used for position='bottom'; ignored for position='top'). Typically 1 or 2. |
1553
+ | `position` | enum: "top", "bottom" | ✓ | Strip placement relative to the chart plot. 'top' places the strip above the plot (no x-axis gap needed); 'bottom' places it below with the x-axis between plot and strip. |
1554
+
1555
+ <a id="endpointlabelsconfig"></a>
1556
+ ## EndpointLabelsConfig
1557
+ Authored overlay for EndpointLabelsConfig. Endpoint label pane config — shared across line, area, and bar.
1558
+
1559
+ | Field | Type | Optional | Description |
1560
+ |-------|------|:--------:|-------------|
1561
+ | `visible` | bool | ✓ | Show endpoint labels; theme sets false, authors opt in per chart. |
1562
+ | `label_offset` | float | ✓ | Spacing in pixels between the chart pane and the label pane. |
1563
+
1564
+ <a id="barchartmarksstyle"></a>
1565
+ ## BarChartMarksStyle
1566
+ Authored overlay for BarChartMarksStyle. Bar-family mark overrides. Only bar and text (endpoint labels) are valid.
1567
+
1568
+ | Field | Type | Optional | Description |
1569
+ |-------|------|:--------:|-------------|
1570
+ | `bar` | [BarMarkStyle](#barmarkstyle) | ✓ | Bar mark overrides for bar charts; None inherits global. |
1571
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides for bar endpoint labels; None inherits global. |
1572
+
1573
+ <a id="linechartmarksstyle"></a>
1574
+ ## LineChartMarksStyle
1575
+ Authored overlay for LineChartMarksStyle. Line-family mark overrides.
1576
+
1577
+ | Field | Type | Optional | Description |
1578
+ |-------|------|:--------:|-------------|
1579
+ | `line` | [LineMarkStyle](#linemarkstyle) | ✓ | Line mark overrides; None inherits global. |
1580
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Point mark overrides; None inherits global. |
1581
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides; None inherits global. |
1582
+ | `rule` | [RuleMarkStyle](#rulemarkstyle) | ✓ | Rule mark overrides; None inherits global. |
1583
+
1584
+ <a id="areachartmarksstyle"></a>
1585
+ ## AreaChartMarksStyle
1586
+ Authored overlay for AreaChartMarksStyle. Area-family mark overrides.
1587
+
1588
+ | Field | Type | Optional | Description |
1589
+ |-------|------|:--------:|-------------|
1590
+ | `area` | [AreaMarkStyle](#areamarkstyle) | ✓ | Area mark overrides; None inherits global. |
1591
+ | `line` | [LineMarkStyle](#linemarkstyle) | ✓ | Top-edge line mark overrides; None inherits global. |
1592
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Point mark overrides; None inherits global. |
1593
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides; None inherits global. |
1594
+
1595
+ <a id="scatterchartmarksstyle"></a>
1596
+ ## ScatterChartMarksStyle
1597
+ Authored overlay for ScatterChartMarksStyle. Scatter-family mark overrides.
1598
+
1599
+ | Field | Type | Optional | Description |
1600
+ |-------|------|:--------:|-------------|
1601
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Point mark overrides; None inherits global. |
1602
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides; None inherits global. |
1603
+
1604
+ <a id="heatmapchartmarksstyle"></a>
1605
+ ## HeatmapChartMarksStyle
1606
+ Authored overlay for HeatmapChartMarksStyle. Heatmap-family mark overrides.
1607
+
1608
+ | Field | Type | Optional | Description |
1609
+ |-------|------|:--------:|-------------|
1610
+ | `rect` | [RectMarkStyle](#rectmarkstyle) | ✓ | Rect mark overrides; None inherits global. |
1611
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides; None inherits global. |
1612
+
1613
+ <a id="totalstyle"></a>
1614
+ ## TotalStyle
1615
+ Authored overlay for TotalStyle. Donut center total paint: value (the number) and label (the caption).
1616
+
1617
+ | Field | Type | Optional | Description |
1618
+ |-------|------|:--------:|-------------|
1619
+ | `value` | [TotalSlotStyle](#totalslotstyle) | ✓ | Style for the donut center value (the number). |
1620
+ | `label` | [TotalSlotStyle](#totalslotstyle) | ✓ | Style for the donut center label (the caption). |
1621
+
1622
+ <a id="piechartmarksstyle"></a>
1623
+ ## PieChartMarksStyle
1624
+ Authored overlay for PieChartMarksStyle. Pie/donut-family mark overrides.
1625
+
1626
+ | Field | Type | Optional | Description |
1627
+ |-------|------|:--------:|-------------|
1628
+ | `slice` | [SliceMarkStyle](#slicemarkstyle) | ✓ | Slice mark overrides; None inherits global. |
1629
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Text mark overrides; None inherits global. |
1630
+
1631
+ <a id="kpivaluestyle"></a>
1632
+ ## KpiValueStyle
1633
+ Authored overlay for KpiValueStyle. KPI headline value slot: font. Theme populates font.size directly.
1634
+
1635
+ | Field | Type | Optional | Description |
1636
+ |-------|------|:--------:|-------------|
1637
+ | `font` | [FontStyle](#fontstyle) | ✓ | KPI value font style; cascades from kpi.font. |
1638
+
1639
+ <a id="kpislotstyle"></a>
1640
+ ## KpiSlotStyle
1641
+ Authored overlay for KpiSlotStyle. KPI per-slot style for label, affix, and glyph slots.
1642
+
1643
+ | Field | Type | Optional | Description |
1644
+ |-------|------|:--------:|-------------|
1645
+ | `font` | [FontStyle](#fontstyle) | ✓ | Slot font style; cascades from kpi.font. |
1646
+ | `character` | str | ✓ | Glyph character to render (e.g. '▲'). None = no glyph. |
1647
+
1648
+ <a id="kpitonesstyle"></a>
1649
+ ## KpiTonesStyle
1650
+ Authored overlay for KpiTonesStyle. Semantic tone palette for KPI value/glyph and (eventually) tables.
1651
+
1652
+ | Field | Type | Optional | Description |
1653
+ |-------|------|:--------:|-------------|
1654
+ | `positive` | str | ✓ | Color for positive/good tone indicators. |
1655
+ | `negative` | str | ✓ | Color for negative/bad tone indicators. |
1656
+ | `warning` | str | ✓ | Color for warning/caution tone indicators. |
1657
+
1658
+ <a id="tablerulestyle"></a>
1659
+ ## TableRuleStyle
1660
+ Authored overlay for TableRuleStyle. Table rule color override block.
1661
+
1662
+ | Field | Type | Optional | Description |
1663
+ |-------|------|:--------:|-------------|
1664
+ | `color` | str | ✓ | Table rule color; None uses the theme default. |
1665
+
1666
+ <a id="tablecolumnsstyle"></a>
1667
+ ## TableColumnsStyle
1668
+ Authored overlay for TableColumnsStyle.
1669
+
1670
+ | Field | Type | Optional | Description |
1671
+ |-------|------|:--------:|-------------|
1672
+ | `default_width` | float | ✓ | Default column width in pixels. |
1673
+ | `cell_padding` | float | ✓ | Horizontal padding inside table cells in pixels. |
1674
+ | `width_similarity_threshold` | float | ✓ | Auto-width columns whose min/max ratio >= this threshold are snapped to a shared width before budget allocation. 1.0 disables clustering; 0.0 forces all auto-columns to equal width. |
1675
+
1676
+ <a id="tableheaderstyle"></a>
1677
+ ## TableHeaderStyle
1678
+ Authored overlay for TableHeaderStyle.
1679
+
1680
+ | Field | Type | Optional | Description |
1681
+ |-------|------|:--------:|-------------|
1682
+ | `visible` | bool | ✓ | Show the header row (column labels + rule). Set to False on series-keyed tables where column meanings are obvious from context (e.g. donut-attached tables: swatch / share / name / value). Theme YAML supplies the UX default (true) via _base.yaml. |
1683
+ | `height` | float | ✓ | Header row height in pixels. |
1684
+ | `font` | [FontStyle](#fontstyle) | ✓ | Header font style overrides. |
1685
+ | `font_compact` | [FontStyle](#fontstyle) | ✓ | Compact-tier font overrides applied when body size ≤11px; None means no compact override. |
1686
+ | `background` | str | ✓ | Header background color; None means no fill (rule alone separates header from body). |
1687
+ | `overflow` | str | ✓ | Header text overflow mode (clip, truncate, wrap). |
1688
+ | `rule` | [RuleStyle](#rulestyle) | ✓ | Header bottom rule style. |
1689
+
1690
+ <a id="tablerowstyle"></a>
1691
+ ## TableRowStyle
1692
+ Authored overlay for TableRowStyle.
1693
+
1694
+ | Field | Type | Optional | Description |
1695
+ |-------|------|:--------:|-------------|
1696
+ | `height` | float | ✓ | Body row height in pixels. |
1697
+ | `stripe` | [TableRowStripeStyle](#tablerowstripestyle) | ✓ | Alternating row stripe style; None means no stripe. |
1698
+ | `rule` | [RuleStyle](#rulestyle) | ✓ | Row bottom rule style. |
1699
+ | `role` | str | ✓ | Default row role assignment; None means plain body row. |
1700
+ | `roles` | [TableRowRolesStyle](#tablerowrolesstyle) | ✓ | Per-role style overrides for summary and total rows. |
1701
+
1702
+ <a id="tablerownumbersstyle"></a>
1703
+ ## TableRowNumbersStyle
1704
+ Authored overlay for TableRowNumbersStyle. Leading row-number column (style.table.row_numbers).
1705
+
1706
+ | Field | Type | Optional | Description |
1707
+ |-------|------|:--------:|-------------|
1708
+ | `visible` | bool | ✓ | Show a leading row-number column; false by default. |
1709
+ | `header` | str | ✓ | Header label for the row-number column. |
1710
+ | `align` | enum: "left", "right" | ✓ | Text alignment for the row-number column. |
1711
+
1712
+ <a id="tabletitlestyle"></a>
1713
+ ## TableTitleStyle
1714
+ Authored overlay for TableTitleStyle.
1715
+
1716
+ | Field | Type | Optional | Description |
1717
+ |-------|------|:--------:|-------------|
1718
+ | `height` | float | ✓ | Table title row height in pixels. |
1719
+ | `font` | [FontStyle](#fontstyle) | ✓ | Table title font style overrides. |
1720
+
1721
+ <a id="paginationconfig"></a>
1722
+ ## PaginationConfig
1723
+ Authored overlay for PaginationConfig. Table pagination configuration.
1724
+
1725
+ | Field | Type | Optional | Description |
1726
+ |-------|------|:--------:|-------------|
1727
+ | `enabled` | bool | ✓ | Enable client-side pagination for table charts. |
1728
+ | `page_size` | int | ✓ | Rows per page. When enabled and None, the renderer auto-fits page size to the cell — set explicitly to pin the page size. |
1729
+
1730
+ <a id="tablecolumndefaultsconfig"></a>
1731
+ ## TableColumnDefaultsConfig
1732
+ Authored overlay for TableColumnDefaultsConfig. Table-level defaults applied to every column unless overridden per-column.
1733
+
1734
+ | Field | Type | Optional | Description |
1735
+ |-------|------|:--------:|-------------|
1736
+ | `label` | str | ✓ | Override column header label text. |
1737
+ | `width` | int \| str | ✓ | Override column width in pixels (integer) or a CSS width string. |
1738
+ | `align` | enum: "left", "center", "right" | ✓ | Override cell text alignment (left, center, or right). |
1739
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Override cell value format (D3 format string or format config object). |
1740
+ | `background` | str | ✓ | Override cell background color (CSS color string). |
1741
+ | `font` | [FontStyle](#fontstyle) | ✓ | Override cell font style (size, weight, color, family). |
1742
+
1743
+ <a id="paginatorstyle"></a>
1744
+ ## PaginatorStyle
1745
+ Authored overlay for PaginatorStyle. Visual style for the paginator control (chevrons + page numbers).
1746
+
1747
+ | Field | Type | Optional | Description |
1748
+ |-------|------|:--------:|-------------|
1749
+ | `color_active` | str | ✓ | Current page and live chevron colour (theme body ink). |
1750
+ | `color_inactive` | str | ✓ | Other pages and ellipsis colour (theme secondary text). |
1751
+ | `color_disabled` | str | ✓ | Chevron colour when at first/last page (signals disabled by tone). |
1752
+ | `font` | [FontStyle](#fontstyle) | ✓ | Paginator font overrides (size, family). |
1753
+ | `weight_active` | int | ✓ | Font weight for the current (selected) page number. |
1754
+ | `weight_inactive` | int | ✓ | Font weight for other pages and ellipsis. |
1755
+ | `weight_chevron` | int | ✓ | Font weight for the prev/next chevrons (live and disabled). Usually heavier than weight_active so the chevrons read as interactive affordances against the lighter page numbers. |
1756
+ | `item_width` | float | ✓ | Per-item slot width in pixels (drives layout step). |
1757
+
1758
+ <a id="tableedgestyle"></a>
1759
+ ## TableEdgeStyle
1760
+ Authored overlay for TableEdgeStyle. more_rows or empty_state edge-case UI.
1761
+
1762
+ | Field | Type | Optional | Description |
1763
+ |-------|------|:--------:|-------------|
1764
+ | `font` | [FontStyle](#fontstyle) | ✓ | Edge-case UI (more_rows / empty_state) font style overrides. |
1765
+
1766
+ <a id="sparkstyle"></a>
1767
+ ## SparkStyle
1768
+ Authored overlay for SparkStyle. Inline sparkline defaults (inside table cells).
1769
+
1770
+ | Field | Type | Optional | Description |
1771
+ |-------|------|:--------:|-------------|
1772
+ | `color` | str | ✓ | Sparkline line/point color; cascade-managed (inherits from style.accent). |
1773
+ | `padding` | [SpacingValues](#spacingvalues) | ✓ | Cell padding around the sparkline in pixels. |
1774
+ | `empty` | [SparkEmptyStyle](#sparkemptystyle) | ✓ | Style for empty/no-data sparklines. |
1775
+ | `single_value` | [SparkSingleValueStyle](#sparksinglevaluestyle) | ✓ | Style for single-data-point sparklines. |
1776
+ | `columns` | [SparkColumnsStyle](#sparkcolumnsstyle) | ✓ | Style for column-type sparklines. |
1777
+ | `bar` | [SparkBarCellStyle](#sparkbarcellstyle) | ✓ | Style for bar/bar-normalize sparklines. |
1778
+ | `area` | [SparkAreaStyle](#sparkareastyle) | ✓ | Style for area sparklines. |
1779
+
1780
+ <a id="subtitlestyle"></a>
1781
+ ## SubtitleStyle
1782
+ Authored overlay for SubtitleStyle. Subtitle font style for chart subtitles (Table, SparkBar).
1783
+
1784
+ | Field | Type | Optional | Description |
1785
+ |-------|------|:--------:|-------------|
1786
+ | `font` | [FontStyle](#fontstyle) | ✓ | Subtitle font style; theme populates font.size directly. |
1787
+
1788
+ <a id="projectionstyle"></a>
1789
+ ## ProjectionStyle
1790
+ Authored overlay for ProjectionStyle. Vega-Lite map projection configuration for geo chart families.
1791
+
1792
+ | Field | Type | Optional | Description |
1793
+ |-------|------|:--------:|-------------|
1794
+ | `type` | str | ✓ | Vega-Lite projection type (e.g. 'mercator', 'albersUsa', 'equalEarth'). |
1795
+
1796
+ <a id="basemapstyle"></a>
1797
+ ## BasemapStyle
1798
+ Authored overlay for BasemapStyle. Background map layer for geo charts (especially point maps).
1799
+
1800
+ | Field | Type | Optional | Description |
1801
+ |-------|------|:--------:|-------------|
1802
+ | `source` | str | ✓ | Background topo source identifier; None means no base layer. |
1803
+
1804
+ <a id="pointmapchartmarksstyle"></a>
1805
+ ## PointMapChartMarksStyle
1806
+ Authored overlay for PointMapChartMarksStyle. Point map-family mark overrides.
1807
+
1808
+ | Field | Type | Optional | Description |
1809
+ |-------|------|:--------:|-------------|
1810
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Point mark overrides; None inherits global. |
1811
+
1812
+ <a id="geoshapechartmarksstyle"></a>
1813
+ ## GeoshapeChartMarksStyle
1814
+ Authored overlay for GeoshapeChartMarksStyle. Geoshape-family mark overrides.
1815
+
1816
+ | Field | Type | Optional | Description |
1817
+ |-------|------|:--------:|-------------|
1818
+ | `geoshape` | [GeoshapeMarkStyle](#geoshapemarkstyle) | ✓ | Geoshape mark overrides; None inherits global. |
1819
+
1820
+ <a id="layeraxisystyle"></a>
1821
+ ## LayerAxisYStyle
1822
+ Per-layer y-axis settings on a layered chart.
1823
+
1824
+ | Field | Type | Optional | Description |
1825
+ |-------|------|:--------:|-------------|
1826
+ | `orient` | enum: "left", "right" | ✓ | Y-axis side for this layer (left or right). |
1827
+ | `title` | str | ✓ | Y-axis title override for this layer. |
1828
+
1829
+ <a id="layeredmarksstyle"></a>
1830
+ ## LayeredMarksStyle
1831
+ Per-mark-type style overrides for layered charts.
1832
+
1833
+ | Field | Type | Optional | Description |
1834
+ |-------|------|:--------:|-------------|
1835
+ | `bar` | [BarMarkStyle](#barmarkstyle) | ✓ | Bar mark overrides for bar layers. |
1836
+ | `line` | [LineMarkStyle](#linemarkstyle) | ✓ | Line mark overrides for line layers. |
1837
+ | `area` | [AreaMarkStyle](#areamarkstyle) | ✓ | Area mark overrides for area layers. |
1838
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Point/dot mark overrides shared across line and area layers. |
1839
+
1840
+ <a id="calloutelementstyle"></a>
1841
+ ## CalloutElementStyle
1842
+ Authored overlay for CalloutElementStyle. Font + y_offset for a callout title or message.
1843
+
1844
+ | Field | Type | Optional | Description |
1845
+ |-------|------|:--------:|-------------|
1846
+ | `font` | [FontStyle](#fontstyle) | ✓ | Element font style overrides. |
1847
+ | `y_offset` | float | ✓ | Vertical offset from the element's anchor in pixels. |
1848
+
1849
+ <a id="sparkbarbarstyle"></a>
1850
+ ## SparkBarBarStyle
1851
+ Authored overlay for SparkBarBarStyle. Bar geometry sub-block for SparkBarChartStyle.
1852
+
1853
+ | Field | Type | Optional | Description |
1854
+ |-------|------|:--------:|-------------|
1855
+ | `height` | float | ✓ | Height of each bar in pixels. |
1856
+ | `padding` | float | ✓ | Vertical padding between bars in pixels. |
1857
+ | `color` | str | ✓ | Bar fill color; cascade-managed (inherits from style.accent). |
1858
+ | `background` | str | ✓ | Bar track background color; cascade-managed (inherits from style.muted). |
1859
+
1860
+ <a id="sparkbarchartlabelstyle"></a>
1861
+ ## SparkBarChartLabelStyle
1862
+ Authored overlay for SparkBarChartLabelStyle. Category-label sub-block for SparkBarChartStyle.
1863
+
1864
+ | Field | Type | Optional | Description |
1865
+ |-------|------|:--------:|-------------|
1866
+ | `visible` | bool | ✓ | Show series label text next to bars. |
1867
+ | `width` | float | ✓ | Reserved width for bar label text in pixels. |
1868
+
1869
+ <a id="sparkbarcountstyle"></a>
1870
+ ## SparkBarCountStyle
1871
+ Authored overlay for SparkBarCountStyle. Count-value sub-block for SparkBarChartStyle.
1872
+
1873
+ | Field | Type | Optional | Description |
1874
+ |-------|------|:--------:|-------------|
1875
+ | `visible` | bool | ✓ | Show count/value text next to bars. |
1876
+ | `width` | float | ✓ | Reserved width for bar count text in pixels. |
1877
+
1878
+ <a id="foreachquery"></a>
1879
+ ## ForeachQuery
1880
+ Inline data source for compile-time foreach loops.
1881
+
1882
+ | Field | Type | Optional | Description |
1883
+ |-------|------|:--------:|-------------|
1884
+ | `data` | list[dict[str, Any]] | ✓ | Inline row data for compile-time iteration. |
1885
+ | `static_data` | list[dict[str, Any]] | ✓ | Alias for data; inline row data for compile-time iteration. |
1886
+
1887
+ <a id="titlewidthoffsetsstyle"></a>
1888
+ ## TitleWidthOffsetsStyle
1889
+ Authored overlay for TitleWidthOffsetsStyle. Additive level offsets applied to a face/chart title's heading level, by card pixel width.
1890
+
1891
+ | Field | Type | Optional | Description |
1892
+ |-------|------|:--------:|-------------|
1893
+ | `tiny` | int | ✓ | Level offset for the tiny tier (cards narrower than ~360px). |
1894
+ | `narrow` | int | ✓ | Level offset for the narrow tier (cards ~360–559px). |
1895
+ | `medium` | int | ✓ | Level offset for the medium tier (cards ~560–1099px). |
1896
+ | `wide` | int | ✓ | Level offset for the wide tier (cards ~1100px and up). |
1897
+
1898
+ <a id="titlepositionstyle"></a>
1899
+ ## TitlePositionStyle
1900
+ Authored overlay for TitlePositionStyle. Vega-Lite title positioning pass-throughs grouped as a sub-object.
1901
+
1902
+ | Field | Type | Optional | Description |
1903
+ |-------|------|:--------:|-------------|
1904
+ | `anchor` | str | ✓ | Title anchor position; theme always sets this. |
1905
+ | `angle` | float | ✓ | Title rotation angle in degrees; None lets Vega-Lite choose. |
1906
+ | `offset` | float | ✓ | Title offset from its anchor in pixels; None uses Vega-Lite's default. |
1907
+ | `baseline` | str | ✓ | Title text baseline alignment; None uses Vega-Lite's default. |
1908
+
1909
+ <a id="titlesubtitlestyle"></a>
1910
+ ## TitleSubtitleStyle
1911
+ Authored overlay for TitleSubtitleStyle. VL subtitle font pass-through, grouped for consistency with TitleStyle.font.
1912
+
1913
+ | Field | Type | Optional | Description |
1914
+ |-------|------|:--------:|-------------|
1915
+ | `font` | [FontStyle](#fontstyle) | ✓ | Subtitle font style overrides (color, family, size, weight). |
1916
+
1917
+ <a id="textcolumnstyle"></a>
1918
+ ## TextColumnStyle
1919
+ Authored overlay for TextColumnStyle. Multi-column layout for face body text (CSS column-count/gap/rule/width).
1920
+
1921
+ | Field | Type | Optional | Description |
1922
+ |-------|------|:--------:|-------------|
1923
+ | `number` | int | ✓ | Fixed column count. None = single column. |
1924
+ | `gap` | float | ✓ | Gap between columns in pixels. None = use layout gap token. |
1925
+ | `rule` | str | ✓ | CSS column-rule shorthand, e.g. '1px solid #e5e7eb'. None = no rule. |
1926
+ | `width` | float | ✓ | Minimum column width in pixels for auto-column-count derivation. |
1927
+
1928
+ <a id="placeholderoverlay"></a>
1929
+ ## PlaceholderOverlay
1930
+ Authored overlay for PlaceholderOverlay.
1931
+
1932
+ | Field | Type | Optional | Description |
1933
+ |-------|------|:--------:|-------------|
1934
+ | `text` | str | ✓ | Placeholder overlay text shown on empty charts. |
1935
+ | `background` | str | ✓ | Overlay background color. |
1936
+ | `font` | [FontStyle](#fontstyle) | ✓ | Overlay font style overrides. |
1937
+
1938
+ <a id="viewstyle"></a>
1939
+ ## ViewStyle
1940
+ Authored overlay for ViewStyle.
1941
+
1942
+ | Field | Type | Optional | Description |
1943
+ |-------|------|:--------:|-------------|
1944
+ | `stroke` | str | ✓ | Plot area border stroke color; None means no border. |
1945
+ | `continuous_width` | float | ✓ | Default plot width for continuous (quantitative) scales in pixels. |
1946
+ | `continuous_height` | float | ✓ | Default plot height for continuous (quantitative) scales in pixels. |
1947
+ | `discrete_width` | float | ✓ | Default plot width for discrete (ordinal/nominal) scales in pixels; None means auto. |
1948
+ | `discrete_height` | float | ✓ | Default plot height for discrete (ordinal/nominal) scales in pixels; None means auto. |
1949
+
1950
+ <a id="autosizestyle"></a>
1951
+ ## AutosizeStyle
1952
+ Authored overlay for AutosizeStyle.
1953
+
1954
+ | Field | Type | Optional | Description |
1955
+ |-------|------|:--------:|-------------|
1956
+ | `type` | str | ✓ | Vega-Lite autosize type (e.g. 'fit', 'fit-x', 'pad'). |
1957
+ | `contains` | str | ✓ | What the autosize dimensions include ('content' or 'padding'). |
1958
+ | `resize` | bool | ✓ | Recompute autosize on each render cycle. |
1959
+
1960
+ <a id="globalmarksstyle"></a>
1961
+ ## GlobalMarksStyle
1962
+ Authored overlay for GlobalMarksStyle. Global mark defaults: one <Mark>MarkStyle per VL mark type.
1963
+
1964
+ | Field | Type | Optional | Description |
1965
+ |-------|------|:--------:|-------------|
1966
+ | `bar` | [BarMarkStyle](#barmarkstyle) | ✓ | Global bar mark defaults. |
1967
+ | `line` | [LineMarkStyle](#linemarkstyle) | ✓ | Global line mark defaults. |
1968
+ | `area` | [AreaMarkStyle](#areamarkstyle) | ✓ | Global area mark defaults. |
1969
+ | `point` | [PointMarkStyle](#pointmarkstyle) | ✓ | Global point mark defaults. |
1970
+ | `slice` | [SliceMarkStyle](#slicemarkstyle) | ✓ | Global slice (arc/pie) mark defaults. |
1971
+ | `text` | [TextMarkStyle](#textmarkstyle) | ✓ | Global text mark defaults. |
1972
+ | `rule` | [RuleMarkStyle](#rulemarkstyle) | ✓ | Global rule mark defaults. |
1973
+ | `rect` | [RectMarkStyle](#rectmarkstyle) | ✓ | Global rect mark defaults. |
1974
+ | `circle` | [CircleMarkStyle](#circlemarkstyle) | ✓ | Global circle mark defaults. |
1975
+ | `square` | [SquareMarkStyle](#squaremarkstyle) | ✓ | Global square mark defaults. |
1976
+ | `tick` | [TickMarkStyle](#tickmarkstyle) | ✓ | Global tick mark defaults. |
1977
+ | `trail` | [TrailMarkStyle](#trailmarkstyle) | ✓ | Global trail mark defaults. |
1978
+ | `geoshape` | [GeoshapeMarkStyle](#geoshapemarkstyle) | ✓ | Global geoshape mark defaults. |
1979
+ | `image` | [ImageMarkStyle](#imagemarkstyle) | ✓ | Global image mark defaults. |
1980
+ | `boxplot` | [BoxplotMarkStyle](#boxplotmarkstyle) | ✓ | Global boxplot mark defaults. |
1981
+ | `errorbar` | [ErrorbarMarkStyle](#errorbarmarkstyle) | ✓ | Global errorbar mark defaults. |
1982
+ | `errorband` | [ErrorbandMarkStyle](#errorbandmarkstyle) | ✓ | Global errorband mark defaults. |
1983
+
1984
+ <a id="scatterchartstyle"></a>
1985
+ ## ScatterChartStyle
1986
+ Scatter chart style: chart-level fields + marks sub-block.
1987
+
1988
+ | Field | Type | Optional | Description |
1989
+ |-------|------|:--------:|-------------|
1990
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
1991
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
1992
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
1993
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
1994
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
1995
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1996
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1997
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1998
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1999
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
2000
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
2001
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
2002
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2003
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
2004
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2005
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
2006
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
2007
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
2008
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
2009
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
2010
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2011
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2012
+ | `scale` | ScaleStyle | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2013
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
2014
+ | `data_table` | DataTableStylePatch | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
2015
+ | `marks` | ScatterChartMarksStyle | ✓ | Scatter-family mark overrides. |
2016
+
2017
+ <a id="histogramchartstyle"></a>
2018
+ ## HistogramChartStyle
2019
+ Authored overlay for HistogramChartStyle. Histogram chart style.
2020
+
2021
+ | Field | Type | Optional | Description |
2022
+ |-------|------|:--------:|-------------|
2023
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
2024
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
2025
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
2026
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
2027
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
2028
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
2029
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
2030
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
2031
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
2032
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
2033
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
2034
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
2035
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2036
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
2037
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2038
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
2039
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
2040
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
2041
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
2042
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
2043
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2044
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2045
+ | `scale` | [ScaleStyle](#scalestyle) | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2046
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
2047
+ | `data_table` | [DataTableStyle](#datatablestyle) | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
2048
+ | `bin_maxbins` | int | ✓ | Maximum number of bins for auto-binning. |
2049
+ | `marks` | [HistogramChartMarksStyle](#histogramchartmarksstyle) | ✓ | Histogram-family mark overrides. |
2050
+
2051
+ <a id="boxplotchartstyle"></a>
2052
+ ## BoxplotChartStyle
2053
+ Boxplot chart style.
2054
+
2055
+ | Field | Type | Optional | Description |
2056
+ |-------|------|:--------:|-------------|
2057
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
2058
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
2059
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
2060
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
2061
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
2062
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
2063
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
2064
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
2065
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
2066
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
2067
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
2068
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
2069
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2070
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
2071
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2072
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
2073
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
2074
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
2075
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
2076
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
2077
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2078
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2079
+ | `scale` | ScaleStyle | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2080
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
2081
+ | `data_table` | DataTableStylePatch | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
2082
+ | `marks` | BoxplotChartMarksStyle | ✓ | Boxplot-family mark overrides. |
2083
+
2084
+ <a id="errorbarchartstyle"></a>
2085
+ ## ErrorbarChartStyle
2086
+ Error bar chart style.
2087
+
2088
+ | Field | Type | Optional | Description |
2089
+ |-------|------|:--------:|-------------|
2090
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
2091
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
2092
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
2093
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
2094
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
2095
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
2096
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
2097
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
2098
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
2099
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
2100
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
2101
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
2102
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2103
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
2104
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2105
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
2106
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
2107
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
2108
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
2109
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
2110
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2111
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2112
+ | `scale` | ScaleStyle | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2113
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
2114
+ | `data_table` | DataTableStylePatch | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
2115
+ | `marks` | ErrorbarChartMarksStyle | ✓ | Errorbar-family mark overrides. |
2116
+
2117
+ <a id="errorbandchartstyle"></a>
2118
+ ## ErrorbandChartStyle
2119
+ Error band chart style.
2120
+
2121
+ | Field | Type | Optional | Description |
2122
+ |-------|------|:--------:|-------------|
2123
+ | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
2124
+ | `aspect_ratio` | float | ✓ | Chart aspect ratio (width/height). |
2125
+ | `min_height` | float | ✓ | Minimum chart height in pixels. |
2126
+ | `max_height` | float | ✓ | Maximum chart height in pixels. |
2127
+ | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
2128
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
2129
+ | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
2130
+ | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
2131
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
2132
+ | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
2133
+ | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
2134
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
2135
+ | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
2136
+ | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
2137
+ | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
2138
+ | `axis` | [AxisStyle](#axisstyle) | ✓ | Override applied to both x and y axes; None inherits global axis defaults. |
2139
+ | `axis_x` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type x-axis style overrides; None inherits global axis defaults. |
2140
+ | `axis_y` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type y-axis style overrides; None inherits global axis defaults. |
2141
+ | `axis_quantitative` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type quantitative-axis overrides; None inherits global defaults. |
2142
+ | `axis_band` | [AxisStyle](#axisstyle) | ✓ | Per-chart-type categorical (band) axis overrides; None inherits global band defaults. |
2143
+ | `number_format` | str | ✓ | Default number format for axes and tooltips (D3 format string); None inherits from theme. |
2144
+ | `time_format` | str | ✓ | Default time format for temporal axes (D3 time format string); None inherits from theme. |
2145
+ | `scale` | ScaleStyle | ✓ | Chart-type encoding scale overrides applied to both x and y; None means no override. |
2146
+ | `range` | RangeStylePatch | ✓ | Color range/palette overrides for this chart type; None means no override. |
2147
+ | `data_table` | DataTableStylePatch | ✓ | Per-chart-type data_table style override; None uses the universal style.charts.data_table. |
2148
+ | `marks` | ErrorbandChartMarksStyle | ✓ | Errorband-family mark overrides. |
2149
+
2150
+ <a id="serieslabelstyle"></a>
2151
+ ## SeriesLabelStyle
2152
+ Authored overlay for SeriesLabelStyle. Series-label primitive — typography for any text mark that names a
2153
+
2154
+ | Field | Type | Optional | Description |
2155
+ |-------|------|:--------:|-------------|
2156
+ | `font` | [FontStyle](#fontstyle) | ✓ | Series label font style overrides; cascade fills missing fields from charts.font. |
2157
+
2158
+ <a id="layoutgapstyle"></a>
2159
+ ## LayoutGapStyle
2160
+ Authored overlay for LayoutGapStyle.
2161
+
2162
+ | Field | Type | Optional | Description |
2163
+ |-------|------|:--------:|-------------|
2164
+ | `gap` | float | ✓ | Gap between layout items in pixels. |
2165
+
2166
+ <a id="gridlayoutstyle"></a>
2167
+ ## GridLayoutStyle
2168
+ Authored overlay for GridLayoutStyle.
2169
+
2170
+ | Field | Type | Optional | Description |
2171
+ |-------|------|:--------:|-------------|
2172
+ | `columns` | int | ✓ | Number of columns in the grid layout. |
2173
+ | `gap` | float | ✓ | Gap between grid cells in pixels. |
2174
+
2175
+ <a id="tabsstyle"></a>
2176
+ ## TabsStyle
2177
+ Authored overlay for TabsStyle.
2178
+
2179
+ | Field | Type | Optional | Description |
2180
+ |-------|------|:--------:|-------------|
2181
+ | `bar_height` | float | ✓ | Tab bar height in pixels. |
2182
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Tab bar border style. |
2183
+ | `font` | [FontStyle](#fontstyle) | ✓ | Tab label font style overrides. |
2184
+ | `active_weight` | str | ✓ | Font weight for the active tab label. |
2185
+ | `inactive_weight` | str | ✓ | Font weight for inactive tab labels. |
2186
+ | `title_baseline_offset` | float | ✓ | Vertical offset to align SVG tab label baseline in pixels. |
2187
+
2188
+ <a id="detailsstyle"></a>
2189
+ ## DetailsStyle
2190
+ Authored overlay for DetailsStyle.
2191
+
2192
+ | Field | Type | Optional | Description |
2193
+ |-------|------|:--------:|-------------|
2194
+ | `summary_height` | float | ✓ | Height of the details summary (collapsed) row in pixels. |
2195
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Details element border style. |
2196
+ | `font` | [FontStyle](#fontstyle) | ✓ | Details summary font style overrides. |
2197
+ | `arrow` | [DetailsArrowStyle](#detailsarrowstyle) | ✓ | Expand/collapse arrow glyph layout and font style. |
2198
+ | `label_x` | float | ✓ | X position of the details summary label text in pixels. |
2199
+ | `text_baseline_offset` | float | ✓ | Vertical offset to align SVG details text baseline in pixels. |
2200
+ | `content_y_offset` | float | ✓ | Y offset of the expanded details content area in pixels. |
2201
+
2202
+ <a id="variableslabelstyle"></a>
2203
+ ## VariablesLabelStyle
2204
+ Authored overlay for VariablesLabelStyle. Per-label font substyle for variable controls. Cascades from variables.font.
2205
+
2206
+ | Field | Type | Optional | Description |
2207
+ |-------|------|:--------:|-------------|
2208
+ | `font` | [FontStyle](#fontstyle) | ✓ | Variable label font style overrides. |
2209
+
2210
+ <a id="variablesvaluestyle"></a>
2211
+ ## VariablesValueStyle
2212
+ Authored overlay for VariablesValueStyle. Per-value font substyle for variable controls. Cascades from variables.font.
2213
+
2214
+ | Field | Type | Optional | Description |
2215
+ |-------|------|:--------:|-------------|
2216
+ | `font` | [FontStyle](#fontstyle) | ✓ | Variable value font style overrides. |
2217
+ | `numeric_variant` | enum: "normal", "tabular-nums" | ✓ | OpenType numeric feature for value displays ('normal' or 'tabular-nums'). |
2218
+
2219
+ <a id="variablesplaceholderstyle"></a>
2220
+ ## VariablesPlaceholderStyle
2221
+ Authored overlay for VariablesPlaceholderStyle. Per-placeholder font substyle for variable controls.
2222
+
2223
+ | Field | Type | Optional | Description |
2224
+ |-------|------|:--------:|-------------|
2225
+ | `font` | [FontStyle](#fontstyle) | ✓ | Variable placeholder-text font style overrides. |
2226
+
2227
+ <a id="inputstyle"></a>
2228
+ ## InputStyle
2229
+ Authored overlay for InputStyle.
2230
+
2231
+ | Field | Type | Optional | Description |
2232
+ |-------|------|:--------:|-------------|
2233
+ | `height` | float | ✓ | Input control height in pixels. |
2234
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Input border style. |
2235
+ | `focus_color` | str | ✓ | Input focus ring color; cascade-managed (inherits from style.accent). |
2236
+ | `background` | str | ✓ | Input background color. |
2237
+ | `padding` | [SpacingValues](#spacingvalues) | ✓ | Input inner padding in pixels. |
2238
+ | `widths` | [InputWidths](#inputwidths) | ✓ | Per-input-type default widths. |
2239
+ | `range` | [RangeDefaults](#rangedefaults) | ✓ | Range input default min/max/step values. |
2240
+
2241
+ <a id="legendelementstyle"></a>
2242
+ ## LegendElementStyle
2243
+ Authored overlay for LegendElementStyle.
2244
+
2245
+ | Field | Type | Optional | Description |
2246
+ |-------|------|:--------:|-------------|
2247
+ | `font` | [FontStyle](#fontstyle) | ✓ | Legend element font style overrides. |
2248
+ | `padding` | float | ✓ | Padding between legend symbol and element text in pixels. |
2249
+
2250
+ <a id="scaletargetconfig"></a>
2251
+ ## ScaleTargetConfig
2252
+ Scale configuration for a single style target (background or color).
2253
+
2254
+ | Field | Type | Optional | Description |
2255
+ |-------|------|:--------:|-------------|
2256
+ | `palette` | list[str] \| list[float] \| str | | Color palette: CSS color list for categorical, float list for relative stops, or a named Vega scheme. |
2257
+ | `domain` | enum: "data" | ✓ | Scale domain source ('data' uses the data extent; None uses explicit min/max). |
2258
+ | `min` | float \| int | ✓ | Minimum scale domain value (overrides data minimum). |
2259
+ | `max` | float \| int | ✓ | Maximum scale domain value (overrides data maximum). |
2260
+ | `null_color` | str | ✓ | Color assigned to null values. |
2261
+ | `hinge` | enum: "auto" | ✓ | Diverging scale midpoint value, or 'auto' to use the data midpoint. |
2262
+ | `arm_mode` | enum: "asymmetric", "symmetric" | ✓ | How diverging scale arms are stretched: 'asymmetric' (proportional) or 'symmetric' (equal arms). |
2263
+
2264
+ <a id="axisgridstyle"></a>
2265
+ ## AxisGridStyle
2266
+ Authored overlay for AxisGridStyle.
2267
+
2268
+ | Field | Type | Optional | Description |
2269
+ |-------|------|:--------:|-------------|
2270
+ | `visible` | bool | ✓ | Show grid lines; None inherits from parent axis. |
2271
+ | `opacity` | float | ✓ | Grid line opacity; None uses Vega-Lite's default. |
2272
+ | `width` | float | ✓ | Grid line width in pixels; None uses Vega-Lite's default. |
2273
+ | `color` | str | ✓ | Grid line color; None uses Vega-Lite's default. |
2274
+ | `dash` | list[float] | ✓ | Dash pattern for grid lines; None renders a solid line. |
2275
+ | `zero` | [AxisGridZeroStyle](#axisgridzerostyle) | ✓ | Zero-baseline gridline style; None inherits from parent axis. |
2276
+
2277
+ <a id="axisdomainstyle"></a>
2278
+ ## AxisDomainStyle
2279
+ Authored overlay for AxisDomainStyle.
2280
+
2281
+ | Field | Type | Optional | Description |
2282
+ |-------|------|:--------:|-------------|
2283
+ | `visible` | bool | ✓ | Show the axis domain line; None inherits from parent axis. |
2284
+ | `width` | float | ✓ | Domain line width in pixels; None uses Vega-Lite's default. |
2285
+ | `color` | str | ✓ | Domain line color; None uses Vega-Lite's default. |
2286
+
2287
+ <a id="axisticksstyle"></a>
2288
+ ## AxisTicksStyle
2289
+ Authored overlay for AxisTicksStyle.
2290
+
2291
+ | Field | Type | Optional | Description |
2292
+ |-------|------|:--------:|-------------|
2293
+ | `visible` | bool | ✓ | Show axis ticks; None inherits from parent axis. |
2294
+ | `color` | str | ✓ | Tick color; None uses Vega-Lite's default. |
2295
+ | `size` | float | ✓ | Tick length in pixels; None uses Vega-Lite's default. |
2296
+ | `width` | float | ✓ | Tick stroke width in pixels; None uses Vega-Lite's default. |
2297
+ | `count` | int | ✓ | Target number of quantitative y-axis ticks. When set, the renderer computes explicit tickValues so VL emits exactly this many ticks — VL's tickCount is advisory and frequently ignored. |
2298
+
2299
+ <a id="axiselementstyle"></a>
2300
+ ## AxisElementStyle
2301
+ Authored overlay for AxisElementStyle. Axis label or title: font + padding + VL-passthrough.
2302
+
2303
+ | Field | Type | Optional | Description |
2304
+ |-------|------|:--------:|-------------|
2305
+ | `font` | [FontStyle](#fontstyle) | ✓ | Axis element font style overrides. |
2306
+ | `padding` | float | ✓ | Padding between axis labels and ticks in pixels; None inherits from parent axis. |
2307
+ | `max_width` | float | ✓ | Maximum label width in pixels; None uses Vega-Lite's default (180px). |
2308
+ | `angle` | float | ✓ | Label rotation angle in degrees; None uses Vega-Lite's default. |
2309
+ | `align` | str | ✓ | Horizontal text alignment of labels; None uses Vega-Lite's default. |
2310
+ | `baseline` | str | ✓ | Vertical text baseline of labels; None uses Vega-Lite's default. |
2311
+ | `overlap` | enum: "smart", "parity", "greedy", "allow" | ✓ | Label overlap reduction strategy; None uses Vega-Lite's per-scale default. |
2312
+ | `separation` | float | ✓ | Minimum pixel separation between labels; None uses Vega-Lite's default (0px). |
2313
+ | `visible` | bool | ✓ | Show axis labels; None uses Vega-Lite's default (labels shown). |
2314
+ | `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. |
2315
+ | `expr` | str | ✓ | Custom Vega expression for label text; None uses smart temporal defaults when applicable. |
2316
+ | `bound` | bool \| float | ✓ | Hide labels that overflow the axis range; None uses Vega-Lite's default. |
2317
+ | `flush` | bool \| float | ✓ | Align first/last label flush with the scale range; None uses Vega-Lite's default. |
2318
+ | `offset` | float | ✓ | Pixel offset of the label from its tick anchor; None uses Vega-Lite's default. |
2319
+ | `line_height` | float | ✓ | Line height for multi-line labels in pixels; None uses Vega-Lite's default. |
2320
+ | `anchor` | enum: "start", "middle", "end" | ✓ | Label anchor position; None uses Vega-Lite's default. |
2321
+ | `tilt_increments` | list[float] | ✓ | Descending tilt angles for smart label overlap on discrete x-axes; None disables the picker. |
2322
+
2323
+ <a id="scalebandstyle"></a>
2324
+ ## ScaleBandStyle
2325
+ Authored overlay for ScaleBandStyle. Band mark size constraints (min/max pixel width for band-scale marks).
2326
+
2327
+ | Field | Type | Optional | Description |
2328
+ |-------|------|:--------:|-------------|
2329
+ | `min_size` | float | ✓ | Minimum band mark width in pixels; None uses Vega-Lite's default. |
2330
+ | `max_size` | float | ✓ | Maximum band mark width in pixels; None uses Vega-Lite's default. |
2331
+
2332
+ <a id="rulestyle"></a>
2333
+ ## RuleStyle
2334
+ Authored overlay for RuleStyle. Shared rule-line primitive: width, color, continuous mode.
2335
+
2336
+ | Field | Type | Optional | Description |
2337
+ |-------|------|:--------:|-------------|
2338
+ | `width` | float | ✓ | Rule line width in pixels. |
2339
+ | `color` | str | ✓ | Rule color; None inherits from theme. |
2340
+ | `continuous` | bool | ✓ | Draw a continuous full-width rule (true) or only under columns (false). |
2341
+
2342
+ <a id="datatablerowstyle"></a>
2343
+ ## DataTableRowStyle
2344
+ Authored overlay for DataTableRowStyle.
2345
+
2346
+ | Field | Type | Optional | Description |
2347
+ |-------|------|:--------:|-------------|
2348
+ | `padding` | [DataTableRowPaddingStyle](#datatablerowpaddingstyle) | ✓ | Row padding style. |
2349
+ | `rule` | [RuleStyle](#rulestyle) | ✓ | Row bottom rule style. |
2350
+
2351
+ <a id="datatablelabelstyle"></a>
2352
+ ## DataTableLabelStyle
2353
+ Authored overlay for DataTableLabelStyle. Row label styling.
2354
+
2355
+ | Field | Type | Optional | Description |
2356
+ |-------|------|:--------:|-------------|
2357
+ | `font` | [FontStyle](#fontstyle) | ✓ | Row label font style overrides. |
2358
+
2359
+ <a id="barmarkstyle"></a>
2360
+ ## BarMarkStyle
2361
+ Authored overlay for BarMarkStyle. Bar mark geometry and stroke. Chart-level bar fields live on BarChartStyle.
2362
+
2363
+ | Field | Type | Optional | Description |
2364
+ |-------|------|:--------:|-------------|
2365
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Bar border style (color/width also serve as the bar stroke). |
2366
+ | `padding` | float | ✓ | Padding around bar marks in pixels. |
2367
+ | `size` | float | ✓ | Bar width in pixels (fixed-width mode). |
2368
+ | `band_width` | float | ✓ | Bar width as a fraction of the band step (0–1). |
2369
+
2370
+ <a id="textmarkstyle"></a>
2371
+ ## TextMarkStyle
2372
+ Authored overlay for TextMarkStyle.
2373
+
2374
+ | Field | Type | Optional | Description |
2375
+ |-------|------|:--------:|-------------|
2376
+ | `font` | [FontStyle](#fontstyle) | ✓ | Text mark font style overrides. |
2377
+ | `align` | str | ✓ | Horizontal text alignment for text marks. |
2378
+
2379
+ <a id="linemarkstyle"></a>
2380
+ ## LineMarkStyle
2381
+ Authored overlay for LineMarkStyle. Line mark stroke, interpolation, and halo. Point mark lives on PointMarkStyle.
2382
+
2383
+ | Field | Type | Optional | Description |
2384
+ |-------|------|:--------:|-------------|
2385
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Line stroke style. |
2386
+ | `curve` | str | ✓ | Line interpolation curve (e.g. 'linear', 'monotone'). |
2387
+ | `halo_multiplier` | float | ✓ | Halo stroke width multiplier relative to stroke.width; 0 disables the halo. |
2388
+
2389
+ <a id="pointmarkstyle"></a>
2390
+ ## PointMarkStyle
2391
+ Authored overlay for PointMarkStyle. Point mark style (data-point markers on line/area/scatter charts).
2392
+
2393
+ | Field | Type | Optional | Description |
2394
+ |-------|------|:--------:|-------------|
2395
+ | `size` | float | ✓ | Point size in square pixels; 0 disables points on line charts. |
2396
+ | `color` | str | ✓ | Point color; None inherits the series color. |
2397
+ | `shape` | str | ✓ | Point shape (e.g. 'circle', 'square'); None uses VL default. |
2398
+ | `opacity` | float | ✓ | Point opacity 0–1; None uses VL default. |
2399
+ | `filled` | bool | ✓ | Whether points are filled; None uses VL default. |
2400
+ | `fill` | str | ✓ | Point interior fill color; only applied when filled=false. |
2401
+
2402
+ <a id="rulemarkstyle"></a>
2403
+ ## RuleMarkStyle
2404
+ Authored overlay for RuleMarkStyle. Rule (reference line) mark opacity and stroke.
2405
+
2406
+ | Field | Type | Optional | Description |
2407
+ |-------|------|:--------:|-------------|
2408
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2409
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2410
+
2411
+ <a id="areamarkstyle"></a>
2412
+ ## AreaMarkStyle
2413
+ Authored overlay for AreaMarkStyle. Area mark fill opacity, stroke, and halo.
2414
+
2415
+ | Field | Type | Optional | Description |
2416
+ |-------|------|:--------:|-------------|
2417
+ | `opacity` | float | ✓ | Area fill opacity (0–1). |
2418
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Area top-edge stroke style. |
2419
+ | `halo_multiplier` | float | ✓ | Halo stroke width multiplier relative to stroke.width; 0 disables the halo. |
2420
+
2421
+ <a id="rectmarkstyle"></a>
2422
+ ## RectMarkStyle
2423
+ Authored overlay for RectMarkStyle. Rect mark opacity and stroke.
2424
+
2425
+ | Field | Type | Optional | Description |
2426
+ |-------|------|:--------:|-------------|
2427
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2428
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2429
+
2430
+ <a id="totalslotstyle"></a>
2431
+ ## TotalSlotStyle
2432
+ Authored overlay for TotalSlotStyle. Theme slot for one text element of the donut center total.
2433
+
2434
+ | Field | Type | Optional | Description |
2435
+ |-------|------|:--------:|-------------|
2436
+ | `font` | [FontStyle](#fontstyle) | ✓ | Donut center total element font style overrides. |
2437
+
2438
+ <a id="slicemarkstyle"></a>
2439
+ ## SliceMarkStyle
2440
+ Authored overlay for SliceMarkStyle. Pie/donut slice mark — mark-level paint and layout only.
2441
+
2442
+ | Field | Type | Optional | Description |
2443
+ |-------|------|:--------:|-------------|
2444
+ | `gap` | float | ✓ | Angular gap between slices in radians. |
2445
+ | `corner_radius` | float | ✓ | Corner radius of arc slices in pixels. |
2446
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Arc slice stroke style. |
2447
+ | `labels` | [SliceLabelsStyle](#slicelabelsstyle) | ✓ | Per-slice label style. |
2448
+
2449
+ <a id="tablerowstripestyle"></a>
2450
+ ## TableRowStripeStyle
2451
+ Authored overlay for TableRowStripeStyle. Alternating row stripe style.
2452
+
2453
+ | Field | Type | Optional | Description |
2454
+ |-------|------|:--------:|-------------|
2455
+ | `color` | str | ✓ | Alternating stripe background color; None means no alternating row fill. |
2456
+
2457
+ <a id="tablerowrolesstyle"></a>
2458
+ ## TableRowRolesStyle
2459
+ Authored overlay for TableRowRolesStyle.
2460
+
2461
+ | Field | Type | Optional | Description |
2462
+ |-------|------|:--------:|-------------|
2463
+ | `summary` | [TableRowRoleStyle](#tablerowrolestyle) | ✓ | Style for summary role rows. |
2464
+ | `total` | [TableRowRoleStyle](#tablerowrolestyle) | ✓ | Style for total role rows. |
2465
+
2466
+ <a id="sparkemptystyle"></a>
2467
+ ## SparkEmptyStyle
2468
+ Authored overlay for SparkEmptyStyle.
2469
+
2470
+ | Field | Type | Optional | Description |
2471
+ |-------|------|:--------:|-------------|
2472
+ | `inset_x` | float | ✓ | Horizontal inset for the empty sparkline placeholder in pixels. |
2473
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Empty-state placeholder stroke style. |
2474
+
2475
+ <a id="sparksinglevaluestyle"></a>
2476
+ ## SparkSingleValueStyle
2477
+ Authored overlay for SparkSingleValueStyle.
2478
+
2479
+ | Field | Type | Optional | Description |
2480
+ |-------|------|:--------:|-------------|
2481
+ | `inset_x` | float | ✓ | Horizontal inset for the single-value sparkline in pixels. |
2482
+ | `marker_radius` | float | ✓ | Radius of the single-value marker circle in pixels. |
2483
+
2484
+ <a id="sparkcolumnsstyle"></a>
2485
+ ## SparkColumnsStyle
2486
+ Authored overlay for SparkColumnsStyle. Inline `spark.type: columns` (multi-value vertical bars) defaults.
2487
+
2488
+ | Field | Type | Optional | Description |
2489
+ |-------|------|:--------:|-------------|
2490
+ | `gap` | float | ✓ | Gap between column bars in pixels. |
2491
+ | `padding` | float | ✓ | Horizontal outer padding of the columns sparkline in pixels. |
2492
+ | `min_bar_height` | float | ✓ | Minimum rendered bar height in pixels. |
2493
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Column bar border style. |
2494
+
2495
+ <a id="sparkbarcellstyle"></a>
2496
+ ## SparkBarCellStyle
2497
+ Authored overlay for SparkBarCellStyle. Inline `spark.type: bar` and `bar-normalize` (single horizontal bar) defaults.
2498
+
2499
+ | Field | Type | Optional | Description |
2500
+ |-------|------|:--------:|-------------|
2501
+ | `background` | str | ✓ | Track background color; cascade-managed (inherits from style.muted). |
2502
+ | `color` | str | ✓ | Bar fill color; cascade-managed (inherits from style.accent). |
2503
+ | `default_max` | float | ✓ | Default maximum value for bar scale when no explicit max is authored. |
2504
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Spark bar border style. |
2505
+ | `font` | [FontStyle](#fontstyle) | ✓ | Spark bar cell font style overrides. |
2506
+ | `label` | [SparkBarLabelStyle](#sparkbarlabelstyle) | ✓ | Spark bar inline label style. |
2507
+
2508
+ <a id="sparkareastyle"></a>
2509
+ ## SparkAreaStyle
2510
+ Authored overlay for SparkAreaStyle.
2511
+
2512
+ | Field | Type | Optional | Description |
2513
+ |-------|------|:--------:|-------------|
2514
+ | `fill_opacity` | float | ✓ | Spark area fill opacity (0–1). |
2515
+
2516
+ <a id="geoshapemarkstyle"></a>
2517
+ ## GeoshapeMarkStyle
2518
+ Authored overlay for GeoshapeMarkStyle. Geoshape (choropleth) mark boundary stroke.
2519
+
2520
+ | Field | Type | Optional | Description |
2521
+ |-------|------|:--------:|-------------|
2522
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Geoshape boundary stroke style. |
2523
+
2524
+ <a id="circlemarkstyle"></a>
2525
+ ## CircleMarkStyle
2526
+ Authored overlay for CircleMarkStyle. Circle mark opacity and stroke.
2527
+
2528
+ | Field | Type | Optional | Description |
2529
+ |-------|------|:--------:|-------------|
2530
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2531
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2532
+
2533
+ <a id="squaremarkstyle"></a>
2534
+ ## SquareMarkStyle
2535
+ Authored overlay for SquareMarkStyle. Square mark opacity and stroke.
2536
+
2537
+ | Field | Type | Optional | Description |
2538
+ |-------|------|:--------:|-------------|
2539
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2540
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2541
+
2542
+ <a id="tickmarkstyle"></a>
2543
+ ## TickMarkStyle
2544
+ Authored overlay for TickMarkStyle. Tick mark opacity and stroke.
2545
+
2546
+ | Field | Type | Optional | Description |
2547
+ |-------|------|:--------:|-------------|
2548
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2549
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2550
+
2551
+ <a id="trailmarkstyle"></a>
2552
+ ## TrailMarkStyle
2553
+ Authored overlay for TrailMarkStyle. Trail mark opacity and stroke.
2554
+
2555
+ | Field | Type | Optional | Description |
2556
+ |-------|------|:--------:|-------------|
2557
+ | `opacity` | float | ✓ | Mark opacity (0–1); None means not overridden at this level. |
2558
+ | `stroke` | [StrokeStyle](#strokestyle) | ✓ | Mark stroke style; None means not overridden at this level. |
2559
+
2560
+ <a id="imagemarkstyle"></a>
2561
+ ## ImageMarkStyle
2562
+ Authored overlay for ImageMarkStyle. Image mark aspect ratio preservation.
2563
+
2564
+ | Field | Type | Optional | Description |
2565
+ |-------|------|:--------:|-------------|
2566
+ | `aspect` | bool | ✓ | Preserve image aspect ratio when scaling. |
2567
+
2568
+ <a id="boxplotmarkstyle"></a>
2569
+ ## BoxplotMarkStyle
2570
+ Authored overlay for BoxplotMarkStyle. Boxplot composite mark whisker extent.
2571
+
2572
+ | Field | Type | Optional | Description |
2573
+ |-------|------|:--------:|-------------|
2574
+ | `extent` | str | ✓ | Boxplot whisker extent ('min-max' or a k-IQR multiplier as string). |
2575
+
2576
+ <a id="errorbarmarkstyle"></a>
2577
+ ## ErrorbarMarkStyle
2578
+ Authored overlay for ErrorbarMarkStyle. Error bar composite mark tick visibility.
2579
+
2580
+ | Field | Type | Optional | Description |
2581
+ |-------|------|:--------:|-------------|
2582
+ | `ticks` | bool | ✓ | Show tick marks at the ends of error bar whiskers. |
2583
+
2584
+ <a id="errorbandmarkstyle"></a>
2585
+ ## ErrorbandMarkStyle
2586
+ Authored overlay for ErrorbandMarkStyle. Error band composite mark fill opacity.
2587
+
2588
+ | Field | Type | Optional | Description |
2589
+ |-------|------|:--------:|-------------|
2590
+ | `opacity` | float | ✓ | Error band fill opacity (0–1). |
2591
+
2592
+ <a id="histogramchartmarksstyle"></a>
2593
+ ## HistogramChartMarksStyle
2594
+ Authored overlay for HistogramChartMarksStyle. Histogram-family mark overrides.
2595
+
2596
+ | Field | Type | Optional | Description |
2597
+ |-------|------|:--------:|-------------|
2598
+ | `bar` | [BarMarkStyle](#barmarkstyle) | ✓ | Bar mark overrides; None inherits global. |
2599
+ | `rule` | [RuleMarkStyle](#rulemarkstyle) | ✓ | Rule mark overrides; None inherits global. |
2600
+
2601
+ <a id="detailsarrowstyle"></a>
2602
+ ## DetailsArrowStyle
2603
+ Authored overlay for DetailsArrowStyle. Layout and font style for the expand/collapse arrow chevron.
2604
+
2605
+ | Field | Type | Optional | Description |
2606
+ |-------|------|:--------:|-------------|
2607
+ | `x` | float | ✓ | X position of the arrow in pixels. |
2608
+ | `font` | [DetailsArrowFontStyle](#detailsarrowfontstyle) | ✓ | Arrow glyph font style. |
2609
+
2610
+ <a id="inputwidths"></a>
2611
+ ## InputWidths
2612
+ Authored overlay for InputWidths.
2613
+
2614
+ | Field | Type | Optional | Description |
2615
+ |-------|------|:--------:|-------------|
2616
+ | `text` | float | ✓ | Default width for text inputs in pixels. |
2617
+ | `number` | float | ✓ | Default width for number inputs in pixels. |
2618
+ | `range` | float | ✓ | Default width for range inputs in pixels. |
2619
+ | `slider_value_min` | float | ✓ | Minimum width for slider value display in pixels. |
2620
+ | `checkbox` | float | ✓ | Default width for checkbox inputs in pixels. |
2621
+ | `daterange` | float | ✓ | Default width for daterange chip triggers in pixels. |
2622
+
2623
+ <a id="rangedefaults"></a>
2624
+ ## RangeDefaults
2625
+ Authored overlay for RangeDefaults.
2626
+
2627
+ | Field | Type | Optional | Description |
2628
+ |-------|------|:--------:|-------------|
2629
+ | `default_min` | float | ✓ | Default minimum value for range inputs. |
2630
+ | `default_max` | float | ✓ | Default maximum value for range inputs. |
2631
+ | `default_step` | float | ✓ | Default step size for range inputs. |
2632
+
2633
+ <a id="axisgridzerostyle"></a>
2634
+ ## AxisGridZeroStyle
2635
+ Authored overlay for AxisGridZeroStyle. Zero-baseline gridline color and width overrides.
2636
+
2637
+ | Field | Type | Optional | Description |
2638
+ |-------|------|:--------:|-------------|
2639
+ | `color` | str | ✓ | Color of the zero-baseline grid line; None inherits from parent axis. |
2640
+ | `width` | float | ✓ | Width of the zero-baseline grid line in pixels; None inherits from parent axis. |
2641
+
2642
+ <a id="datatablerowpaddingstyle"></a>
2643
+ ## DataTableRowPaddingStyle
2644
+ Authored overlay for DataTableRowPaddingStyle.
2645
+
2646
+ | Field | Type | Optional | Description |
2647
+ |-------|------|:--------:|-------------|
2648
+ | `vertical` | float | ✓ | Vertical (top/bottom) padding inside data_table rows in pixels. |
2649
+ | `horizontal` | float | ✓ | Horizontal (left/right) padding inside data_table rows in pixels. |
2650
+
2651
+ <a id="strokestyle"></a>
2652
+ ## StrokeStyle
2653
+ Authored overlay for StrokeStyle. Stroke appearance sub-block shared across mark families.
2654
+
2655
+ | Field | Type | Optional | Description |
2656
+ |-------|------|:--------:|-------------|
2657
+ | `color` | str | ✓ | Stroke color as a CSS color string. |
2658
+ | `width` | float | ✓ | Stroke width in pixels. |
2659
+ | `cap` | enum: "butt", "round", "square" | ✓ | Stroke line cap style (butt, round, or square). |
2660
+ | `join` | enum: "miter", "round", "bevel" | ✓ | Stroke line join style (miter, round, or bevel). |
2661
+ | `dasharray` | str | ✓ | SVG stroke-dasharray pattern (e.g. '4 2'). |
2662
+
2663
+ <a id="slicelabelsstyle"></a>
2664
+ ## SliceLabelsStyle
2665
+ Authored overlay for SliceLabelsStyle. Pie labels: typography + positioning offsets for per-slice text.
2666
+
2667
+ | Field | Type | Optional | Description |
2668
+ |-------|------|:--------:|-------------|
2669
+ | `offset` | float | ✓ | Radial offset of slice labels from the arc in pixels. |
2670
+ | `block_height` | float | ✓ | Reserved height per label block in pixels. |
2671
+ | `line_height` | float | ✓ | Line height for multi-line slice labels in pixels. |
2672
+ | `font` | [FontStyle](#fontstyle) | ✓ | Slice label font style overrides. |
2673
+
2674
+ <a id="tablerowrolestyle"></a>
2675
+ ## TableRowRoleStyle
2676
+ Authored overlay for TableRowRoleStyle.
2677
+
2678
+ | Field | Type | Optional | Description |
2679
+ |-------|------|:--------:|-------------|
2680
+ | `rule_width` | float | ✓ | Rule width above rows with this role in pixels. |
2681
+ | `font` | [FontStyle](#fontstyle) | ✓ | Per-role font style override; None uses the default row font. |
2682
+ | `background` | str | ✓ | Per-role row background color; None means no override. |
2683
+
2684
+ <a id="sparkbarlabelstyle"></a>
2685
+ ## SparkBarLabelStyle
2686
+ Authored overlay for SparkBarLabelStyle.
2687
+
2688
+ | Field | Type | Optional | Description |
2689
+ |-------|------|:--------:|-------------|
2690
+ | `inset_x` | float | ✓ | Horizontal inset for the spark bar label in pixels. |
2691
+ | `fill` | str | ✓ | Label text fill color. |
2692
+ | `fill_opacity` | float | ✓ | Label text fill opacity (0–1). |
2693
+ | `min_size` | float | ✓ | Minimum bar fill width required to show the label in pixels. |
2694
+ | `height_offset` | float | ✓ | Vertical offset of the label from its bar top in pixels. |
2695
+
2696
+ <a id="detailsarrowfontstyle"></a>
2697
+ ## DetailsArrowFontStyle
2698
+ Authored overlay for DetailsArrowFontStyle. Font style for the expand/collapse arrow glyph.
2699
+
2700
+ | Field | Type | Optional | Description |
2701
+ |-------|------|:--------:|-------------|
2702
+ | `size` | float | ✓ | Font size of the arrow glyph in pixels. |
2703
+
2704
+ <a id="chart"></a>
2705
+ ## Chart
2706
+ Discriminated union of per-family chart patches. type: is mandatory; missing or unknown type raises ValidationError.
2707
+
2708
+ | Field | Type | Optional | Description |
2709
+ |-------|------|:--------:|-------------|
2710
+ | `type` | enum: "bar", "line", "area", "circle", "square", "tick", "rule", "trail", "rect", "arc", "boxplot", "errorbar", "errorband", "geoshape", "image", "table", "kpi", "callout", "scatter", "heatmap", "pie", "donut", "histogram", "map", "point_map", "bubble_map", "spark_bar", "layered", "auto" | | Bar or histogram chart type. |
2711
+ | `theta` | str | | Field for angular encoding in pie (arc) charts. |
2712
+ | `value` | str | | Column reference (string column name) for the headline number/text. |
2713
+ | `layers` | list[[Layer](#layer)] | | Layers for multi-mark charts. Each layer is a chart definition. |
2714
+ | `message` | str | | Static message content. |
2715
+ | `id` | str | ✓ | Explicit chart ID (auto-generated from the chart's YAML key if omitted). |
2716
+ | `title` | str | ✓ | Chart title displayed above the chart (not used on type: kpi). |
2717
+ | `subtitle` | str | ✓ | Chart subtitle displayed below the title. |
2718
+ | `description` | str | ✓ | Human-readable description used by AI search and context tooltips. |
2719
+ | `query` | str \| dict[str, Any] | ✓ | Named query reference, inline AuthoredQuery, or SQL string shorthand. |
2720
+ | `link` | str | ✓ | Click-through URL template for drill-down links. |
2721
+ | `filters` | dict[str, [FilterDef](#filterdef)] | ✓ | Declarative column filters applied to chart data after query execution. |
2722
+ | `conditional_formatting` | dict[str, [FieldConditionalFormatting](#fieldconditionalformatting)] | ✓ | Discrete rule-driven style overrides indexed by column name. |
2723
+ | `warnings_ignore` | list[str] | ✓ | Codes of render warnings to suppress for this chart. |
2724
+ | `x` | str | ✓ | X-axis field name from the query result. |
2725
+ | `y` | str \| list[str] | ✓ | Y-axis field name(s). Accepts a single field or list for multi-series charts. |
2726
+ | `x_label` | str | ✓ | Custom label for the X axis. |
2727
+ | `y_label` | str | ✓ | Custom label for the Y axis. |
2728
+ | `color` | str | ✓ | Color data channel: bare field name only. |
2729
+ | `sort` | [ChartSort](#chartsort) | ✓ | Sort configuration: field to sort by and direction (asc/desc). |
2730
+ | `labels` | [ChartLabels](#chartlabels) | ✓ | Per-row text annotations near each data anchor. |
2731
+ | `data_table` | [ChartDataTable](#chartdatatable) | ✓ | Optional mini data-grid attached below/above the chart. |
2732
+ | `format` | str \| [FormatConfig](#formatconfig) | ✓ | Number format: D3 format string, preset name, or FormatConfig object. |
2733
+ | `height` | int \| float | ✓ | Explicit chart height in pixels. Positive number only. When set, overrides aspect_ratio and theme cascade. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
2734
+ | `width` | int \| float | ✓ | Chart width hint in pixels. Positive number only. Used by the label-overlap heuristic to determine whether x-axis labels need tilting. Does not override the layout slot width — the chart still fills its allocated container. Not valid on kpi, table, callout, or spark_bar — those renderers own their own sizing contracts. |
2735
+ | `size` | str | ✓ | Field used to size-encode data points (quantitative). |
2736
+ | `shape` | str | ✓ | Field used to shape-encode data points (categorical). |
2737
+ | `style` | [BarChartStyle](#barchartstyle) | ✓ | Chart-local style overrides. |
2738
+ | `total` | [ChartTotal](#charttotal) | ✓ | Donut center total. |
2739
+ | `label` | str | ✓ | KPI label rendered above the headline value. |
2740
+ | `support` | [KpiSupportConfig](#kpisupportconfig) | ✓ | Optional support line beneath the KPI value. |
2741
+ | `projection` | str \| Projection | ✓ | Map projection name or Vega-Lite projection config. |
2742
+ | `geo` | str \| dict[str, Any] | ✓ | GeoJSON field name or inline GeoJSON spec for geoshape charts. |
2743
+ | `geo_source` | str | ✓ | Named geographic data source for loading GeoJSON boundaries. |
2744
+ | `lookup` | str | ✓ | Data field to join against geographic data (map join key). |
2745
+ | `latitude` | str | ✓ | Field containing latitude values for point/bubble maps. |
2746
+ | `longitude` | str | ✓ | Field containing longitude values for point/bubble maps. |
2747
+ | `basemap` | [BasemapConfig](#basemapconfig) | ✓ | Tile-layer configuration for the map background. |
2748
+ | `x_domain` | enum: "union", "primary" | ✓ | Controls how x-values from multiple layer queries are combined. |
2749
+
2750
+ <a id="paginationconfig"></a>
2751
+ ## PaginationConfig
2752
+ Table pagination configuration.
2753
+
2754
+ | Field | Type | Optional | Description |
2755
+ |-------|------|:--------:|-------------|
2756
+ | `enabled` | bool | ✓ | Enable client-side pagination for table charts. |
2757
+ | `page_size` | int | ✓ | Rows per page. When enabled and None, the renderer auto-fits page size to the cell — set explicitly to pin the page size. |