diff --git a/docz/docs/02-getting-started/01-installation/04-amd.md b/docz/docs/02-getting-started/01-installation/04-amd.md
index 22e5100..0af339f 100644
--- a/docz/docs/02-getting-started/01-installation/04-amd.md
+++ b/docz/docs/02-getting-started/01-installation/04-amd.md
@@ -55,9 +55,6 @@ sap.ui.define([
:::warning
-The [SAP Website has a note about including third-party JS libraries.](https://blogs.sap.com/2017/04/30/how-to-include-third-party-libraries-modules-in-sapui5/)
-It recommends copying and pasting JavaScript code.
-
**Copy and pasting code does not work** for SheetJS scripts as they contain
Unicode characters that may be mangled. The standalone script should be
downloaded and manually uploaded to the project.
diff --git a/docz/docs/06-solutions/05-output.md b/docz/docs/06-solutions/05-output.md
index 657e191..7bb42cb 100644
--- a/docz/docs/06-solutions/05-output.md
+++ b/docz/docs/06-solutions/05-output.md
@@ -152,7 +152,7 @@ given that every related vendor stopped providing support for their software.
`XLSX.writeFile` techniques work for most modern browsers as well as older IE.
For much older browsers, there are workarounds implemented by wrapper libraries.
-[`Downloadify`](https://github.com/dcneiner/downloadify) uses a Flash SWF button
+[`Downloadify`](/docs/demos/legacy#download-strategies) uses a Flash SWF button
to generate local files, suitable for environments where ActiveX is unavailable:
```js
@@ -544,13 +544,15 @@ Node 17.5 and 18.0 have native support for fetch:
```js
const XLSX = require("xlsx");
-const buf = XLSX.write(workbook, { bookType: "xlsx", type: "buffer" });
-var blob = new Blob([buf], {type:"application/octet-stream"});
-var formdata = new FormData();
-formdata.append("file", blob, "test.xlsx");
+async function upload_wb(workbook, url, name="test.xlsx", field="file") {
+ const buf = XLSX.write(workbook, { bookType: "xlsx", type: "buffer" });
+ const blob = new Blob([buf], {type:"application/octet-stream"});
+ const body = new FormData();
+ body.append(field, blob, name);
-/* perform POST request */
-fetch("https://thisis.a.test/upload", { method: 'POST', body: formdata });
+ /* perform POST request */
+ return fetch(url, { method: 'POST', body });
+}
```
@@ -597,17 +599,15 @@ With the `header: 1` option, the function exports an array of arrays of values.
-[`x-spreadsheet`](https://github.com/myliang/x-spreadsheet) is an interactive
-data grid for previewing and modifying structured data in the web browser. The
-[demo](/docs/demos/grid#x-spreadsheet) includes a sample script and live demo.
+[`x-spreadsheet`](/docs/demos/grid#x-spreadsheet) is an interactive data grid
+for previewing and modifying structured data in the web browser.
-[`react-data-grid`](https://adazzle.github.io/react-data-grid) is a data grid
-built for React. It uses two properties: `rows` of data objects and `columns`
-which describe the columns. For the purposes of massaging the data to fit the
-`react-data-grid` API it is easiest to start from an array of arrays.
+[`react-data-grid`](/docs/demos/grid#react-data-grid) is a data grid built for
+React. It uses two properties: `rows` of data objects and `columns` which
+describe the columns. The grid API can play nice with an array of arrays.
This demo starts by fetching a remote file and using `XLSX.read` to extract:
@@ -642,8 +642,7 @@ export default function App() {
-[`vue3-table-lite`](https://vue3-lite-table.vercel.app/) is a simple VueJS 3
-data table. It is featured in the [dedicated demo](/docs/demos/grid#vue3-table-lite).
+[`vue3-table-lite`](/docs/demos/grid#vue3-table-lite) is a VueJS 3 data table.
diff --git a/docz/docs/09-miscellany/05-contributing.md b/docz/docs/09-miscellany/05-contributing.md
index 3505f65..aa59cdb 100644
--- a/docz/docs/09-miscellany/05-contributing.md
+++ b/docz/docs/09-miscellany/05-contributing.md
@@ -81,19 +81,92 @@ Initial setup:
0) Ensure mercurial, subversion, and NodeJS are installed. The WSL instructions
will have installed these dependencies, so WSL users can skip to step 1.
-On Linux:
+:::note
+
+[The official NodeJS site](https://nodejs.org/en/download/) provides installers
+for "LTS" and "Current" releases. The "LTS" version should be installed.
+
+:::
+
+Mercurial and Subversion:
+
+
+
+
+On Linux, install using the system package manager. Debian and Ubuntu use `apt`:
```bash
sudo apt-get install mercurial subversion
```
-On MacOS, install using Homebrew:
+Other Linux distributions may use other package managers.
+
+Steam Deck (click to show)
+
+Desktop Mode on the Steam Deck uses `pacman`. It also requires a few steps.
+
+0) Switch to Desktop mode and open `Konsole`
+
+1) Set a password for the user by running `passwd` and following instructions.
+
+2) Disable read-only mode:
+
+```bash
+sudo steamos-readonly disable
+```
+
+(When prompted, enter the password assigned in step 1)
+
+3) Configure keyring:
+
+```bash
+echo "keyserver hkps://keyserver.ubuntu.com" >> /etc/pacman.d/gnupg/gpg.conf
+sudo pacman-key --init
+sudo pacman-key --populate
+sudo pacman-key --refresh-keys
+```
+
+4) Install dependencies:
+
+```bash
+yay -S base-devel mercurial subversion
+```
+
+
+
+
+
+
+On MacOS, install using Homebrew.
+
+0) Open a terminal window and install Homebrew:
+
+```bash
+/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
+```
+
+1) Close the window, open a new terminal window, and disable analytics:
+
+```bash
+brew analytics off
+```
+
+To confirm analytics are disabled, run
+
+```bash
+brew analytics state
+```
+
+It should print `Analytics are disabled.`
+
+2) Install Mercurial and Subversion:
```bash
brew install mercurial subversion
```
-NodeJS installers can be found at the project homepage.
+
+
1) Install NodeJS modules for building the scripts
@@ -105,6 +178,15 @@ npm install
sudo npm i -g mocha@2.5.3 voc @sheetjs/uglify-js
```
+:::note Older Versions of Dependencies
+
+Some of the dependencies are wildly out of date. While SheetJS aims to run in
+older versions of NodeJS and browsers, some libraries have chosen to break
+backwards compatibility. The specific versions are used because they are known
+to work and known to produce consistent results.
+
+:::
+
2) Initialize the test files:
```bash
@@ -149,14 +231,6 @@ to produce the scripts.
To produce the dist files, run `make dist`. The dist files are updated in each
version release and *should not be committed between versions*.
-**A note on Older Versions**
-
-Some of the dependencies are wildly out of date. While SheetJS aims to run in
-older versions of NodeJS and browsers, some libraries have chosen to break
-backwards compatibility. The specific versions are used because they are known
-to work and known to produce consistent results.
-
-
## Tests
The `test_misc` target runs the targeted feature tests. It should take 5-10