diff --git a/docs/alkiln/components/_scenario_folder_contents.js b/docs/alkiln/components/_scenario_folder_contents.js
deleted file mode 100644
index 6bb40c80d..000000000
--- a/docs/alkiln/components/_scenario_folder_contents.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import Link from '@docusaurus/Link';
-
-export const ScenarioDir = () => {
- //
- return (
-
-
- An individual report.txt
-
-
- Another copy of error screenshots and html files
-
-
- Pictures you took of screens along with their associated HTML files
-
-
- Files you downloaded
-
-
- JSON variables you compared
-
-
- Accessibility failures
-
-
- );
-}
-
-
-
-
-
-
-
diff --git a/docs/alkiln/components/_secure_env_vars.md b/docs/alkiln/components/_secure_env_vars.md
deleted file mode 100644
index 0ba23c4a4..000000000
--- a/docs/alkiln/components/_secure_env_vars.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Since [workflow environment variables](/docs/alkiln/writing_tests.mdx#env-vars) might hold sensitive information, ALKiln avoids taking pictures or downloading the HTML of pages that use environment variables, even when the test has an error on that page. ALKiln avoids printing the value of an environment variable anywhere in the [report](/docs/alkiln/writing_tests.mdx#reports) or in the [console log](/docs/alkiln/writing_tests.mdx#console).
-
-
diff --git a/docs/alkiln/components/_with_secrets.md b/docs/alkiln/components/_with_secrets.md
deleted file mode 100644
index 625ed344c..000000000
--- a/docs/alkiln/components/_with_secrets.md
+++ /dev/null
@@ -1 +0,0 @@
-If you have an organization and want to use these values in multiple repositories, you can use [organization GitHub secrets](/docs/alkiln/writing_tests.mdx#org-secrets). In that case, your workflow file code would look more like this:
\ No newline at end of file
diff --git a/docs/archive/bootcamp.md b/docs/archive/bootcamp.md
index e57c147f1..b82a3553a 100644
--- a/docs/archive/bootcamp.md
+++ b/docs/archive/bootcamp.md
@@ -2,7 +2,7 @@
id: bootcamp
title: Suffolk LIT Lab's Document Assembly Line Bootcamp
sidebar_label: Bootcamp
-slug: /archive/bootcamp
+slug: bootcamp
---
:::info
@@ -46,9 +46,9 @@ After signing up, you should have received invites to our docassemble server (ht
Resources from the session:
-* [Running templates through the Weaver](weaver_overview.md)
-* [Labeling PDF variables](pdf_templates.md)
-* [Naming Variables Quick Reference](doc_vars_reference.md)
+* [Running templates through the Weaver](../authoring/weaver_overview.md)
+* [Labeling PDF variables](../authoring/pdf_templates.md)
+* [Naming Variables Quick Reference](../authoring/doc_vars_reference.md)
* [The LIST taxonomy](https://taxonomy.legal/)
Homework:
@@ -78,7 +78,7 @@ additional questions.
-* [Using Github in Docassemble](github.md)
+* [Using Github in Docassemble](../authoring/github.md)
* Customizing basic branding with the [ALThemeTemplate](https://github.com/SuffolkLITLab/docassemble-ALThemeTemplate) package.
* Logo
* Intro screen
diff --git a/docs/efiling/case_search_results.png b/docs/assets/case_search_results.png
similarity index 100%
rename from docs/efiling/case_search_results.png
rename to docs/assets/case_search_results.png
diff --git a/docs/efiling/case_search_start.png b/docs/assets/case_search_start.png
similarity index 100%
rename from docs/efiling/case_search_start.png
rename to docs/assets/case_search_start.png
diff --git a/docs/framework/reminders_question.png b/docs/assets/reminders_question.png
similarity index 100%
rename from docs/framework/reminders_question.png
rename to docs/assets/reminders_question.png
diff --git a/docs/customizing_interview.md b/docs/authoring/customizing_interview.md
similarity index 97%
rename from docs/customizing_interview.md
rename to docs/authoring/customizing_interview.md
index ac5e00596..d5a532080 100644
--- a/docs/customizing_interview.md
+++ b/docs/authoring/customizing_interview.md
@@ -2,7 +2,7 @@
id: customizing_interview
title: Editing your interview
sidebar_label: Editing your interview
-slug: /customizing_interview
+slug: customizing_interview
---
## Edit your completed draft interview in the Docassemble playground
@@ -34,7 +34,7 @@ quite right, perhaps something as simple as a typo.
## Work towards a readable, usable interview
You should also take this chance to review our guidance about
-[writing good questions](/docs/question_style_overview.md). While you edit
+[writing good questions](../style_guide/question_style_overview.md). While you edit
your interview, work steadily to make it better.
## Getting the draft into your playground
@@ -56,11 +56,11 @@ Before downloading the package, turn off that behavior:
First, create a new "Project" in your playground. Using projects will
help you keep your Docassemble code organized.
-
+
Next, upload this file to the Docassemble playground's `Packages` folder.
-
+
## How to edit your interview
@@ -76,7 +76,7 @@ Scroll through and take a look at the code. You will see:
that are asked on each screen
You do not need to understand all of the code. Absorb what you can, and feel free
-to experiment. Save your code often, preferably to a [GitHub](/docs/github) repository.
+to experiment. Save your code often, preferably to a [GitHub](../authoring/github.md) repository.
You will likely start by clicking the "Save and Run" button to try running your
interview through to the end. Note any awkward wording or changes you want to make.
@@ -84,7 +84,7 @@ interview through to the end. Note any awkward wording or changes you want to ma
Use the `id` that is on the top of each screen to find the screen that you want to change.
Then, change the text that you want to change, or change the order of fields.
-
+
Below we describe some of the most common starting customizations you will make,
especially changes that interact with an Assembly Line convention.
@@ -436,7 +436,7 @@ content: |
We usually don't recommend using the other options,
which include help for the whole page (it comes too late) or `terms` (they get very cluttered very quickly).
-A more complete guide to [helping your user](/docs/coding_style/yaml_interface.md#adding-help-in-context).
+A more complete guide to [helping your user](../coding_style/yaml_interface.md#adding-help-in-context).
## Why is this question getting asked?!!!
@@ -754,4 +754,4 @@ with the blinking cursor.
If you want to discard your changes and start over, upload the package .ZIP file
to your playground again. This will wipe out all of your changes.
-Use [GitHub](/docs/github) regularly to let you restore your work from a point in time.
+Use [GitHub](../authoring/github.md) regularly to let you restore your work from a point in time.
diff --git a/docs/doc_vars_reference.md b/docs/authoring/doc_vars_reference.md
similarity index 97%
rename from docs/doc_vars_reference.md
rename to docs/authoring/doc_vars_reference.md
index b47a29955..96f8b765f 100644
--- a/docs/doc_vars_reference.md
+++ b/docs/authoring/doc_vars_reference.md
@@ -2,7 +2,7 @@
id: document_variables_reference
title: Field labels to use in template files
sidebar_label: Field labels to use in template files
-slug: /label_variables
+slug: label_variables
---
The Document Assembly Line framework can help you automate templates that use any
@@ -11,8 +11,8 @@ that we list below for full compatibility.
## Example documents
-- [A fully labeled PDF](./assets/generic_motion_family_law.pdf)
-- [The DOCX version of the same motion](./assets/generic_motion_family_law.docx)
+- [A fully labeled PDF](../assets/generic_motion_family_law.pdf)
+- [The DOCX version of the same motion](../assets/generic_motion_family_law.docx)
:::info Use a custom AI assistant for labeling instead
@@ -48,12 +48,12 @@ rules below to add as many custom labels as you need.
#### Labels should be valid Python variable names that start with a letter
PDF and DOCX `labels` should also work as valid [Python variable
-names](/docs/coding_style_guide/python). The basic rule is that Python variable names
+names](../coding_style/python.md). The basic rule is that Python variable names
need to start with a letter and can only contain letters, digits, and the `_`
underscore character. Some variable names are
-[reserved](framework/reserved_keywords.md) and have a special meaning inside
+[reserved](../components/AssemblyLine/reserved_keywords.md) and have a special meaning inside
AssemblyLine interviews. You should not use a variable name on the
-[reserved](framework/reserved_keywords.md) list. Doing so can lead to
+[reserved](../components/AssemblyLine/reserved_keywords.md) list. Doing so can lead to
hard to track bugs.
#### Variable names are case sensitive - make them all lowercase
@@ -395,4 +395,4 @@ your edited template directly to the Docassemble playground's templates folder.
## See also
-- [List of reserved variable names](framework/reserved_keywords.md)
\ No newline at end of file
+- [List of reserved variable names](../components/AssemblyLine/reserved_keywords.md)
\ No newline at end of file
diff --git a/docs/docx_templates.md b/docs/authoring/docx_templates.md
similarity index 98%
rename from docs/docx_templates.md
rename to docs/authoring/docx_templates.md
index 8298ba240..1ee458592 100644
--- a/docs/docx_templates.md
+++ b/docs/authoring/docx_templates.md
@@ -2,7 +2,7 @@
id: docx_templates
title: Working with DOCX files
sidebar_label: Working with DOCX files
-slug: /docx
+slug: docx
---
:::tip
@@ -193,7 +193,7 @@ each condition.
### Use `output_checkbox()` for conditional checkbox fields that look like paper forms
In some cases, you need to make your Word Document look like a document that was
-filled in by hand. [`output_checkbox()`](https://assemblyline.suffolklitlab.org/docs/framework/altoolbox#shorthand-function-to-display-a-checkbox-in-replace-of-a-truefalse-boolean-value-in-a-docx-template) can be used to add a checkbox in-line in your document.
+filled in by hand. [`output_checkbox()`](../components/ALToolbox/altoolbox_overview.md#shorthand-function-to-display-a-checkbox-in-replace-of-a-truefalse-boolean-value-in-a-docx-template) can be used to add a checkbox in-line in your document.
These two expressions are equivalent, but the second version takes substantially less
space in your template:
diff --git a/docs/authoring/dynamic_phrasing_based_on_values.md b/docs/authoring/dynamic_phrasing_based_on_values.md
index 06c561532..a1264a511 100644
--- a/docs/authoring/dynamic_phrasing_based_on_values.md
+++ b/docs/authoring/dynamic_phrasing_based_on_values.md
@@ -2,7 +2,7 @@
id: dynamic_phrasing_based_on_values
title: Dynamic phrasing based on values (gender, list length, and more)
sidebar_label: Dynamic phrasing based on values
-slug: /authoring/dynamic_phrasing_based_on_values
+slug: dynamic_phrasing_based_on_values
---
Docassemble has several clever features that you can use in templates
diff --git a/docs/github.md b/docs/authoring/github.md
similarity index 99%
rename from docs/github.md
rename to docs/authoring/github.md
index 3a4c15b36..48eb92df9 100644
--- a/docs/github.md
+++ b/docs/authoring/github.md
@@ -2,7 +2,7 @@
id: github
title: Using GitHub with Docassemble
sidebar_label: "Using GitHub"
-slug: /github
+slug: github
---
diff --git a/docs/name_formats.md b/docs/authoring/name_formats.md
similarity index 99%
rename from docs/name_formats.md
rename to docs/authoring/name_formats.md
index 1161f49c4..341ee4f74 100644
--- a/docs/name_formats.md
+++ b/docs/authoring/name_formats.md
@@ -2,7 +2,7 @@
id: name_formats
title: Name formats
sidebar_label: Name formats
-slug: /naming
+slug: naming
---
In programming languages (and sometimes in computer files and names in general),
diff --git a/docs/pdf_templates.md b/docs/authoring/pdf_templates.md
similarity index 99%
rename from docs/pdf_templates.md
rename to docs/authoring/pdf_templates.md
index d74d426b2..d8d04cb99 100644
--- a/docs/pdf_templates.md
+++ b/docs/authoring/pdf_templates.md
@@ -2,7 +2,7 @@
id: pdf_templates
title: Working with PDF files
sidebar_label: Working with PDF files
-slug: /pdfs
+slug: pdfs
---
:::tip
diff --git a/docs/weaver_code_anatomy.md b/docs/authoring/weaver_code_anatomy.md
similarity index 99%
rename from docs/weaver_code_anatomy.md
rename to docs/authoring/weaver_code_anatomy.md
index 07ba0182a..78f15fa69 100644
--- a/docs/weaver_code_anatomy.md
+++ b/docs/authoring/weaver_code_anatomy.md
@@ -4,7 +4,7 @@ title: |
Appendix: Understanding the YAML code
sidebar_label: |
Appendix: Understanding the YAML code
-slug: /generated_yaml
+slug: generated_yaml
---
:::warning
@@ -85,7 +85,7 @@ code: |
1. `original_form` is a link to the original, fillable PDF form that this interview is automating, if it exists.
1. đźš§ `allowed courts` allows your code to decide which courts to let the user pick from when they need to pick their court, usually used in conjunction with [ALThemeTemplate](https://github.com/SuffolkLITLab/docassemble-ALThemeTemplate).
1. `categories` is the [LIST taxonomy](https://taxonomy.legal/) code for this interview, which can be used by your organization to organize your interviews.
-1. `attachment block variable` used to be used in the code that sends documents to courts, but now the [ALDocument object block](reference/AssemblyLine/al_document#aldocument-objects) is used instead.
+1. `attachment block variable` used to be used in the code that sends documents to courts, but now the [ALDocument object block](../components/AssemblyLine/al_document#aldocument-objects) is used instead.
1. `logic block variable` should also no longer be used.
1. `typical role`: controls which questions the user gets asked about themselves and other parties.
diff --git a/docs/weaver_overview.md b/docs/authoring/weaver_overview.md
similarity index 96%
rename from docs/weaver_overview.md
rename to docs/authoring/weaver_overview.md
index 220941d93..be0134986 100644
--- a/docs/weaver_overview.md
+++ b/docs/authoring/weaver_overview.md
@@ -4,7 +4,7 @@ title: |
"Weaving" your form into a draft interview
sidebar_label: |
"Weaving" your form into a draft interview
-slug: /generating_code
+slug: generating_code
---
@@ -92,7 +92,7 @@ When you have finished using the Weaver, download your package. This will put a
Next, upload this file to the Docassemble playground's `Packages` folder.
-
+
:::warning If you are using Safari on a Mac OS computer
Safari, by default, will turn your downloaded package into
@@ -108,6 +108,6 @@ Before downloading the package, turn off that behavior:
## Example of a page in a Docassemble interview
A page might look like this:
-
+
You can see [the ALWeaver docassemble package on GitHub](https://github.com/suffolkLITLab/docassemble-ALWeaver)
diff --git a/docs/writing_review_screen.md b/docs/authoring/writing_review_screen.md
similarity index 97%
rename from docs/writing_review_screen.md
rename to docs/authoring/writing_review_screen.md
index 273e59210..1eb167ba3 100644
--- a/docs/writing_review_screen.md
+++ b/docs/authoring/writing_review_screen.md
@@ -4,7 +4,7 @@ title: |
Writing a Review Screen
sidebar_label: |
Review Screen
-slug: /review_screen
+slug: review_screen
---
## Overview
@@ -57,7 +57,7 @@ Download the primary YAML files of your interview. You can download the YAML fil
* from GitHub. For example, for the [Motion to Stay Eviction](https://github.com/SuffolkLITLab/docassemble-MotionToStayEviction/), you can navigate
to [the primary YAML file, SP6A.yml](https://github.com/SuffolkLITLab/docassemble-MotionToStayEviction/blob/main/docassemble/MotionToStayEviction/data/questions/SP6A.yml), and click the "download raw file" button.
- 
+ 
You should download all of the YAML files that define variables used in your interview. The more YAML files you download, the more content you might have to
cut from the generated review screen.
@@ -178,7 +178,7 @@ There are a few sections of the generated review screen YAML:
But your interview might include [objects](https://docassemble.org/docs/objects.html#Individual) and lists of objects, like a list of plaintiffs and another list of defendants. Instead of re-asking every question that someone answered to fill the list, docassemble brings to the user to a `revisit` screen that shows each item in the list to the user, and lets them choose which to edit individually.
- If you used the [Weaver](https://assemblyline.suffolklitlab.org/docs/label_variables#standard-roles) to make your interview, your interview might have a few different lists for people,
+ If you used the [Weaver](doc_vars_reference.md#standard-roles) to make your interview, your interview might have a few different lists for people,
like `users`, `other_parties`, `children`, `debt_collectors`, and `guardians`.
4. The `revisit` screens each show the `table` attribute of the `DAList`. If needed, blocks defining the table for the lists will appear at the end of the generated review file.
diff --git a/docs/coding_style/accessibility.md b/docs/coding_style/accessibility.md
index a1c25e529..ac5dc5d49 100644
--- a/docs/coding_style/accessibility.md
+++ b/docs/coding_style/accessibility.md
@@ -2,7 +2,7 @@
id: accessibility
title: Making your interview accessible
sidebar_label: Interview accessibility
-slug: /coding_style_guide/accessibility
+slug: accessibility
---
**Web Accessibility** is the practice of making your website usable by many different users, such as those who use keyboard controls or screen readers.
@@ -11,7 +11,7 @@ Making your guided interviews accessible is first and foremost about making them
Other parts of web accessibility involve writing the interview in a way that the user's browser and other accessibility tools (like screen readers) can understand. Docassemble [handles many of these things](https://docassemble.org/docs/accessibility.html) for you, but there are some parts that you'll have to address when writing your interview.
-To help you find accessibility problems in your interview you can use the [WAVE browser extension](https://wave.webaim.org/extension/), or if you want to check accessibility of your interview automatically, you can use the [ALKiln testing framework](../alkiln/automated_testing.mdx#accessibility).
+To help you find accessibility problems in your interview you can use the [WAVE browser extension](https://wave.webaim.org/extension/), or if you want to check accessibility of your interview automatically, you can use the [ALKiln testing framework](../components/ALKiln/automated_testing.mdx#accessibility).
## Use colors that contrast strongly with their backgrounds
diff --git a/docs/coding_style/coding_style_overview.md b/docs/coding_style/coding_style_overview.md
index 1b245e351..bd64a7920 100644
--- a/docs/coding_style/coding_style_overview.md
+++ b/docs/coding_style/coding_style_overview.md
@@ -2,7 +2,7 @@
id: coding_style_overview
title: Docassemble Coding Style Guide
sidebar_label: Coding Style
-slug: /coding_style_guide
+slug: overview
---
diff --git a/docs/coding_style/defense.md b/docs/coding_style/defense.md
index afe4286eb..64af6dc0b 100644
--- a/docs/coding_style/defense.md
+++ b/docs/coding_style/defense.md
@@ -4,7 +4,7 @@ title: |
"Safe" coding
sidebar_label: |
"Safe" coding
-slug: /coding_style_guide/defense
+slug: defense
---
## Use Docassemble lists, dictionaries, and sets, or subclasses
diff --git a/docs/coding_style/python.md b/docs/coding_style/python.md
index 34c46bcd8..f5e4b87c4 100644
--- a/docs/coding_style/python.md
+++ b/docs/coding_style/python.md
@@ -2,7 +2,7 @@
id: python
title: Python
sidebar_label: Python
-slug: /coding_style_guide/python
+slug: python
---
## Use Python conventions for Python code
diff --git a/docs/coding_style/yaml.md b/docs/coding_style/yaml.md
index 20bbf5daa..99be54304 100644
--- a/docs/coding_style/yaml.md
+++ b/docs/coding_style/yaml.md
@@ -2,7 +2,7 @@
id: yaml
title: Interview files
sidebar_label: Interview files
-slug: /coding_style_guide/yaml
+slug: yaml
---
Docassemble interviews are written in
@@ -75,7 +75,7 @@ trust with your end user.
Avoid using numbers, underscores, and other markers to indicate that you have a
"final", "draft", etc. interview even during the editing process, as these have
a chance of getting leaked to the public. Instead, use [version
-control](/docs/github) to track the history of your files as your project develops.
+control](../authoring/github.md) to track the history of your files as your project develops.
### Use a small number of YAML files for each project
diff --git a/docs/coding_style/yaml_dynamic.md b/docs/coding_style/yaml_dynamic.md
index ba3e4d428..19330cbd9 100644
--- a/docs/coding_style/yaml_dynamic.md
+++ b/docs/coding_style/yaml_dynamic.md
@@ -2,7 +2,7 @@
id: yaml_dynamic
title: Making your interview dynamic
sidebar_label: Making your interview dynamic
-slug: /coding_style_guide/yaml_dynamic
+slug: yaml_dynamic
---
### Use the `depends on` modifier when setting values with code
diff --git a/docs/coding_style/yaml_interface.md b/docs/coding_style/yaml_interface.md
index 22179eb38..e2974e55b 100644
--- a/docs/coding_style/yaml_interface.md
+++ b/docs/coding_style/yaml_interface.md
@@ -2,7 +2,7 @@
id: yaml_interface
title: Choosing interface options
sidebar_label: Choosing interface options
-slug: /coding_style_guide/yaml_interface
+slug: yaml_interface
---
## Use radio buttons for short lists of options
diff --git a/docs/coding_style/yaml_lists.md b/docs/coding_style/yaml_lists.md
index 809c3c0ca..12b0805da 100644
--- a/docs/coding_style/yaml_lists.md
+++ b/docs/coding_style/yaml_lists.md
@@ -2,7 +2,7 @@
id: yaml_lists
title: Collecting items in lists
sidebar_label: Collecting items in lists
-slug: /coding_style_guide/yaml_lists
+slug: yaml_lists
---
## Guiding Principles
diff --git a/docs/coding_style/yaml_structure.md b/docs/coding_style/yaml_structure.md
index 1e575ed63..6f734246d 100644
--- a/docs/coding_style/yaml_structure.md
+++ b/docs/coding_style/yaml_structure.md
@@ -2,7 +2,7 @@
id: yaml_structure
title: Structuring your interview
sidebar_label: Structuring your interview
-slug: /coding_style_guide/yaml_structure
+slug: yaml_structure
---
### Use a logical order for blocks inside your YAML file
diff --git a/docs/coding_style/yaml_translation.md b/docs/coding_style/yaml_translation.md
index d44cc4b3a..1bfaba326 100644
--- a/docs/coding_style/yaml_translation.md
+++ b/docs/coding_style/yaml_translation.md
@@ -2,7 +2,7 @@
id: yaml_translation
title: Planning for translation and flexible updates
sidebar_label: Planning for translation
-slug: /coding_style_guide/yaml_translation
+slug: yaml_translation
---
### Use labeled options with the `choices` modifier
diff --git a/docs/alkiln/alkiln_advanced.mdx b/docs/components/ALKiln/advanced.mdx
similarity index 99%
rename from docs/alkiln/alkiln_advanced.mdx
rename to docs/components/ALKiln/advanced.mdx
index 96dce852b..40bda4689 100644
--- a/docs/alkiln/alkiln_advanced.mdx
+++ b/docs/components/ALKiln/advanced.mdx
@@ -2,7 +2,7 @@
id: alkiln_advanced
title: ALKiln advanced topics
sidebar_label: Advanced
-slug: /alkiln/advanced
+slug: advanced
---
đźš§ This page is a stub and sections will be added as resources allow.
diff --git a/docs/alkiln/automated_testing.mdx b/docs/components/ALKiln/automated_testing.mdx
similarity index 98%
rename from docs/alkiln/automated_testing.mdx
rename to docs/components/ALKiln/automated_testing.mdx
index 771b28541..85d6687db 100644
--- a/docs/alkiln/automated_testing.mdx
+++ b/docs/components/ALKiln/automated_testing.mdx
@@ -2,7 +2,7 @@
id: alkiln_about
title: ALKiln automated testing
sidebar_label: Overview
-slug: /alkiln
+slug: alkiln
---
@@ -31,7 +31,7 @@ You can also read the [presentation slides themselves](https://docs.google.com/p
([Moving](setup.mdx))
-You can run ALKiln in a variety of ways, each with their [pros and cons and other details](alkiln_advanced.mdx#multiple-ways-to-run-alkiln). The section below is about setting up different ways of running tests.
+You can run ALKiln in a variety of ways, each with their [pros and cons and other details](advanced.mdx#multiple-ways-to-run-alkiln). The section below is about setting up different ways of running tests.
### Set up for ALKilnInThePlayground
@@ -324,7 +324,7 @@ The last example makes sure that the date is 10 years in the past, ensuring that
### trigger
-(We recommend you [switch to a 2-column Story Table](https://assemblyline.suffolklitlab.org/docs/alkiln/trouble/#deprecated-story-tables). We are [moving](writing_tests.mdx#special-html) this old 3-column Story Table documentation.)
+(We recommend you [switch to a 2-column Story Table](troubleshooting.mdx#deprecated-story-tables). We are [moving](writing_tests.mdx#special-html) this old 3-column Story Table documentation.)
`trigger` is an optional value in most cases. It is only mandatory for rows that use [index variables](https://docassemble.org/docs/fields.html#index%20variables), like `i`, `j`, or `k`, or [generic objects](https://docassemble.org/docs/fields.html#generic) (`x`).
@@ -803,7 +803,7 @@ to get an element on the page. You can add any additional wait time after tappin
([Moving](writing_tests.mdx#tap-stay))
-2. You can also tap on HTML elements without navigating. For example, you can tap on [collapsible content](https://assemblyline.suffolklitlab.org/docs/framework/altoolbox#collapsible-help-text) to show the text inside.
+2. You can also tap on HTML elements without navigating. For example, you can tap on [collapsible content](../ALToolbox/altoolbox_overview.md#collapsible-help-text) to show the text inside.
```
When I tap the "#an_id .al_toggle" element and stay on the same page
@@ -815,7 +815,7 @@ You might want to add a `wait` Step after that to let the contents become visibl
([Moving](writing_tests.mdx#tap-tab))
-Use the `tap tab` Step to interact with [ALToolbox tabs](framework/altoolbox.md#display-a-series-of-tabs). ALKiln will tap on the tab and then wait until the tab contents are fully visible.
+Use the `tap tab` Step to interact with [ALToolbox tabs](../ALToolbox/altoolbox_overview.md#display-a-series-of-tabs). ALKiln will tap on the tab and then wait until the tab contents are fully visible.
```
When I tap the "TabGroup-specific_tab_name-tab" tab
@@ -1384,7 +1384,7 @@ When you want to update to a new version of the ALKiln, update that sha manually
([Moving](security.mdx#freeze))
-This section requires prior technical knowledge about [npm](https://docs.npmjs.com/about-npm) and [GitHub workflow files](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions). Feel free to [ask us](https://assemblyline.suffolklitlab.org/docs/#get-involved) any questions you might have.
+This section requires prior technical knowledge about [npm](https://docs.npmjs.com/about-npm) and [GitHub workflow files](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions). Feel free to [ask us](../../get_started/intro.md#get-involved) any questions you might have.
You can use an exact npm version of ALKiln by using your workflow file's `ALKILN_VERSION` input. The default uses a carat, for example `^4.0.0`. That means it will use the latest minor or patch in version 4 of ALKiln. You can instead use an exact version, for example `4.3.0`. See our section on [setting optional inputs](#optional-inputs).
@@ -1486,7 +1486,7 @@ Among other things, the workflow file:
You can also use the whole suite of GitHub's workflow and action functionality to do other things, like creating issues when tests fail.
-These following sections probably require prior technical knowledge about [GitHub workflow files](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions). Feel free to [ask us](https://assemblyline.suffolklitlab.org/docs/#get-involved) any questions you might have.
+These following sections probably require prior technical knowledge about [GitHub workflow files](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions). Feel free to [ask us](../../get_started/intro.md#get-involved) any questions you might have.
### Required inputs
diff --git a/docs/alkiln/components/_a11y.md b/docs/components/ALKiln/components/_a11y.md
similarity index 100%
rename from docs/alkiln/components/_a11y.md
rename to docs/components/ALKiln/components/_a11y.md
diff --git a/docs/alkiln/components/_contribute_to_docs.md b/docs/components/ALKiln/components/_contribute_to_docs.md
similarity index 100%
rename from docs/alkiln/components/_contribute_to_docs.md
rename to docs/components/ALKiln/components/_contribute_to_docs.md
diff --git a/docs/alkiln/components/_need_proxy_vars.md b/docs/components/ALKiln/components/_need_proxy_vars.md
similarity index 70%
rename from docs/alkiln/components/_need_proxy_vars.md
rename to docs/components/ALKiln/components/_need_proxy_vars.md
index 8dd6c71cf..af1174c66 100644
--- a/docs/alkiln/components/_need_proxy_vars.md
+++ b/docs/components/ALKiln/components/_need_proxy_vars.md
@@ -1,3 +1,3 @@
-If your interview uses [generic objects](https://docassemble.org/docs/fields.html#generic) (`x`) or [index variables](https://docassemble.org/docs/fields.html#index%20variables) (`i`, `j`, `k`, etc), you **must** have [special HTML](/docs/alkiln/writing_tests.mdx#special-html) in your interview to set the values of variables.
+If your interview uses [generic objects](https://docassemble.org/docs/fields.html#generic) (`x`) or [index variables](https://docassemble.org/docs/fields.html#index%20variables) (`i`, `j`, `k`, etc), you **must** have [special HTML](writing#special-html) in your interview to set the values of variables.
\ No newline at end of file
diff --git a/docs/alkiln/components/_robot_stage.js b/docs/components/ALKiln/components/_robot_stage.js
similarity index 100%
rename from docs/alkiln/components/_robot_stage.js
rename to docs/components/ALKiln/components/_robot_stage.js
diff --git a/docs/components/ALKiln/components/_scenario_folder_contents.js b/docs/components/ALKiln/components/_scenario_folder_contents.js
new file mode 100644
index 000000000..c2df4f112
--- /dev/null
+++ b/docs/components/ALKiln/components/_scenario_folder_contents.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import Link from '@docusaurus/Link';
+
+export const ScenarioDir = () => {
+ //
+ return (
+
+
+ An individual report.txt
+
+
+ Another copy of error screenshots and html files
+
+
+ Pictures you took of screens along with their associated HTML files
+
+
+ Files you downloaded
+
+
+ JSON variables you compared
+
+
+ Accessibility failures
+
+
+ );
+}
+
+
+
+
+
+
+
diff --git a/docs/components/ALKiln/components/_secure_env_vars.md b/docs/components/ALKiln/components/_secure_env_vars.md
new file mode 100644
index 000000000..ba2ad99a8
--- /dev/null
+++ b/docs/components/ALKiln/components/_secure_env_vars.md
@@ -0,0 +1,7 @@
+Since [workflow environment variables](writing#env-vars) might hold sensitive information, ALKiln avoids taking pictures or downloading the HTML of pages that use environment variables, even when the test has an error on that page. ALKiln avoids printing the value of an environment variable anywhere in the [report](writing#reports) or in the [console log](writing#console).
+
+
diff --git a/docs/alkiln/components/_test_types.js b/docs/components/ALKiln/components/_test_types.js
similarity index 68%
rename from docs/alkiln/components/_test_types.js
rename to docs/components/ALKiln/components/_test_types.js
index 383941df1..47c799d7f 100644
--- a/docs/alkiln/components/_test_types.js
+++ b/docs/components/ALKiln/components/_test_types.js
@@ -6,7 +6,7 @@ export const GTOYS = (props) => {
if ( props.plain === true ) {
return GitHub+You™
} else {
- return GitHub+You™
+ return GitHub+You™
}
}
@@ -15,7 +15,7 @@ export const AutoDIY = (props) => {
if ( props.plain === true ) {
return ALKilnInThePlayground™
} else {
- return ALKilnInThePlayground™
+ return ALKilnInThePlayground™
}
}
@@ -24,6 +24,6 @@ export const KittyLitter = (props) => {
if ( props.plain === true ) {
return GitHub Sandbox™
} else {
- return GitHub Sandbox™
+ return GitHub Sandbox™
}
}
diff --git a/docs/alkiln/components/_typo_shame_is_real.md b/docs/components/ALKiln/components/_typo_shame_is_real.md
similarity index 100%
rename from docs/alkiln/components/_typo_shame_is_real.md
rename to docs/components/ALKiln/components/_typo_shame_is_real.md
diff --git a/docs/components/ALKiln/components/_with_secrets.md b/docs/components/ALKiln/components/_with_secrets.md
new file mode 100644
index 000000000..8de0061cb
--- /dev/null
+++ b/docs/components/ALKiln/components/_with_secrets.md
@@ -0,0 +1 @@
+If you have an organization and want to use these values in multiple repositories, you can use [organization GitHub secrets](writing#org-secrets). In that case, your workflow file code would look more like this:
\ No newline at end of file
diff --git a/docs/alkiln/older_versions.mdx b/docs/components/ALKiln/deprecated.mdx
similarity index 93%
rename from docs/alkiln/older_versions.mdx
rename to docs/components/ALKiln/deprecated.mdx
index 13284cc88..2eddf7be8 100644
--- a/docs/alkiln/older_versions.mdx
+++ b/docs/components/ALKiln/deprecated.mdx
@@ -2,7 +2,7 @@
id: alkiln_deprecated
title: Older versions of ALKiln documentation
sidebar_label: WIP Older versions
-slug: /alkiln/old
+slug: old
---
:::warning
@@ -18,5 +18,5 @@ Our documentation changes over time. It can be jarring for users comfortable and
To be archived after approval of changes:
- [Overview](automated_testing.mdx)
-- [Advanced](alkiln_advanced.mdx)
+- [Advanced](advanced.mdx)
diff --git a/docs/alkiln/intro.mdx b/docs/components/ALKiln/intro.mdx
similarity index 98%
rename from docs/alkiln/intro.mdx
rename to docs/components/ALKiln/intro.mdx
index b74a2e18a..e30fe23ea 100644
--- a/docs/alkiln/intro.mdx
+++ b/docs/components/ALKiln/intro.mdx
@@ -2,7 +2,7 @@
id: alkiln_intro
title: ALKiln automated testing
sidebar_label: WIP Intro
-slug: /alkiln/intro
+slug: intro
---
:::warning
@@ -37,7 +37,7 @@ ALKiln topics you can explore:
- [Setting up](setup.mdx): Learn different ways to install ALKiln for your package or organization and information about those test types
- [Writing tests](writing_tests.mdx): What you need to know to effectively write tests
- [Troubleshooting](troubleshooting.mdx): Help with common errors and warnings
-- Support for [older Versions](older_versions.mdx): Guides for using older out-of-date features
+- Support for [older Versions](deprecated.mdx): Guides for using older out-of-date features
- [Frequently Asked Questions](writing_tests.mdx#faq) (FAQ): Find answers to common questions
- [Security](security.mdx): Find out how to stay safe by using best practices and how we protect you too
diff --git a/docs/alkiln/security.mdx b/docs/components/ALKiln/security.mdx
similarity index 99%
rename from docs/alkiln/security.mdx
rename to docs/components/ALKiln/security.mdx
index cb298fbcb..896c9e996 100644
--- a/docs/alkiln/security.mdx
+++ b/docs/components/ALKiln/security.mdx
@@ -2,7 +2,7 @@
id: alkiln_security
title: Security
sidebar_label: WIP Security
-slug: /alkiln/security
+slug: security
---
import SecureEnvVars from './components/\_secure_env_vars.md';
diff --git a/docs/alkiln/setup.mdx b/docs/components/ALKiln/setup.mdx
similarity index 99%
rename from docs/alkiln/setup.mdx
rename to docs/components/ALKiln/setup.mdx
index fcb63d4d2..2884335da 100644
--- a/docs/alkiln/setup.mdx
+++ b/docs/components/ALKiln/setup.mdx
@@ -2,7 +2,7 @@
id: alkiln_setup
title: Set up ALKiln tests
sidebar_label: WIP Setup/Installation
-slug: /alkiln/setup
+slug: setup
---
import { GTOYS, AutoDIY, KittyLitter } from './components/\_test_types.js';
diff --git a/docs/alkiln/troubleshooting.mdx b/docs/components/ALKiln/troubleshooting.mdx
similarity index 99%
rename from docs/alkiln/troubleshooting.mdx
rename to docs/components/ALKiln/troubleshooting.mdx
index 89d0c811c..8ca8215e5 100644
--- a/docs/alkiln/troubleshooting.mdx
+++ b/docs/components/ALKiln/troubleshooting.mdx
@@ -2,7 +2,7 @@
id: alkiln_troubleshooting
title: ALKiln troubleshooting and errors
sidebar_label: WIP Troubleshooting & errors
-slug: /alkiln/trouble
+slug: trouble
---
import { GTOYS, AutoDIY, KittyLitter } from './components/\_test_types.js';
diff --git a/docs/alkiln/writing_tests.mdx b/docs/components/ALKiln/writing_tests.mdx
similarity index 99%
rename from docs/alkiln/writing_tests.mdx
rename to docs/components/ALKiln/writing_tests.mdx
index fb694929f..62edae0fe 100644
--- a/docs/alkiln/writing_tests.mdx
+++ b/docs/components/ALKiln/writing_tests.mdx
@@ -1,11 +1,11 @@
---
-id: alkiln_writing
+id: alkiln_writing_tests
title: Writing ALKiln tests
sidebar_label: WIP Writing tests
-slug: /alkiln/writing
+slug: writing
---
-import styles from "../../src/css/images.module.css"
+import styles from "/src/css/images.module.css"
import NeedProxyVars from './components/\_need_proxy_vars.md';
import SecureEnvVars from './components/\_secure_env_vars.md';
@@ -627,7 +627,7 @@ This is the only way to explicitly wait after navigating to the new page. Some p
**The Step:**
-Use the "tap and stay" Step to tap on HTML elements without navigating to a new page. For example, you can tap on [collapsible content](https://assemblyline.suffolklitlab.org/docs/framework/altoolbox#collapsible-help-text) to show the text inside.
+Use the "tap and stay" Step to tap on HTML elements without navigating to a new page. For example, you can tap on [collapsible content](../ALToolbox/altoolbox_overview.md#collapsible-help-text) to show the text inside.
The Step format:
@@ -660,7 +660,7 @@ It is a good idea to add a [`wait` Step](#wait) after this Step to let the conte
**The Step:**
-Use the "tap tab" Step to interact with AssemblyLine's [ALToolbox tabs](framework/altoolbox.md#display-a-series-of-tabs). ALKiln will tap on the tab and then wait until the tab contents are fully visible.
+Use the "tap tab" Step to interact with AssemblyLine's [ALToolbox tabs](../ALToolbox/altoolbox_overview.md#display-a-series-of-tabs). ALKiln will tap on the tab and then wait until the tab contents are fully visible.
The Step format:
@@ -832,7 +832,7 @@ If an answer needs to have multiple lines, you can still only use one line in yo
### Dates {#dates}
-Dates are a specific kind of text value. ALKiln expects the format ##/##/####. For example, 06/26/2015. For [Assembly Line custom three-parts date fields](../framework/altoolbox#birthdate-and-threepartsdate-custom-data-types), ALKiln will assume the date format is dd/mm/yyyy.
+Dates are a specific kind of text value. ALKiln expects the format ##/##/####. For example, 06/26/2015. For [Assembly Line custom three-parts date fields](../ALToolbox/altoolbox_overview.md#birthdate-and-threepartsdate-custom-data-types), ALKiln will assume the date format is dd/mm/yyyy.
There is also [a special ALKiln value named `today`](#today).
@@ -2327,7 +2327,7 @@ Once the tests are finished, ALKiln creates the test run "artifacts" - files and
If the test start up process failed, ALKiln will be [unable to create artifacts](troubleshooting.mdx#no-artifacts).
-import Dig from '../assets/archaeology.png';
+import Dig from '../../assets/archaeology.png';
@@ -2537,7 +2537,7 @@ If your package is leaving out the al_package.yml file from the Assembly Line pa
### Testing unfinished code {#unstable-tip}
-If you are still developing your interview, you can still write a [simple test](setup#first-test) to make sure your interview at least loads without an error. You might want to wait till your code is more stable to write more tests.
+If you are still developing your interview, you can still write a [simple test](setup.mdx#first-test) to make sure your interview at least loads without an error. You might want to wait till your code is more stable to write more tests.
On the other hand, if there is a part of your interview that you think will stay pretty much the same, you can write tests that just go part-way through the interview to test just the stable part of the code. That way, you can work on adding more content and yet also be sure that the work you've already done stays working.
diff --git a/docs/framework/alrecipes.md b/docs/components/ALRecipes/alrecipes_overview.md
similarity index 93%
rename from docs/framework/alrecipes.md
rename to docs/components/ALRecipes/alrecipes_overview.md
index 4b095212a..b4947257f 100644
--- a/docs/framework/alrecipes.md
+++ b/docs/components/ALRecipes/alrecipes_overview.md
@@ -1,9 +1,8 @@
---
-id: alrecipes
-title: |
- ALRecipes
+id: alrecipes_overview
+title: ALRecipes
sidebar_label: ALRecipes
-slug: /framework/alrecipes
+slug: overview
---
This repository includes two groups of recipes, one group contains examples for the Document Assembly Line project, the other group contains generic docassemble interviews addressing specific needs.
@@ -22,7 +21,7 @@ These examples are created to handle scenarios that are currently unavailable in
These recipes are ready to be inserted into your interview. You can access them either from the live demo page, or more conveniently from your Playground's **Example blocks** area.
-
+
## Add AssemblyLine examples to your Playground
diff --git a/docs/framework/althemetemplate.md b/docs/components/ALThemeTemplate/althemetemplate_overview.md
similarity index 96%
rename from docs/framework/althemetemplate.md
rename to docs/components/ALThemeTemplate/althemetemplate_overview.md
index b3bac8dbd..3a90a8c2e 100644
--- a/docs/framework/althemetemplate.md
+++ b/docs/components/ALThemeTemplate/althemetemplate_overview.md
@@ -1,9 +1,9 @@
---
-id: althemetemplate
+id: althemetemplate_overview
title: |
ALThemeTemplate: Applying a Custom Theme or Brand
sidebar_label: ALThemeTemplate
-slug: /althemetemplate
+slug: overview
---
## Sharing a custom look and feel across multiple Assembly Line interviews
@@ -18,9 +18,9 @@ You can customize Docassemble, and Assembly Line interviews, with a Bootstrap 5
### Customizing the logo and title for Assembly Line interviews
You should also customize the:
-* [Title](framework/magic_variables.md#al_organization_title)
-* [Home page](framework/magic_variables.md#al_organization_homepage)
-* and [logo](framework/magic_variables.md#al_logo)
+* [Title](../AssemblyLine/magic_variables.md#al_organization_title)
+* [Home page](../AssemblyLine/magic_variables.md#al_organization_homepage)
+* and [logo](../AssemblyLine/magic_variables.md#al_logo)
### Creating a custom CSS theme with Bootstrap.build
@@ -123,7 +123,7 @@ $theme-colors: (
Once you have written your `custom.scss` file, you can use the
[ALDashboard](https://github.com/SuffolkLITLab/docassemble-ALDashboard) (which you can [install on
-your docassemble server](https://assemblyline.suffolklitlab.org/docs/installation#install-aldashboard))
+your docassemble server](../../get_started/installation.md#install-aldashboard))
to compile a custom Bootstrap theme. If you are associated with the Suffolk LIT Lab and have an account on
the Suffolk Development server, you can visit a [live version of the tool](https://apps-dev.suffolklitlab.org/start/ALDashboard/compile_bootstrap)
to try it out.
@@ -131,7 +131,7 @@ to try it out.
At the end of the tool, you can view what all of the different bootstrap components will look like with your theme.
If you want to change any of the colors, you can go back and edit your "custom.scss" file and regenerate the bootstrap theme.
-
+
Once you like the colors you've chosen, download the compiled file, and then add it
a docassemble project, in the `static` folder. You can then reference your new file
diff --git a/docs/reference/ALToolbox/al_income.md b/docs/components/ALToolbox/al_income.md
similarity index 100%
rename from docs/reference/ALToolbox/al_income.md
rename to docs/components/ALToolbox/al_income.md
diff --git a/docs/alincome/expenses.md b/docs/components/ALToolbox/al_income_expenses.md
similarity index 94%
rename from docs/alincome/expenses.md
rename to docs/components/ALToolbox/al_income_expenses.md
index af304d705..a6ad1e30c 100644
--- a/docs/alincome/expenses.md
+++ b/docs/components/ALToolbox/al_income_expenses.md
@@ -1,10 +1,9 @@
---
-id: expenses
+id: al_income_expenses
title: |
Expenses: ALExpense and ALExpenseList
-sidebar_label: |
- Expenses
-slug: /alincome/expenses
+sidebar_label: Expenses
+slug: ALIncome/expenses
---
The `ALExpenseList` is a class that helps you ask a user about their different expenses.
@@ -50,7 +49,7 @@ of code can be used in longer interviews as well.
Before you start, we'll assume that you:
* have access to a [developer account on a docassemble server](https://suffolklitlab.org/legal-tech-class/docs/classes/assembly-line/2020-assembly-line-assignment-1#before-you-get-started)
-* have the [`AssemblyLine` package installed on your server](https://assemblyline.suffolklitlab.org/docs/installation#run-the-installation-script), or have installed the [`ALToolbox` package](https://github.com/SuffolkLITLab/docassemble-ALToolbox) separately.
+* have the [`AssemblyLine` package installed on your server](../../get_started/installation.md#run-the-installation-script), or have installed the [`ALToolbox` package](https://github.com/SuffolkLITLab/docassemble-ALToolbox) separately.
* know [what the playground is](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#introduction-to-the-docassemble-playground) and [how to use it to develop a docassemble interview](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#hello-world)
* know [what "blocks" are](https://suffolklitlab.org/legal-tech-class/docs/yaml#documents) in docassemble
@@ -115,7 +114,7 @@ This will ask the user a few questions:
Here is what this question screen will look like:
- 
+ 
:::tip `display_name`
@@ -271,4 +270,4 @@ subquestion: |
-You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](https://assemblyline.suffolklitlab.org/docs/generated_yaml#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](https://assemblyline.suffolklitlab.org/docs/docx) will help DOCX users.
+You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](../../authoring/weaver_code_anatomy.md#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](../../authoring/docx_templates.md) will help DOCX users.
diff --git a/docs/alincome/itemizedjobs.md b/docs/components/ALToolbox/al_income_itemizedjobs.md
similarity index 87%
rename from docs/alincome/itemizedjobs.md
rename to docs/components/ALToolbox/al_income_itemizedjobs.md
index d05f33648..d1d06462d 100644
--- a/docs/alincome/itemizedjobs.md
+++ b/docs/components/ALToolbox/al_income_itemizedjobs.md
@@ -1,13 +1,9 @@
---
-id: itemizedjobs
+id: al_income_itemizedjobs
title: |
Itemized Jobs: ALItemizedJob and ALItemizedJobList
-sidebar_label: |
- Itemized Jobs
-slug: /alincome/itemizedjobs
-# Note(brycew): this has duplicated content with jobs.md.
-# Not sure the best way to avoid it, as the classes are
-# different enough for different pages IMO.
+sidebar_label: Itemized jobs
+slug: ALIncome/itemizedjobs
---
Sometimes, you'll need detailed information about a person's
@@ -22,7 +18,7 @@ Sometimes, courts will ask for specific pieces of information about a person's p
will want to use a job that can handle itemizing different types of incomes and deductions for the same type of job.
This is not the class that you should reach for first. You should
-check and see if the [ALJob](jobs.md) class satisfies your needs, since it asks the user far fewer questions than the ALItemizedJob.
+check and see if the [ALJob](al_income_jobs.md) class satisfies your needs, since it asks the user far fewer questions than the ALItemizedJob.
If you need to use it, a main benefit is the fact that the ALItemizedJobList
will do all of the calculations needed over multiple jobs to get a single answer for monthly pay, even if the jobs have different pay schedules, and have multiple incomes per job that come at different rates.
@@ -34,10 +30,10 @@ will do all of the calculations needed over multiple jobs to get a single answer
Before you start, we'll assume that you
* have access to a [developer account on a docassemble server](https://suffolklitlab.org/legal-tech-class/docs/classes/assembly-line/2020-assembly-line-assignment-1#before-you-get-started)
-* have the [`ALToolbox` package installed on your server](https://assemblyline.suffolklitlab.org/docs/installation#run-the-installation-script)
+* have the [`ALToolbox` package installed on your server](../../get_started/installation.md#run-the-installation-script)
* know [what the playground is](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#introduction-to-the-docassemble-playground) and [how to use it to develop a docassemble interview](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#hello-world)
* know [what "blocks" are](https://suffolklitlab.org/legal-tech-class/docs/yaml#documents) in docassemble
-* have looked at the [the `ALJob` tutorial](jobs.md) and decided you need to handle more complicated information
+* have looked at the [the `ALJob` tutorial](al_income_jobs.md) and decided you need to handle more complicated information
### Writing the interview
@@ -195,4 +191,4 @@ subquestion: |
-You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](https://assemblyline.suffolklitlab.org/docs/generated_yaml#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](https://assemblyline.suffolklitlab.org/docs/docx) will help DOCX users.
+You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](../../authoring/weaver_code_anatomy.md#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](../../authoring/docx_templates.md) will help DOCX users.
diff --git a/docs/alincome/jobs.md b/docs/components/ALToolbox/al_income_jobs.md
similarity index 92%
rename from docs/alincome/jobs.md
rename to docs/components/ALToolbox/al_income_jobs.md
index 369d8771f..6299e49d3 100644
--- a/docs/alincome/jobs.md
+++ b/docs/components/ALToolbox/al_income_jobs.md
@@ -1,10 +1,9 @@
---
-id: jobs
+id: al_income_jobs
title: |
Jobs: ALJob and ALJobList
-sidebar_label: |
- Jobs
-slug: /alincome/jobs
+sidebar_label: Jobs
+slug: ALIncome/jobs
---
Asking people about their jobs is a common task when getting financial information. The `ALJob` class tries to be complete but simple for your users to answer, doing the math for them, and straight-forward for you to use.
@@ -22,7 +21,7 @@ income from those jobs.
Before you start, we'll assume that you:
* have access to a [developer account on a docassemble server](https://suffolklitlab.org/legal-tech-class/docs/classes/assembly-line/2020-assembly-line-assignment-1#before-you-get-started)
-* have the [`ALToolbox` package installed on your server](https://assemblyline.suffolklitlab.org/docs/installation#run-the-installation-script)
+* have the [`ALToolbox` package installed on your server](../../get_started/installation.md#run-the-installation-script)
* know [what the playground is](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#introduction-to-the-docassemble-playground) and [how to use it to develop a docassemble interview](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#hello-world)
* know [what "blocks" are](https://suffolklitlab.org/legal-tech-class/docs/yaml#documents) in docassemble
@@ -74,7 +73,7 @@ The interview will ask how many jobs the user has, and then for each job, will a
* how much the user gets paid. This screen handles both hourly and salaried workers, and asks how often they receive their pay,
and if they have any deductions from their paycheck.
* if you need more detailed information about someone's pay, such as their
- tips and taxes withheld, you should use [the `ALItemizedJobList` class](alincome/itemizedjobs.md)
+ tips and taxes withheld, you should use [the `ALItemizedJobList` class](al_income_itemizedjobs.md)
You can let the user review their answers with the following screen:
@@ -184,4 +183,4 @@ subquestion: |
-You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](https://assemblyline.suffolklitlab.org/docs/generated_yaml#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](https://assemblyline.suffolklitlab.org/docs/docx) will help DOCX users.
+You'll likely want to display this information in a PDF or word template as well. [This section describing the Attachment block](../../authoring/weaver_code_anatomy.md#attachment-block) will help with displaying information in the PDF, and [this page about working with DOCX files](../../authoring/docx_templates.md) will help DOCX users.
diff --git a/docs/alincome/overview.md b/docs/components/ALToolbox/al_income_overview.md
similarity index 88%
rename from docs/alincome/overview.md
rename to docs/components/ALToolbox/al_income_overview.md
index 63b09f4f0..2f05898aa 100644
--- a/docs/alincome/overview.md
+++ b/docs/components/ALToolbox/al_income_overview.md
@@ -1,8 +1,8 @@
---
-id: overview
-title: 'al_income: Python classes to gather financial information'
-sidebar_label: 'al_income 02'
-slug: /alincome/overview
+id: al_income_overview
+title: Python classes to gather financial information
+sidebar_label: Gathering financial information
+slug: ALIncome/overview
---
## Overview
@@ -21,9 +21,9 @@ on your server, and run the [al_income_demo interview](https://github.com/Suffol
Once you have a broad idea of what each class is about, you can choose from one of the more in-depth tutorials:
-* [Expenses](expenses.md)
-* [Jobs](jobs.md)
-* [Itemized Jobs](itemizedjobs.md)
+* [Expenses](al_income_expenses.md)
+* [Jobs](al_income_jobs.md)
+* [Itemized Jobs](al_income_itemizedjobs.md)
:::warning Work in progress
The following classes don't yet have tutorials that you can follow, but you can follow
diff --git a/docs/framework/altoolbox.md b/docs/components/ALToolbox/altoolbox_overview.md
similarity index 88%
rename from docs/framework/altoolbox.md
rename to docs/components/ALToolbox/altoolbox_overview.md
index 39a91670e..31bf8cec0 100644
--- a/docs/framework/altoolbox.md
+++ b/docs/components/ALToolbox/altoolbox_overview.md
@@ -1,8 +1,8 @@
---
-id: altoolbox
+id: altoolbox_overview
title: ALToolbox functions and components
sidebar_label: ALToolbox functions and components
-slug: /framework/altoolbox
+slug: overview
---
import Tabs from '@theme/Tabs';
@@ -15,10 +15,10 @@ JavaScript file.
The **ALToolbox** repo is constantly expanded to add new functions. As this page provides only some samples, you can see more in [the "Live demos" section](#live-demos) below. You can also see more details about each individual function in the ALToolbox API reference for each module:
-* [`ALToolbox.business_days`](../reference/ALToolbox/business_days.md)
-* [`ALToolbox.copy_button`](../reference/ALToolbox/copy_button.md)
-* [`ALToolbox.misc`](../reference/ALToolbox/misc.md)
-* [`ALToolbox.save_input_data`](../reference/ALToolbox/save_input_data.md)
+* [`ALToolbox.business_days`](business_days)
+* [`ALToolbox.copy_button`](copy_button)
+* [`ALToolbox.misc`](misc)
+* [`ALToolbox.save_input_data`](save_input_data)
## Live demos
@@ -36,7 +36,7 @@ display with an arrow, and the `content` of the template will be shown when the
`subject` is clicked on.
We [recommend using this for help
-text](/docs/style_guide/question_help_your_user#provide-help-information-in-context) in
+text](../../style_guide/question_style_help_your_user.md#provide-help-information-in-context) in
your interviews.
It works a lot like this `details` element:
@@ -71,7 +71,7 @@ content: |
Context-specific help goes here.
```
-[API for `collapse_template`](../reference/ALToolbox/misc#collapse_template), and [Code for `collapse_template`](https://github.com/SuffolkLITLab/docassemble-ALToolbox/blob/main/docassemble/ALToolbox/misc.py)
+[API for `collapse_template`](misc#collapse_template), and [Code for `collapse_template`](https://github.com/SuffolkLITLab/docassemble-ALToolbox/blob/main/docassemble/ALToolbox/misc.py)
## Display markdown template with a scroll bar
@@ -201,7 +201,7 @@ Example:
-
+
@@ -238,7 +238,7 @@ Example:
The following income and deductions are \{\{ output_checkbox(is_monthly) \}\} monthly \{\{ output_checkbox(is_yearly) \}\} yearly FOR THE YEAR \{\{ today(format='YYYY') \}\}.
-
+
@@ -266,7 +266,7 @@ attachment:
-![The following income and deductions are [X] monthly [ ] yearly FOR THE YEAR 2023.](../assets/output_checkbox_post_pic.png)
+![The following income and deductions are [X] monthly [ ] yearly FOR THE YEAR 2023.](../../assets/output_checkbox_post_pic.png)
diff --git a/docs/reference/ALToolbox/business_days.md b/docs/components/ALToolbox/business_days.md
similarity index 100%
rename from docs/reference/ALToolbox/business_days.md
rename to docs/components/ALToolbox/business_days.md
diff --git a/docs/reference/ALToolbox/copy_button.md b/docs/components/ALToolbox/copy_button.md
similarity index 100%
rename from docs/reference/ALToolbox/copy_button.md
rename to docs/components/ALToolbox/copy_button.md
diff --git a/docs/reference/ALToolbox/llms.md b/docs/components/ALToolbox/llms.md
similarity index 100%
rename from docs/reference/ALToolbox/llms.md
rename to docs/components/ALToolbox/llms.md
diff --git a/docs/reference/ALToolbox/misc.md b/docs/components/ALToolbox/misc.md
similarity index 100%
rename from docs/reference/ALToolbox/misc.md
rename to docs/components/ALToolbox/misc.md
diff --git a/docs/reference/ALToolbox/save_input_data.md b/docs/components/ALToolbox/save_input_data.md
similarity index 100%
rename from docs/reference/ALToolbox/save_input_data.md
rename to docs/components/ALToolbox/save_input_data.md
diff --git a/docs/reference/AssemblyLine/al_courts.md b/docs/components/AssemblyLine/al_courts.md
similarity index 98%
rename from docs/reference/AssemblyLine/al_courts.md
rename to docs/components/AssemblyLine/al_courts.md
index 4824620e7..0543141cc 100644
--- a/docs/reference/AssemblyLine/al_courts.md
+++ b/docs/components/AssemblyLine/al_courts.md
@@ -81,6 +81,7 @@ Built around Pandas dataframe.
**Attributes**:
- `filename` _str_ - Path to the file containing court information.
+- `converters` _Dict[str, Callable]_ - A dictionary of functions to apply to columns in the dataframe.
#### all\_courts
diff --git a/docs/reference/AssemblyLine/al_document.md b/docs/components/AssemblyLine/al_document.md
similarity index 99%
rename from docs/reference/AssemblyLine/al_document.md
rename to docs/components/AssemblyLine/al_document.md
index 8115000b0..700966990 100644
--- a/docs/reference/AssemblyLine/al_document.md
+++ b/docs/components/AssemblyLine/al_document.md
@@ -423,7 +423,7 @@ Populate the dictionary using a list of field data.
**Arguments**:
-- `data` _list_ - List of dictionaries containing field data with keys "field_name"
+- `data` _list_ - List of dictionaries containing ield data with keys "field_name"
and "overflow_trigger".
#### defined\_fields
diff --git a/docs/framework/aldocument.md b/docs/components/AssemblyLine/al_document_overview.md
similarity index 99%
rename from docs/framework/aldocument.md
rename to docs/components/AssemblyLine/al_document_overview.md
index d8f63c088..785e3bef0 100644
--- a/docs/framework/aldocument.md
+++ b/docs/components/AssemblyLine/al_document_overview.md
@@ -1,8 +1,8 @@
---
-id: aldocument
-title: 'al_document: Python Classes to simplify working with multiple templates'
-sidebar_label: al_document 01
-slug: /framework/aldocument
+id: al_document_overview
+title: Python Classes to simplify working with multiple templates
+sidebar_label: Working with multiple templates
+slug: ALDocument/overview
---
## Overview
@@ -57,7 +57,7 @@ depending on the value of the `key` so that the template does not need to be cre
twice.
The `signature_if_final` method of an
-[ALIndividual](algeneral#ALIndividual) was created to simplify this
+[ALIndividual](al_general_overview.md#ALIndividual) was created to simplify this
common use case.
Here's how to use an ALDocument:
diff --git a/docs/reference/AssemblyLine/al_general.md b/docs/components/AssemblyLine/al_general.md
similarity index 77%
rename from docs/reference/AssemblyLine/al_general.md
rename to docs/components/AssemblyLine/al_general.md
index 7e63f1263..bb5124330 100644
--- a/docs/reference/AssemblyLine/al_general.md
+++ b/docs/components/AssemblyLine/al_general.md
@@ -57,11 +57,12 @@ NOTE: This function is stateful under specific conditions. Refer to the conditio
- `show_if` _Union[str, Dict[str, str], None]_ - Condition to display each field. Defaults to None.
- `allow_no_address` _bool_ - Allow users to specify they don't have an address. Defaults to False.
- `ask_if_impounded` _Optional[bool]_ - Whether to ask if the address is impounded. Defaults to False.
+- `maxlengths` _Optional[Dict[str, int]]_ - A dictionary of field names and their maximum lengths. Defaults to None.
**Returns**:
-- `list` - A list of YAML structure representing address fields.
+ List[Dict[str, Any]]: A list of dictionaries representing address fields.
**Notes**:
@@ -272,6 +273,10 @@ Provide names and addresses of individuals on one line.
Provide a list of familiar forms of names of individuals.
+**Arguments**:
+
+- `**kwargs` - Keyword arguments to pass to the familiar method.
+
**Returns**:
- `str` - Formatted string of familiar names.
@@ -280,6 +285,11 @@ Provide a list of familiar forms of names of individuals.
Provide a list of familiar forms of names of individuals separated by 'or'.
+**Arguments**:
+
+- `**kwargs` - Keyword arguments to pass to the familiar method.
+
+
**Returns**:
- `str` - Formatted string of familiar names separated by 'or'.
@@ -312,6 +322,25 @@ Return a formatted list of full names of individuals.
- `str` - Formatted string of full names.
+#### pronoun\_reflexive
+
+Returns the appropriate reflexive pronoun for the list of people, depending
+on the `person` keyword argument and the number of items in the list.
+
+If the list is singular, return the reflexive pronoun for the first item in the list.
+If it is plural, return the appropriate plural reflexive pronoun (e.g., "themselves")
+
+**Arguments**:
+
+- `**kwargs` - Additional keyword arguments that are defined [upstream](https://docassemble.org/docs/objects.html#language%20methods).
+ - person (Optional[[Union[str,int]]): Whether to use a first, second, or third person pronoun. Can be one of 1/"1p", 2/"2p", or 3/"3p" (default is 3). See [upstream](https://docassemble.org/docs/objects.html#language%20methods) documentation for more information.
+ - default (Optional[str]): The default word to use if the pronoun is not defined, e.g. "the agent". If not defined, the default term is the user's name.
+
+
+**Returns**:
+
+- `str` - The reflexive pronoun for the list.
+
## ALIndividual Objects
```python
@@ -418,6 +447,7 @@ and other provided parameters.
of common titles in English-speaking countries.
- `show_if` _Union[str, Dict[str, str], None], optional_ - Condition to determine which fields to show.
It can be a string, a dictionary with conditions, or None. Default is None.
+- `maxlengths` _Dict[str, int], optional_ - A dictionary of field names and their maximum lengths. Default is None.
**Returns**:
@@ -443,6 +473,7 @@ Generate field prompts for capturing an address.
- `show_if` _Union[str, Dict[str, str], None]_ - Condition to determine if the field should be shown. Defaults to None.
- `allow_no_address` _bool_ - Whether to permit entries with no address. Defaults to False.
- `ask_if_impounded` _bool_ - Whether to ask if the address is impounded. Defaults to False.
+- `maxlengths` _Dict[str, int], optional_ - A dictionary of field names and their maximum lengths. Default is None.
**Returns**:
@@ -458,6 +489,7 @@ self-described option.
- `show_help` _bool_ - Whether to show additional help text. Defaults to False.
- `show_if` _Union[str, Dict[str, str], None]_ - Condition to determine if the field should be shown. Defaults to None.
+- `maxlengths` _Dict[str, int], optional_ - A dictionary of field names and their maximum lengths. Default is None.
**Returns**:
@@ -475,6 +507,7 @@ Generate fields for capturing pronoun information.
- `required` _bool_ - Whether the field is required. Defaults to False.
- `shuffle` _bool_ - Whether to shuffle the order of pronouns. Defaults to False.
- `show_unknown` _Union[Literal["guess"], bool]_ - Whether to show an "unknown" option. Can be "guess", True, or False. Defaults to "guess".
+- `maxlengths` _Dict[str, int], optional_ - A dictionary of field names and their maximum lengths. Default is None.
**Returns**:
@@ -487,10 +520,21 @@ Retrieve a set of the individual's pronouns.
If the individual has selected the "self-described" option, it will use their custom input.
+Can be formatted however the author likes.
+
**Returns**:
- `set` - A set of strings representing the individual's pronouns.
+#### list\_pronouns
+
+Retrieve a formatted string of the individual's pronouns, arranged with
+the comma_list() function.
+
+**Returns**:
+
+- `str` - A formatted string of the individual's pronouns.
+
#### language\_fields
Generate fields for capturing language preferences.
@@ -500,6 +544,7 @@ Generate fields for capturing language preferences.
- `choices` _Optional[List[Dict[str, str]]]_ - A list of language choices. Defaults to None.
- `style` _str_ - The display style of choices. Defaults to "radio".
- `show_if` _Union[str, Dict[str, str], None]_ - Condition to determine if the field should be shown. Defaults to None.
+- `maxlengths` _Dict[str, int], optional_ - A dictionary of field names and their maximum lengths. Default is None.
**Returns**:
@@ -594,19 +639,19 @@ Generate a formatted address block for mailings.
#### pronoun
-Returns an objective pronoun as appropriate, based on attributes.
+Returns an objective pronoun as appropriate, based on the user's `pronouns` attribute or `gender` attribute.
-The pronoun could be "you," "her," "him," "it," or "them". It depends
-on the `gender` and `person_type` attributes and whether the individual
-is the current user.
+The pronoun could be "I", "you," "her," "him," "it," or "them", or a user-provided pronoun.
+If the user has selected multiple pronouns, each will appear, separated by a "/".
-If the user selected specific pronouns, they take priority over
-gender (only if they chose a pronoun from the list)
+This method will not trigger the definition of `gender` or `pronouns`, but it will use them if they are defined,
+with `pronouns` taking precedence. As a default, it will either use the value of `default` or the individual's full name.
**Arguments**:
-- `**kwargs` - Additional keyword arguments.
-
+- `**kwargs` - Additional keyword arguments that are defined [upstream](https://docassemble.org/docs/objects.html#language%20methods).
+ - person (Optional[[Union[str,int]]): Whether to use a first, second, or third person pronoun. Can be one of 1/"1p", 2/"2p", or 3/"3p" (default is 3). See [upstream](https://docassemble.org/docs/objects.html#language%20methods) documentation for more information.
+ - default (Optional[str]): The default word to use if the pronoun is not defined, e.g. "the agent". If not defined, the default term is the user's name.
**Returns**:
@@ -629,37 +674,63 @@ Returns the same pronoun as the `pronoun()` method.
Returns a possessive pronoun and a target word, based on attributes.
+This method will not trigger the definition of `gender` or `pronouns`, but it will use them if they are defined,
+with `pronouns` taking precedence. As a default, it will either use the value of `default` or the individual's full name.
+
Given a target word, the function returns "\{pronoun\} \{target\}". The pronoun could be
-"her," "his," "its," or "their". It depends on the `gender` and `person_type` attributes
+"my", "her," "his," "its," or "their". It depends on the `gender` and `person_type` attributes
and whether the individual is the current user.
**Arguments**:
- `target` _str_ - The target word to follow the pronoun.
-- `**kwargs` - Additional keyword arguments.
+- `**kwargs` - Additional keyword arguments that can be passed to modify the behavior. These might include:
+ - `default` (Optional[str]): The default word to use if the pronoun is not defined, e.g., "the agent". If not defined, the default term is the user's name.
+ - `person` (Optional[Union[str, int]]): Whether to use a first, second, or third person pronoun. Can be one of 1/"1p", 2/"2p", or 3/"3p" (default is 3). See [upstream documentation](https://docassemble.org/docs/objects.html#language%20methods) for more information.
**Returns**:
-- `str` - The appropriate possessive phrase.
+- `str` - The appropriate possessive phrase, e.g., "her book", "their document".
#### pronoun\_subjective
Returns a subjective pronoun, based on attributes.
-The pronoun could be "you," "she," "he," "it," or "they". It depends
+The pronoun could be "you," "we", "she," "he," "it," or "they". It depends
on the `gender` and `person_type` attributes and whether the individual
is the current user.
**Arguments**:
-- `**kwargs` - Additional keyword arguments.
-
+- `**kwargs` - Additional keyword arguments that are defined [upstream](https://docassemble.org/docs/objects.html#language%20methods).
+ - person (Optional[[Union[str,int]]): Whether to use a first, second, or third person pronoun. Can be one of 1/"1p", 2/"2p", or 3/"3p" (default is 3). See [upstream](https://docassemble.org/docs/objects.html#language%20methods) documentation for more information.
+ - default (Optional[str]): The default word to use if the pronoun is not defined, e.g. "the agent". If not defined, the default term is the user's name.
**Returns**:
- `str` - The appropriate subjective pronoun.
+#### pronoun\_reflexive
+
+Returns the appropriate reflexive pronoun ("herself", "themself", "myself"), based on the user's pronouns or gender and whether we are asked
+to return a 1st, 2nd, or 3rd person pronoun.
+
+Note that if the person has pronouns of they/them/theirs or a nonbinary gender, we return "themself" as the singular non-gendered
+reflexive pronoun and not "themselves". This has growing acceptance although some consider it nonstandard.
+See: https://www.merriam-webster.com/wordplay/themself
+
+**Arguments**:
+
+- `**kwargs` - Additional keyword arguments that are defined [upstream](https://docassemble.org/docs/objects.html#language%20methods).
+ - person (Optional[[Union[str,int]]): Whether to use a first, second, or third person pronoun. Can be one of 1/"1p", 2/"2p", or 3/"3p" (default is 3). See [upstream](https://docassemble.org/docs/objects.html#language%20methods) documentation for more information.
+ - default (Optional[str]): The default word to use if the pronoun is not defined, e.g. "the agent". If not defined, the default term is the user's name.
+
+
+**Returns**:
+
+- `str` - The appropriate reflexive pronoun.
+
#### name\_full
Returns the individual's full name.
@@ -688,6 +759,42 @@ Equivalent to self.name.firstlast()
- `str` - The individual'
+#### familiar
+
+Returns the individual's name in the most familiar form possible.
+
+The purpose is to allow using a short version of the individual's name in an unambiguous
+way in the interview. For example: referring to the child in a guardianship petition
+by first name instead of "the minor". But there may be a problem if context doesn't make
+it clear if you are talking about the child or their parent when they share a name.
+
+In order, it will try to use:
+
+* just the first name
+* the first name and suffix
+* the first and middle name
+* the first and last name
+* the full name
+* the default value, e.g., "the minor", if provided
+* the full name
+
+**Arguments**:
+
+- `unique_names` _Optional[List[Any]]_ - A list of unique names to compare against. Defaults to None.
+- `default` _Optional[str]_ - The default name to return if no unique name is found. Defaults to None.
+
+
+**Returns**:
+
+- `str` - The individual's name in the most familiar form possible.
+
+
+**Example**:
+
+ ```mako
+ Who do you want to take care of $\{ children.familiar(unique_names=parents + petitioners, default="the minor") \}
+ ```
+
#### section\_links
Returns a list of clickable navigation links without animation.
diff --git a/docs/framework/algeneral.md b/docs/components/AssemblyLine/al_general_overview.md
similarity index 88%
rename from docs/framework/algeneral.md
rename to docs/components/AssemblyLine/al_general_overview.md
index 1076f8db7..3f9254c28 100644
--- a/docs/framework/algeneral.md
+++ b/docs/components/AssemblyLine/al_general_overview.md
@@ -1,27 +1,20 @@
---
-id: algeneral
-title: 'al_general: Python Classes representing people'
-sidebar_label: al_general 01
-slug: /framework/algeneral
+id: al_general_overview
+title: Python classes for representing people and addresses
+sidebar_label: Representing people & addresses
+slug: ALGeneral/overview
---
-The functions and classes listed on this page are always available in Assembly
-Line interviews.
+The functions and classes listed on this page are always available in Assembly Line interviews.
-## Python classes for representing people and addresses
-
-### ALAddress and ALAddressList classes {#ALAddress}
+## ALAddress and ALAddressList classes {#ALAddress}
The `ALAddress` class is an extension of the built-in Docassemble
[`Address`](https://docassemble.org/docs/objects.html#Address) class.
-If an address is an `ALAddress`, it has an `address_fields()` method that can be used
-inside a `fields: code: |` statement to insert a consistently formatted series of
-address fields. `address_fields()` will include an autocomplete method and is
-internationalized.
+If an address is an `ALAddress`, it has an `address_fields()` method that can be used inside a `fields: code: |` statement to insert a consistently formatted series of address fields. `address_fields()` will include an autocomplete method and is internationalized.
-Assembly Line question library questions use `ALAddress` objects for both the
-`address` and `mailing_address` attributes of people.
+Assembly Line question library questions use `ALAddress` objects for both the `address` and `mailing_address` attributes of people.
Example:
@@ -41,7 +34,7 @@ fields:
the_address.address_fields()
```
-See [`Addresses`](question_library/addresses.md) for more information and
+See [`Addresses`](../../style_guide/question_library/addresses.md) for more information and
examples.
:::note
@@ -62,7 +55,7 @@ The `address_fields()` method includes the following optional parameters:
* `show_country`: defaults to `False`. If enabled, a country drop down menu will
be displayed.
-#### ALAddressList {#ALAddressList}
+### ALAddressList {#ALAddressList}
The `ALAddressList` class is a collection of `ALAddress`es. It is used to
allow you to collect multiple addresses in one go and otherwise works exactly
@@ -107,13 +100,13 @@ entities.
displays only years.
* `name_fields(person_or_business:str = 'person', show_suffix=True)` is like
`address_fields()` and is used to display a list of either 3 or 4 fields for a
- person's name. See [`Names`](question_library/names.md)
+ person's name. See [`Names`](../../style_guide/question_library/names.md)
* `address_fields()` is a wrapper around the `address_fields()` method of an
`ALAddress` with the same parameters.
* `gender_fields(show_help=False)` is like the `address_fields()` method but
displays a list of vetted gender options. Read more about
- [`gender`](/question_library/gender.md) questions.
-* `pronoun_fields()` displays a question that allows the user to provide their pronouns, with multiple choice and a fill-in-the-blank option. See [`pronouns`](/question_library/pronouns.md).
+ [`gender`](../../style_guide/question_library/gender.md) questions.
+* `pronoun_fields()` displays a question that allows the user to provide their pronouns, with multiple choice and a fill-in-the-blank option. See [`pronouns`](../../style_guide/question_library/pronouns.md).
* `initials()` is used to return a string with the 1, 2, or 3 initial letters of
a person's name. E.g., `QKS` for Quinten K Steenhuis.
* `language_fields(choices=List[Dict[str, str]])` provides a language selector that sets the `.language` attribute of the user, together with an `other` fill-in. This should be the two-letter ISO language code. We recommend defining and passing a dictionary named `al_language_user_choices` which will also be used by built-in questions triggered from `ql_baseline.yml`.
@@ -131,12 +124,12 @@ They return `True` or `False` depending on the value of the `gender` attribute.
* `gender_unknown`
* `gender_self_described`
-##### Relation to the `Individual` class
+#### Relation to the `Individual` class
The `ALIndividual` class inherits from Docassemble's [`Individual`](https://docassemble.org/docs/objects.html#Individual) class, and all other methods of `Individual` work
the same way as they do in the `Individual` class.
-#### ALPeopleList {#ALPeopleList}
+### ALPeopleList {#ALPeopleList}
The `ALPeopleList` class is used to represent a group of people. Otherwise it
works exactly like the built-in Docassemble [`DAList`
@@ -163,7 +156,7 @@ Example:
list contains John Smith, Jane Smith, and Jane Doe. `et al` is not used if the
list is at or below the limit provided.
-##### Relation to the `DAList` class
+### Relation to the `DAList` class
`ALPeopleList` inherits from Docassemble's
[`DAList`](https://docassemble.org/docs/objects.html#DAList) class, and retains
@@ -182,7 +175,7 @@ methods, they can lead to odd ungrammatical "fragments". As tedious as it may
be, the best practice for translation inside the interview is to use conditional
logic for full sentences matching each gender and number.
-### Classes for specific kinds of people {#other-people}
+## Classes for specific kinds of people {#other-people}
Currently, the Assembly Line interviews provide these classes that you can use
to target questions to a specific type of person:
diff --git a/docs/framework/alreminders.md b/docs/components/AssemblyLine/al_reminders_overview.md
similarity index 98%
rename from docs/framework/alreminders.md
rename to docs/components/AssemblyLine/al_reminders_overview.md
index e32c7a9ea..78e726516 100644
--- a/docs/framework/alreminders.md
+++ b/docs/components/AssemblyLine/al_reminders_overview.md
@@ -1,8 +1,8 @@
---
-id: alreminders
+id: al_reminders_overview
title: Scheduled reminders
sidebar_label: Scheduled reminders
-slug: /framework/alreminders
+slug: ALReminders/overview
---
A guided interview is always an intervention into one part of a larger process.
@@ -101,7 +101,7 @@ will be evaluated.
Here is what the default `al_user_wants_reminders` question looks like:
-
+
Here is a complete example:
diff --git a/docs/framework/answer_set_intakes.md b/docs/components/AssemblyLine/answer_set_intakes.md
similarity index 97%
rename from docs/framework/answer_set_intakes.md
rename to docs/components/AssemblyLine/answer_set_intakes.md
index b2d08c64e..fda5ab59a 100644
--- a/docs/framework/answer_set_intakes.md
+++ b/docs/components/AssemblyLine/answer_set_intakes.md
@@ -2,9 +2,8 @@
id: answer_set_intakes
title: |
Using Answer Sets to capture and re-use client information
-sidebar_label: |
- Using Answer Sets to capture and re-use client information
-slug: /framework/answer_set_intakes
+sidebar_label: Capture and re-use client information
+slug: answer_sets/intakes
---
## Overview
diff --git a/docs/framework/answer_sets.md b/docs/components/AssemblyLine/answer_sets.md
similarity index 93%
rename from docs/framework/answer_sets.md
rename to docs/components/AssemblyLine/answer_sets.md
index 24937cb62..15fc348d1 100644
--- a/docs/framework/answer_sets.md
+++ b/docs/components/AssemblyLine/answer_sets.md
@@ -2,9 +2,8 @@
id: answer_sets
title: |
Answer Sets: save and reuse answers across interviews
-sidebar_label: |
- Answer Sets: save and reuse answers across interviews
-slug: /framework/answer_sets
+sidebar_label: Save and reuse answers across interviews
+slug: answer_sets/overview
---
## Overview
@@ -44,7 +43,7 @@ set". In a desktop browser, the main menu will display your email address. In a
mobile browser, it will be three horizontal lines (sometimes called a
"hamburger" menu).
-
+
Now, choose a name for your answer set. The default name is your name and the
name of the opposing party in your case, but you can give the answer set
@@ -65,7 +64,7 @@ server. Currently, only the most recent 500 answer sets that you authored are
displayed. Click the name of the answer set (1) that you want to load to copy the
answers into your current interview.
-
+
You also have the option to delete or view more information about each answer
@@ -78,12 +77,12 @@ To rename an answer set, first visit the answer set's information page:
1. Find the answer set in the "My interviews" page and click to open
2. Or, use the "Load answer set" menu and then click the "view" icon. (3)
-
+
On the answer set's information page, use the "Rename" button (1) at the top of the
screen to give the answer set a new name.
-
+
### Deleting unneeded answer sets
@@ -92,7 +91,7 @@ To delete an answer set that you no longer need:
1. Use the "delete" button on the "My interviews" page, or
1. Use the "Load answer set" menu and click the "delete" icon (2)
-
+
### Exporting and importing answers
@@ -106,7 +105,7 @@ To export an answer set, visit the answer set's information page:
Next, click the "Export in JSON format" button (2). Save the "variables.json" file in
a location of your choice.
-
+
If your server administrator has enabled the import feature, you can import an
@@ -116,7 +115,7 @@ You will be shown a dialog where you can upload a valid JSON file. After you
click "Next", the answers in the JSON file will be loaded into the current
interview session.
-
+
The JSON file should follow [Docassemble
conventions](https://docassemble.org/docs/api.html#session_post) and is expected
@@ -161,7 +160,7 @@ each interview by its author.
### Enabling answer sets
Answer sets are not enabled by default. Enable the [configuration
-options](magic_variables#enable-or-disable-answer-sets) to turn on Answer
+options](../AssemblyLine/magic_variables.md#enable-or-disable-answer-sets) to turn on Answer
sets for your server.
### How answer sets are stored on the server
diff --git a/docs/framework/error_actions.md b/docs/components/AssemblyLine/error_actions.md
similarity index 97%
rename from docs/framework/error_actions.md
rename to docs/components/AssemblyLine/error_actions.md
index 0c9195e79..aeedab704 100644
--- a/docs/framework/error_actions.md
+++ b/docs/components/AssemblyLine/error_actions.md
@@ -2,7 +2,7 @@
id: error_actions
title: Helping users recover from developer errors
sidebar_label: Error pages
-slug: /framework/error_actions
+slug: error_actions
---
## Overview
@@ -36,7 +36,7 @@ what this event can do.
By default the Assembly Line error page looks like this:
-
+
It always includes:
@@ -110,7 +110,7 @@ a custom event named `al_error_action_download_screen`.
This is what the page may look like:
-
+
It includes this text:
diff --git a/docs/reference/AssemblyLine/language.md b/docs/components/AssemblyLine/language.md
similarity index 97%
rename from docs/reference/AssemblyLine/language.md
rename to docs/components/AssemblyLine/language.md
index db03412db..60510197e 100644
--- a/docs/reference/AssemblyLine/language.md
+++ b/docs/components/AssemblyLine/language.md
@@ -30,8 +30,8 @@ Get a Bootstrap 5 dropdown menu for language selection that can be added to navi
- `current` - the current language code
- `languages_path` - the path to the languages.yml file (defaults to data/sources/languages.yml)
- `event_name` - the name of the event to trigger when the language is changed
-- `icon` - the name of the icon to use for the dropdown menu (defaults to fa-solid fa-language)
-
+- `icon` - the name of the icon to use for the dropdown menu (defaults to fa-solid fa-language fa-xl)
+- `extra_class` - additional classes to add to the link
**Returns**:
diff --git a/docs/framework/magic_variables.md b/docs/components/AssemblyLine/magic_variables.md
similarity index 99%
rename from docs/framework/magic_variables.md
rename to docs/components/AssemblyLine/magic_variables.md
index fc86f472a..6f41882f5 100644
--- a/docs/framework/magic_variables.md
+++ b/docs/components/AssemblyLine/magic_variables.md
@@ -2,7 +2,7 @@
id: magic_variables
title: Special variables for Document Assembly Line interviews
sidebar_label: Special variables
-slug: /framework/magic_variables
+slug: magic_variables
---
## Server-wide configuration options
@@ -14,7 +14,7 @@ configuration. They are not configurable on a per-interview basis.
Add the following entry in your global
[config.yml](https://docassemble.org/docs/config.html#edit) to turn on the
-[Answer Set](answer_sets.md) feature that allows users to save answers for reuse in other
+[Answer Set](components/AssemblyLine/answer_sets.md) feature that allows users to save answers for reuse in other
interviews.
```yaml
diff --git a/docs/framework/navigation.md b/docs/components/AssemblyLine/navigation.md
similarity index 99%
rename from docs/framework/navigation.md
rename to docs/components/AssemblyLine/navigation.md
index 10947725d..1f24e6c11 100644
--- a/docs/framework/navigation.md
+++ b/docs/components/AssemblyLine/navigation.md
@@ -2,7 +2,7 @@
id: navigation
title: Dynamic navigation sections
sidebar_label: Dynamic navigation sections
-slug: /framework/navigation
+slug: navigation
---
By default, Assembly Line interviews have navigation turned on. In some cases, you
diff --git a/docs/reference/AssemblyLine/project_maintenance.md b/docs/components/AssemblyLine/project_maintenance.md
similarity index 100%
rename from docs/reference/AssemblyLine/project_maintenance.md
rename to docs/components/AssemblyLine/project_maintenance.md
diff --git a/docs/framework/reserved_keywords.md b/docs/components/AssemblyLine/reserved_keywords.md
similarity index 99%
rename from docs/framework/reserved_keywords.md
rename to docs/components/AssemblyLine/reserved_keywords.md
index 47dbc43af..aa6f0a6ff 100644
--- a/docs/framework/reserved_keywords.md
+++ b/docs/components/AssemblyLine/reserved_keywords.md
@@ -2,7 +2,7 @@
id: reserved_keywords
title: Reserved variable names you cannot use in Document Assembly Line interviews
sidebar_label: Reserved variables
-slug: /framework/reserved_keywords
+slug: reserved_keywords
---
## What is a "reserved" name?
diff --git a/docs/reference/AssemblyLine/sessions.md b/docs/components/AssemblyLine/sessions.md
similarity index 85%
rename from docs/reference/AssemblyLine/sessions.md
rename to docs/components/AssemblyLine/sessions.md
index 2ffd796fa..5ad36298c 100644
--- a/docs/reference/AssemblyLine/sessions.md
+++ b/docs/components/AssemblyLine/sessions.md
@@ -29,7 +29,7 @@ Standardized metadata dictionary:
**Arguments**:
- `filename` _str_ - The filename of the interview to add metadata for
-- `session_id` _int_ - The session ID of the interview to add metadata for
+- `session_id` _str_ - The session ID of the interview to add metadata for
- `data` _Dict_ - The metadata to add
- `metadata_key_name` _str, optional_ - The name of the metadata key. Defaults to "metadata".
@@ -41,7 +41,7 @@ We implement this with the docassemble jsonstorage table and a dedicated `tag` w
**Arguments**:
- `filename` _str_ - The filename of the interview to retrieve metadata for
-- `session_id` _int_ - The session ID of the interview to retrieve metadata for
+- `session_id` _str_ - The session ID of the interview to retrieve metadata for
- `metadata_key_name` _str, optional_ - The name of the metadata key. Defaults to "metadata".
@@ -71,7 +71,7 @@ an existing interview to the answer set.
- `offset` _int, optional_ - The offset to start returning results from. Defaults to 0.
- `filename_to_exclude` _str, optional_ - The filename to exclude from the results. Defaults to "".
- `exclude_current_filename` _bool, optional_ - Whether to exclude the current filename from the results. Defaults to True.
-- `exclude_filenames` _Optional[List[str]], optional_ - A list of filenames to exclude from the results. Defaults to None.
+- `exclude_filenames` _Optional[List[str]], optional_ - List of filenames to exclude. Defaults to None. If the `filename` does not contain a `:` it will be treated as a prefix, allowing you to filter out whole packages (e.g., any path starting with docassemble.ALDashboard or docassemble.playground)
- `exclude_newly_started_sessions` _bool, optional_ - Whether to exclude sessions that are still on "step 1". Defaults to False.
@@ -79,6 +79,40 @@ an existing interview to the answer set.
List[Dict[str, Any]]: A list of saved sessions for the specified filename.
+#### find\_matching\_sessions
+
+Get a list of sessions where the metadata for the session matches the provided keyword search terms.
+This function is designed to be used in a search interface where the user can search for sessions by keyword.
+The keyword search is case-insensitive and will match any part of the metadata column values.
+
+**Arguments**:
+
+- `keyword` _str_ - The keyword to search for in the metadata
+- `metadata_column_names` _List[str], optional_ - The names of the metadata columns to search. If not provided, defaults to ["title", "auto_title", "description"].
+- `filenames` _List[str], optional_ - The filename or filenames of the interviews to retrieve sessions for.
+- `user_id` _Union[int, str, None], optional_ - The user ID to retrieve sessions for. Defaults to current user. Specify "all" if you want and have the necessary privileges to search all sessions.
+- `metadata_key_name` _str, optional_ - The name of the metadata key. Defaults to "metadata".
+- `limit` _int, optional_ - The maximum number of results to return. Defaults to 50.
+- `offset` _int, optional_ - The offset to start returning results from. Defaults to 0.
+- `filename_to_exclude` _str, optional_ - The filename to exclude from the results. Defaults to "".
+- `exclude_current_filename` _bool, optional_ - Whether to exclude the current filename from the results. Defaults to True.
+- `exclude_filenames` _Optional[List[str]], optional_ - A list of filenames to exclude from the results. Defaults to None.
+- `exclude_newly_started_sessions` _bool, optional_ - Whether to exclude sessions that are still on "step 1". Defaults to False.
+- `global_search_allowed_roles` _Union[Set[str],List[str]], optional_ - A list or set of roles that are allowed to search all sessions. Defaults to \{'admin','developer', 'advocate'\}. 'admin' and 'developer' are always allowed to search all sessions.
+
+
+**Returns**:
+
+ List[Dict[str, Any]]: A list of saved sessions for the specified filename that match the search keyword
+
+
+**Example**:
+
+
+ ```python
+ matching_sessions=find_matching_sessions("smith", user_id="all", filenames=[f"\{user_info().package\}:intake.yml", "docassemble.MyPackage:intake.yml"])
+ ```
+
#### delete\_interview\_sessions
Delete all sessions for the specified user, excluding the current filename
@@ -122,6 +156,7 @@ itself in a way that adds additional steps)
- `offset` _int, optional_ - Offset for the session list. Defaults to 0.
- `display_interview_title` _bool, optional_ - If True, displays the title of the interview. Defaults to True.
- `show_view_button` _bool, optional_ - If True, shows the view button. Defaults to True.
+- `answers` _Optional[List[Dict[str, Any]]], optional_ - A list of answers to format and display. Defaults to showing all sessions for the current user.
**Returns**:
@@ -214,7 +249,7 @@ user sessions. The results exclude the answer set filename by default.
- `metadata_key_name` _str, optional_ - Name of the metadata key. Defaults to "metadata".
- `filename_to_exclude` _str, optional_ - Name of the file to exclude. Defaults to `al_session_store_default_filename`.
- `exclude_current_filename` _bool, optional_ - If True, excludes the current filename. Defaults to True.
-- `exclude_filenames` _Optional[List[str]], optional_ - List of filenames to exclude. Defaults to None.
+- `exclude_filenames` _Optional[List[str]], optional_ - List of filenames to exclude. Defaults to None. If the `filename` does not contain a `:` it will be treated as a prefix, allowing you to filter out whole packages (e.g., any path starting with docassemble.ALDashboard or docassemble.playground)
- `exclude_newly_started_sessions` _bool, optional_ - If True, excludes newly started sessions. Defaults to False.
- `name_label` _str, optional_ - Label for the session name/title. Defaults to translated word "Title".
- `date_label` _str, optional_ - Label for the date column. Defaults to translated word "Date modified".
@@ -231,6 +266,7 @@ user sessions. The results exclude the answer set filename by default.
- `limit` _int, optional_ - Limit for the number of sessions returned. Defaults to 50.
- `offset` _int, optional_ - Offset for the session list. Defaults to 0.
+
**Returns**:
@@ -244,7 +280,7 @@ metadata that may be present.
**Arguments**:
- `filename` _str_ - The filename of the interview to rename
-- `session_id` _int_ - The session ID of the interview to rename
+- `session_id` _str_ - The session ID of the interview to rename
- `new_name` _str_ - The new name to set for the interview
- `metadata_key_name` _str, optional_ - The name of the metadata key. Defaults to "metadata".
@@ -318,6 +354,7 @@ If no filename and session ID are provided, the current session's variables
- `session_id` _Optional[int], optional_ - Session ID to retrieve variables from. Defaults to None.
- `variables_to_filter` _Union[Set[str], List[str], None], optional_ - List or set of variables to exclude. Defaults to `al_sessions_variables_to_remove`.
- `additional_variables_to_filter` _Union[Set[str], List[str], None], optional_ - List or set of additional variables to exclude. Defaults to None.
+- `indent` _int, optional_ - Number of spaces to indent the JSON string. Defaults to 4.
**Returns**:
@@ -333,7 +370,7 @@ the active session. This function is primarily used for migrating answers betwee
**Arguments**:
- `old_interview_filename` _str_ - Filename of the old interview.
-- `old_session_id` _int_ - Session ID of the old interview.
+- `old_session_id` _str_ - Session ID of the old interview.
- `new_session` _bool, optional_ - Determines whether to create a new session. Defaults to False.
- `new_interview_filename` _Optional[str], optional_ - Filename for the new session. Defaults to None.
- `variables_to_filter` _Optional[List[str]], optional_ - List of variables to exclude. Defaults to None.
diff --git a/docs/reference/EFSPIntegration/conversions.md b/docs/components/EFSPIntegration/conversions.md
similarity index 100%
rename from docs/reference/EFSPIntegration/conversions.md
rename to docs/components/EFSPIntegration/conversions.md
diff --git a/docs/efiling/case_search.md b/docs/components/EFSPIntegration/efiling_case_search.md
similarity index 95%
rename from docs/efiling/case_search.md
rename to docs/components/EFSPIntegration/efiling_case_search.md
index 5f64e89fe..975217b80 100644
--- a/docs/efiling/case_search.md
+++ b/docs/components/EFSPIntegration/efiling_case_search.md
@@ -3,7 +3,7 @@ id: efiling_case_search
title: |
E-filing: Case Search
sidebar_label: Case Search
-slug: /efiling/case_search
+slug: case_search
---
This guide will help you integrate a case search feature into
@@ -70,13 +70,13 @@ Start off by hard coding a few pieces of information:
* use the `illinois' jurisdiction. Currently, the E-file proxy server is only running in production in Illinois, but we have access to the staging servers in Massachusetts and Texas.
* file in the "adams" county court in Illinois. Handling court
- hierarchies is a complicated task, and something that the AssemblyLine can't do for you. You'll need to make your own way to let users select what court they want to file in depending on your jurisdiction. See [our documentation for `al_courts`](../reference/AssemblyLine/al_courts.md) for some possible ideas.
+ hierarchies is a complicated task, and something that the AssemblyLine can't do for you. You'll need to make your own way to let users select what court they want to file in depending on your jurisdiction. See [our documentation for `al_courts`](../AssemblyLine/al_courts) for some possible ideas.
You should be able to run the interview now. If this is the first time you're running the interview on the server, you will be asked to log in to eFileIL. If you don't yet have an account, you should be able to make a new pro-se user account with eFileIL by following the links to make a new account on the page. Once you've logged in on the server, subsequent runs of the interview won't ask you to log in, until the eFileIL token expires and you have to log in again, in about 1-2 hours.
The next page will ask if you want to search by party name or by case number.
-
+
For now, let's search by case number. If you select "case number", and then enter the case number "2022SC9",
@@ -99,7 +99,7 @@ press continue, and wait. Searching by party name takes longer on eFileIL's serv
will see that there are many cases involving John Smith. For speed purposes, the EFSP library
only gets information about the first 8, and let's you click the next button to see the next 8.
-
+
If you select the John Smith vs. Bob Doe case, you then see the last page in the interview YAML; `show_all_info`. This page shows all of the information that you, the interview author, can use
from the `case_search.found_case`, the variable for the found case. The `details` and
@@ -119,7 +119,7 @@ from the `case_search.found_case`, the variable for the found case. The `details
### Using case search data in your Assembly Line interview
-You are likely using the [ALWeaver](../weaver_overview.md) and the rest of the Assembly Line framework
+You are likely using the [ALWeaver](../../authoring/weaver_overview.md) and the rest of the Assembly Line framework
in your docassemble interview, and you will want to put this information from the case search into
variables that your interview knows about, like `users` and `other_parties`. To do this, we can add
some more code to the above example:
diff --git a/docs/efiling/efiling_codes.md b/docs/components/EFSPIntegration/efiling_codes.md
similarity index 98%
rename from docs/efiling/efiling_codes.md
rename to docs/components/EFSPIntegration/efiling_codes.md
index dc16b0635..d0567e7ef 100644
--- a/docs/efiling/efiling_codes.md
+++ b/docs/components/EFSPIntegration/efiling_codes.md
@@ -3,7 +3,7 @@ id: efiling_codes
title: |
E-filing: Tyler codes
sidebar_label: E-filing codes
-slug: /efiling/tyler-codes
+slug: tyler_codes
---
Codes are how Tyler Technologies handles the complexity of case categories,
diff --git a/docs/efiling/efiling_monitoring.md b/docs/components/EFSPIntegration/efiling_monitoring.md
similarity index 92%
rename from docs/efiling/efiling_monitoring.md
rename to docs/components/EFSPIntegration/efiling_monitoring.md
index 16525334d..f538f9c04 100644
--- a/docs/efiling/efiling_monitoring.md
+++ b/docs/components/EFSPIntegration/efiling_monitoring.md
@@ -1,9 +1,9 @@
---
-id: monitoring
+id: efiling_monitoring
title: |
Monitoring your e-filing operations
sidebar_label: Monitoring
-slug: /efiling/monitoring
+slug: monitoring
---
## Monitoring
@@ -24,5 +24,5 @@ This interview also includes a filter for filing review comments, which is usefu
### Keeping track of Court Codes
When making your interview, the court codes used might change. You should
-continually run [automated testing](../alkiln/automated_testing.mdx) against your
+continually run [automated testing](../ALKiln/automated_testing.mdx) against your
interview to ensure that the codes still exist as your program expects them to.
diff --git a/docs/efiling/efiling_through_docassemble.md b/docs/components/EFSPIntegration/efiling_through_docassemble.md
similarity index 99%
rename from docs/efiling/efiling_through_docassemble.md
rename to docs/components/EFSPIntegration/efiling_through_docassemble.md
index 39fe78d2e..3c389adae 100644
--- a/docs/efiling/efiling_through_docassemble.md
+++ b/docs/components/EFSPIntegration/efiling_through_docassemble.md
@@ -3,7 +3,7 @@ id: efiling_through_docassemble
title: |
E-filing through Docassemble
sidebar_label: Integrating Docassemble interviews with e-filing
-slug: /efiling/docassemble
+slug: docassemble_integration
---
This is a guide to get from a working Assembly Line Interview to an interview that can e-file through our EFSP to the Tyler EFM system.
@@ -23,7 +23,7 @@ to be embedded into your interview.
Before starting this guide, you should have:
* a working docassemble interview, preferably using the AssemblyLine.
- * If you don't have one yet, follow [these steps to author your interview](https://assemblyline.suffolklitlab.org/docs/planning).
+ * If you don't have one yet, follow [these steps to author your interview](../../get_started/plan_interview.md).
* contacted us for access to the EFSP server. We aren't yet making access publicly available, but will include an interest form here when we do.
## Steps
diff --git a/docs/reference/EFSPIntegration/efm_client.md b/docs/components/EFSPIntegration/efm_client.md
similarity index 100%
rename from docs/reference/EFSPIntegration/efm_client.md
rename to docs/components/EFSPIntegration/efm_client.md
diff --git a/docs/efiling/efsp_api.md b/docs/components/EFSPIntegration/efsp_api.md
similarity index 93%
rename from docs/efiling/efsp_api.md
rename to docs/components/EFSPIntegration/efsp_api.md
index 0283b03a0..1b6276937 100644
--- a/docs/efiling/efsp_api.md
+++ b/docs/components/EFSPIntegration/efsp_api.md
@@ -3,7 +3,7 @@ id: efiling_api
title: |
EFSP REST API
sidebar_label: REST API
-slug: /efiling/rest-api
+slug: api
---
A guide to describe what calls you need to make to our E-filing Service Provider (EFSP) REST API to make a filing.
diff --git a/docs/efiling/overview.md b/docs/components/EFSPIntegration/efsp_overview.md
similarity index 97%
rename from docs/efiling/overview.md
rename to docs/components/EFSPIntegration/efsp_overview.md
index 0bb3b6a23..7e9516acc 100644
--- a/docs/efiling/overview.md
+++ b/docs/components/EFSPIntegration/efsp_overview.md
@@ -1,9 +1,8 @@
---
-id: overview
-title: |
- E-filing with Assembly Line
-sidebar_label: Overview
-slug: /efiling/overview
+id: efsp_overview
+title: E-filing with the Document Assembly Line
+sidebar_label: EFSP overview
+slug: overview
---
## Overview
@@ -118,7 +117,7 @@ to connect with Tyler Technologies and JeffNet:
Many states are also interested in the accessibility of guided interview that
use an e-filing integration. We have produced a
-[test suite](../alkiln/automated_testing.mdx) that can provide automated
+[test suite](../ALKiln/automated_testing.mdx) that can provide automated
accessibility information to audit Docassemble interview compliance with WCAG 2.0 and 2.1's A and AA certification levels.
### For users of the Assembly Line framework
@@ -160,7 +159,7 @@ v4.0](http://docs.oasis-open.org/legalxml-courtfiling/specs/ecf/v4.01/ecf-v4.01-
Below is a broad diagram of the entities that the e-filing feature interacts with.
-
+
### E-file Proxy Server
diff --git a/docs/reference/EFSPIntegration/interview_logic.md b/docs/components/EFSPIntegration/interview_logic.md
similarity index 100%
rename from docs/reference/EFSPIntegration/interview_logic.md
rename to docs/components/EFSPIntegration/interview_logic.md
diff --git a/docs/reference/EFSPIntegration/py_efsp_client.md b/docs/components/EFSPIntegration/py_efsp_client.md
similarity index 100%
rename from docs/reference/EFSPIntegration/py_efsp_client.md
rename to docs/components/EFSPIntegration/py_efsp_client.md
diff --git a/docs/reference/EFSPIntegration/test/test_conversions.md b/docs/components/EFSPIntegration/test/test_conversions.md
similarity index 100%
rename from docs/reference/EFSPIntegration/test/test_conversions.md
rename to docs/components/EFSPIntegration/test/test_conversions.md
diff --git a/docs/reference/formfyxer/docx_wrangling.md b/docs/components/FormFyxer/docx_wrangling.md
similarity index 100%
rename from docs/reference/formfyxer/docx_wrangling.md
rename to docs/components/FormFyxer/docx_wrangling.md
diff --git a/docs/reference/formfyxer/lit_explorer.md b/docs/components/FormFyxer/lit_explorer.md
similarity index 100%
rename from docs/reference/formfyxer/lit_explorer.md
rename to docs/components/FormFyxer/lit_explorer.md
diff --git a/docs/reference/formfyxer/pdf_wrangling.md b/docs/components/FormFyxer/pdf_wrangling.md
similarity index 100%
rename from docs/reference/formfyxer/pdf_wrangling.md
rename to docs/components/FormFyxer/pdf_wrangling.md
diff --git a/docs/framework/github_feedback.md b/docs/components/GithubFeedbackForm/github_feedback.md
similarity index 95%
rename from docs/framework/github_feedback.md
rename to docs/components/GithubFeedbackForm/github_feedback.md
index bed96a7ff..f2ef3f4a5 100644
--- a/docs/framework/github_feedback.md
+++ b/docs/components/GithubFeedbackForm/github_feedback.md
@@ -1,9 +1,9 @@
---
-id: github_feedback
+id: githubfeedbackform_overview
title: |
Setting up and using Feedback
-sidebar_label: Feedback
-slug: /framework/github_feedback
+sidebar_label: GithubFeedbackForm
+slug: overview
---
When testing your interviews and after you go live, you'll want a way to for users to tell you their thoughts
@@ -29,7 +29,7 @@ The standard feedback cycle for a software product is the following:
6. Repeat back to 1.
This tool helps you solve steps 3 and 4; users submitting feedback to you, and you being able to triage that feedback.
-Since much docassemble development [already involves GitHub](../github.md), the AssemblyLine uses [GitHub's issues](https://docs.github.com/en/issues) to handle and triage feedback.
+Since much docassemble development [already involves GitHub](../../authoring/github.md), the AssemblyLine uses [GitHub's issues](https://docs.github.com/en/issues) to handle and triage feedback.
GitHub issues let you tag user feedback as such, link issues to PRs that fix the code, and track
when the fix has been added to the code.
@@ -51,7 +51,7 @@ It won't:
Before you start, we'll assume that you:
* have access to an [admin account on a docassemble server](https://suffolklitlab.org/legal-tech-class/docs/classes/assembly-line/2020-assembly-line-assignment-1#before-you-get-started)
-* have the [`GithubFeedbackForm` package installed on your server](https://assemblyline.suffolklitlab.org/docs/installation#run-the-installation-script)
+* have the [`GithubFeedbackForm` package installed on your server](../../get_started/installation.md#run-the-installation-script)
* know how to [edit the docassemble configuration (config) file](https://docassemble.org/docs/config.html#edit)
* know [what the playground is](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#introduction-to-the-docassemble-playground) and [how to use it to develop a docassemble interview](https://suffolklitlab.org/legal-tech-class/docs/classes/docacon-2020/hello-world#hello-world)
* know [what "blocks" are](https://suffolklitlab.org/legal-tech-class/docs/yaml#documents) in docassemble
@@ -128,7 +128,7 @@ you setup [`github issues` in the config block above](#configuration), there sho
While having a feedback link in the footer is useful for users who are specifically seeking to give feedback, you can take a more proactive approach and let users
give quick feedback with an in-interview review widget. The final product of this guide will look like the below screenshot:
-
+
This review information is stored only on the docassemble server, and isn't sent out to GitHub.
@@ -157,7 +157,7 @@ The key lines in the above are:
The `only_once_review_widget` will ask two questions, one is a simple "Did we help you?" with thumbs up and thumbs down options, and the second is an open text box for users to write more. If they answer the first question and refresh the screen or continue through the interview, the feedback widget won't be shown again, given that the user
doesn't go back past the widget's screen in the interview.
-You can change several aspects of the review widget. For more information, see [the API reference of `review_widget` in ALToolbox](../reference/ALToolbox/misc#review_widget). That is the function `only_once_review_widget` is using.
+You can change several aspects of the review widget. For more information, see [the API reference of `review_widget` in ALToolbox](../ALToolbox/misc.md#review_widget). That is the function `only_once_review_widget` is using.
The `only_once_review_widget` review information is only stored on the docassemble server, and can be viewed [using the feedback browsing interview](#how-to-browse-feedback-on-the-server).
@@ -172,6 +172,6 @@ The other option is for reviews, which will show all of the scores given to an i
:::note Under development
-The browsing feature is actively under development. If you have suggestions for improvements, [let us know on Teams](/docs/get_started).
+The browsing feature is actively under development. If you have suggestions for improvements, [let us know on Teams](../../get_started/intro.md).
:::
diff --git a/docs/analytics/tracking_usage.md b/docs/components/InterviewStats/interviewstats_overview.md
similarity index 99%
rename from docs/analytics/tracking_usage.md
rename to docs/components/InterviewStats/interviewstats_overview.md
index e2f136f76..25c2327d1 100644
--- a/docs/analytics/tracking_usage.md
+++ b/docs/components/InterviewStats/interviewstats_overview.md
@@ -1,8 +1,8 @@
---
-id: tracking_usage
+id: interviewstats_overview
title: 'InterviewStats: Tracking usage of Assembly Line interviews'
sidebar_label: InterviewStats
-slug: /analytics/tracking_usage
+slug: overview
---
## Overview
diff --git a/docs/complexity/complexity.md b/docs/components/RateMyPDF/ratemypdf_overview.md
similarity index 97%
rename from docs/complexity/complexity.md
rename to docs/components/RateMyPDF/ratemypdf_overview.md
index 0f7147729..2a69c24b0 100644
--- a/docs/complexity/complexity.md
+++ b/docs/components/RateMyPDF/ratemypdf_overview.md
@@ -1,8 +1,8 @@
---
-id: complexity
+id: ratemypdf_overview
title: Scoring form complexity with RateMyPDF
sidebar_label: RateMyPDF
-slug: /complexity/complexity
+slug: overview
---
[RateMyPDF](https://ratemypdf.com) is a tool built by Suffolk LIT Lab to help you
@@ -46,7 +46,7 @@ browse the forms we gathered on the [Form Explorer](https://suffolklitlab.org/fo
### Download and cite our paper
Please cite our paper, our dataset, and this website as follows:
@@ -60,7 +60,7 @@ Bibtex format:
## Why readability scores aren't good enough
-[Readability](style_guide_readability.md) has been one of the only available
+[Readability](../../style_guide/readability) has been one of the only available
tools to measure the ease of use of court forms. Forward thinking courts have
readability targets of 6th grade. But because people don't just read forms--they
answer questions and follow instructions--readability isn't a very good measure
@@ -187,7 +187,7 @@ to identify and validate the features the RateMyPDF score measures.
And:
-1. Our own page on [readability](style_guide_readability.md)
+1. Our own page on [readability](../../style_guide/readability)
1. [Readability Scores: Reference guide](https://brycewilley.xyz/2022/01/readability-scores-reference), by team member Bryce Willey
1. [Benchmarking everyday documents](https://uploads-ssl.webflow.com/5c06fb475dbf1265069aba1e/5c2bb2a81110ecda570573fe_SC5Benchmarkingv4.pdf), Martin Evans, April 2011
1. [What makes a good document?](https://www.reading.ac.uk/web/files/simplification/SC2CriteriaGoodDoc-7.pdf), Rob Waller, April 2011
diff --git a/docs/components/formfyxer/docx_wrangling.md b/docs/components/formfyxer/docx_wrangling.md
new file mode 100644
index 000000000..47f745009
--- /dev/null
+++ b/docs/components/formfyxer/docx_wrangling.md
@@ -0,0 +1,123 @@
+---
+sidebar_label: docx_wrangling
+title: formfyxer.docx_wrangling
+---
+
+#### update\_docx
+
+Update the document with the modified runs.
+
+Note: OpenAI is probabilistic, so the modified run indices may not be correct.
+When the index of a run or paragraph is out of range, a new paragraph
+will be inserted at the end of the document or a new run at the end of the
+paragraph's runs.
+
+Take a careful look at the output document to make sure it is still correct.
+
+**Arguments**:
+
+- `document` - the docx.Document object, or the path to the DOCX file
+- `modified_runs` - a tuple of paragraph number, run number, the modified text, a question (not used), and whether a new paragraph should be inserted (for conditional text)
+
+
+**Returns**:
+
+ The modified document.
+
+#### get\_docx\_repr
+
+Return a JSON representation of the paragraphs and runs in the DOCX file.
+
+**Arguments**:
+
+- `docx_path` - path to the DOCX file
+
+
+**Returns**:
+
+ A JSON representation of the paragraphs and runs in the DOCX file.
+
+#### get\_labeled\_docx\_runs
+
+Scan the DOCX and return a list of modified text with Jinja2 variable names inserted.
+
+**Arguments**:
+
+- `docx_path` - path to the DOCX file
+- `docx_repr` - a string representation of the paragraphs and runs in the DOCX file, if docx_path is not provided. This might be useful if you want
+- `custom_people_names` - a tuple of custom names and descriptions to use in addition to the default ones. Like: ("clients", "the person benefiting from the form")
+
+
+**Returns**:
+
+ A list of tuples, each containing a paragraph number, run number, and the modified text of the run.
+
+#### get\_modified\_docx\_runs
+
+Use GPT to rewrite the contents of a DOCX file paragraph by paragraph. Does not handle tables, footers, or
+other structures yet.
+
+This is a light wrapper that provides the structure of DOCX paragraphs and runs to your prompt
+to OpenAI to facilitate the rewriting of the document without disrupting formatting.
+
+For example, this could be used to:
+* Remove any passive voice
+* Replace placeholder text with variable names
+* Rewrite to a 6th grade reading level
+* Do an advanced search and replace, without requiring you to use a regex
+
+By default, the example prompt includes a sample like this:
+
+[
+[0, 0, "Dear "],
+[0, 1, "John Smith:"],
+[1, 0, "I hope this letter finds you well."],
+]
+
+Your custom instructions should include an example of how the sample will be modified, like the one below:
+
+Example reply, indicating paragraph, run, the new text, and a number indicating if this changes the
+current paragraph, adds one before, or adds one after (-1, 0, 1):
+
+\{"results":
+[
+[0, 1, "Dear \{\{ other_parties[0] \}\}:", 0],
+[2, 0, "\{%p if is_tenant %\}", -1],
+[3, 0, "\{%p endif %\}", 1],
+]
+\}
+
+You may also want to customize the input example to better match your use case.
+
+**Arguments**:
+
+- `docx_path` _str_ - path to the DOCX file
+- `docx_repr` _str_ - a string representation of the paragraphs and runs in the DOCX file, if docx_path is not provided.
+- `custom_example` _Optional[str]_ - a string containing the purpose and overview of the task
+ instructions (str) a string containing specific instructions for the task
+- `openai_client` _Optional[OpenAI]_ - an OpenAI client object. If not provided a new one will be created.
+- `api_key` _Optional[str]_ - an OpenAI API key. If not provided, it will be obtained from the environment
+- `temperature` _float_ - the temperature to use when generating text. Lower temperatures are more conservative.
+
+
+**Returns**:
+
+ A list of tuples, each containing a paragraph number, run number, and the modified text of the run.
+
+#### make\_docx\_plain\_language
+
+Convert a DOCX file to plain language with the help of OpenAI.
+
+#### modify\_docx\_with\_openai\_guesses
+
+Uses OpenAI to guess the variable names for a document and then modifies the document with the guesses.
+
+**Arguments**:
+
+- `docx_path` _str_ - Path to the DOCX file to modify.
+
+
+**Returns**:
+
+- `docx.Document` - The modified document, ready to be saved to the same or a new path
+
diff --git a/docs/components/formfyxer/lit_explorer.md b/docs/components/formfyxer/lit_explorer.md
new file mode 100644
index 000000000..b2fe030b5
--- /dev/null
+++ b/docs/components/formfyxer/lit_explorer.md
@@ -0,0 +1,257 @@
+---
+sidebar_label: lit_explorer
+title: formfyxer.lit_explorer
+---
+
+#### recursive\_get\_id
+
+Pull ID values out of the LIST/NSMI results from Spot.
+
+#### spot
+
+Call the Spot API (https://spot.suffolklitlab.org) to classify the text of a PDF using
+the NSMIv2/LIST taxonomy (https://taxonomy.legal/), but returns only the IDs of issues found in the text.
+
+#### re\_case
+
+Capture PascalCase, snake_case and kebab-case terms and add spaces to separate the joined words
+
+#### regex\_norm\_field
+
+Apply some heuristics to a field name to see if we can get it to match AssemblyLine conventions.
+See: https://assemblyline.suffolklitlab.org/docs/document_variables
+
+#### reformat\_field
+
+Transforms a string of text into a snake_case variable close in length to `max_length` name by
+summarizing the string and stitching the summary together in snake_case.
+h/t https://towardsdatascience.com/nlp-building-a-summariser-68e0c19e3a93
+
+#### norm
+
+Normalize a word vector.
+
+#### vectorize
+
+Vectorize a string of text.
+
+**Arguments**:
+
+- `text` - a string of multiple words to vectorize
+- `tools_token` - the token to tools.suffolklitlab.org, used for micro-service
+ to reduce the amount of memory you need on your machine. If
+ not passed, you need to have `en_core_web_lg` installed
+
+#### normalize\_name
+
+Normalize a field name, if possible to the Assembly Line conventions, and if
+not, to a snake_case variable name of appropriate length.
+
+HACK: temporarily all we do is re-case it and normalize it using regex rules.
+Will be replaced with call to LLM soon.
+
+#### cluster\_screens
+
+Groups the given fields into screens based on how much they are related.
+
+**Arguments**:
+
+- `fields` - a list of field names
+- `damping` - a value >= 0.5 and < 1. Tunes how related screens should be
+- `tools_token` - the token to tools.suffolklitlab.org, needed of doing
+ micro-service vectorization
+
+- `Returns` - a suggested screen grouping, each screen name mapped to the list of fields on it
+
+## InputType Objects
+
+```python
+class InputType(Enum)
+```
+
+Input type maps onto the type of input the PDF author chose for the field. We only
+handle text, checkbox, and signature fields.
+
+#### field\_types\_and\_sizes
+
+Transform the fields provided by get_existing_pdf_fields into a summary format.
+Result will look like:
+[
+\{
+"var_name": var_name,
+"type": "text | checkbox | signature",
+"max_length": n
+\}
+]
+
+## AnswerType Objects
+
+```python
+class AnswerType(Enum)
+```
+
+Answer type describes the effort the user answering the form will require.
+"Slot-in" answers are a matter of almost instantaneous recall, e.g., name, address, etc.
+"Gathered" answers require looking around one's desk, for e.g., a health insurance number.
+"Third party" answers require picking up the phone to call someone else who is the keeper
+of the information.
+"Created" answers don't exist before the user is presented with the question. They may include
+a choice, creating a narrative, or even applying legal reasoning. "Affidavits" are a special
+form of created answers.
+See Jarret and Gaffney, Forms That Work (2008)
+
+#### classify\_field
+
+Apply heuristics to the field's original and "normalized" name to classify
+it as either a "slot-in", "gathered", "third party" or "created" field type.
+
+#### get\_adjusted\_character\_count
+
+Determines the bracketed length of an input field based on its max_length attribute,
+returning a float representing the approximate length of the field content.
+
+The function chunks the answers into 5 different lengths (checkboxes, 2 words, short, medium, and long)
+instead of directly using the character count, as forms can allocate different spaces
+for the same data without considering the space the user actually needs.
+
+**Arguments**:
+
+- `field` _FieldInfo_ - An object containing information about the input field,
+ including the "max_length" attribute.
+
+
+**Returns**:
+
+- `float` - The approximate length of the field content, categorized into checkboxes, 2 words, short,
+ medium, or long based on the max_length attribute.
+
+
+**Examples**:
+
+ >>> get_adjusted_character_count(\{"type"\}: InputType.CHECKBOX)
+ 4.7
+ >>> get_adjusted_character_count(\{"max_length": 100\})
+ 9.4
+ >>> get_adjusted_character_count(\{"max_length": 300\})
+ 230
+ >>> get_adjusted_character_count(\{"max_length": 600\})
+ 115
+ >>> get_adjusted_character_count(\{"max_length": 1200\})
+ 1150
+
+#### time\_to\_answer\_field
+
+Apply a heuristic for the time it takes to answer the given field, in minutes.
+It is hand-written for now.
+It will factor in the input type, the answer type (slot in, gathered, third party or created), and the
+amount of input text allowed in the field.
+The return value is a function that can return N samples of how long it will take to answer the field (in minutes)
+
+#### time\_to\_answer\_form
+
+Provide an estimate of how long it would take an average user to respond to the questions
+on the provided form.
+We use signals such as the field type, name, and space provided for the response to come up with a
+rough estimate, based on whether the field is:
+1. fill in the blank
+2. gathered - e.g., an id number, case number, etc.
+3. third party: need to actually ask someone the information - e.g., income of not the user, anything else?
+4. created:
+a. short created (3 lines or so?)
+b. long created (anything over 3 lines)
+
+#### cleanup\_text
+
+Apply cleanup routines to text to provide more accurate readability statistics.
+
+#### text\_complete
+
+Run a prompt via openAI's API and return the result.
+
+**Arguments**:
+
+- `prompt` _str_ - The prompt to send to the API.
+- `max_tokens` _int, optional_ - The number of tokens to generate. Defaults to 500.
+- `creds` _Optional[OpenAiCreds], optional_ - The credentials to use. Defaults to None.
+- `temperature` _float, optional_ - The temperature to use. Defaults to 0.
+
+#### complete\_with\_command
+
+Combines some text with a command to send to open ai.
+
+#### needs\_calculations
+
+A conservative guess at if a given form needs the filler to make math calculations,
+something that should be avoided. If
+
+#### get\_passive\_sentences
+
+Return a list of tuples, where each tuple represents a
+sentence in which passive voice was detected along with a list of the
+starting and ending position of each fragment that is phrased in the passive voice.
+The combination of the two can be used in the PDFStats frontend to highlight the
+passive text in an individual sentence.
+
+Text can either be a string or a list of strings.
+If provided a single string, it will be tokenized with NTLK and
+sentences containing fewer than 2 words will be ignored.
+
+#### get\_citations
+
+Get citations and some extra surrounding context (the full sentence), if the citation is
+fewer than 5 characters (often eyecite only captures a section symbol
+for state-level short citation formats)
+
+#### substitute\_phrases
+
+Substitute phrases in the input string and return the new string and positions of substituted phrases.
+
+**Arguments**:
+
+- `input_string` _str_ - The input string containing phrases to be replaced.
+- `substitution_phrases` _Dict[str, str]_ - A dictionary mapping original phrases to their replacement phrases.
+
+
+**Returns**:
+
+ Tuple[str, List[Tuple[int, int]]]: A tuple containing the new string with substituted phrases and a list of
+ tuples, each containing the start and end positions of the substituted
+ phrases in the new string.
+
+
+**Example**:
+
+ >>> input_string = "The quick brown fox jumped over the lazy dog."
+ >>> substitution_phrases = \{"quick brown": "swift reddish", "lazy dog": "sleepy canine"\}
+ >>> new_string, positions = substitute_phrases(input_string, substitution_phrases)
+ >>> print(new_string)
+ "The swift reddish fox jumped over the sleepy canine."
+ >>> print(positions)
+ [(4, 17), (35, 48)]
+
+#### substitute\_neutral\_gender
+
+Substitute gendered phrases with neutral phrases in the input string.
+Primary source is https://github.com/joelparkerhenderson/inclusive-language
+
+#### substitute\_plain\_language
+
+Substitute complex phrases with simpler alternatives.
+Source of terms is drawn from https://www.plainlanguage.gov/guidelines/words/
+
+#### transformed\_sentences
+
+Apply a function to a list of sentences and return only the sentences with changed terms.
+The result is a tuple of the original sentence, new sentence, and the starting and ending position
+of each changed fragment in the sentence.
+
+#### parse\_form
+
+Read in a pdf, pull out basic stats, attempt to normalize its form fields, and re-write the
+in_file with the new fields (if `rewrite=1`). If you pass a spot token, we will guess the
+NSMI code. If you pass openai creds, we will give suggestions for the title and description.
+
+#### form\_complexity
+
+Gets a single number of how hard the form is to complete. Higher is harder.
+
diff --git a/docs/components/formfyxer/pdf_wrangling.md b/docs/components/formfyxer/pdf_wrangling.md
new file mode 100644
index 000000000..b5dca6cec
--- /dev/null
+++ b/docs/components/formfyxer/pdf_wrangling.md
@@ -0,0 +1,323 @@
+---
+sidebar_label: pdf_wrangling
+title: formfyxer.pdf_wrangling
+---
+
+## FieldType Objects
+
+```python
+class FieldType(Enum)
+```
+
+#### TEXT
+
+Text input Field
+
+#### AREA
+
+Text input Field, but an area
+
+#### LIST\_BOX
+
+allows multiple selection
+
+#### CHOICE
+
+allows only one selection
+
+## FormField Objects
+
+```python
+class FormField()
+```
+
+A data holding class, used to easily specify how a PDF form field should be created.
+
+#### \_\_init\_\_
+
+Constructor
+
+**Arguments**:
+
+- `x` - the x position of the lower left corner of the field. Should be in X,Y coordinates,
+ where (0, 0) is the lower left of the page, x goes to the right, and units are in
+ points (1/72th of an inch)
+- `y` - the y position of the lower left corner of the field. Should be in X,Y coordinates,
+ where (0, 0) is the lower left of the page, y goes up, and units are in points
+ (1/72th of an inch)
+- `config` - a dictionary containing any keyword argument to the reportlab field functions,
+ which will vary depending on what type of field this is. See section 4.7 of the
+ [reportlab User Guide](https://www.reportlab.com/docs/reportlab-userguide.pdf)
+- `field_name` - the name of the field, exposed to via most APIs. Not the tooltip, but `users1_name__0`
+
+#### set\_fields
+
+Adds fields per page to the in_file PDF, writing the new PDF to a new file.
+
+Example usage:
+
+```python
+set_fields('no_fields.pdf', 'four_fields_on_second_page.pdf',
+ [
+ [], # nothing on the first page
+ [ # Second page
+ FormField('new_field', 'text', 110, 105, configs=\{'width': 200, 'height': 30\}),
+ # Choice needs value to be one of the possible options, and options to be a list of strings or tuples
+ FormField('new_choices', 'choice', 110, 400, configs=\{'value': 'Option 1', 'options': ['Option 1', 'Option 2']\}),
+ # Radios need to have the same name, with different values
+ FormField('new_radio1', 'radio', 110, 600, configs=\{'value': 'option a'\}),
+ FormField('new_radio1', 'radio', 110, 500, configs=\{'value': 'option b'\})
+ ]
+ ]
+)
+```
+
+**Arguments**:
+
+- `in_file` - the input file name or path of a PDF that we're adding the fields to
+- `out_file` - the output file name or path where the new version of in_file will
+ be written. Doesn't need to exist.
+- `fields_per_page` - for each page, a series of fields that should be added to that
+ page.
+- `owerwrite` - if the input file already some fields (AcroForm fields specifically)
+ and this value is true, it will erase those existing fields and just add
+ `fields_per_page`. If not true and the input file has fields, this won't generate
+ a PDF, since there isn't currently a way to merge AcroForm fields from
+ different PDFs.
+
+
+**Returns**:
+
+ Nothing.
+
+#### rename\_pdf\_fields
+
+Given a dictionary that maps old to new field names, rename the AcroForm
+field with a matching key to the specified value.
+
+**Example**:
+
+```python
+rename_pdf_fields('current.pdf', 'new_field_names.pdf',
+ \{'abc123': 'user1_name', 'abc124', 'user1_address_city'\})
+
+Args:
+ in_file: the filename of an input file
+ out_file: the filename of the output file. Doesn't need to exist,
+ will be overwritten if it does exist.
+ mapping: the python dict that maps from a current field name to the desired name
+
+Returns:
+ Nothing
+
+#### unlock\_pdf\_in\_place
+
+Try using pikePDF to unlock the PDF it it is locked. This won't work if it has a non-zero length password.
+
+#### has\_fields
+
+Check if a PDF has at least one form field using PikePDF.
+
+**Arguments**:
+
+- `pdf_file` _str_ - The path to the PDF file.
+
+
+**Returns**:
+
+- `bool` - True if the PDF has at least one form field, False otherwise.
+
+#### get\_existing\_pdf\_fields
+
+Use PikePDF to get fields from the PDF
+
+#### swap\_pdf\_page
+
+(DEPRECATED: use copy_pdf_fields) Copies the AcroForm fields from one PDF to another blank PDF form. Optionally, choose a starting page for both
+the source and destination PDFs. By default, it will remove any existing annotations (which include form fields)
+in the destination PDF. If you wish to append annotations instead, specify `append_fields = True`
+
+#### copy\_pdf\_fields
+
+Copies the AcroForm fields from one PDF to another blank PDF form (without AcroForm fields).
+Useful for getting started with an updated PDF form, where the old fields are pretty close to where
+they should go on the new document.
+
+Optionally, you can choose a starting page for both
+the source and destination PDFs. By default, it will remove any existing annotations (which include form fields)
+in the destination PDF. If you wish to append annotations instead, specify `append_fields = True`
+
+**Example**:
+
+```python
+new_pdf_with_fields = copy_pdf_fields(
+ source_pdf="old_pdf.pdf",
+ destination_pdf="new_pdf_with_no_fields.pdf")
+new_pdf_with_fields.save("new_pdf_with_fields.pdf")
+```
+
+
+**Arguments**:
+
+- `source_pdf` - a file name or path to a PDF that has AcroForm fields
+- `destination_pdf` - a file name or path to a PDF without AcroForm fields. Existing fields will be removed.
+- `source_offset` - the starting page that fields will be copied from. Defaults to 0.
+- `destination_offset` - the starting page that fields will be copied to. Defaults to 0.
+- `append_annotations` - controls whether formfyxer will try to append form fields instead of
+ overwriting. Defaults to false; when enabled may lead to undefined behavior.
+
+
+**Returns**:
+
+ A pikepdf.Pdf object with new fields. If `blank_pdf` was a pikepdf.Pdf object, the
+ same object is returned.
+
+#### get\_original\_text\_with\_fields
+
+Gets the original text of the document, with the names of the fields in jinja format (\{\{field_name\}\})
+
+#### get\_textboxes\_in\_pdf
+
+Gets all of the text boxes found by pdfminer in a PDF, as well as their bounding boxes
+
+#### get\_bracket\_chars\_in\_pdf
+
+Gets all of the bracket characters ('[' and ']') found by pdfminer in a PDF, as well as their bounding boxes
+TODO: Will eventually be used to find [ ] as checkboxes, but right now we can't tell the difference between [ ] and [i].
+This simply gets all of the brackets, and the characters of [hi] in a PDF and [ ] are the exact same distance apart.
+Currently going with just "[hi]" doesn't happen, let's hope that assumption holds.
+
+#### intersect\_bbox
+
+bboxes are [left edge, bottom edge, horizontal length, vertical length]
+
+#### intersect\_bboxs
+
+Returns an iterable of booleans, one of each of the input bboxes, true if it collides with bbox_a
+
+#### contain\_boxes
+
+Given two bounding boxes, return a single bounding box that contains both of them.
+
+#### get\_dist\_sq
+
+returns the distance squared between two points. Faster than the true euclidean dist
+
+#### get\_dist
+
+euclidean (L^2 norm) distance between two points
+
+#### get\_connected\_edges
+
+point list is always ordered clockwise from the bottom left,
+i.e. bottom left, top left, top right, bottom right
+
+#### bbox\_distance
+
+Gets our specific "distance measure" between two different bounding boxes.
+This distance is roughly the sum of the horizontal and vertical difference in alignment of
+the closest shared field-bounding box edge. We are trying to find which, given a list of text boxes
+around a field, is the most likely to be the actual text label for the PDF field.
+
+bboxes are 4 floats, x, y, width and height
+
+#### get\_possible\_fields
+
+Given an input PDF, runs a series of heuristics to predict where there
+might be places for user enterable information (i.e. PDF fields), and returns
+those predictions.
+
+**Example**:
+
+```python
+fields = get_possible_fields('no_field.pdf')
+print(fields[0][0])
+# Type: FieldType.TEXT, Name: name, User name: , X: 67.68, Y: 666.0, Configs: \{'fieldFlags': 'doNotScroll', 'width': 239.4, 'height': 16\}
+```
+
+
+**Arguments**:
+
+- `in_pdf_file` - the input PDF
+- `textboxes` _optional_ - the location of various lines of text in the PDF.
+ If not given, will be calculated automatically. This allows us to
+ pass through expensive info to calculate through several functions.
+
+
+**Returns**:
+
+ For each page in the input PDF, a list of predicted form fields
+
+## LowestVertVisitor Objects
+
+```python
+class LowestVertVisitor()
+```
+
+Gets just the closest text to the field, and returns that
+
+#### replace\_in\_original
+
+Given the original text of a PDF (extract_text(...)), adds the field's names in their best places.
+Doesn't always work, especially with duplicate text.
+
+#### get\_possible\_checkboxes
+
+Uses boxdetect library to determine if there are checkboxes on an image of a PDF page.
+Assumes the checkbox is square.
+
+find_small: if true, finds smaller checkboxes. Sometimes will "find" a checkbox in letters,
+like O and D, if the font is too small
+
+#### get\_possible\_radios
+
+Even though it's called "radios", it just gets things shaped like circles, not
+doing any semantic analysis yet.
+
+#### get\_possible\_text\_fields
+
+Uses openCV to attempt to find places where a PDF could expect an input text field.
+
+Caveats so far: only considers straight, normal horizonal lines that don't touch any vertical lines as fields
+Won't find field inputs as boxes
+
+default_line_height: the default height (16 pt), in pixels (at 200 dpi), which is 45
+
+#### auto\_add\_fields
+
+Uses [get_possible_fields](#get_possible_fields) and
+[set_fields](#set_fields) to automatically add new detected fields
+to an input PDF.
+
+**Example**:
+
+```python
+auto_add_fields('no_fields.pdf', 'newly_added_fields.pdf')
+```
+
+
+**Arguments**:
+
+- `in_pdf_file` - the input file name or path of the PDF where we'll try to find possible fields
+- `out_pdf_file` - the output file name or path of the PDF where a new version of `in_pdf_file` will
+ be stored, with the new fields. Doesn't need to existing, but if a file does exist at that
+ filename, it will be overwritten.
+
+
+**Returns**:
+
+ Nothing
+
+#### is\_tagged
+
+Determines if the input PDF file is tagged for accessibility.
+
+**Arguments**:
+
+- `in_pdf_file` _Union[str, Path]_ - The path to the PDF file, as a string or a Path object.
+
+
+**Returns**:
+
+- `bool` - True if the PDF is tagged, False otherwise.
+
diff --git a/docs/components/sidebar.json b/docs/components/sidebar.json
new file mode 100644
index 000000000..3a961ce06
--- /dev/null
+++ b/docs/components/sidebar.json
@@ -0,0 +1,12 @@
+{
+ "items": [
+ "components/AssemblyLine/al_courts",
+ "components/AssemblyLine/al_document",
+ "components/AssemblyLine/al_general",
+ "components/AssemblyLine/language",
+ "components/AssemblyLine/project_maintenance",
+ "components/AssemblyLine/sessions"
+ ],
+ "label": "AssemblyLine",
+ "type": "category"
+}
\ No newline at end of file
diff --git a/docs/contributors.md b/docs/contributors.md
index ff9fc84c4..006d3bd21 100644
--- a/docs/contributors.md
+++ b/docs/contributors.md
@@ -2,7 +2,7 @@
id: contributors
title: Project Contributors
sidebar_label: Contributors
-slug: /contributors
+slug: contributors
---
The Document Assembly Line project was organized by the Suffolk LIT Lab in the early days of the COVIC pandemic in 2020. Volunteers from around the world worked together to build online guided interviews so people could complete vital legal forms. This page acknowledges as many of those early contributors as possible.
diff --git a/docs/doc_vars_overview.md b/docs/doc_vars_overview.md
deleted file mode 100644
index 35418123f..000000000
--- a/docs/doc_vars_overview.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-id: document_variables_overview
-title: Overview of variable names in documents
-sidebar_label: Overview
-slug: /vars_overview
----
-
-Under development
diff --git a/docs/get_started/al_project_architecture.md b/docs/get_started/al_project_architecture.md
index aabdb86a0..de6bf0e90 100644
--- a/docs/get_started/al_project_architecture.md
+++ b/docs/get_started/al_project_architecture.md
@@ -2,7 +2,7 @@
id: al_project_architecture
title: The Document Assembly Line Architecture
sidebar_label: Project Architecture
-slug: /get_started/al_project_architecture
+slug: al_project_architecture
---
This page provides a bird's-eye view of how various repositories of the **Document AssemblyLine Project** work together. This information is intended for those who want to take full advantage of the Project for their interviews, and for those who potentially want to adopt our Project for their own state or country.
@@ -16,11 +16,11 @@ Below is a snapshot of the Project's overall architecture as of **June 2022**. W
| Component | Description | GitHub Repository |
|:----------|:------------|:------------------|
| [AssemblyLine](https://github.com/suffolkLITLab/docassemble-AssemblyLine) | Utility library that makes it easier to use certain Docassemble features in an interview. | [SuffolkLITLab/docassemble-AssemblyLine](https://github.com/SuffolkLITLab/docassemble-AssemblyLine) |
-| [ALWeaver](/docs/generating_code) | Helps create a draft interviews from PDF and DOCX forms. | [suffolkLITLab/docassemble-ALWeaver](https://github.com/SuffolkLITLab/docassemble-ALWeaver) |
+| [ALWeaver](../authoring/weaver_overview.md) | Helps create a draft interviews from PDF and DOCX forms. | [suffolkLITLab/docassemble-ALWeaver](https://github.com/SuffolkLITLab/docassemble-ALWeaver) |
| [ALToolbox](https://github.com/SuffolkLITLab/docassemble-ALToolbox) | Utility functions and components that are used in AssemblyLine but that can be easily used by Docassemble developers who use other platforms. | [SuffolkLITLab/docassemble-ALToolbox](https://github.com/SuffolkLITLab/docassemble-ALToolbox) |
-| [ALKiln](/docs/alkiln/intro) | Automated testing framework that acts like a user, following your instructions to do things like fill in fields, upload files, sign in, and check your PDFs for accuracy. | [SuffolkLITLab/ALKiln](https://github.com/SuffolkLITLab/ALKiln) |
+| [ALKiln](../components/ALKiln/intro.mdx) | Automated testing framework that acts like a user, following your instructions to do things like fill in fields, upload files, sign in, and check your PDFs for accuracy. | [SuffolkLITLab/ALKiln](https://github.com/SuffolkLITLab/ALKiln) |
| ALDashboard | A collection of tools to help administer a Docassemble server and debug interviews. | [SuffolkLITLab/docassemble-ALDashboard](https://github.com/SuffolkLITLab/docassemble-ALDashboard) |
-| [ALRecipes](/docs/framework/alrecipes) | Examples for Document Assembly Line interviews, plus generic Docassemble examples addressing specific needs. | [SuffolkLITLab/docassemble-ALRecipes](https://github.com/SuffolkLITLab/docassemble-ALRecipes) |
+| [ALRecipes](../components/ALRecipes/alrecipes_overview.md) | Examples for Document Assembly Line interviews, plus generic Docassemble examples addressing specific needs. | [SuffolkLITLab/docassemble-ALRecipes](https://github.com/SuffolkLITLab/docassemble-ALRecipes) |
| [InterviewStats](https://github.com/SuffolkLITLab/docassemble-InterviewStats/) | A docassemble interview that lets you view statistics from other saved interview responses. | [SuffolkLITLab/InterviewStats/docassemble-InterviewStats](https://github.com/SuffolkLITLab/docassemble-InterviewStats/) |
| Documentation | This website. | [SuffolkLITLab/docassemble-AssemblyLine-documentation](https://github.com/SuffolkLITLab/docassemble-AssemblyLine-documentation) |
| E-Filing Proxy Server | | [SuffolkLITLab/EfileProxyServer](https://github.com/SuffolkLITLab/EfileProxyServer) |
diff --git a/docs/get_started/beginners_guide.md b/docs/get_started/beginners_guide.md
index 4b182c5f1..70e6e2fe7 100644
--- a/docs/get_started/beginners_guide.md
+++ b/docs/get_started/beginners_guide.md
@@ -2,7 +2,7 @@
id: beginners_guide
title: Learn to build Docassemble interviews
sidebar_label: Beginner's guide
-slug: /get_started/beginners_guide
+slug: beginners_guide
---
**If you have never used Docassemble before, you are on the right page!** This is how the [LIT Lab](https://suffolklitlab.org) teaches people to turn their first court form into a Docassemble guided interview.
@@ -45,7 +45,7 @@ Now you are probably itching to start building your first interview! But before
## Review the interview project management guide
-Building a successful interview involves more than just coding in the Docassemble playground. You'll also need to consider things like project management, [working with a team](working_with_teams.md), [requirements](working_with_teams.md#understanding-the-projects-users-and-intended-purpose), [usability](../question_style_overview.md), [testing](/alkiln/intro.mdx), etc.
+Building a successful interview involves more than just coding in the Docassemble playground. You'll also need to consider things like project management, [working with a team](working_with_teams.md), [requirements](working_with_teams.md#understanding-the-projects-users-and-intended-purpose), [usability](../style_guide/question_style_overview.md), [testing](../components/ALKiln/intro.mdx), etc.
**➡️ [Review the interview project management guide.](project_management.md)**
diff --git a/docs/get_started/development_roadmap.md b/docs/get_started/development_roadmap.md
index 02fd00fdc..4bdf1d36e 100644
--- a/docs/get_started/development_roadmap.md
+++ b/docs/get_started/development_roadmap.md
@@ -2,7 +2,7 @@
id: development_roadmap
title: Development roadmap for the Document Assembly Line
sidebar_label: Development roadmap
-slug: /get_started/development_roadmap
+slug: development_roadmap
---
The Document Assembly Line is under continuous development. Our goal with this roadmap is to share our plans and priorities for the Document Assembly Line with the community.
diff --git a/docs/get_started/installation.md b/docs/get_started/installation.md
index 799f2659a..e194849b9 100644
--- a/docs/get_started/installation.md
+++ b/docs/get_started/installation.md
@@ -2,7 +2,7 @@
id: installation
title: Installing the Document Assembly Line
sidebar_label: Install the Assembly Line
-slug: /get_started/installation
+slug: installation
---
Before you get started, make sure that you have [installed
@@ -80,7 +80,7 @@ them for your own jurisdiction or organization.
To use this package, [pull it into your own Docassemble playground](https://docassemble.org/docs/playground.html#packages).
-Next, [follow our guide](/framework/althemetemplate.md) to edit the YAML files and add a custom CSS theme to fit your own organization's needs.
+Next, [follow our guide](../components/ALThemeTemplate/althemetemplate_overview.md) to edit the YAML files and add a custom CSS theme to fit your own organization's needs.
Now, create a new package from the [Playground packages menu](https://docassemble.org/docs/playground.html#packages).
Give the package a meaningful name, like LouisianaSharedBranding.
@@ -94,7 +94,7 @@ challenging to rename a package.
### Using your ALThemeTemplate with the ALWeaver
-If you plan on using the [ALWeaver](weaver_overview.md) to create your
+If you plan on using the [ALWeaver](../authoring/weaver_overview.md) to create your
interviews, you will want to include your branding package in your
weaved interviews. You can do this by adding 2 files to your branding
package:
diff --git a/docs/get_started/intro.md b/docs/get_started/intro.md
index 4f9f2fe7a..21c827ef3 100644
--- a/docs/get_started/intro.md
+++ b/docs/get_started/intro.md
@@ -17,12 +17,12 @@ This short, 3-minute video by David Colarusso and Quinten Steenhuis explains how
The LIT Lab gathered more than 200 volunteers from around the world and built tools such as:
-* A [project management guide](/get_started/project_management.md) for building [Docassemble](https://docassemble.org) interviews to assemble court forms for filing.
+* A [project management guide](project_management.md) for building [Docassemble](https://docassemble.org) interviews to assemble court forms for filing.
* The core [Document Assembly Line Tools](https://github.com/SuffolkLITLab/docassemble-AssemblyLine), to make it easier to use key Docassemble features.
-* The [the Weaver](generating_code), a tool for converting existing PDF and DOCX court forms into draft Docassemble interviews in as little as one hour.
-* A [library](question_library/names) of pre-built, commonly used, accessible questions, vetted by experts and translated into at least 5 languages.
-* A [style guide](style_guide/question_overview) for interview questions that are easy to read and answer.
-* The first [open-source, non-profit e-filing service provider (EFSP)](efiling/overview) so that forms completed through guided interviews could be filed directly with courts using the Tyler e-filing management system.
+* The [the Weaver](../authoring/weaver_overview.md), a tool for converting existing PDF and DOCX court forms into draft Docassemble interviews in as little as one hour.
+* A [library](../style_guide/question_library/names.md) of pre-built, commonly used, accessible questions, vetted by experts and translated into at least 5 languages.
+* A [style guide](../style_guide/question_style_overview.md) for interview questions that are easy to read and answer.
+* The first [open-source, non-profit e-filing service provider (EFSP)](components/EFSPIntegration/efsp_overview.md) so that forms completed through guided interviews could be filed directly with courts using the Tyler e-filing management system.
* A [collection of existing PDF forms](https://suffolklitlab.org/form-explorer/)
across multiple jurisdictions.
diff --git a/docs/get_started/plan_interview.md b/docs/get_started/plan_interview.md
index 0b9d14706..e288767e7 100644
--- a/docs/get_started/plan_interview.md
+++ b/docs/get_started/plan_interview.md
@@ -2,7 +2,7 @@
id: plan_interview
title: Planning your interview
sidebar_label: Planning your interview
-slug: /get_started/planning
+slug: planning
---
## Planning and automating your first interview with the Assembly Line Framework
diff --git a/docs/get_started/project_management.md b/docs/get_started/project_management.md
index c5135766a..12872d197 100644
--- a/docs/get_started/project_management.md
+++ b/docs/get_started/project_management.md
@@ -2,7 +2,7 @@
id: project_management
title: Interview project management guide
sidebar_label: Project management
-slug: /get_started/project_management
+slug: project_management
---
Whether you are a LIT Clinic student, a recent [Forms Camp](https://www.ncsc.org/consulting-and-research/areas-of-expertise/access-to-justice/forms-camp) graduate, or anyone else getting started on an interview-building project, this page will guide you through the stages of a successful project.
@@ -87,10 +87,10 @@ Different projects will have different MVPs/"skateboards". The [legal form matur
## Complete the draft interview
-After the kickoff meeting it is time to get to work! As you work on the interview, follow the [GitHub workflow](../github.md#workflow). If you get stuck on a problem for more than twenty minutes, ask for help. (Use the [Resources](resources.md) page to find options.)
+After the kickoff meeting it is time to get to work! As you work on the interview, follow the [GitHub workflow](../authoring/github.md#workflow). If you get stuck on a problem for more than twenty minutes, ask for help. (Use the [Resources](resources.md) page to find options.)
:::tip
-The LIT Lab's [interview project template](https://github.com/orgs/SuffolkLITLab/projects/22) can help you keep your project organized and on track. Just click the **Use this template** button to use it. (You'll need a free [GitHub](../github.md) account.)
+The LIT Lab's [interview project template](https://github.com/orgs/SuffolkLITLab/projects/22) can help you keep your project organized and on track. Just click the **Use this template** button to use it. (You'll need a free [GitHub](../authoring/github.md) account.)
:::
## Meeting cadence
@@ -126,7 +126,7 @@ Weekly or every-other week meetings with the decisionmaker and one or two key st
When sharing progress and the current plan, it can help to give a percentage estimate. Something like: "We think we are about 30% of the way to a complete draft interview, and by our next meeting we hope to be at 50%."
:::tip
-Use [GitHub issues](../github.md#use-issues) to keep track of your questions for the decisionmaker. If you add a **question** label to issues, it is easy to pull up the list of your questions during a meeting.
+Use [GitHub issues](../authoring/github.md#use-issues) to keep track of your questions for the decisionmaker. If you add a **question** label to issues, it is easy to pull up the list of your questions during a meeting.
:::
To get better answers, ask questions better. Here are some tips for asking questions:
@@ -177,7 +177,7 @@ Share the interview with the decisionmaker and give them a few tips for giving h
## Revise the interview
-After getting feedback, create a [GitHub issue](../github#use-issues) for each change request from the tester or decisionmaker. Consider this your "punch list" to finish the project. Then get back to work on those issues!
+After getting feedback, create a [GitHub issue](../authoring/github.md#use-issues) for each change request from the tester or decisionmaker. Consider this your "punch list" to finish the project. Then get back to work on those issues!
When you have closed all the issues/items on your punch list, send it back to the decisionmaker for further feedback. Each round of feedback should result in fewer change requests and move the project closer to completion.
@@ -203,7 +203,7 @@ Once the interview is live, consider how people who need it will find it.
* Others might want to direct people to the interview, like courts, legal aid organizations, and other advocates. Ask them to link to your landing page from their own websites.
* Paid advertising can help spread awareness, if you have a budget for it.
-You can also set up [collect analytics](../analytics/tracking_usage) to learn how people are finding and using the interview.
+You can also set up [collect analytics](../components/InterviewStats/interviewstats_overview.md) to learn how people are finding and using the interview.
## Do a retrospective
diff --git a/docs/get_started/resources.md b/docs/get_started/resources.md
index 6a7f6b1b0..33fb9d47a 100644
--- a/docs/get_started/resources.md
+++ b/docs/get_started/resources.md
@@ -2,7 +2,7 @@
id: resources
title: Interview Building Resources
sidebar_label: Resources
-slug: /get_started/resources
+slug: resources
---
As you are building interviews, use these resources to find answers to your questions, solve problems you run into, and get help.
@@ -49,7 +49,7 @@ Docassemble interview files use several kinds of markup. Most of what you will n
* [Markdown](https://daringfireball.net/projects/markdown/) (formatting text)
* [Mako](https://docs.makotemplates.org/en/latest/) (using variables and code within questions)
* [Python](https://docs.python.org/3/reference/index.html) (coding in Mako tags and [code blocks](https://docassemble.org/docs/code.html))
-* [Jinja](https://jinja.palletsprojects.com/en/3.0.x/) (used in [DOCX templates](/docs/docx))
+* [Jinja](https://jinja.palletsprojects.com/en/3.0.x/) (used in [DOCX templates](../authoring/docx_templates.md))
You can also use [HTML](https://docassemble.org/docs/markup.html#markdownhtml), [CSS](https://docassemble.org/docs/ui.html#css), and [Javascript](https://docassemble.org/docs/initial.html#javascript) in Docassemble interviews.
diff --git a/docs/get_started/working_with_teams.md b/docs/get_started/working_with_teams.md
index 3247e4fb1..284378f81 100644
--- a/docs/get_started/working_with_teams.md
+++ b/docs/get_started/working_with_teams.md
@@ -2,7 +2,7 @@
id: working_with_teams
title: Working with Teams
sidebar_label: Working with Teams
-slug: /get_started/working_with_teams
+slug: working_with_teams
---
:::warning
diff --git a/docs/overview.md b/docs/overview.md
index 4271f5fdf..241304a4b 100644
--- a/docs/overview.md
+++ b/docs/overview.md
@@ -2,7 +2,7 @@
id: overview
title: Developing with Docassemble and the Document Assembly Line
sidebar_label: Overview
-slug: /overview
+slug: overview
---
## This documentation covers the custom stuff
diff --git a/docs/reference/sidebar.json b/docs/reference/sidebar.json
deleted file mode 100644
index 99bdda256..000000000
--- a/docs/reference/sidebar.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "items": [
- {
- "items": [
- "reference/ALToolbox/al_income",
- "reference/ALToolbox/business_days",
- "reference/ALToolbox/copy_button",
- "reference/ALToolbox/llms",
- "reference/ALToolbox/misc",
- "reference/ALToolbox/save_input_data"
- ],
- "label": "ALToolbox",
- "type": "category"
- },
- {
- "items": [
- "reference/AssemblyLine/al_courts",
- "reference/AssemblyLine/al_document",
- "reference/AssemblyLine/al_general",
- "reference/AssemblyLine/language",
- "reference/AssemblyLine/project_maintenance",
- "reference/AssemblyLine/sessions"
- ],
- "label": "AssemblyLine",
- "type": "category"
- },
- {
- "items": [
- "reference/EFSPIntegration/conversions",
- "reference/EFSPIntegration/efm_client",
- "reference/EFSPIntegration/interview_logic",
- "reference/EFSPIntegration/py_efsp_client"
- ],
- "label": "EFSPIntegration",
- "type": "category"
- },
- {
- "items": [
- "reference/formfyxer/docx_wrangling",
- "reference/formfyxer/lit_explorer",
- "reference/formfyxer/pdf_wrangling"
- ],
- "label": "formfyxer",
- "type": "category"
- }
- ],
- "label": "API Reference",
- "type": "category"
-}
\ No newline at end of file
diff --git a/docs/question_library/addresses.md b/docs/style_guide/question_library/addresses.md
similarity index 99%
rename from docs/question_library/addresses.md
rename to docs/style_guide/question_library/addresses.md
index 515c76be3..6dde747fd 100644
--- a/docs/question_library/addresses.md
+++ b/docs/style_guide/question_library/addresses.md
@@ -2,7 +2,7 @@
id: ql_addresses
title: Addresses
sidebar_label: Addresses
-slug: /question_library/addresses
+slug: addresses
---
import Tabs from '@theme/Tabs';
diff --git a/docs/question_library/assets/alindividual_gender_fields.png b/docs/style_guide/question_library/assets/alindividual_gender_fields.png
similarity index 100%
rename from docs/question_library/assets/alindividual_gender_fields.png
rename to docs/style_guide/question_library/assets/alindividual_gender_fields.png
diff --git a/docs/question_library/assets/alindividual_name_fields.png b/docs/style_guide/question_library/assets/alindividual_name_fields.png
similarity index 100%
rename from docs/question_library/assets/alindividual_name_fields.png
rename to docs/style_guide/question_library/assets/alindividual_name_fields.png
diff --git a/docs/question_library/assets/alindividual_pronoun_fields.png b/docs/style_guide/question_library/assets/alindividual_pronoun_fields.png
similarity index 100%
rename from docs/question_library/assets/alindividual_pronoun_fields.png
rename to docs/style_guide/question_library/assets/alindividual_pronoun_fields.png
diff --git a/docs/question_library/assets/example-al-language.png b/docs/style_guide/question_library/assets/example-al-language.png
similarity index 100%
rename from docs/question_library/assets/example-al-language.png
rename to docs/style_guide/question_library/assets/example-al-language.png
diff --git a/docs/question_library/gender.md b/docs/style_guide/question_library/gender.md
similarity index 99%
rename from docs/question_library/gender.md
rename to docs/style_guide/question_library/gender.md
index fab93c1ff..5484cf467 100644
--- a/docs/question_library/gender.md
+++ b/docs/style_guide/question_library/gender.md
@@ -2,7 +2,7 @@
id: ql_gender
title: Gender
sidebar_label: Gender
-slug: /question_library/gender
+slug: gender
---
import Tabs from '@theme/Tabs';
diff --git a/docs/question_library/language.md b/docs/style_guide/question_library/language.md
similarity index 99%
rename from docs/question_library/language.md
rename to docs/style_guide/question_library/language.md
index 875e9f9d0..97e4700e7 100644
--- a/docs/question_library/language.md
+++ b/docs/style_guide/question_library/language.md
@@ -2,7 +2,7 @@
id: ql_language
title: language
sidebar_label: Language
-slug: /question_library/language
+slug: language
---
import Tabs from '@theme/Tabs';
diff --git a/docs/question_library/names.md b/docs/style_guide/question_library/names.md
similarity index 99%
rename from docs/question_library/names.md
rename to docs/style_guide/question_library/names.md
index c56925a27..b3026b44a 100644
--- a/docs/question_library/names.md
+++ b/docs/style_guide/question_library/names.md
@@ -2,7 +2,7 @@
id: ql_names
title: Names
sidebar_label: Names
-slug: /question_library/names
+slug: names
---
import Tabs from '@theme/Tabs';
diff --git a/docs/question_library/pronouns.md b/docs/style_guide/question_library/pronouns.md
similarity index 99%
rename from docs/question_library/pronouns.md
rename to docs/style_guide/question_library/pronouns.md
index d1320cb35..740d1c018 100644
--- a/docs/question_library/pronouns.md
+++ b/docs/style_guide/question_library/pronouns.md
@@ -2,7 +2,7 @@
id: ql_pronouns
title: Pronouns
sidebar_label: Pronouns
-slug: /question_library/pronouns
+slug: pronouns
---
import Tabs from '@theme/Tabs';
diff --git a/docs/question_library/terms_of_use.md b/docs/style_guide/question_library/terms_of_use.md
similarity index 99%
rename from docs/question_library/terms_of_use.md
rename to docs/style_guide/question_library/terms_of_use.md
index d6af150da..c773799e5 100644
--- a/docs/question_library/terms_of_use.md
+++ b/docs/style_guide/question_library/terms_of_use.md
@@ -2,7 +2,7 @@
id: ql_terms_of_use
title: Terms of Use
sidebar_label: Terms of Use
-slug: /question_library/terms_of_use
+slug: terms_of_use
---
## How to share a terms of use with your users
diff --git a/docs/question_style_help_your_user.md b/docs/style_guide/question_style_help_your_user.md
similarity index 99%
rename from docs/question_style_help_your_user.md
rename to docs/style_guide/question_style_help_your_user.md
index 2c6db0da6..eca6bacb3 100644
--- a/docs/question_style_help_your_user.md
+++ b/docs/style_guide/question_style_help_your_user.md
@@ -2,7 +2,7 @@
id: question_style_help_your_user
title: Help your user
sidebar_label: Help your user
-slug: /style_guide/question_help_your_user
+slug: question_help_your_user
---
## Provide help information in context
diff --git a/docs/question_style_organize_fields.md b/docs/style_guide/question_style_organize_fields.md
similarity index 98%
rename from docs/question_style_organize_fields.md
rename to docs/style_guide/question_style_organize_fields.md
index c5ecfae67..a57820e6c 100644
--- a/docs/question_style_organize_fields.md
+++ b/docs/style_guide/question_style_organize_fields.md
@@ -2,7 +2,7 @@
id: question_style_organize_fields
title: Organize fields thoughtfully on each screen
sidebar_label: Organize fields thoughtfully on each screen
-slug: /style_guide/question_style_organize_fields
+slug: question_style_organize_fields
---
Guided interviews aren't constrained by the length of a piece of paper. But
diff --git a/docs/question_style_overview.md b/docs/style_guide/question_style_overview.md
similarity index 96%
rename from docs/question_style_overview.md
rename to docs/style_guide/question_style_overview.md
index 8a5a6a01b..a77917512 100644
--- a/docs/question_style_overview.md
+++ b/docs/style_guide/question_style_overview.md
@@ -2,7 +2,7 @@
id: question_style_overview
title: Writing good questions
sidebar_label: Writing good questions
-slug: /style_guide/question_overview
+slug: question_overview
---
@@ -22,7 +22,7 @@ those tips might be different in the context of guided interviews compared to
more general guidance about good legal writing and good writing for forms.
We have also thought deeply about how to **measure** the burden that completing
-a form places on a user. You might find our section on [form complexity](complexity/complexity.md) helpful to read along with this section.
+a form places on a user. You might find our section on [form complexity](../components/RateMyPDF/ratemypdf_overview.md) helpful to read along with this section.
## There's no substitute for usability testing
diff --git a/docs/question_style_sensitivities.md b/docs/style_guide/question_style_sensitivities.md
similarity index 93%
rename from docs/question_style_sensitivities.md
rename to docs/style_guide/question_style_sensitivities.md
index e0bf8476b..45ded71eb 100644
--- a/docs/question_style_sensitivities.md
+++ b/docs/style_guide/question_style_sensitivities.md
@@ -2,13 +2,13 @@
id: question_style_sensitivities
title: Be considerate to your user
sidebar_label: Be considerate to your user
-slug: /style_guide/question_style_sensitivities
+slug: question_style_sensitivities
---
## Respect your user
This overlaps with the suggestions under [Respect and persuade your
-reader](/docs/style_guide/respect).
+reader](style_guide_persuasive.md).
## Provide choices that validate the user's identity
diff --git a/docs/question_style_structure.md b/docs/style_guide/question_style_structure.md
similarity index 99%
rename from docs/question_style_structure.md
rename to docs/style_guide/question_style_structure.md
index 01bb68381..d6208238b 100644
--- a/docs/question_style_structure.md
+++ b/docs/style_guide/question_style_structure.md
@@ -2,7 +2,7 @@
id: question_style_structure
title: Group questions into screens
sidebar_label: Group questions into screens
-slug: /style_guide/question_structure
+slug: question_structure
---
## Structuring your guided interview
diff --git a/docs/question_style_validation.md b/docs/style_guide/question_style_validation.md
similarity index 98%
rename from docs/question_style_validation.md
rename to docs/style_guide/question_style_validation.md
index b6a64d2fc..d70150a8c 100644
--- a/docs/question_style_validation.md
+++ b/docs/style_guide/question_style_validation.md
@@ -2,7 +2,7 @@
id: question_style_validation
title: Use input validation carefully
sidebar_label: Use input validation carefully
-slug: /style_guide/question_style_validation
+slug: question_style_validation
---
## When to use input validation
diff --git a/docs/style_guide_formatting.md b/docs/style_guide/style_guide_formatting.md
similarity index 97%
rename from docs/style_guide_formatting.md
rename to docs/style_guide/style_guide_formatting.md
index 3ec229e2b..2bd8082b9 100644
--- a/docs/style_guide_formatting.md
+++ b/docs/style_guide/style_guide_formatting.md
@@ -2,7 +2,7 @@
id: style_guide_formatting
title: Format text for legibility
sidebar_label: Format text for legibility
-slug: /style_guide/formatting
+slug: formatting
---
## Avoid "walls of text"
@@ -16,7 +16,7 @@ If you are tempted to write a large amount of text on the screen, consider:
1. Using a link
1. Adding a [progressive disclosure
-element](/docs/coding_style_guide/yaml_interface) that lets a user click to read more.
+element](../coding_style/yaml_interface.md) that lets a user click to read more.
Your user is very goal oriented when using a legal form. They rarely come to
a form to be educated about the law. Help them get to the end as quickly
diff --git a/docs/style_guide_persuasive.md b/docs/style_guide/style_guide_persuasive.md
similarity index 99%
rename from docs/style_guide_persuasive.md
rename to docs/style_guide/style_guide_persuasive.md
index a49f6d88f..5987dfe4c 100644
--- a/docs/style_guide_persuasive.md
+++ b/docs/style_guide/style_guide_persuasive.md
@@ -2,7 +2,7 @@
id: style_guide_respect
title: Respect your user
sidebar_label: Respect your user
-slug: /style_guide/respect
+slug: respect
---
Write in a way that respects your reader. Do not tell your reader how to think or feel.
diff --git a/docs/style_guide_readability.md b/docs/style_guide/style_guide_readability.md
similarity index 99%
rename from docs/style_guide_readability.md
rename to docs/style_guide/style_guide_readability.md
index 60b8dd3e8..812c34be0 100644
--- a/docs/style_guide_readability.md
+++ b/docs/style_guide/style_guide_readability.md
@@ -2,7 +2,7 @@
id: style_guide_readability
title: Use plain language
sidebar_label: Use plain language
-slug: /style_guide/readability
+slug: readability
---
diff --git a/docs/translation/translation.md b/docs/translation.md
similarity index 98%
rename from docs/translation/translation.md
rename to docs/translation.md
index 42ee2e1b9..84e155422 100644
--- a/docs/translation/translation.md
+++ b/docs/translation.md
@@ -2,7 +2,7 @@
id: translation
title: Translating your interview
sidebar_label: Translating your interview
-slug: /translation/translation
+slug: translation
---
The Assembly Line has several tools that build on Docassemble's native translation system
@@ -223,4 +223,4 @@ pre: |
You can read more about the stock language features in the official Docassemble [language features documentation](https://docassemble.org/docs/language.html).
-Also, see the documentation for the [AL language module](/docs/reference/AssemblyLine/language)
\ No newline at end of file
+Also, see the documentation for the [AL language module](components/AssemblyLine/language.md)
\ No newline at end of file
diff --git a/docs/who_is_assembly_line.md b/docs/who_is_assembly_line.md
deleted file mode 100644
index d6408c080..000000000
--- a/docs/who_is_assembly_line.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-id: who_is_assembly_line
-title: |
- Who is the Assembly Line?
-sidebar_label: |
- Who is the Assembly Line?
-slug: /who_is_assembly_line
----
-
-## Our volunteers
-
-## Our partner organizations
-
diff --git a/docusaurus.config.js b/docusaurus.config.js
index ea915f0da..9cdc56ffb 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -77,69 +77,9 @@ module.exports = {
{
redirects: [
{
- from: '/docs',
- to: '/'
- },
- {
- from: '/docs/framework/efiling',
- to: '/docs/efiling/overview'
- },
- {
- from: '/docs/automated_integrated_testing',
- to: '/docs/alkiln'
- },
- {
- from: '/docs/intro',
- to: '/docs/get_started'
- },
- {
- from: '/docs/al_project_architecture',
- to: '/docs/get_started/al_project_architecture'
- },
- {
- from: '/docs/installation',
- to: '/docs/get_started/installation'
- },
- {
- from: '/docs/get_started/roadmap',
- to: '/docs/get_started/project_management'
- },
- {
- from: '/docs/assembly_line_steps',
- to: '/docs/get_started/project_management'
- },
- {
- from: '/docs/assembly_line_steps/roles',
- to: '/docs/get_started/project_management#identify-key-roles--responsibilities'
- },
- {
- from: '/docs/assembly_line_steps/steps',
- to: '/docs/get_started/project_management'
- },
- {
- from: '/docs/bootcamp',
- to: '/docs/archive/bootcamp'
- },
- {
- from: '/docs/get_started/assembly_line_steps/roles',
- to: '/docs/get_started/project_management#identify-key-roles--responsibilities'
- },
- {
- from: '/docs/get_started/assembly_line_steps',
- to: '/docs/get_started/project_management'
- },
- {
- from: '/docs/get_started/assembly_line_steps/steps',
- to: '/docs/get_started/project_management'
- },
- {
- from: '/docs/planning',
- to: '/docs/get_started/planning'
- },
- {
- from: '/docs/authoring/working_with_teams',
- to: '/docs/get_started/working_with_teams'
- },
+ to: '/',
+ from: '/docs'
+ }
]
}
]
@@ -161,7 +101,7 @@ module.exports = {
editUrl:
'https://github.com/SuffolkLITLab/docassemble-AssemblyLine-documentation/edit/main/',
},
-
+ blog: false,
pages: {
},
theme: {
diff --git a/package-lock.json b/package-lock.json
index ef0aaadc1..60e75264c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3782,9 +3782,10 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "license": "MIT"
},
"node_modules/@types/estree-jsx": {
"version": "1.0.5",
@@ -4237,9 +4238,10 @@
}
},
"node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -4247,14 +4249,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -4697,9 +4691,10 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@@ -4709,7 +4704,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -4723,6 +4718,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -4731,6 +4727,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -4738,7 +4735,8 @@
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
"node_modules/bonjour-service": {
"version": "1.2.1",
@@ -4796,9 +4794,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
- "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+ "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
"funding": [
{
"type": "opencollective",
@@ -4813,11 +4811,12 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001640",
- "electron-to-chromium": "^1.4.820",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.1.0"
+ "caniuse-lite": "^1.0.30001669",
+ "electron-to-chromium": "^1.5.41",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -4956,9 +4955,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001641",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz",
- "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==",
+ "version": "1.0.30001680",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz",
+ "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==",
"funding": [
{
"type": "opencollective",
@@ -4972,7 +4971,8 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/ccount": {
"version": "2.0.1",
@@ -5421,6 +5421,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -5431,9 +5432,10 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -6029,6 +6031,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -6045,6 +6048,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
@@ -6245,12 +6249,14 @@
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.4.827",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz",
- "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ=="
+ "version": "1.5.57",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.57.tgz",
+ "integrity": "sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==",
+ "license": "ISC"
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -6280,9 +6286,10 @@
}
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -6296,9 +6303,10 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
- "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -6351,9 +6359,10 @@
"integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
},
"node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -6541,6 +6550,7 @@
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -6601,36 +6611,37 @@
}
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
+ "license": "MIT",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -6666,9 +6677,10 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/express/node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
+ "license": "MIT"
},
"node_modules/express/node_modules/range-parser": {
"version": "1.2.1",
@@ -6724,14 +6736,6 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
- "node_modules/fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==",
- "dependencies": {
- "punycode": "^1.3.2"
- }
- },
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -6858,12 +6862,13 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "license": "MIT",
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -6878,6 +6883,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -6885,7 +6891,8 @@
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
"node_modules/find-cache-dir": {
"version": "4.0.0",
@@ -7104,6 +7111,7 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -7894,6 +7902,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -7924,9 +7933,10 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+ "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
+ "license": "MIT",
"dependencies": {
"@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
@@ -7981,6 +7991,7 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -9168,6 +9179,7 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -9184,9 +9196,13 @@
}
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
@@ -10881,9 +10897,10 @@
]
},
"node_modules/micromatch": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -10896,6 +10913,7 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
"bin": {
"mime": "cli.js"
},
@@ -11097,9 +11115,10 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -11164,9 +11183,10 @@
}
},
"node_modules/object-inspect": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
- "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -11208,6 +11228,7 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
@@ -11497,9 +11518,10 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
+ "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
+ "license": "MIT",
"dependencies": {
"isarray": "0.0.1"
}
@@ -11523,9 +11545,10 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -12353,11 +12376,6 @@
"once": "^1.3.1"
}
},
- "node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
- },
"node_modules/pupa": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz",
@@ -12373,11 +12391,12 @@
}
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -12449,6 +12468,7 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
@@ -12463,6 +12483,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -13308,7 +13329,8 @@
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
},
"node_modules/sax": {
"version": "1.4.1",
@@ -13402,9 +13424,10 @@
}
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "license": "MIT",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
@@ -13428,6 +13451,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -13435,17 +13459,29 @@
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
"node_modules/send/node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -13459,24 +13495,25 @@
}
},
"node_modules/serve-handler": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
- "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
+ "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
- "fast-url-parser": "1.1.3",
"mime-types": "2.1.18",
"minimatch": "3.1.2",
"path-is-inside": "1.0.2",
- "path-to-regexp": "2.2.1",
+ "path-to-regexp": "3.3.0",
"range-parser": "1.2.0"
}
},
"node_modules/serve-handler/node_modules/path-to-regexp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
- "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ=="
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
+ "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
+ "license": "MIT"
},
"node_modules/serve-index": {
"version": "1.9.1",
@@ -13549,14 +13586,15 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+ "license": "MIT",
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -13581,7 +13619,8 @@
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
},
"node_modules/shallow-clone": {
"version": "3.0.1",
@@ -13668,6 +13707,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -13919,6 +13959,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -14345,6 +14386,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
"engines": {
"node": ">=0.6"
}
@@ -14406,6 +14448,7 @@
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -14418,6 +14461,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -14426,6 +14470,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -14635,14 +14680,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"funding": [
{
"type": "opencollective",
@@ -14657,9 +14703,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -14961,20 +15008,20 @@
}
},
"node_modules/webpack": {
- "version": "5.93.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
- "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==",
+ "version": "5.96.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz",
+ "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==",
+ "license": "MIT",
"dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.5",
+ "@types/eslint-scope": "^3.7.7",
+ "@types/estree": "^1.0.6",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
+ "acorn": "^8.14.0",
+ "browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
diff --git a/pydoc-markdown.yml b/pydoc-markdown.yml
index 9e60a9a98..7b60d8ff6 100644
--- a/pydoc-markdown.yml
+++ b/pydoc-markdown.yml
@@ -14,12 +14,12 @@ processors:
renderer:
type: docusaurus
docs_base_path: docs
- relative_output_path: reference
+ relative_output_path: components
relative_sidebar_path: sidebar.json
- sidebar_top_level_label: API Reference
+ sidebar_top_level_label: null
markdown:
escape_html_in_docstring: true
escape_curly_braces_in_docstring: true
signature_code_block: false
render_typehint_in_data_header: true
- toc_maxdepth: 4
+ toc_maxdepth: 6
diff --git a/sidebars.js b/sidebars.js
index 2c2a2b19f..5dd2f672c 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -7,20 +7,26 @@ module.exports = {
'get_started/installation',
'get_started/beginners_guide',
{
- type: 'category',
label: 'Interview Projects',
+ collapsed: false,
+ type: 'category',
items: [
'get_started/project_management',
'get_started/working_with_teams',
],
- collapsed: false,
},
'get_started/resources',
+ {
+ "type": "link",
+ "label": "Developer documentation",
+ "href": "/docs/overview",
+ "description": "View developer documentation"
+ },
'get_started/development_roadmap',
'contributors',
{
- type: 'category',
label: 'Archived Pages',
+ type: 'category',
items: [
'archive/bootcamp',
],
@@ -29,51 +35,51 @@ module.exports = {
docs: [
'overview',
{
- type: 'category',
label: 'Authoring interviews',
+ type: 'category',
items: [
- 'pdf_templates',
- 'docx_templates',
+ 'authoring/pdf_templates',
+ 'authoring/docx_templates',
'authoring/dynamic_phrasing_based_on_values',
- 'document_variables_reference',
- 'name_formats',
- 'alweaver_overview',
- 'github',
- 'customizing_interview',
- 'writing_review_screen',
- 'yaml_anatomy',
+ 'authoring/document_variables_reference',
+ 'authoring/name_formats',
+ 'authoring/alweaver_overview',
+ 'authoring/github',
+ 'authoring/customizing_interview',
+ 'authoring/writing_review_screen',
+ 'authoring/yaml_anatomy',
],
},
{
- type: 'category',
label: 'Writing good questions',
+ type: 'category',
items: [
- 'question_style_overview',
- 'style_guide_respect',
- // 'question_style_sensitivities',
- 'style_guide_readability',
- 'question_style_structure',
- 'question_style_organize_fields',
- 'question_style_help_your_user',
- 'style_guide_formatting',
- 'question_style_validation',
+ 'style_guide/question_style_overview',
+ 'style_guide/style_guide_respect',
+ // 'style_guide/question_style_sensitivities',
+ 'style_guide/style_guide_readability',
+ 'style_guide/question_style_structure',
+ 'style_guide/question_style_organize_fields',
+ 'style_guide/question_style_help_your_user',
+ 'style_guide/style_guide_formatting',
+ 'style_guide/question_style_validation',
{
- type: 'category',
label: 'Question library',
+ type: 'category',
items: [
- 'question_library/ql_names',
- 'question_library/ql_addresses',
- 'question_library/ql_gender',
- 'question_library/ql_pronouns',
- 'question_library/ql_language',
- 'question_library/ql_terms_of_use',
+ 'style_guide/question_library/ql_names',
+ 'style_guide/question_library/ql_addresses',
+ 'style_guide/question_library/ql_gender',
+ 'style_guide/question_library/ql_pronouns',
+ 'style_guide/question_library/ql_language',
+ 'style_guide/question_library/ql_terms_of_use',
]
},
]
},
{
- type: 'category',
label: 'Coding style guide',
+ type: 'category',
items: [
'coding_style/coding_style_overview',
'coding_style/python',
@@ -86,102 +92,108 @@ module.exports = {
'coding_style/accessibility'
]
},
- 'framework/magic_variables',
- 'framework/reserved_keywords',
+ 'translation',
+ {
+ "type": "html",
+ "value": "Assembly Line components",
+ "className": "sidebar-heading",
+ "defaultStyle": true
+ },
{
"type": "category",
"label": "AssemblyLine",
"items": [
- 'framework/algeneral',
- "reference/AssemblyLine/al_general",
- "reference/AssemblyLine/al_courts",
- 'framework/aldocument',
- "reference/AssemblyLine/al_document",
- "reference/AssemblyLine/language",
- 'framework/alreminders',
- "reference/AssemblyLine/sessions",
+ 'components/AssemblyLine/al_general_overview',
+ 'components/AssemblyLine/al_document_overview',
+ 'components/AssemblyLine/al_reminders_overview',
{
- type: 'category',
label: 'Answer sets',
+ type: 'category',
items: [
- 'framework/answer_sets',
- 'framework/answer_set_intakes',
+ 'components/AssemblyLine/answer_sets',
+ 'components/AssemblyLine/answer_set_intakes',
]
},
- 'framework/navigation',
- 'framework/error_actions',
+ 'components/AssemblyLine/magic_variables',
+ 'components/AssemblyLine/reserved_keywords',
+ 'components/AssemblyLine/navigation',
+ 'components/AssemblyLine/error_actions',
+ "components/AssemblyLine/al_general",
+ "components/AssemblyLine/al_courts",
+ "components/AssemblyLine/al_document",
+ "components/AssemblyLine/language",
+ "components/AssemblyLine/sessions",
]
},
- 'framework/alrecipes',
+ 'components/ALRecipes/alrecipes_overview',
{
"type": "category",
"label": "ALToolbox",
"items": [
- 'framework/altoolbox',
+ 'components/ALToolbox/altoolbox_overview',
{
- type: 'category',
label: 'ALIncome',
+ type: 'category',
items: [
- "reference/ALToolbox/al_income",
- 'alincome/overview',
- 'alincome/expenses',
- 'alincome/jobs',
- 'alincome/itemizedjobs',
+ 'components/ALToolbox/al_income_overview',
+ 'components/ALToolbox/al_income_expenses',
+ 'components/ALToolbox/al_income_jobs',
+ 'components/ALToolbox/al_income_itemizedjobs',
]
},
- "reference/ALToolbox/business_days",
- "reference/ALToolbox/copy_button",
- "reference/ALToolbox/misc",
- "reference/ALToolbox/save_input_data",
- "reference/ALToolbox/llms",
+ "components/ALToolbox/al_income",
+ "components/ALToolbox/business_days",
+ "components/ALToolbox/copy_button",
+ "components/ALToolbox/misc",
+ "components/ALToolbox/save_input_data",
+ "components/ALToolbox/llms",
]
},
- 'framework/alrecipes',
- 'framework/althemetemplate',
- 'complexity/complexity',
- 'framework/github_feedback',
- 'analytics/tracking_usage',
+ 'components/ALThemeTemplate/althemetemplate_overview',
+ 'components/RateMyPDF/ratemypdf_overview',
+ 'components/GithubFeedbackForm/githubfeedbackform_overview',
+ 'components/InterviewStats/interviewstats_overview',
{
"label": "FormFyxer",
"type": "category",
"items": [
- "reference/formfyxer/lit_explorer",
- "reference/formfyxer/pdf_wrangling"
- ]
- },
- {
- type: 'category',
- label: 'Translation',
- items: [
- 'translation/translation'
+ "components/FormFyxer/lit_explorer",
+ "components/FormFyxer/docx_wrangling",
+ "components/FormFyxer/pdf_wrangling"
]
},
{
+ label: 'E-filing integration (EFSP)',
type: 'category',
- label: 'E-filing',
items: [
- 'efiling/overview',
- 'efiling/efiling_through_docassemble',
- 'efiling/efiling_case_search',
- 'efiling/efiling_codes',
- 'efiling/monitoring',
+ 'components/EFSPIntegration/efsp_overview',
+ 'components/EFSPIntegration/efiling_through_docassemble',
+ 'components/EFSPIntegration/efiling_case_search',
+ 'components/EFSPIntegration/efiling_codes',
+ 'components/EFSPIntegration/efiling_monitoring',
+ 'components/EFSPIntegration/efiling_api',
+ 'components/EFSPIntegration/efm_client',
+ 'components/EFSPIntegration/conversions',
+ 'components/EFSPIntegration/interview_logic',
+ 'components/EFSPIntegration/py_efsp_client',
+ 'components/EFSPIntegration/test/test_conversions',
]
},
{
+ label: 'Automated testing (ALKiln)',
type: 'category',
- label: 'ALKiln',
items: [
// WIPs
- 'alkiln/alkiln_intro',
+ 'components/ALKiln/alkiln_intro',
// Old
- 'alkiln/alkiln_about',
- 'alkiln/alkiln_advanced',
+ 'components/ALKiln/alkiln_about',
+ 'components/ALKiln/alkiln_advanced',
// WIPs
- 'alkiln/alkiln_setup',
- 'alkiln/alkiln_writing',
- 'alkiln/alkiln_troubleshooting',
- 'alkiln/alkiln_security',
- 'alkiln/alkiln_deprecated',
+ 'components/ALKiln/alkiln_setup',
+ 'components/ALKiln/alkiln_writing_tests',
+ 'components/ALKiln/alkiln_troubleshooting',
+ 'components/ALKiln/alkiln_security',
+ 'components/ALKiln/alkiln_deprecated',
]
}
]
diff --git a/src/css/custom.css b/src/css/custom.css
index 850a372bf..f8734a40c 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -70,6 +70,11 @@ article a,
no-repeat;
}
+.menu__list-item.sidebar-heading {
+ font-weight: bold;
+ padding: var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal);
+}
+
[data-theme='dark'] .header-github-link::before {
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
no-repeat;