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.
Files changed (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/docs/.nojekyll +0 -0
  4. package/docs/README.md +162 -0
  5. package/docs/_sidebar.md +23 -0
  6. package/docs/_topbar.md +5 -0
  7. package/docs/cover.md +12 -0
  8. package/docs/css/docuserve.css +73 -0
  9. package/docs/index.html +39 -0
  10. package/docs/retold-catalog.json +224 -0
  11. package/docs/retold-keyword-index.json +46846 -0
  12. package/example_applications/form_editor/.quackage.json +10 -0
  13. package/example_applications/form_editor/FormEditor-Example-Application.js +226 -0
  14. package/example_applications/form_editor/html/icon-chooser.html +375 -0
  15. package/example_applications/form_editor/html/index.html +54 -0
  16. package/example_applications/form_editor/package.json +50 -0
  17. package/package.json +55 -0
  18. package/sample_manifests/Complex-Table.json +974 -0
  19. package/sample_manifests/Distill-Example.json +200 -0
  20. package/sample_manifests/Gradebook-Assignment.json +38 -0
  21. package/sample_manifests/Gradebook-Student.json +40 -0
  22. package/sample_manifests/Manyfest-Editor.json +347 -0
  23. package/sample_manifests/Simple-Form.json +232 -0
  24. package/sample_manifests/Simple-Table.json +79 -0
  25. package/source/Pict-Section-FormEditor-DefaultConfiguration.js +3321 -0
  26. package/source/Pict-Section-FormEditor.js +35 -0
  27. package/source/providers/Pict-Provider-ChildPictManager-Application.js +40 -0
  28. package/source/providers/Pict-Provider-ChildPictManager.js +238 -0
  29. package/source/providers/Pict-Provider-FormEditorDocumentation.js +356 -0
  30. package/source/providers/Pict-Provider-FormEditorDragDrop.js +535 -0
  31. package/source/providers/Pict-Provider-FormEditorIconography.js +1002 -0
  32. package/source/providers/Pict-Provider-FormEditorManifestOps.js +1443 -0
  33. package/source/providers/Pict-Provider-FormEditorRendering.js +730 -0
  34. package/source/providers/Pict-Provider-FormEditorUtilities.js +862 -0
  35. package/source/providers/Pict-Provider-PreviewCSS.js +42 -0
  36. package/source/views/PictView-FormEditor-InlineEditing.js +309 -0
  37. package/source/views/PictView-FormEditor-InputTypePicker.js +532 -0
  38. package/source/views/PictView-FormEditor-PropertiesPanel.js +7730 -0
  39. package/source/views/PictView-FormEditor.js +681 -0
  40. package/test/Pict-Section-FormEditor_tests.js +4102 -0
  41. package/user-documentation/.pict_documentation_topics.json +695 -0
  42. package/user-documentation/Getting-Started.md +32 -0
  43. package/user-documentation/Groups.md +52 -0
  44. package/user-documentation/Inputs.md +98 -0
  45. package/user-documentation/Sections.md +36 -0
  46. package/user-documentation/Shortcuts.md +44 -0
  47. package/user-documentation/Solver-Expression-Walkthrough.md +176 -0
  48. package/user-documentation/Solver-Expressions-Advanced.md +344 -0
  49. package/user-documentation/Solver-Functions.md +213 -0
  50. package/user-documentation/Solvers.md +81 -0
  51. package/user-documentation/ToC.md +18 -0
  52. package/user-documentation/solverfunctions/abs.md +84 -0
  53. package/user-documentation/solverfunctions/aggregationhistogram.md +83 -0
  54. package/user-documentation/solverfunctions/aggregationhistogrambyobject.md +64 -0
  55. package/user-documentation/solverfunctions/arrayconcat.md +64 -0
  56. package/user-documentation/solverfunctions/avg.md +81 -0
  57. package/user-documentation/solverfunctions/bucketset.md +69 -0
  58. package/user-documentation/solverfunctions/ceil.md +70 -0
  59. package/user-documentation/solverfunctions/cleanvaluearray.md +66 -0
  60. package/user-documentation/solverfunctions/cleanvalueobject.md +68 -0
  61. package/user-documentation/solverfunctions/colorgroupbackground.md +60 -0
  62. package/user-documentation/solverfunctions/colorinputbackground.md +62 -0
  63. package/user-documentation/solverfunctions/colorinputbackgroundtabular.md +64 -0
  64. package/user-documentation/solverfunctions/colorsectionbackground.md +59 -0
  65. package/user-documentation/solverfunctions/compare.md +72 -0
  66. package/user-documentation/solverfunctions/concat.md +73 -0
  67. package/user-documentation/solverfunctions/concatraw.md +73 -0
  68. package/user-documentation/solverfunctions/cos.md +75 -0
  69. package/user-documentation/solverfunctions/count.md +73 -0
  70. package/user-documentation/solverfunctions/countset.md +65 -0
  71. package/user-documentation/solverfunctions/countsetelements.md +63 -0
  72. package/user-documentation/solverfunctions/createarrayfromabsolutevalues.md +63 -0
  73. package/user-documentation/solverfunctions/createvalueobjectbyhashes.md +69 -0
  74. package/user-documentation/solverfunctions/cumulativesummation.md +96 -0
  75. package/user-documentation/solverfunctions/dateadddays.md +79 -0
  76. package/user-documentation/solverfunctions/dateaddhours.md +74 -0
  77. package/user-documentation/solverfunctions/dateaddmilliseconds.md +65 -0
  78. package/user-documentation/solverfunctions/dateaddminutes.md +72 -0
  79. package/user-documentation/solverfunctions/dateaddmonths.md +74 -0
  80. package/user-documentation/solverfunctions/dateaddseconds.md +66 -0
  81. package/user-documentation/solverfunctions/dateaddweeks.md +73 -0
  82. package/user-documentation/solverfunctions/dateaddyears.md +74 -0
  83. package/user-documentation/solverfunctions/datedaydifference.md +84 -0
  84. package/user-documentation/solverfunctions/datefromparts.md +81 -0
  85. package/user-documentation/solverfunctions/datehourdifference.md +64 -0
  86. package/user-documentation/solverfunctions/datemathadd.md +72 -0
  87. package/user-documentation/solverfunctions/datemilliseconddifference.md +64 -0
  88. package/user-documentation/solverfunctions/dateminutedifference.md +64 -0
  89. package/user-documentation/solverfunctions/datemonthdifference.md +66 -0
  90. package/user-documentation/solverfunctions/dateseconddifference.md +64 -0
  91. package/user-documentation/solverfunctions/dateweekdifference.md +65 -0
  92. package/user-documentation/solverfunctions/dateyeardifference.md +64 -0
  93. package/user-documentation/solverfunctions/differencearrays.md +59 -0
  94. package/user-documentation/solverfunctions/disablesolverordinal.md +58 -0
  95. package/user-documentation/solverfunctions/distributionhistogram.md +96 -0
  96. package/user-documentation/solverfunctions/distributionhistogrambyobject.md +64 -0
  97. package/user-documentation/solverfunctions/enablesolverordinal.md +57 -0
  98. package/user-documentation/solverfunctions/entryinset.md +72 -0
  99. package/user-documentation/solverfunctions/euler.md +77 -0
  100. package/user-documentation/solverfunctions/exp.md +74 -0
  101. package/user-documentation/solverfunctions/findfirstvaluebyexactmatch.md +67 -0
  102. package/user-documentation/solverfunctions/findfirstvaluebystringincludes.md +67 -0
  103. package/user-documentation/solverfunctions/flatten.md +76 -0
  104. package/user-documentation/solverfunctions/floor.md +70 -0
  105. package/user-documentation/solverfunctions/gaussianelimination.md +75 -0
  106. package/user-documentation/solverfunctions/generatearrayofobjectsfromsets.md +70 -0
  107. package/user-documentation/solverfunctions/generatehtmlhexcolor.md +67 -0
  108. package/user-documentation/solverfunctions/getvalue.md +90 -0
  109. package/user-documentation/solverfunctions/getvaluearray.md +64 -0
  110. package/user-documentation/solverfunctions/getvalueobject.md +67 -0
  111. package/user-documentation/solverfunctions/hidesections.md +58 -0
  112. package/user-documentation/solverfunctions/if.md +109 -0
  113. package/user-documentation/solverfunctions/iterativeseries.md +107 -0
  114. package/user-documentation/solverfunctions/join.md +75 -0
  115. package/user-documentation/solverfunctions/joinraw.md +64 -0
  116. package/user-documentation/solverfunctions/largestinset.md +63 -0
  117. package/user-documentation/solverfunctions/leastsquares.md +66 -0
  118. package/user-documentation/solverfunctions/linest.md +58 -0
  119. package/user-documentation/solverfunctions/log.md +74 -0
  120. package/user-documentation/solverfunctions/logvalues.md +65 -0
  121. package/user-documentation/solverfunctions/match.md +71 -0
  122. package/user-documentation/solverfunctions/matrixinverse.md +67 -0
  123. package/user-documentation/solverfunctions/matrixmultiply.md +71 -0
  124. package/user-documentation/solverfunctions/matrixtranspose.md +72 -0
  125. package/user-documentation/solverfunctions/matrixvectormultiply.md +69 -0
  126. package/user-documentation/solverfunctions/max.md +73 -0
  127. package/user-documentation/solverfunctions/mean.md +63 -0
  128. package/user-documentation/solverfunctions/median.md +79 -0
  129. package/user-documentation/solverfunctions/min.md +73 -0
  130. package/user-documentation/solverfunctions/mode.md +66 -0
  131. package/user-documentation/solverfunctions/objectkeystoarray.md +66 -0
  132. package/user-documentation/solverfunctions/objectvaluessortbyexternalobjectarray.md +65 -0
  133. package/user-documentation/solverfunctions/objectvaluestoarray.md +67 -0
  134. package/user-documentation/solverfunctions/percent.md +75 -0
  135. package/user-documentation/solverfunctions/pi.md +77 -0
  136. package/user-documentation/solverfunctions/polynomialregression.md +69 -0
  137. package/user-documentation/solverfunctions/predict.md +71 -0
  138. package/user-documentation/solverfunctions/rad.md +85 -0
  139. package/user-documentation/solverfunctions/randomfloat.md +63 -0
  140. package/user-documentation/solverfunctions/randomfloatbetween.md +72 -0
  141. package/user-documentation/solverfunctions/randomfloatupto.md +65 -0
  142. package/user-documentation/solverfunctions/randominteger.md +56 -0
  143. package/user-documentation/solverfunctions/randomintegerbetween.md +72 -0
  144. package/user-documentation/solverfunctions/randomintegerupto.md +64 -0
  145. package/user-documentation/solverfunctions/refreshtabularsection.md +57 -0
  146. package/user-documentation/solverfunctions/resolvehtmlentities.md +64 -0
  147. package/user-documentation/solverfunctions/round.md +111 -0
  148. package/user-documentation/solverfunctions/runsolvers.md +49 -0
  149. package/user-documentation/solverfunctions/setconcatenate.md +64 -0
  150. package/user-documentation/solverfunctions/setgroupvisibility.md +60 -0
  151. package/user-documentation/solverfunctions/setsectionvisibility.md +59 -0
  152. package/user-documentation/solverfunctions/setsolverordinalenabled.md +59 -0
  153. package/user-documentation/solverfunctions/settabularrowlength.md +57 -0
  154. package/user-documentation/solverfunctions/setvalue.md +65 -0
  155. package/user-documentation/solverfunctions/showsections.md +58 -0
  156. package/user-documentation/solverfunctions/sin.md +83 -0
  157. package/user-documentation/solverfunctions/slice.md +80 -0
  158. package/user-documentation/solverfunctions/smallestinset.md +63 -0
  159. package/user-documentation/solverfunctions/sortarray.md +58 -0
  160. package/user-documentation/solverfunctions/sorthistogram.md +70 -0
  161. package/user-documentation/solverfunctions/sorthistogrambykeys.md +69 -0
  162. package/user-documentation/solverfunctions/sortset.md +75 -0
  163. package/user-documentation/solverfunctions/sqrt.md +85 -0
  164. package/user-documentation/solverfunctions/stdev.md +81 -0
  165. package/user-documentation/solverfunctions/stdeva.md +58 -0
  166. package/user-documentation/solverfunctions/stdevp.md +83 -0
  167. package/user-documentation/solverfunctions/stringcountsegments.md +66 -0
  168. package/user-documentation/solverfunctions/stringgetsegments.md +74 -0
  169. package/user-documentation/solverfunctions/subtractingsummation.md +66 -0
  170. package/user-documentation/solverfunctions/sum.md +78 -0
  171. package/user-documentation/solverfunctions/tan.md +78 -0
  172. package/user-documentation/solverfunctions/tofixed.md +75 -0
  173. package/user-documentation/solverfunctions/unionarrays.md +59 -0
  174. package/user-documentation/solverfunctions/uniquearray.md +58 -0
  175. package/user-documentation/solverfunctions/var.md +67 -0
  176. package/user-documentation/solverfunctions/vara.md +58 -0
  177. package/user-documentation/solverfunctions/varp.md +66 -0
  178. package/user-documentation/solverfunctions/when.md +98 -0
@@ -0,0 +1,64 @@
1
+ # dateseconddifference
2
+
3
+ Calculates the difference between two dates in seconds.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ dateseconddifference(startDate, endDate)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `startDate` | String | Start date (ISO 8601 format) |
16
+ | `endDate` | String | End date (ISO 8601 format) |
17
+
18
+ ## Returns
19
+
20
+ String - The number of seconds between the two dates.
21
+
22
+ ## Description
23
+
24
+ The `dateseconddifference` function calculates how many seconds have elapsed between two dates. The result is positive when endDate is after startDate, and negative otherwise.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ Result = DATESECONDDIFFERENCE("2025-04-01T10:00:00.000Z", "2025-04-01T10:00:30.000Z")
32
+ // Result: "30"
33
+ ```
34
+
35
+ ### Response Time
36
+
37
+ ```expression
38
+ ResponseTime = DATESECONDDIFFERENCE(RequestSent, ResponseReceived)
39
+ ```
40
+
41
+ ### Timeout Check
42
+
43
+ ```expression
44
+ SecondsSinceStart = DATESECONDDIFFERENCE(ProcessStart, Now)
45
+ ```
46
+
47
+ ## Use Cases
48
+
49
+ - **Performance measurement**: Response times
50
+ - **Timeouts**: Check elapsed time
51
+ - **Rate limiting**: Time between requests
52
+ - **Logging**: Precise durations
53
+
54
+ ## Related Functions
55
+
56
+ - [datemilliseconddifference](./datemilliseconddifference.md) - Difference in milliseconds
57
+ - [dateminutedifference](./dateminutedifference.md) - Difference in minutes
58
+ - [dateaddseconds](./dateaddseconds.md) - Add seconds to a date
59
+
60
+ ## Notes
61
+
62
+ - Uses ISO 8601 date format
63
+ - Result can be negative
64
+ - Uses the Dates service internally
@@ -0,0 +1,65 @@
1
+ # dateweekdifference
2
+
3
+ Calculates the difference between two dates in weeks.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ dateweekdifference(startDate, endDate)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `startDate` | String | Start date (ISO 8601 format) |
16
+ | `endDate` | String | End date (ISO 8601 format) |
17
+
18
+ ## Returns
19
+
20
+ String - The number of weeks between the two dates.
21
+
22
+ ## Description
23
+
24
+ The `dateweekdifference` function calculates how many weeks have elapsed between two dates. The result is positive when endDate is after startDate, and negative otherwise.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ Result = DATEWEEKDIFFERENCE("2025-01-01T00:00:00.000Z", "2025-01-15T00:00:00.000Z")
32
+ // Result: "2"
33
+ ```
34
+
35
+ ### Sprint Tracking
36
+
37
+ ```expression
38
+ SprintsCompleted = DATEWEEKDIFFERENCE(ProjectStart, Today) / 2
39
+ ```
40
+
41
+ ### Weeks Until Deadline
42
+
43
+ ```expression
44
+ WeeksRemaining = DATEWEEKDIFFERENCE(Today, Deadline)
45
+ ```
46
+
47
+ ## Use Cases
48
+
49
+ - **Sprint planning**: Track sprint weeks
50
+ - **Project management**: Weekly progress
51
+ - **Scheduling**: Week-based planning
52
+ - **Reporting**: Weekly reports
53
+
54
+ ## Related Functions
55
+
56
+ - [datedaydifference](./datedaydifference.md) - Difference in days
57
+ - [datemonthdifference](./datemonthdifference.md) - Difference in months
58
+ - [dateaddweeks](./dateaddweeks.md) - Add weeks to a date
59
+
60
+ ## Notes
61
+
62
+ - Uses ISO 8601 date format
63
+ - One week equals 7 days
64
+ - Result can be negative
65
+ - Uses the Dates service internally
@@ -0,0 +1,64 @@
1
+ # dateyeardifference
2
+
3
+ Calculates the difference between two dates in years.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ dateyeardifference(startDate, endDate)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `startDate` | String | Start date (ISO 8601 format) |
16
+ | `endDate` | String | End date (ISO 8601 format) |
17
+
18
+ ## Returns
19
+
20
+ String - The number of years between the two dates.
21
+
22
+ ## Description
23
+
24
+ The `dateyeardifference` function calculates how many years have elapsed between two dates. The result is positive when endDate is after startDate, and negative otherwise.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ Result = DATEYEARDIFFERENCE("2020-01-01T00:00:00.000Z", "2025-01-01T00:00:00.000Z")
32
+ // Result: "5"
33
+ ```
34
+
35
+ ### Age Calculation
36
+
37
+ ```expression
38
+ Age = DATEYEARDIFFERENCE(BirthDate, Today)
39
+ ```
40
+
41
+ ### Contract Duration
42
+
43
+ ```expression
44
+ ContractYears = DATEYEARDIFFERENCE(StartDate, EndDate)
45
+ ```
46
+
47
+ ## Use Cases
48
+
49
+ - **Age calculation**: Calculate age in years
50
+ - **Anniversary**: Years since event
51
+ - **Contracts**: Multi-year contract terms
52
+ - **Experience**: Years of service
53
+
54
+ ## Related Functions
55
+
56
+ - [datedaydifference](./datedaydifference.md) - Difference in days
57
+ - [datemonthdifference](./datemonthdifference.md) - Difference in months
58
+ - [dateaddyears](./dateaddyears.md) - Add years to a date
59
+
60
+ ## Notes
61
+
62
+ - Uses ISO 8601 date format
63
+ - Result can be negative
64
+ - Uses the Dates service internally
@@ -0,0 +1,59 @@
1
+ # differencearrays
2
+
3
+ Returns values in the first array that are not in the second array (set difference).
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ differencearrays(array1, array2)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `array1` | Array | The array to filter |
16
+ | `array2` | Array | The array of values to exclude |
17
+
18
+ ## Returns
19
+
20
+ A new array containing only the values from `array1` that do not appear in `array2`.
21
+
22
+ ## Description
23
+
24
+ The `differencearrays` function performs a set difference operation. It returns a new array containing every element from the first array that is not present in the second array. This is useful for finding items that exist in one list but not another, such as identifying incomplete tasks or missing items.
25
+
26
+ ## Examples
27
+
28
+ ### Finding incomplete items
29
+
30
+ ```expression
31
+ OnlyInA = differencearrays(AllItems, CompletedItems)
32
+ // If AllItems is ["A", "B", "C", "D"] and CompletedItems is ["B", "D"],
33
+ // OnlyInA is ["A", "C"]
34
+ ```
35
+
36
+ ### Filtering out excluded options
37
+
38
+ ```expression
39
+ Available = differencearrays(AllOptions, ExcludedOptions)
40
+ // Returns only the options that have not been excluded
41
+ ```
42
+
43
+ ## Use Cases
44
+
45
+ - **Tracking incomplete work**: Find items in a full list that are not in a completed list
46
+ - **Filtering exclusions**: Remove specific entries from a list based on another list
47
+ - **Identifying missing data**: Determine which expected values are absent from a dataset
48
+
49
+ ## Related Functions
50
+
51
+ - [unionarrays](./unionarrays.md) - Returns all unique values from both arrays
52
+ - [uniquearray](./uniquearray.md) - Removes duplicates from a single array
53
+ - [sortarray](./sortarray.md) - Returns a sorted copy of an array
54
+
55
+ ## Notes
56
+
57
+ - Both parameters must be arrays
58
+ - The operation is directional: `differencearrays(A, B)` is not the same as `differencearrays(B, A)`
59
+ - Duplicate values in `array1` that are not in `array2` may still appear in the result
@@ -0,0 +1,58 @@
1
+ # disablesolverordinal
2
+
3
+ Disables all solvers with the specified ordinal number so they will not execute.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ disablesolverordinal(ordinal)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `ordinal` | Integer | The ordinal number of the solver group to disable |
16
+
17
+ ## Returns
18
+
19
+ Void. This function does not return a value.
20
+
21
+ ## Description
22
+
23
+ The `disablesolverordinal` function disables all solvers assigned to a specific ordinal number, preventing them from executing during subsequent solver runs. This is a convenience function equivalent to calling `setsolverordinalenabled(ordinal, false)`. Disabled solvers are skipped entirely, which can improve performance and prevent unwanted calculations.
24
+
25
+ ## Examples
26
+
27
+ ### Disabling ordinal 3 solvers
28
+
29
+ ```expression
30
+ disablesolverordinal(3)
31
+ // All solvers with ordinal 3 will now be skipped during solver runs
32
+ ```
33
+
34
+ ### Disabling advanced calculations
35
+
36
+ ```expression
37
+ disablesolverordinal(5)
38
+ // Prevents ordinal 5 solvers from running
39
+ ```
40
+
41
+ ## Use Cases
42
+
43
+ - **Skipping irrelevant calculations**: Disable solver groups that are not needed for the current form state
44
+ - **Performance optimization**: Prevent unnecessary solver execution to improve responsiveness
45
+ - **Mode switching**: Disable solver groups when switching between form modes
46
+
47
+ ## Related Functions
48
+
49
+ - [setsolverordinalenabled](./setsolverordinalenabled.md) - Enables or disables solvers with a boolean
50
+ - [enablesolverordinal](./enablesolverordinal.md) - Enables all solvers with the specified ordinal
51
+ - [runsolvers](./runsolvers.md) - Triggers re-execution of all solver expressions
52
+
53
+ ## Notes
54
+
55
+ - Equivalent to `setsolverordinalenabled(ordinal, false)`
56
+ - The ordinal number must correspond to an ordinal defined in the solver configuration
57
+ - Disabled solvers retain their configuration and can be re-enabled at any time
58
+ - Changes take effect on the next solver run
@@ -0,0 +1,96 @@
1
+ # distributionhistogram
2
+
3
+ Generates a histogram counting occurrences of each unique value.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ distributionhistogram(dataPath, keyProperty)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `dataPath` | String | Path to the data array (quoted string) |
16
+ | `keyProperty` | String | Property name to count occurrences of |
17
+
18
+ ## Returns
19
+
20
+ Object - A histogram object with unique values and their counts.
21
+
22
+ ## Description
23
+
24
+ The `distributionhistogram` function creates a histogram by counting how many times each unique value appears in a dataset. This is useful for understanding the distribution of categorical data.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ // Given city data with a 'state' property
32
+ DistributionResult = distributionhistogram("AppData.Cities", "state")
33
+
34
+ // Result: {
35
+ // 'Alabama': 12,
36
+ // 'Colorado': 21,
37
+ // 'Florida': 73,
38
+ // 'Georgia': 18,
39
+ // // ... etc
40
+ // }
41
+ ```
42
+
43
+ ### Counting Categories
44
+
45
+ ```expression
46
+ // Count orders by status
47
+ StatusCounts = distributionhistogram("AppData.Orders", "status")
48
+ // Result: { 'pending': 45, 'shipped': 123, 'delivered': 89 }
49
+ ```
50
+
51
+ ### With Verification
52
+
53
+ ```expression
54
+ // Verify distribution counts match data
55
+ DistributionResult = distributionhistogram("AppData.Cities", "state")
56
+ // DistributionResult.Alabama should equal 12
57
+ // DistributionResult.Colorado should equal 21
58
+ ```
59
+
60
+ ## Use Cases
61
+
62
+ - **Demographic analysis**: Count people by category
63
+ - **Survey results**: Tally responses
64
+ - **Quality metrics**: Distribution of defect types
65
+ - **Inventory**: Count items by category
66
+ - **Geographic analysis**: Records per region
67
+
68
+ ## Difference from aggregationhistogram
69
+
70
+ | distributionhistogram | aggregationhistogram |
71
+ |----------------------|---------------------|
72
+ | Counts occurrences | Sums values |
73
+ | One property (key) | Two properties (key, value) |
74
+ | Result: counts | Result: sums |
75
+
76
+ ```expression
77
+ // Distribution: How many cities per state?
78
+ distributionhistogram("AppData.Cities", "state")
79
+ // { 'California': 73, 'Texas': 51, ... }
80
+
81
+ // Aggregation: Total population per state?
82
+ aggregationhistogram("AppData.Cities", "state", "population")
83
+ // { 'California': '39538223', 'Texas': '29145505', ... }
84
+ ```
85
+
86
+ ## Related Functions
87
+
88
+ - [distributionhistogrambyobject](./distributionhistogrambyobject.md) - Takes object directly
89
+ - [aggregationhistogram](./aggregationhistogram.md) - Sum values instead of count
90
+ - [count](./count.md) - Simple count of elements
91
+
92
+ ## Notes
93
+
94
+ - The data path must be a quoted string
95
+ - Returns integer counts for each unique value
96
+ - Works with the Math service's `histogramDistributionByExactValueFromInternalState` method
@@ -0,0 +1,64 @@
1
+ # distributionhistogrambyobject
2
+
3
+ Generates a distribution histogram from an object directly.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ distributionhistogrambyobject(object, keyProperty)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `object` | Array | Array of objects to count |
16
+ | `keyProperty` | String | Property name to count occurrences of |
17
+
18
+ ## Returns
19
+
20
+ Object - A histogram object with unique values and their counts.
21
+
22
+ ## Description
23
+
24
+ The `distributionhistogrambyobject` function is similar to `distributionhistogram` but takes an object/array directly instead of a data path string. This is useful when working with data that's already in a variable.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ // Given array of order data
32
+ Orders = [
33
+ { id: 1, status: 'pending' },
34
+ { id: 2, status: 'shipped' },
35
+ { id: 3, status: 'pending' },
36
+ { id: 4, status: 'delivered' }
37
+ ]
38
+
39
+ Result = DISTRIBUTIONHISTOGRAMBYOBJECT(Orders, "status")
40
+ // Result: { 'pending': 2, 'shipped': 1, 'delivered': 1 }
41
+ ```
42
+
43
+ ### With Filtered Data
44
+
45
+ ```expression
46
+ CategoryCounts = DISTRIBUTIONHISTOGRAMBYOBJECT(FilteredProducts, "category")
47
+ ```
48
+
49
+ ## Use Cases
50
+
51
+ - **Dynamic data**: Count data already in variables
52
+ - **Filtered data**: Count after filtering
53
+ - **Chained operations**: Use in expression chains
54
+
55
+ ## Related Functions
56
+
57
+ - [distributionhistogram](./distributionhistogram.md) - Uses data path string
58
+ - [aggregationhistogrambyobject](./aggregationhistogrambyobject.md) - Sum by object
59
+ - [count](./count.md) - Simple count
60
+
61
+ ## Notes
62
+
63
+ - Takes array directly, not path string
64
+ - Uses the Math service's `histogramDistributionByExactValue` method
@@ -0,0 +1,57 @@
1
+ # enablesolverordinal
2
+
3
+ Enables all solvers with the specified ordinal number so they will execute.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ enablesolverordinal(ordinal)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `ordinal` | Integer | The ordinal number of the solver group to enable |
16
+
17
+ ## Returns
18
+
19
+ Void. This function does not return a value.
20
+
21
+ ## Description
22
+
23
+ The `enablesolverordinal` function enables all solvers assigned to a specific ordinal number, ensuring they will execute during subsequent solver runs. This is a convenience function equivalent to calling `setsolverordinalenabled(ordinal, true)`. It is typically used to re-enable a group of solvers that was previously disabled.
24
+
25
+ ## Examples
26
+
27
+ ### Enabling ordinal 3 solvers
28
+
29
+ ```expression
30
+ enablesolverordinal(3)
31
+ // All solvers with ordinal 3 will now execute during solver runs
32
+ ```
33
+
34
+ ### Re-enabling solvers after a condition is met
35
+
36
+ ```expression
37
+ enablesolverordinal(2)
38
+ // Re-enables ordinal 2 solvers that were previously disabled
39
+ ```
40
+
41
+ ## Use Cases
42
+
43
+ - **Re-enabling solvers**: Turn on a group of solvers that was previously disabled
44
+ - **Workflow progression**: Enable additional solver groups as the user progresses through a form
45
+ - **Conditional activation**: Enable solver groups when specific conditions are met
46
+
47
+ ## Related Functions
48
+
49
+ - [setsolverordinalenabled](./setsolverordinalenabled.md) - Enables or disables solvers with a boolean
50
+ - [disablesolverordinal](./disablesolverordinal.md) - Disables all solvers with the specified ordinal
51
+ - [runsolvers](./runsolvers.md) - Triggers re-execution of all solver expressions
52
+
53
+ ## Notes
54
+
55
+ - Equivalent to `setsolverordinalenabled(ordinal, true)`
56
+ - The ordinal number must correspond to an ordinal defined in the solver configuration
57
+ - Changes take effect on the next solver run
@@ -0,0 +1,72 @@
1
+ # entryinset
2
+
3
+ Checks if a value exists in a set/array.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ entryinset(value, set)
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Parameter | Type | Description |
14
+ |-----------|------|-------------|
15
+ | `value` | Any | The value to search for |
16
+ | `set` | Array | The array to search in |
17
+
18
+ ## Returns
19
+
20
+ Boolean - True if the value exists in the set, false otherwise.
21
+
22
+ ## Description
23
+
24
+ The `entryinset` function checks whether a specific value exists within an array or set. This is useful for membership testing and validation.
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+
30
+ ```expression
31
+ Result = ENTRYINSET(3, [1, 2, 3, 4, 5])
32
+ // Result: true
33
+ ```
34
+
35
+ ### Not Found
36
+
37
+ ```expression
38
+ Result = ENTRYINSET(10, [1, 2, 3, 4, 5])
39
+ // Result: false
40
+ ```
41
+
42
+ ### With Variables
43
+
44
+ ```expression
45
+ IsValidStatus = ENTRYINSET(OrderStatus, ["pending", "shipped", "delivered"])
46
+ ```
47
+
48
+ ### Validation
49
+
50
+ ```expression
51
+ IsAllowedCategory = ENTRYINSET(Category, AllowedCategories)
52
+ ```
53
+
54
+ ## Use Cases
55
+
56
+ - **Validation**: Check if value is allowed
57
+ - **Filtering**: Conditional processing
58
+ - **Membership**: Check set membership
59
+ - **Logic**: Conditional branching
60
+
61
+ ## Related Functions
62
+
63
+ - [findfirstvaluebyexactmatch](./findfirstvaluebyexactmatch.md) - Find value in array
64
+ - [if](./if.md) - Use with conditional logic
65
+ - [when](./when.md) - Conditional expression
66
+
67
+ ## Notes
68
+
69
+ - Returns boolean (true/false)
70
+ - Uses exact matching
71
+ - Case-sensitive for strings
72
+ - Uses the Math service's `entryInSet` method
@@ -0,0 +1,77 @@
1
+ # euler
2
+
3
+ Returns Euler's number (e) with high precision.
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ euler()
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ None.
14
+
15
+ ## Returns
16
+
17
+ String - Euler's number (e) to 100 decimal places.
18
+
19
+ ## Description
20
+
21
+ The `euler` function returns Euler's number (e ≈ 2.71828...), which is the base of natural logarithms. It's one of the most important constants in mathematics and appears in many areas including calculus, probability, and physics.
22
+
23
+ ## Examples
24
+
25
+ ### Basic Usage
26
+
27
+ ```expression
28
+ Result = euler()
29
+ // Result: "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274..."
30
+ ```
31
+
32
+ ### Exponential Growth
33
+
34
+ ```expression
35
+ // Compound interest with continuous compounding
36
+ // A = P * e^(rt)
37
+ FinalAmount = Principal * euler()^(Rate * Time)
38
+ ```
39
+
40
+ ### Natural Logarithm Calculations
41
+
42
+ ```expression
43
+ // e^x where x = 1
44
+ Result = euler()^1
45
+ // Result: e ≈ 2.71828...
46
+
47
+ // From unit tests:
48
+ Result = 2.71828182845905 ^ -0.282444
49
+ ```
50
+
51
+ ### In Complex Formulas
52
+
53
+ ```expression
54
+ // Environmental calculation from unit tests
55
+ EGS = ROUND(ROUND(0.0172834*2.71828182845905^(-0.0117685*Temp),5)*SQRT(ROUND(16.294-0.163*HR,1)/60),4)
56
+ ```
57
+
58
+ ## Use Cases
59
+
60
+ - **Exponential growth/decay**: Population growth, radioactive decay
61
+ - **Finance**: Continuous compound interest
62
+ - **Probability**: Normal distribution calculations
63
+ - **Calculus**: Natural logarithm and exponential functions
64
+ - **Physics**: Decay processes, thermodynamics
65
+
66
+ ## Related Functions
67
+
68
+ - [pi](./pi.md) - Pi constant
69
+ - [exp](./exp.md) - e raised to a power
70
+ - [log](./log.md) - Logarithm
71
+
72
+ ## Notes
73
+
74
+ - Returns the full precision value stored in the Math service
75
+ - Uses arbitrary precision arithmetic
76
+ - Also known as Napier's constant
77
+ - Approximately equal to 2.71828182845904523536...