@silverpoint/core 0.1.0 → 0.2.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/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # @silverpoint/core
2
+
3
+ The framework-free engine of **silverpoint**: the geometry, scales, interaction and types behind
4
+ every chart. The charts themselves are rendered by the adapters, and this package holds no DOM
5
+ code and no framework code.
6
+
7
+ You rarely install it by hand, because every adapter depends on it:
8
+
9
+ | Framework | Install |
10
+ |---|---|
11
+ | React | `npm install @silverpoint/react @silverpoint/grounds @silverpoint/fonts` |
12
+ | Vue | `npm install @silverpoint/vue @silverpoint/grounds @silverpoint/fonts` |
13
+ | Angular | `npm install @silverpoint/angular @silverpoint/grounds @silverpoint/fonts` |
14
+
15
+ Install it directly when you need its types in your own code:
16
+
17
+ ```sh
18
+ npm install @silverpoint/core
19
+ ```
20
+
21
+ ```ts
22
+ import type { ActiveItem, ProviderConfig, SubstrateName } from '@silverpoint/core';
23
+
24
+ export const config: ProviderConfig = { ground: 'silverpoint', substrate: 'cream', mode: 'ink' };
25
+ export const substrates: SubstrateName[] = ['cream', 'green', 'blue', 'ochre'];
26
+ export const describe = (item: ActiveItem) => `${item.seriesKey} #${item.index}: ${item.value}`;
27
+ ```
28
+
29
+ The geometry of the data is exact: the ground's hand-drawn inking only touches strokes that
30
+ carry no data, and it is deterministic for a given seed.
31
+
32
+ See [`@silverpoint/react`](https://www.npmjs.com/package/@silverpoint/react),
33
+ [`@silverpoint/vue`](https://www.npmjs.com/package/@silverpoint/vue) and
34
+ [`@silverpoint/angular`](https://www.npmjs.com/package/@silverpoint/angular) for usage, and the
35
+ [repository](https://github.com/ecrespo/silverpoint) for the specifications.
36
+
37
+ MIT.
@@ -0,0 +1,103 @@
1
+ import { C as CommonChartProps, D as DashboardProps } from './types-D1hjElfL.js';
2
+
3
+ /** One child of a reference dashboard: the catalog chart it holds, by name, and its props. */
4
+ interface DashboardDemoChild {
5
+ readonly cell: string;
6
+ /** A catalog chart name (`LineChart`); each adapter maps it to its own component. */
7
+ readonly chart: string;
8
+ /** Props only: every chart renders its demo data (REQ-093), so no child carries rows. */
9
+ readonly props: Readonly<CommonChartProps & Record<string, unknown>>;
10
+ }
11
+ /** A reference dashboard: plain data, frozen (I-9), shared by fixtures, examples and docs. */
12
+ interface DashboardDemo {
13
+ readonly props: DashboardProps;
14
+ readonly children: readonly DashboardDemoChild[];
15
+ }
16
+ /**
17
+ * The reference dashboards of Data Model §4. `ops` is the DD-007 weight reference; `mixed-spans`
18
+ * leaves a row-end gap at `md` to prove that cells are never reordered (REQ-203). Spans are given
19
+ * per breakpoint, so none is clamped at `sm`.
20
+ */
21
+ declare const DASHBOARD_DEMOS: {
22
+ 'kpi-strip': {
23
+ props: {
24
+ id: string;
25
+ title: string;
26
+ layout: {
27
+ cells: ({
28
+ id: string;
29
+ colSpan?: undefined;
30
+ } | {
31
+ id: string;
32
+ colSpan: {
33
+ md: number;
34
+ lg: number;
35
+ };
36
+ })[];
37
+ };
38
+ };
39
+ children: DashboardDemoChild[];
40
+ };
41
+ ops: {
42
+ props: {
43
+ id: string;
44
+ title: string;
45
+ description: string;
46
+ link: {
47
+ key: string;
48
+ };
49
+ layout: {
50
+ cells: ({
51
+ id: string;
52
+ colSpan?: undefined;
53
+ rowSpan?: undefined;
54
+ } | {
55
+ id: string;
56
+ colSpan: {
57
+ md: number;
58
+ lg: number;
59
+ };
60
+ rowSpan: number;
61
+ } | {
62
+ id: string;
63
+ colSpan: {
64
+ md: number;
65
+ lg: number;
66
+ };
67
+ rowSpan?: undefined;
68
+ })[];
69
+ };
70
+ };
71
+ children: DashboardDemoChild[];
72
+ };
73
+ 'mixed-spans': {
74
+ props: {
75
+ id: string;
76
+ title: string;
77
+ layout: {
78
+ columns: {
79
+ lg: number;
80
+ };
81
+ cells: ({
82
+ id: string;
83
+ colSpan?: undefined;
84
+ } | {
85
+ id: string;
86
+ colSpan: {
87
+ md: number;
88
+ lg: number;
89
+ };
90
+ })[];
91
+ };
92
+ };
93
+ children: {
94
+ cell: string;
95
+ chart: string;
96
+ props: {
97
+ title: string;
98
+ };
99
+ }[];
100
+ };
101
+ };
102
+
103
+ export { DASHBOARD_DEMOS, type DashboardDemo, type DashboardDemoChild };
@@ -0,0 +1,94 @@
1
+ // src/dashboard/demo.ts
2
+ function deepFreeze(value) {
3
+ if (value !== null && typeof value === "object") {
4
+ for (const inner of Object.values(value)) deepFreeze(inner);
5
+ Object.freeze(value);
6
+ }
7
+ return value;
8
+ }
9
+ var kpi = (cell, title, metric, delta) => ({ cell, chart: "KpiCard", props: { title, metric, delta } });
10
+ var DASHBOARD_DEMOS = /* @__PURE__ */ deepFreeze({
11
+ "kpi-strip": {
12
+ props: {
13
+ id: "kpi-strip",
14
+ title: "This week",
15
+ layout: { cells: [{ id: "revenue" }, { id: "orders" }, { id: "users" }, { id: "refunds" }, { id: "trend", colSpan: { md: 2, lg: 4 } }] }
16
+ },
17
+ children: [
18
+ kpi("revenue", "Revenue", "thousands", 6.4),
19
+ kpi("orders", "Orders", "orders per day", 8.2),
20
+ kpi("users", "Active users", "hundreds", 2.1),
21
+ kpi("refunds", "Refunds", "per day", -1.5),
22
+ { cell: "trend", chart: "LineChart", props: { title: "Hits per hour" } }
23
+ ]
24
+ },
25
+ ops: {
26
+ props: {
27
+ id: "ops",
28
+ title: "Operations",
29
+ description: "Service health over the last day: headline figures, traffic, errors and load.",
30
+ link: { key: "hour" },
31
+ layout: {
32
+ cells: [
33
+ { id: "revenue" },
34
+ { id: "users" },
35
+ { id: "churn" },
36
+ { id: "nps" },
37
+ { id: "traffic", colSpan: { md: 2, lg: 3 }, rowSpan: 2 },
38
+ { id: "errors" },
39
+ { id: "share" },
40
+ { id: "load", colSpan: { md: 2, lg: 2 } },
41
+ { id: "hosts" },
42
+ { id: "uptime" },
43
+ { id: "activity", colSpan: { md: 2, lg: 2 } },
44
+ { id: "capacity" }
45
+ ]
46
+ }
47
+ },
48
+ children: [
49
+ kpi("revenue", "Revenue", "thousands", 6.4),
50
+ kpi("users", "Active users", "hundreds", 2.1),
51
+ kpi("churn", "Churn", "per cent", -0.4),
52
+ kpi("nps", "NPS", "points", 3),
53
+ { cell: "traffic", chart: "LineChart", props: { title: "Traffic", footerLeft: "hits per hour", footerRight: "last 24 h" } },
54
+ { cell: "errors", chart: "BarChart", props: { title: "Errors" } },
55
+ { cell: "share", chart: "DonutChart", props: { title: "Traffic share" } },
56
+ { cell: "load", chart: "HeatmapChart", props: { title: "Load by hour" } },
57
+ { cell: "hosts", chart: "SparklineRows", props: { title: "Hosts" } },
58
+ { cell: "uptime", chart: "GaugeArc", props: { title: "Uptime" } },
59
+ { cell: "activity", chart: "ActivityGrid", props: { title: "Deploys" } },
60
+ { cell: "capacity", chart: "MeterChart", props: { title: "Capacity" } }
61
+ ]
62
+ },
63
+ "mixed-spans": {
64
+ props: {
65
+ id: "mixed-spans",
66
+ title: "Mixed spans",
67
+ layout: {
68
+ columns: { lg: 3 },
69
+ cells: [
70
+ { id: "one" },
71
+ { id: "two", colSpan: { md: 2, lg: 2 } },
72
+ { id: "three" },
73
+ { id: "four", colSpan: { md: 2, lg: 3 } },
74
+ { id: "five" },
75
+ { id: "six", colSpan: { md: 2, lg: 2 } },
76
+ { id: "seven" }
77
+ ]
78
+ }
79
+ },
80
+ children: [
81
+ { cell: "one", chart: "StepChart", props: { title: "Step" } },
82
+ { cell: "two", chart: "AreaChart", props: { title: "Area" } },
83
+ { cell: "three", chart: "FunnelChart", props: { title: "Funnel" } },
84
+ { cell: "four", chart: "BarChart", props: { title: "Bars" } },
85
+ { cell: "five", chart: "RadarChart", props: { title: "Radar" } },
86
+ { cell: "six", chart: "StreamChart", props: { title: "Stream" } },
87
+ { cell: "seven", chart: "MeterChart", props: { title: "Meter" } }
88
+ ]
89
+ }
90
+ });
91
+
92
+ export { DASHBOARD_DEMOS };
93
+ //# sourceMappingURL=dashboard-demos.js.map
94
+ //# sourceMappingURL=dashboard-demos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dashboard/demo.ts"],"names":[],"mappings":"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","file":"dashboard-demos.js","sourcesContent":["import type { CommonChartProps } from '../types';\nimport type { DashboardProps } from './types';\n\n/** One child of a reference dashboard: the catalog chart it holds, by name, and its props. */\nexport interface DashboardDemoChild {\n readonly cell: string;\n /** A catalog chart name (`LineChart`); each adapter maps it to its own component. */\n readonly chart: string;\n /** Props only: every chart renders its demo data (REQ-093), so no child carries rows. */\n readonly props: Readonly<CommonChartProps & Record<string, unknown>>;\n}\n\n/** A reference dashboard: plain data, frozen (I-9), shared by fixtures, examples and docs. */\nexport interface DashboardDemo {\n readonly props: DashboardProps;\n readonly children: readonly DashboardDemoChild[];\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (value !== null && typeof value === 'object') {\n for (const inner of Object.values(value)) deepFreeze(inner);\n Object.freeze(value);\n }\n return value;\n}\n\nconst kpi = (cell: string, title: string, metric: string, delta: number): DashboardDemoChild => ({ cell, chart: 'KpiCard', props: { title, metric, delta } });\n\n/**\n * The reference dashboards of Data Model §4. `ops` is the DD-007 weight reference; `mixed-spans`\n * leaves a row-end gap at `md` to prove that cells are never reordered (REQ-203). Spans are given\n * per breakpoint, so none is clamped at `sm`.\n */\nexport const DASHBOARD_DEMOS = /* @__PURE__ */ deepFreeze({\n 'kpi-strip': {\n props: {\n id: 'kpi-strip',\n title: 'This week',\n layout: { cells: [{ id: 'revenue' }, { id: 'orders' }, { id: 'users' }, { id: 'refunds' }, { id: 'trend', colSpan: { md: 2, lg: 4 } }] },\n },\n children: [\n kpi('revenue', 'Revenue', 'thousands', 6.4),\n kpi('orders', 'Orders', 'orders per day', 8.2),\n kpi('users', 'Active users', 'hundreds', 2.1),\n kpi('refunds', 'Refunds', 'per day', -1.5),\n { cell: 'trend', chart: 'LineChart', props: { title: 'Hits per hour' } },\n ],\n },\n ops: {\n props: {\n id: 'ops',\n title: 'Operations',\n description: 'Service health over the last day: headline figures, traffic, errors and load.',\n link: { key: 'hour' },\n layout: {\n cells: [\n { id: 'revenue' },\n { id: 'users' },\n { id: 'churn' },\n { id: 'nps' },\n { id: 'traffic', colSpan: { md: 2, lg: 3 }, rowSpan: 2 },\n { id: 'errors' },\n { id: 'share' },\n { id: 'load', colSpan: { md: 2, lg: 2 } },\n { id: 'hosts' },\n { id: 'uptime' },\n { id: 'activity', colSpan: { md: 2, lg: 2 } },\n { id: 'capacity' },\n ],\n },\n },\n children: [\n kpi('revenue', 'Revenue', 'thousands', 6.4),\n kpi('users', 'Active users', 'hundreds', 2.1),\n kpi('churn', 'Churn', 'per cent', -0.4),\n kpi('nps', 'NPS', 'points', 3),\n { cell: 'traffic', chart: 'LineChart', props: { title: 'Traffic', footerLeft: 'hits per hour', footerRight: 'last 24 h' } },\n { cell: 'errors', chart: 'BarChart', props: { title: 'Errors' } },\n { cell: 'share', chart: 'DonutChart', props: { title: 'Traffic share' } },\n { cell: 'load', chart: 'HeatmapChart', props: { title: 'Load by hour' } },\n { cell: 'hosts', chart: 'SparklineRows', props: { title: 'Hosts' } },\n { cell: 'uptime', chart: 'GaugeArc', props: { title: 'Uptime' } },\n { cell: 'activity', chart: 'ActivityGrid', props: { title: 'Deploys' } },\n { cell: 'capacity', chart: 'MeterChart', props: { title: 'Capacity' } },\n ],\n },\n 'mixed-spans': {\n props: {\n id: 'mixed-spans',\n title: 'Mixed spans',\n layout: {\n columns: { lg: 3 },\n cells: [\n { id: 'one' },\n { id: 'two', colSpan: { md: 2, lg: 2 } },\n { id: 'three' },\n { id: 'four', colSpan: { md: 2, lg: 3 } },\n { id: 'five' },\n { id: 'six', colSpan: { md: 2, lg: 2 } },\n { id: 'seven' },\n ],\n },\n },\n children: [\n { cell: 'one', chart: 'StepChart', props: { title: 'Step' } },\n { cell: 'two', chart: 'AreaChart', props: { title: 'Area' } },\n { cell: 'three', chart: 'FunnelChart', props: { title: 'Funnel' } },\n { cell: 'four', chart: 'BarChart', props: { title: 'Bars' } },\n { cell: 'five', chart: 'RadarChart', props: { title: 'Radar' } },\n { cell: 'six', chart: 'StreamChart', props: { title: 'Stream' } },\n { cell: 'seven', chart: 'MeterChart', props: { title: 'Meter' } },\n ],\n },\n} satisfies Record<string, DashboardDemo>);\n"]}