|
<script lang="ts"> |
|
import { Meta, Template, Story } from "@storybook/addon-svelte-csf"; |
|
import Table from "./shared/Table.svelte"; |
|
import { within } from "@testing-library/dom"; |
|
import { userEvent } from "@storybook/test"; |
|
import { get } from "svelte/store"; |
|
import { format } from "svelte-i18n"; |
|
</script> |
|
|
|
<Meta |
|
title="Components/DataFrame" |
|
component={Table} |
|
argTypes={{ |
|
editable: { |
|
control: [true, false], |
|
description: "Whether the DataFrame is editable", |
|
name: "interactive", |
|
value: true |
|
} |
|
}} |
|
/> |
|
|
|
<Template let:args> |
|
<Table {...args} i18n={get(format)} /> |
|
</Template> |
|
|
|
<Story |
|
name="Interactive dataframe" |
|
args={{ |
|
values: [ |
|
["Cat", 5], |
|
["Horse", 3], |
|
["Snake", 1] |
|
], |
|
headers: ["Animal", "Votes"], |
|
label: "Animals", |
|
col_count: [2, "dynamic"], |
|
row_count: [3, "dynamic"] |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Interactive dataframe with label" |
|
args={{ |
|
values: [ |
|
["Cat", 5], |
|
["Horse", 3], |
|
["Snake", 1] |
|
], |
|
headers: ["Animal", "Votes"], |
|
label: "Animals", |
|
show_label: true, |
|
col_count: [2, "dynamic"], |
|
row_count: [3, "dynamic"] |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Interactive dataframe no label" |
|
args={{ |
|
values: [ |
|
["Cat", 5], |
|
["Horse", 3], |
|
["Snake", 1] |
|
], |
|
headers: ["Animal", "Votes"], |
|
metadata: null, |
|
label: "Animals", |
|
show_label: false, |
|
col_count: [2, "dynamic"], |
|
row_count: [3, "dynamic"] |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Static dataframe" |
|
args={{ |
|
values: [ |
|
["Cat", 5], |
|
["Horse", 3], |
|
["Snake", 1] |
|
], |
|
headers: ["Animal", "Votes"], |
|
|
|
label: "Animals", |
|
col_count: [2, "dynamic"], |
|
row_count: [3, "dynamic"], |
|
editable: false |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Dataframe with different precisions" |
|
args={{ |
|
values: [ |
|
[1.24, 1.24, 1.24], |
|
[1.21, 1.21, 1.21] |
|
], |
|
headers: ["Precision=0", "Precision=1", "Precision=2"], |
|
display_value: [ |
|
["1", "1.2", "1.24"], |
|
["1", "1.2", "1.21"] |
|
], |
|
label: "Numbers", |
|
col_count: [3, "dynamic"], |
|
row_count: [2, "dynamic"], |
|
editable: false |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Dataframe with markdown and math" |
|
args={{ |
|
values: [ |
|
["Linear", "$y=x$", "Has a *maximum* of 1 root"], |
|
["Quadratic", "$y=x^2$", "Has a *maximum* of 2 roots"], |
|
["Cubic", "$y=x^3$", "Has a *maximum* of 3 roots"] |
|
], |
|
headers: ["Type", "Example", "Roots"], |
|
datatype: ["str", "markdown", "markdown"], |
|
latex_delimiters: [{ left: "$", right: "$", display: false }], |
|
label: "Math", |
|
col_count: [3, "dynamic"], |
|
row_count: [3, "dynamic"], |
|
editable: false |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Dataframe with different colors" |
|
args={{ |
|
values: [ |
|
[800, 100, 800], |
|
[200, 800, 700] |
|
], |
|
headers: ["Math", "Reading", "Writing"], |
|
|
|
styling: [ |
|
[ |
|
"background-color:teal; color: white", |
|
"1.2", |
|
"background-color:teal; color: white" |
|
], |
|
["1", "background-color:teal; color: white", "1.21"] |
|
], |
|
label: "Test scores", |
|
col_count: [3, "dynamic"], |
|
row_count: [2, "dynamic"], |
|
editable: false |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Dataframe with column widths" |
|
args={{ |
|
values: [ |
|
[800, 100, 800], |
|
[200, 800, 700] |
|
], |
|
headers: ["Narrow", "Wide", "Half"], |
|
label: "Test scores", |
|
col_count: [3, "dynamic"], |
|
row_count: [2, "dynamic"], |
|
column_widths: ["20%", "30%", "50%"], |
|
editable: false |
|
}} |
|
/> |
|
|
|
<Story |
|
name="Dataframe with dialog interactions" |
|
args={{ |
|
values: [ |
|
[800, 100, 400], |
|
[200, 800, 700] |
|
], |
|
col_count: [3, "dynamic"], |
|
row_count: [2, "dynamic"], |
|
headers: ["Math", "Reading", "Writing"], |
|
editable: true |
|
}} |
|
play={async ({ canvasElement }) => { |
|
const canvas = within(canvasElement); |
|
|
|
const cell = canvas.getByText("200"); |
|
userEvent.click(cell); |
|
const open_dialog_btn = canvas.getAllByText("⋮"); |
|
await userEvent.click(open_dialog_btn[0]); |
|
|
|
const add_row_btn = canvas.getByText("Add row above"); |
|
await userEvent.click(add_row_btn); |
|
}} |
|
/> |
|
|