dataface 0.1.5.dev384__py3-none-any.whl → 0.1.6.dev62__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 (109) hide show
  1. dataface/DATAFACE_SYNTAX.md +0 -2
  2. dataface/__init__.py +2 -2
  3. dataface/agent_api/__init__.py +2 -2
  4. dataface/agent_api/_paths.py +7 -21
  5. dataface/agent_api/chat.py +16 -13
  6. dataface/agent_api/dashboards.py +4 -3
  7. dataface/agent_api/describe.py +12 -11
  8. dataface/agent_api/docs/yaml-reference.md +40 -29
  9. dataface/agent_api/pack.py +14 -17
  10. dataface/agent_api/{project.py → project_session.py} +79 -56
  11. dataface/agent_api/query.py +45 -7
  12. dataface/agent_api/render_face.py +24 -20
  13. dataface/agent_api/validate.py +17 -17
  14. dataface/ai/agent.py +44 -8
  15. dataface/ai/context.py +3 -3
  16. dataface/ai/llm.py +47 -10
  17. dataface/ai/mcp/server.py +7 -6
  18. dataface/ai/skills/dashboard-pack-scaffolding/SKILL.md +2 -1
  19. dataface/ai/tools/__init__.py +15 -15
  20. dataface/cli/commands/chat.py +5 -4
  21. dataface/cli/commands/describe.py +3 -3
  22. dataface/cli/commands/query.py +15 -15
  23. dataface/cli/commands/render.py +7 -7
  24. dataface/cli/commands/schema.py +7 -7
  25. dataface/cli/commands/serve.py +2 -1
  26. dataface/cli/commands/validate.py +3 -3
  27. dataface/core/__init__.py +2 -2
  28. dataface/core/compile/__init__.py +1 -1
  29. dataface/core/compile/colors.py +0 -44
  30. dataface/core/compile/compiler.py +11 -26
  31. dataface/core/compile/config.py +69 -97
  32. dataface/core/compile/data_table_attachment.py +22 -8
  33. dataface/core/compile/inherit_graph.py +134 -18
  34. dataface/core/compile/inherit_registry.yaml +493 -1
  35. dataface/core/compile/inherit_resolver.py +16 -3
  36. dataface/core/compile/models/chart/authored.py +1 -6
  37. dataface/core/compile/models/chart/normalized.py +2 -2
  38. dataface/core/compile/models/chart/resolved.py +2 -2
  39. dataface/core/compile/models/factories.py +15 -1
  40. dataface/core/compile/models/markers.py +22 -0
  41. dataface/core/compile/models/style/authored.py +22 -5
  42. dataface/core/compile/models/style/resolved.py +30 -25
  43. dataface/core/compile/models/style/theme.py +303 -120
  44. dataface/core/compile/normalize_charts.py +1 -5
  45. dataface/core/compile/sizing.py +157 -43
  46. dataface/core/compile/style_cascade.py +5 -3
  47. dataface/core/connections.py +8 -5
  48. dataface/core/dashboard.py +14 -12
  49. dataface/core/defaults/palettes/categorical/category-10-dark.yml +4 -4
  50. dataface/core/defaults/palettes/categorical/category-10-ghost.yml +36 -0
  51. dataface/core/defaults/palettes/categorical/category-10-light.yml +25 -33
  52. dataface/core/defaults/palettes/categorical/category-10.yml +4 -2
  53. dataface/core/defaults/palettes/categorical/editorial-10-dark.yml +2 -1
  54. dataface/core/defaults/palettes/categorical/editorial-10-ghost.yml +36 -0
  55. dataface/core/defaults/palettes/categorical/editorial-10-light.yml +34 -0
  56. dataface/core/defaults/palettes/categorical/editorial-10.yml +8 -0
  57. dataface/core/defaults/themes/_base.yaml +3 -0
  58. dataface/core/defaults/themes/dark.yaml +18 -0
  59. dataface/core/defaults/themes/stark.yaml +21 -1
  60. dataface/core/errors/__init__.py +2 -0
  61. dataface/core/errors/codes_execute.py +10 -0
  62. dataface/core/errors/registry.py +4 -2
  63. dataface/core/execute/adapters/adapter_registry.py +12 -10
  64. dataface/core/execute/adapters/csv_adapter.py +2 -0
  65. dataface/core/execute/executor.py +7 -3
  66. dataface/core/fonts.py +10 -0
  67. dataface/core/inspect/renderer.py +8 -11
  68. dataface/core/project.py +54 -0
  69. dataface/core/render/chart/arc_attached_table.py +18 -1
  70. dataface/core/render/chart/decisions.py +105 -2
  71. dataface/core/render/chart/pipeline.py +73 -164
  72. dataface/core/render/chart/profile.py +163 -27
  73. dataface/core/render/chart/render_single.py +11 -7
  74. dataface/core/render/chart/serialization.py +9 -12
  75. dataface/core/render/chart/standard_renderer.py +5 -2
  76. dataface/core/render/chart/vega_lite.py +3 -3
  77. dataface/core/render/face_api.py +8 -7
  78. dataface/core/render/faces.py +32 -9
  79. dataface/core/render/font_support.py +18 -6
  80. dataface/core/render/fonts/InterVariable-Italic.ttf +0 -0
  81. dataface/core/render/fonts/SourceSerif4-Italic.ttf +0 -0
  82. dataface/core/render/fonts/_emoji_font_face.css +14 -0
  83. dataface/core/render/nav.py +22 -4
  84. dataface/core/render/placeholder.py +1 -1
  85. dataface/core/render/renderer.py +1 -1
  86. dataface/core/render/templates/nav/nav.css +3 -1
  87. dataface/core/render/templates/nav/nav.html +6 -0
  88. dataface/core/render/templates/nav/nav.js +15 -0
  89. dataface/core/render/templates/variable_controls/checkbox.html +6 -0
  90. dataface/core/render/templates/variable_controls/container.html +27 -0
  91. dataface/core/render/templates/variable_controls/date.html +6 -0
  92. dataface/core/render/templates/variable_controls/daterange.html +16 -0
  93. dataface/core/render/templates/variable_controls/number.html +6 -0
  94. dataface/core/render/templates/variable_controls/readonly.html +4 -0
  95. dataface/core/render/templates/variable_controls/select.html +7 -0
  96. dataface/core/render/templates/variable_controls/slider.html +9 -0
  97. dataface/core/render/templates/variable_controls/text.html +6 -0
  98. dataface/core/render/variable_controls.py +137 -100
  99. dataface/core/serve/bootstrap.py +8 -7
  100. dataface/core/serve/server.py +77 -82
  101. dataface/integrations/markdown.py +7 -5
  102. {dataface-0.1.5.dev384.dist-info → dataface-0.1.6.dev62.dist-info}/METADATA +2 -1
  103. {dataface-0.1.5.dev384.dist-info → dataface-0.1.6.dev62.dist-info}/RECORD +108 -94
  104. mdsvg/renderer.py +171 -27
  105. mdsvg/style.py +43 -0
  106. dataface/core/compile/chart_type_detection.py +0 -490
  107. {dataface-0.1.5.dev384.dist-info → dataface-0.1.6.dev62.dist-info}/WHEEL +0 -0
  108. {dataface-0.1.5.dev384.dist-info → dataface-0.1.6.dev62.dist-info}/entry_points.txt +0 -0
  109. {dataface-0.1.5.dev384.dist-info → dataface-0.1.6.dev62.dist-info}/licenses/LICENSE +0 -0
@@ -705,8 +705,6 @@ message: "Query is disabled in this environment."
705
705
  style:
706
706
  tone: warning # optional; defaults to info
707
707
 
708
- # auto — internal; engine picks the chart type from the data shape.
709
- type: auto
710
708
  ```
711
709
 
712
710
  ### Layered charts
dataface/__init__.py CHANGED
@@ -22,8 +22,8 @@ Quick Start:
22
22
  ... face = result.face
23
23
  ...
24
24
  ... # Create executor and render
25
- ... from dataface.core.compile.config import load_project_sources
26
- ... registry = build_adapter_registry(Path.cwd(), project_sources=load_project_sources(Path.cwd()))
25
+ ... from dataface.core.project import Project
26
+ ... registry = build_adapter_registry(Project(Path.cwd()))
27
27
  ... executor = Executor(face, registry, query_registry=result.query_registry)
28
28
  ... svg = render(face, executor, format="svg")
29
29
  """
@@ -47,7 +47,7 @@ from dataface.agent_api.init import (
47
47
  InitResult as InitResult,
48
48
  init_project as init_project,
49
49
  )
50
- from dataface.agent_api.project import Project as Project
50
+ from dataface.agent_api.project_session import ProjectSession as ProjectSession
51
51
  from dataface.agent_api.query import QueryFaceResult, query_face
52
52
  from dataface.agent_api.schema_hints import (
53
53
  SchemaHints as SchemaHints,
@@ -76,7 +76,7 @@ __all__ = [
76
76
  "DocsSearchHit",
77
77
  "InitResult",
78
78
  "LinkContext",
79
- "Project",
79
+ "ProjectSession",
80
80
  "ProjectSourcesConfig",
81
81
  "QueryDiagnostic",
82
82
  "QueryFaceResult",
@@ -11,7 +11,7 @@ from dataface.core.project_roots import (
11
11
  find_dft_root as find_dft_root,
12
12
  )
13
13
  from dataface.core.scoped_paths import (
14
- resolve_scoped_path as _core_resolve_scoped_path,
14
+ resolve_scoped_path as resolve_scoped_path,
15
15
  )
16
16
 
17
17
 
@@ -45,26 +45,12 @@ def resolve_project_dir_from_paths(
45
45
  return resolve_project_dir(None)
46
46
 
47
47
 
48
- def resolve_scoped_path(path: Path, project_dir: Path | None = None) -> Path:
49
- """agent_api wrapper: resolves `None → cwd-walked root` at the boundary,
50
- then delegates to `core.scoped_paths.resolve_scoped_path`.
51
-
52
- Absolute paths with no explicit `project_dir` resolve directly (no
53
- containment check) — the caller supplied the path, so no project context is
54
- needed to validate containment.
55
- """
56
- if path.is_absolute() and project_dir is None:
57
- return path.resolve()
58
- return _core_resolve_scoped_path(path, resolve_project_dir(project_dir))
59
-
60
-
61
- def no_project_hint(project_dir: Path | None) -> str:
48
+ def no_project_hint(project_root: Path) -> str:
62
49
  """Return a hint string when no project marker is found, else empty string."""
63
- check = project_dir if project_dir is not None else Path.cwd()
64
- if find_dft_root(check) is not None:
50
+ if find_dft_root(project_root) is not None:
65
51
  return ""
66
52
  return (
67
- f" No Dataface project marker found at or above {check}."
53
+ f" No Dataface project marker found at or above {project_root}."
68
54
  f" Run from inside a Dataface project, or set project_dir."
69
55
  )
70
56
 
@@ -73,8 +59,8 @@ def no_project_hint(project_dir: Path | None) -> str:
73
59
  class FaceRenderContext:
74
60
  """Path resolution result from a face path + project root.
75
61
 
76
- Adapter registry is built by `Project.open`, not by the context — call sites
77
- open a `Project` with `project_root` + `dbt_project_path` and read the
62
+ Adapter registry is built by `ProjectSession.open`, not by the context — call sites
63
+ open a `ProjectSession` with `project_root` + `dbt_project_path` and read the
78
64
  registry off `project.adapter_registry`.
79
65
  """
80
66
 
@@ -134,7 +120,7 @@ def build_face_render_context(
134
120
  class YamlRenderContext:
135
121
  """Path resolution result for rendering inline YAML against a project root.
136
122
 
137
- Adapter registry is built by `Project.open`, not by the context.
123
+ Adapter registry is built by `ProjectSession.open`, not by the context.
138
124
  """
139
125
 
140
126
  project_root: Path
@@ -24,6 +24,7 @@ from dataface.ai.agent import run_agent
24
24
  from dataface.ai.context import DatafaceAIContext
25
25
  from dataface.ai.events import AgentEvent
26
26
  from dataface.ai.llm import create_client
27
+ from dataface.core.project import Project
27
28
 
28
29
  if TYPE_CHECKING:
29
30
  from dataface.ai.external_mcp import ExternalMCPManager
@@ -49,7 +50,7 @@ class ChatSession:
49
50
  def close(self) -> None:
50
51
  """Flush the session log and release the project's resources."""
51
52
  self.writer.close()
52
- self.context.project.close()
53
+ self.context.project_session.close()
53
54
 
54
55
  def __enter__(self) -> Self:
55
56
  return self
@@ -71,26 +72,27 @@ class ChatSessionSummary:
71
72
  def start_session(
72
73
  *,
73
74
  model: str | None = None,
74
- project_dir: Path | None = None,
75
+ project: Project,
75
76
  server_port: int | None = None,
76
77
  ) -> ChatSession:
77
78
  """Create a new chat session.
78
79
 
79
80
  Args:
80
81
  model: LLM model name, optionally provider-prefixed.
81
- project_dir: Working directory for the session. Defaults to cwd.
82
+ project: The Dataface project for this session.
82
83
  server_port: Port of the embedded HTTP preview server, if running.
83
84
  """
84
- from dataface.agent_api.project import Project
85
+ from dataface.agent_api.project_session import ProjectSession
85
86
  from dataface.core.execute.adapters import LOCAL_AUTHORING_REGISTRY_KWARGS
86
87
 
87
- cwd = (project_dir or Path.cwd()).resolve()
88
88
  client = create_client(model=model)
89
89
  context = DatafaceAIContext(
90
- project=Project.open(cwd, **LOCAL_AUTHORING_REGISTRY_KWARGS),
90
+ project_session=ProjectSession.from_project(
91
+ project, **LOCAL_AUTHORING_REGISTRY_KWARGS
92
+ ),
91
93
  server_port=server_port,
92
94
  )
93
- writer, _ = new_session(cwd, provider=client.provider, model=client.model)
95
+ writer, _ = new_session(project.root, provider=client.provider, model=client.model)
94
96
  return ChatSession(
95
97
  session_id=writer.session_id,
96
98
  messages=[],
@@ -106,7 +108,7 @@ def start_session(
106
108
  def resume_session(
107
109
  session_id: str,
108
110
  *,
109
- project_dir: Path | None = None,
111
+ project: Project,
110
112
  server_port: int | None = None,
111
113
  model: str | None = None,
112
114
  max_tokens: int = 32_000,
@@ -115,7 +117,7 @@ def resume_session(
115
117
 
116
118
  Args:
117
119
  session_id: The session id to resume.
118
- project_dir: Working directory for the resumed session. Defaults to cwd.
120
+ project: The Dataface project for the resumed session.
119
121
  server_port: Port of the embedded HTTP preview server, if running.
120
122
  model: LLM model to use. Defaults to the same provider as the session.
121
123
  max_tokens: Token budget for trimming old messages. 0 disables trimming.
@@ -123,10 +125,9 @@ def resume_session(
123
125
  Raises:
124
126
  ValueError: If session not found, provider mismatch, or context window exceeded.
125
127
  """
126
- from dataface.agent_api.project import Project
128
+ from dataface.agent_api.project_session import ProjectSession
127
129
  from dataface.core.execute.adapters import LOCAL_AUTHORING_REGISTRY_KWARGS
128
130
 
129
- cwd = (project_dir or Path.cwd()).resolve()
130
131
  client = create_client(model=model)
131
132
 
132
133
  messages, meta, _ = load_session_for_resume(
@@ -143,10 +144,12 @@ def resume_session(
143
144
  )
144
145
 
145
146
  context = DatafaceAIContext(
146
- project=Project.open(cwd, **LOCAL_AUTHORING_REGISTRY_KWARGS),
147
+ project_session=ProjectSession.from_project(
148
+ project, **LOCAL_AUTHORING_REGISTRY_KWARGS
149
+ ),
147
150
  server_port=server_port,
148
151
  )
149
- writer, _ = new_session(cwd, provider=client.provider, model=client.model)
152
+ writer, _ = new_session(project.root, provider=client.provider, model=client.model)
150
153
  return ChatSession(
151
154
  session_id=session_id,
152
155
  messages=messages,
@@ -18,6 +18,7 @@ from dataface.core.compile import Face, compile_file
18
18
  from dataface.core.compile.errors import DatafaceError
19
19
  from dataface.core.dashboard import RenderedDashboard as RenderedDashboard
20
20
  from dataface.core.errors import DF_UNKNOWN_INTERNAL, StructuredError
21
+ from dataface.core.project import Project
21
22
  from dataface.core.render.warnings.base import RenderWarning
22
23
 
23
24
  # ---------------------------------------------------------------------------
@@ -193,12 +194,12 @@ def list_dashboards(
193
194
  def get_dashboard(
194
195
  path: Path,
195
196
  *,
196
- project_dir: Path,
197
+ project: Project,
197
198
  include_raw: bool = False,
198
199
  ) -> CompiledDashboard:
199
200
  """Get the compiled structure of a dashboard."""
200
201
  try:
201
- file_path = resolve_scoped_path(path, project_dir)
202
+ file_path = resolve_scoped_path(path, project.root)
202
203
  except ValueError as exc:
203
204
  return CompiledDashboard(
204
205
  success=False,
@@ -243,7 +244,7 @@ def get_dashboard(
243
244
  ],
244
245
  )
245
246
 
246
- result = compile_file(file_path)
247
+ result = compile_file(file_path, project=project)
247
248
  return CompiledDashboard(
248
249
  success=result.success,
249
250
  dashboard=result.face if result.success else None,
@@ -21,6 +21,7 @@ from dataface.core.compile.models.query.normalized import (
21
21
  ValuesQuery,
22
22
  )
23
23
  from dataface.core.errors import DF_UNKNOWN_INTERNAL, StructuredError
24
+ from dataface.core.project import Project
24
25
 
25
26
  # Chart-encoding fields surfaced to agents. Covers the stable channel fields
26
27
  # across chart families. `label` is excluded — it's a KPI-specific render hint,
@@ -87,7 +88,7 @@ class DescribeFaceArgs(BaseModel):
87
88
  default=None,
88
89
  description=(
89
90
  "Project root for resolving relative paths. Optional on the wire; "
90
- "the MCP server injects ctx.project.project_root when omitted."
91
+ "the MCP server injects the project root when omitted."
91
92
  ),
92
93
  )
93
94
 
@@ -190,14 +191,14 @@ def _encoding_for_chart(chart: Chart) -> dict[str, Any]:
190
191
  # ---------------------------------------------------------------------------
191
192
 
192
193
 
193
- def describe_face(path: Path, *, project_dir: Path) -> DescribeFaceResult:
194
+ def describe_face(path: Path, *, project: Project) -> DescribeFaceResult:
194
195
  """Describe the structure of a face: queries, charts, variables, layout."""
195
196
  from dataface.agent_api._paths import no_project_hint, resolve_scoped_path
196
197
  from dataface.core.compile.compiler import compile_file
197
198
  from dataface.core.compile.errors import DatafaceError
198
199
 
199
200
  try:
200
- resolved = resolve_scoped_path(path, project_dir)
201
+ resolved = resolve_scoped_path(path, project.root)
201
202
  except ValueError as exc:
202
203
  return DescribeFaceResult(
203
204
  success=False,
@@ -210,7 +211,7 @@ def describe_face(path: Path, *, project_dir: Path) -> DescribeFaceResult:
210
211
  )
211
212
 
212
213
  if not resolved.exists():
213
- hint = no_project_hint(project_dir)
214
+ hint = no_project_hint(project.root)
214
215
  return DescribeFaceResult(
215
216
  success=False,
216
217
  path=path,
@@ -223,7 +224,7 @@ def describe_face(path: Path, *, project_dir: Path) -> DescribeFaceResult:
223
224
  )
224
225
 
225
226
  try:
226
- result = compile_file(resolved)
227
+ result = compile_file(resolved, project=project)
227
228
  except OSError as exc:
228
229
  return DescribeFaceResult(
229
230
  success=False,
@@ -305,7 +306,7 @@ def describe_face(path: Path, *, project_dir: Path) -> DescribeFaceResult:
305
306
  def describe_paths(
306
307
  paths: list[Path],
307
308
  *,
308
- project_dir: Path,
309
+ project: Project,
309
310
  ) -> list[DescribeFaceResult]:
310
311
  """Describe N face files / directories.
311
312
 
@@ -315,13 +316,13 @@ def describe_paths(
315
316
  """
316
317
  out: list[DescribeFaceResult] = []
317
318
  for p in paths:
318
- out.extend(_describe_one_path(p, project_dir))
319
+ out.extend(_describe_one_path(p, project))
319
320
  return out
320
321
 
321
322
 
322
323
  def _describe_one_path(
323
324
  path: Path,
324
- project_dir: Path,
325
+ project: Project,
325
326
  ) -> list[DescribeFaceResult]:
326
327
  """Per-argv expansion: file → [one], dir → walk."""
327
328
  # WHY: dataface.core.inspect.manifest_utils triggers the inspect package
@@ -332,7 +333,7 @@ def _describe_one_path(
332
333
  from dataface.core.inspect.manifest_utils import INSPECT_TEMPLATE_MANIFEST
333
334
 
334
335
  try:
335
- resolved = resolve_scoped_path(path, project_dir)
336
+ resolved = resolve_scoped_path(path, project.root)
336
337
  except ValueError as exc:
337
338
  return [
338
339
  DescribeFaceResult(
@@ -347,7 +348,7 @@ def _describe_one_path(
347
348
  ]
348
349
 
349
350
  if not resolved.is_dir():
350
- return [describe_face(resolved, project_dir=project_dir)]
351
+ return [describe_face(resolved, project=project)]
351
352
 
352
353
  template_dirs = {m.parent for m in resolved.glob(f"**/{INSPECT_TEMPLATE_MANIFEST}")}
353
354
  yaml_files = sorted(
@@ -368,4 +369,4 @@ def _describe_one_path(
368
369
  ],
369
370
  )
370
371
  ]
371
- return [describe_face(f, project_dir=project_dir) for f in yaml_files]
372
+ return [describe_face(f, project=project) for f in yaml_files]
@@ -479,7 +479,7 @@ Authored overlay for Style — all fields optional. Adds CSS shorthand coercers.
479
479
  | `variables` | [VariablesStyle](#variablesstyle) | ✓ | Variable controls chrome style. |
480
480
  | `page` | [PageStyle](#pagestyle) | ✓ | Page-level canvas style (behind the board). |
481
481
  | `footer` | [FooterStyle](#footerstyle) | ✓ | Page footer chrome visibility. |
482
- | `timestamp` | [TimestampStyle](#timestampstyle) | ✓ | Render-timestamp chrome: visibility, format, and font. |
482
+ | `timestamp` | [TimestampStyle](#timestampstyle) | ✓ | Render-timestamp chrome: visibility, placement, format, and font. |
483
483
  | `formats` | dict[str, str] | ✓ | Format alias map; None means no aliases at this cascade level. |
484
484
  | `palettes` | dict[str, str] | ✓ | Theme palette role assignments: open dict mapping role name to palette file name. Default seed: chrome, info, negative, positive, warning, category, sequence, diverge. |
485
485
  | `roles` | dict[str, str] | ✓ | Optional top-level theme role aliases: bare name → role.alias. e.g. ink: chrome.heading |
@@ -575,10 +575,9 @@ Authored overlay for BarChartStyle. Bar chart style: chart-level fields + marks
575
575
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
576
576
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
577
577
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
578
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
579
578
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
580
579
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
581
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
580
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
582
581
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
583
582
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
584
583
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -612,10 +611,9 @@ Authored overlay for LineChartStyle. Line chart style: chart-level fields + mark
612
611
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
613
612
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
614
613
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
615
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
616
614
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
617
615
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
618
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
616
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
619
617
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
620
618
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
621
619
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -646,10 +644,9 @@ Authored overlay for AreaChartStyle. Area chart style: chart-level fields + mark
646
644
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
647
645
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
648
646
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
649
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
650
647
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
651
648
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
652
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
649
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
653
650
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
654
651
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
655
652
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -681,10 +678,9 @@ Authored overlay for ScatterChartStyle. Scatter chart style: chart-level fields
681
678
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
682
679
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
683
680
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
684
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
685
681
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
686
682
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
687
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
683
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
688
684
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
689
685
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
690
686
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -714,10 +710,9 @@ Authored overlay for HeatmapChartStyle. Heatmap chart style.
714
710
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
715
711
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
716
712
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
717
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
718
713
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
719
714
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
720
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
715
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
721
716
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
722
717
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
723
718
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -758,10 +753,9 @@ Authored overlay for PieChartStyle. Pie/donut chart style: geometry + total (fla
758
753
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
759
754
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
760
755
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
761
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
762
756
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
763
757
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
764
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
758
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
765
759
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
766
760
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
767
761
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -787,15 +781,14 @@ Authored overlay for KpiChartStyle. Produced by cascade from theme YAML.
787
781
 
788
782
  | Field | Type | Optional | Description |
789
783
  |-------|------|:--------:|-------------|
790
- | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
784
+ | `font` | [FontStyle](#fontstyle) | ✓ | KPI chart-level font overrides; cascades from charts.font. |
791
785
  | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
792
786
  | `border` | [BorderStyle](#borderstyle) | ✓ | KPI card border style. |
793
787
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
794
788
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
795
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
796
789
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
797
790
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
798
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
791
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
799
792
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
800
793
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
801
794
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -816,15 +809,14 @@ Authored overlay for TableChartStyle. Table chart style overrides layered on top
816
809
 
817
810
  | Field | Type | Optional | Description |
818
811
  |-------|------|:--------:|-------------|
819
- | `font` | [FontStyle](#fontstyle) | ✓ | Chart-level font overrides. |
812
+ | `font` | [FontStyle](#fontstyle) | ✓ | Table chart-level font overrides; cascades from charts.font. |
820
813
  | `padding` | [PaddingStyle](#paddingstyle) | ✓ | Chart inner padding in pixels. |
821
814
  | `border` | [BorderStyle](#borderstyle) | ✓ | Table outer border style. |
822
815
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
823
816
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
824
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
825
817
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
826
818
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
827
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
819
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
828
820
  | `background` | str | ✓ | Table background color; None inherits from theme. |
829
821
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Table text color override (CSS string) or gradient scale config; None uses the theme default. |
830
822
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -878,10 +870,9 @@ Authored overlay for PointMapChartStyle. Point map chart style.
878
870
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
879
871
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
880
872
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
881
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
882
873
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
883
874
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
884
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
875
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
885
876
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
886
877
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
887
878
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -903,10 +894,9 @@ Authored overlay for GeoshapeChartStyle. Geoshape (choropleth) chart style.
903
894
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
904
895
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
905
896
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
906
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
907
897
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
908
898
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
909
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
899
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
910
900
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
911
901
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
912
902
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
@@ -954,7 +944,6 @@ Flat style patch for layered multi-mark charts.
954
944
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
955
945
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
956
946
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
957
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
958
947
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
959
948
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style overrides. |
960
949
  | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style overrides. |
@@ -1111,6 +1100,8 @@ Authored overlay for TextStyle. Markdown / plain text content.
1111
1100
  | `line_height` | float | ✓ | Line height multiplier for text content. |
1112
1101
  | `align` | enum: "left", "center", "right" | ✓ | Text alignment for the face body-text block. |
1113
1102
  | `column` | [TextColumnStyle](#textcolumnstyle) | ✓ | Multi-column layout for the face body-text block. |
1103
+ | `code` | [TextCodeStyle](#textcodestyle) | ✓ | Inline + fenced code box styling (font, background, border). |
1104
+ | `blockquote` | [TextBlockquoteStyle](#textblockquotestyle) | ✓ | Blockquote box styling (font, background, border/left-rule). |
1114
1105
 
1115
1106
  <a id="placeholderstyle"></a>
1116
1107
  ## PlaceholderStyle
@@ -1135,13 +1126,13 @@ Authored overlay for ChartsStyle. Registry of all chart-type styles plus shared
1135
1126
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1136
1127
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1137
1128
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1138
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1139
1129
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1140
1130
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
1141
1131
  | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
1142
1132
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1143
1133
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1144
1134
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |
1135
+ | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1145
1136
  | `default_chart_height` | float | ✓ | Fallback chart height in pixels when aspect-ratio sizing is unavailable. |
1146
1137
  | `default_table_height` | float | ✓ | Placeholder table height in pixels; replaced by data-aware row-count sizing at render time. |
1147
1138
  | `label_usable_ratio` | float | ✓ | Fraction of chart width usable for axis labels (0–1); labels are tilted when full labels exceed this width. |
@@ -1223,11 +1214,13 @@ Authored overlay for FooterStyle. Authored visibility toggle for the page footer
1223
1214
 
1224
1215
  <a id="timestampstyle"></a>
1225
1216
  ## TimestampStyle
1226
- Authored overlay for TimestampStyle. Authored timestamp chrome: visibility, strftime format, and font.
1217
+ Authored overlay for TimestampStyle. Authored timestamp chrome: visibility, placement, strftime format, and font.
1227
1218
 
1228
1219
  | Field | Type | Optional | Description |
1229
1220
  |-------|------|:--------:|-------------|
1230
1221
  | `visible` | bool | ✓ | Show the render-timestamp line. |
1222
+ | `position` | enum: "top", "footer" | ✓ | Timestamp row: top page chrome or footer baseline. |
1223
+ | `align` | enum: "left", "right" | ✓ | Timestamp horizontal alignment within its row. |
1231
1224
  | `format` | str | ✓ | strftime format string for the render timestamp. |
1232
1225
  | `font` | [FontStyle](#fontstyle) | ✓ | Timestamp font style overrides (size, color, weight, ...). |
1233
1226
 
@@ -1328,7 +1321,6 @@ Authored overlay for InferenceStyle.
1328
1321
  |-------|------|:--------:|-------------|
1329
1322
  | `infer_zero_when_missing` | bool | ✓ | Auto-infer zero-baseline when not authored. |
1330
1323
  | `infer_fields_when_missing` | bool | ✓ | Auto-infer chart fields (x, y, etc.) when not authored. |
1331
- | `infer_type_when_auto` | bool | ✓ | Auto-infer chart type when type is 'auto'. |
1332
1324
 
1333
1325
  <a id="legendstyle"></a>
1334
1326
  ## LegendStyle
@@ -1838,6 +1830,26 @@ Authored overlay for TextColumnStyle. Multi-column layout for face body text (CS
1838
1830
  | `rule` | str | ✓ | CSS column-rule shorthand, e.g. '1px solid #e5e7eb'. None = no rule. |
1839
1831
  | `width` | float | ✓ | Minimum column width in pixels for auto-column-count derivation. |
1840
1832
 
1833
+ <a id="textcodestyle"></a>
1834
+ ## TextCodeStyle
1835
+ Authored overlay for TextCodeStyle. Inline and fenced code spans in markdown prose. Box group; mono font by default.
1836
+
1837
+ | Field | Type | Optional | Description |
1838
+ |-------|------|:--------:|-------------|
1839
+ | `font` | [FontStyle](#fontstyle) | ✓ | Box text font overrides — full FontStyle (family, color, size, weight, style, decoration, case). |
1840
+ | `background` | str | ✓ | Box background fill. |
1841
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Box border (width, color, radius). |
1842
+
1843
+ <a id="textblockquotestyle"></a>
1844
+ ## TextBlockquoteStyle
1845
+ Authored overlay for TextBlockquoteStyle. Blockquote prose. Box group; border is the left rule.
1846
+
1847
+ | Field | Type | Optional | Description |
1848
+ |-------|------|:--------:|-------------|
1849
+ | `font` | [FontStyle](#fontstyle) | ✓ | Box text font overrides — full FontStyle (family, color, size, weight, style, decoration, case). |
1850
+ | `background` | str | ✓ | Box background fill. |
1851
+ | `border` | [BorderStyle](#borderstyle) | ✓ | Box border (width, color, radius). |
1852
+
1841
1853
  <a id="placeholderoverlay"></a>
1842
1854
  ## PlaceholderOverlay
1843
1855
  Authored overlay for PlaceholderOverlay.
@@ -1908,10 +1920,9 @@ Authored overlay for HistogramChartStyle. Histogram chart style.
1908
1920
  | `border` | [BorderStyle](#borderstyle) | ✓ | Chart card border style. |
1909
1921
  | `animation_duration` | float | ✓ | Vega-Lite animation duration in milliseconds. |
1910
1922
  | `palette` | list[str] \| str | ✓ | Ordered list of categorical color stops or a palette name; expanded from a palette name at validation time. |
1911
- | `dashes` | list[list[int]] | ✓ | Ordered list of Vega-Lite strokeDash arrays for line-family categorical encoding; None disables dash emission. |
1912
1923
  | `inference` | [InferenceStyle](#inferencestyle) | ✓ | Engine inference behavior flags. |
1913
1924
  | `legend` | [LegendStyle](#legendstyle) | ✓ | Chart legend style. |
1914
- | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Chart tooltip style. |
1925
+ | `tooltip` | [TooltipStyle](#tooltipstyle) | ✓ | Per-chart-type tooltip style override; None uses the universal style.charts.tooltip. |
1915
1926
  | `background` | str | ✓ | Chart-local background color override; None inherits from theme. |
1916
1927
  | `color` | str \| [StyleColorConfig](#stylecolorconfig) | ✓ | Chart-local static mark color (CSS string) or gradient scale config; None uses the theme palette. |
1917
1928
  | `title` | [TitleStyle](#titlestyle) | ✓ | Chart-level title style override; None inherits the theme title style. |