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.
- d3_format/__init__.py +14 -0
- d3_format/errors.py +19 -0
- d3_format/format.py +551 -0
- d3_format/spec.py +159 -0
- dataface/DATAFACE_SYNTAX.md +1135 -0
- dataface/__init__.py +93 -0
- dataface/_docs_site.py +20 -0
- dataface/_install_hint.py +26 -0
- dataface/agent_api/__init__.py +79 -0
- dataface/agent_api/_init_templates/__init__.py +0 -0
- dataface/agent_api/_init_templates/agents_dft_snippet.md +26 -0
- dataface/agent_api/_init_templates/dataface.yml +15 -0
- dataface/agent_api/_init_templates/faces-dataface.yml +144 -0
- dataface/agent_api/_init_templates/index.md +24 -0
- dataface/agent_api/_paths.py +118 -0
- dataface/agent_api/_project_agents_md.py +43 -0
- dataface/agent_api/_session_store.py +486 -0
- dataface/agent_api/_state.py +28 -0
- dataface/agent_api/chat.py +221 -0
- dataface/agent_api/dashboards.py +257 -0
- dataface/agent_api/describe.py +366 -0
- dataface/agent_api/describe_query.py +120 -0
- dataface/agent_api/docs/__init__.py +25 -0
- dataface/agent_api/docs/_loader.py +292 -0
- dataface/agent_api/docs/yaml-reference.md +2757 -0
- dataface/agent_api/file_refs.py +118 -0
- dataface/agent_api/init.py +126 -0
- dataface/agent_api/inspect.py +128 -0
- dataface/agent_api/mcp_install.py +170 -0
- dataface/agent_api/query.py +274 -0
- dataface/agent_api/schema.py +658 -0
- dataface/agent_api/schema_search.py +284 -0
- dataface/agent_api/search.py +270 -0
- dataface/agent_api/skill_install.py +141 -0
- dataface/agent_api/skill_render.py +90 -0
- dataface/agent_api/skills.py +293 -0
- dataface/agent_api/surface_aliases.yaml +128 -0
- dataface/agent_api/validate.py +175 -0
- dataface/agent_api/validate_query.py +84 -0
- dataface/ai/__init__.py +39 -0
- dataface/ai/agent.py +139 -0
- dataface/ai/context.py +45 -0
- dataface/ai/events.py +62 -0
- dataface/ai/external_mcp.py +610 -0
- dataface/ai/generate_sql.py +96 -0
- dataface/ai/llm.py +403 -0
- dataface/ai/mcp/__init__.py +51 -0
- dataface/ai/mcp/server.py +289 -0
- dataface/ai/memories.py +85 -0
- dataface/ai/prompts.py +177 -0
- dataface/ai/schema_context.py +138 -0
- dataface/ai/skills/before-after-comparison/SKILL.md +102 -0
- dataface/ai/skills/before-after-comparison/examples/before-after-comparison.yml +24 -0
- dataface/ai/skills/dashboard-build/SKILL.md +212 -0
- dataface/ai/skills/dashboard-build/examples/_smoke.yml +15 -0
- dataface/ai/skills/dashboard-design/SKILL.md +182 -0
- dataface/ai/skills/dashboard-review/SKILL.md +113 -0
- dataface/ai/skills/dashboard-structural-review/SKILL.md +173 -0
- dataface/ai/skills/dashboard-visual-review/SKILL.md +139 -0
- dataface/ai/skills/dataface-mcp-setup/SKILL.md +177 -0
- dataface/ai/skills/dataface-troubleshooting/SKILL.md +225 -0
- dataface/ai/skills/drill-down-link/SKILL.md +112 -0
- dataface/ai/skills/drill-down-link/examples/drill-down-link.yml +27 -0
- dataface/ai/skills/faceted-small-multiples/SKILL.md +116 -0
- dataface/ai/skills/faceted-small-multiples/examples/faceted-small-multiples.yml +33 -0
- dataface/ai/skills/filter-bar-with-variables/SKILL.md +105 -0
- dataface/ai/skills/filter-bar-with-variables/examples/filter-bar-with-variables.yml +49 -0
- dataface/ai/skills/kpi-row/SKILL.md +101 -0
- dataface/ai/skills/kpi-row/examples/kpi-row.yml +55 -0
- dataface/ai/skills/report-design/SKILL.md +184 -0
- dataface/ai/skills/single-metric-bignum/SKILL.md +90 -0
- dataface/ai/skills/single-metric-bignum/examples/single-metric-bignum.yml +27 -0
- dataface/ai/skills/table-heavy-ops-dashboard/SKILL.md +114 -0
- dataface/ai/skills/table-heavy-ops-dashboard/examples/table-heavy-ops-dashboard.yml +48 -0
- dataface/ai/skills/time-series-trend/SKILL.md +93 -0
- dataface/ai/skills/time-series-trend/examples/time-series-trend.yml +26 -0
- dataface/ai/skills/top-n-with-detail/SKILL.md +98 -0
- dataface/ai/skills/top-n-with-detail/examples/top-n-with-detail.yml +45 -0
- dataface/ai/skills/two-by-two-grid-overview/SKILL.md +78 -0
- dataface/ai/skills/two-by-two-grid-overview/examples/two-by-two-grid-overview.yml +64 -0
- dataface/ai/tool_schemas.py +132 -0
- dataface/ai/tools/__init__.py +312 -0
- dataface/ai/yaml_utils.py +57 -0
- dataface/cli/__init__.py +3 -0
- dataface/cli/_console.py +48 -0
- dataface/cli/_error_format.py +83 -0
- dataface/cli/_extras.py +190 -0
- dataface/cli/_json_output.py +8 -0
- dataface/cli/_parsing.py +17 -0
- dataface/cli/_version_info.py +56 -0
- dataface/cli/commands/__init__.py +3 -0
- dataface/cli/commands/_agent_input.py +205 -0
- dataface/cli/commands/_agent_server.py +115 -0
- dataface/cli/commands/chat.py +645 -0
- dataface/cli/commands/describe.py +107 -0
- dataface/cli/commands/docs.py +131 -0
- dataface/cli/commands/extension.py +179 -0
- dataface/cli/commands/init.py +240 -0
- dataface/cli/commands/inspect.py +94 -0
- dataface/cli/commands/mcp_init.py +167 -0
- dataface/cli/commands/query.py +386 -0
- dataface/cli/commands/render.py +291 -0
- dataface/cli/commands/schema.py +411 -0
- dataface/cli/commands/search.py +49 -0
- dataface/cli/commands/serve.py +114 -0
- dataface/cli/commands/skills.py +133 -0
- dataface/cli/commands/skills_init.py +161 -0
- dataface/cli/commands/validate.py +63 -0
- dataface/cli/main.py +1501 -0
- dataface/core/__init__.py +75 -0
- dataface/core/compile/__init__.py +244 -0
- dataface/core/compile/_jinja_helpers.py +78 -0
- dataface/core/compile/channel.py +222 -0
- dataface/core/compile/chart_focus.py +101 -0
- dataface/core/compile/chart_resolved.py +169 -0
- dataface/core/compile/chart_type_detection.py +489 -0
- dataface/core/compile/chart_update.py +261 -0
- dataface/core/compile/colors.py +64 -0
- dataface/core/compile/compiler.py +904 -0
- dataface/core/compile/config.py +823 -0
- dataface/core/compile/custom_chart_types.py +208 -0
- dataface/core/compile/data_table_attachment.py +1287 -0
- dataface/core/compile/detect.py +110 -0
- dataface/core/compile/errors.py +302 -0
- dataface/core/compile/filter_injection.py +319 -0
- dataface/core/compile/introspection.py +527 -0
- dataface/core/compile/jinja.py +511 -0
- dataface/core/compile/labels_env.py +52 -0
- dataface/core/compile/markdown.py +154 -0
- dataface/core/compile/meta.py +388 -0
- dataface/core/compile/models/__init__.py +0 -0
- dataface/core/compile/models/chart/__init__.py +0 -0
- dataface/core/compile/models/chart/authored.py +2137 -0
- dataface/core/compile/models/chart/compiled.py +398 -0
- dataface/core/compile/models/config.py +347 -0
- dataface/core/compile/models/face/__init__.py +0 -0
- dataface/core/compile/models/face/authored.py +659 -0
- dataface/core/compile/models/face/compiled.py +522 -0
- dataface/core/compile/models/factories.py +201 -0
- dataface/core/compile/models/markers.py +40 -0
- dataface/core/compile/models/palette.py +36 -0
- dataface/core/compile/models/primitives.py +415 -0
- dataface/core/compile/models/query/__init__.py +0 -0
- dataface/core/compile/models/query/authored.py +246 -0
- dataface/core/compile/models/query/compiled.py +710 -0
- dataface/core/compile/models/refs.py +137 -0
- dataface/core/compile/models/source.py +611 -0
- dataface/core/compile/models/style/__init__.py +0 -0
- dataface/core/compile/models/style/authored.py +481 -0
- dataface/core/compile/models/style/compiled.py +3399 -0
- dataface/core/compile/models/style/merged.py +1682 -0
- dataface/core/compile/models/theme.py +362 -0
- dataface/core/compile/models/variable/__init__.py +0 -0
- dataface/core/compile/models/variable/authored.py +254 -0
- dataface/core/compile/models/vega_lite/__init__.py +0 -0
- dataface/core/compile/models/vega_lite/config.py +510 -0
- dataface/core/compile/models/vega_lite/contracts.py +171 -0
- dataface/core/compile/normalize_charts.py +494 -0
- dataface/core/compile/normalize_layout.py +1000 -0
- dataface/core/compile/normalize_queries.py +297 -0
- dataface/core/compile/normalize_variables.py +489 -0
- dataface/core/compile/normalizer.py +543 -0
- dataface/core/compile/palette.py +1100 -0
- dataface/core/compile/parameterized.py +658 -0
- dataface/core/compile/parser.py +228 -0
- dataface/core/compile/schema.py +20 -0
- dataface/core/compile/schema_renderers/__init__.py +0 -0
- dataface/core/compile/schema_renderers/json_schema.py +163 -0
- dataface/core/compile/schema_renderers/prompt.py +152 -0
- dataface/core/compile/schema_renderers/vscode_schema.py +301 -0
- dataface/core/compile/sizing.py +2126 -0
- dataface/core/compile/sources.py +518 -0
- dataface/core/compile/sql_authoring_lint.py +56 -0
- dataface/core/compile/style_cascade.py +471 -0
- dataface/core/compile/typography.py +299 -0
- dataface/core/compile/validator.py +301 -0
- dataface/core/compile/variables.py +53 -0
- dataface/core/compile/vega_config.py +98 -0
- dataface/core/compile/vega_lite/__init__.py +6 -0
- dataface/core/compile/vega_lite/validation.py +95 -0
- dataface/core/compile/yaml_error_formatter.py +838 -0
- dataface/core/connections.py +38 -0
- dataface/core/dashboard.py +358 -0
- dataface/core/defaults/default_config.yml +101 -0
- dataface/core/defaults/palettes/categorical/category-10-dark.yml +32 -0
- dataface/core/defaults/palettes/categorical/category-10-light.yml +43 -0
- dataface/core/defaults/palettes/categorical/category-10.yml +31 -0
- dataface/core/defaults/palettes/categorical/category-6-tonal-blue.yml +22 -0
- dataface/core/defaults/palettes/categorical/category-6-tonal-brown.yml +29 -0
- dataface/core/defaults/palettes/categorical/category-6-tonal-green.yml +20 -0
- dataface/core/defaults/palettes/categorical/category-6-tonal-orange.yml +21 -0
- dataface/core/defaults/palettes/categorical/category-6-tonal-purple.yml +20 -0
- dataface/core/defaults/palettes/categorical/editorial-10-dark.yml +32 -0
- dataface/core/defaults/palettes/categorical/editorial-10.yml +40 -0
- dataface/core/defaults/palettes/categorical/hero-6.yml +17 -0
- dataface/core/defaults/palettes/categorical/single-blue.yml +11 -0
- dataface/core/defaults/palettes/categorical/tableau.yml +20 -0
- dataface/core/defaults/palettes/data/xkcd_colors.json +3803 -0
- dataface/core/defaults/palettes/diverging/blue-red.yml +25 -0
- dataface/core/defaults/palettes/diverging/coolwarm.yml +24 -0
- dataface/core/defaults/palettes/diverging/crimson-green.yml +23 -0
- dataface/core/defaults/palettes/diverging/orange-teal.yml +23 -0
- dataface/core/defaults/palettes/diverging/sunset.yml +24 -0
- dataface/core/defaults/palettes/scaffold/dft-creams.yml +38 -0
- dataface/core/defaults/palettes/scaffold/dft-grays.yml +53 -0
- dataface/core/defaults/palettes/sequential/amber.yml +22 -0
- dataface/core/defaults/palettes/sequential/blue.yml +22 -0
- dataface/core/defaults/palettes/sequential/brown.yml +22 -0
- dataface/core/defaults/palettes/sequential/gray.yml +22 -0
- dataface/core/defaults/palettes/sequential/green.yml +22 -0
- dataface/core/defaults/palettes/sequential/purple.yml +22 -0
- dataface/core/defaults/palettes/sequential/rust.yml +22 -0
- dataface/core/defaults/palettes/sequential/teal.yml +22 -0
- dataface/core/defaults/palettes/tone/negative.yml +32 -0
- dataface/core/defaults/palettes/tone/positive.yml +22 -0
- dataface/core/defaults/palettes/tone/warning.yml +22 -0
- dataface/core/defaults/themes/_base.yaml +786 -0
- dataface/core/defaults/themes/bi.yaml +16 -0
- dataface/core/defaults/themes/carbong100.yaml +41 -0
- dataface/core/defaults/themes/cream.yaml +122 -0
- dataface/core/defaults/themes/dark.yaml +40 -0
- dataface/core/defaults/themes/diagnostics-title-angle-extreme.yaml +9 -0
- dataface/core/defaults/themes/diagnostics-title-baseline-extreme.yaml +9 -0
- dataface/core/defaults/themes/diagnostics-title-baseline.yaml +24 -0
- dataface/core/defaults/themes/diagnostics-title-center.yaml +8 -0
- dataface/core/defaults/themes/diagnostics-title-color-extreme.yaml +24 -0
- dataface/core/defaults/themes/diagnostics-title-font-extreme.yaml +25 -0
- dataface/core/defaults/themes/diagnostics-title-left.yaml +8 -0
- dataface/core/defaults/themes/diagnostics-title-offset-extreme.yaml +9 -0
- dataface/core/defaults/themes/diagnostics-title-size-extreme.yaml +24 -0
- dataface/core/defaults/themes/diagnostics-title-weight-extreme.yaml +24 -0
- dataface/core/defaults/themes/editorial.yaml +147 -0
- dataface/core/defaults/themes/light.yaml +30 -0
- dataface/core/defaults/themes/looker.yaml +17 -0
- dataface/core/defaults/themes/stark.yaml +134 -0
- dataface/core/errors/__init__.py +67 -0
- dataface/core/errors/codes_compile.py +56 -0
- dataface/core/errors/codes_execute.py +177 -0
- dataface/core/errors/codes_render.py +106 -0
- dataface/core/errors/codes_unknown.py +15 -0
- dataface/core/errors/hints.py +74 -0
- dataface/core/errors/registry.py +42 -0
- dataface/core/errors/structured.py +92 -0
- dataface/core/execute/__init__.py +91 -0
- dataface/core/execute/adapters/__init__.py +49 -0
- dataface/core/execute/adapters/adapter_registry.py +400 -0
- dataface/core/execute/adapters/base.py +245 -0
- dataface/core/execute/adapters/csv_adapter.py +239 -0
- dataface/core/execute/adapters/dbt_adapter.py +283 -0
- dataface/core/execute/adapters/dbt_adapter_factory.py +212 -0
- dataface/core/execute/adapters/dbt_macro_loader.py +95 -0
- dataface/core/execute/adapters/dbt_utils.py +150 -0
- dataface/core/execute/adapters/http_adapter.py +224 -0
- dataface/core/execute/adapters/metricflow_adapter.py +94 -0
- dataface/core/execute/adapters/schema_resolver_adapter.py +144 -0
- dataface/core/execute/adapters/sql_adapter.py +710 -0
- dataface/core/execute/adapters/values_adapter.py +58 -0
- dataface/core/execute/batch.py +744 -0
- dataface/core/execute/cache_backend.py +135 -0
- dataface/core/execute/cache_keys.py +66 -0
- dataface/core/execute/dbt_jinja.py +21 -0
- dataface/core/execute/dialects/__init__.py +121 -0
- dataface/core/execute/dialects/athena.py +75 -0
- dataface/core/execute/dialects/base.py +302 -0
- dataface/core/execute/dialects/bigquery.py +38 -0
- dataface/core/execute/dialects/databricks.py +68 -0
- dataface/core/execute/dialects/duckdb.py +35 -0
- dataface/core/execute/dialects/mysql.py +68 -0
- dataface/core/execute/dialects/postgres.py +39 -0
- dataface/core/execute/dialects/redshift.py +12 -0
- dataface/core/execute/dialects/snowflake.py +51 -0
- dataface/core/execute/dialects/sqlserver.py +92 -0
- dataface/core/execute/duckdb_cache.py +712 -0
- dataface/core/execute/duckdb_config.py +26 -0
- dataface/core/execute/errors.py +213 -0
- dataface/core/execute/executor.py +1249 -0
- dataface/core/execute/parallel.py +162 -0
- dataface/core/execute/setup_sql.py +58 -0
- dataface/core/execute/source_registry.py +72 -0
- dataface/core/execute/source_resolver.py +255 -0
- dataface/core/execute/sql_guard.py +387 -0
- dataface/core/execute/sql_literals.py +199 -0
- dataface/core/fonts.py +52 -0
- dataface/core/inspect/__init__.py +32 -0
- dataface/core/inspect/cache_factory.py +98 -0
- dataface/core/inspect/db_types.py +162 -0
- dataface/core/inspect/dbt_schema.py +96 -0
- dataface/core/inspect/defaults.yml +37 -0
- dataface/core/inspect/fanout_risk.py +109 -0
- dataface/core/inspect/manifest_utils.py +77 -0
- dataface/core/inspect/partials/categorical.yml +40 -0
- dataface/core/inspect/partials/date.yml +40 -0
- dataface/core/inspect/partials/numeric.yml +55 -0
- dataface/core/inspect/partition_types.py +38 -0
- dataface/core/inspect/query_validator.py +975 -0
- dataface/core/inspect/renderer.py +354 -0
- dataface/core/inspect/resolver.py +808 -0
- dataface/core/inspect/search.py +461 -0
- dataface/core/inspect/sources/__init__.py +32 -0
- dataface/core/inspect/sources/dbt.py +738 -0
- dataface/core/inspect/sources/duckdb_utils.py +66 -0
- dataface/core/inspect/templates/__init__.py +1 -0
- dataface/core/inspect/templates/categorical_column.yml +196 -0
- dataface/core/inspect/templates/charts.yml +109 -0
- dataface/core/inspect/templates/date_column.yml +248 -0
- dataface/core/inspect/templates/model.yml +138 -0
- dataface/core/inspect/templates/numeric_column.yml +261 -0
- dataface/core/inspect/templates/quality.yml +80 -0
- dataface/core/inspect/templates/string_column.yml +263 -0
- dataface/core/project_roots.py +165 -0
- dataface/core/render/__init__.py +87 -0
- dataface/core/render/board_links.py +176 -0
- dataface/core/render/chart/__init__.py +27 -0
- dataface/core/render/chart/arc_attached_table.py +251 -0
- dataface/core/render/chart/artifacts.py +16 -0
- dataface/core/render/chart/callout.py +225 -0
- dataface/core/render/chart/decisions.py +358 -0
- dataface/core/render/chart/geo.py +700 -0
- dataface/core/render/chart/kpi.py +916 -0
- dataface/core/render/chart/labels.py +76 -0
- dataface/core/render/chart/pipeline.py +818 -0
- dataface/core/render/chart/presentation.py +36 -0
- dataface/core/render/chart/profile.py +3438 -0
- dataface/core/render/chart/render_single.py +347 -0
- dataface/core/render/chart/renderers.py +193 -0
- dataface/core/render/chart/rendering.py +565 -0
- dataface/core/render/chart/serialization.py +90 -0
- dataface/core/render/chart/spark.py +496 -0
- dataface/core/render/chart/spark_bar.py +370 -0
- dataface/core/render/chart/spec_builders.py +154 -0
- dataface/core/render/chart/standard_renderer.py +2645 -0
- dataface/core/render/chart/table.py +2957 -0
- dataface/core/render/chart/table_support.py +1452 -0
- dataface/core/render/chart/tick_values.py +66 -0
- dataface/core/render/chart/time_unit_detect.py +809 -0
- dataface/core/render/chart/title_overflow.py +157 -0
- dataface/core/render/chart/type_inference.py +122 -0
- dataface/core/render/chart/validation.py +99 -0
- dataface/core/render/chart/vega_lite.py +125 -0
- dataface/core/render/chart/vega_lite_types.py +268 -0
- dataface/core/render/chart/vl_field_maps.py +346 -0
- dataface/core/render/chart_interactivity.py +24 -0
- dataface/core/render/control_registry.py +287 -0
- dataface/core/render/converters/__init__.py +24 -0
- dataface/core/render/converters/chart.py +276 -0
- dataface/core/render/converters/html.py +98 -0
- dataface/core/render/converters/pdf.py +40 -0
- dataface/core/render/converters/png.py +41 -0
- dataface/core/render/errors.py +144 -0
- dataface/core/render/face_api.py +160 -0
- dataface/core/render/faces.py +1194 -0
- dataface/core/render/font_measurement.py +48 -0
- dataface/core/render/font_support.py +197 -0
- dataface/core/render/fonts/DFTSansTabular-Regular.ttf +0 -0
- dataface/core/render/fonts/DFTSansTabular-Regular.woff2 +0 -0
- dataface/core/render/fonts/DFTSerifOldstyleProportional-Regular.ttf +0 -0
- dataface/core/render/fonts/DFTSerifOldstyleTabular-Regular.ttf +0 -0
- dataface/core/render/fonts/InterVariable.ttf +0 -0
- dataface/core/render/fonts/InterVariable.woff2 +0 -0
- dataface/core/render/fonts/NOTO_COLOR_EMOJI_LICENSE.txt +93 -0
- dataface/core/render/fonts/NOTO_EMOJI_LICENSE.txt +93 -0
- dataface/core/render/fonts/NotoColorEmoji-Regular.ttf +0 -0
- dataface/core/render/fonts/NotoColorEmoji-Regular.woff2 +0 -0
- dataface/core/render/fonts/NotoEmoji-Regular.ttf +0 -0
- dataface/core/render/fonts/NotoEmoji-Regular.woff2 +0 -0
- dataface/core/render/fonts/SOURCE_CODE_PRO_LICENSE.txt +93 -0
- dataface/core/render/fonts/SOURCE_SERIF_4_LICENSE.txt +98 -0
- dataface/core/render/fonts/SourceCodePro-Regular.ttf +0 -0
- dataface/core/render/fonts/SourceSerif4-Regular.ttf +0 -0
- dataface/core/render/fonts/_emoji_font_face.css +43 -0
- dataface/core/render/fonts/source-serif-4-variable-latin.woff2 +0 -0
- dataface/core/render/format_utils.py +329 -0
- dataface/core/render/geo_defaults.yml +28 -0
- dataface/core/render/json_format.py +146 -0
- dataface/core/render/layout_sizing.py +865 -0
- dataface/core/render/layouts.py +541 -0
- dataface/core/render/markdown_defaults.yml +16 -0
- dataface/core/render/missing_vars_prompt.py +79 -0
- dataface/core/render/placeholder.py +389 -0
- dataface/core/render/render_result.py +14 -0
- dataface/core/render/renderer.py +467 -0
- dataface/core/render/script_embedding.py +16 -0
- dataface/core/render/svg_utils.py +212 -0
- dataface/core/render/template_loader.py +69 -0
- dataface/core/render/templates/controls/_styles.css +606 -0
- dataface/core/render/templates/controls/checkbox.html +16 -0
- dataface/core/render/templates/controls/date.html +16 -0
- dataface/core/render/templates/controls/number.html +19 -0
- dataface/core/render/templates/controls/readonly.html +9 -0
- dataface/core/render/templates/controls/select.html +21 -0
- dataface/core/render/templates/controls/slider.html +22 -0
- dataface/core/render/templates/controls/text.html +16 -0
- dataface/core/render/templates/scripts/chart_interactivity.js +191 -0
- dataface/core/render/templates/scripts/variables.js +976 -0
- dataface/core/render/templates/svg/grid_pattern.svg +3 -0
- dataface/core/render/templates/svg/styles.css +51 -0
- dataface/core/render/terminal.py +311 -0
- dataface/core/render/terminal_charts.py +563 -0
- dataface/core/render/terminal_defaults.yml +2 -0
- dataface/core/render/terminal_layouts.py +299 -0
- dataface/core/render/terminal_text.py +31 -0
- dataface/core/render/text/__init__.py +1 -0
- dataface/core/render/text/case.py +113 -0
- dataface/core/render/text_format.py +129 -0
- dataface/core/render/utils.py +106 -0
- dataface/core/render/variable_controls.py +946 -0
- dataface/core/render/variable_input_refinement.py +140 -0
- dataface/core/render/warnings/__init__.py +15 -0
- dataface/core/render/warnings/bar_color_1_to_1_with_x.py +80 -0
- dataface/core/render/warnings/base.py +44 -0
- dataface/core/render/warnings/fanout_risk.py +15 -0
- dataface/core/render/warnings/from_query_diagnostic.py +56 -0
- dataface/core/render/warnings/missing_join_predicate.py +13 -0
- dataface/core/render/warnings/query_parse_error.py +14 -0
- dataface/core/render/warnings/query_returned_zero_rows.py +42 -0
- dataface/core/render/warnings/reaggregation.py +14 -0
- dataface/core/render/warnings/registry.py +45 -0
- dataface/core/render/warnings/suppression.py +46 -0
- dataface/core/render/warnings/temporal_single_point.py +63 -0
- dataface/core/render/warnings/unreferenced_chart.py +15 -0
- dataface/core/render/warnings/y_encoding_mostly_null.py +76 -0
- dataface/core/render/yaml_format.py +167 -0
- dataface/core/resolve_face.py +195 -0
- dataface/core/schema/__init__.py +0 -0
- dataface/core/schema/guidance.py +151 -0
- dataface/core/scoped_paths.py +59 -0
- dataface/core/serve/__init__.py +14 -0
- dataface/core/serve/bootstrap.py +39 -0
- dataface/core/serve/embedded.py +57 -0
- dataface/core/serve/port.py +129 -0
- dataface/core/serve/server.py +938 -0
- dataface/core/serve/templates/__init__.py +0 -0
- dataface/core/serve/templates/directory.yml +6 -0
- dataface/core/serve/templates/error.html.j2 +217 -0
- dataface/core/utils.py +121 -0
- dataface/core/validate.py +64 -0
- dataface/integrations/__init__.py +0 -0
- dataface/integrations/highlighting.py +351 -0
- dataface/integrations/markdown.py +537 -0
- dataface/py.typed +0 -0
- dataface-0.1.2.dist-info/METADATA +375 -0
- dataface-0.1.2.dist-info/RECORD +455 -0
- dataface-0.1.2.dist-info/WHEEL +4 -0
- dataface-0.1.2.dist-info/entry_points.txt +2 -0
- dataface-0.1.2.dist-info/licenses/LICENSE +202 -0
- mdsvg/__init__.py +168 -0
- mdsvg/fonts.py +656 -0
- mdsvg/images.py +299 -0
- mdsvg/parser.py +629 -0
- mdsvg/playground.py +284 -0
- mdsvg/py.typed +2 -0
- mdsvg/renderer.py +1623 -0
- mdsvg/style.py +355 -0
- mdsvg/types.py +200 -0
- mdsvg/utils.py +86 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Unified theme: bi
|
|
2
|
+
# Business-intelligence variant. Body reads as content (inherits from the
|
|
3
|
+
# face default); header reads as apparatus — small, semibold, subtly
|
|
4
|
+
# de-emphasized color. Use when the table should feel like a reporting
|
|
5
|
+
# app rather than editorial content. Extends stark, adding
|
|
6
|
+
# only the header treatment.
|
|
7
|
+
|
|
8
|
+
extends: stark
|
|
9
|
+
style:
|
|
10
|
+
charts:
|
|
11
|
+
table:
|
|
12
|
+
header:
|
|
13
|
+
font:
|
|
14
|
+
size: 11
|
|
15
|
+
weight: '600'
|
|
16
|
+
color: dft-grays.heading
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Unified theme: carbong100
|
|
2
|
+
|
|
3
|
+
extends: dark
|
|
4
|
+
style:
|
|
5
|
+
background: '#161616'
|
|
6
|
+
charts:
|
|
7
|
+
marks:
|
|
8
|
+
area:
|
|
9
|
+
opacity: 0.2
|
|
10
|
+
line:
|
|
11
|
+
stroke:
|
|
12
|
+
width: 2
|
|
13
|
+
axis:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: '#c6c6c6'
|
|
17
|
+
size: &size_label 12
|
|
18
|
+
title:
|
|
19
|
+
font:
|
|
20
|
+
color: &color_light '#f4f4f4'
|
|
21
|
+
size: *size_label
|
|
22
|
+
weight: normal
|
|
23
|
+
legend:
|
|
24
|
+
label:
|
|
25
|
+
font:
|
|
26
|
+
color: *color_light
|
|
27
|
+
size: *size_label
|
|
28
|
+
title:
|
|
29
|
+
font:
|
|
30
|
+
color: *color_light
|
|
31
|
+
size: *size_label
|
|
32
|
+
palette:
|
|
33
|
+
- '#8a3ffc'
|
|
34
|
+
- '#33b1ff'
|
|
35
|
+
- '#007d79'
|
|
36
|
+
- '#ff7eb6'
|
|
37
|
+
- '#fa4d56'
|
|
38
|
+
- '#fff1f1'
|
|
39
|
+
title:
|
|
40
|
+
font:
|
|
41
|
+
color: *color_light
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Unified theme: cream
|
|
2
|
+
# The shipped `default` theme on a cream surface. Chart chrome is wired through
|
|
3
|
+
# the dft-creams.* palette so axis grids, ticks, labels, and mark strokes sit
|
|
4
|
+
# on the cream canvas instead of inheriting the gray defaults from `stark`.
|
|
5
|
+
|
|
6
|
+
extends: editorial
|
|
7
|
+
style:
|
|
8
|
+
background: dft-creams.canvas
|
|
9
|
+
# Outer page canvas behind the face — match the face background so the cream
|
|
10
|
+
# tone reads as a single surface instead of a card on a gray page.
|
|
11
|
+
page:
|
|
12
|
+
background: dft-creams.canvas
|
|
13
|
+
muted: dft-creams.muted
|
|
14
|
+
font:
|
|
15
|
+
color: dft-creams.ink
|
|
16
|
+
title:
|
|
17
|
+
# Face title color is one step lighter than `heading` (the structural
|
|
18
|
+
# default from stark). Same softening pattern the `default` theme applies
|
|
19
|
+
# with dft-grays.inactive — keeps the face title authoritative without
|
|
20
|
+
# competing with the chart titles below it in the title-inline band.
|
|
21
|
+
font:
|
|
22
|
+
color: dft-creams.inactive
|
|
23
|
+
subtitle:
|
|
24
|
+
font:
|
|
25
|
+
color: dft-creams.subtitle
|
|
26
|
+
border:
|
|
27
|
+
color: dft-creams.border
|
|
28
|
+
text:
|
|
29
|
+
font:
|
|
30
|
+
color: dft-creams.ink
|
|
31
|
+
charts:
|
|
32
|
+
# bar.border.color now tracks theme.background via self-reference at the
|
|
33
|
+
# default-theme level (see stark.yaml), so the cream knockout
|
|
34
|
+
# falls out of theme.background = cream-025 automatically. No explicit
|
|
35
|
+
# override needed here.
|
|
36
|
+
marks:
|
|
37
|
+
rule:
|
|
38
|
+
stroke:
|
|
39
|
+
color: dft-creams.ink
|
|
40
|
+
tick:
|
|
41
|
+
stroke:
|
|
42
|
+
color: dft-creams.ink
|
|
43
|
+
text:
|
|
44
|
+
font:
|
|
45
|
+
color: dft-creams.heading
|
|
46
|
+
axis:
|
|
47
|
+
domain:
|
|
48
|
+
color: dft-creams.grid
|
|
49
|
+
grid:
|
|
50
|
+
color: dft-creams.grid
|
|
51
|
+
zero:
|
|
52
|
+
color: dft-creams.subtitle
|
|
53
|
+
ticks:
|
|
54
|
+
color: dft-creams.grid
|
|
55
|
+
label:
|
|
56
|
+
font:
|
|
57
|
+
color: dft-creams.muted
|
|
58
|
+
title:
|
|
59
|
+
font:
|
|
60
|
+
color: dft-creams.heading
|
|
61
|
+
# axis_x cascades from axis — no overrides needed.
|
|
62
|
+
axis_y:
|
|
63
|
+
grid:
|
|
64
|
+
color: dft-creams.grid-emphasis # softer grid for the value axis (overrides default gray)
|
|
65
|
+
ticks:
|
|
66
|
+
color: dft-creams.grid-emphasis
|
|
67
|
+
axis_quantitative:
|
|
68
|
+
grid:
|
|
69
|
+
color: dft-creams.grid-emphasis
|
|
70
|
+
ticks:
|
|
71
|
+
color: dft-creams.grid-emphasis
|
|
72
|
+
legend:
|
|
73
|
+
label:
|
|
74
|
+
font:
|
|
75
|
+
color: dft-creams.muted
|
|
76
|
+
title:
|
|
77
|
+
font:
|
|
78
|
+
color: dft-creams.heading
|
|
79
|
+
table:
|
|
80
|
+
border:
|
|
81
|
+
color: dft-creams.border
|
|
82
|
+
header:
|
|
83
|
+
font:
|
|
84
|
+
color: dft-creams.heading
|
|
85
|
+
row:
|
|
86
|
+
stripe:
|
|
87
|
+
color: dft-creams.surface-subtle
|
|
88
|
+
paginator:
|
|
89
|
+
# Cream-scaffold variant of the default gray ramp — same three-tier
|
|
90
|
+
# contrast, warm-canvas colours.
|
|
91
|
+
color_active: dft-creams.ink
|
|
92
|
+
color_inactive: dft-creams.inactive
|
|
93
|
+
color_disabled: dft-creams.disabled
|
|
94
|
+
spark:
|
|
95
|
+
# Spark progress track was renamed to `bar` upstream (single
|
|
96
|
+
# horizontal bar with optional track in `bar-normalize`).
|
|
97
|
+
bar:
|
|
98
|
+
background: dft-creams.border
|
|
99
|
+
data_table:
|
|
100
|
+
font:
|
|
101
|
+
color: dft-creams.muted
|
|
102
|
+
divider:
|
|
103
|
+
color: dft-creams.muted
|
|
104
|
+
label:
|
|
105
|
+
font:
|
|
106
|
+
color: dft-creams.muted
|
|
107
|
+
variables:
|
|
108
|
+
font:
|
|
109
|
+
color: dft-creams.muted
|
|
110
|
+
placeholder:
|
|
111
|
+
# Cream-toned hint for warm-canvas themes (overrides stark's
|
|
112
|
+
# gray disabled token so unselected text stays in the cream ramp).
|
|
113
|
+
font:
|
|
114
|
+
color: dft-creams.disabled
|
|
115
|
+
border:
|
|
116
|
+
color: dft-creams.grid-emphasis
|
|
117
|
+
input:
|
|
118
|
+
border:
|
|
119
|
+
color: dft-creams.border
|
|
120
|
+
# Cream-toned rail so the daterange popover feels like it sits on the
|
|
121
|
+
# editorial canvas rather than wearing a gray-50 patch on cream.
|
|
122
|
+
popover_rail_background: dft-creams.surface-subtle
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Unified theme: dark
|
|
2
|
+
|
|
3
|
+
extends: stark
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
legend:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: '#aaaaaa'
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: &color_title_text '#cccccc'
|
|
13
|
+
table:
|
|
14
|
+
header:
|
|
15
|
+
background: '#252538'
|
|
16
|
+
font:
|
|
17
|
+
color: &color_text_light '#eaeaea'
|
|
18
|
+
row:
|
|
19
|
+
stripe:
|
|
20
|
+
color: '#1f1f30'
|
|
21
|
+
background: '#1a1a2e'
|
|
22
|
+
font:
|
|
23
|
+
color: *color_text_light
|
|
24
|
+
title:
|
|
25
|
+
font:
|
|
26
|
+
color: *color_title_text
|
|
27
|
+
border:
|
|
28
|
+
color: '#333344'
|
|
29
|
+
variables:
|
|
30
|
+
font:
|
|
31
|
+
color: *color_title_text
|
|
32
|
+
border:
|
|
33
|
+
color: '#444455'
|
|
34
|
+
input:
|
|
35
|
+
background: '#2a2a3e'
|
|
36
|
+
# Input border tracks the surrounding strip border on dark theme;
|
|
37
|
+
# default theme collapsed this to ink which would read too dark
|
|
38
|
+
# against the navy canvas.
|
|
39
|
+
border:
|
|
40
|
+
color: '#444455'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Unified theme: diagnostics-title-baseline
|
|
2
|
+
|
|
3
|
+
extends: light
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
axis:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: dft-grays.muted
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: dft-grays.heading
|
|
13
|
+
legend:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: dft-grays.muted
|
|
17
|
+
title:
|
|
18
|
+
font:
|
|
19
|
+
color: dft-grays.heading
|
|
20
|
+
title:
|
|
21
|
+
font:
|
|
22
|
+
color: dft-grays.ink
|
|
23
|
+
weight: 400
|
|
24
|
+
size: 14
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Unified theme: diagnostics-title-color-extreme
|
|
2
|
+
|
|
3
|
+
extends: light
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
axis:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: dft-grays.muted
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: dft-grays.heading
|
|
13
|
+
legend:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: dft-grays.muted
|
|
17
|
+
title:
|
|
18
|
+
font:
|
|
19
|
+
color: dft-grays.heading
|
|
20
|
+
title:
|
|
21
|
+
font:
|
|
22
|
+
color: '#00a651'
|
|
23
|
+
weight: 400
|
|
24
|
+
size: 14
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Unified theme: diagnostics-title-font-extreme
|
|
2
|
+
|
|
3
|
+
extends: light
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
axis:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: dft-grays.muted
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: dft-grays.heading
|
|
13
|
+
legend:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: dft-grays.muted
|
|
17
|
+
title:
|
|
18
|
+
font:
|
|
19
|
+
color: dft-grays.heading
|
|
20
|
+
title:
|
|
21
|
+
font:
|
|
22
|
+
color: dft-grays.ink
|
|
23
|
+
family: Courier New
|
|
24
|
+
weight: 400
|
|
25
|
+
size: 14
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Unified theme: diagnostics-title-size-extreme
|
|
2
|
+
|
|
3
|
+
extends: light
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
axis:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: dft-grays.muted
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: dft-grays.heading
|
|
13
|
+
legend:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: dft-grays.muted
|
|
17
|
+
title:
|
|
18
|
+
font:
|
|
19
|
+
color: dft-grays.heading
|
|
20
|
+
title:
|
|
21
|
+
font:
|
|
22
|
+
color: dft-grays.ink
|
|
23
|
+
weight: 400
|
|
24
|
+
size: 22
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Unified theme: diagnostics-title-weight-extreme
|
|
2
|
+
|
|
3
|
+
extends: light
|
|
4
|
+
style:
|
|
5
|
+
charts:
|
|
6
|
+
axis:
|
|
7
|
+
label:
|
|
8
|
+
font:
|
|
9
|
+
color: dft-grays.muted
|
|
10
|
+
title:
|
|
11
|
+
font:
|
|
12
|
+
color: dft-grays.heading
|
|
13
|
+
legend:
|
|
14
|
+
label:
|
|
15
|
+
font:
|
|
16
|
+
color: dft-grays.muted
|
|
17
|
+
title:
|
|
18
|
+
font:
|
|
19
|
+
color: dft-grays.heading
|
|
20
|
+
title:
|
|
21
|
+
font:
|
|
22
|
+
color: dft-grays.ink
|
|
23
|
+
weight: 100
|
|
24
|
+
size: 14
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Unified theme: editorial
|
|
2
|
+
# The shipped Dataface default. Serif-forward titles, multi-step gray scaffold
|
|
3
|
+
# ladder, steel-blue accent — the "editorial voice" applied on top of the
|
|
4
|
+
# `stark` structural root. Pick `stark` directly to opt out of the refined
|
|
5
|
+
# hierarchy; pick `cream` for the same voice on a warm canvas.
|
|
6
|
+
|
|
7
|
+
extends: stark
|
|
8
|
+
style:
|
|
9
|
+
# Editorial palette — gray scaffold + steel-blue accent in place of
|
|
10
|
+
# the brighter stark accent/muted.
|
|
11
|
+
muted: dft-grays.muted
|
|
12
|
+
accent: '#2d74b3'
|
|
13
|
+
# Face/card border — subtle gray when a face opts into a visible border.
|
|
14
|
+
# `stark` collapses this to ink (gray-80); `editorial` restores the
|
|
15
|
+
# editorial soft separator.
|
|
16
|
+
border:
|
|
17
|
+
color: dft-grays.border
|
|
18
|
+
# Prose ink — gray-90, restored from `stark`'s ink collapse.
|
|
19
|
+
font:
|
|
20
|
+
color: dft-grays.ink
|
|
21
|
+
text:
|
|
22
|
+
font:
|
|
23
|
+
family: "'Source Serif 4', Georgia, 'Times New Roman', serif"
|
|
24
|
+
color: dft-grays.ink
|
|
25
|
+
title:
|
|
26
|
+
# Serif headlines — the editorial voice the `editorial` theme adds on top
|
|
27
|
+
# of `stark`. Source Serif 4 is the editorial face; chart-title
|
|
28
|
+
# typography is width-driven (see core/compile/typography.py) and reads
|
|
29
|
+
# this family for medium/wide chart cards.
|
|
30
|
+
#
|
|
31
|
+
# Color: one step lighter than `heading` (the stark default). The
|
|
32
|
+
# title-inline band puts the face title on the same horizontal row as
|
|
33
|
+
# the variable filters; softening the title from `heading` to
|
|
34
|
+
# `inactive` keeps the title authoritative without competing with the
|
|
35
|
+
# chart titles below it.
|
|
36
|
+
font:
|
|
37
|
+
family: "'Source Serif 4', Georgia, 'Times New Roman', serif"
|
|
38
|
+
color: dft-grays.inactive
|
|
39
|
+
subtitle:
|
|
40
|
+
font:
|
|
41
|
+
color: dft-grays.subtitle
|
|
42
|
+
charts:
|
|
43
|
+
# Editorial default categorical palette — succeeds category-10 (the
|
|
44
|
+
# stark value). Blue-led, muted across the board, designed
|
|
45
|
+
# for cycling so 1-5 series charts stay quiet by default. See
|
|
46
|
+
# dataface/src/dataface/core/defaults/palettes/categorical/editorial-10.yml.
|
|
47
|
+
palette: editorial-10
|
|
48
|
+
axis:
|
|
49
|
+
label:
|
|
50
|
+
font:
|
|
51
|
+
color: dft-grays.muted
|
|
52
|
+
title:
|
|
53
|
+
font:
|
|
54
|
+
color: dft-grays.heading
|
|
55
|
+
grid:
|
|
56
|
+
color: dft-grays.grid
|
|
57
|
+
zero:
|
|
58
|
+
color: dft-grays.subtitle
|
|
59
|
+
ticks:
|
|
60
|
+
color: dft-grays.grid
|
|
61
|
+
domain:
|
|
62
|
+
color: dft-grays.grid
|
|
63
|
+
axis_y:
|
|
64
|
+
grid:
|
|
65
|
+
color: dft-grays.grid-emphasis
|
|
66
|
+
ticks:
|
|
67
|
+
color: dft-grays.grid-emphasis
|
|
68
|
+
axis_quantitative:
|
|
69
|
+
grid:
|
|
70
|
+
color: dft-grays.grid-emphasis
|
|
71
|
+
ticks:
|
|
72
|
+
color: dft-grays.grid-emphasis
|
|
73
|
+
# Enforce sparse y-axis tick density: 6 ticks max instead of VL's
|
|
74
|
+
# "as many as fit" default (~20 on a 0–4000 range). The renderer
|
|
75
|
+
# converts this to explicit tickValues so VL respects the target.
|
|
76
|
+
count: 6
|
|
77
|
+
legend:
|
|
78
|
+
label:
|
|
79
|
+
font:
|
|
80
|
+
color: dft-grays.muted
|
|
81
|
+
title:
|
|
82
|
+
font:
|
|
83
|
+
color: dft-grays.heading
|
|
84
|
+
# Editorial direction: prefer direct labeling over a legend.
|
|
85
|
+
# Per-chart `legend.disable: false` still wins for charts that
|
|
86
|
+
# genuinely want a legend.
|
|
87
|
+
disable: true
|
|
88
|
+
kpi:
|
|
89
|
+
# KPI value font is a serif on editorial themes — narrative type
|
|
90
|
+
# for the headline number while the body and support-row stay on
|
|
91
|
+
# the tabular sans (kpi.font.family from stark).
|
|
92
|
+
value:
|
|
93
|
+
font:
|
|
94
|
+
family: "'Source Serif 4', Georgia, 'Times New Roman', serif"
|
|
95
|
+
bar:
|
|
96
|
+
legend:
|
|
97
|
+
disable: false
|
|
98
|
+
line:
|
|
99
|
+
endpoint_labels:
|
|
100
|
+
visible: true
|
|
101
|
+
area:
|
|
102
|
+
endpoint_labels:
|
|
103
|
+
visible: true
|
|
104
|
+
pie:
|
|
105
|
+
total:
|
|
106
|
+
value:
|
|
107
|
+
font:
|
|
108
|
+
color: dft-grays.ink
|
|
109
|
+
label:
|
|
110
|
+
font:
|
|
111
|
+
color: dft-grays.subtitle
|
|
112
|
+
marks:
|
|
113
|
+
text:
|
|
114
|
+
font:
|
|
115
|
+
color: dft-grays.heading
|
|
116
|
+
rule:
|
|
117
|
+
stroke:
|
|
118
|
+
color: dft-grays.ink
|
|
119
|
+
tick:
|
|
120
|
+
stroke:
|
|
121
|
+
color: dft-grays.ink
|
|
122
|
+
data_table:
|
|
123
|
+
font:
|
|
124
|
+
color: dft-grays.muted
|
|
125
|
+
label:
|
|
126
|
+
font:
|
|
127
|
+
color: dft-grays.muted
|
|
128
|
+
divider:
|
|
129
|
+
color: dft-grays.muted
|
|
130
|
+
table:
|
|
131
|
+
header:
|
|
132
|
+
font:
|
|
133
|
+
color: dft-grays.heading
|
|
134
|
+
variables:
|
|
135
|
+
# Variable-strip labels track the muted gray rather than the
|
|
136
|
+
# cooler #666666 stark uses.
|
|
137
|
+
font:
|
|
138
|
+
color: dft-grays.muted
|
|
139
|
+
# Variable-strip input border — subtle gray separator. `stark` collapses
|
|
140
|
+
# this to ink (gray-80); `editorial` restores the soft separator.
|
|
141
|
+
border:
|
|
142
|
+
color: dft-grays.grid-emphasis
|
|
143
|
+
input:
|
|
144
|
+
# Input-field border (subtle gray). `stark` collapses this to ink;
|
|
145
|
+
# `editorial` keeps the soft separator.
|
|
146
|
+
border:
|
|
147
|
+
color: '#e0e0e0'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Unified theme: light
|
|
2
|
+
|
|
3
|
+
extends: stark
|
|
4
|
+
style:
|
|
5
|
+
background: dft-grays.canvas
|
|
6
|
+
# Subtle gray face/card border — light theme preserves the pre-stark soft
|
|
7
|
+
# separator instead of inheriting the stark default ink.
|
|
8
|
+
border:
|
|
9
|
+
color: dft-grays.border
|
|
10
|
+
font:
|
|
11
|
+
color: dft-grays.ink
|
|
12
|
+
title:
|
|
13
|
+
font:
|
|
14
|
+
color: &color_title dft-grays.heading
|
|
15
|
+
charts:
|
|
16
|
+
table:
|
|
17
|
+
header:
|
|
18
|
+
font:
|
|
19
|
+
color: *color_title
|
|
20
|
+
variables:
|
|
21
|
+
font:
|
|
22
|
+
color: dft-grays.muted
|
|
23
|
+
border:
|
|
24
|
+
color: dft-grays.grid-emphasis
|
|
25
|
+
input:
|
|
26
|
+
background: dft-grays.canvas
|
|
27
|
+
# Soft separator on input fields (matches the strip border); default
|
|
28
|
+
# theme collapsed this to ink and light keeps the pre-stark soft posture.
|
|
29
|
+
border:
|
|
30
|
+
color: '#e0e0e0'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Unified theme: looker
|
|
2
|
+
# Variant for Looker-migrated dashboards. Wider canvas (1440px) so dense
|
|
3
|
+
# multi-column tables and side-by-side tiles get the horizontal room a Looker
|
|
4
|
+
# dashboard typically uses without blowing out the page. Table headers pick
|
|
5
|
+
# up a slightly bolder weight (600) to match Looker's header treatment.
|
|
6
|
+
# Header ink colour, body / cell / header font sizes all inherit from
|
|
7
|
+
# stark (which is itself dense at 11px). Extends stark.
|
|
8
|
+
|
|
9
|
+
extends: stark
|
|
10
|
+
style:
|
|
11
|
+
board:
|
|
12
|
+
width: 1440.0
|
|
13
|
+
charts:
|
|
14
|
+
table:
|
|
15
|
+
header:
|
|
16
|
+
font:
|
|
17
|
+
weight: '600'
|