├── .circleci
└── config.yml
├── .editorconfig
├── .flake8
├── .github
├── CODEOWNERS
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── pull_request_template.md
└── workflows
│ ├── testing.yml
│ └── update-html.yml
├── .gitignore
├── .husky
├── .gitignore
└── pre-commit
├── .nvmrc
├── .pylintrc
├── @plotly
├── dash-component-plugins
│ ├── LICENSE
│ ├── babel.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ ├── History.js
│ │ ├── dynamicImport.js
│ │ └── index.js
│ └── webpack.config.js
├── dash-generator-test-component-nested
│ ├── MANIFEST.in
│ ├── README.md
│ ├── babel.config.js
│ ├── base
│ │ └── __init__.py
│ ├── package-lock.json
│ ├── package.json
│ ├── setup.py
│ ├── src
│ │ ├── components
│ │ │ └── MyNestedComponent.js
│ │ └── index.js
│ └── webpack.config.js
├── dash-generator-test-component-standard
│ ├── MANIFEST.in
│ ├── README.md
│ ├── babel.config.js
│ ├── base
│ │ ├── __init__.py
│ │ ├── godfather.ttf
│ │ └── style.css
│ ├── package-lock.json
│ ├── package.json
│ ├── setup.py
│ ├── src
│ │ ├── components
│ │ │ └── MyStandardComponent.js
│ │ └── index.js
│ └── webpack.config.js
├── dash-generator-test-component-typescript
│ ├── README.md
│ ├── _dash_prop_typing.py
│ ├── babel.config.js
│ ├── base
│ │ ├── __init__.py
│ │ └── py.typed
│ ├── generator.test.ts
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── setup.py
│ ├── src
│ │ ├── components
│ │ │ ├── EmptyComponent.tsx
│ │ │ ├── FCComponent.tsx
│ │ │ ├── MemoTypeScriptComponent.tsx
│ │ │ ├── MixedComponent.tsx
│ │ │ ├── RequiredChildrenComponent.tsx
│ │ │ ├── StandardComponent.react.js
│ │ │ ├── TypeScriptClassComponent.tsx
│ │ │ ├── TypeScriptComponent.tsx
│ │ │ └── WrappedHTML.tsx
│ │ ├── index.ts
│ │ └── props.ts
│ ├── tsconfig.json
│ └── webpack.config.js
├── dash-jupyterlab
│ ├── .prettierrc
│ ├── lib
│ │ ├── index.d.ts
│ │ └── index.js
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ ├── style
│ │ └── index.css
│ ├── tsconfig.json
│ └── yarn.lock
├── dash-test-components
│ ├── MANIFEST.in
│ ├── README.md
│ ├── babel.config.js
│ ├── base
│ │ └── __init__.py
│ ├── package-lock.json
│ ├── package.json
│ ├── setup.py
│ ├── src
│ │ ├── components
│ │ │ ├── AddPropsComponent.js
│ │ │ ├── ArrayOfExactOrShapeWithNodePropAssignNone.js
│ │ │ ├── AsyncComponent.js
│ │ │ ├── CollapseComponent.js
│ │ │ ├── ComponentAsProp.js
│ │ │ ├── DelayedEventComponent.js
│ │ │ ├── DrawCounter.js
│ │ │ ├── ExternalComponent.js
│ │ │ ├── FragmentComponent.js
│ │ │ ├── MyPersistedComponent.js
│ │ │ ├── MyPersistedComponentNested.js
│ │ │ ├── ReceivePropsComponent.js
│ │ │ ├── RenderType.js
│ │ │ ├── ShapeOrExactKeepOrderComponent.js
│ │ │ ├── StyledComponent.js
│ │ │ └── WidthComponent.js
│ │ ├── fragments
│ │ │ ├── AsyncComponent.js
│ │ │ └── AsyncComponentLoader.js
│ │ └── index.js
│ └── webpack.config.js
├── eslint-config-dash
│ ├── .gitignore
│ ├── README.md
│ ├── index.js
│ ├── package-lock.json
│ ├── package.json
│ └── typescript.js
├── prettier-config-dash
│ ├── .gitignore
│ ├── README.md
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
└── webpack-dash-dynamic-import
│ ├── LICENSE
│ ├── package.json
│ └── src
│ └── index.js
├── CHANGELOG.md
├── CITATION.cff
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MAKE_A_NEW_BACK_END.md
├── MANIFEST.in
├── README.md
├── components
├── dash-core-components
│ ├── .editorconfig
│ ├── .eslintignore
│ ├── .eslintrc
│ ├── .flake8
│ ├── .gitignore
│ ├── .lib.babelrc
│ ├── .prettierrc
│ ├── CHANGELOG.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── MANIFEST.in
│ ├── README.md
│ ├── __init__.py
│ ├── babel.config.js
│ ├── dash-info.yaml
│ ├── dash_core_components_base
│ │ ├── __init__.py
│ │ └── express.py
│ ├── dash_prop_typing.py
│ ├── images
│ │ └── upload-component.gif
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── packages
│ │ └── README.md
│ ├── pytest.ini
│ ├── renovate.json
│ ├── setup.py
│ ├── src
│ │ ├── components
│ │ │ ├── Checklist.react.js
│ │ │ ├── Clipboard.react.js
│ │ │ ├── ConfirmDialog.react.js
│ │ │ ├── ConfirmDialogProvider.react.js
│ │ │ ├── DatePickerRange.react.js
│ │ │ ├── DatePickerSingle.react.js
│ │ │ ├── Download.react.js
│ │ │ ├── Dropdown.react.js
│ │ │ ├── Geolocation.react.js
│ │ │ ├── Graph.react.js
│ │ │ ├── Input.react.js
│ │ │ ├── Interval.react.js
│ │ │ ├── Link.react.js
│ │ │ ├── Loading.react.js
│ │ │ ├── Location.react.js
│ │ │ ├── Markdown.react.js
│ │ │ ├── RadioItems.react.js
│ │ │ ├── RangeSlider.react.js
│ │ │ ├── Slider.react.js
│ │ │ ├── Store.react.js
│ │ │ ├── Tab.react.js
│ │ │ ├── Tabs.react.js
│ │ │ ├── Textarea.react.js
│ │ │ ├── Tooltip.react.js
│ │ │ ├── Upload.react.js
│ │ │ └── css
│ │ │ │ ├── Dropdown.css
│ │ │ │ ├── input.css
│ │ │ │ ├── react-dates@20.1.0-fix.css
│ │ │ │ ├── react-select@1.0.0-rc.3.min.css
│ │ │ │ ├── react-virtualized@9.9.0.css
│ │ │ │ └── sliders.css
│ │ ├── fragments
│ │ │ ├── DatePickerRange.react.js
│ │ │ ├── DatePickerSingle.react.js
│ │ │ ├── Dropdown.react.js
│ │ │ ├── Graph.privateprops.js
│ │ │ ├── Graph.react.js
│ │ │ ├── Loading
│ │ │ │ └── spinners
│ │ │ │ │ ├── CircleSpinner.jsx
│ │ │ │ │ ├── CubeSpinner.jsx
│ │ │ │ │ ├── DebugTitle.jsx
│ │ │ │ │ ├── DefaultSpinner.jsx
│ │ │ │ │ ├── DotSpinner.jsx
│ │ │ │ │ └── GraphSpinner.jsx
│ │ │ ├── Markdown.react.js
│ │ │ ├── Math.react.js
│ │ │ ├── RangeSlider.react.js
│ │ │ ├── Slider.react.js
│ │ │ └── Upload.react.js
│ │ ├── index.js
│ │ ├── third-party
│ │ │ └── highlight.js
│ │ └── utils
│ │ │ ├── DatePickerPersistence.js
│ │ │ ├── LazyLoader
│ │ │ ├── datePickerRange.js
│ │ │ ├── datePickerSingle.js
│ │ │ ├── dropdown.js
│ │ │ ├── graph.js
│ │ │ ├── hljs.js
│ │ │ ├── markdown.js
│ │ │ ├── mathjax.js
│ │ │ ├── plotly.js
│ │ │ ├── rangeSlider.js
│ │ │ ├── slider.js
│ │ │ └── upload.js
│ │ │ ├── LoadingElement.js
│ │ │ ├── MarkdownHighlighter.js
│ │ │ ├── ResizeDetector.js
│ │ │ ├── computeSliderMarkers.js
│ │ │ ├── computeSliderStyle.js
│ │ │ ├── convertToMoment.js
│ │ │ ├── formatSliderTooltip.js
│ │ │ ├── mathjax.js
│ │ │ └── optionTypes.js
│ ├── tests
│ │ ├── assets
│ │ │ ├── image.png
│ │ │ ├── input.css
│ │ │ └── tab.css
│ │ ├── conftest.py
│ │ ├── dash_core_components_page.py
│ │ └── integration
│ │ │ ├── calendar
│ │ │ ├── test_calendar_props.py
│ │ │ ├── test_date_picker_persistence.py
│ │ │ ├── test_date_picker_range.py
│ │ │ └── test_date_picker_single.py
│ │ │ ├── clipboard
│ │ │ └── test_clipboard.py
│ │ │ ├── confirmdialog
│ │ │ └── test_confirm.py
│ │ │ ├── download
│ │ │ ├── download-assets
│ │ │ │ └── chuck.jpg
│ │ │ ├── test_download.py
│ │ │ ├── test_download_dataframe.py
│ │ │ └── test_download_file.py
│ │ │ ├── dropdown
│ │ │ ├── test_clearable_false.py
│ │ │ ├── test_dropdown_radioitems_checklist_shorthands.py
│ │ │ ├── test_dynamic_options.py
│ │ │ ├── test_remove_option.py
│ │ │ ├── test_search_value.py
│ │ │ ├── test_styles.py
│ │ │ └── test_visibility.py
│ │ │ ├── geolocation
│ │ │ └── test_geolocation.py
│ │ │ ├── graph
│ │ │ ├── test_graph_basics.py
│ │ │ ├── test_graph_purge.py
│ │ │ ├── test_graph_responsive.py
│ │ │ └── test_graph_varia.py
│ │ │ ├── input
│ │ │ ├── conftest.py
│ │ │ ├── test_debounce.py
│ │ │ ├── test_input_and_state.py
│ │ │ ├── test_input_basics.py
│ │ │ └── test_number_input.py
│ │ │ ├── interval
│ │ │ └── test_interval.py
│ │ │ ├── link
│ │ │ ├── test_absolute_path.py
│ │ │ ├── test_link_children.py
│ │ │ ├── test_link_event.py
│ │ │ └── test_title_prop.py
│ │ │ ├── loading
│ │ │ └── test_loading_component.py
│ │ │ ├── location
│ │ │ └── test_location_callback.py
│ │ │ ├── markdown
│ │ │ └── test_markdown.py
│ │ │ ├── misc
│ │ │ ├── conftest.py
│ │ │ ├── test_bcdp_auto_id.py
│ │ │ ├── test_dcc_components_as_props.py
│ │ │ ├── test_inline.py
│ │ │ ├── test_markdown_highlight.py
│ │ │ ├── test_persistence.py
│ │ │ └── test_platter.py
│ │ │ ├── sliders
│ │ │ ├── assets
│ │ │ │ └── transform.js
│ │ │ ├── test_sliders.py
│ │ │ └── test_sliders_shorthands.py
│ │ │ ├── store
│ │ │ ├── conftest.py
│ │ │ ├── test_component_props.py
│ │ │ ├── test_data_lifecycle.py
│ │ │ └── test_store_data.py
│ │ │ ├── tab
│ │ │ ├── test_tabs.py
│ │ │ └── test_tabs_with_graphs.py
│ │ │ ├── test_title_props.py
│ │ │ ├── tooltip
│ │ │ └── test_tooltip.py
│ │ │ └── upload
│ │ │ ├── test_children_accept_any_component.py
│ │ │ ├── test_upload_different_file_types.py
│ │ │ └── upload-assets
│ │ │ ├── upft001.csv
│ │ │ ├── upft001.png
│ │ │ ├── upft001.svg
│ │ │ ├── upft001.xls
│ │ │ └── upft001.xlsx
│ ├── vignettes
│ │ ├── dash-core-components.Rmd
│ │ ├── dash-core-components.html
│ │ └── dash-core-components.html.asis
│ └── webpack.config.js
├── dash-html-components
│ ├── .builderrc
│ ├── .eslintignore
│ ├── .eslintrc
│ ├── .gitignore
│ ├── .pylintrc
│ ├── CHANGELOG.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── LICENSE.md
│ ├── MANIFEST.in
│ ├── README.md
│ ├── babel.config.js
│ ├── dash-info.yaml
│ ├── dash_html_components_base
│ │ └── __init__.py
│ ├── package-lock.json
│ ├── package.json
│ ├── scripts
│ │ ├── .eslintrc.json
│ │ ├── data
│ │ │ ├── attributes.json
│ │ │ └── elements.txt
│ │ ├── extract-all.sh
│ │ ├── extract-attributes.js
│ │ ├── extract-elements.js
│ │ ├── generate-all.sh
│ │ ├── generate-components.js
│ │ └── generate-index.js
│ ├── setup.py
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_dash_html_components.py
│ │ ├── test_div_tabIndex.py
│ │ ├── test_integration.py
│ │ └── utils.py
│ ├── vignettes
│ │ ├── dash-html-components.Rmd
│ │ ├── dash-html-components.html
│ │ └── dash-html-components.html.asis
│ └── webpack.config.js
└── dash-table
│ ├── .config
│ └── webpack
│ │ ├── base.js
│ │ └── base.preprocessing.js
│ ├── .eslintrc.js
│ ├── .flake8
│ ├── .gitignore
│ ├── .npmignore
│ ├── .prettierrc
│ ├── .pylintrc
│ ├── .storybook
│ ├── babel.config.js
│ └── main.js
│ ├── .test_durations
│ ├── @Types
│ └── modules.d.ts
│ ├── CHANGELOG.md
│ ├── CODE_OF_CONDUCT.md
│ ├── LICENSE
│ ├── MANIFEST.in
│ ├── README.md
│ ├── __init__.py
│ ├── app.json
│ ├── babel.config.js
│ ├── cspell.json
│ ├── dash-info.yaml
│ ├── dash_table_base
│ ├── Format.py
│ ├── FormatTemplate.py
│ └── __init__.py
│ ├── demo
│ ├── App.tsx
│ ├── AppMode.ts
│ ├── data.ts
│ ├── index.html
│ ├── index.js
│ └── style.less
│ ├── generator
│ └── cssPropertiesGenerator.js
│ ├── karma.conf.js
│ ├── package-lock.json
│ ├── package.json
│ ├── pytest.ini
│ ├── renovate.json
│ ├── setup.py
│ ├── src
│ ├── core
│ │ ├── Clipboard.ts
│ │ ├── Logger
│ │ │ ├── DebugLevel.ts
│ │ │ ├── LogLevel.ts
│ │ │ └── index.ts
│ │ ├── Stylesheet.ts
│ │ ├── browser
│ │ │ ├── DOM.ts
│ │ │ ├── isChrome.ts
│ │ │ └── scrollbarWidth.ts
│ │ ├── cache
│ │ │ ├── index.ts
│ │ │ ├── memoizer.ts
│ │ │ └── value.ts
│ │ ├── comparer.ts
│ │ ├── components
│ │ │ └── IsolatedInput
│ │ │ │ └── index.tsx
│ │ ├── debounce.ts
│ │ ├── environment
│ │ │ └── index.ts
│ │ ├── generic.ts
│ │ ├── math
│ │ │ ├── arrayZipMap.ts
│ │ │ ├── matrixZipMap.ts
│ │ │ └── random.ts
│ │ ├── memoizer.ts
│ │ ├── objPropsToCamel.ts
│ │ ├── sorting
│ │ │ ├── index.ts
│ │ │ ├── multi.ts
│ │ │ └── single.ts
│ │ ├── storage
│ │ │ └── Cookie.ts
│ │ ├── syntax-tree
│ │ │ ├── index.ts
│ │ │ ├── lexer.ts
│ │ │ ├── lexicon.ts
│ │ │ └── syntaxer.ts
│ │ └── type
│ │ │ └── index.ts
│ ├── dash-table
│ │ ├── LazyLoader.ts
│ │ ├── components
│ │ │ ├── Cell
│ │ │ │ ├── index.tsx
│ │ │ │ └── props.ts
│ │ │ ├── CellDropdown
│ │ │ │ └── index.tsx
│ │ │ ├── CellFactory.tsx
│ │ │ ├── CellInput
│ │ │ │ └── index.tsx
│ │ │ ├── CellLabel
│ │ │ │ └── index.tsx
│ │ │ ├── CellMarkdown
│ │ │ │ └── index.tsx
│ │ │ ├── ControlledTable
│ │ │ │ ├── fragments
│ │ │ │ │ └── TableTooltip.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── EdgeFactory.tsx
│ │ │ ├── Export
│ │ │ │ ├── index.tsx
│ │ │ │ └── utils.tsx
│ │ │ ├── Filter
│ │ │ │ ├── Advanced.tsx
│ │ │ │ ├── Column.tsx
│ │ │ │ └── FilterOptions.tsx
│ │ │ ├── FilterFactory.tsx
│ │ │ ├── HeaderFactory.tsx
│ │ │ ├── PageNavigation
│ │ │ │ ├── index.tsx
│ │ │ │ └── props.ts
│ │ │ ├── Table
│ │ │ │ ├── Dropdown.css
│ │ │ │ ├── Table.less
│ │ │ │ ├── controlledPropsHelper.ts
│ │ │ │ ├── derivedPropsHelper.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── props.ts
│ │ │ │ ├── shouldComponentUpdate.ts
│ │ │ │ └── style.ts
│ │ │ ├── Tooltip
│ │ │ │ └── index.tsx
│ │ │ ├── dropdownHelper.ts
│ │ │ └── tooltipHelper.ts
│ │ ├── conditional
│ │ │ └── index.ts
│ │ ├── dash
│ │ │ ├── DataTable.js
│ │ │ ├── Sanitizer.ts
│ │ │ ├── fragments
│ │ │ │ └── DataTable.js
│ │ │ └── validate.ts
│ │ ├── derived
│ │ │ ├── cell
│ │ │ │ ├── cellProps.ts
│ │ │ │ ├── contents.tsx
│ │ │ │ ├── dropdowns.ts
│ │ │ │ ├── eventHandlerProps.ts
│ │ │ │ ├── isActive.ts
│ │ │ │ ├── isSelected.ts
│ │ │ │ ├── operations.tsx
│ │ │ │ ├── resolveFlag.ts
│ │ │ │ ├── wrapperStyles.ts
│ │ │ │ └── wrappers.tsx
│ │ │ ├── data
│ │ │ │ ├── viewport.ts
│ │ │ │ ├── virtual.ts
│ │ │ │ └── virtualized.ts
│ │ │ ├── edges
│ │ │ │ ├── data.ts
│ │ │ │ ├── filter.ts
│ │ │ │ ├── header.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── operationOfData.ts
│ │ │ │ ├── operationOfFilters.ts
│ │ │ │ ├── operationOfHeaders.ts
│ │ │ │ └── type.ts
│ │ │ ├── filter
│ │ │ │ ├── map.ts
│ │ │ │ └── wrapperStyles.ts
│ │ │ ├── header
│ │ │ │ ├── columnFlag.ts
│ │ │ │ ├── content.tsx
│ │ │ │ ├── fixedHeaders.ts
│ │ │ │ ├── headerRows.ts
│ │ │ │ ├── indices.ts
│ │ │ │ ├── labels.ts
│ │ │ │ ├── labelsAndIndices.ts
│ │ │ │ ├── operations.tsx
│ │ │ │ ├── wrapperStyles.ts
│ │ │ │ └── wrappers.tsx
│ │ │ ├── paginator.ts
│ │ │ ├── selects
│ │ │ │ ├── columns.ts
│ │ │ │ └── rows.ts
│ │ │ ├── style
│ │ │ │ ├── IStyle.ts
│ │ │ │ ├── cssProperties.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── props.ts
│ │ │ │ └── py2jsCssProperties.ts
│ │ │ └── table
│ │ │ │ ├── data_loading.ts
│ │ │ │ ├── fragmentStyles.ts
│ │ │ │ ├── fragments.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── tooltip.ts
│ │ ├── handlers
│ │ │ └── cellEvents.ts
│ │ ├── index.ts
│ │ ├── style
│ │ │ └── reset.less
│ │ ├── syntax-tree
│ │ │ ├── MultiColumnsSyntaxTree.ts
│ │ │ ├── QuerySyntaxTree.ts
│ │ │ ├── SingleColumnSyntaxTree.ts
│ │ │ ├── index.ts
│ │ │ ├── lexeme
│ │ │ │ ├── block.ts
│ │ │ │ ├── expression.ts
│ │ │ │ ├── logical.ts
│ │ │ │ ├── relational.ts
│ │ │ │ └── unary.ts
│ │ │ └── lexicon
│ │ │ │ ├── column.ts
│ │ │ │ ├── columnMulti.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── query.ts
│ │ ├── tooltips
│ │ │ └── props.ts
│ │ ├── type
│ │ │ ├── any.ts
│ │ │ ├── date.ts
│ │ │ ├── formatter.ts
│ │ │ ├── null.ts
│ │ │ ├── number.ts
│ │ │ ├── reconcile.ts
│ │ │ └── text.ts
│ │ └── utils
│ │ │ ├── Markdown.ts
│ │ │ ├── TableClipboardHelper.ts
│ │ │ ├── actions.js
│ │ │ ├── applyClipboardToData.ts
│ │ │ ├── generate.ts
│ │ │ ├── navigation.ts
│ │ │ └── unicode.ts
│ └── third-party
│ │ └── highlight.js
│ ├── tests
│ ├── __init__.py
│ ├── assets
│ │ ├── 16zpallagi-25cols-100klines.csv
│ │ └── gapminder.csv
│ ├── js-unit
│ │ ├── clipboard_test.ts
│ │ ├── dash_table_queries_test.ts
│ │ ├── dateCoercion_test.ts
│ │ ├── dateValidation_test.ts
│ │ ├── derivedFragmentStyles_test.ts
│ │ ├── derivedSelectedRows_test.ts
│ │ ├── derivedViewport_test.ts
│ │ ├── edges_test.ts
│ │ ├── editColumnNames.ts
│ │ ├── exportUtils_tests.ts
│ │ ├── formatting_test.ts
│ │ ├── isEditable_test.ts
│ │ ├── lexeme_test.ts
│ │ ├── loadingState.ts
│ │ ├── multi_columns_syntactic_tree.ts
│ │ ├── numberCoercion_test.ts
│ │ ├── numberValidation_test.ts
│ │ ├── query_syntactic_tree_test.ts
│ │ ├── reconcile_test.ts
│ │ ├── single_column_syntactic_tree_test.ts
│ │ ├── sorting_test.ts
│ │ ├── table_clipboard_helper_test.ts
│ │ ├── table_update_test.ts
│ │ ├── textCoercion_test.ts
│ │ └── textValidation_test.ts
│ ├── selenium
│ │ ├── assets
│ │ │ ├── logo.png
│ │ │ └── solar.csv
│ │ ├── conftest.py
│ │ ├── test_basic_copy_paste.py
│ │ ├── test_basic_operations.py
│ │ ├── test_bootstrap.py
│ │ ├── test_column.py
│ │ ├── test_derived_props.py
│ │ ├── test_dropdown.py
│ │ ├── test_edit.py
│ │ ├── test_editable.py
│ │ ├── test_empty.py
│ │ ├── test_export.py
│ │ ├── test_filter.py
│ │ ├── test_filter2.py
│ │ ├── test_formatting.py
│ │ ├── test_header.py
│ │ ├── test_markdown.py
│ │ ├── test_markdown_assets
│ │ │ ├── logo.png
│ │ │ └── scripts.js
│ │ ├── test_markdown_copy_paste.py
│ │ ├── test_markdown_html.py
│ │ ├── test_markdown_link.py
│ │ ├── test_multiple_tables.py
│ │ ├── test_navigation.py
│ │ ├── test_navigation_keyboard.py
│ │ ├── test_navigation_keyboard_readonly.py
│ │ ├── test_navigation_mouse.py
│ │ ├── test_pagination.py
│ │ ├── test_readonly_cell.py
│ │ ├── test_scrolling.py
│ │ ├── test_scrolling2.py
│ │ ├── test_sizing.py
│ │ ├── test_sizing_a.py
│ │ ├── test_sizing_b.py
│ │ ├── test_sizing_c.py
│ │ ├── test_sizing_d.py
│ │ ├── test_sizing_e.py
│ │ ├── test_sizing_x.py
│ │ ├── test_sizing_y.py
│ │ ├── test_sizing_z.py
│ │ ├── test_sort.py
│ │ ├── test_tooltip.py
│ │ ├── test_typed.py
│ │ └── utils.py
│ ├── unit
│ │ └── format_test.py
│ └── visual
│ │ └── percy-storybook
│ │ ├── @Types
│ │ └── modules.d.ts
│ │ ├── Border.defaults.percy.tsx
│ │ ├── Border.style.percy.tsx
│ │ ├── Css.percy.tsx
│ │ ├── DashTable.percy.tsx
│ │ ├── Dropdown.percy.tsx
│ │ ├── Filters.percy.tsx
│ │ ├── Header.actions.percy.tsx
│ │ ├── Header.percy.tsx
│ │ ├── Hideable.percy.tsx
│ │ ├── MarkdownCells.percy.tsx
│ │ ├── Multiline.percy.tsx
│ │ ├── Sizing.percy.tsx
│ │ ├── Style.percy.tsx
│ │ ├── TriadValidation.percy.tsx
│ │ ├── Types.percy.tsx
│ │ ├── Virtualization.percy.tsx
│ │ ├── Width.all.percy.tsx
│ │ ├── Width.empty.percy.tsx
│ │ ├── fixtures.ts
│ │ └── tsconfig.json
│ ├── tsconfig.base.json
│ ├── tsconfig.json
│ ├── tsconfig.lint.json
│ ├── webpack.config.js
│ ├── webpack.dev.config.js
│ ├── webpack.serve.config.js
│ └── webpack.test.config.js
├── dash
├── __init__.py
├── _callback.py
├── _callback_context.py
├── _configs.py
├── _dash_renderer.py
├── _get_app.py
├── _get_paths.py
├── _grouping.py
├── _hooks.py
├── _jupyter.py
├── _obsolete.py
├── _pages.py
├── _patch.py
├── _utils.py
├── _validate.py
├── _watch.py
├── background_callback
│ ├── __init__.py
│ ├── _proxy_set_props.py
│ └── managers
│ │ ├── __init__.py
│ │ ├── celery_manager.py
│ │ └── diskcache_manager.py
├── dash-renderer
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .npmignore
│ ├── @Types
│ │ └── modules.d.ts
│ ├── MANIFEST.in
│ ├── babel.config.js
│ ├── config
│ │ └── eslint
│ │ │ └── eslintrc-node.json
│ ├── index.html
│ ├── init.template
│ ├── karma.conf.js
│ ├── package-lock.json
│ ├── package.json
│ ├── renderer-test.sh
│ ├── setup.py
│ ├── src
│ │ ├── APIController.react.js
│ │ ├── AccessDenied.react.js
│ │ ├── AppContainer.react.js
│ │ ├── AppProvider.react.tsx
│ │ ├── DashRenderer.js
│ │ ├── StoreObserver.ts
│ │ ├── actions
│ │ │ ├── api.js
│ │ │ ├── callbacks.ts
│ │ │ ├── constants.js
│ │ │ ├── dependencies.js
│ │ │ ├── dependencies_ts.ts
│ │ │ ├── index.js
│ │ │ ├── isAppReady.js
│ │ │ ├── isLoading.ts
│ │ │ ├── loading.ts
│ │ │ ├── patch.ts
│ │ │ ├── paths.js
│ │ │ ├── patternMatching.ts
│ │ │ ├── requestDependencies.ts
│ │ │ └── utils.js
│ │ ├── checkPropTypes.js
│ │ ├── components
│ │ │ ├── core
│ │ │ │ ├── Loading.react.js
│ │ │ │ ├── Reloader.react.js
│ │ │ │ ├── Toolbar.css
│ │ │ │ └── Toolbar.react.js
│ │ │ └── error
│ │ │ │ ├── CallbackGraph
│ │ │ │ ├── CallbackGraphContainer.css
│ │ │ │ ├── CallbackGraphContainer.react.js
│ │ │ │ ├── CallbackGraphContainerStylesheet.js
│ │ │ │ └── CallbackGraphEffects.js
│ │ │ │ ├── ComponentErrorBoundary.react.js
│ │ │ │ ├── FrontEnd
│ │ │ │ ├── FrontEndError.css
│ │ │ │ ├── FrontEndError.react.js
│ │ │ │ └── FrontEndErrorContainer.react.js
│ │ │ │ ├── GlobalErrorContainer.react.js
│ │ │ │ ├── GlobalErrorContainerPassthrough.react.js
│ │ │ │ ├── Percy.css
│ │ │ │ ├── icons
│ │ │ │ ├── BellIcon.svg
│ │ │ │ ├── CheckIcon.svg
│ │ │ │ ├── ClockIcon.svg
│ │ │ │ ├── CollapseIcon.svg
│ │ │ │ ├── DebugIcon.svg
│ │ │ │ ├── ErrorIcon.svg
│ │ │ │ ├── Expand.svg
│ │ │ │ ├── GraphIcon.svg
│ │ │ │ ├── LeftArrow.svg
│ │ │ │ ├── OffIcon.svg
│ │ │ │ ├── ReloadIcon.svg
│ │ │ │ └── RightArrow.svg
│ │ │ │ ├── menu
│ │ │ │ ├── DebugMenu.css
│ │ │ │ ├── DebugMenu.react.js
│ │ │ │ ├── VersionInfo.css
│ │ │ │ └── VersionInfo.react.js
│ │ │ │ └── werkzeugcss.js
│ │ ├── config.ts
│ │ ├── constants
│ │ │ └── constants.js
│ │ ├── dashApi.ts
│ │ ├── exceptions.js
│ │ ├── index.js
│ │ ├── isSimpleComponent.js
│ │ ├── observers
│ │ │ ├── documentTitle.ts
│ │ │ ├── executedCallbacks.ts
│ │ │ ├── executingCallbacks.ts
│ │ │ ├── isLoading.ts
│ │ │ ├── prioritizedCallbacks.ts
│ │ │ ├── requestedCallbacks.ts
│ │ │ └── storedCallbacks.ts
│ │ ├── persistence.js
│ │ ├── reducers
│ │ │ ├── api.js
│ │ │ ├── appLifecycle.js
│ │ │ ├── callbackJobs.ts
│ │ │ ├── callbacks.ts
│ │ │ ├── changed.js
│ │ │ ├── config.js
│ │ │ ├── constants.js
│ │ │ ├── dependencyGraph.js
│ │ │ ├── error.js
│ │ │ ├── history.js
│ │ │ ├── hooks.js
│ │ │ ├── isLoading.ts
│ │ │ ├── layout.js
│ │ │ ├── loading.ts
│ │ │ ├── paths.js
│ │ │ ├── profile.js
│ │ │ └── reducer.js
│ │ ├── registry.js
│ │ ├── store.ts
│ │ ├── styles
│ │ │ └── styles.js
│ │ ├── types
│ │ │ ├── callbacks.ts
│ │ │ └── component.ts
│ │ ├── utils
│ │ │ ├── callbacks.ts
│ │ │ ├── clientsideFunctions.ts
│ │ │ ├── libraries.ts
│ │ │ ├── stores.ts
│ │ │ └── wait.ts
│ │ └── wrapper
│ │ │ ├── CheckedComponent.tsx
│ │ │ ├── DashContext.tsx
│ │ │ ├── DashWrapper.tsx
│ │ │ ├── ExternalWrapper.tsx
│ │ │ ├── selectors.ts
│ │ │ └── wrapping.ts
│ ├── tests
│ │ ├── isAppReady.test.js
│ │ └── persistence.test.js
│ ├── tsconfig.json
│ ├── tslint.json
│ ├── webpack.base.config.js
│ ├── webpack.config.js
│ └── webpack.test.config.js
├── dash.py
├── dash_table
│ └── .gitkeep
├── dcc
│ └── .gitkeep
├── dependencies.py
├── development
│ ├── __init__.py
│ ├── _all_keywords.py
│ ├── _collect_nodes.py
│ ├── _generate_prop_types.py
│ ├── _jl_components_generation.py
│ ├── _py_components_generation.py
│ ├── _py_prop_typing.py
│ ├── _r_components_generation.py
│ ├── base_component.py
│ ├── build_process.py
│ ├── component_generator.py
│ └── update_components.py
├── exceptions.py
├── extract-meta.js
├── favicon.ico
├── fingerprint.py
├── html
│ └── .gitkeep
├── labextension
│ └── package.json
├── nbextension
│ ├── README.md
│ ├── __init__.py
│ ├── dash.json
│ ├── description.yaml
│ └── main.js
├── py.typed
├── renovate.json
├── resources.py
├── testing
│ ├── __init__.py
│ ├── application_runners.py
│ ├── browser.py
│ ├── composite.py
│ ├── consts.py
│ ├── dash_page.py
│ ├── errors.py
│ ├── newhooks.py
│ ├── plugin.py
│ └── wait.py
├── types.py
└── version.py
├── lerna.json
├── package-lock.json
├── package.json
├── pytest.ini
├── requirements
├── celery.txt
├── ci.txt
├── compress.txt
├── dev.txt
├── diskcache.txt
├── install.txt
└── testing.txt
├── setup.py
└── tests
├── __init__.py
├── assets
├── __init__.py
├── grouping_app.py
├── simple_app.py
└── todo_app.py
├── background_callback
├── __init__.py
├── app1.py
├── app2.py
├── app3.py
├── app4.py
├── app5.py
├── app6.py
├── app7.py
├── app_arbitrary.py
├── app_bg_on_error.py
├── app_callback_ctx.py
├── app_ctx_cookies.py
├── app_diff_outputs.py
├── app_error.py
├── app_page_cancel.py
├── app_pattern_matching.py
├── app_progress_delete.py
├── app_short_interval.py
├── app_side_update.py
├── app_unordered.py
├── conftest.py
├── test_basic_long_callback001.py
├── test_basic_long_callback002.py
├── test_basic_long_callback003.py
├── test_basic_long_callback004.py
├── test_basic_long_callback005.py
├── test_basic_long_callback006.py
├── test_basic_long_callback007.py
├── test_basic_long_callback008.py
├── test_basic_long_callback009.py
├── test_basic_long_callback010.py
├── test_basic_long_callback011.py
├── test_basic_long_callback012.py
├── test_basic_long_callback013.py
├── test_basic_long_callback014.py
├── test_basic_long_callback015.py
├── test_basic_long_callback016.py
├── test_basic_long_callback017.py
├── test_basic_long_callback018.py
├── test_ctx_cookies.py
└── utils.py
├── compliance
└── test_typing.py
├── conftest.py
├── integration
├── __init__.py
├── callbacks
│ ├── __init__.py
│ ├── state_path.json
│ ├── test_arbitrary_callbacks.py
│ ├── test_basic_callback.py
│ ├── test_callback_context.py
│ ├── test_callback_error.py
│ ├── test_callback_optional.py
│ ├── test_dynamic_callback.py
│ ├── test_global_dash_callback.py
│ ├── test_layout_paths_with_callbacks.py
│ ├── test_malformed_request.py
│ ├── test_missing_inputs.py
│ ├── test_missing_outputs.py
│ ├── test_multiple_callbacks.py
│ ├── test_prevent_initial.py
│ ├── test_prevent_update.py
│ ├── test_validation.py
│ └── test_wildcards.py
├── clientside
│ ├── assets
│ │ ├── clientside.js
│ │ ├── clientside.mjs
│ │ ├── clientsideModule.mjs
│ │ └── ramda-0.25.0.min.js
│ ├── test_clientside.py
│ ├── test_clientside_functions.py
│ ├── test_clientside_outputs_list.py
│ └── test_clientside_restarts.py
├── dash
│ ├── dash_import_test.py
│ └── org.py
├── dash_assets
│ ├── assets
│ │ ├── load_first.js
│ │ ├── load_ignored.js
│ │ ├── nested_css
│ │ │ └── nested.css
│ │ ├── nested_js
│ │ │ ├── load_after.js
│ │ │ ├── load_after1.js
│ │ │ ├── load_after10.js
│ │ │ ├── load_after11.js
│ │ │ ├── load_after2.js
│ │ │ ├── load_after3.js
│ │ │ ├── load_after4.js
│ │ │ └── load_last.js
│ │ └── reset.css
│ └── test_dash_assets.py
├── devtools
│ ├── __init__.py
│ ├── hr_assets
│ │ ├── hot_reload.css
│ │ └── hot_reload.js
│ ├── test_callback_timing.py
│ ├── test_callback_validation.py
│ ├── test_devtools_error_handling.py
│ ├── test_devtools_ui.py
│ ├── test_hot_reload.py
│ └── test_props_check.py
├── multi_page
│ ├── assets
│ │ ├── app.jpeg
│ │ ├── birds.jpeg
│ │ ├── home.jpeg
│ │ └── logo.jpeg
│ ├── pages
│ │ ├── .no_import.py
│ │ ├── .no_import
│ │ │ └── no_import.py
│ │ ├── __init__.py
│ │ ├── _no_import.py
│ │ ├── defaults.py
│ │ ├── metas.py
│ │ ├── not_found_404.py
│ │ ├── page1.py
│ │ ├── page2.py
│ │ ├── path_variables.py
│ │ ├── query_string.py
│ │ └── redirect.py
│ ├── pages_error
│ │ ├── __init__.py
│ │ └── no_layout_page.py
│ ├── test_pages_layout.py
│ ├── test_pages_order.py
│ └── test_pages_relative_path.py
├── renderer
│ ├── initial_state_dash_app_content.html
│ ├── test_add_receive_props.py
│ ├── test_array_of_exact_or_shape_with_node_prop_assign_none.py
│ ├── test_children_reorder.py
│ ├── test_component_as_prop.py
│ ├── test_dependencies.py
│ ├── test_descendant_listening.py
│ ├── test_due_diligence.py
│ ├── test_external_component.py
│ ├── test_iframe.py
│ ├── test_loading_states.py
│ ├── test_multi_output.py
│ ├── test_persistence.py
│ ├── test_race_conditions.py
│ ├── test_redraw.py
│ ├── test_render_type.py
│ ├── test_request_hooks.py
│ └── test_state_and_input.py
├── security
│ ├── test_injection.py
│ └── test_xss.py
├── test_csp.py
├── test_duo.py
├── test_generation.py
├── test_hooks.py
├── test_integration.py
├── test_legacy_components.py
├── test_pages_redirect_home.py
├── test_patch.py
├── test_scripts.py
└── utils.py
└── unit
├── development
├── TestReactComponent.react.js
├── TestReactComponentRequired.react.js
├── __init__.py
├── conftest.py
├── flow_metadata_test.json
├── metadata_required_test.json
├── metadata_test.json
├── metadata_test.py
├── test_base_component.py
├── test_collect_nodes.py
├── test_flow_metadata_conversions.py
├── test_generate_class.py
├── test_generate_class_file.py
├── test_metadata_conversions.py
└── test_r_component_gen.py
├── library
├── fixtures.py
├── test_async_resources.py
├── test_background_callback_validation.py
├── test_grouped_callbacks.py
├── test_grouping.py
├── test_utils.py
└── test_validate.py
├── pages
├── __init__.py
├── custom_pages
│ ├── __init__.py
│ └── page.py
├── sub_dir
│ ├── __init__.py
│ └── custom_pages
│ │ ├── __init__.py
│ │ └── page.py
├── test_pages.py
└── test_pages_config.py
├── test_app_runners.py
├── test_browser.py
├── test_configs.py
├── test_fingerprint.py
├── test_patch.py
├── test_resources.py
└── test_testing.py
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # Unix-style newlines with a newline ending every file
4 | [*]
5 | end_of_line = lf
6 | insert_final_newline = true
7 |
8 | # Matches multiple files with brace expansion notation
9 | # Set default charset
10 | [*.{js,py}]
11 | charset = utf-8
12 | indent_style = space
13 | indent_size = 4
14 |
15 | # Matches the exact files either package.json or .circleci/config.yml
16 | [{package.json,.circleci/config.yml}]
17 | indent_style = space
18 | indent_size = 2
19 |
20 |
--------------------------------------------------------------------------------
/.flake8:
--------------------------------------------------------------------------------
1 | [flake8]
2 | ignore = C901, E203, E266, E501, E731, W503
3 | select = B,C,E,F,W,T4
4 | per-file-ignores =
5 | tests/*: E722, F811
6 | dash/html/I.py: E742
7 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # These owners will be the default owners for everything in
2 | # the repo. Unless a later match takes precedence
3 | * @T4rk1n @ndrezn @gvwilson @emilykl
4 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: plotly
2 | custom: https://plotly.com/products/consulting-and-oem/
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: "[Feature Request]"
5 | labels: 'Type: Enhancement'
6 | assignees: ''
7 |
8 | ---
9 |
10 | Thanks so much for your interest in Dash!
11 |
12 | Before posting an issue here, please check the Dash [community forum](https://community.plotly.com/c/dash) to see if the topic has already been discussed. The community forum is also great for implementation questions. When in doubt, please feel free to just post the issue here :)
13 |
14 | **Is your feature request related to a problem? Please describe.**
15 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
16 |
17 | **Describe the solution you'd like**
18 | A clear and concise description of what you want to happen.
19 |
20 | **Describe alternatives you've considered**
21 | A clear and concise description of any alternative solutions or features you've considered.
22 |
23 | **Additional context**
24 | Add any other context or screenshots about the feature request here.
25 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | *Start with a description of this PR. Then edit the list below to the items that make sense for your PR scope, and check off the boxes as you go!*
2 |
3 | ## Contributor Checklist
4 |
5 | - [ ] I have broken down my PR scope into the following TODO tasks
6 | - [ ] task 1
7 | - [ ] task 2
8 | - [ ] I have run the tests locally and they passed. (refer to testing section in [contributing](https://github.com/plotly/dash/blob/master/CONTRIBUTING.md))
9 | - [ ] I have added tests, or extended existing tests, to cover any new features or bugs fixed in this PR
10 |
11 | ### optionals
12 |
13 | - [ ] I have added entry in the `CHANGELOG.md`
14 | - [ ] If this PR needs a follow-up in **dash docs**, **community thread**, I have mentioned the relevant URLS as follows
15 | - [ ] this GitHub [#PR number]() updates the dash docs
16 | - [ ] here is the show and tell thread in Plotly Dash community
17 |
--------------------------------------------------------------------------------
/.github/workflows/update-html.yml:
--------------------------------------------------------------------------------
1 | name: update-html
2 | run-name: Update dash html components attributes
3 | on:
4 | schedule:
5 | - cron: 10 0 1 * *
6 | workflow_dispatch:
7 | inputs:
8 | name:
9 | description: Name of the run
10 | required: false
11 | type: string
12 |
13 | jobs:
14 | update-attributes:
15 | runs-on: ubuntu-latest
16 | steps:
17 | - uses: actions/checkout@v3
18 | with:
19 | ref: dev
20 | - uses: actions/setup-node@v3
21 | - name: Extract elements
22 | working-directory: ./components/dash-html-components
23 | run: |
24 | npm ci
25 | npm run extract
26 | - name: Create Pull Request
27 | uses: peter-evans/create-pull-request@v5
28 | with:
29 | commit-message: Update Dash HTML elements & attributes.
30 | body: Automated HTML attributes update.
31 |
--------------------------------------------------------------------------------
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | npm run lint && \
2 | (cd components/dash-core-components && npm run lint) && \
3 | (cd components/dash-table && npm run lint)
4 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | lts/iron
2 |
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@babel/preset-env',
4 | '@babel/preset-react'
5 | ]
6 | };
7 |
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@plotly/dash-component-plugins",
3 | "version": "1.2.3",
4 | "description": "Plugins for Dash Components",
5 | "repository": {
6 | "type": "git",
7 | "url": "git@github.com:plotly/dash.git"
8 | },
9 | "bugs": {
10 | "url": "https://github.com/plotly/dash/issues"
11 | },
12 | "homepage": "https://github.com/plotly/dash",
13 | "main": "dist/index.js",
14 | "scripts": {
15 | "build": "webpack"
16 | },
17 | "author": "Marc-André Rivet",
18 | "license": "MIT",
19 | "devDependencies": {
20 | "@babel/core": "^7.19.6",
21 | "@babel/preset-env": "^7.19.4",
22 | "@babel/preset-react": "^7.18.6",
23 | "babel-loader": "^8.2.5",
24 | "react": "^16.8.6",
25 | "webpack": "^5.76.1",
26 | "webpack-cli": "^4.10.0"
27 | },
28 | "files": [
29 | "dist/index.js",
30 | "dist/index.js.LICENSE.txt"
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/src/History.js:
--------------------------------------------------------------------------------
1 | const ON_CHANGE = '_dashprivate_historychange';
2 |
3 | export default class History {
4 | static dispatchChangeEvent() {
5 | window.dispatchEvent(new CustomEvent(ON_CHANGE));
6 | }
7 |
8 | static onChange(listener) {
9 | window.addEventListener(ON_CHANGE, listener);
10 |
11 | return () => window.removeEventListener(ON_CHANGE, listener);
12 | }
13 | }
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/src/dynamicImport.js:
--------------------------------------------------------------------------------
1 | import { lazy } from 'react';
2 |
3 | export const asyncDecorator = (target, promise) => {
4 | let resolve;
5 | const isReady = new Promise(r => {
6 | resolve = r;
7 | });
8 |
9 | const state = {
10 | isReady,
11 | get: lazy(() => {
12 | return Promise.resolve(promise()).then(res => {
13 | setTimeout(async () => {
14 | await resolve(true);
15 | state.isReady = true;
16 | }, 0);
17 |
18 | return res;
19 | });
20 | }),
21 | };
22 |
23 | Object.defineProperty(target, '_dashprivate_isLazyComponentReady', {
24 | get: () => state.isReady
25 | });
26 |
27 | return state.get;
28 | };
29 |
30 | export const inheritAsyncDecorator = (target, source) => {
31 | Object.defineProperty(target, '_dashprivate_isLazyComponentReady', {
32 | get: () => isReady(source)
33 | });
34 | }
35 |
36 | export const isReady = target => target &&
37 | target._dashprivate_isLazyComponentReady;
38 |
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/src/index.js:
--------------------------------------------------------------------------------
1 | import { asyncDecorator, inheritAsyncDecorator, isReady } from './dynamicImport';
2 | import History from './History';
3 |
4 | export { asyncDecorator, inheritAsyncDecorator, isReady };
5 | export { History };
--------------------------------------------------------------------------------
/@plotly/dash-component-plugins/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | entry: './src/index.js',
5 | mode: 'production',
6 | output: {
7 | path: path.resolve(__dirname, `./dist`),
8 | filename: 'index.js',
9 | library: {name: `dash-component-plugins`, type: 'umd' },
10 | },
11 | externals: {
12 | react: {
13 | root: 'React',
14 | commonjs2: 'react',
15 | commonjs: 'react',
16 | amd: 'react'
17 | }
18 | },
19 | module: {
20 | rules: [
21 | {
22 | test: /\.js$/,
23 | use: {
24 | loader: 'babel-loader'
25 | }
26 | }
27 | ]
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include dash_generator_test_component_nested/**
2 | include dash_generator_test_component_nested/nested/**
3 | include package.json
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/README.md:
--------------------------------------------------------------------------------
1 | Empty
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | '@babel/preset-env',
3 | '@babel/preset-react'
4 | ];
5 |
6 | module.exports = { presets };
7 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/base/__init__.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os as _os
3 |
4 | _basepath = _os.path.dirname(__file__)
5 | _filepath = _os.path.abspath(_os.path.join(_basepath, 'package.json'))
6 | with open(_filepath) as f:
7 | package = json.load(f)
8 |
9 | package_name = package['name'].replace(' ', '_').replace('-', '_')
10 | __version__ = package['version']
11 |
12 | from ._imports_ import * # noqa: F401, F403
13 | from ._imports_ import __all__ # noqa: E402
14 |
15 | _js_dist = [
16 | dict(
17 | relative_package_path='nested/dash_generator_test_component_nested.js',
18 | namespace='dash_generator_test_component_nested'
19 | )
20 | ]
21 |
22 | for _component in __all__:
23 | setattr(locals()[_component], '_js_dist', _js_dist)
24 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 | import json
3 |
4 | with open('package.json') as f:
5 | package = json.load(f)
6 |
7 | package_name = str(package["name"].replace(" ", "_").replace("-", "_"))
8 |
9 | setup(
10 | name=package_name,
11 | version=package["version"],
12 | author=package['author'],
13 | author_email='chris@plotly.com',
14 | packages=[package_name],
15 | include_package_data=True,
16 | license=package['license'],
17 | description=package.get("description", package_name),
18 | install_requires=[]
19 | )
20 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/src/components/MyNestedComponent.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 | /**
5 | * MyNestedComponent description
6 | */
7 | const MyNestedComponent = ({ id, value = '' }) => (
{value}
);
8 |
9 | MyNestedComponent.propTypes = {
10 | /**
11 | * The id of the component
12 | */
13 | id: PropTypes.string,
14 |
15 | /**
16 | * The value to display
17 | */
18 | value: PropTypes.string
19 | };
20 |
21 | export default MyNestedComponent;
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/src/index.js:
--------------------------------------------------------------------------------
1 | import MyNestedComponent from './components/MyNestedComponent';
2 |
3 | export {
4 | MyNestedComponent,
5 | };
6 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-nested/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | const packagejson = require('./package.json');
5 |
6 | const dashLibraryName = packagejson.name.replace(/-/g, '_');
7 |
8 | module.exports = {
9 | entry: { main: './src/index.js' },
10 | externals: {
11 | react: 'React',
12 | 'react-dom': 'ReactDOM',
13 | 'prop-types': 'PropTypes'
14 | },
15 | output: {
16 | path: path.resolve(__dirname, dashLibraryName, 'nested'),
17 | filename: `${dashLibraryName}.js`,
18 | library: {
19 | name: dashLibraryName,
20 | type: 'window',
21 | }
22 | },
23 | module: {
24 | rules: [
25 | {
26 | test: /\.jsx?$/,
27 | exclude: /node_modules/,
28 | use: {
29 | loader: 'babel-loader'
30 | }
31 | }
32 | ],
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include dash_generator_test_component_standard/**
2 | include package.json
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/README.md:
--------------------------------------------------------------------------------
1 | Empty
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | '@babel/preset-env',
3 | '@babel/preset-react'
4 | ];
5 |
6 | module.exports = { presets };
7 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/base/godfather.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plotly/dash/910a3cb884a2f769426efee2caad0b97e50e0c72/@plotly/dash-generator-test-component-standard/base/godfather.ttf
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/base/style.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'godfather';
3 | src: url(./godfather.ttf) format('truetype');
4 | }
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 | import json
3 |
4 | with open('package.json') as f:
5 | package = json.load(f)
6 |
7 | package_name = str(package["name"].replace(" ", "_").replace("-", "_"))
8 |
9 | setup(
10 | name=package_name,
11 | version=package["version"],
12 | author=package['author'],
13 | author_email='chris@plotly.com',
14 | packages=[package_name],
15 | include_package_data=True,
16 | license=package['license'],
17 | description=package.get("description", package_name),
18 | install_requires=[]
19 | )
20 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/src/components/MyStandardComponent.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 | /**
5 | * MyComponent description
6 | */
7 | const MyStandardComponent = ({ id, style, value = '' }) => ({value}
);
8 |
9 | MyStandardComponent.propTypes = {
10 | /**
11 | * The id of the component
12 | */
13 | id: PropTypes.string,
14 |
15 | /**
16 | * The style
17 | */
18 | style: PropTypes.shape,
19 |
20 | /**
21 | * The value to display
22 | */
23 | value: PropTypes.string
24 | };
25 |
26 | export default MyStandardComponent;
27 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/src/index.js:
--------------------------------------------------------------------------------
1 | import MyStandardComponent from './components/MyStandardComponent';
2 |
3 | export {
4 | MyStandardComponent,
5 | };
6 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-standard/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | const packagejson = require('./package.json');
5 |
6 | const dashLibraryName = packagejson.name.replace(/-/g, '_');
7 |
8 | module.exports = {
9 | entry: { main: './src/index.js' },
10 | externals: {
11 | react: 'React',
12 | 'react-dom': 'ReactDOM',
13 | 'prop-types': 'PropTypes'
14 | },
15 | output: {
16 | path: path.resolve(__dirname, dashLibraryName),
17 | filename: `${dashLibraryName}.js`,
18 | library: {
19 | name: dashLibraryName,
20 | type: 'window',
21 | }
22 | },
23 | module: {
24 | rules: [
25 | {
26 | test: /\.jsx?$/,
27 | exclude: /node_modules/,
28 | use: {
29 | loader: 'babel-loader'
30 | }
31 | }
32 | ],
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/README.md:
--------------------------------------------------------------------------------
1 | # Dash generator test component typescript
2 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/_dash_prop_typing.py:
--------------------------------------------------------------------------------
1 | ignore_props = ['ignored_prop']
2 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | '@babel/preset-env',
3 | '@babel/preset-react'
4 | ];
5 |
6 | const plugins = [];
7 |
8 | module.exports = { presets, plugins };
9 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/base/__init__.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os as _os
3 |
4 | _basepath = _os.path.dirname(__file__)
5 | _filepath = _os.path.abspath(_os.path.join(_basepath, 'package.json'))
6 | with open(_filepath) as f:
7 | package = json.load(f)
8 |
9 | package_name = package['name'].replace(' ', '_').replace('-', '_')
10 | __version__ = package['version']
11 |
12 | from ._imports_ import * # noqa: F401, F403
13 | from ._imports_ import __all__ # noqa: E402
14 |
15 | _js_dist = [
16 | dict(
17 | relative_package_path='dash_generator_test_component_typescript.js',
18 | namespace='dash_generator_test_component_typescript'
19 | ),
20 | {
21 | "dev_package_path": "proptypes.js",
22 | "dev_only": True,
23 | "namespace": 'dash_generator_test_component_typescript'
24 | }
25 | ]
26 |
27 | for _component in __all__:
28 | setattr(locals()[_component], '_js_dist', _js_dist)
29 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/base/py.typed:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plotly/dash/910a3cb884a2f769426efee2caad0b97e50e0c72/@plotly/dash-generator-test-component-typescript/base/py.typed
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | coverageProvider: "v8",
3 | transform: {
4 | '^.+\\.(ts|tsx)?$': 'ts-jest',
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 | import json
3 |
4 | with open('package.json') as f:
5 | package = json.load(f)
6 |
7 | package_name = str(package["name"].replace(" ", "_").replace("-", "_"))
8 |
9 | setup(
10 | name=package_name,
11 | version=package["version"],
12 | author=package['author'],
13 | author_email='chris@plotly.com',
14 | packages=[package_name],
15 | include_package_data=True,
16 | license=package['license'],
17 | description=package.get("description", package_name),
18 | install_requires=[]
19 | )
20 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/EmptyComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const EmptyComponent = () => Empty
;
4 |
5 | export default EmptyComponent;
6 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/FCComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { TypescriptComponentProps } from '../props';
3 |
4 | const FCComponent: React.FC = (props) => (
5 | {props.children}
6 | );
7 |
8 | export default FCComponent;
9 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/MemoTypeScriptComponent.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import {TypescriptComponentProps} from '../props';
3 |
4 | /**
5 | * Description
6 | * Example:
7 | * ```
8 | * @app.callback(...)
9 | * def on_click(*args):
10 | * return 1
11 | * ```
12 | */
13 | const MemoTypeScriptComponent = (props: TypescriptComponentProps) => (
14 | {props.required_string}
15 | );
16 |
17 | export default React.memo(MemoTypeScriptComponent, () => true);
18 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/MixedComponent.tsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 | type Props = {
5 | id?: string;
6 | prop: string[];
7 | }
8 |
9 | const MixedComponent: React.FC = (props) => {
10 | return (
11 | {props.children}
12 | )
13 | }
14 |
15 | MixedComponent.propTypes = {
16 | prop: PropTypes.arrayOf(PropTypes.string).isRequired
17 | }
18 |
19 | export default MixedComponent;
20 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/RequiredChildrenComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { RequiredChildrenComponentProps } from "../props";
3 |
4 |
5 | const RequiredChildrenComponent = (props: RequiredChildrenComponentProps) => {
6 | const {children} = props;
7 | return (
8 |
9 | {children}
10 |
11 | )
12 | }
13 |
14 | export default RequiredChildrenComponent;
15 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/StandardComponent.react.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 |
5 | const StandardComponent = (props) => {
6 | const { id, children } = props;
7 |
8 | return (
9 |
10 | {children}
11 |
12 | )
13 | }
14 |
15 | StandardComponent.propTypes = {
16 | id: PropTypes.string,
17 | children: PropTypes.node,
18 | }
19 |
20 | export default React.memo(StandardComponent, (prevProps,nextProps) => true)
21 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/TypeScriptClassComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {TypescriptComponentProps} from '../props';
3 |
4 | /**
5 | * Description
6 | * Example:
7 | * ```
8 | * @app.callback(...)
9 | * def on_click(*args):
10 | * return 1
11 | * ```
12 | */
13 | export default class TypeScriptClassComponent extends React.PureComponent {
14 | render() {
15 | const {required_string, id} = this.props;
16 | return (
17 |
18 | {required_string}
19 |
20 | );
21 | }
22 |
23 | static defaultProps = {
24 | string_default: 'default',
25 | number_default: 42,
26 | bool_default: false,
27 | null_default: null,
28 | obj_default: {
29 | a: 'a',
30 | b: 3
31 | }
32 | };
33 | }
34 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/TypeScriptComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {TypescriptComponentProps} from '../props';
3 |
4 | /**
5 | * Component docstring
6 | */
7 | const TypeScriptComponent = ({
8 | required_string,
9 | id,
10 | string_default = 'default',
11 | number_default = 42,
12 | bool_default = true,
13 | null_default = null,
14 | obj_default = { a: 'a', b: 3 },
15 | ...props
16 | }: TypescriptComponentProps) => {
17 | return {required_string}
;
18 | };
19 |
20 | export default TypeScriptComponent;
21 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/components/WrappedHTML.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {WrappedHTMLProps} from '../props';
3 |
4 | /**
5 | * Component docstring
6 | */
7 | const WrappedHTML = (props: WrappedHTMLProps) => {
8 | return null;
9 | };
10 |
11 | export default WrappedHTML;
12 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/src/index.ts:
--------------------------------------------------------------------------------
1 | import TypeScriptComponent from './components/TypeScriptComponent';
2 | import TypeScriptClassComponent from './components/TypeScriptClassComponent';
3 | import MemoTypeScriptComponent from './components/MemoTypeScriptComponent';
4 | import StandardComponent from './components/StandardComponent.react';
5 | import WrappedHTML from './components/WrappedHTML';
6 | import FCComponent from './components/FCComponent';
7 | import EmptyComponent from './components/EmptyComponent';
8 | import MixedComponent from './components/MixedComponent';
9 | import RequiredChildrenComponent from './components/RequiredChildrenComponent';
10 |
11 | export {
12 | TypeScriptComponent,
13 | TypeScriptClassComponent,
14 | MemoTypeScriptComponent,
15 | StandardComponent,
16 | WrappedHTML,
17 | FCComponent,
18 | EmptyComponent,
19 | MixedComponent,
20 | RequiredChildrenComponent,
21 | };
22 |
--------------------------------------------------------------------------------
/@plotly/dash-generator-test-component-typescript/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "jsx": "react",
4 | "baseUrl": "src/ts",
5 | "paths": {
6 | },
7 | "inlineSources": true,
8 | "sourceMap": true,
9 | "esModuleInterop": true
10 | },
11 | "exclude": [
12 | "node_modules"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/@plotly/dash-jupyterlab/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
--------------------------------------------------------------------------------
/@plotly/dash-jupyterlab/lib/index.d.ts:
--------------------------------------------------------------------------------
1 | import { JupyterFrontEndPlugin } from '@jupyterlab/application';
2 | import '../style/index.css';
3 | /**
4 | * Initialization data for the jupyterlab-dash extension.
5 | */
6 | declare const extension: JupyterFrontEndPlugin;
7 | export default extension;
8 |
--------------------------------------------------------------------------------
/@plotly/dash-jupyterlab/style/index.css:
--------------------------------------------------------------------------------
1 | .jp-dashWidget iframe {
2 | height: 100%;
3 | width: 100%;
4 | padding: 20px;
5 | box-sizing: border-box;
6 | }
7 |
--------------------------------------------------------------------------------
/@plotly/dash-jupyterlab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "lib": ["es2018", "dom"],
5 | "module": "commonjs",
6 | "moduleResolution": "node",
7 | "noEmitOnError": true,
8 | "noUnusedLocals": true,
9 | "outDir": "lib",
10 | "rootDir": "src",
11 | "strict": true,
12 | "strictNullChecks": false,
13 | "target": "es2018",
14 | "types": [],
15 | "esModuleInterop": true
16 | },
17 | "include": ["src/*"]
18 | }
19 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include dash_test_components/**
2 | include package.json
--------------------------------------------------------------------------------
/@plotly/dash-test-components/README.md:
--------------------------------------------------------------------------------
1 | Empty
--------------------------------------------------------------------------------
/@plotly/dash-test-components/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | '@babel/preset-env',
3 | '@babel/preset-react'
4 | ];
5 |
6 | const plugins = [
7 | '@babel/plugin-syntax-dynamic-import'
8 | ];
9 |
10 | module.exports = { presets, plugins };
11 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/base/__init__.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os as _os
3 |
4 | _basepath = _os.path.dirname(__file__)
5 | _filepath = _os.path.abspath(_os.path.join(_basepath, 'package.json'))
6 | with open(_filepath) as f:
7 | package = json.load(f)
8 |
9 | package_name = package['name'].replace(' ', '_').replace('-', '_')
10 | __version__ = package['version']
11 |
12 | from ._imports_ import * # noqa: F401, F403
13 | from ._imports_ import __all__ # noqa: E402
14 |
15 | _js_dist = [
16 | {
17 | "relative_package_path": "dash_test_components.js",
18 | "namespace": "dash_test_components"
19 | },
20 | {
21 | "relative_package_path": "async-test-async.js",
22 | "namespace": "dash_test_components",
23 | "async": "lazy",
24 | },
25 | ]
26 |
27 | for _component in __all__:
28 | setattr(locals()[_component], '_js_dist', _js_dist)
29 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 | import json
3 |
4 | with open('package.json') as f:
5 | package = json.load(f)
6 |
7 | package_name = str(package["name"].replace(" ", "_").replace("-", "_"))
8 |
9 | setup(
10 | name=package_name,
11 | version=package["version"],
12 | author=package['author'],
13 | author_email='chris@plotly.com',
14 | packages=[package_name],
15 | include_package_data=True,
16 | license=package['license'],
17 | description=package.get("description", package_name),
18 | install_requires=[]
19 | )
20 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/src/components/AddPropsComponent.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PropTypes from "prop-types";
3 |
4 | const AddPropsComponent = (props) => {
5 | const {children, id} = props;
6 |
7 |
8 | return (
9 |
10 | {React.cloneElement(children, {
11 | receive: `Element #${id} pass`,
12 | })}
13 |
14 | );
15 | };
16 |
17 | AddPropsComponent.propTypes = {
18 | id: PropTypes.string,
19 | children: PropTypes.node,
20 | };
21 |
22 | export default AddPropsComponent;
23 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/src/components/ArrayOfExactOrShapeWithNodePropAssignNone.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | const ArrayOfExactOrShapeWithNodePropAssignNone = (props) => {
5 | const { id, test_array_of_exact_prop, test_array_of_shape_prop } = props;
6 |
7 | return (
8 |
9 | {`length of test_array_of_exact_prop: ${(test_array_of_exact_prop || []).length}, length of test_array_of_shape_prop: ${(test_array_of_shape_prop || []).length}`}
10 |
11 | );
12 | };
13 |
14 | ArrayOfExactOrShapeWithNodePropAssignNone.propTypes = {
15 | id: PropTypes.string,
16 | test_array_of_exact_prop: PropTypes.arrayOf(
17 | PropTypes.exact({
18 | label: PropTypes.node,
19 | value: PropTypes.string
20 | })
21 | ),
22 | test_array_of_shape_prop: PropTypes.arrayOf(
23 | PropTypes.shape({
24 | label: PropTypes.node,
25 | value: PropTypes.string
26 | })
27 | )
28 | };
29 |
30 | export default ArrayOfExactOrShapeWithNodePropAssignNone;
31 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/src/components/AsyncComponent.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, { Suspense } from 'react';
3 | import { asyncDecorator } from '@plotly/dash-component-plugins';
4 | import asyncComponentLoader from './../fragments/AsyncComponentLoader';
5 |
6 | const AsyncComponent = props => (
7 |
8 | );
9 |
10 | const RealAsyncComponent = asyncDecorator(AsyncComponent, asyncComponentLoader);
11 |
12 | AsyncComponent.propTypes = {
13 | id: PropTypes.string,
14 | value: PropTypes.string
15 | };
16 |
17 | export default AsyncComponent;
--------------------------------------------------------------------------------
/@plotly/dash-test-components/src/components/CollapseComponent.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, { Fragment } from 'react';
3 |
4 | const CollapseComponent = props => (
5 | {props.display ? props.children : null}
6 | );
7 |
8 | CollapseComponent.propTypes = {
9 | children: PropTypes.node,
10 | display: PropTypes.bool,
11 | id: PropTypes.string
12 | };
13 |
14 | export default CollapseComponent;
15 |
--------------------------------------------------------------------------------
/@plotly/dash-test-components/src/components/DelayedEventComponent.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 | const DelayedEventComponent = ({ id, n_clicks = 0, setProps }) => (