@k2b/ui 0.49.0 → 0.50.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/dist/base.css +40 -2
- package/dist/browser/actions/ContextMenu.js +3 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/charts/core/area.js +190 -0
- package/dist/browser/charts/core/area.js.map +1 -0
- package/dist/browser/charts/core/calendar.js +186 -0
- package/dist/browser/charts/core/calendar.js.map +1 -0
- package/dist/browser/charts/core/chart-map-data.js +9 -0
- package/dist/browser/charts/core/chart-map-data.js.map +1 -0
- package/dist/browser/charts/core/index.js +12 -0
- package/dist/browser/charts/core/index.js.map +1 -0
- package/dist/browser/charts/core/inspection.js +9 -0
- package/dist/browser/charts/core/inspection.js.map +1 -0
- package/dist/browser/charts/core/registry.js +28 -0
- package/dist/browser/charts/core/registry.js.map +1 -0
- package/dist/browser/charts/core/render.js +103 -0
- package/dist/browser/charts/core/render.js.map +1 -0
- package/dist/browser/charts/core/snapshot.js +65 -0
- package/dist/browser/charts/core/snapshot.js.map +1 -0
- package/dist/browser/charts/core/svg.js +2542 -0
- package/dist/browser/charts/core/svg.js.map +1 -0
- package/dist/browser/charts/core/termination.test-fixture.js +162 -0
- package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/browser/charts/core/text.js +13 -0
- package/dist/browser/charts/core/text.js.map +1 -0
- package/dist/browser/charts/core/types.js +8 -0
- package/dist/browser/charts/core/types.js.map +1 -0
- package/dist/browser/charts.js +4 -2
- package/dist/browser/charts.js.map +1 -1
- package/dist/browser/content/BalanceSummary.js +106 -0
- package/dist/browser/content/BalanceSummary.js.map +1 -0
- package/dist/browser/content/Chart.js +134 -115
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +366 -122
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +16 -9
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/DataTable.js +676 -293
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/DataTableTools.js +119 -0
- package/dist/browser/content/DataTableTools.js.map +1 -0
- package/dist/browser/content/FlowAmount.js +82 -0
- package/dist/browser/content/FlowAmount.js.map +1 -0
- package/dist/browser/content/balance-summary-messages.js +26 -0
- package/dist/browser/content/balance-summary-messages.js.map +1 -0
- package/dist/browser/content/chart-bar.js +6 -6
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-calendar.js +43 -0
- package/dist/browser/content/chart-calendar.js.map +1 -0
- package/dist/browser/content/chart-inspection-core.js +164 -37
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +2 -2
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +164 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -0
- package/dist/browser/content/chart-messages.js +2 -138
- package/dist/browser/content/chart-messages.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +1 -62
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +2 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/chart-time-axis.js +139 -0
- package/dist/browser/content/chart-time-axis.js.map +1 -0
- package/dist/browser/content/data-table-columns.js +160 -0
- package/dist/browser/content/data-table-columns.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +38 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/flow-amount-messages.js +26 -0
- package/dist/browser/content/flow-amount-messages.js.map +1 -0
- package/dist/browser/content/index.js +4 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +5 -4
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +50 -17
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +13 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/intl/Format.js +31 -8
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +7 -1
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/surfaces/BudgetList.js +281 -0
- package/dist/browser/surfaces/BudgetList.js.map +1 -0
- package/dist/browser/surfaces/ProgressBar.js +134 -21
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +320 -144
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js +75 -57
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/budget-messages.js +64 -0
- package/dist/browser/surfaces/budget-messages.js.map +1 -0
- package/dist/browser/surfaces/delta-badge.js +65 -0
- package/dist/browser/surfaces/delta-badge.js.map +1 -0
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +2 -2
- package/dist/browser/surfaces/person-color.js.map +1 -1
- package/dist/browser/surfaces/stat-cell-messages.js +41 -0
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/browser/widgets/Dashboard.js +137 -0
- package/dist/browser/widgets/Dashboard.js.map +1 -0
- package/dist/browser/widgets/index.js +1 -0
- package/dist/browser/widgets/index.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +3 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/charts/core/area.js +190 -0
- package/dist/ssr/charts/core/area.js.map +1 -0
- package/dist/ssr/charts/core/calendar.js +186 -0
- package/dist/ssr/charts/core/calendar.js.map +1 -0
- package/dist/ssr/charts/core/chart-map-data.js +9 -0
- package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
- package/dist/ssr/charts/core/index.js +12 -0
- package/dist/ssr/charts/core/index.js.map +1 -0
- package/dist/ssr/charts/core/inspection.js +9 -0
- package/dist/ssr/charts/core/inspection.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +28 -0
- package/dist/ssr/charts/core/registry.js.map +1 -0
- package/dist/ssr/charts/core/render.js +103 -0
- package/dist/ssr/charts/core/render.js.map +1 -0
- package/dist/ssr/charts/core/snapshot.js +65 -0
- package/dist/ssr/charts/core/snapshot.js.map +1 -0
- package/dist/ssr/charts/core/svg.js +2542 -0
- package/dist/ssr/charts/core/svg.js.map +1 -0
- package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
- package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/ssr/charts/core/text.js +13 -0
- package/dist/ssr/charts/core/text.js.map +1 -0
- package/dist/ssr/charts/core/types.js +8 -0
- package/dist/ssr/charts/core/types.js.map +1 -0
- package/dist/ssr/charts.js +4 -2
- package/dist/ssr/charts.js.map +1 -1
- package/dist/ssr/content/BalanceSummary.js +75 -0
- package/dist/ssr/content/BalanceSummary.js.map +1 -0
- package/dist/ssr/content/Chart.js +90 -95
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +190 -46
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +5 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +287 -78
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/DataTableTools.js +106 -0
- package/dist/ssr/content/DataTableTools.js.map +1 -0
- package/dist/ssr/content/FlowAmount.js +58 -0
- package/dist/ssr/content/FlowAmount.js.map +1 -0
- package/dist/ssr/content/balance-summary-messages.js +26 -0
- package/dist/ssr/content/balance-summary-messages.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +6 -6
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-calendar.js +43 -0
- package/dist/ssr/content/chart-calendar.js.map +1 -0
- package/dist/ssr/content/chart-inspection-core.js +164 -37
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +2 -2
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +164 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +2 -138
- package/dist/ssr/content/chart-messages.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +1 -62
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +2 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/chart-time-axis.js +139 -0
- package/dist/ssr/content/chart-time-axis.js.map +1 -0
- package/dist/ssr/content/data-table-columns.js +160 -0
- package/dist/ssr/content/data-table-columns.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +38 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/flow-amount-messages.js +26 -0
- package/dist/ssr/content/flow-amount-messages.js.map +1 -0
- package/dist/ssr/content/index.js +4 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +5 -4
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +26 -9
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +13 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/intl/Format.js +22 -2
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -1
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/surfaces/BudgetList.js +170 -0
- package/dist/ssr/surfaces/BudgetList.js.map +1 -0
- package/dist/ssr/surfaces/ProgressBar.js +96 -5
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +157 -51
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +24 -35
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/budget-messages.js +64 -0
- package/dist/ssr/surfaces/budget-messages.js.map +1 -0
- package/dist/ssr/surfaces/delta-badge.js +41 -0
- package/dist/ssr/surfaces/delta-badge.js.map +1 -0
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +2 -2
- package/dist/ssr/surfaces/person-color.js.map +1 -1
- package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/ssr/widgets/Dashboard.js +84 -0
- package/dist/ssr/widgets/Dashboard.js.map +1 -0
- package/dist/ssr/widgets/index.js +1 -0
- package/dist/ssr/widgets/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/charts/core/area.d.ts +62 -0
- package/dist/types/charts/core/calendar.d.ts +57 -0
- package/dist/types/charts/core/chart-map-data.d.ts +3 -0
- package/dist/types/charts/core/index.d.ts +11 -0
- package/dist/types/charts/core/inspection.d.ts +16 -0
- package/dist/types/charts/core/registry.d.ts +27 -0
- package/dist/types/charts/core/render.d.ts +40 -0
- package/dist/types/charts/core/snapshot.d.ts +27 -0
- package/dist/types/charts/core/svg.d.ts +714 -0
- package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
- package/dist/types/charts/core/text.d.ts +5 -0
- package/dist/types/charts/core/types.d.ts +31 -0
- package/dist/types/charts.d.ts +4 -2
- package/dist/types/content/BalanceSummary.d.ts +29 -0
- package/dist/types/content/Chart.d.ts +26 -36
- package/dist/types/content/ChartExplorer.d.ts +43 -2
- package/dist/types/content/ChartSnapshotView.d.ts +1 -0
- package/dist/types/content/DataTable.d.ts +28 -0
- package/dist/types/content/DataTableTools.d.ts +44 -0
- package/dist/types/content/FlowAmount.d.ts +28 -0
- package/dist/types/content/balance-summary-messages.d.ts +11 -0
- package/dist/types/content/chart-bar.d.ts +1 -1
- package/dist/types/content/chart-calendar.d.ts +4 -0
- package/dist/types/content/chart-inspection-core.d.ts +21 -16
- package/dist/types/content/chart-inspection.d.ts +5 -1
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-message-catalog.d.ts +84 -0
- package/dist/types/content/chart-messages.d.ts +2 -33
- package/dist/types/content/chart-snapshot.d.ts +1 -26
- package/dist/types/content/chart-svg.d.ts +1 -1
- package/dist/types/content/chart-time-axis.d.ts +26 -0
- package/dist/types/content/data-table-columns.d.ts +72 -0
- package/dist/types/content/data-table-messages.d.ts +18 -0
- package/dist/types/content/flow-amount-messages.d.ts +11 -0
- package/dist/types/content/index.d.ts +10 -2
- package/dist/types/inputs/SelectChip.d.ts +2 -0
- package/dist/types/inputs/date-picker.d.ts +6 -0
- package/dist/types/intl/Format.d.ts +5 -0
- package/dist/types/layout/AppWorkspace.d.ts +5 -0
- package/dist/types/surfaces/BudgetList.d.ts +42 -0
- package/dist/types/surfaces/ProgressBar.d.ts +38 -2
- package/dist/types/surfaces/StatCell.d.ts +35 -2
- package/dist/types/surfaces/StatGrid.d.ts +3 -1
- package/dist/types/surfaces/budget-messages.d.ts +30 -0
- package/dist/types/surfaces/delta-badge.d.ts +10 -0
- package/dist/types/surfaces/index.d.ts +4 -3
- package/dist/types/surfaces/person-color.d.ts +2 -2
- package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
- package/dist/types/widgets/Dashboard.d.ts +42 -0
- package/dist/types/widgets/index.d.ts +1 -0
- package/package.json +7 -1
|
@@ -19,26 +19,28 @@ var _tmpl$ = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
|
19
19
|
_tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-chart__controls><!$><!/><!$><!/><!$><!/>`),
|
|
20
20
|
_tmpl$4 = /*#__PURE__*/_$template(`<div data-interactive=true role=group tabindex=0><!$><!/><div class=k2b-chart__svg></div><span class=k2b-chart__anchor aria-hidden=true></span><span role=tooltip popover=manual data-instant=true class="k2b-tooltip k2b-chart__tooltip"></span><!$><!/>`),
|
|
21
21
|
_tmpl$5 = /*#__PURE__*/_$template(`<div>`),
|
|
22
|
-
_tmpl$6 = /*#__PURE__*/_$template(`<
|
|
23
|
-
|
|
24
|
-
import { createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, splitProps, untrack } from "solid-js";
|
|
22
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<b data-chart-legend-value>`),
|
|
23
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-chart__legend-item><svg viewBox="0 0 10 10"width=10 height=10 aria-hidden=true><rect x=1 y=1 width=8 height=8 rx=2 stroke=none></rect></svg><span></span><!$><!/>`);
|
|
24
|
+
import { createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, splitProps, untrack } from "solid-js";
|
|
25
25
|
import { isServer } from "solid-js/web";
|
|
26
26
|
import { IconButton } from "../actions/Button";
|
|
27
|
+
import { calendarLayout } from "../charts/core/calendar";
|
|
28
|
+
import { chartKinds } from "../charts/core/registry";
|
|
29
|
+
import { chartRenderHeight, preservesAspectRatio, renderChartSvg } from "../charts/core/render";
|
|
27
30
|
import { suppressTextSelection } from "../internal/text-selection";
|
|
28
31
|
import { useLocale } from "../intl/locale";
|
|
29
32
|
import { useUiMessages } from "../intl/messages";
|
|
30
|
-
import {
|
|
33
|
+
import { calendarInspectionNavigation, mountCalendarScroll } from "./chart-calendar";
|
|
31
34
|
import { createChartInspection } from "./chart-inspection";
|
|
32
35
|
import { closeChartInspectionOnOutside } from "./chart-inspection-core";
|
|
33
|
-
import { lineGapsSvg } from "./chart-line-gaps";
|
|
34
36
|
import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from "./chart-map-viewport";
|
|
35
|
-
import { useChartMessages } from "./chart-messages";
|
|
36
|
-
import { panStateTimelineViewport,
|
|
37
|
-
import {
|
|
37
|
+
import { resolveChartMessages, useChartMessages } from "./chart-messages";
|
|
38
|
+
import { panStateTimelineViewport, stateTimelineDomain, stateTimelineHeight, zoomStateTimelineViewport } from "./chart-state-timeline";
|
|
39
|
+
import { selectedChartSvg } from "./chart-svg";
|
|
38
40
|
import { useViewportMessages } from "./viewport-messages";
|
|
39
41
|
|
|
40
42
|
/**
|
|
41
|
-
* Chart —
|
|
43
|
+
* Chart — Solid interaction and sizing around the portable UI chart core.
|
|
42
44
|
*
|
|
43
45
|
* **Live-update story.** `charts.<kind>(opts)` returns an SVG string;
|
|
44
46
|
* Solid's `innerHTML` is reactive, so any time a prop (signal, store
|
|
@@ -56,15 +58,15 @@ import { useViewportMessages } from "./viewport-messages";
|
|
|
56
58
|
* from the row count and legend via `stateTimelineHeight()`.
|
|
57
59
|
*
|
|
58
60
|
* **Why so thin.** The props are a discriminated union over each
|
|
59
|
-
*
|
|
61
|
+
* registered core chart renderer — `kind: "line"` brings in exactly the params
|
|
60
62
|
* `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
|
|
61
|
-
* Options stay aligned with
|
|
63
|
+
* Options stay aligned with the core renderer without renaming. Every chart provides
|
|
62
64
|
* renderer-owned inspection, tooltips and optional selection by default.
|
|
63
65
|
* `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
|
|
64
|
-
*
|
|
66
|
+
* When a core renderer gains an option, it is automatically available at every
|
|
65
67
|
* callsite.
|
|
66
68
|
*
|
|
67
|
-
* **Theming.**
|
|
69
|
+
* **Theming.** The core renderers use `currentColor` for axes / ticks /
|
|
68
70
|
* tick labels — set the wrapping element's `color` and everything
|
|
69
71
|
* inherits. Series colors come from `--stdlib-chart-c1..c8` CSS
|
|
70
72
|
* custom properties; override on the parent for per-chart palettes.
|
|
@@ -82,7 +84,7 @@ import { useViewportMessages } from "./viewport-messages";
|
|
|
82
84
|
* ```
|
|
83
85
|
*/
|
|
84
86
|
|
|
85
|
-
/** All chart kinds
|
|
87
|
+
/** All registered chart kinds. */
|
|
86
88
|
|
|
87
89
|
/**
|
|
88
90
|
* Per-kind props: `kind` discriminator + the exact options that
|
|
@@ -92,80 +94,14 @@ import { useViewportMessages } from "./viewport-messages";
|
|
|
92
94
|
* get full type safety.
|
|
93
95
|
*/
|
|
94
96
|
|
|
95
|
-
|
|
97
|
+
export { chartRenderHeight, renderChartSvg } from "../charts/core/render";
|
|
96
98
|
|
|
97
|
-
/**
|
|
98
|
-
export const chartRenderHeight = props => {
|
|
99
|
-
if (props.kind === "stateTimeline") return stateTimelineHeight(props.rows.length, props.legend !== false);
|
|
100
|
-
if (props.kind === "bar") return barChartLayout(props).height;
|
|
101
|
-
if (props.kind === "barGauge") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);
|
|
102
|
-
return 280;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Internal — strips wrapper-only keys from props and forwards the
|
|
107
|
-
* rest (plus logical size) to `charts[kind]`. The `any` is the
|
|
108
|
-
* price for dispatching one function call across 14 different option
|
|
109
|
-
* types; an explicit per-kind switch would type it but balloon the
|
|
110
|
-
* component for no runtime benefit.
|
|
111
|
-
*/
|
|
112
|
-
export const renderChartSvg = (props, width, height, mapViewport, timelineViewport) => {
|
|
113
|
-
const {
|
|
114
|
-
kind,
|
|
115
|
-
class: _class,
|
|
116
|
-
style: _style,
|
|
117
|
-
labels: _labels,
|
|
118
|
-
interactive: _interactive,
|
|
119
|
-
onSelect: _onSelect,
|
|
120
|
-
selected: _selected,
|
|
121
|
-
tooltip: _tooltip,
|
|
122
|
-
cursor: _cursor,
|
|
123
|
-
zoomFocus: _zoomFocus,
|
|
124
|
-
legendPlacement: _legendPlacement,
|
|
125
|
-
...opts
|
|
126
|
-
} = props;
|
|
127
|
-
if (kind === "stateTimeline") {
|
|
128
|
-
return responsiveChartSvg(renderStateTimelineSvg({
|
|
129
|
-
...opts,
|
|
130
|
-
width,
|
|
131
|
-
height,
|
|
132
|
-
viewport: timelineViewport,
|
|
133
|
-
interactive: true
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
if (kind === "bar") return responsiveChartSvg(renderBarChartSvg({
|
|
137
|
-
...opts,
|
|
138
|
-
width,
|
|
139
|
-
height,
|
|
140
|
-
inspect: true
|
|
141
|
-
}));
|
|
142
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
143
|
-
let svg = charts[kind]({
|
|
144
|
-
...opts,
|
|
145
|
-
...(props.kind === "line" && props.legend && props.legendPlacement === "top-start" ? {
|
|
146
|
-
legend: false
|
|
147
|
-
} : {}),
|
|
148
|
-
...(kind === "map" ? {
|
|
149
|
-
viewport: DEFAULT_MAP_VIEWPORT
|
|
150
|
-
} : {}),
|
|
151
|
-
width,
|
|
152
|
-
height,
|
|
153
|
-
inspect: true
|
|
154
|
-
});
|
|
155
|
-
if (props.kind === "line" && props.maxGap !== undefined) {
|
|
156
|
-
if (props.area || props.errorBand) throw new Error("Chart maxGap does not support area or errorBand fills");
|
|
157
|
-
svg = lineGapsSvg(svg, props.maxGap, props);
|
|
158
|
-
}
|
|
159
|
-
if (props.kind === "map") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));
|
|
160
|
-
return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);
|
|
161
|
-
};
|
|
162
|
-
const preservesAspectRatio = kind => kind === "map" || kind === "pie" || kind === "donut" || kind === "gauge";
|
|
163
|
-
|
|
164
|
-
/** Empty-data short-circuit. Kept per-kind because stdlib's payload
|
|
99
|
+
/** Empty-data short-circuit. Kept per-kind because each renderer's payload
|
|
165
100
|
* key differs (series vs data vs groups). We're conservative: only
|
|
166
101
|
* block on truly empty inputs; partially-filled series get rendered
|
|
167
|
-
* as-is and
|
|
102
|
+
* as-is and the core handles the gaps. */
|
|
168
103
|
const isEmpty = props => {
|
|
104
|
+
if (props.kind === "area") return !props.x.length || !props.series.length || props.x.every((_, i) => props.series.some(s => s.data[i] === null) || props.normalize && props.series.every(s => s.data[i] === 0));
|
|
169
105
|
if (props.kind === "line" || props.kind === "scatter") {
|
|
170
106
|
return !props.series?.length || props.series.every(s => !s.data.length);
|
|
171
107
|
}
|
|
@@ -183,8 +119,8 @@ const isEmpty = props => {
|
|
|
183
119
|
}
|
|
184
120
|
return false;
|
|
185
121
|
};
|
|
186
|
-
const
|
|
187
|
-
const [, drawingProps] = splitProps(props, ["selected", "onSelect", "tooltip", "cursor"]);
|
|
122
|
+
const ChartRoot = props => {
|
|
123
|
+
const [, drawingProps] = splitProps(props, ["class", "style", "labels", "interactive", "selected", "onSelect", "tooltip", "cursor"]);
|
|
188
124
|
const messages = useUiMessages();
|
|
189
125
|
const chartMessages = useChartMessages();
|
|
190
126
|
const viewportMessages = useViewportMessages();
|
|
@@ -194,12 +130,31 @@ const Chart = props => {
|
|
|
194
130
|
let lineAnchorRef;
|
|
195
131
|
// One deterministic coordinate space on the server and client. CSS fits the
|
|
196
132
|
// SVG to its box; hydration must never replace it with measured geometry.
|
|
133
|
+
const calendar = () => props.kind === "heatmap" && props.layout === "calendar" ? calendarLayout({
|
|
134
|
+
...props,
|
|
135
|
+
locale: props.locale ?? locale()
|
|
136
|
+
}) : undefined;
|
|
197
137
|
const size = () => ({
|
|
198
|
-
width: 480,
|
|
138
|
+
width: calendar()?.width ?? 480,
|
|
199
139
|
height: chartRenderHeight(props)
|
|
200
140
|
});
|
|
201
|
-
const topLegend = () => props.kind === "line" && props.legend === true && props.legendPlacement === "top-start";
|
|
202
|
-
const legendSeries = () => props.kind === "line" ? props.series : [];
|
|
141
|
+
const topLegend = () => props.kind === "area" ? props.legend !== false : props.kind === "line" && props.legend === true && props.legendPlacement === "top-start";
|
|
142
|
+
const legendSeries = () => props.kind === "line" || props.kind === "area" ? props.series : [];
|
|
143
|
+
const legendValue = index => {
|
|
144
|
+
if (props.kind !== "area") return "";
|
|
145
|
+
const last = props.x.length - 1;
|
|
146
|
+
const amount = props.series[index]?.data[last];
|
|
147
|
+
const values = props.series.map(s => s.data[last]);
|
|
148
|
+
const total = values.reduce((sum, value) => sum + (value ?? 0), 0);
|
|
149
|
+
if (amount == null || values.some(v => v == null) || props.normalize && total === 0) return "—";
|
|
150
|
+
return props.normalize ? new Intl.NumberFormat(locale(), {
|
|
151
|
+
style: "percent",
|
|
152
|
+
minimumFractionDigits: 1,
|
|
153
|
+
maximumFractionDigits: 1
|
|
154
|
+
}).format(amount / total) : props.format?.(amount) ?? new Intl.NumberFormat(locale(), {
|
|
155
|
+
maximumFractionDigits: 2
|
|
156
|
+
}).format(amount);
|
|
157
|
+
};
|
|
203
158
|
const dimensions = () => containerRef?.getBoundingClientRect() ?? size();
|
|
204
159
|
const initialMapViewport = props.kind === "map" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;
|
|
205
160
|
const [mapViewport, setMapViewport] = createSignal(initialMapViewport);
|
|
@@ -336,6 +291,7 @@ const Chart = props => {
|
|
|
336
291
|
pointerFrame = requestAnimationFrame(flushPointerMove);
|
|
337
292
|
};
|
|
338
293
|
const stopDragging = event => {
|
|
294
|
+
inspection.up();
|
|
339
295
|
if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();
|
|
340
296
|
if (timelineDrag?.pointerId === event.pointerId) {
|
|
341
297
|
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
@@ -405,22 +361,35 @@ const Chart = props => {
|
|
|
405
361
|
};
|
|
406
362
|
const inspection = createChartInspection({
|
|
407
363
|
container: () => containerRef,
|
|
364
|
+
locale,
|
|
408
365
|
cursor: () => props.cursor,
|
|
409
366
|
tooltip: () => chartTooltipRef,
|
|
410
367
|
anchor: () => lineAnchorRef,
|
|
411
368
|
kind: () => props.kind,
|
|
369
|
+
nav: () => props.kind === "heatmap" && props.layout === "calendar" ? calendarInspectionNavigation : undefined,
|
|
412
370
|
enabled: () => !isEmpty(props),
|
|
413
371
|
select: selection => props.onSelect?.(selection),
|
|
414
372
|
format: selection => {
|
|
415
373
|
if (props.tooltip) return props.tooltip(selection);
|
|
416
|
-
const fields = chartMessages().chartFields;
|
|
374
|
+
const fields = props.kind === "heatmap" && props.layout === "calendar" ? resolveChartMessages(props.locale ?? locale()).chartFields : chartMessages().chartFields;
|
|
375
|
+
if (selection.kind === "area" && props.kind === "area") {
|
|
376
|
+
const amount = selection.datum.values.find(f => f.key === "value");
|
|
377
|
+
const share = selection.datum.values.find(f => f.key === "percent");
|
|
378
|
+
return {
|
|
379
|
+
title: selection.datum.values.find(f => f.key === "x")?.formatted ?? "",
|
|
380
|
+
rows: [{
|
|
381
|
+
label: selection.datum.label ?? chartMessages().series,
|
|
382
|
+
value: `${share ? `${share.formatted} · ` : ""}${amount.formatted}`
|
|
383
|
+
}]
|
|
384
|
+
};
|
|
385
|
+
}
|
|
417
386
|
const format = new Intl.NumberFormat(locale(), {
|
|
418
387
|
maximumFractionDigits: 6
|
|
419
388
|
});
|
|
420
389
|
return {
|
|
421
390
|
title: selection.datum.label ?? (selection.datum.seriesIndex !== undefined ? `${labels().series ?? chartMessages().series} ${selection.datum.seriesIndex + 1}` : undefined),
|
|
422
391
|
rows: selection.datum.values.map(field => ({
|
|
423
|
-
label: selection.kind === "line" && field.key === "y" ? selection.datum.label ?? labels().series ?? chartMessages().series : fields({
|
|
392
|
+
label: props.kind === "heatmap" && props.layout === "calendar" && field.key === "value" && props.label ? props.label : selection.kind === "line" && field.key === "y" ? selection.datum.label ?? labels().series ?? chartMessages().series : fields({
|
|
424
393
|
key: field.key
|
|
425
394
|
}),
|
|
426
395
|
value: field.formatted ?? (field.key === "upperInclusive" ? field.value === "true" ? messages().yes : messages().no : typeof field.value === "number" ? `${format.format(field.value)}${field.key === "percent" ? "%" : ""}` : field.value)
|
|
@@ -429,7 +398,10 @@ const Chart = props => {
|
|
|
429
398
|
}
|
|
430
399
|
});
|
|
431
400
|
const closeChartTooltip = () => inspection.close();
|
|
432
|
-
const svgMarkup = createMemo(() => renderChartSvg(
|
|
401
|
+
const svgMarkup = createMemo(() => renderChartSvg(props.kind === "heatmap" && props.layout === "calendar" ? {
|
|
402
|
+
...props,
|
|
403
|
+
locale: props.locale ?? locale()
|
|
404
|
+
} : drawingProps, size().width, size().height, interactiveMap() ? mapViewport() : undefined, interactiveTimeline() ? timelineViewport() : undefined, locale()));
|
|
433
405
|
createEffect(() => {
|
|
434
406
|
svgMarkup();
|
|
435
407
|
inspection.invalidate();
|
|
@@ -444,10 +416,12 @@ const Chart = props => {
|
|
|
444
416
|
});
|
|
445
417
|
onMount(() => {
|
|
446
418
|
if (!containerRef) return;
|
|
419
|
+
if (props.kind === "heatmap" && props.layout === "calendar") onCleanup(mountCalendarScroll(containerRef));
|
|
447
420
|
onCleanup(closeChartInspectionOnOutside({
|
|
448
421
|
container: () => containerRef,
|
|
449
422
|
tooltip: () => chartTooltipRef,
|
|
450
|
-
close: closeChartTooltip
|
|
423
|
+
close: closeChartTooltip,
|
|
424
|
+
keepScroll: () => props.kind === "heatmap" && props.layout === "calendar"
|
|
451
425
|
}));
|
|
452
426
|
});
|
|
453
427
|
const chartStyle = () => props.style ?? (props.kind === "stateTimeline" ? {
|
|
@@ -475,10 +449,10 @@ const Chart = props => {
|
|
|
475
449
|
typeof _ref$4 === "function" ? _$use(_ref$4, _el$16) : containerRef = _el$16;
|
|
476
450
|
_$insert(_el$16, () => labels().empty ?? messages().noData);
|
|
477
451
|
_$effect(_p$ => {
|
|
478
|
-
var _v$
|
|
479
|
-
_v$
|
|
480
|
-
_v$
|
|
481
|
-
_p$.t = _$style(_el$16, _v$
|
|
452
|
+
var _v$13 = `k2b-chart k2b-chart__empty ${props.class ?? ""}`,
|
|
453
|
+
_v$14 = chartStyle();
|
|
454
|
+
_v$13 !== _p$.e && _$className(_el$16, _p$.e = _v$13);
|
|
455
|
+
_p$.t = _$style(_el$16, _v$14, _p$.t);
|
|
482
456
|
return _p$;
|
|
483
457
|
}, {
|
|
484
458
|
e: undefined,
|
|
@@ -519,23 +493,51 @@ const Chart = props => {
|
|
|
519
493
|
return legendSeries();
|
|
520
494
|
},
|
|
521
495
|
children: (series, index) => (() => {
|
|
522
|
-
var _el$17 = _$getNextElement(_tmpl$
|
|
496
|
+
var _el$17 = _$getNextElement(_tmpl$7),
|
|
523
497
|
_el$18 = _el$17.firstChild,
|
|
524
498
|
_el$19 = _el$18.firstChild,
|
|
525
|
-
_el$20 = _el$18.nextSibling
|
|
499
|
+
_el$20 = _el$18.nextSibling,
|
|
500
|
+
_el$22 = _el$20.nextSibling,
|
|
501
|
+
[_el$23, _co$6] = _$getNextMarker(_el$22.nextSibling);
|
|
526
502
|
_$insert(_el$20, (() => {
|
|
527
503
|
var _c$ = _$memo(() => !!(series.label && series.label.length > 0));
|
|
528
|
-
return () => _c$() ? series.label :
|
|
504
|
+
return () => _c$() ? series.label : `${chartMessages().series} ${index() + 1}`;
|
|
529
505
|
})());
|
|
506
|
+
_$insert(_el$17, _$createComponent(Show, {
|
|
507
|
+
get when() {
|
|
508
|
+
return props.kind === "area";
|
|
509
|
+
},
|
|
510
|
+
get children() {
|
|
511
|
+
var _el$21 = _$getNextElement(_tmpl$6);
|
|
512
|
+
_$insert(_el$21, () => legendValue(index()));
|
|
513
|
+
_$effect(_p$ => {
|
|
514
|
+
var _v$15 = index(),
|
|
515
|
+
_v$16 = props.kind === "area" && props.normalize ? "percent" : "value",
|
|
516
|
+
_v$17 = legendValue(index());
|
|
517
|
+
_v$15 !== _p$.e && _$setAttribute(_el$21, "data-series-index", _p$.e = _v$15);
|
|
518
|
+
_v$16 !== _p$.t && _$setAttribute(_el$21, "data-field", _p$.t = _v$16);
|
|
519
|
+
_v$17 !== _p$.a && _$setAttribute(_el$21, "data-default", _p$.a = _v$17);
|
|
520
|
+
return _p$;
|
|
521
|
+
}, {
|
|
522
|
+
e: undefined,
|
|
523
|
+
t: undefined,
|
|
524
|
+
a: undefined
|
|
525
|
+
});
|
|
526
|
+
return _el$21;
|
|
527
|
+
}
|
|
528
|
+
}), _el$23, _co$6);
|
|
530
529
|
_$effect(_p$ => {
|
|
531
|
-
var _v$
|
|
532
|
-
_v$
|
|
533
|
-
|
|
534
|
-
_v$
|
|
530
|
+
var _v$18 = `stdlib-chart k2b-chart__legend-swatch ${props.kind === "line" ? props.className ?? "" : ""}`,
|
|
531
|
+
_v$19 = `stdlib-chart-series-${index() % 8}`,
|
|
532
|
+
_v$20 = `var(--stdlib-chart-c${index() % 8 + 1}, ${["#2563eb", "#16a34a", "#d97706", "#dc2626", "#a855f7", "#0891b2", "#db2777", "#65a30d"][index() % 8]})`;
|
|
533
|
+
_v$18 !== _p$.e && _$setAttribute(_el$18, "class", _p$.e = _v$18);
|
|
534
|
+
_v$19 !== _p$.t && _$setAttribute(_el$19, "class", _p$.t = _v$19);
|
|
535
|
+
_v$20 !== _p$.a && _$setAttribute(_el$19, "fill", _p$.a = _v$20);
|
|
535
536
|
return _p$;
|
|
536
537
|
}, {
|
|
537
538
|
e: undefined,
|
|
538
|
-
t: undefined
|
|
539
|
+
t: undefined,
|
|
540
|
+
a: undefined
|
|
539
541
|
});
|
|
540
542
|
return _el$17;
|
|
541
543
|
})()
|
|
@@ -576,11 +578,12 @@ const Chart = props => {
|
|
|
576
578
|
_v$6 = chartStyle(),
|
|
577
579
|
_v$7 = accessibleName(),
|
|
578
580
|
_v$8 = accessibleName() !== chartMessages().interactiveChart ? chartMessages().interactiveChart : undefined,
|
|
579
|
-
_v$9 = !preservesAspectRatio(props.kind) ? "true" : undefined,
|
|
580
|
-
_v$0 = `${
|
|
581
|
-
_v$1 = `${size().
|
|
582
|
-
_v$10 = `${size().
|
|
583
|
-
_v$11 =
|
|
581
|
+
_v$9 = !calendar() && !preservesAspectRatio(props.kind) ? "true" : undefined,
|
|
582
|
+
_v$0 = calendar() ? `${calendar().minWidth}px` : undefined,
|
|
583
|
+
_v$1 = `${size().width}px`,
|
|
584
|
+
_v$10 = `${size().height}px`,
|
|
585
|
+
_v$11 = `${size().width} / ${size().height}`,
|
|
586
|
+
_v$12 = isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup();
|
|
584
587
|
_v$ !== _p$.e && _$className(_el$2, _p$.e = _v$);
|
|
585
588
|
_v$2 !== _p$.t && _$setAttribute(_el$2, "data-chart-kind", _p$.t = _v$2);
|
|
586
589
|
_v$3 !== _p$.a && _$setAttribute(_el$2, "data-legend-placement", _p$.a = _v$3);
|
|
@@ -590,10 +593,11 @@ const Chart = props => {
|
|
|
590
593
|
_v$7 !== _p$.s && _$setAttribute(_el$2, "aria-label", _p$.s = _v$7);
|
|
591
594
|
_v$8 !== _p$.h && _$setAttribute(_el$2, "aria-description", _p$.h = _v$8);
|
|
592
595
|
_v$9 !== _p$.r && _$setAttribute(_el$4, "data-stretch", _p$.r = _v$9);
|
|
593
|
-
_v$0 !== _p$.d && _$setStyleProperty(_el$4, "
|
|
594
|
-
_v$1 !== _p$.l && _$setStyleProperty(_el$4, "--k2b-chart-
|
|
595
|
-
_v$10 !== _p$.u && _$setStyleProperty(_el$4, "
|
|
596
|
-
_v$11 !== _p$.c && _$
|
|
596
|
+
_v$0 !== _p$.d && _$setStyleProperty(_el$4, "min-width", _p$.d = _v$0);
|
|
597
|
+
_v$1 !== _p$.l && _$setStyleProperty(_el$4, "--k2b-chart-width", _p$.l = _v$1);
|
|
598
|
+
_v$10 !== _p$.u && _$setStyleProperty(_el$4, "--k2b-chart-height", _p$.u = _v$10);
|
|
599
|
+
_v$11 !== _p$.c && _$setStyleProperty(_el$4, "aspect-ratio", _p$.c = _v$11);
|
|
600
|
+
_v$12 !== _p$.w && _$setProperty(_el$4, "innerHTML", _p$.w = _v$12);
|
|
597
601
|
return _p$;
|
|
598
602
|
}, {
|
|
599
603
|
e: undefined,
|
|
@@ -608,13 +612,28 @@ const Chart = props => {
|
|
|
608
612
|
d: undefined,
|
|
609
613
|
l: undefined,
|
|
610
614
|
u: undefined,
|
|
611
|
-
c: undefined
|
|
615
|
+
c: undefined,
|
|
616
|
+
w: undefined
|
|
612
617
|
});
|
|
613
618
|
_$runHydrationEvents();
|
|
614
619
|
return _el$2;
|
|
615
620
|
}
|
|
616
621
|
});
|
|
617
622
|
};
|
|
623
|
+
// Add a renderer to charts/core/registry.ts; its key defines the namespace member and discriminator.
|
|
624
|
+
// Both entry styles share ChartRoot, preserving the same owner, markup and reactive props.
|
|
625
|
+
const chartComponent = kind => props =>
|
|
626
|
+
// Public namespace types correlate each discriminator with its options.
|
|
627
|
+
ChartRoot(mergeProps(props, {
|
|
628
|
+
kind
|
|
629
|
+
}));
|
|
630
|
+
const components = Object.fromEntries(Object.entries(chartKinds).map(([name, kind]) => [name, chartComponent(kind)]));
|
|
631
|
+
const Chart = Object.assign(ChartRoot, components, {
|
|
632
|
+
Calendar: props => ChartRoot(mergeProps(props, {
|
|
633
|
+
kind: "heatmap",
|
|
634
|
+
layout: "calendar"
|
|
635
|
+
}))
|
|
636
|
+
});
|
|
618
637
|
export default Chart;
|
|
619
638
|
_$delegateEvents(["pointerdown", "pointermove", "pointerup", "click", "focusin", "focusout", "keydown"]);
|
|
620
639
|
//# sourceMappingURL=Chart.js.map
|