@bestagentkits/render 0.1.1-next.1 → 0.3.0
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.
- package/CHANGELOG.md +209 -1
- package/README.md +324 -44
- package/assets/fonts/bricolage-grotesque/OFL.txt +93 -0
- package/assets/fonts/fraunces/OFL.txt +93 -0
- package/assets/fonts/geist/OFL.txt +93 -0
- package/assets/fonts/inter-tight/OFL.txt +93 -0
- package/assets/fonts/jetbrains-mono/OFL.txt +93 -0
- package/assets/fonts/plus-jakarta-sans/OFL.txt +93 -0
- package/dist/blocks/chart/chart-check-kind-rules.d.ts +10 -0
- package/dist/blocks/chart/chart-check-kind-rules.d.ts.map +1 -0
- package/dist/blocks/chart/chart-check-kind-rules.js +151 -0
- package/dist/blocks/chart/chart-check-kind-rules.js.map +1 -0
- package/dist/blocks/chart/chart-check.d.ts +15 -0
- package/dist/blocks/chart/chart-check.d.ts.map +1 -0
- package/dist/blocks/chart/chart-check.js +196 -0
- package/dist/blocks/chart/chart-check.js.map +1 -0
- package/dist/blocks/chart/chart-encoding-schema.d.ts +7 -0
- package/dist/blocks/chart/chart-encoding-schema.d.ts.map +1 -0
- package/dist/blocks/chart/chart-encoding-schema.js +39 -0
- package/dist/blocks/chart/chart-encoding-schema.js.map +1 -0
- package/dist/blocks/chart/chart-encodings.d.ts +29 -0
- package/dist/blocks/chart/chart-encodings.d.ts.map +1 -0
- package/dist/blocks/chart/chart-encodings.js +59 -0
- package/dist/blocks/chart/chart-encodings.js.map +1 -0
- package/dist/blocks/chart/chart-kinds.d.ts +18 -0
- package/dist/blocks/chart/chart-kinds.d.ts.map +1 -0
- package/dist/blocks/chart/chart-kinds.js +60 -0
- package/dist/blocks/chart/chart-kinds.js.map +1 -0
- package/dist/blocks/chart/chart-model-rows.d.ts +23 -0
- package/dist/blocks/chart/chart-model-rows.d.ts.map +1 -0
- package/dist/blocks/chart/chart-model-rows.js +153 -0
- package/dist/blocks/chart/chart-model-rows.js.map +1 -0
- package/dist/blocks/chart/chart-model.d.ts +17 -0
- package/dist/blocks/chart/chart-model.d.ts.map +1 -0
- package/dist/blocks/chart/chart-model.js +131 -0
- package/dist/blocks/chart/chart-model.js.map +1 -0
- package/dist/blocks/chart/chart-styles.d.ts +3 -0
- package/dist/blocks/chart/chart-styles.d.ts.map +1 -0
- package/dist/blocks/chart/chart-styles.js +76 -0
- package/dist/blocks/chart/chart-styles.js.map +1 -0
- package/dist/blocks/chart/chart.d.ts +12 -0
- package/dist/blocks/chart/chart.d.ts.map +1 -0
- package/dist/blocks/chart/chart.js +73 -0
- package/dist/blocks/chart/chart.js.map +1 -0
- package/dist/blocks/chart/index.d.ts +4 -0
- package/dist/blocks/chart/index.d.ts.map +1 -0
- package/dist/blocks/chart/index.js +8 -0
- package/dist/blocks/chart/index.js.map +1 -0
- package/dist/blocks/composition/accordion.d.ts +4 -0
- package/dist/blocks/composition/accordion.d.ts.map +1 -0
- package/dist/blocks/composition/accordion.js +45 -0
- package/dist/blocks/composition/accordion.js.map +1 -0
- package/dist/blocks/composition/bento.d.ts +4 -0
- package/dist/blocks/composition/bento.d.ts.map +1 -0
- package/dist/blocks/composition/bento.js +91 -0
- package/dist/blocks/composition/bento.js.map +1 -0
- package/dist/blocks/composition/carousel.d.ts +4 -0
- package/dist/blocks/composition/carousel.d.ts.map +1 -0
- package/dist/blocks/composition/carousel.js +51 -0
- package/dist/blocks/composition/carousel.js.map +1 -0
- package/dist/blocks/composition/composition-runtime.d.ts +14 -0
- package/dist/blocks/composition/composition-runtime.d.ts.map +1 -0
- package/dist/blocks/composition/composition-runtime.js +136 -0
- package/dist/blocks/composition/composition-runtime.js.map +1 -0
- package/dist/blocks/composition/composition-styles.d.ts +10 -0
- package/dist/blocks/composition/composition-styles.d.ts.map +1 -0
- package/dist/blocks/composition/composition-styles.js +80 -0
- package/dist/blocks/composition/composition-styles.js.map +1 -0
- package/dist/blocks/composition/index.d.ts +4 -0
- package/dist/blocks/composition/index.d.ts.map +1 -0
- package/dist/blocks/composition/index.js +11 -0
- package/dist/blocks/composition/index.js.map +1 -0
- package/dist/blocks/composition/nestable-blocks.d.ts +37 -0
- package/dist/blocks/composition/nestable-blocks.d.ts.map +1 -0
- package/dist/blocks/composition/nestable-blocks.js +92 -0
- package/dist/blocks/composition/nestable-blocks.js.map +1 -0
- package/dist/blocks/composition/tabs.d.ts +4 -0
- package/dist/blocks/composition/tabs.d.ts.map +1 -0
- package/dist/blocks/composition/tabs.js +48 -0
- package/dist/blocks/composition/tabs.js.map +1 -0
- package/dist/blocks/controls/checkbox.d.ts +12 -0
- package/dist/blocks/controls/checkbox.d.ts.map +1 -0
- package/dist/blocks/controls/checkbox.js +43 -0
- package/dist/blocks/controls/checkbox.js.map +1 -0
- package/dist/blocks/controls/choice-options.d.ts +24 -0
- package/dist/blocks/controls/choice-options.d.ts.map +1 -0
- package/dist/blocks/controls/choice-options.js +117 -0
- package/dist/blocks/controls/choice-options.js.map +1 -0
- package/dist/blocks/controls/control-shared.d.ts +66 -0
- package/dist/blocks/controls/control-shared.d.ts.map +1 -0
- package/dist/blocks/controls/control-shared.js +241 -0
- package/dist/blocks/controls/control-shared.js.map +1 -0
- package/dist/blocks/controls/controls-runtime.d.ts +17 -0
- package/dist/blocks/controls/controls-runtime.d.ts.map +1 -0
- package/dist/blocks/controls/controls-runtime.js +180 -0
- package/dist/blocks/controls/controls-runtime.js.map +1 -0
- package/dist/blocks/controls/controls-styles.d.ts +14 -0
- package/dist/blocks/controls/controls-styles.d.ts.map +1 -0
- package/dist/blocks/controls/controls-styles.js +54 -0
- package/dist/blocks/controls/controls-styles.js.map +1 -0
- package/dist/blocks/controls/date-input.d.ts +6 -0
- package/dist/blocks/controls/date-input.d.ts.map +1 -0
- package/dist/blocks/controls/date-input.js +58 -0
- package/dist/blocks/controls/date-input.js.map +1 -0
- package/dist/blocks/controls/field-input.d.ts +10 -0
- package/dist/blocks/controls/field-input.d.ts.map +1 -0
- package/dist/blocks/controls/field-input.js +20 -0
- package/dist/blocks/controls/field-input.js.map +1 -0
- package/dist/blocks/controls/filter-bar.d.ts +11 -0
- package/dist/blocks/controls/filter-bar.d.ts.map +1 -0
- package/dist/blocks/controls/filter-bar.js +115 -0
- package/dist/blocks/controls/filter-bar.js.map +1 -0
- package/dist/blocks/controls/index.d.ts +4 -0
- package/dist/blocks/controls/index.d.ts.map +1 -0
- package/dist/blocks/controls/index.js +41 -0
- package/dist/blocks/controls/index.js.map +1 -0
- package/dist/blocks/controls/number-input.d.ts +4 -0
- package/dist/blocks/controls/number-input.d.ts.map +1 -0
- package/dist/blocks/controls/number-input.js +62 -0
- package/dist/blocks/controls/number-input.js.map +1 -0
- package/dist/blocks/controls/radio-group.d.ts +4 -0
- package/dist/blocks/controls/radio-group.d.ts.map +1 -0
- package/dist/blocks/controls/radio-group.js +56 -0
- package/dist/blocks/controls/radio-group.js.map +1 -0
- package/dist/blocks/controls/select.d.ts +4 -0
- package/dist/blocks/controls/select.d.ts.map +1 -0
- package/dist/blocks/controls/select.js +49 -0
- package/dist/blocks/controls/select.js.map +1 -0
- package/dist/blocks/controls/switch.d.ts +4 -0
- package/dist/blocks/controls/switch.d.ts.map +1 -0
- package/dist/blocks/controls/switch.js +22 -0
- package/dist/blocks/controls/switch.js.map +1 -0
- package/dist/blocks/controls/text-input.d.ts +4 -0
- package/dist/blocks/controls/text-input.d.ts.map +1 -0
- package/dist/blocks/controls/text-input.js +42 -0
- package/dist/blocks/controls/text-input.js.map +1 -0
- package/dist/blocks/data-table/data-table-cells.d.ts +26 -0
- package/dist/blocks/data-table/data-table-cells.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table-cells.js +154 -0
- package/dist/blocks/data-table/data-table-cells.js.map +1 -0
- package/dist/blocks/data-table/data-table-check.d.ts +10 -0
- package/dist/blocks/data-table/data-table-check.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table-check.js +99 -0
- package/dist/blocks/data-table/data-table-check.js.map +1 -0
- package/dist/blocks/data-table/data-table-columns.d.ts +41 -0
- package/dist/blocks/data-table/data-table-columns.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table-columns.js +155 -0
- package/dist/blocks/data-table/data-table-columns.js.map +1 -0
- package/dist/blocks/data-table/data-table-runtime.d.ts +15 -0
- package/dist/blocks/data-table/data-table-runtime.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table-runtime.js +106 -0
- package/dist/blocks/data-table/data-table-runtime.js.map +1 -0
- package/dist/blocks/data-table/data-table-styles.d.ts +11 -0
- package/dist/blocks/data-table/data-table-styles.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table-styles.js +74 -0
- package/dist/blocks/data-table/data-table-styles.js.map +1 -0
- package/dist/blocks/data-table/data-table.d.ts +17 -0
- package/dist/blocks/data-table/data-table.d.ts.map +1 -0
- package/dist/blocks/data-table/data-table.js +159 -0
- package/dist/blocks/data-table/data-table.js.map +1 -0
- package/dist/blocks/data-table/index.d.ts +4 -0
- package/dist/blocks/data-table/index.d.ts.map +1 -0
- package/dist/blocks/data-table/index.js +18 -0
- package/dist/blocks/data-table/index.js.map +1 -0
- package/dist/blocks/engineering/api-endpoint.d.ts +12 -0
- package/dist/blocks/engineering/api-endpoint.d.ts.map +1 -0
- package/dist/blocks/engineering/api-endpoint.js +174 -0
- package/dist/blocks/engineering/api-endpoint.js.map +1 -0
- package/dist/blocks/engineering/engineering-helpers.d.ts +49 -0
- package/dist/blocks/engineering/engineering-helpers.d.ts.map +1 -0
- package/dist/blocks/engineering/engineering-helpers.js +156 -0
- package/dist/blocks/engineering/engineering-helpers.js.map +1 -0
- package/dist/blocks/engineering/engineering-styles.d.ts +12 -0
- package/dist/blocks/engineering/engineering-styles.d.ts.map +1 -0
- package/dist/blocks/engineering/engineering-styles.js +174 -0
- package/dist/blocks/engineering/engineering-styles.js.map +1 -0
- package/dist/blocks/engineering/index.d.ts +4 -0
- package/dist/blocks/engineering/index.d.ts.map +1 -0
- package/dist/blocks/engineering/index.js +30 -0
- package/dist/blocks/engineering/index.js.map +1 -0
- package/dist/blocks/engineering/kanban.d.ts +11 -0
- package/dist/blocks/engineering/kanban.d.ts.map +1 -0
- package/dist/blocks/engineering/kanban.js +162 -0
- package/dist/blocks/engineering/kanban.js.map +1 -0
- package/dist/blocks/engineering/log-viewer.d.ts +14 -0
- package/dist/blocks/engineering/log-viewer.d.ts.map +1 -0
- package/dist/blocks/engineering/log-viewer.js +158 -0
- package/dist/blocks/engineering/log-viewer.js.map +1 -0
- package/dist/blocks/engineering/roadmap.d.ts +13 -0
- package/dist/blocks/engineering/roadmap.d.ts.map +1 -0
- package/dist/blocks/engineering/roadmap.js +197 -0
- package/dist/blocks/engineering/roadmap.js.map +1 -0
- package/dist/blocks/engineering/schema-viewer.d.ts +25 -0
- package/dist/blocks/engineering/schema-viewer.d.ts.map +1 -0
- package/dist/blocks/engineering/schema-viewer.js +124 -0
- package/dist/blocks/engineering/schema-viewer.js.map +1 -0
- package/dist/blocks/engineering/test-results.d.ts +12 -0
- package/dist/blocks/engineering/test-results.d.ts.map +1 -0
- package/dist/blocks/engineering/test-results.js +180 -0
- package/dist/blocks/engineering/test-results.js.map +1 -0
- package/dist/blocks/evidence/annotated-image.d.ts +15 -0
- package/dist/blocks/evidence/annotated-image.d.ts.map +1 -0
- package/dist/blocks/evidence/annotated-image.js +99 -0
- package/dist/blocks/evidence/annotated-image.js.map +1 -0
- package/dist/blocks/evidence/benchmark-comparison.d.ts +11 -0
- package/dist/blocks/evidence/benchmark-comparison.d.ts.map +1 -0
- package/dist/blocks/evidence/benchmark-comparison.js +262 -0
- package/dist/blocks/evidence/benchmark-comparison.js.map +1 -0
- package/dist/blocks/evidence/benchmark-verdict.d.ts +26 -0
- package/dist/blocks/evidence/benchmark-verdict.d.ts.map +1 -0
- package/dist/blocks/evidence/benchmark-verdict.js +31 -0
- package/dist/blocks/evidence/benchmark-verdict.js.map +1 -0
- package/dist/blocks/evidence/evidence-helpers.d.ts +39 -0
- package/dist/blocks/evidence/evidence-helpers.d.ts.map +1 -0
- package/dist/blocks/evidence/evidence-helpers.js +87 -0
- package/dist/blocks/evidence/evidence-helpers.js.map +1 -0
- package/dist/blocks/evidence/evidence-styles.d.ts +12 -0
- package/dist/blocks/evidence/evidence-styles.d.ts.map +1 -0
- package/dist/blocks/evidence/evidence-styles.js +88 -0
- package/dist/blocks/evidence/evidence-styles.js.map +1 -0
- package/dist/blocks/evidence/index.d.ts +4 -0
- package/dist/blocks/evidence/index.d.ts.map +1 -0
- package/dist/blocks/evidence/index.js +15 -0
- package/dist/blocks/evidence/index.js.map +1 -0
- package/dist/blocks/evidence/metric-breakdown.d.ts +22 -0
- package/dist/blocks/evidence/metric-breakdown.d.ts.map +1 -0
- package/dist/blocks/evidence/metric-breakdown.js +203 -0
- package/dist/blocks/evidence/metric-breakdown.js.map +1 -0
- package/dist/blocks/evidence/references.d.ts +13 -0
- package/dist/blocks/evidence/references.d.ts.map +1 -0
- package/dist/blocks/evidence/references.js +103 -0
- package/dist/blocks/evidence/references.js.map +1 -0
- package/dist/blocks/index.d.ts +8 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +24 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/layout/grid-item.d.ts +4 -0
- package/dist/blocks/layout/grid-item.d.ts.map +1 -0
- package/dist/blocks/layout/grid-item.js +65 -0
- package/dist/blocks/layout/grid-item.js.map +1 -0
- package/dist/blocks/layout/grid.d.ts +9 -0
- package/dist/blocks/layout/grid.d.ts.map +1 -0
- package/dist/blocks/layout/grid.js +99 -0
- package/dist/blocks/layout/grid.js.map +1 -0
- package/dist/blocks/layout/index.d.ts +4 -0
- package/dist/blocks/layout/index.d.ts.map +1 -0
- package/dist/blocks/layout/index.js +23 -0
- package/dist/blocks/layout/index.js.map +1 -0
- package/dist/blocks/layout/layout-styles.d.ts +40 -0
- package/dist/blocks/layout/layout-styles.d.ts.map +1 -0
- package/dist/blocks/layout/layout-styles.js +110 -0
- package/dist/blocks/layout/layout-styles.js.map +1 -0
- package/dist/blocks/layout/main-aside.d.ts +4 -0
- package/dist/blocks/layout/main-aside.d.ts.map +1 -0
- package/dist/blocks/layout/main-aside.js +21 -0
- package/dist/blocks/layout/main-aside.js.map +1 -0
- package/dist/blocks/layout/rail-layout.d.ts +4 -0
- package/dist/blocks/layout/rail-layout.d.ts.map +1 -0
- package/dist/blocks/layout/rail-layout.js +33 -0
- package/dist/blocks/layout/rail-layout.js.map +1 -0
- package/dist/blocks/layout/semantic-layout-parts.d.ts +14 -0
- package/dist/blocks/layout/semantic-layout-parts.d.ts.map +1 -0
- package/dist/blocks/layout/semantic-layout-parts.js +9 -0
- package/dist/blocks/layout/semantic-layout-parts.js.map +1 -0
- package/dist/blocks/layout/sidebar-layout.d.ts +4 -0
- package/dist/blocks/layout/sidebar-layout.d.ts.map +1 -0
- package/dist/blocks/layout/sidebar-layout.js +30 -0
- package/dist/blocks/layout/sidebar-layout.js.map +1 -0
- package/dist/blocks/layout/split.d.ts +4 -0
- package/dist/blocks/layout/split.d.ts.map +1 -0
- package/dist/blocks/layout/split.js +23 -0
- package/dist/blocks/layout/split.js.map +1 -0
- package/dist/blocks/layout/stack.d.ts +4 -0
- package/dist/blocks/layout/stack.d.ts.map +1 -0
- package/dist/blocks/layout/stack.js +36 -0
- package/dist/blocks/layout/stack.js.map +1 -0
- package/dist/blocks/product/calendar-dates.d.ts +59 -0
- package/dist/blocks/product/calendar-dates.d.ts.map +1 -0
- package/dist/blocks/product/calendar-dates.js +100 -0
- package/dist/blocks/product/calendar-dates.js.map +1 -0
- package/dist/blocks/product/calendar.d.ts +12 -0
- package/dist/blocks/product/calendar.d.ts.map +1 -0
- package/dist/blocks/product/calendar.js +125 -0
- package/dist/blocks/product/calendar.js.map +1 -0
- package/dist/blocks/product/feature-matrix.d.ts +4 -0
- package/dist/blocks/product/feature-matrix.d.ts.map +1 -0
- package/dist/blocks/product/feature-matrix.js +72 -0
- package/dist/blocks/product/feature-matrix.js.map +1 -0
- package/dist/blocks/product/gallery.d.ts +14 -0
- package/dist/blocks/product/gallery.d.ts.map +1 -0
- package/dist/blocks/product/gallery.js +86 -0
- package/dist/blocks/product/gallery.js.map +1 -0
- package/dist/blocks/product/index.d.ts +4 -0
- package/dist/blocks/product/index.d.ts.map +1 -0
- package/dist/blocks/product/index.js +40 -0
- package/dist/blocks/product/index.js.map +1 -0
- package/dist/blocks/product/logo-cloud.d.ts +4 -0
- package/dist/blocks/product/logo-cloud.d.ts.map +1 -0
- package/dist/blocks/product/logo-cloud.js +42 -0
- package/dist/blocks/product/logo-cloud.js.map +1 -0
- package/dist/blocks/product/people.d.ts +4 -0
- package/dist/blocks/product/people.d.ts.map +1 -0
- package/dist/blocks/product/people.js +53 -0
- package/dist/blocks/product/people.js.map +1 -0
- package/dist/blocks/product/pricing.d.ts +4 -0
- package/dist/blocks/product/pricing.d.ts.map +1 -0
- package/dist/blocks/product/pricing.js +86 -0
- package/dist/blocks/product/pricing.js.map +1 -0
- package/dist/blocks/product/product-helpers.d.ts +22 -0
- package/dist/blocks/product/product-helpers.d.ts.map +1 -0
- package/dist/blocks/product/product-helpers.js +48 -0
- package/dist/blocks/product/product-helpers.js.map +1 -0
- package/dist/blocks/product/product-runtime.d.ts +15 -0
- package/dist/blocks/product/product-runtime.d.ts.map +1 -0
- package/dist/blocks/product/product-runtime.js +97 -0
- package/dist/blocks/product/product-runtime.js.map +1 -0
- package/dist/blocks/product/product-styles.d.ts +14 -0
- package/dist/blocks/product/product-styles.d.ts.map +1 -0
- package/dist/blocks/product/product-styles.js +120 -0
- package/dist/blocks/product/product-styles.js.map +1 -0
- package/dist/blocks/product/testimonial.d.ts +8 -0
- package/dist/blocks/product/testimonial.d.ts.map +1 -0
- package/dist/blocks/product/testimonial.js +67 -0
- package/dist/blocks/product/testimonial.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +193 -39
- package/dist/cli.js.map +1 -1
- package/dist/data/data-json-schema.d.ts +9 -0
- package/dist/data/data-json-schema.d.ts.map +1 -0
- package/dist/data/data-json-schema.js +48 -0
- package/dist/data/data-json-schema.js.map +1 -0
- package/dist/data/dataset-types.d.ts +47 -0
- package/dist/data/dataset-types.d.ts.map +1 -0
- package/dist/data/dataset-types.js +49 -0
- package/dist/data/dataset-types.js.map +1 -0
- package/dist/data/format-value.d.ts +39 -0
- package/dist/data/format-value.d.ts.map +1 -0
- package/dist/data/format-value.js +214 -0
- package/dist/data/format-value.js.map +1 -0
- package/dist/data/resolve-block-data.d.ts +24 -0
- package/dist/data/resolve-block-data.d.ts.map +1 -0
- package/dist/data/resolve-block-data.js +190 -0
- package/dist/data/resolve-block-data.js.map +1 -0
- package/dist/data/transform-pipeline.d.ts +65 -0
- package/dist/data/transform-pipeline.d.ts.map +1 -0
- package/dist/data/transform-pipeline.js +234 -0
- package/dist/data/transform-pipeline.js.map +1 -0
- package/dist/data/validate-datasets.d.ts +22 -0
- package/dist/data/validate-datasets.d.ts.map +1 -0
- package/dist/data/validate-datasets.js +137 -0
- package/dist/data/validate-datasets.js.map +1 -0
- package/dist/diagram/adapter-markup-fit.d.ts +44 -0
- package/dist/diagram/adapter-markup-fit.d.ts.map +1 -0
- package/dist/diagram/adapter-markup-fit.js +292 -0
- package/dist/diagram/adapter-markup-fit.js.map +1 -0
- package/dist/diagram/adapter-stylesheet-filter.d.ts +56 -0
- package/dist/diagram/adapter-stylesheet-filter.d.ts.map +1 -0
- package/dist/diagram/adapter-stylesheet-filter.js +245 -0
- package/dist/diagram/adapter-stylesheet-filter.js.map +1 -0
- package/dist/diagram/adapter.d.ts +17 -0
- package/dist/diagram/adapter.d.ts.map +1 -1
- package/dist/diagram/adapter.js +43 -2
- package/dist/diagram/adapter.js.map +1 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/ir.d.ts +18 -0
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js.map +1 -1
- package/dist/mcp/mcp-http-transport.d.ts +68 -0
- package/dist/mcp/mcp-http-transport.d.ts.map +1 -0
- package/dist/mcp/mcp-http-transport.js +140 -0
- package/dist/mcp/mcp-http-transport.js.map +1 -0
- package/dist/mcp/mcp-json-rpc-dispatch.d.ts +38 -0
- package/dist/mcp/mcp-json-rpc-dispatch.d.ts.map +1 -0
- package/dist/mcp/mcp-json-rpc-dispatch.js +98 -0
- package/dist/mcp/mcp-json-rpc-dispatch.js.map +1 -0
- package/dist/mcp/mcp-local-tools.d.ts +20 -0
- package/dist/mcp/mcp-local-tools.d.ts.map +1 -0
- package/dist/mcp/mcp-local-tools.js +58 -0
- package/dist/mcp/mcp-local-tools.js.map +1 -0
- package/dist/mcp/mcp-protocol.d.ts +79 -0
- package/dist/mcp/mcp-protocol.d.ts.map +1 -0
- package/dist/mcp/mcp-protocol.js +83 -0
- package/dist/mcp/mcp-protocol.js.map +1 -0
- package/dist/mcp/mcp-stdio-transport.d.ts +28 -0
- package/dist/mcp/mcp-stdio-transport.d.ts.map +1 -0
- package/dist/mcp/mcp-stdio-transport.js +73 -0
- package/dist/mcp/mcp-stdio-transport.js.map +1 -0
- package/dist/mcp/mcp-tool-definitions.d.ts +66 -0
- package/dist/mcp/mcp-tool-definitions.d.ts.map +1 -0
- package/dist/mcp/mcp-tool-definitions.js +246 -0
- package/dist/mcp/mcp-tool-definitions.js.map +1 -0
- package/dist/mcp-server.d.ts +10 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +9 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/recipes/index.d.ts +27 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +30 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/recipes.generated.d.ts +8 -0
- package/dist/recipes/recipes.generated.d.ts.map +1 -0
- package/dist/recipes/recipes.generated.js +704 -0
- package/dist/recipes/recipes.generated.js.map +1 -0
- package/dist/registry/actions.d.ts +2 -0
- package/dist/registry/actions.d.ts.map +1 -1
- package/dist/registry/actions.js +3 -1
- package/dist/registry/actions.js.map +1 -1
- package/dist/registry/block-module.d.ts +65 -0
- package/dist/registry/block-module.d.ts.map +1 -0
- package/dist/registry/block-module.js +19 -0
- package/dist/registry/block-module.js.map +1 -0
- package/dist/registry/catalog-search.d.ts +32 -0
- package/dist/registry/catalog-search.d.ts.map +1 -0
- package/dist/registry/catalog-search.js +122 -0
- package/dist/registry/catalog-search.js.map +1 -0
- package/dist/registry/define-helpers.d.ts +89 -0
- package/dist/registry/define-helpers.d.ts.map +1 -0
- package/dist/registry/define-helpers.js +87 -0
- package/dist/registry/define-helpers.js.map +1 -0
- package/dist/registry/describe-many.d.ts +58 -0
- package/dist/registry/describe-many.d.ts.map +1 -0
- package/dist/registry/describe-many.js +156 -0
- package/dist/registry/describe-many.js.map +1 -0
- package/dist/registry/prop-schema.d.ts +32 -1
- package/dist/registry/prop-schema.d.ts.map +1 -1
- package/dist/registry/prop-schema.js +108 -2
- package/dist/registry/prop-schema.js.map +1 -1
- package/dist/registry/registry-builder.d.ts +17 -0
- package/dist/registry/registry-builder.d.ts.map +1 -0
- package/dist/registry/registry-builder.js +158 -0
- package/dist/registry/registry-builder.js.map +1 -0
- package/dist/registry/registry.d.ts +32 -5
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +67 -14
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/roster.d.ts +34 -5
- package/dist/registry/roster.d.ts.map +1 -1
- package/dist/registry/roster.js +360 -184
- package/dist/registry/roster.js.map +1 -1
- package/dist/render/block-helpers.d.ts +45 -0
- package/dist/render/block-helpers.d.ts.map +1 -0
- package/dist/render/block-helpers.js +83 -0
- package/dist/render/block-helpers.js.map +1 -0
- package/dist/render/blocks.d.ts +10 -35
- package/dist/render/blocks.d.ts.map +1 -1
- package/dist/render/blocks.js +144 -263
- package/dist/render/blocks.js.map +1 -1
- package/dist/render/chart-figure-encoded.d.ts +11 -0
- package/dist/render/chart-figure-encoded.d.ts.map +1 -0
- package/dist/render/chart-figure-encoded.js +81 -0
- package/dist/render/chart-figure-encoded.js.map +1 -0
- package/dist/render/chart-kinds-cartesian.d.ts +14 -0
- package/dist/render/chart-kinds-cartesian.d.ts.map +1 -0
- package/dist/render/chart-kinds-cartesian.js +122 -0
- package/dist/render/chart-kinds-cartesian.js.map +1 -0
- package/dist/render/chart-kinds-composite.d.ts +16 -0
- package/dist/render/chart-kinds-composite.d.ts.map +1 -0
- package/dist/render/chart-kinds-composite.js +144 -0
- package/dist/render/chart-kinds-composite.js.map +1 -0
- package/dist/render/chart-kinds-gauge-treemap.d.ts +8 -0
- package/dist/render/chart-kinds-gauge-treemap.d.ts.map +1 -0
- package/dist/render/chart-kinds-gauge-treemap.js +101 -0
- package/dist/render/chart-kinds-gauge-treemap.js.map +1 -0
- package/dist/render/chart-kinds-histogram-waterfall.d.ts +17 -0
- package/dist/render/chart-kinds-histogram-waterfall.d.ts.map +1 -0
- package/dist/render/chart-kinds-histogram-waterfall.js +172 -0
- package/dist/render/chart-kinds-histogram-waterfall.js.map +1 -0
- package/dist/render/chart-overlays.d.ts +18 -0
- package/dist/render/chart-overlays.d.ts.map +1 -0
- package/dist/render/chart-overlays.js +58 -0
- package/dist/render/chart-overlays.js.map +1 -0
- package/dist/render/chart-scales.d.ts +83 -0
- package/dist/render/chart-scales.d.ts.map +1 -0
- package/dist/render/chart-scales.js +166 -0
- package/dist/render/chart-scales.js.map +1 -0
- package/dist/render/chart-svg-parts.d.ts +50 -0
- package/dist/render/chart-svg-parts.d.ts.map +1 -0
- package/dist/render/chart-svg-parts.js +125 -0
- package/dist/render/chart-svg-parts.js.map +1 -0
- package/dist/render/chart-text.d.ts +18 -0
- package/dist/render/chart-text.d.ts.map +1 -0
- package/dist/render/chart-text.js +69 -0
- package/dist/render/chart-text.js.map +1 -0
- package/dist/render/chart-treemap-layout.d.ts +17 -0
- package/dist/render/chart-treemap-layout.d.ts.map +1 -0
- package/dist/render/chart-treemap-layout.js +74 -0
- package/dist/render/chart-treemap-layout.js.map +1 -0
- package/dist/render/chart-types.d.ts +107 -0
- package/dist/render/chart-types.d.ts.map +1 -0
- package/dist/render/chart-types.js +11 -0
- package/dist/render/chart-types.js.map +1 -0
- package/dist/render/charts.d.ts +33 -11
- package/dist/render/charts.d.ts.map +1 -1
- package/dist/render/charts.js +145 -109
- package/dist/render/charts.js.map +1 -1
- package/dist/render/derived-variables.d.ts +37 -0
- package/dist/render/derived-variables.d.ts.map +1 -0
- package/dist/render/derived-variables.js +40 -0
- package/dist/render/derived-variables.js.map +1 -0
- package/dist/render/diagram-fallback.d.ts +25 -0
- package/dist/render/diagram-fallback.d.ts.map +1 -0
- package/dist/render/diagram-fallback.js +86 -0
- package/dist/render/diagram-fallback.js.map +1 -0
- package/dist/render/document.d.ts +15 -0
- package/dist/render/document.d.ts.map +1 -1
- package/dist/render/document.js +53 -8
- package/dist/render/document.js.map +1 -1
- package/dist/render/effects-styles.d.ts +14 -0
- package/dist/render/effects-styles.d.ts.map +1 -0
- package/dist/render/effects-styles.js +39 -0
- package/dist/render/effects-styles.js.map +1 -0
- package/dist/render/embedded-fonts.generated.d.ts +22 -0
- package/dist/render/embedded-fonts.generated.d.ts.map +1 -0
- package/dist/render/embedded-fonts.generated.js +59 -0
- package/dist/render/embedded-fonts.generated.js.map +1 -0
- package/dist/render/escape.d.ts +10 -0
- package/dist/render/escape.d.ts.map +1 -1
- package/dist/render/escape.js +28 -0
- package/dist/render/escape.js.map +1 -1
- package/dist/render/feature-styles.d.ts +14 -0
- package/dist/render/feature-styles.d.ts.map +1 -0
- package/dist/render/feature-styles.js +123 -0
- package/dist/render/feature-styles.js.map +1 -0
- package/dist/render/font-faces.d.ts +22 -0
- package/dist/render/font-faces.d.ts.map +1 -0
- package/dist/render/font-faces.js +60 -0
- package/dist/render/font-faces.js.map +1 -0
- package/dist/render/outline.d.ts +21 -0
- package/dist/render/outline.d.ts.map +1 -0
- package/dist/render/outline.js +47 -0
- package/dist/render/outline.js.map +1 -0
- package/dist/render/recipe-styles.d.ts +26 -0
- package/dist/render/recipe-styles.d.ts.map +1 -0
- package/dist/render/recipe-styles.js +218 -0
- package/dist/render/recipe-styles.js.map +1 -0
- package/dist/render/render-context.d.ts +40 -0
- package/dist/render/render-context.d.ts.map +1 -0
- package/dist/render/render-context.js +16 -0
- package/dist/render/render-context.js.map +1 -0
- package/dist/render/render.d.ts +7 -0
- package/dist/render/render.d.ts.map +1 -1
- package/dist/render/render.js +108 -41
- package/dist/render/render.js.map +1 -1
- package/dist/render/runtime.d.ts +4 -1
- package/dist/render/runtime.d.ts.map +1 -1
- package/dist/render/runtime.js +275 -128
- package/dist/render/runtime.js.map +1 -1
- package/dist/render/showcase-blocks.d.ts +52 -0
- package/dist/render/showcase-blocks.d.ts.map +1 -0
- package/dist/render/showcase-blocks.js +329 -0
- package/dist/render/showcase-blocks.js.map +1 -0
- package/dist/render/showcase-styles.d.ts +15 -0
- package/dist/render/showcase-styles.d.ts.map +1 -0
- package/dist/render/showcase-styles.js +201 -0
- package/dist/render/showcase-styles.js.map +1 -0
- package/dist/render/signature-styles.d.ts +18 -0
- package/dist/render/signature-styles.d.ts.map +1 -0
- package/dist/render/signature-styles.js +41 -0
- package/dist/render/signature-styles.js.map +1 -0
- package/dist/render/style-units.d.ts +17 -0
- package/dist/render/style-units.d.ts.map +1 -0
- package/dist/render/style-units.js +24 -0
- package/dist/render/style-units.js.map +1 -0
- package/dist/render/styles.d.ts +18 -9
- package/dist/render/styles.d.ts.map +1 -1
- package/dist/render/styles.js +228 -129
- package/dist/render/styles.js.map +1 -1
- package/dist/render/surface-styles.d.ts +24 -0
- package/dist/render/surface-styles.d.ts.map +1 -0
- package/dist/render/surface-styles.js +41 -0
- package/dist/render/surface-styles.js.map +1 -0
- package/dist/render/tone.d.ts +14 -0
- package/dist/render/tone.d.ts.map +1 -0
- package/dist/render/tone.js +40 -0
- package/dist/render/tone.js.map +1 -0
- package/dist/render/verify.d.ts +3 -0
- package/dist/render/verify.d.ts.map +1 -1
- package/dist/render/verify.js +45 -2
- package/dist/render/verify.js.map +1 -1
- package/dist/spec/asset-references.d.ts +35 -0
- package/dist/spec/asset-references.d.ts.map +1 -0
- package/dist/spec/asset-references.js +93 -0
- package/dist/spec/asset-references.js.map +1 -0
- package/dist/spec/bounds.d.ts +6 -0
- package/dist/spec/bounds.d.ts.map +1 -1
- package/dist/spec/bounds.js +7 -0
- package/dist/spec/bounds.js.map +1 -1
- package/dist/spec/conditions.d.ts +43 -0
- package/dist/spec/conditions.d.ts.map +1 -0
- package/dist/spec/conditions.js +179 -0
- package/dist/spec/conditions.js.map +1 -0
- package/dist/spec/network-policy.d.ts +33 -0
- package/dist/spec/network-policy.d.ts.map +1 -0
- package/dist/spec/network-policy.js +57 -0
- package/dist/spec/network-policy.js.map +1 -0
- package/dist/spec/normalize.d.ts +7 -2
- package/dist/spec/normalize.d.ts.map +1 -1
- package/dist/spec/normalize.js +219 -41
- package/dist/spec/normalize.js.map +1 -1
- package/dist/theme/dialect-presets.d.ts +12 -0
- package/dist/theme/dialect-presets.d.ts.map +1 -0
- package/dist/theme/dialect-presets.js +214 -0
- package/dist/theme/dialect-presets.js.map +1 -0
- package/dist/theme/load-theme.d.ts +11 -3
- package/dist/theme/load-theme.d.ts.map +1 -1
- package/dist/theme/load-theme.js +71 -12
- package/dist/theme/load-theme.js.map +1 -1
- package/dist/theme/preset-builder.d.ts +36 -0
- package/dist/theme/preset-builder.d.ts.map +1 -0
- package/dist/theme/preset-builder.js +51 -0
- package/dist/theme/preset-builder.js.map +1 -0
- package/dist/theme/presets.d.ts +8 -10
- package/dist/theme/presets.d.ts.map +1 -1
- package/dist/theme/presets.js +40 -56
- package/dist/theme/presets.js.map +1 -1
- package/dist/theme/recipes.d.ts +38 -0
- package/dist/theme/recipes.d.ts.map +1 -0
- package/dist/theme/recipes.js +96 -0
- package/dist/theme/recipes.js.map +1 -0
- package/dist/theme/theme-catalog.d.ts.map +1 -1
- package/dist/theme/theme-catalog.js +16 -0
- package/dist/theme/theme-catalog.js.map +1 -1
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -4
- package/dist/theme/tokens.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/llms.txt +29 -0
- package/package.json +13 -3
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart scales and geometry primitives.
|
|
3
|
+
*
|
|
4
|
+
* Every coordinate passes through `round()` (two decimals) before it reaches
|
|
5
|
+
* the markup, so floating-point noise never breaks byte-determinism. Axis
|
|
6
|
+
* bounds end on clean ticks (1, 2, 2.5 or 5 × 10ⁿ).
|
|
7
|
+
*/
|
|
8
|
+
import { formatValue } from '../data/format-value.js';
|
|
9
|
+
/**
|
|
10
|
+
* Shared viewBox width. Text inside the SVG scales with the rendered width, so
|
|
11
|
+
* this is sized for a full-width card: labels render near their nominal size
|
|
12
|
+
* there, and the canvas scrolls rather than shrinks on narrow screens.
|
|
13
|
+
*/
|
|
14
|
+
export const WIDTH = 800;
|
|
15
|
+
/** Number of distinct series colours the stylesheet defines. */
|
|
16
|
+
export const PALETTE_SIZE = 6;
|
|
17
|
+
export const CARTESIAN = {
|
|
18
|
+
width: WIDTH,
|
|
19
|
+
height: 300,
|
|
20
|
+
top: 20,
|
|
21
|
+
right: 36,
|
|
22
|
+
bottom: 36,
|
|
23
|
+
left: 56,
|
|
24
|
+
};
|
|
25
|
+
export const RADIAL = { width: WIDTH, height: 240, top: 0, right: 0, bottom: 0, left: 0 };
|
|
26
|
+
export const SPARK = { width: WIDTH, height: 72, top: 10, right: 10, bottom: 10, left: 10 };
|
|
27
|
+
/** Encoded cartesian charts reserve room for axis titles and formatted ticks. */
|
|
28
|
+
export const CARTESIAN_TITLED = {
|
|
29
|
+
width: WIDTH,
|
|
30
|
+
height: 300,
|
|
31
|
+
top: 30,
|
|
32
|
+
right: 36,
|
|
33
|
+
bottom: 50,
|
|
34
|
+
left: 68,
|
|
35
|
+
};
|
|
36
|
+
export function round(value) {
|
|
37
|
+
return Math.round(value * 100) / 100;
|
|
38
|
+
}
|
|
39
|
+
/** Group digits with a thin comma, deterministically and without locale data. */
|
|
40
|
+
export function formatNumber(value) {
|
|
41
|
+
const rounded = round(value);
|
|
42
|
+
const [whole = '0', fraction] = String(Math.abs(rounded)).split('.');
|
|
43
|
+
const grouped = whole.replace(/\B(?=(\d{3})+(?!\d))/gu, ',');
|
|
44
|
+
return `${rounded < 0 ? '-' : ''}${grouped}${fraction === undefined ? '' : `.${fraction}`}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A number formatter for an axis or magnitude encoding. `text` (the schema
|
|
48
|
+
* default) reads as a plain grouped number with the unit, if any.
|
|
49
|
+
*/
|
|
50
|
+
export function numberFormatter(spec) {
|
|
51
|
+
const format = spec.format === undefined || spec.format === 'text' ? 'number' : spec.format;
|
|
52
|
+
// Only floating-point noise is removed here; the format owns the decimals,
|
|
53
|
+
// so a fine-grained value is not rounded away before it is formatted.
|
|
54
|
+
return (value) => formatValue(denoise(value), { ...spec, format });
|
|
55
|
+
}
|
|
56
|
+
/** Drop floating-point noise (0.1 + 0.2) without rounding real precision away. */
|
|
57
|
+
export function denoise(value) {
|
|
58
|
+
return Number(value.toPrecision(12));
|
|
59
|
+
}
|
|
60
|
+
export function seriesClass(index) {
|
|
61
|
+
return `ak-chart-s${index % PALETTE_SIZE}`;
|
|
62
|
+
}
|
|
63
|
+
/** Round a span up to 1, 2, 2.5 or 5 times a power of ten, so ticks read cleanly. */
|
|
64
|
+
export function niceStep(span, count) {
|
|
65
|
+
const raw = span / Math.max(count, 1);
|
|
66
|
+
const magnitude = 10 ** Math.floor(Math.log10(raw));
|
|
67
|
+
const normalized = raw / magnitude;
|
|
68
|
+
const factor = [1, 2, 2.5, 5].find((candidate) => normalized <= candidate) ?? 10;
|
|
69
|
+
return factor * magnitude;
|
|
70
|
+
}
|
|
71
|
+
/** Axis bounds that include zero and end on a clean tick. */
|
|
72
|
+
export function niceBounds(series) {
|
|
73
|
+
const values = series.flatMap((entry) => entry.values).filter((value) => Number.isFinite(value));
|
|
74
|
+
return niceRange(Math.min(0, ...values), Math.max(0, ...values));
|
|
75
|
+
}
|
|
76
|
+
/** Clean-tick bounds around a raw range. */
|
|
77
|
+
export function niceRange(rawMin, rawMax) {
|
|
78
|
+
if (rawMax === rawMin)
|
|
79
|
+
return { min: rawMin, max: rawMin + 1, step: 0.25 };
|
|
80
|
+
const step = niceStep(rawMax - rawMin, 4);
|
|
81
|
+
return {
|
|
82
|
+
min: Math.floor(rawMin / step) * step,
|
|
83
|
+
max: Math.ceil(rawMax / step) * step,
|
|
84
|
+
step,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Bounds for an encoded value axis: the data range (with zero when `zero`),
|
|
89
|
+
* overridden by the author's `min`/`max`, with a clean step between them.
|
|
90
|
+
*/
|
|
91
|
+
export function axisBounds(values, axis, zero) {
|
|
92
|
+
const finite = values.filter((value) => Number.isFinite(value));
|
|
93
|
+
const low = finite.length === 0 ? 0 : Math.min(...finite, ...(zero ? [0] : []));
|
|
94
|
+
const high = finite.length === 0 ? 1 : Math.max(...finite, ...(zero ? [0] : []));
|
|
95
|
+
const nice = niceRange(low, high);
|
|
96
|
+
const min = axis.min ?? nice.min;
|
|
97
|
+
const max = axis.max ?? nice.max;
|
|
98
|
+
if (max <= min)
|
|
99
|
+
return nice;
|
|
100
|
+
if (axis.min === undefined && axis.max === undefined)
|
|
101
|
+
return nice;
|
|
102
|
+
return { min, max, step: niceStep(max - min, 4) };
|
|
103
|
+
}
|
|
104
|
+
export function plotWidth(frame) {
|
|
105
|
+
return frame.width - frame.left - frame.right;
|
|
106
|
+
}
|
|
107
|
+
export function plotHeight(frame) {
|
|
108
|
+
return frame.height - frame.top - frame.bottom;
|
|
109
|
+
}
|
|
110
|
+
export function scaleY(value, bounds, frame) {
|
|
111
|
+
const ratio = (value - bounds.min) / (bounds.max - bounds.min);
|
|
112
|
+
return round(frame.top + plotHeight(frame) * (1 - ratio));
|
|
113
|
+
}
|
|
114
|
+
/** A value clamped into the bounds, so an out-of-range mark stays inside the plot. */
|
|
115
|
+
export function clampTo(value, bounds) {
|
|
116
|
+
return Math.min(bounds.max, Math.max(bounds.min, value));
|
|
117
|
+
}
|
|
118
|
+
export function scaleX(value, bounds, frame) {
|
|
119
|
+
const ratio = (value - bounds.min) / (bounds.max - bounds.min);
|
|
120
|
+
return round(frame.left + plotWidth(frame) * ratio);
|
|
121
|
+
}
|
|
122
|
+
/** Point charts span the plot edge to edge. */
|
|
123
|
+
export function pointX(index, count, frame) {
|
|
124
|
+
if (count <= 1)
|
|
125
|
+
return round(frame.left + plotWidth(frame) / 2);
|
|
126
|
+
return round(frame.left + (plotWidth(frame) * index) / (count - 1));
|
|
127
|
+
}
|
|
128
|
+
/** Bar groups sit in equal bands, labelled at the band centre. */
|
|
129
|
+
export function bandCentre(index, count, frame) {
|
|
130
|
+
const band = plotWidth(frame) / Math.max(count, 1);
|
|
131
|
+
return round(frame.left + band * index + band / 2);
|
|
132
|
+
}
|
|
133
|
+
/** Fragment-safe id fragment derived from a block id. */
|
|
134
|
+
export function safeId(id) {
|
|
135
|
+
return id.replace(/[^A-Za-z0-9_-]/gu, '-');
|
|
136
|
+
}
|
|
137
|
+
/** Ticks from `min` to `max` in `step` increments, rounded. */
|
|
138
|
+
export function tickValues(bounds) {
|
|
139
|
+
const steps = Math.round((bounds.max - bounds.min) / bounds.step);
|
|
140
|
+
const values = [];
|
|
141
|
+
for (let index = 0; index <= steps; index += 1) {
|
|
142
|
+
const value = denoise(bounds.min + bounds.step * index);
|
|
143
|
+
if (value <= bounds.max + bounds.step / 1000)
|
|
144
|
+
values.push(value);
|
|
145
|
+
}
|
|
146
|
+
return values;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The formatter for axis ticks: like `numberFormatter`, but whole-number
|
|
150
|
+
* currency ticks drop their cents ($15,000 rather than $15,000.00) unless the
|
|
151
|
+
* author fixed `decimals`.
|
|
152
|
+
*/
|
|
153
|
+
export function tickFormatter(spec, bounds) {
|
|
154
|
+
const whole = Number.isInteger(bounds.step) && Number.isInteger(bounds.min);
|
|
155
|
+
if (spec.format === 'currency' && spec.decimals === undefined && whole) {
|
|
156
|
+
return numberFormatter({ ...spec, decimals: 0 });
|
|
157
|
+
}
|
|
158
|
+
// A step finer than the format's default two decimals would print every
|
|
159
|
+
// tick the same ("0 | 0 | 0"), so the ticks get the decimals the step needs.
|
|
160
|
+
if (spec.decimals === undefined && bounds.step > 0 && bounds.step < 0.01) {
|
|
161
|
+
const needed = Math.min(4, Math.ceil(-Math.log10(bounds.step) - 1e-9));
|
|
162
|
+
return numberFormatter({ ...spec, decimals: needed });
|
|
163
|
+
}
|
|
164
|
+
return numberFormatter(spec);
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=chart-scales.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-scales.js","sourceRoot":"","sources":["../../src/render/chart-scales.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG fragments every chart kind shares: gridlines and ticks, category
|
|
3
|
+
* labels, hover value labels and axis titles. Colour never appears here;
|
|
4
|
+
* shapes carry classes and the stylesheet maps them onto tokens.
|
|
5
|
+
*/
|
|
6
|
+
import { type Frame, type TickBounds } from './chart-scales.js';
|
|
7
|
+
import type { ChartSeries, KindRender } from './chart-types.js';
|
|
8
|
+
export type NumberFormatter = (value: number) => string;
|
|
9
|
+
/** Horizontal gridlines with value ticks; the zero line reads as the axis. */
|
|
10
|
+
export declare function gridAndTicks(bounds: TickBounds, frame: Frame, format?: NumberFormatter): string;
|
|
11
|
+
/**
|
|
12
|
+
* Gridlines for an encoded axis whose author bounds need not land on a step:
|
|
13
|
+
* ticks stop at the last step inside the bounds, and the plot floor is drawn
|
|
14
|
+
* as the axis when zero is outside the range.
|
|
15
|
+
*/
|
|
16
|
+
export declare function boundedGridAndTicks(bounds: TickBounds, frame: Frame, format: NumberFormatter): string;
|
|
17
|
+
/** Vertical gridlines and tick labels for a numeric x axis. */
|
|
18
|
+
export declare function numericXTicks(bounds: TickBounds, frame: Frame, format: NumberFormatter, ticks?: readonly number[]): string;
|
|
19
|
+
/**
|
|
20
|
+
* At most about eight evenly spaced label positions. The first and the last
|
|
21
|
+
* category are always labelled, so a series never reads as ending early; when
|
|
22
|
+
* the last would crowd the previous kept label, that one gives way.
|
|
23
|
+
*/
|
|
24
|
+
export declare function thinnedLabelIndexes(count: number): number[];
|
|
25
|
+
export declare function categoryLabels(labels: string[], position: (index: number) => number, frame: Frame): string;
|
|
26
|
+
export declare function pointTitle(label: string, series: ChartSeries, index: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* A value label drawn directly after its mark. The stylesheet reveals it while
|
|
29
|
+
* the mark is hovered or focused (`mark:hover + .ak-chart-value`), so the exact
|
|
30
|
+
* number is one pointer move away without a tooltip script.
|
|
31
|
+
*/
|
|
32
|
+
export declare function valueLabel(x: number, y: number, value: number): string;
|
|
33
|
+
/**
|
|
34
|
+
* A hover value label with preformatted text. `halo` outlines it in the
|
|
35
|
+
* surface colour, for labels drawn over a filled mark.
|
|
36
|
+
*/
|
|
37
|
+
export declare function textValueLabel(x: number, y: number, text: string, halo?: boolean): string;
|
|
38
|
+
/** Axis titles: the y title above the value ticks, the x title centred under the categories. */
|
|
39
|
+
export declare function axisTitles(frame: Frame, x: string | undefined, y: string | undefined): string;
|
|
40
|
+
/** A rectangle as a path, so golden tests can pin its geometry in one attribute. */
|
|
41
|
+
export declare function rectPath(x: number, y: number, width: number, height: number): string;
|
|
42
|
+
/** Bars wider than this read as slabs rather than marks. */
|
|
43
|
+
export declare const MAX_BAR_WIDTH = 56;
|
|
44
|
+
/** The index of a category label, or undefined when the axis has no such category. */
|
|
45
|
+
export declare function categoryIndex(labels: readonly string[], x: string | number): number | undefined;
|
|
46
|
+
/** Overlay coordinates for a cartesian plot. */
|
|
47
|
+
export declare function plotFor(frame: Frame, bounds: TickBounds, xAt: (x: string | number) => number | undefined): NonNullable<KindRender['plot']>;
|
|
48
|
+
/** Shorten text to `max` characters with an ellipsis. */
|
|
49
|
+
export declare function clipText(text: string, max: number): string;
|
|
50
|
+
//# sourceMappingURL=chart-svg-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-svg-parts.d.ts","sourceRoot":"","sources":["../../src/render/chart-svg-parts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,KAAK,KAAK,EAKV,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAExD,8EAA8E;AAC9E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,eAA8B,GACrC,MAAM,CAkBR;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,eAAe,GACtB,MAAM,CAcR;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,eAAe,EACvB,KAAK,GAAE,SAAS,MAAM,EAAuB,GAC5C,MAAM,CAWR;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAW3D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACnC,KAAK,EAAE,KAAK,GACX,MAAM,CAUR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,MAAM,CAIvF;AAED,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAe7F;AAED,oFAAoF;AACpF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,4DAA4D;AAC5D,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/F;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CACrB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,SAAS,GAC9C,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAQjC;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG fragments every chart kind shares: gridlines and ticks, category
|
|
3
|
+
* labels, hover value labels and axis titles. Colour never appears here;
|
|
4
|
+
* shapes carry classes and the stylesheet maps them onto tokens.
|
|
5
|
+
*/
|
|
6
|
+
import { clampTo, formatNumber, round, scaleX, scaleY, tickValues, } from './chart-scales.js';
|
|
7
|
+
import { escapeText } from './escape.js';
|
|
8
|
+
/** Horizontal gridlines with value ticks; the zero line reads as the axis. */
|
|
9
|
+
export function gridAndTicks(bounds, frame, format = formatNumber) {
|
|
10
|
+
const parts = [];
|
|
11
|
+
const steps = Math.round((bounds.max - bounds.min) / bounds.step);
|
|
12
|
+
for (let index = 0; index <= steps; index += 1) {
|
|
13
|
+
const value = round(bounds.min + bounds.step * index);
|
|
14
|
+
const y = scaleY(value, bounds, frame);
|
|
15
|
+
parts.push(`<line class="${value === 0 ? 'ak-chart-axis' : 'ak-chart-grid'}" x1="${frame.left}" y1="${y}" x2="${frame.width - frame.right}" y2="${y}"/>`);
|
|
16
|
+
parts.push(`<text class="ak-chart-label" x="${frame.left - 8}" y="${round(y + 4)}" text-anchor="end">${escapeText(format(value))}</text>`);
|
|
17
|
+
}
|
|
18
|
+
return parts.join('');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Gridlines for an encoded axis whose author bounds need not land on a step:
|
|
22
|
+
* ticks stop at the last step inside the bounds, and the plot floor is drawn
|
|
23
|
+
* as the axis when zero is outside the range.
|
|
24
|
+
*/
|
|
25
|
+
export function boundedGridAndTicks(bounds, frame, format) {
|
|
26
|
+
const ticks = tickValues(bounds);
|
|
27
|
+
const hasZero = ticks.includes(0);
|
|
28
|
+
return ticks
|
|
29
|
+
.map((value, index) => {
|
|
30
|
+
const y = scaleY(value, bounds, frame);
|
|
31
|
+
const axis = value === 0 || (!hasZero && index === 0);
|
|
32
|
+
return `<line class="${axis ? 'ak-chart-axis' : 'ak-chart-grid'}" x1="${frame.left}" y1="${y}" x2="${frame.width - frame.right}" y2="${y}"/><text class="ak-chart-label" x="${frame.left - 8}" y="${round(y + 4)}" text-anchor="end">${escapeText(format(value))}</text>`;
|
|
33
|
+
})
|
|
34
|
+
.join('');
|
|
35
|
+
}
|
|
36
|
+
/** Vertical gridlines and tick labels for a numeric x axis. */
|
|
37
|
+
export function numericXTicks(bounds, frame, format, ticks = tickValues(bounds)) {
|
|
38
|
+
return ticks
|
|
39
|
+
.map((value) => {
|
|
40
|
+
const x = scaleX(value, bounds, frame);
|
|
41
|
+
return `<line class="ak-chart-grid" x1="${x}" y1="${frame.top}" x2="${x}" y2="${frame.height - frame.bottom}"/><text class="ak-chart-label" x="${x}" y="${frame.height - frame.bottom + 20}" text-anchor="middle">${escapeText(format(value))}</text>`;
|
|
42
|
+
})
|
|
43
|
+
.join('');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* At most about eight evenly spaced label positions. The first and the last
|
|
47
|
+
* category are always labelled, so a series never reads as ending early; when
|
|
48
|
+
* the last would crowd the previous kept label, that one gives way.
|
|
49
|
+
*/
|
|
50
|
+
export function thinnedLabelIndexes(count) {
|
|
51
|
+
const step = Math.max(1, Math.ceil(count / 8));
|
|
52
|
+
const indexes = [];
|
|
53
|
+
for (let index = 0; index < count; index += step)
|
|
54
|
+
indexes.push(index);
|
|
55
|
+
const last = count - 1;
|
|
56
|
+
const previous = indexes.at(-1);
|
|
57
|
+
if (previous !== undefined && previous !== last) {
|
|
58
|
+
if (indexes.length > 1 && last - previous < step)
|
|
59
|
+
indexes.pop();
|
|
60
|
+
indexes.push(last);
|
|
61
|
+
}
|
|
62
|
+
return indexes;
|
|
63
|
+
}
|
|
64
|
+
export function categoryLabels(labels, position, frame) {
|
|
65
|
+
const parts = [];
|
|
66
|
+
for (const index of thinnedLabelIndexes(labels.length)) {
|
|
67
|
+
parts.push(`<text class="ak-chart-label" x="${position(index)}" y="${frame.height - frame.bottom + 20}" text-anchor="middle">${escapeText(labels[index] ?? '')}</text>`);
|
|
68
|
+
}
|
|
69
|
+
return parts.join('');
|
|
70
|
+
}
|
|
71
|
+
export function pointTitle(label, series, index) {
|
|
72
|
+
return `${label}: ${series.label} ${series.values[index] ?? 0}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A value label drawn directly after its mark. The stylesheet reveals it while
|
|
76
|
+
* the mark is hovered or focused (`mark:hover + .ak-chart-value`), so the exact
|
|
77
|
+
* number is one pointer move away without a tooltip script.
|
|
78
|
+
*/
|
|
79
|
+
export function valueLabel(x, y, value) {
|
|
80
|
+
return textValueLabel(x, y, formatNumber(value));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A hover value label with preformatted text. `halo` outlines it in the
|
|
84
|
+
* surface colour, for labels drawn over a filled mark.
|
|
85
|
+
*/
|
|
86
|
+
export function textValueLabel(x, y, text, halo = false) {
|
|
87
|
+
return `<text class="ak-chart-value${halo ? ' ak-chart-value--halo' : ''}" x="${round(x)}" y="${round(y)}" text-anchor="middle" aria-hidden="true">${escapeText(text)}</text>`;
|
|
88
|
+
}
|
|
89
|
+
/** Axis titles: the y title above the value ticks, the x title centred under the categories. */
|
|
90
|
+
export function axisTitles(frame, x, y) {
|
|
91
|
+
const parts = [];
|
|
92
|
+
if (y !== undefined && y !== '') {
|
|
93
|
+
parts.push(`<text class="ak-chart-axis-title" x="${frame.left - 8}" y="${frame.top - 14}" text-anchor="end">${escapeText(y)}</text>`);
|
|
94
|
+
}
|
|
95
|
+
if (x !== undefined && x !== '') {
|
|
96
|
+
parts.push(`<text class="ak-chart-axis-title" x="${round(frame.left + (frame.width - frame.left - frame.right) / 2)}" y="${frame.height - 6}" text-anchor="middle">${escapeText(x)}</text>`);
|
|
97
|
+
}
|
|
98
|
+
return parts.join('');
|
|
99
|
+
}
|
|
100
|
+
/** A rectangle as a path, so golden tests can pin its geometry in one attribute. */
|
|
101
|
+
export function rectPath(x, y, width, height) {
|
|
102
|
+
return `M${round(x)},${round(y)} h${round(width)} v${round(height)} h${round(-width)} Z`;
|
|
103
|
+
}
|
|
104
|
+
/** Bars wider than this read as slabs rather than marks. */
|
|
105
|
+
export const MAX_BAR_WIDTH = 56;
|
|
106
|
+
/** The index of a category label, or undefined when the axis has no such category. */
|
|
107
|
+
export function categoryIndex(labels, x) {
|
|
108
|
+
const index = labels.indexOf(String(x));
|
|
109
|
+
return index < 0 ? undefined : index;
|
|
110
|
+
}
|
|
111
|
+
/** Overlay coordinates for a cartesian plot. */
|
|
112
|
+
export function plotFor(frame, bounds, xAt) {
|
|
113
|
+
return {
|
|
114
|
+
top: frame.top,
|
|
115
|
+
bottom: frame.height - frame.bottom,
|
|
116
|
+
right: frame.width - frame.right,
|
|
117
|
+
xAt,
|
|
118
|
+
yAt: (y) => scaleY(clampTo(y, bounds), bounds, frame),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Shorten text to `max` characters with an ellipsis. */
|
|
122
|
+
export function clipText(text, max) {
|
|
123
|
+
return text.length <= max ? text : `${text.slice(0, Math.max(1, max - 1))}…`;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=chart-svg-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-svg-parts.js","sourceRoot":"","sources":["../../src/render/chart-svg-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The text side of an encoded chart: legend entries, the generated summary,
|
|
3
|
+
* and the fallback table. Values are formatted with the chart's encoding, so
|
|
4
|
+
* the summary, the table and the hover labels read the same.
|
|
5
|
+
*/
|
|
6
|
+
import type { NumberFormatter } from './chart-svg-parts.js';
|
|
7
|
+
import type { ChartInput, ChartTable, LegendEntry } from './chart-types.js';
|
|
8
|
+
/** One entry per series, only when there are two or more (colour then carries meaning). */
|
|
9
|
+
export declare function seriesLegend(input: ChartInput): LegendEntry[];
|
|
10
|
+
/** One entry per category, for kinds that colour each category (pie, donut). */
|
|
11
|
+
export declare function categoryLegend(input: ChartInput): LegendEntry[];
|
|
12
|
+
export declare function seriesSummary(input: ChartInput, format: NumberFormatter): string;
|
|
13
|
+
/** The original series-by-category table, with formatted values. */
|
|
14
|
+
export declare function seriesTable(input: ChartInput, format: NumberFormatter): ChartTable;
|
|
15
|
+
/** The table markup; the first cell of each row is its header. */
|
|
16
|
+
export declare function renderTable(caption: string, table: ChartTable): string;
|
|
17
|
+
export declare function renderLegend(entries: readonly LegendEntry[]): string;
|
|
18
|
+
//# sourceMappingURL=chart-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-text.d.ts","sourceRoot":"","sources":["../../src/render/chart-text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5E,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAM7D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAYhF;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,UAAU,CAclF;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAkBtE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAQpE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The text side of an encoded chart: legend entries, the generated summary,
|
|
3
|
+
* and the fallback table. Values are formatted with the chart's encoding, so
|
|
4
|
+
* the summary, the table and the hover labels read the same.
|
|
5
|
+
*/
|
|
6
|
+
import { seriesClass } from './chart-scales.js';
|
|
7
|
+
import { escapeText } from './escape.js';
|
|
8
|
+
/** One entry per series, only when there are two or more (colour then carries meaning). */
|
|
9
|
+
export function seriesLegend(input) {
|
|
10
|
+
if (input.series.length < 2)
|
|
11
|
+
return [];
|
|
12
|
+
return input.series.map((series, index) => ({
|
|
13
|
+
label: series.label,
|
|
14
|
+
swatch: seriesClass(index),
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
/** One entry per category, for kinds that colour each category (pie, donut). */
|
|
18
|
+
export function categoryLegend(input) {
|
|
19
|
+
return input.labels.map((label, index) => ({ label, swatch: seriesClass(index) }));
|
|
20
|
+
}
|
|
21
|
+
export function seriesSummary(input, format) {
|
|
22
|
+
return input.series
|
|
23
|
+
.map((series) => `${series.label}: ${input.labels
|
|
24
|
+
.map((label, index) => {
|
|
25
|
+
const value = series.values[index];
|
|
26
|
+
return value === undefined ? label : `${label} ${format(value)}`;
|
|
27
|
+
})
|
|
28
|
+
.join(', ')}`)
|
|
29
|
+
.join('. ');
|
|
30
|
+
}
|
|
31
|
+
/** The original series-by-category table, with formatted values. */
|
|
32
|
+
export function seriesTable(input, format) {
|
|
33
|
+
return {
|
|
34
|
+
columns: [
|
|
35
|
+
{ label: 'Series', numeric: false },
|
|
36
|
+
...input.labels.map((label) => ({ label, numeric: true })),
|
|
37
|
+
],
|
|
38
|
+
rows: input.series.map((series) => [
|
|
39
|
+
series.label,
|
|
40
|
+
...input.labels.map((_, index) => {
|
|
41
|
+
const value = series.values[index];
|
|
42
|
+
return value === undefined ? '' : format(value);
|
|
43
|
+
}),
|
|
44
|
+
]),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** The table markup; the first cell of each row is its header. */
|
|
48
|
+
export function renderTable(caption, table) {
|
|
49
|
+
const numeric = (index) => (table.columns[index]?.numeric ? ' class="ak-num"' : '');
|
|
50
|
+
const head = table.columns
|
|
51
|
+
.map((column, index) => `<th scope="col"${numeric(index)}>${escapeText(column.label)}</th>`)
|
|
52
|
+
.join('');
|
|
53
|
+
const body = table.rows
|
|
54
|
+
.map((row) => `<tr>${row
|
|
55
|
+
.map((cell, index) => index === 0
|
|
56
|
+
? `<th scope="row">${escapeText(cell)}</th>`
|
|
57
|
+
: `<td${numeric(index)}>${escapeText(cell)}</td>`)
|
|
58
|
+
.join('')}</tr>`)
|
|
59
|
+
.join('');
|
|
60
|
+
return `<table class="ak-chart-table"><caption>${escapeText(caption)}</caption><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table>`;
|
|
61
|
+
}
|
|
62
|
+
export function renderLegend(entries) {
|
|
63
|
+
if (entries.length === 0)
|
|
64
|
+
return '';
|
|
65
|
+
return `<ul class="ak-chart-legend" aria-hidden="true">${entries
|
|
66
|
+
.map((entry) => `<li><span class="ak-chart-swatch ${entry.swatch}"></span>${escapeText(entry.label)}</li>`)
|
|
67
|
+
.join('')}</ul>`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=chart-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-text.js","sourceRoot":"","sources":["../../src/render/chart-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squarified treemap layout (Bruls, Huizing and van Wijk).
|
|
3
|
+
*
|
|
4
|
+
* Cells are placed in input order: rows grow along the shorter side of the
|
|
5
|
+
* remaining rectangle while that keeps the worst aspect ratio from getting
|
|
6
|
+
* worse. Plain arithmetic in a fixed order, so the same values always give the
|
|
7
|
+
* same rectangles; callers round before emitting.
|
|
8
|
+
*/
|
|
9
|
+
export interface Rect {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}
|
|
15
|
+
/** Rectangles for positive values, one per value, in input order. Non-positive values get an empty rect. */
|
|
16
|
+
export declare function squarify(values: readonly number[], bounds: Rect): Rect[];
|
|
17
|
+
//# sourceMappingURL=chart-treemap-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-treemap-layout.d.ts","sourceRoot":"","sources":["../../src/render/chart-treemap-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD,4GAA4G;AAC5G,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAkDxE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squarified treemap layout (Bruls, Huizing and van Wijk).
|
|
3
|
+
*
|
|
4
|
+
* Cells are placed in input order: rows grow along the shorter side of the
|
|
5
|
+
* remaining rectangle while that keeps the worst aspect ratio from getting
|
|
6
|
+
* worse. Plain arithmetic in a fixed order, so the same values always give the
|
|
7
|
+
* same rectangles; callers round before emitting.
|
|
8
|
+
*/
|
|
9
|
+
/** The worst aspect ratio of a row of areas laid along a side of length `side`. */
|
|
10
|
+
function worst(row, side) {
|
|
11
|
+
const sum = row.reduce((total, area) => total + area, 0);
|
|
12
|
+
if (sum === 0 || side === 0)
|
|
13
|
+
return Number.POSITIVE_INFINITY;
|
|
14
|
+
const largest = Math.max(...row);
|
|
15
|
+
const smallest = Math.min(...row);
|
|
16
|
+
const sideSquared = side * side;
|
|
17
|
+
const sumSquared = sum * sum;
|
|
18
|
+
return Math.max((sideSquared * largest) / sumSquared, sumSquared / (sideSquared * smallest));
|
|
19
|
+
}
|
|
20
|
+
/** Rectangles for positive values, one per value, in input order. Non-positive values get an empty rect. */
|
|
21
|
+
export function squarify(values, bounds) {
|
|
22
|
+
const out = values.map(() => ({ x: bounds.x, y: bounds.y, width: 0, height: 0 }));
|
|
23
|
+
const indexes = values.map((_, index) => index).filter((index) => (values[index] ?? 0) > 0);
|
|
24
|
+
const total = indexes.reduce((sum, index) => sum + (values[index] ?? 0), 0);
|
|
25
|
+
if (total <= 0)
|
|
26
|
+
return out;
|
|
27
|
+
const scale = (bounds.width * bounds.height) / total;
|
|
28
|
+
const free = { ...bounds };
|
|
29
|
+
let row = [];
|
|
30
|
+
const placeRow = (members) => {
|
|
31
|
+
const areas = members.map((index) => (values[index] ?? 0) * scale);
|
|
32
|
+
const sum = areas.reduce((acc, area) => acc + area, 0);
|
|
33
|
+
if (free.width >= free.height) {
|
|
34
|
+
// A column on the left of the free space.
|
|
35
|
+
const width = free.height === 0 ? 0 : sum / free.height;
|
|
36
|
+
let y = free.y;
|
|
37
|
+
members.forEach((index, position) => {
|
|
38
|
+
const height = width === 0 ? 0 : (areas[position] ?? 0) / width;
|
|
39
|
+
out[index] = { x: free.x, y, width, height };
|
|
40
|
+
y += height;
|
|
41
|
+
});
|
|
42
|
+
free.x += width;
|
|
43
|
+
free.width -= width;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// A row along the top of the free space.
|
|
47
|
+
const height = free.width === 0 ? 0 : sum / free.width;
|
|
48
|
+
let x = free.x;
|
|
49
|
+
members.forEach((index, position) => {
|
|
50
|
+
const width = height === 0 ? 0 : (areas[position] ?? 0) / height;
|
|
51
|
+
out[index] = { x, y: free.y, width, height };
|
|
52
|
+
x += width;
|
|
53
|
+
});
|
|
54
|
+
free.y += height;
|
|
55
|
+
free.height -= height;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
for (const index of indexes) {
|
|
59
|
+
const side = Math.min(free.width, free.height);
|
|
60
|
+
const area = (values[index] ?? 0) * scale;
|
|
61
|
+
const current = row.map((member) => (values[member] ?? 0) * scale);
|
|
62
|
+
if (row.length === 0 || worst([...current, area], side) <= worst(current, side)) {
|
|
63
|
+
row.push(index);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
placeRow(row);
|
|
67
|
+
row = [index];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (row.length > 0)
|
|
71
|
+
placeRow(row);
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=chart-treemap-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-treemap-layout.js","sourceRoot":"","sources":["../../src/render/chart-treemap-layout.ts"],"names":[],"mappings":"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"}
|