diff --git a/.github/.gitignore b/.github/.gitignore
deleted file mode 100644
index 2d19fc76..00000000
--- a/.github/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.html
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 00000000..928eb19f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,35 @@
+name: Bug report
+description: Report a problem you encountered
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Thank you for taking the time to complete this bug report!
+ Please [search](https://github.com/Appsilon/shiny.fluent/issues)
+ through existing issues first to make sure you are not creating a duplicate.
+
+ - type: textarea
+ attributes:
+ label: Steps to reproduce
+ value: '1. '
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Bug description
+ description: What happened? Attach error messages and screenshots if applicable.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Expected behavior
+ description: What should have happened?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Comments
+ description: Add any other useful information here.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 83e25643..00000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-name : Bug report
-about : Report a bug in shiny.fluent.
-labels: bug
----
-
-
-
-Add a short problem description here.
-
-## Example application or steps to reproduce the problem
-
-Add a minimal example that shows the issue (we recommend using the https://reprex.tidyverse.org/ package).
-
-```r
-
-```
-
-### Expected behavior
-
-Describe what you would expect in this scenario.
-
-### Actual behavior
-
-Describe what happens instead.
-
-## Additional info
-
-Place for any additional details that you would like to include.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000..08b36647
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: true
+contact_links:
+ - name: Documentation
+ url: https://appsilon.github.io/shiny.fluent/
+ about: Learn about shiny.fluent from our documentation
+ - name: Discussions
+ url: https://github.com/Appsilon/shiny.fluent/discussions
+ about: Use the board for questions and general discussion
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
new file mode 100644
index 00000000..39fa4a95
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -0,0 +1,38 @@
+name: Feature request
+description: Request a new feature
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Thank you for taking the time to complete this feature request!
+ Please [search](https://github.com/Appsilon/shiny.fluent/issues)
+ through existing issues first to make sure you are not creating a duplicate.
+
+ - type: textarea
+ attributes:
+ label: Motivation
+ description: What is your need? What problem are you trying to solve?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Feature description
+ description: How would this feature work from user's perspective?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Implementation ideas
+ description: How would this feature work under the hood?
+
+ - type: textarea
+ attributes:
+ label: Impact
+ description: How often would this feature be used? What if we don't implement it?
+
+ - type: textarea
+ attributes:
+ label: Comments
+ description: Add any other useful information here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 01fa0879..00000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-name : Feature request
-about : Request a new feature.
-labels: 'feature request'
----
-
-
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
deleted file mode 100644
index 33b0f13b..00000000
--- a/.github/ISSUE_TEMPLATE/question.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-name : Ask a Question
-about : The issue tracker is not for questions -- please ask questions at https://github.com/Appsilon/shiny.fluent/discussions
----
-
-The issue tracker is not for questions. If you have a question or provide general feedback, we'd love to hear it and help! Please go to https://github.com/Appsilon/shiny.fluent/discussions and write it there.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000..5a138c08
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,4 @@
+### Changes
+Closes #
+
+### How to test
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
deleted file mode 100644
index c951db13..00000000
--- a/.github/pull_request_template.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Fixes # .
-
-Changes proposed in this pull request:
-- .
-- .
-
-# Screenshots
-
-
-
-# PR checklist
-
-- [ ] Unit tests added
-- [ ] Documentation updated
diff --git a/DESCRIPTION b/DESCRIPTION
index 35f9e1d5..8e2f74bb 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,12 +1,12 @@
Package: shiny.fluent
Title: Microsoft Fluent UI for Shiny Apps
-Version: 0.2.1
+Version: 0.3.0
Authors@R:
c(
- person(given = "Marek", family = "Rogala", role = "aut", email = "marek@appsilon.com"),
- person(given = "Kamil", family = "Zyla", role = "aut", email = "kamil@appsilon.com"),
- person("Developers", "Appsilon", email = "support+opensource@appsilon.com", role = "cre"),
- person(family = "Appsilon Sp. z o.o.", role = "cph")
+ person("Kamil", "Żyła", role = c("aut", "cre"), email = "opensource+kamil@appsilon.com"),
+ person("Jakub", "Sobolewski", role = "aut", email = "jakub.sobolewski@appsilon.com"),
+ person("Marek", "Rogala", role = "aut", email = "marek@appsilon.com"),
+ person("Appsilon Sp. z o.o.", role = "cph", email = "opensource@appsilon.com")
)
Description: It provides all controls from Microsoft Fluent UI.
URL: https://appsilon.github.io/shiny.fluent, https://github.com/appsilon/shiny.fluent
@@ -14,7 +14,7 @@ License: LGPL-3 + file LICENSE
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.1.2
+RoxygenNote: 7.2.3
VignetteBuilder: knitr
Depends:
R (>= 2.10)
@@ -23,7 +23,7 @@ Imports:
jsonlite,
rlang,
shiny,
- shiny.react (>= 0.2.2)
+ shiny.react (>= 0.3.0)
Suggests:
dplyr,
DT,
diff --git a/NEWS.md b/NEWS.md
index c62c4d9b..854f5c45 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,17 +1,30 @@
+# shiny.fluent 0.3.0
+
+1. Added `ThemeProvider` component ([#47](https://github.com/Appsilon/shiny.fluent/issues/47)).
+2. Added `ShimmeredDetailsList` component
+([#34](https://github.com/Appsilon/shiny.fluent/issues/34)).
+3. All `.shinyInput` wrappers now have a sensible debounce consistent with vanilla Shiny
+([#130](https://github.com/Appsilon/shiny.fluent/issues/130)).
+4. Added update functions for all buttons
+([#12](https://github.com/Appsilon/shiny.react/issues/12)).
+5. `Dropdown.shinyInput` now supports multiselection
+([#42](https://github.com/Appsilon/shiny.fluent/issues/42)).
+
+
# shiny.fluent 0.2.2
-* Ensure `DatePicker.shinyInput` with `value = NULL` to behave
- consistently with the official behavior. [#118](https://github.com/Appsilon/shiny.fluent/pull/118)
+1. Make the behavior of `DatePicker.shinyInput` with `value = NULL` consistent with vanilla Shiny
+([#118](https://github.com/Appsilon/shiny.fluent/pull/118)).
# shiny.fluent 0.2.0
This is the first public release, with several big interface changes:
-* Removed `withReact()`. Components now work without it!
-* Added `.shinyInput` suffix to components with interface modified to match vanilla Shiny inputs.
- The corresponding components without the suffix now expose unaltered React interface.
-* Changed naming convention to `camelCase`.
-* Added `setInput()` and `triggerEvent()` helpers.
+1. Removed `withReact()`. Components now work without it!
+2. Added `.shinyInput` suffix to components with interface modified to match vanilla Shiny inputs.
+The corresponding components without the suffix now expose unaltered React interface.
+3. Changed naming convention to `camelCase`.
+4. Added `setInput()` and `triggerEvent()` helpers.
# shiny.fluent 0.1.0
diff --git a/README.md b/README.md
index d331c8da..44ca263d 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,13 @@
-
-
-
-
+# shiny.fluent
-# shiny.fluent
+> _Microsoft Fluent UI for Shiny Apps_
+[![CRAN
+status](https://www.r-pkg.org/badges/version/shiny.fluent)](https://cran.r-project.org/package=shiny.fluent)
[![CI](https://github.com/Appsilon/shiny.fluent/actions/workflows/ci.yml/badge.svg)](https://github.com/Appsilon/shiny.fluent/actions/workflows/ci.yml)
+[![downloads monthly](https://cranlogs.r-pkg.org/badges/shiny.fluent)](https://CRAN.R-project.org/package=shiny.fluent)
+[![downloads total](https://cranlogs.r-pkg.org/badges/grand-total/shiny.fluent)](https://CRAN.R-project.org/package=shiny.fluent)
We believe that a great UI plays a huge role in the success of application projects. shiny.fluent gives your apps:
@@ -27,9 +28,13 @@ As Fluent UI is built in React, shiny.fluent is based on another package called
### Installation
-To install the packages, run:
-```R
-remotes::install_github("Appsilon/shiny.react")
+Stable version:
+```r
+install.packages("shiny.fluent")
+```
+
+Development version:
+```r
remotes::install_github("Appsilon/shiny.fluent")
```
@@ -68,12 +73,15 @@ We recommend the following for starters:
There are also usage examples for individual components.
Use `shiny.fluent::runExample()` to list all available examples.
-Appsilon
---------
+## Appsilon
-Appsilon is the **Full Service Certified RStudio Partner**. Learn more
-at [appsilon.com](https://appsilon.com).
+Appsilon is a **Posit (formerly RStudio) Full Service Certified Partner**.
+Learn more at [appsilon.com](https://appsilon.com).
+
+[Get in touch](mailto:opensource@appsilon.com).
-Get in touch [support+opensource@appsilon.com](mailto:support+opensource@appsilon.com)
+Check our [Open Source tools](https://shiny.tools).
+
+
diff --git a/man/DetailsList.Rd b/man/DetailsList.Rd
index aeb9e411..96eb08fc 100644
--- a/man/DetailsList.Rd
+++ b/man/DetailsList.Rd
@@ -234,7 +234,9 @@ By default, the List used within DetailsList will use the \code{body} element as
To determine if the List within DetailsList should re-render its contents, the component performs a referential equality check within its \code{shouldComponentUpdate} method. This is done to minimize the performance overhead associated with re-rendering the virtualized List pages, as recommended by the \href{https://reactjs.org/docs/optimizing-performance.html#the-power-of-not-mutating-data}{React documentation}.
As a result of this implementation, the inner List will not determine it should re-render if the array values are mutated.
-To avoid this problem, we recommend re-creating the items array backing the DetailsList by using a method such as \code{Array.prototype.concat} or ES6 spread syntax shown below:\if{html}{\out{