pict-section-formeditor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +118 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +162 -0
- package/docs/_sidebar.md +23 -0
- package/docs/_topbar.md +5 -0
- package/docs/cover.md +12 -0
- package/docs/css/docuserve.css +73 -0
- package/docs/index.html +39 -0
- package/docs/retold-catalog.json +224 -0
- package/docs/retold-keyword-index.json +46846 -0
- package/example_applications/form_editor/.quackage.json +10 -0
- package/example_applications/form_editor/FormEditor-Example-Application.js +226 -0
- package/example_applications/form_editor/html/icon-chooser.html +375 -0
- package/example_applications/form_editor/html/index.html +54 -0
- package/example_applications/form_editor/package.json +50 -0
- package/package.json +55 -0
- package/sample_manifests/Complex-Table.json +974 -0
- package/sample_manifests/Distill-Example.json +200 -0
- package/sample_manifests/Gradebook-Assignment.json +38 -0
- package/sample_manifests/Gradebook-Student.json +40 -0
- package/sample_manifests/Manyfest-Editor.json +347 -0
- package/sample_manifests/Simple-Form.json +232 -0
- package/sample_manifests/Simple-Table.json +79 -0
- package/source/Pict-Section-FormEditor-DefaultConfiguration.js +3321 -0
- package/source/Pict-Section-FormEditor.js +35 -0
- package/source/providers/Pict-Provider-ChildPictManager-Application.js +40 -0
- package/source/providers/Pict-Provider-ChildPictManager.js +238 -0
- package/source/providers/Pict-Provider-FormEditorDocumentation.js +356 -0
- package/source/providers/Pict-Provider-FormEditorDragDrop.js +535 -0
- package/source/providers/Pict-Provider-FormEditorIconography.js +1002 -0
- package/source/providers/Pict-Provider-FormEditorManifestOps.js +1443 -0
- package/source/providers/Pict-Provider-FormEditorRendering.js +730 -0
- package/source/providers/Pict-Provider-FormEditorUtilities.js +862 -0
- package/source/providers/Pict-Provider-PreviewCSS.js +42 -0
- package/source/views/PictView-FormEditor-InlineEditing.js +309 -0
- package/source/views/PictView-FormEditor-InputTypePicker.js +532 -0
- package/source/views/PictView-FormEditor-PropertiesPanel.js +7730 -0
- package/source/views/PictView-FormEditor.js +681 -0
- package/test/Pict-Section-FormEditor_tests.js +4102 -0
- package/user-documentation/.pict_documentation_topics.json +695 -0
- package/user-documentation/Getting-Started.md +32 -0
- package/user-documentation/Groups.md +52 -0
- package/user-documentation/Inputs.md +98 -0
- package/user-documentation/Sections.md +36 -0
- package/user-documentation/Shortcuts.md +44 -0
- package/user-documentation/Solver-Expression-Walkthrough.md +176 -0
- package/user-documentation/Solver-Expressions-Advanced.md +344 -0
- package/user-documentation/Solver-Functions.md +213 -0
- package/user-documentation/Solvers.md +81 -0
- package/user-documentation/ToC.md +18 -0
- package/user-documentation/solverfunctions/abs.md +84 -0
- package/user-documentation/solverfunctions/aggregationhistogram.md +83 -0
- package/user-documentation/solverfunctions/aggregationhistogrambyobject.md +64 -0
- package/user-documentation/solverfunctions/arrayconcat.md +64 -0
- package/user-documentation/solverfunctions/avg.md +81 -0
- package/user-documentation/solverfunctions/bucketset.md +69 -0
- package/user-documentation/solverfunctions/ceil.md +70 -0
- package/user-documentation/solverfunctions/cleanvaluearray.md +66 -0
- package/user-documentation/solverfunctions/cleanvalueobject.md +68 -0
- package/user-documentation/solverfunctions/colorgroupbackground.md +60 -0
- package/user-documentation/solverfunctions/colorinputbackground.md +62 -0
- package/user-documentation/solverfunctions/colorinputbackgroundtabular.md +64 -0
- package/user-documentation/solverfunctions/colorsectionbackground.md +59 -0
- package/user-documentation/solverfunctions/compare.md +72 -0
- package/user-documentation/solverfunctions/concat.md +73 -0
- package/user-documentation/solverfunctions/concatraw.md +73 -0
- package/user-documentation/solverfunctions/cos.md +75 -0
- package/user-documentation/solverfunctions/count.md +73 -0
- package/user-documentation/solverfunctions/countset.md +65 -0
- package/user-documentation/solverfunctions/countsetelements.md +63 -0
- package/user-documentation/solverfunctions/createarrayfromabsolutevalues.md +63 -0
- package/user-documentation/solverfunctions/createvalueobjectbyhashes.md +69 -0
- package/user-documentation/solverfunctions/cumulativesummation.md +96 -0
- package/user-documentation/solverfunctions/dateadddays.md +79 -0
- package/user-documentation/solverfunctions/dateaddhours.md +74 -0
- package/user-documentation/solverfunctions/dateaddmilliseconds.md +65 -0
- package/user-documentation/solverfunctions/dateaddminutes.md +72 -0
- package/user-documentation/solverfunctions/dateaddmonths.md +74 -0
- package/user-documentation/solverfunctions/dateaddseconds.md +66 -0
- package/user-documentation/solverfunctions/dateaddweeks.md +73 -0
- package/user-documentation/solverfunctions/dateaddyears.md +74 -0
- package/user-documentation/solverfunctions/datedaydifference.md +84 -0
- package/user-documentation/solverfunctions/datefromparts.md +81 -0
- package/user-documentation/solverfunctions/datehourdifference.md +64 -0
- package/user-documentation/solverfunctions/datemathadd.md +72 -0
- package/user-documentation/solverfunctions/datemilliseconddifference.md +64 -0
- package/user-documentation/solverfunctions/dateminutedifference.md +64 -0
- package/user-documentation/solverfunctions/datemonthdifference.md +66 -0
- package/user-documentation/solverfunctions/dateseconddifference.md +64 -0
- package/user-documentation/solverfunctions/dateweekdifference.md +65 -0
- package/user-documentation/solverfunctions/dateyeardifference.md +64 -0
- package/user-documentation/solverfunctions/differencearrays.md +59 -0
- package/user-documentation/solverfunctions/disablesolverordinal.md +58 -0
- package/user-documentation/solverfunctions/distributionhistogram.md +96 -0
- package/user-documentation/solverfunctions/distributionhistogrambyobject.md +64 -0
- package/user-documentation/solverfunctions/enablesolverordinal.md +57 -0
- package/user-documentation/solverfunctions/entryinset.md +72 -0
- package/user-documentation/solverfunctions/euler.md +77 -0
- package/user-documentation/solverfunctions/exp.md +74 -0
- package/user-documentation/solverfunctions/findfirstvaluebyexactmatch.md +67 -0
- package/user-documentation/solverfunctions/findfirstvaluebystringincludes.md +67 -0
- package/user-documentation/solverfunctions/flatten.md +76 -0
- package/user-documentation/solverfunctions/floor.md +70 -0
- package/user-documentation/solverfunctions/gaussianelimination.md +75 -0
- package/user-documentation/solverfunctions/generatearrayofobjectsfromsets.md +70 -0
- package/user-documentation/solverfunctions/generatehtmlhexcolor.md +67 -0
- package/user-documentation/solverfunctions/getvalue.md +90 -0
- package/user-documentation/solverfunctions/getvaluearray.md +64 -0
- package/user-documentation/solverfunctions/getvalueobject.md +67 -0
- package/user-documentation/solverfunctions/hidesections.md +58 -0
- package/user-documentation/solverfunctions/if.md +109 -0
- package/user-documentation/solverfunctions/iterativeseries.md +107 -0
- package/user-documentation/solverfunctions/join.md +75 -0
- package/user-documentation/solverfunctions/joinraw.md +64 -0
- package/user-documentation/solverfunctions/largestinset.md +63 -0
- package/user-documentation/solverfunctions/leastsquares.md +66 -0
- package/user-documentation/solverfunctions/linest.md +58 -0
- package/user-documentation/solverfunctions/log.md +74 -0
- package/user-documentation/solverfunctions/logvalues.md +65 -0
- package/user-documentation/solverfunctions/match.md +71 -0
- package/user-documentation/solverfunctions/matrixinverse.md +67 -0
- package/user-documentation/solverfunctions/matrixmultiply.md +71 -0
- package/user-documentation/solverfunctions/matrixtranspose.md +72 -0
- package/user-documentation/solverfunctions/matrixvectormultiply.md +69 -0
- package/user-documentation/solverfunctions/max.md +73 -0
- package/user-documentation/solverfunctions/mean.md +63 -0
- package/user-documentation/solverfunctions/median.md +79 -0
- package/user-documentation/solverfunctions/min.md +73 -0
- package/user-documentation/solverfunctions/mode.md +66 -0
- package/user-documentation/solverfunctions/objectkeystoarray.md +66 -0
- package/user-documentation/solverfunctions/objectvaluessortbyexternalobjectarray.md +65 -0
- package/user-documentation/solverfunctions/objectvaluestoarray.md +67 -0
- package/user-documentation/solverfunctions/percent.md +75 -0
- package/user-documentation/solverfunctions/pi.md +77 -0
- package/user-documentation/solverfunctions/polynomialregression.md +69 -0
- package/user-documentation/solverfunctions/predict.md +71 -0
- package/user-documentation/solverfunctions/rad.md +85 -0
- package/user-documentation/solverfunctions/randomfloat.md +63 -0
- package/user-documentation/solverfunctions/randomfloatbetween.md +72 -0
- package/user-documentation/solverfunctions/randomfloatupto.md +65 -0
- package/user-documentation/solverfunctions/randominteger.md +56 -0
- package/user-documentation/solverfunctions/randomintegerbetween.md +72 -0
- package/user-documentation/solverfunctions/randomintegerupto.md +64 -0
- package/user-documentation/solverfunctions/refreshtabularsection.md +57 -0
- package/user-documentation/solverfunctions/resolvehtmlentities.md +64 -0
- package/user-documentation/solverfunctions/round.md +111 -0
- package/user-documentation/solverfunctions/runsolvers.md +49 -0
- package/user-documentation/solverfunctions/setconcatenate.md +64 -0
- package/user-documentation/solverfunctions/setgroupvisibility.md +60 -0
- package/user-documentation/solverfunctions/setsectionvisibility.md +59 -0
- package/user-documentation/solverfunctions/setsolverordinalenabled.md +59 -0
- package/user-documentation/solverfunctions/settabularrowlength.md +57 -0
- package/user-documentation/solverfunctions/setvalue.md +65 -0
- package/user-documentation/solverfunctions/showsections.md +58 -0
- package/user-documentation/solverfunctions/sin.md +83 -0
- package/user-documentation/solverfunctions/slice.md +80 -0
- package/user-documentation/solverfunctions/smallestinset.md +63 -0
- package/user-documentation/solverfunctions/sortarray.md +58 -0
- package/user-documentation/solverfunctions/sorthistogram.md +70 -0
- package/user-documentation/solverfunctions/sorthistogrambykeys.md +69 -0
- package/user-documentation/solverfunctions/sortset.md +75 -0
- package/user-documentation/solverfunctions/sqrt.md +85 -0
- package/user-documentation/solverfunctions/stdev.md +81 -0
- package/user-documentation/solverfunctions/stdeva.md +58 -0
- package/user-documentation/solverfunctions/stdevp.md +83 -0
- package/user-documentation/solverfunctions/stringcountsegments.md +66 -0
- package/user-documentation/solverfunctions/stringgetsegments.md +74 -0
- package/user-documentation/solverfunctions/subtractingsummation.md +66 -0
- package/user-documentation/solverfunctions/sum.md +78 -0
- package/user-documentation/solverfunctions/tan.md +78 -0
- package/user-documentation/solverfunctions/tofixed.md +75 -0
- package/user-documentation/solverfunctions/unionarrays.md +59 -0
- package/user-documentation/solverfunctions/uniquearray.md +58 -0
- package/user-documentation/solverfunctions/var.md +67 -0
- package/user-documentation/solverfunctions/vara.md +58 -0
- package/user-documentation/solverfunctions/varp.md +66 -0
- package/user-documentation/solverfunctions/when.md +98 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Steven Velozo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# pict-section-formeditor
|
|
2
|
+
|
|
3
|
+
A visual editor for [pict-section-form](https://github.com/stevenvelozo/pict-section-form) configuration manifests. Build, edit, and preview form layouts in the browser with a drag-and-drop interface, inline property editing, solver expression authoring, and live form preview.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Visual Editor** -- Drag-and-drop sections, groups, rows, and inputs in a structured layout
|
|
8
|
+
- **JSON Editor** -- Edit the raw manifest JSON with syntax highlighting via CodeJar
|
|
9
|
+
- **Properties Panel** -- Inline editing of section, group, row, and input properties
|
|
10
|
+
- **Solver Editor** -- Author solver expressions with a built-in expression linter and token inspector
|
|
11
|
+
- **Live Preview** -- Render the form as it will appear to end users using a child pict instance
|
|
12
|
+
- **Embedded Help** -- Context-sensitive documentation for all 127+ solver functions, input types, and editor features
|
|
13
|
+
- **Input Type Picker** -- Browse all available pict-section-form input types organized by category
|
|
14
|
+
- **Display Modes** -- Toggle between human-readable names and manifest hash identifiers
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install pict-section-formeditor
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
Add the form editor view to any pict application:
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
const libPict = require('pict');
|
|
28
|
+
const libPictApplication = require('pict-application');
|
|
29
|
+
const libPictSectionFormEditor = require('pict-section-formeditor');
|
|
30
|
+
|
|
31
|
+
class MyApp extends libPictApplication
|
|
32
|
+
{
|
|
33
|
+
onAfterInitializeAsync(fCallback)
|
|
34
|
+
{
|
|
35
|
+
// Provide a manifest object at a known AppData address
|
|
36
|
+
this.pict.AppData.FormConfig =
|
|
37
|
+
{
|
|
38
|
+
Scope: 'MyForm',
|
|
39
|
+
Sections: [],
|
|
40
|
+
Descriptors: {}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// Add the form editor view
|
|
44
|
+
this.pict.addView('FormEditor',
|
|
45
|
+
{
|
|
46
|
+
ViewIdentifier: 'FormEditor',
|
|
47
|
+
ManifestDataAddress: 'AppData.FormConfig',
|
|
48
|
+
DefaultDestinationAddress: '#FormEditor-Container',
|
|
49
|
+
ActiveTab: 'visual'
|
|
50
|
+
}, libPictSectionFormEditor);
|
|
51
|
+
|
|
52
|
+
// Initialize and render
|
|
53
|
+
this.pict.views.FormEditor.initialize();
|
|
54
|
+
this.pict.views.FormEditor.render();
|
|
55
|
+
|
|
56
|
+
return super.onAfterInitializeAsync(fCallback);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
In your HTML, provide a container element and the Pict CSS style block:
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<style id="PICT-CSS"></style>
|
|
65
|
+
<div id="FormEditor-Container"></div>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Configuration Options
|
|
69
|
+
|
|
70
|
+
| Option | Type | Default | Description |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| `ManifestDataAddress` | String | `'FormEditor.Manifest'` | AppData address where the manifest object lives |
|
|
73
|
+
| `DefaultDestinationAddress` | String | -- | CSS selector for the editor container element |
|
|
74
|
+
| `ActiveTab` | String | `'visual'` | Initial tab: `'visual'`, `'json'`, or `'preview'` |
|
|
75
|
+
|
|
76
|
+
## Manifest Format
|
|
77
|
+
|
|
78
|
+
The editor works with standard pict-section-form manifests:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"Scope": "MyForm",
|
|
83
|
+
"Sections": [
|
|
84
|
+
{
|
|
85
|
+
"Hash": "Details",
|
|
86
|
+
"Name": "Contact Details"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"Descriptors": {
|
|
90
|
+
"Name": {
|
|
91
|
+
"Name": "Full Name",
|
|
92
|
+
"Hash": "Name",
|
|
93
|
+
"DataType": "String",
|
|
94
|
+
"PictForm": { "Section": "Details", "Row": 1, "Width": 1 }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Running the Example Application
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd example_applications/form_editor
|
|
104
|
+
npm install
|
|
105
|
+
npx quack build
|
|
106
|
+
# Open html/index.html in a browser
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Building
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm test # Run tests
|
|
113
|
+
npx quack build # Bundle the library
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## License
|
|
117
|
+
|
|
118
|
+
MIT
|
package/docs/.nojekyll
ADDED
|
File without changes
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# pict-section-formeditor
|
|
2
|
+
|
|
3
|
+
A visual editor for pict-section-form configuration manifests.
|
|
4
|
+
|
|
5
|
+
The form editor lets you build and modify pict-section-form manifests through a browser-based interface. Sections, groups, rows, and inputs can be created, rearranged, and configured without hand-editing JSON.
|
|
6
|
+
|
|
7
|
+
## Getting Started
|
|
8
|
+
|
|
9
|
+
### Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install pict-section-formeditor
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Add the Editor to Your Application
|
|
16
|
+
|
|
17
|
+
The form editor is a pict view. Register it with your pict application and point it at a manifest object in `AppData`:
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
const libPictSectionFormEditor = require('pict-section-formeditor');
|
|
21
|
+
|
|
22
|
+
// In your PictApplication subclass:
|
|
23
|
+
onAfterInitializeAsync(fCallback)
|
|
24
|
+
{
|
|
25
|
+
// Seed an empty manifest (or load one from your API)
|
|
26
|
+
this.pict.AppData.FormConfig =
|
|
27
|
+
{
|
|
28
|
+
Scope: 'MyForm',
|
|
29
|
+
Sections: [],
|
|
30
|
+
Descriptors: {}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Create the editor view
|
|
34
|
+
this.pict.addView('FormEditor',
|
|
35
|
+
{
|
|
36
|
+
ViewIdentifier: 'FormEditor',
|
|
37
|
+
ManifestDataAddress: 'AppData.FormConfig',
|
|
38
|
+
DefaultDestinationAddress: '#FormEditor-Container',
|
|
39
|
+
ActiveTab: 'visual'
|
|
40
|
+
}, libPictSectionFormEditor);
|
|
41
|
+
|
|
42
|
+
this.pict.views.FormEditor.initialize();
|
|
43
|
+
this.pict.views.FormEditor.render();
|
|
44
|
+
|
|
45
|
+
return super.onAfterInitializeAsync(fCallback);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### HTML Setup
|
|
50
|
+
|
|
51
|
+
Your page needs two things: the Pict CSS injection target and a container element.
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<style id="PICT-CSS"></style>
|
|
55
|
+
<div id="FormEditor-Container"></div>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The editor injects all of its CSS into `#PICT-CSS` at runtime, so no external stylesheet is required beyond whatever your application already provides.
|
|
59
|
+
|
|
60
|
+
## Editor Tabs
|
|
61
|
+
|
|
62
|
+
The editor provides several tabs along the top:
|
|
63
|
+
|
|
64
|
+
| Tab | Purpose |
|
|
65
|
+
|---|---|
|
|
66
|
+
| **Visual Editor** | Drag-and-drop form layout with inline property editing |
|
|
67
|
+
| **JSON** | Raw manifest JSON editing with syntax highlighting (CodeJar) |
|
|
68
|
+
| **Preview** | Live rendered form using a child pict instance |
|
|
69
|
+
| **Help** | Context-sensitive documentation browser |
|
|
70
|
+
|
|
71
|
+
### Visual Editor
|
|
72
|
+
|
|
73
|
+
The visual editor displays the manifest as a hierarchy of sections, groups, rows, and inputs. Each element can be selected to open its properties in the right-hand panel.
|
|
74
|
+
|
|
75
|
+
- **Sections** are the top-level containers. Add new sections with the toolbar button.
|
|
76
|
+
- **Groups** organize inputs within a section. Each section has a default group.
|
|
77
|
+
- **Rows** are horizontal containers inside groups. Inputs in the same row appear side by side.
|
|
78
|
+
- **Inputs** are the individual form fields. Each input maps to a Descriptor in the manifest.
|
|
79
|
+
|
|
80
|
+
### JSON Editor
|
|
81
|
+
|
|
82
|
+
Switches to a code editor where you can modify the manifest JSON directly. Changes are parsed and applied when you switch back to the visual editor.
|
|
83
|
+
|
|
84
|
+
### Preview
|
|
85
|
+
|
|
86
|
+
Click **Load Preview** to render the current manifest as a live pict-section-form. The preview uses a sandboxed child pict instance so it does not interfere with the editor's own state or CSS.
|
|
87
|
+
|
|
88
|
+
### Solver Editor
|
|
89
|
+
|
|
90
|
+
When editing a section's solvers, a dedicated panel opens with a code editor and two bottom tabs:
|
|
91
|
+
|
|
92
|
+
- **Expression Linter** -- Tokenizes the solver expression in real time and reports errors or warnings
|
|
93
|
+
- **Input Reference** -- Browse available data addresses from the manifest to use in expressions
|
|
94
|
+
|
|
95
|
+
## Configuration
|
|
96
|
+
|
|
97
|
+
Pass options when adding the view:
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
this.pict.addView('FormEditor',
|
|
101
|
+
{
|
|
102
|
+
ViewIdentifier: 'FormEditor',
|
|
103
|
+
|
|
104
|
+
// Where the manifest lives in AppData
|
|
105
|
+
ManifestDataAddress: 'AppData.FormConfig',
|
|
106
|
+
|
|
107
|
+
// CSS selector for the container element
|
|
108
|
+
DefaultDestinationAddress: '#FormEditor-Container',
|
|
109
|
+
|
|
110
|
+
// Which tab to show first: 'visual', 'json', or 'preview'
|
|
111
|
+
ActiveTab: 'visual'
|
|
112
|
+
}, libPictSectionFormEditor);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Loading a Manifest
|
|
116
|
+
|
|
117
|
+
Set the manifest object at the configured `ManifestDataAddress` and re-render:
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
this.pict.AppData.FormConfig = myLoadedManifest;
|
|
121
|
+
this.pict.views.FormEditor.render();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Reading the Manifest Back
|
|
125
|
+
|
|
126
|
+
The editor modifies the manifest in place. Read it back from the same address:
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
let tmpManifest = this.pict.AppData.FormConfig;
|
|
130
|
+
// POST it to your API, save to localStorage, etc.
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Architecture
|
|
134
|
+
|
|
135
|
+
The editor is decomposed into a main view and several providers:
|
|
136
|
+
|
|
137
|
+
| Module | Role |
|
|
138
|
+
|---|---|
|
|
139
|
+
| `PictView-FormEditor` | Main view -- tab switching, lifecycle, coordination |
|
|
140
|
+
| `PictView-FormEditor-PropertiesPanel` | Right-hand property editing, solver editor, preview |
|
|
141
|
+
| `PictView-FormEditor-InlineEditing` | Click-to-edit labels and values in the visual layout |
|
|
142
|
+
| `PictView-FormEditor-InputTypePicker` | Modal for selecting input types by category |
|
|
143
|
+
| `Pict-Provider-FormEditorRendering` | HTML generation for all visual editor elements |
|
|
144
|
+
| `Pict-Provider-FormEditorManifestOps` | CRUD operations on the manifest (add/move/delete) |
|
|
145
|
+
| `Pict-Provider-FormEditorDragDrop` | Drag-and-drop reordering of sections, groups, rows, inputs |
|
|
146
|
+
| `Pict-Provider-FormEditorUtilities` | String helpers, input type definitions, stats |
|
|
147
|
+
| `Pict-Provider-FormEditorIconography` | SVG icon set for the editor UI |
|
|
148
|
+
| `Pict-Provider-FormEditorDocumentation` | Embedded help content and topic index |
|
|
149
|
+
| `Pict-Provider-ChildPictManager` | Manages child pict instances for preview and solver linting |
|
|
150
|
+
| `Pict-Provider-PreviewCSS` | CSS isolation for child pict form previews |
|
|
151
|
+
|
|
152
|
+
## Example Application
|
|
153
|
+
|
|
154
|
+
A complete working example lives in `example_applications/form_editor/`. To run it:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
cd example_applications/form_editor
|
|
158
|
+
npm install
|
|
159
|
+
npx quack build
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Then open `html/index.html` in a browser. The example includes a manifest selector with several sample forms.
|
package/docs/_sidebar.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
- Getting Started
|
|
2
|
+
- [Overview](#/README)
|
|
3
|
+
- [Installation](#/README?id=install)
|
|
4
|
+
- [Quick Start](#/README?id=add-the-editor-to-your-application)
|
|
5
|
+
- [HTML Setup](#/README?id=html-setup)
|
|
6
|
+
|
|
7
|
+
- Using the Editor
|
|
8
|
+
- [Editor Tabs](#/README?id=editor-tabs)
|
|
9
|
+
- [Visual Editor](#/README?id=visual-editor)
|
|
10
|
+
- [JSON Editor](#/README?id=json-editor)
|
|
11
|
+
- [Preview](#/README?id=preview)
|
|
12
|
+
- [Solver Editor](#/README?id=solver-editor)
|
|
13
|
+
|
|
14
|
+
- Developer Guide
|
|
15
|
+
- [Configuration](#/README?id=configuration)
|
|
16
|
+
- [Loading a Manifest](#/README?id=loading-a-manifest)
|
|
17
|
+
- [Reading the Manifest](#/README?id=reading-the-manifest-back)
|
|
18
|
+
- [Architecture](#/README?id=architecture)
|
|
19
|
+
|
|
20
|
+
- Resources
|
|
21
|
+
- [Example Application](#/README?id=example-application)
|
|
22
|
+
- [GitHub](https://github.com/stevenvelozo/pict-section-formeditor)
|
|
23
|
+
- [pict-section-form](https://github.com/stevenvelozo/pict-section-form)
|
package/docs/_topbar.md
ADDED
package/docs/cover.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# pict-section-formeditor
|
|
2
|
+
|
|
3
|
+
> A visual editor for pict-section-form configuration manifests.
|
|
4
|
+
|
|
5
|
+
- Drag-and-drop form layout builder
|
|
6
|
+
- Inline property editing
|
|
7
|
+
- Solver expression authoring with real-time linting
|
|
8
|
+
- Live form preview
|
|
9
|
+
- Embedded help for 127+ solver functions
|
|
10
|
+
|
|
11
|
+
[Get Started](#/README)
|
|
12
|
+
[View on GitHub](https://github.com/stevenvelozo/pict-section-formeditor)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
Pict Docuserve - Base Styles
|
|
3
|
+
============================================================================ */
|
|
4
|
+
|
|
5
|
+
/* Reset and base */
|
|
6
|
+
*, *::before, *::after {
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
html, body {
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
14
|
+
font-size: 16px;
|
|
15
|
+
line-height: 1.5;
|
|
16
|
+
color: #423D37;
|
|
17
|
+
background-color: #fff;
|
|
18
|
+
-webkit-font-smoothing: antialiased;
|
|
19
|
+
-moz-osx-font-smoothing: grayscale;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Typography */
|
|
23
|
+
h1, h2, h3, h4, h5, h6 {
|
|
24
|
+
margin-top: 0;
|
|
25
|
+
line-height: 1.3;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
a {
|
|
29
|
+
color: #2E7D74;
|
|
30
|
+
text-decoration: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
a:hover {
|
|
34
|
+
color: #256861;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Application container */
|
|
38
|
+
#Docuserve-Application-Container {
|
|
39
|
+
min-height: 100vh;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Utility: scrollbar styling */
|
|
43
|
+
::-webkit-scrollbar {
|
|
44
|
+
width: 8px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
::-webkit-scrollbar-track {
|
|
48
|
+
background: #F5F0E8;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
::-webkit-scrollbar-thumb {
|
|
52
|
+
background: #D4CCBE;
|
|
53
|
+
border-radius: 4px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
::-webkit-scrollbar-thumb:hover {
|
|
57
|
+
background: #B5AA9A;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Responsive adjustments */
|
|
61
|
+
@media (max-width: 768px) {
|
|
62
|
+
html {
|
|
63
|
+
font-size: 14px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#Docuserve-Sidebar-Container {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.docuserve-body {
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
}
|
|
73
|
+
}
|
package/docs/index.html
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
7
|
+
<meta name="description" content="Documentation powered by pict-docuserve">
|
|
8
|
+
|
|
9
|
+
<title>Documentation</title>
|
|
10
|
+
|
|
11
|
+
<!-- Application Stylesheet -->
|
|
12
|
+
<link href="css/docuserve.css" rel="stylesheet">
|
|
13
|
+
<!-- KaTeX stylesheet for LaTeX equation rendering -->
|
|
14
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css">
|
|
15
|
+
<!-- PICT Dynamic View CSS Container -->
|
|
16
|
+
<style id="PICT-CSS"></style>
|
|
17
|
+
|
|
18
|
+
<!-- Load the PICT library from jsDelivr CDN -->
|
|
19
|
+
<script src="https://cdn.jsdelivr.net/npm/pict@1/dist/pict.min.js" type="text/javascript"></script>
|
|
20
|
+
<!-- Bootstrap the Application -->
|
|
21
|
+
<script type="text/javascript">
|
|
22
|
+
//<![CDATA[
|
|
23
|
+
Pict.safeOnDocumentReady(() => { Pict.safeLoadPictApplication(PictDocuserve, 2)});
|
|
24
|
+
//]]>
|
|
25
|
+
</script>
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<!-- The root container for the Pict application -->
|
|
29
|
+
<div id="Docuserve-Application-Container"></div>
|
|
30
|
+
|
|
31
|
+
<!-- Mermaid diagram rendering -->
|
|
32
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
|
33
|
+
<script>mermaid.initialize({ startOnLoad: false, theme: 'default' });</script>
|
|
34
|
+
<!-- KaTeX for LaTeX equation rendering -->
|
|
35
|
+
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.js"></script>
|
|
36
|
+
<!-- Load the Docuserve PICT Application Bundle from jsDelivr CDN -->
|
|
37
|
+
<script src="https://cdn.jsdelivr.net/npm/pict-docuserve@0/dist/pict-docuserve.min.js" type="text/javascript"></script>
|
|
38
|
+
</body>
|
|
39
|
+
</html>
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Generated": "2026-02-22T22:01:46.339Z",
|
|
3
|
+
"GitHubOrg": "stevenvelozo",
|
|
4
|
+
"DefaultBranch": "master",
|
|
5
|
+
"Groups": [
|
|
6
|
+
{
|
|
7
|
+
"Name": "Dist",
|
|
8
|
+
"Key": "dist",
|
|
9
|
+
"Description": "",
|
|
10
|
+
"Modules": [
|
|
11
|
+
{
|
|
12
|
+
"Name": "indoctrinate_content_staging",
|
|
13
|
+
"Repo": "indoctrinate_content_staging",
|
|
14
|
+
"Group": "dist",
|
|
15
|
+
"Branch": "master",
|
|
16
|
+
"HasDocs": false,
|
|
17
|
+
"HasCover": false,
|
|
18
|
+
"Sidebar": [],
|
|
19
|
+
"DocFiles": []
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"Name": "Example_applications",
|
|
25
|
+
"Key": "example_applications",
|
|
26
|
+
"Description": "",
|
|
27
|
+
"Modules": [
|
|
28
|
+
{
|
|
29
|
+
"Name": "form_editor",
|
|
30
|
+
"Repo": "form_editor",
|
|
31
|
+
"Group": "example_applications",
|
|
32
|
+
"Branch": "master",
|
|
33
|
+
"HasDocs": true,
|
|
34
|
+
"HasCover": false,
|
|
35
|
+
"Sidebar": [],
|
|
36
|
+
"DocFiles": [
|
|
37
|
+
".pict_documentation_topics.json",
|
|
38
|
+
"Getting-Started.md",
|
|
39
|
+
"Groups.md",
|
|
40
|
+
"Inputs.md",
|
|
41
|
+
"Sections.md",
|
|
42
|
+
"Shortcuts.md",
|
|
43
|
+
"Solver-Expression-Walkthrough.md",
|
|
44
|
+
"Solver-Expressions-Advanced.md",
|
|
45
|
+
"Solver-Functions.md",
|
|
46
|
+
"Solvers.md",
|
|
47
|
+
"ToC.md",
|
|
48
|
+
"solverfunctions/abs.md",
|
|
49
|
+
"solverfunctions/aggregationhistogram.md",
|
|
50
|
+
"solverfunctions/aggregationhistogrambyobject.md",
|
|
51
|
+
"solverfunctions/arrayconcat.md",
|
|
52
|
+
"solverfunctions/avg.md",
|
|
53
|
+
"solverfunctions/bucketset.md",
|
|
54
|
+
"solverfunctions/ceil.md",
|
|
55
|
+
"solverfunctions/cleanvaluearray.md",
|
|
56
|
+
"solverfunctions/cleanvalueobject.md",
|
|
57
|
+
"solverfunctions/colorgroupbackground.md",
|
|
58
|
+
"solverfunctions/colorinputbackground.md",
|
|
59
|
+
"solverfunctions/colorinputbackgroundtabular.md",
|
|
60
|
+
"solverfunctions/colorsectionbackground.md",
|
|
61
|
+
"solverfunctions/compare.md",
|
|
62
|
+
"solverfunctions/concat.md",
|
|
63
|
+
"solverfunctions/concatraw.md",
|
|
64
|
+
"solverfunctions/cos.md",
|
|
65
|
+
"solverfunctions/count.md",
|
|
66
|
+
"solverfunctions/countset.md",
|
|
67
|
+
"solverfunctions/countsetelements.md",
|
|
68
|
+
"solverfunctions/createarrayfromabsolutevalues.md",
|
|
69
|
+
"solverfunctions/createvalueobjectbyhashes.md",
|
|
70
|
+
"solverfunctions/cumulativesummation.md",
|
|
71
|
+
"solverfunctions/dateadddays.md",
|
|
72
|
+
"solverfunctions/dateaddhours.md",
|
|
73
|
+
"solverfunctions/dateaddmilliseconds.md",
|
|
74
|
+
"solverfunctions/dateaddminutes.md",
|
|
75
|
+
"solverfunctions/dateaddmonths.md",
|
|
76
|
+
"solverfunctions/dateaddseconds.md",
|
|
77
|
+
"solverfunctions/dateaddweeks.md",
|
|
78
|
+
"solverfunctions/dateaddyears.md",
|
|
79
|
+
"solverfunctions/datedaydifference.md",
|
|
80
|
+
"solverfunctions/datefromparts.md",
|
|
81
|
+
"solverfunctions/datehourdifference.md",
|
|
82
|
+
"solverfunctions/datemathadd.md",
|
|
83
|
+
"solverfunctions/datemilliseconddifference.md",
|
|
84
|
+
"solverfunctions/dateminutedifference.md",
|
|
85
|
+
"solverfunctions/datemonthdifference.md",
|
|
86
|
+
"solverfunctions/dateseconddifference.md",
|
|
87
|
+
"solverfunctions/dateweekdifference.md",
|
|
88
|
+
"solverfunctions/dateyeardifference.md",
|
|
89
|
+
"solverfunctions/differencearrays.md",
|
|
90
|
+
"solverfunctions/disablesolverordinal.md",
|
|
91
|
+
"solverfunctions/distributionhistogram.md",
|
|
92
|
+
"solverfunctions/distributionhistogrambyobject.md",
|
|
93
|
+
"solverfunctions/enablesolverordinal.md",
|
|
94
|
+
"solverfunctions/entryinset.md",
|
|
95
|
+
"solverfunctions/euler.md",
|
|
96
|
+
"solverfunctions/exp.md",
|
|
97
|
+
"solverfunctions/findfirstvaluebyexactmatch.md",
|
|
98
|
+
"solverfunctions/findfirstvaluebystringincludes.md",
|
|
99
|
+
"solverfunctions/flatten.md",
|
|
100
|
+
"solverfunctions/floor.md",
|
|
101
|
+
"solverfunctions/gaussianelimination.md",
|
|
102
|
+
"solverfunctions/generatearrayofobjectsfromsets.md",
|
|
103
|
+
"solverfunctions/generatehtmlhexcolor.md",
|
|
104
|
+
"solverfunctions/getvalue.md",
|
|
105
|
+
"solverfunctions/getvaluearray.md",
|
|
106
|
+
"solverfunctions/getvalueobject.md",
|
|
107
|
+
"solverfunctions/hidesections.md",
|
|
108
|
+
"solverfunctions/if.md",
|
|
109
|
+
"solverfunctions/iterativeseries.md",
|
|
110
|
+
"solverfunctions/join.md",
|
|
111
|
+
"solverfunctions/joinraw.md",
|
|
112
|
+
"solverfunctions/largestinset.md",
|
|
113
|
+
"solverfunctions/leastsquares.md",
|
|
114
|
+
"solverfunctions/linest.md",
|
|
115
|
+
"solverfunctions/log.md",
|
|
116
|
+
"solverfunctions/logvalues.md",
|
|
117
|
+
"solverfunctions/match.md",
|
|
118
|
+
"solverfunctions/matrixinverse.md",
|
|
119
|
+
"solverfunctions/matrixmultiply.md",
|
|
120
|
+
"solverfunctions/matrixtranspose.md",
|
|
121
|
+
"solverfunctions/matrixvectormultiply.md",
|
|
122
|
+
"solverfunctions/max.md",
|
|
123
|
+
"solverfunctions/mean.md",
|
|
124
|
+
"solverfunctions/median.md",
|
|
125
|
+
"solverfunctions/min.md",
|
|
126
|
+
"solverfunctions/mode.md",
|
|
127
|
+
"solverfunctions/objectkeystoarray.md",
|
|
128
|
+
"solverfunctions/objectvaluessortbyexternalobjectarray.md",
|
|
129
|
+
"solverfunctions/objectvaluestoarray.md",
|
|
130
|
+
"solverfunctions/percent.md",
|
|
131
|
+
"solverfunctions/pi.md",
|
|
132
|
+
"solverfunctions/polynomialregression.md",
|
|
133
|
+
"solverfunctions/predict.md",
|
|
134
|
+
"solverfunctions/rad.md",
|
|
135
|
+
"solverfunctions/randomfloat.md",
|
|
136
|
+
"solverfunctions/randomfloatbetween.md",
|
|
137
|
+
"solverfunctions/randomfloatupto.md",
|
|
138
|
+
"solverfunctions/randominteger.md",
|
|
139
|
+
"solverfunctions/randomintegerbetween.md",
|
|
140
|
+
"solverfunctions/randomintegerupto.md",
|
|
141
|
+
"solverfunctions/refreshtabularsection.md",
|
|
142
|
+
"solverfunctions/resolvehtmlentities.md",
|
|
143
|
+
"solverfunctions/round.md",
|
|
144
|
+
"solverfunctions/runsolvers.md",
|
|
145
|
+
"solverfunctions/setconcatenate.md",
|
|
146
|
+
"solverfunctions/setgroupvisibility.md",
|
|
147
|
+
"solverfunctions/setsectionvisibility.md",
|
|
148
|
+
"solverfunctions/setsolverordinalenabled.md",
|
|
149
|
+
"solverfunctions/settabularrowlength.md",
|
|
150
|
+
"solverfunctions/setvalue.md",
|
|
151
|
+
"solverfunctions/showsections.md",
|
|
152
|
+
"solverfunctions/sin.md",
|
|
153
|
+
"solverfunctions/slice.md",
|
|
154
|
+
"solverfunctions/smallestinset.md",
|
|
155
|
+
"solverfunctions/sortarray.md",
|
|
156
|
+
"solverfunctions/sorthistogram.md",
|
|
157
|
+
"solverfunctions/sorthistogrambykeys.md",
|
|
158
|
+
"solverfunctions/sortset.md",
|
|
159
|
+
"solverfunctions/sqrt.md",
|
|
160
|
+
"solverfunctions/stdev.md",
|
|
161
|
+
"solverfunctions/stdeva.md",
|
|
162
|
+
"solverfunctions/stdevp.md",
|
|
163
|
+
"solverfunctions/stringcountsegments.md",
|
|
164
|
+
"solverfunctions/stringgetsegments.md",
|
|
165
|
+
"solverfunctions/subtractingsummation.md",
|
|
166
|
+
"solverfunctions/sum.md",
|
|
167
|
+
"solverfunctions/tan.md",
|
|
168
|
+
"solverfunctions/tofixed.md",
|
|
169
|
+
"solverfunctions/unionarrays.md",
|
|
170
|
+
"solverfunctions/uniquearray.md",
|
|
171
|
+
"solverfunctions/var.md",
|
|
172
|
+
"solverfunctions/vara.md",
|
|
173
|
+
"solverfunctions/varp.md",
|
|
174
|
+
"solverfunctions/when.md"
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"Name": "Source",
|
|
181
|
+
"Key": "source",
|
|
182
|
+
"Description": "",
|
|
183
|
+
"Modules": [
|
|
184
|
+
{
|
|
185
|
+
"Name": "providers",
|
|
186
|
+
"Repo": "providers",
|
|
187
|
+
"Group": "source",
|
|
188
|
+
"Branch": "master",
|
|
189
|
+
"HasDocs": false,
|
|
190
|
+
"HasCover": false,
|
|
191
|
+
"Sidebar": [],
|
|
192
|
+
"DocFiles": []
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"Name": "views",
|
|
196
|
+
"Repo": "views",
|
|
197
|
+
"Group": "source",
|
|
198
|
+
"Branch": "master",
|
|
199
|
+
"HasDocs": false,
|
|
200
|
+
"HasCover": false,
|
|
201
|
+
"Sidebar": [],
|
|
202
|
+
"DocFiles": []
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"Name": "User-documentation",
|
|
208
|
+
"Key": "user-documentation",
|
|
209
|
+
"Description": "",
|
|
210
|
+
"Modules": [
|
|
211
|
+
{
|
|
212
|
+
"Name": "solverfunctions",
|
|
213
|
+
"Repo": "solverfunctions",
|
|
214
|
+
"Group": "user-documentation",
|
|
215
|
+
"Branch": "master",
|
|
216
|
+
"HasDocs": false,
|
|
217
|
+
"HasCover": false,
|
|
218
|
+
"Sidebar": [],
|
|
219
|
+
"DocFiles": []
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
}
|