From 867bc0754e31f2281eded6a94ca5b24f87ec41c1 Mon Sep 17 00:00:00 2001
From: drake-stamos
Date: Fri, 20 Jan 2023 11:55:42 +0100
Subject: [PATCH 1/2] feat: doc/extension charts
---
docs/manuals/gui/extension.md | 83 ++---
docs/manuals/gui/extension_charts.md | 341 ++++++++++++++++++
docs/manuals/gui/images/bar-chart-d.png | Bin 0 -> 123706 bytes
docs/manuals/gui/images/bar-chart-l.png | Bin 0 -> 120491 bytes
docs/manuals/gui/images/box-plot-d.png | Bin 0 -> 109066 bytes
docs/manuals/gui/images/box-plot-l.png | Bin 0 -> 109158 bytes
docs/manuals/gui/images/bubble-chart-d.png | Bin 0 -> 146609 bytes
docs/manuals/gui/images/bubble-chart-l.png | Bin 0 -> 135120 bytes
docs/manuals/gui/images/gantt-chart-d.png | Bin 0 -> 61112 bytes
docs/manuals/gui/images/gantt-chart-l.png | Bin 0 -> 61236 bytes
docs/manuals/gui/images/histogram-chart-d.png | Bin 0 -> 119309 bytes
docs/manuals/gui/images/histogram-chart-l.png | Bin 0 -> 111343 bytes
docs/manuals/gui/images/line-chart-d.png | Bin 0 -> 174852 bytes
docs/manuals/gui/images/line-chart-l.png | Bin 0 -> 176289 bytes
docs/manuals/gui/images/pie-chart-d.png | Bin 0 -> 85535 bytes
docs/manuals/gui/images/pie-chart-l.png | Bin 0 -> 86948 bytes
16 files changed, 383 insertions(+), 41 deletions(-)
create mode 100644 docs/manuals/gui/extension_charts.md
create mode 100644 docs/manuals/gui/images/bar-chart-d.png
create mode 100644 docs/manuals/gui/images/bar-chart-l.png
create mode 100644 docs/manuals/gui/images/box-plot-d.png
create mode 100644 docs/manuals/gui/images/box-plot-l.png
create mode 100644 docs/manuals/gui/images/bubble-chart-d.png
create mode 100644 docs/manuals/gui/images/bubble-chart-l.png
create mode 100644 docs/manuals/gui/images/gantt-chart-d.png
create mode 100644 docs/manuals/gui/images/gantt-chart-l.png
create mode 100644 docs/manuals/gui/images/histogram-chart-d.png
create mode 100644 docs/manuals/gui/images/histogram-chart-l.png
create mode 100644 docs/manuals/gui/images/line-chart-d.png
create mode 100644 docs/manuals/gui/images/line-chart-l.png
create mode 100644 docs/manuals/gui/images/pie-chart-d.png
create mode 100644 docs/manuals/gui/images/pie-chart-l.png
diff --git a/docs/manuals/gui/extension.md b/docs/manuals/gui/extension.md
index 55e6576f0..39eb070eb 100644
--- a/docs/manuals/gui/extension.md
+++ b/docs/manuals/gui/extension.md
@@ -9,30 +9,30 @@ cases or integrate third-party Web components. One can expand the functionality
offered by the base Taipy GUI package to create custom components that can be
effortlessly used in pages and shared with the community.
-Custom visual elements are grouped into *Element Libraries*, where each element is identified
+Custom visual elements are grouped into _Element Libraries_, where each element is identified
by its name. An element name must be unique in the context of its library.
Each library also as a name. To insert a custom visual element in a page, you will use
the full name of the element:
-- `.` in a Markdown page
-- `:` in an HTML page
+- `.` in a Markdown page
+- `:` in an HTML page
## Element Libraries and Custom Elements
-An Element Library holds the information necessary to refer to and instantiate custom visual elements. Element libraries can hold several visual element descriptors, and can be packaged
+An Element Library holds the information necessary to refer to and instantiate custom visual elements. Element libraries can hold several visual element descriptors, and can be packaged
into a standalone Python package that a Taipy GUI application can import or that can be
deployed.
Here are important things you need to know about element libraries:
-- An element library is a Python object that derives from the `ElementLibrary^` class.
-- Element libraries have a name (returned by `ElementLibrary.get_name()^`) that is
- used to refer to visual elements in page definitions.
-- Element libraries hold the set of the elements it holds, as returned by
- `ElementLibrary.get_elements()^`.
+- An element library is a Python object that derives from the `ElementLibrary^` class.
+- Element libraries have a name (returned by `ElementLibrary.get_name()^`) that is
+ used to refer to visual elements in page definitions.
+- Element libraries hold the set of the elements it holds, as returned by
+ `ElementLibrary.get_elements()^`.
You can create an element library by simply instantiating the `ElementLibrary^`, and override the methods that are required. The two mandatory methods to override are
-`(ElementLibrary.)get_name()^` and `(ElementLibrary.)get_elements()^`:
+`(ElementLibrary.)get_name()^` and `(ElementLibrary.)get_elements()^`:
```py
from taipy.gui.extension import ElementLibrary
@@ -55,7 +55,7 @@ Other methods can be overridden if necessary, which will be discussed later in t
As we have seen, custom visual element descriptors are associated with the name of
the element as it appears in pages, in the `(ElementLibrary.)get_elements()^` method.
-The [`Element` constructor](Element.__init__()^) needs a description of all the properties
+The [`Element` constructor]() needs a description of all the properties
that this element holds, as well as how this element is rendered.
```py
@@ -76,8 +76,8 @@ All elements must indicate what is its default property name. That is used in Ma
page as the first fragment of the `<|...|>` construct, or the value located in the
text part of an element tag in HTML pages.
-Of course *default_property_name* must be one of the keys of the properties dictionary
-provided to the [`Element` constructor](Element.__init__()^).
+Of course _default_property_name_ must be one of the keys of the properties dictionary
+provided to the [`Element` constructor]().
## Rendering Elements
@@ -85,33 +85,33 @@ The Taipy GUI Extension package provides two different ways to implement the ren
of the element and its interactions. Both approaches deliver HTML fragments that are
inserted in the page when it is requested.
-- Static elements.
- A static visual element is one that cannot interact with the underlying application.
- It can be used just like any other element in a page, but its properties are not
- bound to the application variable: if the variable value is modified, it does not
- modify the representation of the element on the page.
- Static elements are implemented by creating a string that holds the XHTML text (that is,
- HTML that respects the XML syntax, where all tags must be closed) that is inserted in
- the page displayed by the browser.
- Please go to the [Static Elements Example](extension_static_element.md) page for
- a complete description of how to implement your own static custom elements.
-
-- Dynamic elements.
- Dynamic elements provide the binding functionality of Taipy GUI: if a property value
- depends on an application variable (and if the property type is *dynamic*) then the
- page automatically updates when the variable value changes.
- In Taipy GUI, dynamic visual element are implemented using the
- [React](https://reactjs.org/) JavaScript library, and the
- [TypeScript](https://www.typescriptlang.org/) programming language (that builds on
- JavaScript).
+- Static elements.
+ A static visual element is one that cannot interact with the underlying application.
+ It can be used just like any other element in a page, but its properties are not
+ bound to the application variable: if the variable value is modified, it does not
+ modify the representation of the element on the page.
+ Static elements are implemented by creating a string that holds the XHTML text (that is,
+ HTML that respects the XML syntax, where all tags must be closed) that is inserted in
+ the page displayed by the browser.
+ Please go to the [Static Elements Example](extension_static_element.md) page for
+ a complete description of how to implement your own static custom elements.
+
+- Dynamic elements.
+ Dynamic elements provide the binding functionality of Taipy GUI: if a property value
+ depends on an application variable (and if the property type is _dynamic_) then the
+ page automatically updates when the variable value changes.
+ In Taipy GUI, dynamic visual element are implemented using the
+ [React](https://reactjs.org/) JavaScript library, and the
+ [TypeScript](https://www.typescriptlang.org/) programming language (that builds on
+ JavaScript).
## Prerequisites
In order to create and use custom visual elements, you need to install:
-- Taipy GUI 2.0 or higher (included in Taipy and Taipy Enterprise).
-- Python 3.8 or higher.
-- NodeJS (and NPM) if you plan to create dynamic custom visual elements.
+- Taipy GUI 2.0 or higher (included in Taipy and Taipy Enterprise).
+- Python 3.8 or higher.
+- NodeJS (and NPM) if you plan to create dynamic custom visual elements.
A basic knowledge of React (that we use with TypeScript) is welcome.
@@ -129,9 +129,10 @@ complete explanation of what part of the Extension API is used.
Each example addresses specific areas of the extension API. You should be able to
make you way from one example to the next.
-- [Custom static element](extension_static_element.md)
-- [Accessing assets](extension_assets.md)
-- [Custom dynamic element](extension_dynamic_element.md)
-- [Using List of Values](extension_list_of_values.md)
-- [Using tabular data](extension_data.md)
-- [Packaging an element library](extension_packaging.md)
+- [Custom static element](extension_static_element.md)
+- [Accessing assets](extension_assets.md)
+- [Custom dynamic element](extension_dynamic_element.md)
+- [Using List of Values](extension_list_of_values.md)
+- [Using tabular data](extension_data.md)
+- [Using Charts](extension_charts.md)
+- [Packaging an element library](extension_packaging.md)
diff --git a/docs/manuals/gui/extension_charts.md b/docs/manuals/gui/extension_charts.md
new file mode 100644
index 000000000..112090830
--- /dev/null
+++ b/docs/manuals/gui/extension_charts.md
@@ -0,0 +1,341 @@
+# Creating Charts
+
+In this section, we will create a custom visual element that displays a chart. Charts will be implemented using the [Plotly](https://plotly.com) library.
+
+## Installing Plotly packages
+
+Go to the `[your_extension_directory]/demo_lib/frontend` directory and install the following Plotly packages:
+
+```bash
+npm install --save-dev plotly.js
+npm install --save-dev react-plotly.js
+npm install --save-dev @types/react-plotly.js
+```
+
+Also don't forget to increase size limit and add the following in `webpack.config.js`:
+
+```javascript
+module.exports = {
+ ...
+ performance: {
+ hints: false,
+ maxAssetSize: 50000,
+ maxEntrypointSize: 50000,
+ },
+ plugins: [
+ ...
+ new webpack.optimize.LimitChunkCountPlugin({
+ maxChunks: 1,
+ }),
+ ],
+ ...
+}
+```
+
+## Defining the chart element properties
+
+```python
+class DemoLibrary(ElementLibrary):
+ elts = {
+ "chart": Element(
+ "data",
+ {
+ "data": ElementProperty(PropertyType.dict),
+ "layout": ElementProperty(PropertyType.dict),
+ "config": ElementProperty(PropertyType.dict),
+ },
+ react_component="DemoChart", # <--- This is the component's name that we will create.
+ ),
+ }
+
+ def get_name(self) -> str:
+ return "demo_library"
+
+ def get_elements(self) -> dict:
+ return DemoLibrary.elts
+
+ def get_scripts(self) -> list[str]:
+ # Only one JavaScript bundle for this library.
+ return ["demo_lib/frontend/dist/demo.js"]
+```
+
+- `data`: The data to display in the chart. This is a dictionary type that is passed to the `data` prop of the `Plot` component.
+
+- `layout`: The layout of the chart. This is a dictionary type that is passed to the `layout` prop of the `Plot` component.
+
+- `config`: The configuration of the chart. This is a dictionary type that is passed to the `config` prop of the `Plot` component.
+
+- `type`: defines overall default type of the chart
+
+## Creating the React component
+
+```tsx
+const Plot = lazy(() => import("react-plotly.js"));
+
+interface Props {
+ data: string | undefined;
+ defaultData: string;
+ layout: string | undefined;
+ type: PlotType | undefined;
+ config: string | undefined;
+}
+
+export default function DemoChart(props: Props) {
+ const plotlyMain = useMemo(() => {
+ const data: Data[] = JSON.parse(props?.data || props.defaultData).map((d: Data) => {
+ return {
+ ...d,
+ type: props?.type || d.type,
+ };
+ });
+ const layout = JSON.parse(props?.layout || "{}") as Partial;
+ const config = JSON.parse(props?.config || "{}") as Partial;
+
+ return { data, layout, config };
+ }, [props.data, props.layout, props.config]);
+
+ const { data, layout, config } = plotlyMain;
+
+ return (
+ Loading...
}>
+
+
+ );
+}
+```
+
+As you can see we are parsing incoming props before passing them to our `Plot` component. This is because `dict` types come as strings. We are also using `Suspense` in order to show a loading message while the component is being loaded. This is a good practice when using `lazy` components.
+
+## Chart Usage
+
+Now we can use our chart element in our application. Let's create different types of charts.
+
+### Line Chart
+
+```python
+trace1 = {"x": [1, 2, 3, 4], "y": [10, 15, 13, 17], "mode": "markers"}
+
+trace2 = {"x": [2, 3, 4, 5], "y": [16, 5, 11, 9], "mode": "lines"}
+
+trace3 = {"x": [1, 2, 3, 4], "y": [12, 9, 15, 12], "mode": "lines+markers"}
+
+layout = {"title": "Line and Scatter Plot"}
+
+data = [trace1, trace2, trace3]
+
+md = """
+# Line chart
+<|{data}|demo_library.chart|layout={layout}|>
+"""
+```
+
+- since we provided `data` as the default property we don't need specify the name of the property when using the element.
+
+![Line Chart Light](./images/line-chart-l.png)
+![Line Chart Dark](./images/line-chart-d.png)
+
+### Bar Chart
+
+```python
+trace1 = {
+ "x": ["giraffes", "orangutans", "monkeys"],
+ "y": [20, 14, 23],
+ "name": "SF Zoo",
+ "type": "bar",
+}
+
+
+trace2 = {
+ "x": ["giraffes", "orangutans", "monkeys"],
+ "y": [12, 18, 29],
+ "name": "LA Zoo",
+ "type": "bar",
+}
+
+
+data = [
+ trace1,
+ trace2,
+]
+
+layout = {
+ "barmode": "group",
+}
+
+md = """
+# Bar chart
+
+<|{data}|demo_library.chart|layout={layout}|>
+"""
+```
+
+![Bar Chart Light](./images/bar-chart-l.png)
+![Bar Chart Dark](./images/bar-chart-d.png)
+
+### Pie Chart
+
+```python
+data = [
+ {
+ "type": "pie",
+ "values": [2, 3, 4, 4],
+ "labels": ["Wages", "Operating expenses", "Cost of sales", "Insurance"],
+ "textinfo": "label+percent",
+ "textposition": "outside",
+ "automargin": True,
+ }
+]
+
+
+layout = {
+ "width": 500,
+ "height": 500,
+ "margin": {"t": 0, "b": 0, "l": 0, "r": 0},
+ "showlegend": False
+}
+
+md = """
+# Pie Chart
+
+<|{data}|demo_library.chart|layout={layout}|>
+"""
+```
+
+![Pie Chart Light](./images/pie-chart-l.png)
+![Pie Chart Dark](./images/pie-chart-d.png)
+
+### Bubble Chart
+
+```python
+trace1 = {
+ "x": [1, 2, 3, 4],
+ "y": [10, 11, 12, 13],
+ "mode": "markers",
+ "marker": {
+ "color": [
+ "rgb(93, 164, 214)",
+ "rgb(255, 144, 14)",
+ "rgb(44, 160, 101)",
+ "rgb(255, 65, 54)",
+ ],
+ "opacity": [1, 0.8, 0.6, 0.4],
+ "size": [40, 60, 80, 100],
+ },
+}
+
+
+data = [
+ trace1,
+]
+
+layout = {
+ "title": "Marker Size and Color",
+}
+
+md = """
+# Bubble chart
+
+<|{data}|demo_library.chart|layout={layout}|>
+"""
+```
+
+![Bubble Chart Light](./images/bubble-chart-l.png)
+![Bubble Chart Dark](./images/bubble-chart-d.png)
+
+## Histogram Chart
+
+```python
+trace1 = {
+ "x": [random.random() for i in range(500)],
+ "type": "histogram",
+}
+
+trace2 = {
+ "x": [random.random() for i in range(500)],
+ "type": "histogram",
+}
+
+
+data = [
+ trace1,
+ trace2,
+]
+
+layout = {
+ "barmode": "stack",
+}
+
+md = """
+# Histogram chart
+
+<|{data}|demo_library.chart|layout={layout}|>
+"""
+```
+
+![Histogram Chart Light](./images/histogram-chart-l.png)
+![Histogram Chart Dark](./images/histogram-chart-d.png)
+
+## Box Plots
+
+```python
+trace1 = {
+ "x": [random.random() for i in range(50)],
+ "type": "box",
+}
+
+trace2 = {
+ "x": [random.random() + 1 for i in range(50)],
+ "type": "box",
+}
+
+
+data = [
+ trace1,
+ trace2,
+]
+
+md = """
+# Box plot
+
+<|{data}|demo_library.chart|>
+"""
+```
+
+![Box Plot Light](./images/box-plot-l.png)
+![Box Plot Dark](./images/box-plot-d.png)
+
+## Gantt Chart
+
+```python
+ganttdata = [
+ {
+ "x": ["Task 1", "Task 2", "Task 3"],
+ "y": [1, 2, 3],
+ "type": "bar",
+ "name": "Tasks",
+ "marker": {"color": "rgb(55, 83, 109)"},
+ "orientation": "h",
+ }
+]
+
+ganttlayout = {
+ "xaxis": {
+ "ticktext": ["Task 1", "Task 2", "Task 3"],
+ "tickvals": [1, 2, 3],
+ "showgrid": True,
+ "zeroline": True,
+ },
+ "yaxis": {"title": "Duration (days)", "showgrid": True, "zeroline": True},
+}
+
+md = """
+# Gantt chart
+
+<|{ganttdata}|demo_library.chart|layout={ganttlayout}|>
+"""
+```
+
+![Gantt Chart Light](./images/gantt-chart-l.png)
+![Gantt Chart Dark](./images/gantt-chart-d.png)
+
+You can find more of these examples in the in [Plotly's Website](https://plotly.com/javascript/)
diff --git a/docs/manuals/gui/images/bar-chart-d.png b/docs/manuals/gui/images/bar-chart-d.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd5b788e729b5e19540511be0f3e9f4b42217afc
GIT binary patch
literal 123706
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