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,25 @@
|
|
|
1
|
+
# Diverging palette — default blue-red
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
name: dft-div-blue-red
|
|
5
|
+
family: diverging
|
|
6
|
+
description: Default CVD-safe diverging. Blue (low) to red (high), light midpoint.
|
|
7
|
+
design_notes: |
|
|
8
|
+
Symmetric arms about midpoint at step 6. RdBu-family editorial posture.
|
|
9
|
+
Passes CVD under deut/prot/trit at common subset counts (N=3, N=5).
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#002f55" # step 1 — low extreme (blue)
|
|
13
|
+
- "#00508a"
|
|
14
|
+
- "#2575b9"
|
|
15
|
+
- "#689bcc"
|
|
16
|
+
- "#a3c0dd"
|
|
17
|
+
- "#e4e4e4" # step 6 — midpoint (neutral light)
|
|
18
|
+
- "#dcb1a9"
|
|
19
|
+
- "#c88074"
|
|
20
|
+
- "#b04f41"
|
|
21
|
+
- "#852c21"
|
|
22
|
+
- "#590b05" # step 11 — high extreme (red)
|
|
23
|
+
|
|
24
|
+
# Diverging-specific: even-N subsets auto-skip the midpoint, odd-N include it.
|
|
25
|
+
# The resolver handles this — no per-palette YAML data needed.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Diverging palette — Moreland 2009 coolwarm
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
name: dft-div-coolwarm
|
|
5
|
+
family: diverging
|
|
6
|
+
description: Moreland 2009 coolwarm. Deep blue through light gray to deep red — canonical scientific diverging.
|
|
7
|
+
design_notes: |
|
|
8
|
+
Referenced from Kenneth Moreland's 2009 paper "Diverging Color Maps for
|
|
9
|
+
Scientific Visualization". The canonical scientific visualization diverging
|
|
10
|
+
ramp, widely used in ParaView and VTK. Included for scientific data contexts.
|
|
11
|
+
Session 3 of M2 palette design.
|
|
12
|
+
|
|
13
|
+
colors:
|
|
14
|
+
- "#3b4cc0"
|
|
15
|
+
- "#5977e3"
|
|
16
|
+
- "#7b9ef0"
|
|
17
|
+
- "#a2c3f7"
|
|
18
|
+
- "#cedcf4"
|
|
19
|
+
- "#dddddd"
|
|
20
|
+
- "#f2cbb7"
|
|
21
|
+
- "#f09482"
|
|
22
|
+
- "#db6555"
|
|
23
|
+
- "#b40426"
|
|
24
|
+
- "#8b0000"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Diverging palette — crimson-green (financial loss/gain)
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
name: dft-div-crimson-green
|
|
5
|
+
family: diverging
|
|
6
|
+
description: Crimson (low/loss) to green (high/gain). Session 3 red-green exploration D2 design.
|
|
7
|
+
design_notes: |
|
|
8
|
+
Hue pair H=355°/150° with light asymmetry (dark crimson + light green)
|
|
9
|
+
engineered to pass CVD where symmetric red-green normally fails. Paired
|
|
10
|
+
with icon/label in production use per R8 discipline.
|
|
11
|
+
|
|
12
|
+
colors:
|
|
13
|
+
- "#540a31"
|
|
14
|
+
- "#7f2a51"
|
|
15
|
+
- "#a94c75"
|
|
16
|
+
- "#c37e99"
|
|
17
|
+
- "#d9afbe"
|
|
18
|
+
- "#e4e4e4"
|
|
19
|
+
- "#a9caae"
|
|
20
|
+
- "#72ac7e"
|
|
21
|
+
- "#338f4e"
|
|
22
|
+
- "#0a6b31"
|
|
23
|
+
- "#00481d"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Diverging palette — orange-teal (non-politically-loaded)
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
name: dft-div-orange-teal
|
|
5
|
+
family: diverging
|
|
6
|
+
description: Warm orange (low) to teal (high). Symmetric arms; fully CVD-safe. Non-politically-loaded.
|
|
7
|
+
design_notes: |
|
|
8
|
+
For contexts where red/blue carries unwanted political connotation.
|
|
9
|
+
Symmetric arms about step 6 midpoint. Passes CVD under deut/prot/trit.
|
|
10
|
+
Session 3 of M2 palette design.
|
|
11
|
+
|
|
12
|
+
colors:
|
|
13
|
+
- "#4c1f00"
|
|
14
|
+
- "#7d3700"
|
|
15
|
+
- "#ab561d"
|
|
16
|
+
- "#c38562"
|
|
17
|
+
- "#d9b39f"
|
|
18
|
+
- "#e4e4e4"
|
|
19
|
+
- "#96c8c4"
|
|
20
|
+
- "#47a8a2"
|
|
21
|
+
- "#00827d"
|
|
22
|
+
- "#005b57"
|
|
23
|
+
- "#003634"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Diverging palette — Paul Tol sunset
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
name: dft-div-sunset
|
|
5
|
+
family: diverging
|
|
6
|
+
description: Paul Tol's sunset scheme, resampled to 11 stops. SRON-published CVD-safe diverging.
|
|
7
|
+
design_notes: |
|
|
8
|
+
Multi-hue diverging: teal → cyan → light → yellow → orange → red.
|
|
9
|
+
Referenced from Paul Tol (SRON) — well-studied CVD-safe diverging ramp.
|
|
10
|
+
Included for climate/atmospheric data contexts where it is conventional.
|
|
11
|
+
Session 3 of M2 palette design.
|
|
12
|
+
|
|
13
|
+
colors:
|
|
14
|
+
- "#125a56"
|
|
15
|
+
- "#17858f"
|
|
16
|
+
- "#48abcd"
|
|
17
|
+
- "#92c9ee"
|
|
18
|
+
- "#cee0ea"
|
|
19
|
+
- "#eceada"
|
|
20
|
+
- "#f4dc8f"
|
|
21
|
+
- "#ffb350"
|
|
22
|
+
- "#f77d36"
|
|
23
|
+
- "#e03b16"
|
|
24
|
+
- "#a01813"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Scaffold palette — dft-creams (warm-canvas UI chrome)
|
|
2
|
+
#
|
|
3
|
+
# Cream-scaffold complement to dft-grays. Use on warm-canvas themes.
|
|
4
|
+
# Theme assigns chrome: dft-creams to get the cream ladder via the same
|
|
5
|
+
# alias vocabulary (chrome.ink, chrome.canvas, etc.) as dft-grays.
|
|
6
|
+
#
|
|
7
|
+
# Inherits the full alias graph from dft-grays via `extends:`. Integer
|
|
8
|
+
# aliases (canvas: 1, ink: 11, etc.) resolve against this palette's own
|
|
9
|
+
# colors array at resolve time — so chrome.ink → cream #2A2725, not gray #222222.
|
|
10
|
+
# Only cream-specific hex overrides are listed below.
|
|
11
|
+
|
|
12
|
+
name: dft-creams
|
|
13
|
+
extends: dft-grays
|
|
14
|
+
description: |
|
|
15
|
+
Warm cream-toned scaffold — UI structural framing for warm-canvas themes.
|
|
16
|
+
Eleven named steps from near-white (025) to near-black (90). Applied to
|
|
17
|
+
canvas backgrounds, borders, dividers, axis labels, table stripes, and
|
|
18
|
+
secondary text on editorial/print-styled themes.
|
|
19
|
+
|
|
20
|
+
colors:
|
|
21
|
+
- "#FAF7F0" # 1 canvas
|
|
22
|
+
- "#F5F2EB" # 2 surface-subtle
|
|
23
|
+
- "#E9E1D2" # 3 grid
|
|
24
|
+
- "#DDD3C0" # 4 border
|
|
25
|
+
- "#CEC1AB" # 5 grid-emphasis
|
|
26
|
+
- "#B2A691" # 6 disabled
|
|
27
|
+
- "#918878" # 7 subtitle
|
|
28
|
+
- "#6F685D" # 8 muted
|
|
29
|
+
- "#56504A" # 9 inactive
|
|
30
|
+
- "#403B37" # 10 heading
|
|
31
|
+
- "#2A2725" # 11 ink
|
|
32
|
+
|
|
33
|
+
aliases:
|
|
34
|
+
# Cream-specific terminal hex overrides — inherited integer ladder from dft-grays
|
|
35
|
+
fill-muted: "#e8e0d4"
|
|
36
|
+
separator: "#ddd3bf"
|
|
37
|
+
spark-empty: "#d9cebf"
|
|
38
|
+
accent: "#2d74b3"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Scaffold palette — dft-grays (neutral gray UI chrome)
|
|
2
|
+
#
|
|
3
|
+
# Scaffolds are UI structural framing, NOT data encoding. They live in
|
|
4
|
+
# their own directory to make the taxonomy honest:
|
|
5
|
+
# palettes/sequential/ — data, ordered magnitude
|
|
6
|
+
# palettes/diverging/ — data, signed/around midpoint
|
|
7
|
+
# palettes/categorical/ — data, unordered categories
|
|
8
|
+
# palettes/scaffold/ — UI structure (canvas/borders/text/stripes)
|
|
9
|
+
# palettes/tone/ — UI roles (negative/warning/positive)
|
|
10
|
+
#
|
|
11
|
+
# Theme role: chrome. Address form: chrome.ink, chrome.canvas, etc.
|
|
12
|
+
|
|
13
|
+
name: dft-grays
|
|
14
|
+
description: |
|
|
15
|
+
Neutral gray scaffold — UI chrome. Eleven named steps from
|
|
16
|
+
near-white (025) to near-black (90). Applied to canvas backgrounds,
|
|
17
|
+
borders, dividers, axis labels, table stripes, and secondary text.
|
|
18
|
+
Pairs with dft-creams for warm-canvas themes.
|
|
19
|
+
|
|
20
|
+
colors:
|
|
21
|
+
- "#FAFAFA" # 1 canvas
|
|
22
|
+
- "#F7F8FA" # 2 surface-subtle
|
|
23
|
+
- "#EDEFF2" # 3 grid
|
|
24
|
+
- "#DFE1E5" # 4 border
|
|
25
|
+
- "#D0D3D9" # 5 grid-emphasis
|
|
26
|
+
- "#B0B2B8" # 6 disabled
|
|
27
|
+
- "#8A8C8F" # 7 subtitle
|
|
28
|
+
- "#626366" # 8 muted
|
|
29
|
+
- "#494A4C" # 9 inactive
|
|
30
|
+
- "#313233" # 10 heading
|
|
31
|
+
- "#222222" # 11 ink
|
|
32
|
+
|
|
33
|
+
aliases:
|
|
34
|
+
# UI ladder aliases — use these in new authoring
|
|
35
|
+
canvas: 1
|
|
36
|
+
surface-subtle: 2
|
|
37
|
+
grid: 3
|
|
38
|
+
border: 4
|
|
39
|
+
grid-emphasis: 5
|
|
40
|
+
disabled: 6
|
|
41
|
+
subtitle: 7
|
|
42
|
+
muted: 8
|
|
43
|
+
inactive: 9
|
|
44
|
+
heading: 10
|
|
45
|
+
ink: 11
|
|
46
|
+
|
|
47
|
+
# Extended UI aliases — terminal hex (themes themselves contain no hex)
|
|
48
|
+
canvas-stark: "#FFFFFF"
|
|
49
|
+
fill-muted: "#e5e7eb"
|
|
50
|
+
separator: "#e0e0e0"
|
|
51
|
+
spark-empty: "#d1d5db"
|
|
52
|
+
accent: "#3b82f6"
|
|
53
|
+
placeholder: "#666666"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — amber
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-amber
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue amber (cream → honey → deep amber). Renamed from dft-seq-gold; mid-stops read as amber/honey rather than pure gold.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue anchored on cat-10 gold (H≈82.1°); c_max=0.12 (warm hues need more chroma to read as themselves). Session 8 retune + rename from dft-seq-gold.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#f6edde" # step 1 — lightest
|
|
13
|
+
- "#e8d5b2"
|
|
14
|
+
- "#d9bd8a"
|
|
15
|
+
- "#c8a565"
|
|
16
|
+
- "#b68e41"
|
|
17
|
+
- "#a2781a" # step 6 — mid
|
|
18
|
+
- "#8b6400"
|
|
19
|
+
- "#725200"
|
|
20
|
+
- "#5a4000"
|
|
21
|
+
- "#432f00"
|
|
22
|
+
- "#2e1f00" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — blue
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-blue
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue blue — default sequential. Sits between cat-10 blue and editorial-10 denim via chroma alone.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue anchored on cat-10 blue (H≈248.8°); c_max=0.11 (down from 0.13 to harmonize with editorial-10 themes). Session 8 retune.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#e4f0fc" # step 1 — lightest
|
|
13
|
+
- "#c1dbf5"
|
|
14
|
+
- "#9fc5eb"
|
|
15
|
+
- "#80b0de"
|
|
16
|
+
- "#649acf"
|
|
17
|
+
- "#4a85bc" # step 6 — mid
|
|
18
|
+
- "#3270a8"
|
|
19
|
+
- "#1b5b92"
|
|
20
|
+
- "#04477a"
|
|
21
|
+
- "#00345d"
|
|
22
|
+
- "#002341" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — brown
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-brown
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Low-chroma warm ramp (cream → tan → warm-brown). Pairs with the cream theme. Renamed from dft-seq-warm; hexes unchanged.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Low chroma to harmonize with dft-creams scaffold on warm-canvas themes. Renamed from dft-seq-warm in Session 8; hexes unchanged.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#f3eee6" # step 1 — lightest
|
|
13
|
+
- "#e7d3cb"
|
|
14
|
+
- "#d6baad"
|
|
15
|
+
- "#c4a391"
|
|
16
|
+
- "#b08d76"
|
|
17
|
+
- "#9b785e" # step 6 — mid
|
|
18
|
+
- "#856447"
|
|
19
|
+
- "#6e5233"
|
|
20
|
+
- "#584020"
|
|
21
|
+
- "#422f11"
|
|
22
|
+
- "#341911" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — gray
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-gray
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Pure gray — magnitude without hue connotation. Renamed from dft-seq-neutral; hexes unchanged.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25, chroma=0 (pure achromatic). Use when data magnitude must not imply hue meaning. Renamed from dft-seq-neutral in Session 8; hexes unchanged.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#eeeeee" # step 1 — lightest
|
|
13
|
+
- "#d7d7d7"
|
|
14
|
+
- "#c1c1c1"
|
|
15
|
+
- "#ababab"
|
|
16
|
+
- "#959595"
|
|
17
|
+
- "#808080" # step 6 — mid
|
|
18
|
+
- "#6c6c6c"
|
|
19
|
+
- "#585858"
|
|
20
|
+
- "#454545"
|
|
21
|
+
- "#333333"
|
|
22
|
+
- "#222222" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — green
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-green
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue green. Sits between cat-10 green and editorial-10 sage via chroma alone.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue anchored on cat-10 green (H≈161.3°); c_max=0.10 (down from 0.13). Session 8 retune.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#e4f3ea" # step 1 — lightest
|
|
13
|
+
- "#c0e1cf"
|
|
14
|
+
- "#9eceb4"
|
|
15
|
+
- "#7eba9b"
|
|
16
|
+
- "#60a684"
|
|
17
|
+
- "#44926e" # step 6 — mid
|
|
18
|
+
- "#287d59"
|
|
19
|
+
- "#086946"
|
|
20
|
+
- "#005336"
|
|
21
|
+
- "#003e27"
|
|
22
|
+
- "#002a19" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — purple
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-purple
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue purple. Sits between cat-10 purple and editorial-10 plum via chroma alone.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue anchored on cat-10 purple (H≈319.1°); c_max=0.11 (down from 0.13). Session 8 retune.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#f5eaf8" # step 1 — lightest
|
|
13
|
+
- "#e5ceeb"
|
|
14
|
+
- "#d4b3dd"
|
|
15
|
+
- "#c29acd"
|
|
16
|
+
- "#af82bb"
|
|
17
|
+
- "#9b6ba8" # step 6 — mid
|
|
18
|
+
- "#875694"
|
|
19
|
+
- "#72427e"
|
|
20
|
+
- "#5c3068"
|
|
21
|
+
- "#471f51"
|
|
22
|
+
- "#32113a" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — rust
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-rust
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue rust (cream-peach → terracotta → deep rust). Renamed from dft-seq-orange; mid-stops read as rust/terracotta rather than vivid orange.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue anchored on cat-10 orange (H≈41.0°); c_max=0.12. Session 8 retune + rename from dft-seq-orange.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#fdeae3" # step 1 — lightest
|
|
13
|
+
- "#f6cdbe"
|
|
14
|
+
- "#ebb29d"
|
|
15
|
+
- "#dd977d"
|
|
16
|
+
- "#cc7e61"
|
|
17
|
+
- "#b96648" # step 6 — mid
|
|
18
|
+
- "#a45030"
|
|
19
|
+
- "#8d3c1b"
|
|
20
|
+
- "#752907"
|
|
21
|
+
- "#5a1b00"
|
|
22
|
+
- "#3e1000" # step 11 — darkest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Sequential palette — teal
|
|
2
|
+
#
|
|
3
|
+
# Hand-authored 11-stop spine. Downsamples drive seq palette resolution.
|
|
4
|
+
|
|
5
|
+
name: dft-seq-teal
|
|
6
|
+
family: sequential
|
|
7
|
+
description: Single-hue teal/turquoise. Anchored between cat-10 cyan and editorial-10 teal; replaces dft-seq-cyan.
|
|
8
|
+
design_notes: |
|
|
9
|
+
Monotonic L* from 0.95 → 0.25. Hue=205° (between editorial-10 teal at 194° and cat-10 cyan at 210°); c_max=0.11. New palette in Session 8.
|
|
10
|
+
|
|
11
|
+
colors:
|
|
12
|
+
- "#dff3f5" # step 1 — lightest
|
|
13
|
+
- "#b5e1e6"
|
|
14
|
+
- "#8cced6"
|
|
15
|
+
- "#64bac4"
|
|
16
|
+
- "#3aa6b2"
|
|
17
|
+
- "#00919d" # step 6 — mid
|
|
18
|
+
- "#007a85"
|
|
19
|
+
- "#00646d"
|
|
20
|
+
- "#004f56"
|
|
21
|
+
- "#003b40"
|
|
22
|
+
- "#00272b" # step 11 — darkest
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Tone palette — negative
|
|
2
|
+
#
|
|
3
|
+
# Six named role slots. No LUT, no interpolation.
|
|
4
|
+
# Users reference slots directly: negative.solid, negative.text, etc.
|
|
5
|
+
|
|
6
|
+
name: negative
|
|
7
|
+
description: |
|
|
8
|
+
Critical errors, destructive actions, negative/loss states.
|
|
9
|
+
Western learned color convention: red = stop/bad/attention.
|
|
10
|
+
Session 4 of M2 palette design.
|
|
11
|
+
|
|
12
|
+
design_notes: |
|
|
13
|
+
H=22° warm red (shifted slightly from pure red H=15° so light bg/subtle
|
|
14
|
+
slots read as warm-peach rather than pink). L=0.42 for solid — balanced
|
|
15
|
+
against positive.solid for CVD ΔE discipline (see r8_validation below).
|
|
16
|
+
All 6 slots designed so canonical pairs (text-on-bg, solid-on-white) pass
|
|
17
|
+
WCAG AA. Must be paired with icon + label; color alone is insufficient.
|
|
18
|
+
|
|
19
|
+
aliases:
|
|
20
|
+
bg: "#ffedec" # very light peach tint for surface backgrounds
|
|
21
|
+
subtle: "#ffdbd8" # hover-on-bg or secondary fill
|
|
22
|
+
border: "#e79491" # mid-tone divider / outline
|
|
23
|
+
solid: "#94001e" # canonical "this is negative" fill
|
|
24
|
+
solid-hover: "#6e0014" # darker variant for button hover state
|
|
25
|
+
text: "#4b000a" # AA-contrast text color on .bg and on white
|
|
26
|
+
|
|
27
|
+
r8_validation:
|
|
28
|
+
pair: "negative.solid ↔ positive.solid"
|
|
29
|
+
cvd_pass: true
|
|
30
|
+
note: |
|
|
31
|
+
ΔE under deut/prot/trit all pass R8 threshold. CVD checker is the
|
|
32
|
+
practical test; ΔL is the proxy. Ship with color + icon + label.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Tone palette — positive
|
|
2
|
+
#
|
|
3
|
+
# Six named role slots. No LUT, no interpolation.
|
|
4
|
+
|
|
5
|
+
name: positive
|
|
6
|
+
description: |
|
|
7
|
+
Confirmed successful actions, gains, completions.
|
|
8
|
+
Western learned color convention: green = go/good/safe.
|
|
9
|
+
Session 4 of M2 palette design.
|
|
10
|
+
|
|
11
|
+
design_notes: |
|
|
12
|
+
Blue-shifted green (H=155°), not pure green (H=135°). Picked so negative.solid
|
|
13
|
+
↔ positive.solid pass CVD ΔE. solid L=0.55 matches category-10 green L≈0.57.
|
|
14
|
+
Paired with icon + label in production use.
|
|
15
|
+
|
|
16
|
+
aliases:
|
|
17
|
+
bg: "#e3f8e9" # very light green background
|
|
18
|
+
subtle: "#cff2da" # secondary fill / hover-on-bg
|
|
19
|
+
border: "#82cb9b" # mid-tone divider / outline
|
|
20
|
+
solid: "#00884d" # canonical "all good" fill
|
|
21
|
+
solid-hover: "#006d3c" # darker variant for button hover state
|
|
22
|
+
text: "#003e20" # AA-contrast text color on .bg and on white
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Tone palette — warning
|
|
2
|
+
#
|
|
3
|
+
# Six named role slots. No LUT, no interpolation.
|
|
4
|
+
|
|
5
|
+
name: warning
|
|
6
|
+
description: |
|
|
7
|
+
Pay attention — something needs input, but nothing's broken.
|
|
8
|
+
Western learned color convention: amber/gold = caution/slow.
|
|
9
|
+
Session 4 of M2 palette design.
|
|
10
|
+
|
|
11
|
+
design_notes: |
|
|
12
|
+
H=72° — midpoint of exploration candidates W2 and W3. Selected after
|
|
13
|
+
user feedback that H=60° read too yellow and H=90° too green. Slots
|
|
14
|
+
tuned for WCAG AA pairing (text-on-bg, solid-on-white).
|
|
15
|
+
|
|
16
|
+
aliases:
|
|
17
|
+
bg: "#fff3e5" # very light cream-amber background
|
|
18
|
+
subtle: "#ffe7ca" # secondary fill / hover-on-bg
|
|
19
|
+
border: "#f0b871" # mid-tone divider / outline
|
|
20
|
+
solid: "#e69812" # canonical "pay attention" fill
|
|
21
|
+
solid-hover: "#c68100" # darker variant for button hover state
|
|
22
|
+
text: "#643f00" # AA-contrast text color on .bg and on white
|