layerchart 0.52.1 → 0.54.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.
Files changed (38) hide show
  1. package/dist/components/Axis.svelte +51 -94
  2. package/dist/components/Axis.svelte.d.ts +2 -1
  3. package/dist/components/Bars.svelte +2 -1
  4. package/dist/components/Bars.svelte.d.ts +1 -0
  5. package/dist/components/Brush.svelte +4 -4
  6. package/dist/components/Chart.svelte +6 -4
  7. package/dist/components/Chart.svelte.d.ts +25 -8
  8. package/dist/components/ChartContext.svelte +1 -1
  9. package/dist/components/ChartContext.svelte.d.ts +1 -1
  10. package/dist/components/Grid.svelte +151 -0
  11. package/dist/components/Grid.svelte.d.ts +35 -0
  12. package/dist/components/Labels.svelte +15 -5
  13. package/dist/components/Labels.svelte.d.ts +2 -0
  14. package/dist/components/Legend.svelte +1 -1
  15. package/dist/components/Rule.svelte +20 -4
  16. package/dist/components/Rule.svelte.d.ts +2 -0
  17. package/dist/components/TransformContext.svelte +3 -1
  18. package/dist/components/charts/AreaChart.svelte +59 -35
  19. package/dist/components/charts/AreaChart.svelte.d.ts +40 -2
  20. package/dist/components/charts/BarChart.svelte +63 -29
  21. package/dist/components/charts/BarChart.svelte.d.ts +40 -2
  22. package/dist/components/charts/LineChart.svelte +44 -16
  23. package/dist/components/charts/LineChart.svelte.d.ts +40 -2
  24. package/dist/components/charts/PieChart.svelte +25 -4
  25. package/dist/components/charts/PieChart.svelte.d.ts +17 -1
  26. package/dist/components/charts/ScatterChart.svelte +31 -16
  27. package/dist/components/charts/ScatterChart.svelte.d.ts +38 -2
  28. package/dist/components/index.d.ts +1 -0
  29. package/dist/components/index.js +1 -0
  30. package/dist/components/tooltip/Tooltip.svelte +20 -5
  31. package/dist/components/tooltip/TooltipContext.svelte +2 -1
  32. package/dist/components/tooltip/TooltipContext.svelte.d.ts +7 -0
  33. package/dist/docs/Preview.svelte +24 -11
  34. package/dist/utils/genData.d.ts +1 -1
  35. package/dist/utils/genData.js +8 -8
  36. package/dist/utils/scales.d.ts +1 -1
  37. package/dist/utils/stack.test.js +4 -4
  38. package/package.json +1 -1
@@ -5,6 +5,8 @@ import 'prism-svelte';
5
5
  import { mdiCodeTags, mdiTable } from '@mdi/js';
6
6
  import { Button, CopyButton, Dialog, Toggle, Tooltip } from 'svelte-ux';
7
7
  import { cls } from '@layerstack/tailwind';
8
+ import { entries, fromEntries } from '@layerstack/utils';
9
+ import { isLiteralObject } from '@layerstack/utils/object';
8
10
  import Code from './Code.svelte';
9
11
  import Json from './Json.svelte';
10
12
  export let code = undefined;
@@ -12,13 +14,26 @@ export let data = undefined;
12
14
  export let language = 'svelte';
13
15
  export let highlightedCode = code ? Prism.highlight(code, Prism.languages.svelte, language) : '';
14
16
  export let showCode = false;
15
- let copyValue = null;
16
- try {
17
- // TODO: Improve handling of circular structures
18
- copyValue = JSON.stringify(data, null, 2);
17
+ /**
18
+ * Custom JSON replacer (to use with JSON.stringify()) to convert `Date` instances to `new Date()`
19
+ */
20
+ function replacer(key, value) {
21
+ // TODO: Improve handling of circular structures and handle other data types (Map, Set, etc)
22
+ if (this[key] instanceof Date) {
23
+ return `new Date('${this[key].toISOString()}')`;
24
+ }
25
+ return value;
19
26
  }
20
- catch (e) {
21
- console.error('Error capturing value to copy', e);
27
+ function getDataAsString(_data) {
28
+ try {
29
+ // Regular expression to match quoted instantiation (ex. `"new Date(...)"`) and stripe the quotes (`new Date(...)`)
30
+ const datePattern = /"(new \w+\([^)]*\))"/g;
31
+ return JSON.stringify(_data, replacer, 2).replace(datePattern, '$1');
32
+ }
33
+ catch (e) {
34
+ console.error('Error capturing value to copy', e);
35
+ return '';
36
+ }
22
37
  }
23
38
  </script>
24
39
 
@@ -58,11 +73,9 @@ catch (e) {
58
73
  <div class="text-lg font-semibold">Chart data</div>
59
74
  </div>
60
75
 
61
- {#if copyValue}
62
- <Tooltip title="Copy">
63
- <CopyButton value={copyValue} variant="fill-light" color="primary" />
64
- </Tooltip>
65
- {/if}
76
+ <Tooltip title="Copy">
77
+ <CopyButton value={() => getDataAsString(data)} variant="fill-light" color="primary" />
78
+ </Tooltip>
66
79
  </div>
67
80
 
68
81
  <Json value={data} />
@@ -48,7 +48,7 @@ export declare const wideData: {
48
48
  apples: number;
49
49
  bananas: number;
50
50
  cherries: number;
51
- dates: number;
51
+ grapes: number;
52
52
  }[];
53
53
  export declare const longData: {
54
54
  year: number;
@@ -86,28 +86,28 @@ export function createTimeSeries(options) {
86
86
  return timeSeries;
87
87
  }
88
88
  export const wideData = [
89
- { year: 2019, apples: 3840, bananas: 1920, cherries: 960, dates: 400 },
90
- { year: 2018, apples: 1600, bananas: 1440, cherries: 960, dates: 400 },
91
- { year: 2017, apples: 820, bananas: 1000, cherries: 640, dates: 400 },
92
- { year: 2016, apples: 820, bananas: 560, cherries: 720, dates: 400 },
89
+ { year: 2019, apples: 3840, bananas: 1920, cherries: 960, grapes: 400 },
90
+ { year: 2018, apples: 1600, bananas: 1440, cherries: 960, grapes: 400 },
91
+ { year: 2017, apples: 820, bananas: 1000, cherries: 640, grapes: 400 },
92
+ { year: 2016, apples: 820, bananas: 560, cherries: 720, grapes: 400 },
93
93
  ];
94
94
  export const longData = [
95
95
  { year: 2019, basket: 1, fruit: 'apples', value: 3840 },
96
96
  { year: 2019, basket: 1, fruit: 'bananas', value: 1920 },
97
97
  { year: 2019, basket: 2, fruit: 'cherries', value: 960 },
98
- { year: 2019, basket: 2, fruit: 'dates', value: 400 },
98
+ { year: 2019, basket: 2, fruit: 'grapes', value: 400 },
99
99
  { year: 2018, basket: 1, fruit: 'apples', value: 1600 },
100
100
  { year: 2018, basket: 1, fruit: 'bananas', value: 1440 },
101
101
  { year: 2018, basket: 2, fruit: 'cherries', value: 960 },
102
- { year: 2018, basket: 2, fruit: 'dates', value: 400 },
102
+ { year: 2018, basket: 2, fruit: 'grapes', value: 400 },
103
103
  { year: 2017, basket: 1, fruit: 'apples', value: 820 },
104
104
  { year: 2017, basket: 1, fruit: 'bananas', value: 1000 },
105
105
  { year: 2017, basket: 2, fruit: 'cherries', value: 640 },
106
- { year: 2017, basket: 2, fruit: 'dates', value: 400 },
106
+ { year: 2017, basket: 2, fruit: 'grapes', value: 400 },
107
107
  { year: 2016, basket: 1, fruit: 'apples', value: 820 },
108
108
  { year: 2016, basket: 1, fruit: 'bananas', value: 560 },
109
109
  { year: 2016, basket: 2, fruit: 'cherries', value: 720 },
110
- { year: 2016, basket: 2, fruit: 'dates', value: 400 },
110
+ { year: 2016, basket: 2, fruit: 'grapes', value: 400 },
111
111
  ];
112
112
  export function getPhyllotaxis({ radius, count, width, height, }) {
113
113
  // Phyllotaxis: https://www.youtube.com/watch?v=KWoJgHFYWxY
@@ -32,7 +32,7 @@ export declare function isScaleBand(scale: AnyScale<any, any>): scale is ScaleBa
32
32
  */
33
33
  export declare function scaleInvert(scale: AnyScale<any, any>, value: number): any;
34
34
  /** Create new copy of scale with domain and range */
35
- export declare function createScale(scale: AnyScale, domain: DomainType, range: any[] | Function, context?: Record<any, any>): AnyScale<any, any, any, any>;
35
+ export declare function createScale(scale: AnyScale, domain: DomainType, range: any[] | readonly any[] | Function, context?: Record<any, any>): AnyScale<any, any, any, any>;
36
36
  /** Create a `scaleBand()` within another scaleBand()'s bandwidth (typically a x1 of an x0 scale, used for grouping) */
37
37
  export declare function groupScaleBand<Domain extends {
38
38
  toString(): string;
@@ -5,19 +5,19 @@ export const testData = [
5
5
  { year: 2019, basket: 1, fruit: 'apples', value: 3840 },
6
6
  { year: 2019, basket: 1, fruit: 'bananas', value: 1920 },
7
7
  { year: 2019, basket: 2, fruit: 'cherries', value: 960 },
8
- { year: 2019, basket: 2, fruit: 'dates', value: 400 },
8
+ { year: 2019, basket: 2, fruit: 'grapes', value: 400 },
9
9
  { year: 2018, basket: 1, fruit: 'apples', value: 1600 },
10
10
  { year: 2018, basket: 1, fruit: 'bananas', value: 1440 },
11
11
  { year: 2018, basket: 2, fruit: 'cherries', value: 960 },
12
- { year: 2018, basket: 2, fruit: 'dates', value: 400 },
12
+ { year: 2018, basket: 2, fruit: 'grapes', value: 400 },
13
13
  { year: 2017, basket: 1, fruit: 'apples', value: 820 },
14
14
  { year: 2017, basket: 1, fruit: 'bananas', value: 1000 },
15
15
  { year: 2017, basket: 2, fruit: 'cherries', value: 640 },
16
- { year: 2017, basket: 2, fruit: 'dates', value: 400 },
16
+ { year: 2017, basket: 2, fruit: 'grapes', value: 400 },
17
17
  { year: 2016, basket: 1, fruit: 'apples', value: 820 },
18
18
  { year: 2016, basket: 1, fruit: 'bananas', value: 560 },
19
19
  { year: 2016, basket: 2, fruit: 'cherries', value: 720 },
20
- { year: 2016, basket: 2, fruit: 'dates', value: 400 },
20
+ { year: 2016, basket: 2, fruit: 'grapes', value: 400 },
21
21
  ];
22
22
  const testDataByYear = group(testData, (d) => d.year);
23
23
  describe('groupStackData', () => {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "author": "Sean Lynch <techniq35@gmail.com>",
5
5
  "license": "MIT",
6
6
  "repository": "techniq/layerchart",
7
- "version": "0.52.1",
7
+ "version": "0.54.0",
8
8
  "devDependencies": {
9
9
  "@changesets/cli": "^2.27.7",
10
10
  "@mdi/js": "^7.4.47",