@carbon/charts-react 0.58.1 → 0.59.0-beta.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 (162) hide show
  1. package/.babelrc +4 -0
  2. package/.prettierignore +1 -0
  3. package/.storybook/addons.js +2 -0
  4. package/.storybook/assets/logo.svg +1 -0
  5. package/.storybook/assets/share.png +0 -0
  6. package/.storybook/assets/welcome.png +0 -0
  7. package/.storybook/config.js +22 -0
  8. package/.storybook/main.js +24 -0
  9. package/.storybook/manager-head.html +42 -0
  10. package/.storybook/preview-head.html +10 -0
  11. package/build.sh +20 -0
  12. package/carbon.yml +275 -0
  13. package/carbon__charts-react-tests.tsx +83 -0
  14. package/demo/bundle/favicon.ico +0 -0
  15. package/demo/bundle/index.html +22 -0
  16. package/demo/bundle/logo.svg +1 -0
  17. package/demo/bundle/main.4a87b5852cddf04c8e9a.bundle.js +1 -0
  18. package/demo/bundle/runtime~main.6b70b35614cf83eab770.bundle.js +1 -0
  19. package/demo/bundle/sb_dll/storybook_ui-manifest.json +1 -0
  20. package/demo/bundle/sb_dll/storybook_ui_dll.LICENCE +113 -0
  21. package/demo/bundle/sb_dll/storybook_ui_dll.js +2 -0
  22. package/demo/bundle/share.png +0 -0
  23. package/demo/bundle/vendors~main.9ceec0efe2f3ef413ade.bundle.js +111 -0
  24. package/demo/bundle/welcome.png +0 -0
  25. package/dist/CHANGELOG.md +2150 -0
  26. package/dist/README.md +56 -0
  27. package/{alluvial-chart.d.ts → dist/alluvial-chart.d.ts} +0 -0
  28. package/{alluvial-chart.js → dist/alluvial-chart.js} +0 -0
  29. package/{area-chart-stacked.d.ts → dist/area-chart-stacked.d.ts} +0 -0
  30. package/{area-chart-stacked.js → dist/area-chart-stacked.js} +0 -0
  31. package/{area-chart.d.ts → dist/area-chart.d.ts} +0 -0
  32. package/{area-chart.js → dist/area-chart.js} +0 -0
  33. package/{bar-chart-grouped.d.ts → dist/bar-chart-grouped.d.ts} +0 -0
  34. package/{bar-chart-grouped.js → dist/bar-chart-grouped.js} +0 -0
  35. package/{bar-chart-simple.d.ts → dist/bar-chart-simple.d.ts} +0 -0
  36. package/{bar-chart-simple.js → dist/bar-chart-simple.js} +0 -0
  37. package/{bar-chart-stacked.d.ts → dist/bar-chart-stacked.d.ts} +0 -0
  38. package/{bar-chart-stacked.js → dist/bar-chart-stacked.js} +0 -0
  39. package/{base-chart.d.ts → dist/base-chart.d.ts} +0 -0
  40. package/{base-chart.js → dist/base-chart.js} +0 -0
  41. package/{boxplot-chart.d.ts → dist/boxplot-chart.d.ts} +0 -0
  42. package/{boxplot-chart.js → dist/boxplot-chart.js} +0 -0
  43. package/{bubble-chart.d.ts → dist/bubble-chart.d.ts} +0 -0
  44. package/{bubble-chart.js → dist/bubble-chart.js} +0 -0
  45. package/{bullet-chart.d.ts → dist/bullet-chart.d.ts} +0 -0
  46. package/{bullet-chart.js → dist/bullet-chart.js} +0 -0
  47. package/{bundle.js → dist/bundle.js} +0 -0
  48. package/{circle-pack-chart.d.ts → dist/circle-pack-chart.d.ts} +0 -0
  49. package/{circle-pack-chart.js → dist/circle-pack-chart.js} +0 -0
  50. package/{combo-chart.d.ts → dist/combo-chart.d.ts} +0 -0
  51. package/{combo-chart.js → dist/combo-chart.js} +0 -0
  52. package/{diagrams → dist/diagrams}/CardNode/CardNode.d.ts +0 -0
  53. package/{diagrams → dist/diagrams}/CardNode/CardNode.js +3 -4
  54. package/{diagrams → dist/diagrams}/CardNode/CardNodeColumn.d.ts +0 -0
  55. package/{diagrams → dist/diagrams}/CardNode/CardNodeColumn.js +3 -4
  56. package/{diagrams → dist/diagrams}/CardNode/CardNodeLabel.d.ts +0 -0
  57. package/{diagrams → dist/diagrams}/CardNode/CardNodeLabel.js +3 -4
  58. package/{diagrams → dist/diagrams}/CardNode/CardNodeSubtitle.d.ts +0 -0
  59. package/{diagrams → dist/diagrams}/CardNode/CardNodeSubtitle.js +3 -4
  60. package/{diagrams → dist/diagrams}/CardNode/CardNodeTitle.d.ts +0 -0
  61. package/{diagrams → dist/diagrams}/CardNode/CardNodeTitle.js +3 -4
  62. package/{diagrams → dist/diagrams}/CardNode/index.d.ts +0 -0
  63. package/{diagrams → dist/diagrams}/CardNode/index.js +0 -0
  64. package/{diagrams → dist/diagrams}/Edge/Edge.d.ts +0 -0
  65. package/{diagrams → dist/diagrams}/Edge/Edge.js +3 -4
  66. package/{diagrams → dist/diagrams}/Edge/index.d.ts +0 -0
  67. package/{diagrams → dist/diagrams}/Edge/index.js +0 -0
  68. package/{diagrams → dist/diagrams}/Marker/Marker.d.ts +0 -0
  69. package/{diagrams → dist/diagrams}/Marker/Marker.js +3 -4
  70. package/{diagrams → dist/diagrams}/Marker/index.d.ts +0 -0
  71. package/{diagrams → dist/diagrams}/Marker/index.js +0 -0
  72. package/{diagrams → dist/diagrams}/ShapeNode/ShapeNode.d.ts +0 -0
  73. package/{diagrams → dist/diagrams}/ShapeNode/ShapeNode.js +3 -4
  74. package/{diagrams → dist/diagrams}/ShapeNode/index.d.ts +0 -0
  75. package/{diagrams → dist/diagrams}/ShapeNode/index.js +0 -0
  76. package/dist/diagrams/configs.d.ts +1 -0
  77. package/dist/diagrams/configs.js +4 -0
  78. package/{donut-chart.d.ts → dist/donut-chart.d.ts} +0 -0
  79. package/{donut-chart.js → dist/donut-chart.js} +0 -0
  80. package/{gauge-chart.d.ts → dist/gauge-chart.d.ts} +0 -0
  81. package/{gauge-chart.js → dist/gauge-chart.js} +0 -0
  82. package/{heatmap-chart.d.ts → dist/heatmap-chart.d.ts} +0 -0
  83. package/{heatmap-chart.js → dist/heatmap-chart.js} +0 -0
  84. package/{histogram-chart.d.ts → dist/histogram-chart.d.ts} +0 -0
  85. package/{histogram-chart.js → dist/histogram-chart.js} +0 -0
  86. package/{index.d.ts → dist/index.d.ts} +0 -0
  87. package/{index.js → dist/index.js} +0 -0
  88. package/{line-chart.d.ts → dist/line-chart.d.ts} +0 -0
  89. package/{line-chart.js → dist/line-chart.js} +0 -0
  90. package/{lollipop-chart.d.ts → dist/lollipop-chart.d.ts} +0 -0
  91. package/{lollipop-chart.js → dist/lollipop-chart.js} +0 -0
  92. package/{meter-chart.d.ts → dist/meter-chart.d.ts} +0 -0
  93. package/{meter-chart.js → dist/meter-chart.js} +0 -0
  94. package/dist/package.json +107 -0
  95. package/{pie-chart.d.ts → dist/pie-chart.d.ts} +0 -0
  96. package/{pie-chart.js → dist/pie-chart.js} +0 -0
  97. package/{radar-chart.d.ts → dist/radar-chart.d.ts} +0 -0
  98. package/{radar-chart.js → dist/radar-chart.js} +0 -0
  99. package/{scatter-chart.d.ts → dist/scatter-chart.d.ts} +0 -0
  100. package/{scatter-chart.js → dist/scatter-chart.js} +0 -0
  101. package/{tree-chart.d.ts → dist/tree-chart.d.ts} +0 -0
  102. package/{tree-chart.js → dist/tree-chart.js} +0 -0
  103. package/{treemap-chart.d.ts → dist/treemap-chart.d.ts} +0 -0
  104. package/{treemap-chart.js → dist/treemap-chart.js} +0 -0
  105. package/{utils.d.ts → dist/utils.d.ts} +0 -0
  106. package/{utils.js → dist/utils.js} +0 -0
  107. package/{wordcloud-chart.d.ts → dist/wordcloud-chart.d.ts} +0 -0
  108. package/{wordcloud-chart.js → dist/wordcloud-chart.js} +0 -0
  109. package/helpers/commons.js +30 -0
  110. package/package.json +106 -106
  111. package/rollup.config.js +18 -0
  112. package/src/alluvial-chart.tsx +30 -0
  113. package/src/area-chart-stacked.tsx +33 -0
  114. package/src/area-chart.tsx +30 -0
  115. package/src/bar-chart-grouped.tsx +30 -0
  116. package/src/bar-chart-simple.tsx +30 -0
  117. package/src/bar-chart-stacked.tsx +30 -0
  118. package/src/base-chart.tsx +45 -0
  119. package/src/boxplot-chart.tsx +30 -0
  120. package/src/bubble-chart.tsx +30 -0
  121. package/src/bullet-chart.tsx +30 -0
  122. package/src/circle-pack-chart.tsx +30 -0
  123. package/src/combo-chart.tsx +30 -0
  124. package/src/diagrams/CardNode/CardNode.tsx +121 -0
  125. package/src/diagrams/CardNode/CardNodeColumn.tsx +38 -0
  126. package/src/diagrams/CardNode/CardNodeLabel.tsx +32 -0
  127. package/src/diagrams/CardNode/CardNodeSubtitle.tsx +32 -0
  128. package/src/diagrams/CardNode/CardNodeTitle.tsx +32 -0
  129. package/src/diagrams/CardNode/index.tsx +13 -0
  130. package/src/diagrams/Edge/Edge.tsx +137 -0
  131. package/src/diagrams/Edge/index.tsx +2 -0
  132. package/src/diagrams/Marker/Marker.tsx +121 -0
  133. package/src/diagrams/Marker/index.tsx +9 -0
  134. package/src/diagrams/ShapeNode/ShapeNode.tsx +153 -0
  135. package/src/diagrams/ShapeNode/index.tsx +2 -0
  136. package/src/diagrams/configs.ts +1 -0
  137. package/src/donut-chart.tsx +30 -0
  138. package/src/gauge-chart.tsx +30 -0
  139. package/src/heatmap-chart.tsx +30 -0
  140. package/src/histogram-chart.tsx +30 -0
  141. package/src/index.ts +51 -0
  142. package/src/line-chart.tsx +30 -0
  143. package/src/lollipop-chart.tsx +30 -0
  144. package/src/meter-chart.tsx +30 -0
  145. package/src/pie-chart.tsx +30 -0
  146. package/src/radar-chart.tsx +30 -0
  147. package/src/scatter-chart.tsx +30 -0
  148. package/src/tree-chart.tsx +30 -0
  149. package/src/treemap-chart.tsx +30 -0
  150. package/src/utils.ts +7 -0
  151. package/src/wordcloud-chart.tsx +30 -0
  152. package/stories/0_intro.stories.js +60 -0
  153. package/stories/1_gettingStarted.stories.js +74 -0
  154. package/stories/1_gettingStarted_content.js +121 -0
  155. package/stories/all.stories.js +110 -0
  156. package/stories/diagrams/0_Diagrams.stories.js +259 -0
  157. package/stories/diagrams/CardNode.stories.js +106 -0
  158. package/stories/diagrams/Edge.stories.js +94 -0
  159. package/stories/diagrams/Marker.stories.js +95 -0
  160. package/stories/diagrams/ShapeNode.stories.js +42 -0
  161. package/tsconfig.json +20 -0
  162. package/LICENSE.md +0 -201
@@ -0,0 +1,121 @@
1
+ import marked from 'marked';
2
+
3
+ export const reactGettingStartedTutorial = {
4
+ name: 'React',
5
+ type: 'getting-started',
6
+ content: marked(`
7
+ # Carbon Charts - React
8
+
9
+ The Carbon Charts library provides a collection of reusable charting components to
10
+ build websites and user interfaces.
11
+
12
+ Adopting the library enables developers to use
13
+ consistent markup, styles, and behavior in prototype and production work.
14
+
15
+  
16
+ ## Install
17
+
18
+ **with yarn:**
19
+ \`\`\`bash
20
+ yarn add @carbon/charts-react d3
21
+ \`\`\`
22
+
23
+ **with npm:**
24
+ \`\`\`bash
25
+ npm install --save @carbon/charts-react d3
26
+ \`\`\`
27
+
28
+ **Note:** you'd also need to install \`carbon-components\` if you're not using a bundled version of the library.
29
+
30
+  
31
+ ## Getting started
32
+
33
+ To start using the \`StackedBarChart\` component, try the example below:
34
+  
35
+
36
+
37
+ \`\`\`ts
38
+ import React from "react";
39
+
40
+ import { StackedBarChart } from "@carbon/charts-react";
41
+ import "@carbon/charts/styles.css";
42
+ // Or
43
+ // import '@carbon/charts/styles/styles.scss';
44
+
45
+ function App() {
46
+ const [stackedBarData, setStackedBarData] = React.useState([
47
+ // refer to tabular data format tutorial
48
+ ]);
49
+
50
+ const [stackedBarOptions, setStackedBarOptions] = React.useState([
51
+ // refer to chart specific options
52
+ ]);
53
+
54
+ return (
55
+ <div className="App">
56
+ <StackedBarChart
57
+ data={stackedBarData}
58
+ options={stackedBarOptions}
59
+ />
60
+ </div>
61
+ );
62
+ }
63
+
64
+ // ...
65
+ \`\`\`
66
+
67
+ &nbsp;
68
+ ## Data
69
+ Data follows almost the same model in all charts.
70
+ See tutorial on tabular data format for more information on chart data.
71
+
72
+ &nbsp;
73
+ ## Options
74
+
75
+ You can see the options for all charts
76
+ [here](https://charts.carbondesignsystem.com/documentation/modules/_interfaces_charts_.html).
77
+
78
+ &nbsp;
79
+ ## Demos and Examples
80
+ + **[Storybook - Story Sources](https://github.com/carbon-design-system/carbon-charts/tree/master/packages/react/stories)**
81
+ + **[Storybook - Data & options used](https://github.com/carbon-design-system/carbon-charts/tree/master/packages/core/demo/data)**
82
+
83
+ &nbsp;
84
+ ## Guidance
85
+
86
+ Please refer to the
87
+ [Carbon Design Systems guidance](https://www.carbondesignsystem.com/data-visualization/chart-types)
88
+ on using the different charts available in this library.
89
+
90
+ &nbsp;
91
+ ## Development
92
+ Please refer to the
93
+ [Contribution Guidelines](https://github.com/carbon-design-system/carbon-charts/blob/master/CONTRIBUTING.md)
94
+ before starting any work.
95
+
96
+ #### Using the server
97
+ We recommend the use of [React Storybook](https://github.com/storybookjs/storybook/tree/next/app/react)
98
+ for developing components.
99
+
100
+ **Start the server:**
101
+ \`\`\`bash
102
+ cd packages/react
103
+ yarn run storybook
104
+ \`\`\`
105
+
106
+ Open browser to \`http://localhost:9006/\`.
107
+
108
+ &nbsp;
109
+ ## List of available components
110
+ View available components [here](https://github.com/carbon-design-system/carbon-charts#component-status)
111
+
112
+ &nbsp;
113
+ ## Troubleshoot
114
+
115
+ If you experience any issues while getting set up with Carbon Charts, please head over to
116
+ the [GitHub repo](https://github.com/carbon-design-system/carbon-charts)
117
+ for more guidelines and support.
118
+ Please [create an issue](https://github.com/carbon-design-system/carbon-charts/issues)
119
+ if your issue does not already exist.
120
+ `),
121
+ };
@@ -0,0 +1,110 @@
1
+ import React from 'react';
2
+ import { storiesOf } from '@storybook/react';
3
+ import { withKnobs, object } from '@storybook/addon-knobs';
4
+
5
+ import * as ChartComponents from '../dist/index';
6
+ import * as storyUtils from '@carbon/charts/demo/utils';
7
+
8
+ import { storybookDemoGroups } from '@carbon/charts/demo/data';
9
+ import * as Configuration from '@carbon/charts/configuration';
10
+ const colorPairingOptions = Configuration.color.pairingOptions;
11
+
12
+ // Loop through all demo groups
13
+ storybookDemoGroups.forEach((demoGroup) => {
14
+ // Create story group for each demo group
15
+ const groupStories = storiesOf(
16
+ `${demoGroup.storyGroupTitle}|${demoGroup.title}`,
17
+ module
18
+ ).addDecorator(withKnobs({ escapeHTML: false }));
19
+
20
+ // Loop through the demos for the group
21
+ demoGroup.demos.forEach((demo) => {
22
+ if (demo.isHighScale) {
23
+ return;
24
+ }
25
+ const DemoComponent = ChartComponents[demo.chartType.vanilla];
26
+ groupStories.add(demo.title, () => {
27
+ /* Storybook seems to be skipping re-render when chartRef starts
28
+ * populating, adding this as a quick hack */
29
+ const [update, setUpdate] = React.useState(false);
30
+
31
+ const demoRef = React.useRef(null);
32
+ const chartRef = React.useRef(null);
33
+
34
+ if (demoRef.current && chartRef.current) {
35
+ const container = demoRef.current;
36
+ const chart = chartRef.current.chart;
37
+
38
+ storyUtils.addControls(container, demoGroup, chart, {
39
+ colorPairingOptions,
40
+ });
41
+
42
+ storyUtils.addOtherVersions(container, demoGroup, demo, {
43
+ currentVersion: 'react',
44
+ });
45
+ }
46
+
47
+ React.useEffect(() => {
48
+ setUpdate(!update);
49
+ }, [demoRef, chartRef]);
50
+
51
+ return (
52
+ <div className="container theme--g100" ref={demoRef}>
53
+ <div className="v10-banner">
54
+ This version relies on <b>Carbon v11</b>. If you're
55
+ using Carbon v10,{' '}
56
+ <a
57
+ href="https://carbon-charts-0x.netlify.app"
58
+ target="_blank"
59
+ rel="noreferrer">
60
+ see the legacy demo site
61
+ </a>
62
+ </div>
63
+
64
+ <h3>
65
+ <b>Component:</b>
66
+ <span className="cds--tag cds--tag--green component-name">{`<${demo.chartType.vanilla} />`}</span>
67
+ </h3>
68
+
69
+ <p className="props">
70
+ <b>Props:</b>{' '}
71
+ <a href="/?path=/story/docs-tutorials--tabular-data-format">
72
+ data
73
+ </a>
74
+ ,{' '}
75
+ <a
76
+ href="https://carbon-design-system.github.io/carbon-charts/documentation/modules/_interfaces_charts_.html"
77
+ target="_blank">
78
+ options
79
+ </a>
80
+ </p>
81
+
82
+ <div id="charting-controls"></div>
83
+
84
+ <div className="marginTop-30" id="chart-demo">
85
+ <DemoComponent
86
+ data={object('Data', demo.data)}
87
+ options={object('Options', demo.options)}
88
+ ref={chartRef}
89
+ />
90
+ </div>
91
+
92
+ <h3 className="marginTop-30">Code sample</h3>
93
+ <a href={demo.codesandbox.react} target="_blank">
94
+ <img
95
+ src="https://codesandbox.io/static/img/play-codesandbox.svg"
96
+ className="marginTop"
97
+ alt="Edit on Codesandbox"
98
+ />
99
+ </a>
100
+
101
+ <h3 class="marginTop-45">Other versions</h3>
102
+ <p style={{ opacity: 0.75 }}>
103
+ (currently on <strong>React</strong>)
104
+ </p>
105
+ <div id="other-versions"></div>
106
+ </div>
107
+ );
108
+ });
109
+ });
110
+ });
@@ -0,0 +1,259 @@
1
+ import React from 'react';
2
+ import { storiesOf } from '@storybook/react';
3
+
4
+ import { User20, Wikis20, Debug20 } from '@carbon/icons-react';
5
+ import { buildElbowPathString } from '@carbon/charts/components/diagrams/buildPaths';
6
+
7
+ import CardNode, {
8
+ CardNodeColumn,
9
+ CardNodeTitle,
10
+ CardNodeSubtitle,
11
+ } from '../../dist/diagrams/CardNode';
12
+ import Edge from '../../dist/diagrams/Edge';
13
+ import ShapeNode from '../../dist/diagrams/ShapeNode';
14
+ import { ArrowRightMarker } from '../../dist/diagrams/Marker';
15
+
16
+ const nodeHeight = 64;
17
+ const nodeWidth = 200;
18
+ const ShapeNodeSize = 64;
19
+
20
+ const stories = storiesOf('Diagrams/', module);
21
+ stories.addDecorator((story) => (
22
+ <div className="container theme--white">{story()}</div>
23
+ ));
24
+
25
+ stories.add('Start here', () => {
26
+ const paragraphStyle = {
27
+ style: {
28
+ maxWidth: 600,
29
+ fontSize: '1rem',
30
+ fontWeight: 400,
31
+ lineHeight: 1.5,
32
+ letterSpacing: 0,
33
+ },
34
+ };
35
+
36
+ const h3Style = {
37
+ style: {
38
+ paddingTop: '1rem',
39
+ },
40
+ };
41
+
42
+ const h2Style = {
43
+ style: {
44
+ paddingTop: '2rem',
45
+ },
46
+ };
47
+
48
+ return (
49
+ <div>
50
+ <h1>Diagrams</h1>
51
+
52
+ <p {...paragraphStyle}>
53
+ React components for building diagram experiences, using the
54
+ Carbon Design System.
55
+ </p>
56
+
57
+ <p {...paragraphStyle}>
58
+ <b>
59
+ Note that Carbon Charts does not provide layouts for
60
+ diagrams. You can utilize these components alongside
61
+ graphing libraries, or by composing your own layouts (see
62
+ section 3).
63
+ </b>
64
+ </p>
65
+
66
+ <h2 {...h2Style}>Examples</h2>
67
+
68
+ <h3 {...h3Style}>1. Simple static layout</h3>
69
+
70
+ <p {...paragraphStyle}>
71
+ A simple composed diagram, using statically defined x and y
72
+ coordinates.{' '}
73
+ <a href="https://github.com/carbon-design-system/carbon-charts/tree/master/packages/react/stories/diagrams/0_Diagrams.stories.js">
74
+ View source
75
+ </a>
76
+ </p>
77
+
78
+ <SimpleStatic />
79
+
80
+ <h3 {...h3Style}>2. Programmatic static layout</h3>
81
+
82
+ <p {...paragraphStyle}>
83
+ A composed diagram, rendered using arrays of statically defined
84
+ x and y coordinates.{' '}
85
+ <a href="https://github.com/carbon-design-system/carbon-charts/tree/master/packages/react/stories/diagrams/0_Diagrams.stories.js">
86
+ View source
87
+ </a>
88
+ </p>
89
+
90
+ <ProgrammaticStatic />
91
+
92
+ <h3 {...h3Style}>3. Layouts using external dependencies</h3>
93
+
94
+ <p>
95
+ Here's an example using <b>elkjs</b> in react
96
+ </p>
97
+
98
+ <iframe
99
+ src="https://codesandbox.io/embed/carbon-charts-react-elkjs-diagram-b9xyp?fontsize=14&hidenavigation=1&theme=dark&view=preview"
100
+ style={{
101
+ width: '100%',
102
+ height: '500px',
103
+ marginTop: '2em',
104
+ border: 0,
105
+ borderRadius: '4px',
106
+ overflow: 'hidden',
107
+ }}
108
+ title="carbon-charts-react-elkjs-diagram"
109
+ allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking"
110
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"></iframe>
111
+ </div>
112
+ );
113
+ });
114
+
115
+ const DesktopOnlyMessage = () => (
116
+ <div className="cp-message">This is a desktop-only example</div>
117
+ );
118
+
119
+ const SimpleStatic = () => (
120
+ <div className="demo-desktop-only">
121
+ <DesktopOnlyMessage />
122
+
123
+ <svg height="124" width="600" style={{ marginTop: '1em' }}>
124
+ <defs>
125
+ <ArrowRightMarker id={'marker'} />
126
+ </defs>
127
+
128
+ <Edge
129
+ source={{ x: 0, y: 48 }}
130
+ target={{ x: 396, y: 48 }}
131
+ markerEnd={'marker'}
132
+ variant={'dash-sm'}
133
+ />
134
+
135
+ <foreignObject
136
+ style={{ overflow: 'visible' }}
137
+ transform={`translate(0, 16)`}
138
+ height={nodeHeight}
139
+ width={nodeWidth}>
140
+ <CardNode onClick={() => {}}>
141
+ <CardNodeColumn>
142
+ <User20 />
143
+ </CardNodeColumn>
144
+ <CardNodeColumn>
145
+ <CardNodeTitle>Title</CardNodeTitle>
146
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
147
+ </CardNodeColumn>
148
+ </CardNode>
149
+ </foreignObject>
150
+
151
+ <foreignObject
152
+ style={{ overflow: 'visible' }}
153
+ transform={`translate(400, 16)`}>
154
+ <ShapeNode
155
+ title={'Title'}
156
+ size={ShapeNodeSize}
157
+ onClick={() => {}}
158
+ renderIcon={<Wikis20 />}
159
+ />
160
+ </foreignObject>
161
+ </svg>
162
+ </div>
163
+ );
164
+
165
+ const ProgrammaticStatic = () => {
166
+ const nodeData = [
167
+ { id: 'a', x: 0, y: 16, icon: <User20 />, nodeWidth, nodeHeight },
168
+ { id: 'b', x: 250, y: 16, icon: <Wikis20 />, nodeWidth, nodeHeight },
169
+ {
170
+ id: 'c',
171
+ x: 600,
172
+ y: 200,
173
+ icon: <Debug20 />,
174
+ ShapeNode: true,
175
+ nodeWidth: ShapeNodeSize,
176
+ nodeHeight: ShapeNodeSize,
177
+ },
178
+ { id: 'd', x: 0, y: 150, icon: <Wikis20 />, nodeWidth, nodeHeight },
179
+ ];
180
+
181
+ const edgeData = [
182
+ { source: 'a', target: 'b', variant: 'dash-md' },
183
+ {
184
+ source: 'c',
185
+ target: 'b',
186
+ path: (source, target) => buildElbowPathString(source, target),
187
+ },
188
+ {
189
+ source: 'd',
190
+ target: 'c',
191
+ path: (source, target) => buildElbowPathString(source, target),
192
+ variant: 'tunnel',
193
+ },
194
+ ];
195
+
196
+ const edgeMapped = edgeData.map((link) => {
197
+ const sourceNode = nodeData.find((node) => node.id === link.source);
198
+ const targetNode = nodeData.find((node) => node.id === link.target);
199
+
200
+ return {
201
+ ...link,
202
+ source: {
203
+ x: sourceNode.x + sourceNode.nodeWidth / 2,
204
+ y: sourceNode.y + sourceNode.nodeHeight / 2,
205
+ },
206
+ target: {
207
+ x: targetNode.x + targetNode.nodeWidth / 2,
208
+ y: targetNode.y + targetNode.nodeHeight / 2,
209
+ },
210
+ };
211
+ });
212
+
213
+ const nodes = nodeData.map((node, i) => (
214
+ <foreignObject
215
+ style={{ overflow: 'visible' }}
216
+ key={`node_${i}`}
217
+ transform={`translate(${node.x}, ${node.y})`}
218
+ height={node.nodeHeight}
219
+ width={node.nodeWidth}>
220
+ {node.ShapeNode ? (
221
+ <ShapeNode
222
+ onClick={() => {}}
223
+ title={'Title'}
224
+ size={ShapeNodeSize}
225
+ description={'Description'}
226
+ renderIcon={node.icon}
227
+ />
228
+ ) : (
229
+ <CardNode onClick={() => {}}>
230
+ <CardNodeColumn>{node.icon}</CardNodeColumn>
231
+ <CardNodeColumn>
232
+ <CardNodeTitle>Title</CardNodeTitle>
233
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
234
+ </CardNodeColumn>
235
+ </CardNode>
236
+ )}
237
+ </foreignObject>
238
+ ));
239
+ const edges = edgeMapped.map((edge, i) => (
240
+ <Edge
241
+ key={`link_${i}`}
242
+ source={edge.source}
243
+ target={edge.target}
244
+ path={edge.path && edge.path(edge.source, edge.target)}
245
+ variant={edge.variant}
246
+ />
247
+ ));
248
+
249
+ return (
250
+ <div className="demo-desktop-only">
251
+ <DesktopOnlyMessage />
252
+
253
+ <svg height="300" width="800" style={{ marginTop: '1.5em' }}>
254
+ {edges}
255
+ {nodes}
256
+ </svg>
257
+ </div>
258
+ );
259
+ };
@@ -0,0 +1,106 @@
1
+ import React from 'react';
2
+ import { storiesOf } from '@storybook/react';
3
+
4
+ import CardNode, {
5
+ CardNodeColumn,
6
+ CardNodeSubtitle,
7
+ CardNodeLabel,
8
+ CardNodeTitle,
9
+ } from '../../dist/diagrams/CardNode';
10
+
11
+ import { User20, ChevronDown20 } from '@carbon/icons-react';
12
+
13
+ const stories = storiesOf('Diagrams|Nodes/Card', module);
14
+ stories.addDecorator((story) => (
15
+ <div className="container theme--white" style={{ maxWidth: 400 }}>
16
+ {story()}
17
+ </div>
18
+ ));
19
+
20
+ stories.add('Default', () => (
21
+ <CardNode>
22
+ <CardNodeColumn>
23
+ <CardNodeTitle>Title</CardNodeTitle>
24
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
25
+ </CardNodeColumn>
26
+ </CardNode>
27
+ ));
28
+
29
+ stories.add('Stacked', () => (
30
+ <CardNode stacked>
31
+ <CardNodeColumn>
32
+ <CardNodeTitle>Title</CardNodeTitle>
33
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
34
+ </CardNodeColumn>
35
+ </CardNode>
36
+ ));
37
+
38
+ stories.add('Color', () => (
39
+ <CardNode color={'#8a3ffc'}>
40
+ <CardNodeColumn>
41
+ <CardNodeTitle>Title</CardNodeTitle>
42
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
43
+ </CardNodeColumn>
44
+ </CardNode>
45
+ ));
46
+
47
+ stories.add('With icon', () => (
48
+ <CardNode>
49
+ <CardNodeColumn>
50
+ <User20 />
51
+ </CardNodeColumn>
52
+ <CardNodeColumn>
53
+ <CardNodeTitle>Title</CardNodeTitle>
54
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
55
+ </CardNodeColumn>
56
+ </CardNode>
57
+ ));
58
+
59
+ stories.add('As button', () => (
60
+ <CardNode onClick={() => {}}>
61
+ <CardNodeColumn>
62
+ <User20 />
63
+ </CardNodeColumn>
64
+ <CardNodeColumn>
65
+ <CardNodeTitle>Title</CardNodeTitle>
66
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
67
+ </CardNodeColumn>
68
+ </CardNode>
69
+ ));
70
+
71
+ stories.add('As link', () => (
72
+ <CardNode href="#">
73
+ <CardNodeColumn>
74
+ <User20 />
75
+ </CardNodeColumn>
76
+ <CardNodeColumn>
77
+ <CardNodeTitle>Title</CardNodeTitle>
78
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
79
+ </CardNodeColumn>
80
+ </CardNode>
81
+ ));
82
+
83
+ stories.add('With label', () => (
84
+ <CardNode>
85
+ <CardNodeColumn>
86
+ <CardNodeTitle>Title</CardNodeTitle>
87
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
88
+ <CardNodeLabel>Label</CardNodeLabel>
89
+ </CardNodeColumn>
90
+ </CardNode>
91
+ ));
92
+
93
+ stories.add('With third column', () => (
94
+ <CardNode>
95
+ <CardNodeColumn>
96
+ <User20 />
97
+ </CardNodeColumn>
98
+ <CardNodeColumn>
99
+ <CardNodeTitle>Title</CardNodeTitle>
100
+ <CardNodeSubtitle>Description</CardNodeSubtitle>
101
+ </CardNodeColumn>
102
+ <CardNodeColumn farsideColumn>
103
+ <ChevronDown20 />
104
+ </CardNodeColumn>
105
+ </CardNode>
106
+ ));
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import { storiesOf } from '@storybook/react';
3
+
4
+ import Edge from '../../dist/diagrams/Edge';
5
+ import {
6
+ buildBezierPathString,
7
+ buildElbowPathString,
8
+ } from '@carbon/charts/components/diagrams/buildPaths';
9
+
10
+ const linkSource = { x: 0, y: 0 };
11
+ const linkTarget = { x: 400, y: 0 };
12
+ const linkTargetCurve = { x: 400, y: 200 };
13
+
14
+ const stories = storiesOf('Diagrams|Edges', module);
15
+ stories.addDecorator((story) => (
16
+ <div className="container theme--white">{story()}</div>
17
+ ));
18
+
19
+ stories.add('Default', () => (
20
+ <svg height="800" width="800">
21
+ <g transform="translate(16,16)">
22
+ <Edge source={linkSource} target={linkTarget} />
23
+ </g>
24
+ </svg>
25
+ ));
26
+
27
+ stories.add('Color', () => (
28
+ <svg height="800" width="800">
29
+ <g transform="translate(16,16)">
30
+ <Edge source={linkSource} target={linkTarget} color={'#FB4B53'} />
31
+ </g>
32
+ </svg>
33
+ ));
34
+
35
+ stories.add('Dashed', () => (
36
+ <svg height="800" width="800">
37
+ <g transform="translate(16,16)">
38
+ <Edge source={linkSource} target={linkTarget} variant={'dash-sm'} />
39
+ </g>
40
+
41
+ <g transform="translate(16,32)">
42
+ <Edge source={linkSource} target={linkTarget} variant={'dash-md'} />
43
+ </g>
44
+
45
+ <g transform="translate(16,48)">
46
+ <Edge source={linkSource} target={linkTarget} variant={'dash-lg'} />
47
+ </g>
48
+
49
+ <g transform="translate(16,64)">
50
+ <Edge source={linkSource} target={linkTarget} variant={'dash-xl'} />
51
+ </g>
52
+ </svg>
53
+ ));
54
+
55
+ stories.add('Double', () => (
56
+ <svg height="800" width="800">
57
+ <g transform="translate(16,16)">
58
+ <Edge source={linkSource} target={linkTarget} variant={'double'} />
59
+ </g>
60
+ </svg>
61
+ ));
62
+
63
+ stories.add('Tunnel', () => (
64
+ <svg height="800" width="800">
65
+ <g transform="translate(16,16)">
66
+ <Edge source={linkSource} target={linkTarget} variant={'tunnel'} />
67
+ </g>
68
+ </svg>
69
+ ));
70
+
71
+ stories.add('Elbow', () => (
72
+ <svg height="800" width="800">
73
+ <g transform="translate(16,16)">
74
+ <Edge path={buildElbowPathString(linkSource, linkTargetCurve)} />
75
+ </g>
76
+ </svg>
77
+ ));
78
+
79
+ stories.add('Bezier', () => (
80
+ <svg height="800" width="800">
81
+ <g transform="translate(16,16)">
82
+ <Edge
83
+ path={buildBezierPathString(
84
+ linkSource,
85
+ linkTargetCurve,
86
+ 150,
87
+ 280,
88
+ 150,
89
+ 30
90
+ )}
91
+ />
92
+ </g>
93
+ </svg>
94
+ ));