@vertigis/workflow 5.42.0 → 5.44.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/Activator.d.ts +2 -1
- package/Collections.d.ts +4 -3
- package/Errors.d.ts +0 -10
- package/Errors.js +1 -1
- package/Hooks.d.ts +16 -6
- package/IActivityHandler.d.ts +2 -0
- package/ProgramInspectorFacility.d.ts +2 -1
- package/Validation.d.ts +8 -2
- package/Validation.js +1 -1
- package/activities/app/GetApplicationInfo.d.ts +2 -2
- package/activities/app/GetApplicationInfo.js +1 -1
- package/activities/app/GetUserInfo.d.ts +2 -2
- package/activities/app/GetUserInfo.js +1 -1
- package/activities/app/RunCommand.d.ts +2 -2
- package/activities/app/RunCommand.js +1 -1
- package/activities/app/RunOperation.d.ts +2 -2
- package/activities/app/RunOperation.js +1 -1
- package/activities/app/applicationData.d.ts +6 -0
- package/activities/arcgis/AddAttachment.js +1 -1
- package/activities/arcgis/AddFeatureLayer.d.ts +1 -1
- package/activities/arcgis/AddFeatures.d.ts +2 -2
- package/activities/arcgis/AddFeatures.js +1 -1
- package/activities/arcgis/AddGraphics.d.ts +1 -1
- package/activities/arcgis/BufferServiceTask.d.ts +1 -1
- package/activities/arcgis/CastGeometry.js +1 -1
- package/activities/arcgis/ClearGraphics.d.ts +1 -1
- package/activities/arcgis/ClipEngineTask.js +1 -1
- package/activities/arcgis/ClosestFacilityTask.d.ts +1 -1
- package/activities/arcgis/CreateFeatureSet.d.ts +2 -2
- package/activities/arcgis/CreateFeatureSet.js +1 -1
- package/activities/arcgis/CreateGraphic.d.ts +2 -2
- package/activities/arcgis/CreateGraphic.js +1 -1
- package/activities/arcgis/CreatePoint.d.ts +2 -2
- package/activities/arcgis/CreatePoint.js +1 -1
- package/activities/arcgis/DeleteAttachments.js +1 -1
- package/activities/arcgis/DeleteFeatures.d.ts +2 -2
- package/activities/arcgis/DeleteFeatures.js +1 -1
- package/activities/arcgis/DistanceServiceTask.js +1 -1
- package/activities/arcgis/ExtendedSpatialReferenceInfoEngineTask.d.ts +1 -1
- package/activities/arcgis/FeatureSetFromJson.d.ts +2 -2
- package/activities/arcgis/FeatureSetFromJson.js +1 -1
- package/activities/arcgis/FromGeoCoordinateStringServiceTask.js +1 -1
- package/activities/arcgis/GenerateWebmapForReport.d.ts +2 -2
- package/activities/arcgis/Geocode.d.ts +1 -1
- package/activities/arcgis/Geocode.js +1 -1
- package/activities/arcgis/GeometryFromJson.d.ts +2 -2
- package/activities/arcgis/GeometryFromJson.js +1 -1
- package/activities/arcgis/Geoprocessing.d.ts +1 -1
- package/activities/arcgis/GeoprocessingAsync.d.ts +1 -1
- package/activities/arcgis/GeoprocessingAsync.js +1 -1
- package/activities/arcgis/GetAttributeValue.d.ts +2 -2
- package/activities/arcgis/GetAttributeValue.js +1 -1
- package/activities/arcgis/GetCentroid.d.ts +2 -2
- package/activities/arcgis/GetCentroid.js +1 -1
- package/activities/arcgis/GetCodedValueDomain.js +1 -1
- package/activities/arcgis/GetFeatureGeometry.d.ts +2 -2
- package/activities/arcgis/GetFeatureGeometry.js +1 -1
- package/activities/arcgis/GetFeatureLayerInfo.d.ts +4 -2
- package/activities/arcgis/GetFeatureLayerInfo.js +1 -1
- package/activities/arcgis/GetFeatureSetExtent.d.ts +2 -2
- package/activities/arcgis/GetFeatureSetExtent.js +1 -1
- package/activities/arcgis/GetFeatureSetObjectIds.d.ts +2 -2
- package/activities/arcgis/GetFeatureSetObjectIds.js +1 -1
- package/activities/arcgis/GetGeometryExtent.d.ts +2 -2
- package/activities/arcgis/GetGeometryExtent.js +1 -1
- package/activities/arcgis/GetGraphics.d.ts +1 -1
- package/activities/arcgis/GetLayer.d.ts +1 -1
- package/activities/arcgis/GetLayerDefinitionExpression.d.ts +1 -1
- package/activities/arcgis/GetLayerProperty.d.ts +1 -1
- package/activities/arcgis/GetLayerVisibility.d.ts +1 -1
- package/activities/arcgis/GetMap.d.ts +1 -1
- package/activities/arcgis/GetMapScreenshot.d.ts +1 -1
- package/activities/arcgis/GetPortalUser.d.ts +4 -6
- package/activities/arcgis/GetPortalUser.js +1 -1
- package/activities/arcgis/GetTable.d.ts +1 -1
- package/activities/arcgis/GetViewExtent.d.ts +1 -1
- package/activities/arcgis/GetViewpoint.d.ts +1 -1
- package/activities/arcgis/LabelPointsServiceTask.js +1 -1
- package/activities/arcgis/MapProvider.d.ts +3 -0
- package/activities/arcgis/ProjectServiceTask.d.ts +1 -1
- package/activities/arcgis/ProjectServiceTask.js +1 -1
- package/activities/arcgis/QueryAttachmentInfos.js +1 -1
- package/activities/arcgis/QueryTask.d.ts +8 -4
- package/activities/arcgis/QueryTask.js +1 -1
- package/activities/arcgis/RelationServiceTask.js +1 -1
- package/activities/arcgis/RelationshipQueryTask.d.ts +1 -1
- package/activities/arcgis/RemoveFeatureSetFields.d.ts +3 -0
- package/activities/arcgis/RemoveGraphics.d.ts +1 -1
- package/activities/arcgis/RemoveLayer.d.ts +1 -1
- package/activities/arcgis/RendererFromJson.d.ts +2 -2
- package/activities/arcgis/RendererFromJson.js +1 -1
- package/activities/arcgis/ReshapeServiceTask.js +1 -1
- package/activities/arcgis/ReverseGeocode.d.ts +1 -1
- package/activities/arcgis/ReverseGeocode.js +1 -1
- package/activities/arcgis/RouteTask.d.ts +1 -1
- package/activities/arcgis/RouteTask.js +1 -1
- package/activities/arcgis/RunPrint.d.ts +5 -11
- package/activities/arcgis/RunPrint.js +1 -1
- package/activities/arcgis/RunReport.d.ts +3 -11
- package/activities/arcgis/RunReport.js +1 -1
- package/activities/arcgis/RunWorkflow.d.ts +1 -9
- package/activities/arcgis/RunWorkflow.js +1 -1
- package/activities/arcgis/SendLayerToAttributeTable.d.ts +2 -2
- package/activities/arcgis/SendLayerToAttributeTable.js +1 -1
- package/activities/arcgis/ServiceAreaTask.d.ts +1 -1
- package/activities/arcgis/ServiceAreaTask.js +1 -1
- package/activities/arcgis/SetFeaturePopup.d.ts +1 -1
- package/activities/arcgis/SetImageryLayerOptions.d.ts +5 -1
- package/activities/arcgis/SetImageryLayerOptions.js +1 -1
- package/activities/arcgis/SetLayerDefinitionExpression.d.ts +1 -1
- package/activities/arcgis/SetLayerPopup.d.ts +1 -1
- package/activities/arcgis/SetLayerProperty.d.ts +1 -1
- package/activities/arcgis/SetLayerVisibility.d.ts +1 -1
- package/activities/arcgis/SetMap.d.ts +2 -2
- package/activities/arcgis/SetMap.js +1 -1
- package/activities/arcgis/SetViewExtent.d.ts +1 -1
- package/activities/arcgis/SetViewpoint.d.ts +1 -1
- package/activities/arcgis/ShowFeaturePopup.d.ts +1 -1
- package/activities/arcgis/ShowResults.d.ts +4 -3
- package/activities/arcgis/ShowResults.js +1 -1
- package/activities/arcgis/SortFeatureSet.d.ts +2 -2
- package/activities/arcgis/SortFeatureSet.js +1 -1
- package/activities/arcgis/SymbolFromJson.d.ts +2 -2
- package/activities/arcgis/SymbolFromJson.js +1 -1
- package/activities/arcgis/ToGeoCoordinateStringServiceTask.js +1 -1
- package/activities/arcgis/UnionServiceTask.js +1 -1
- package/activities/arcgis/UpdateAttachment.js +1 -1
- package/activities/arcgis/UpdateFeatures.d.ts +2 -2
- package/activities/arcgis/UpdateFeatures.js +1 -1
- package/activities/arcgis/libs/arcGisRestApi.d.ts +20 -1
- package/activities/arcgis/shared.d.ts +2 -5
- package/activities/arcgis/tools.d.ts +3 -12
- package/activities/arcgis/tools.js +1 -1
- package/activities/browser/GetBrowserInfo.d.ts +2 -2
- package/activities/browser/GetBrowserInfo.js +1 -1
- package/activities/core/Annotation.d.ts +2 -2
- package/activities/core/Annotation.js +1 -1
- package/activities/core/ChannelProvider.d.ts +2 -2
- package/activities/core/Container.d.ts +1 -1
- package/activities/core/{RunSubworkflow.d.ts → ExecuteFunction.d.ts} +4 -4
- package/activities/core/ExecuteFunction.js +1 -0
- package/activities/core/Exit.d.ts +1 -1
- package/activities/core/{Subworkflow.d.ts → Function.d.ts} +6 -6
- package/activities/core/Function.js +1 -0
- package/activities/core/GetWorkflowInputs.d.ts +1 -1
- package/activities/core/Placeholder.d.ts +2 -2
- package/activities/core/Placeholder.js +1 -1
- package/activities/core/TextReplace.d.ts +1 -0
- package/activities/core/TextReplace.js +1 -1
- package/activities/core/TryCatch.d.ts +1 -1
- package/activities/core/WebRequest.d.ts +1 -1
- package/activities/essentials/GetEssentialsSite.d.ts +1 -1
- package/activities/essentials/RunEssentialsWorkflow.d.ts +1 -1
- package/activities/forms/AddFormElement.d.ts +4 -2
- package/activities/forms/AddFormElement.js +1 -1
- package/activities/forms/DisplayForm.d.ts +2 -2
- package/activities/forms/FormActor.d.ts +56 -0
- package/activities/forms/FormActor.js +1 -0
- package/activities/forms/FormRenderer.d.ts +6 -42
- package/activities/forms/FormRenderer.js +1 -1
- package/activities/forms/GetFormElementItemsFromCollection.d.ts +2 -2
- package/activities/forms/GetFormElementItemsFromCollection.js +1 -1
- package/activities/forms/GetFormElementProperty.d.ts +2 -2
- package/activities/forms/GetFormElementProperty.js +1 -1
- package/activities/forms/GetFormElementValue.d.ts +2 -2
- package/activities/forms/GetFormElementValue.js +1 -1
- package/activities/forms/SetFormElementEvent.d.ts +1 -1
- package/activities/index.js +1 -1
- package/activities/math/Random.d.ts +2 -2
- package/activities/math/Random.js +1 -1
- package/activities/pdf/AddTextToPdf.d.ts +2 -2
- package/activities/ui/Alert.d.ts +1 -1
- package/activities/ui/Confirm.d.ts +1 -1
- package/activities/ui/Prompt.d.ts +1 -1
- package/activities/wab/OpenWidget.d.ts +2 -2
- package/activities/wab/OpenWidget.js +1 -1
- package/activities/wab/PublishWidgetData.d.ts +2 -2
- package/activities/wab/PublishWidgetData.js +1 -1
- package/definition/ProgramInspector.d.ts +21 -13
- package/definition/ProgramInspector.js +1 -1
- package/definition/Transition.d.ts +1 -1
- package/execution/ActivityContext.d.ts +2 -2
- package/execution/ActivityContextProxy.d.ts +1 -1
- package/execution/AmbientState.d.ts +2 -1
- package/execution/AmbientStateProxy.d.ts +1 -0
- package/execution/AmbientStateProxy.js +1 -1
- package/execution/Engine.d.ts +9 -9
- package/execution/ModuleLoader.d.ts +0 -28
- package/execution/ModuleLoader.js +1 -1
- package/execution/ProgramRunner.js +1 -1
- package/execution/util.js +1 -1
- package/forms/Calendar.d.ts +1 -1
- package/forms/FormDefinition.d.ts +2 -17
- package/forms/FormDefinition.js +1 -1
- package/forms/FormHost.d.ts +19 -7
- package/forms/FormHost.js +1 -1
- package/forms/FormPresenterHost.d.ts +16 -4
- package/forms/components/AutoComplete.js +1 -1
- package/forms/components/CheckGroup.js +1 -1
- package/forms/components/DateRangePicker.js +1 -1
- package/forms/components/Form.js +1 -1
- package/forms/components/FormLabelNumberField.d.ts +1 -1
- package/forms/components/GeometryPicker.js +1 -1
- package/forms/components/Markdown.d.ts +1 -1
- package/forms/components/Number.js +1 -1
- package/forms/components/NumberRangeSlider.js +1 -1
- package/forms/components/NumberSlider.js +1 -1
- package/forms/components/SignatureDialog.d.ts +1 -1
- package/forms/components/SketchDialog.d.ts +2 -2
- package/forms/components/TextBox.js +1 -1
- package/forms/components/common.d.ts +0 -1
- package/forms/customNumberFormat.d.ts +70 -0
- package/forms/customNumberFormat.js +1 -0
- package/forms/dateUtilities.d.ts +15 -7
- package/forms/dateUtilities.js +1 -1
- package/forms/keyboard.d.ts +2 -8
- package/forms/numberFormatter.d.ts +0 -14
- package/forms/numberFormatter.js +1 -1
- package/forms/numberUtilities.d.ts +1 -13
- package/forms/numberUtilities.js +1 -1
- package/forms/utils.d.ts +1 -8
- package/forms/utils.js +1 -1
- package/libs/version.d.ts +1 -1
- package/libs/version.js +1 -1
- package/package.json +5 -5
- package/activities/core/RunSubworkflow.js +0 -1
- package/activities/core/Subworkflow.js +0 -1
package/execution/Engine.d.ts
CHANGED
|
@@ -17,25 +17,27 @@ export interface RunOptions {
|
|
|
17
17
|
cancellationToken?: PromiseLike<any>;
|
|
18
18
|
/** Indicates a debugger callback. */
|
|
19
19
|
debug?: (session: IDebugSession) => void;
|
|
20
|
+
/** Indicates any environment that may be relevant to the program being run. */
|
|
21
|
+
environment?: {};
|
|
20
22
|
/** Indicates the locale for the program being run. */
|
|
21
23
|
locale?: string;
|
|
22
24
|
/** Indicates the logging level for the program being run. */
|
|
23
25
|
logLevel?: LogLevel;
|
|
24
|
-
/** Indicates any environment that may be relevant to the program being run. */
|
|
25
|
-
environment?: {};
|
|
26
26
|
/** Indicates any inputs that may be relevant to the program being run. */
|
|
27
27
|
inputs?: {};
|
|
28
|
-
/**
|
|
29
|
-
|
|
28
|
+
/** The printing engine URL used for sending print requests. */
|
|
29
|
+
printingServiceUrl?: string;
|
|
30
30
|
/** Indicates the start step to start at. */
|
|
31
31
|
start?: Step | number | string;
|
|
32
32
|
/** Allow a master workflow to pass state to a target workflow. */
|
|
33
33
|
state?: Record<string, any>;
|
|
34
34
|
/** Indicates any language strings that the workflow has access to from the context it is being run in. */
|
|
35
35
|
strings?: Record<string, string>;
|
|
36
|
+
/** Indicates any trivia that may be relevant to the program being run. */
|
|
37
|
+
trivia?: Record<string, any>;
|
|
36
38
|
}
|
|
37
39
|
/** Represents an activity handler class. */
|
|
38
|
-
|
|
40
|
+
interface ActivityHandlerClass {
|
|
39
41
|
new (): IActivityHandler;
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
@@ -78,10 +80,7 @@ export declare class Engine {
|
|
|
78
80
|
*/
|
|
79
81
|
removeExternalEventHandler(callback: ExternalEventCallback): void;
|
|
80
82
|
/** Indicates the default trivia for any workflow. */
|
|
81
|
-
trivia:
|
|
82
|
-
getFormElementRegistration: (id: string) => FormElementRegistration | undefined;
|
|
83
|
-
registerFormElement: (elReg: FormElementRegistration) => void;
|
|
84
|
-
};
|
|
83
|
+
trivia: Record<string, any>;
|
|
85
84
|
/** Indicates the factories to use to create activity handlers. */
|
|
86
85
|
factories: IActivityHandlerFactory[];
|
|
87
86
|
/** Indicates the implementations to use to create activity handlers. */
|
|
@@ -101,3 +100,4 @@ export declare class Engine {
|
|
|
101
100
|
*/
|
|
102
101
|
enqueueExternalEvent(event: ExternalEvent): void;
|
|
103
102
|
}
|
|
103
|
+
export {};
|
|
@@ -1,31 +1,3 @@
|
|
|
1
|
-
/** Defines the loader which is passed into the main method of an activity pack. */
|
|
2
|
-
export interface Loader {
|
|
3
|
-
(path: string, require: Function, callback?: Function): PromiseLike<{}>;
|
|
4
|
-
}
|
|
5
|
-
/** Defines the module which may contain a main method. */
|
|
6
|
-
export interface Module {
|
|
7
|
-
main?(load: Loader, options: {}, prefix: string): PromiseLike<{}> | {};
|
|
8
|
-
}
|
|
9
|
-
/** Defines the concept of a global scope. */
|
|
10
|
-
export interface Global {
|
|
11
|
-
/** RequireJS compatible define method. */
|
|
12
|
-
define: Function;
|
|
13
|
-
/** RequireJS compatible require method. */
|
|
14
|
-
require: Function;
|
|
15
|
-
/** A+ Promise compatible class. */
|
|
16
|
-
Promise: PromiseConstructor;
|
|
17
|
-
}
|
|
18
|
-
/** Exposes the global object. */
|
|
19
|
-
export declare const global: Global;
|
|
20
|
-
/**
|
|
21
|
-
* Loads a module using the base module loader.
|
|
22
|
-
* WARNING: This function is passed to legacy activity packs as a parameter.
|
|
23
|
-
* Changes to the parameters could introduce bugs.
|
|
24
|
-
* @param path The path to load.
|
|
25
|
-
* @param require The require method to use.
|
|
26
|
-
* @param callback The callback to invoke.
|
|
27
|
-
*/
|
|
28
|
-
export declare function load(path: string, require?: Function, callback?: Function): Promise<Module>;
|
|
29
1
|
/**
|
|
30
2
|
* Dynamically adds a unique module name to the require paths
|
|
31
3
|
* for the given url, so that dependencies can be loaded
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Task}from"../Task.js";import*as Activities from"../activities/main.js";const global=new Function("return this")();function getRequireString(){return"require"}async function load(e,o
|
|
1
|
+
import{Task}from"../Task.js";import*as Activities from"../activities/main.js";const global=new Function("return this")();function getRequireString(){return"require"}async function load(e,i,o){"function"!=typeof i&&(i=global[getRequireString()]);var t=new Task(function(t){i([e],function(e){t(e),"function"==typeof o&&o(e)})});return Task.race([t,new Task((e,t)=>setTimeout(t,9e4))])}"function"!=typeof global.Promise&&(global.Promise=Promise);let nextId=0;const moduleNames={};function registerModuleName(e){let t=moduleNames[e];if(void 0!==t)return t;t=`@vertigis/workflow/externals/ext-${nextId++}`;var i="/"===e[e.length-1]?e.substring(0,e.length-1):e;return global[getRequireString()]({map:{"*":{"@geocortex/workflow":"@vertigis/workflow"}},paths:{[t]:i}}),moduleNames[e]=t}async function importModule(e,t,i){let o;return o="@vertigis/workflow/activities/main"===e?Activities:await load(e),void 0!==o&&null!==o&&"function"==typeof o.main?o.main.call(global,load,t,i):o}export{registerModuleName,importModule};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Bluebird from"bluebird";import{GenericActivityError,ProgramStartError}from"../Errors.js";import{Task}from"../Task.js";import AmbientState from"./AmbientState.js";import AmbientStateProxy from"./AmbientStateProxy.js";import{newSymbol}from"./util.js";function combine(e,t){return{...e||{},...t||{}}}function run(i,o,a,c){const s=e=>{var t=o.findStep(e);if(!t)throw new GenericActivityError(`The workflow does not contain a step with the id ${e}.`);return t},l=()=>{const t=
|
|
1
|
+
import Bluebird from"bluebird";import{GenericActivityError,ProgramStartError}from"../Errors.js";import{Task}from"../Task.js";import AmbientState from"./AmbientState.js";import AmbientStateProxy from"./AmbientStateProxy.js";import{isFunctionStep,newSymbol}from"./util.js";function combine(e,t){return{...e||{},...t||{}}}function run(i,o,a,c){const s=e=>{var t=o.findStep(e);if(!t)throw new GenericActivityError(`The workflow does not contain a step with the id ${e}.`);return t},l=()=>{const t=p.frame.current.action;return o.allReferences().filter(e=>void 0!==e.suite&&t.startsWith(e.suite)).peek()?.path},m=(e,t,n,r)=>{e=s(e);const i=s(t);if(!i.transitions.some(e=>"content"===e.branch||"try"===e.branch))throw new GenericActivityError(`The ${t} step is not a Container, Function, or Try Catch activity.`);n=`${r}$${n}`;u(e,i,n)},v=e=>{var t=p.frame.current.activity,n=s(e);if(!isFunctionStep(n))throw new GenericActivityError(`The target step ${e} is not a Function activity.`);u(t,n,"default")},u=(e,t,n)=>{var r=o.relate(e,n).peek();void 0!==r&&o.remove(r);const i=o.addTransition(e,t);i.branch=n},p=new AmbientState;return p.completion=new Bluebird((e,t)=>{p.resolveCompletion=e,p.rejectCompletion=t}),p.cancellationToken=new Task(e=>p.cancellationResolve=e),p.execute(function(){if(o.isStep(c)){a=a||{},p.engine=i,p.inspector=o,p.id=newSymbol(),p.debug=a.debug||(()=>{}),p.environment=combine(i.environment,a.environment),p.inputs=a.inputs||{},p.locale=a.locale,p.logLevel=a.logLevel,p.outputs={},p.printingServiceUrl=a.printingServiceUrl,p.removeExternalEventHandler=i.removeExternalEventHandler.bind(i),p.resources={forms:o.cacheForms()},p.setExternalEventHandler=i.setExternalEventHandler.bind(i),p.trivia=combine(i.trivia,a.trivia),p.trivia.getActivityPackUrl=l,p.trivia.setFormElementEvent=m,p.trivia.setFunctionTransition=v,p.proxy=new AmbientStateProxy(p);const t=p.trivia.isDescendantOf;t?p.trivia.isDescendantOf=e=>e===p.proxy||t(e):p.trivia.isDescendantOf=e=>e===p.proxy;const n=p.frame;n.index=0,n.cancellationToken=p.cancellationToken,n.state=a.state||{};var e=a.cancellationToken;if(null!=e){const r=Task.race([e,p.cancellationToken]);r.isPending()?(e=()=>p.cancel(),r.then(e,e)):p.cancel()}p.start(c)}else p.reject(new ProgramStartError)}),p.completion}export{run};
|
package/execution/util.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const reservedIdentifiers=["Array","Date","Intl","JSON","Math","Object","Set","decodeURIComponent","document","encodeURIComponent","isNaN","parseFloat","parseInt","resources","values","window"];function isAccessor(
|
|
1
|
+
const reservedIdentifiers=["Array","Date","Intl","JSON","Math","Object","Set","decodeURIComponent","document","encodeURIComponent","isNaN","parseFloat","parseInt","resources","values","window"];function isAccessor(t){return!("string"!=typeof t||t.length<1)&&(!(0<=t.indexOf("."))&&!reservedIdentifiers.some(e=>e===t))}function isExpression(e){var t=e.type;return null==t&&"string"==typeof e.code}function isLiteral(e){switch(typeof e){case"boolean":case"number":case"string":return!0}return!1}let nextSymbol,nextSymbolPrefix;function newSymbol(){return void 0!==nextSymbol&&1073741824<=nextSymbol&&(nextSymbol=void 0),void 0===nextSymbol&&(nextSymbol=0,nextSymbolPrefix=(new Date).valueOf()+":"),nextSymbolPrefix+nextSymbol++}const ActivityActions={FUNCTION:"gcx:wf:core::Subworkflow"};function isFunctionStep(e){return e?.action===ActivityActions.FUNCTION}export{isAccessor,isExpression,isLiteral,newSymbol,isFunctionStep};
|
package/forms/Calendar.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export type FormatRef = DateTimeFormat | NumberFormat | GeometryFormat | Section
|
|
|
27
27
|
* References geometry format.
|
|
28
28
|
* @product This is intended for internal use only within VertiGIS Studio products.
|
|
29
29
|
*/
|
|
30
|
-
export type GeometryFormat = "
|
|
30
|
+
export type GeometryFormat = "circle" | "extent" | "line" | "multipoint" | "point" | "polygon" | "polygon-freehand" | "polyline" | "polyline-freehand";
|
|
31
31
|
/** Types of matching that can be performed when finding an Item within a Form Element. */
|
|
32
32
|
export type ItemMatchType = "index" | "item" | "key" | "label" | "value";
|
|
33
33
|
/**
|
|
@@ -436,22 +436,6 @@ export interface ItemPickerState {
|
|
|
436
436
|
[key: string]: number;
|
|
437
437
|
};
|
|
438
438
|
}
|
|
439
|
-
/**
|
|
440
|
-
* The category of content to be generated. This is relevant when content is
|
|
441
|
-
* to be rendered in a place where not all categories of content are permitted.
|
|
442
|
-
*/
|
|
443
|
-
export declare enum HTMLContentCategory {
|
|
444
|
-
/**
|
|
445
|
-
* Elements belonging to the flow content category typically contain text or embedded content.
|
|
446
|
-
* https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Flow_content
|
|
447
|
-
*/
|
|
448
|
-
Flow = 0,
|
|
449
|
-
/**
|
|
450
|
-
* Phrasing content defines the text and the mark-up it contains. Runs of phrasing content make up paragraphs.
|
|
451
|
-
* https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content
|
|
452
|
-
*/
|
|
453
|
-
Phrasing = 1
|
|
454
|
-
}
|
|
455
439
|
/**
|
|
456
440
|
* A set of actions that can be performed as part of pre-selecting an item.
|
|
457
441
|
*/
|
|
@@ -469,3 +453,4 @@ export declare enum PreSelectionAction {
|
|
|
469
453
|
*/
|
|
470
454
|
SelectFirstItem = 2
|
|
471
455
|
}
|
|
456
|
+
export type ElementTuple = [string, Element];
|
package/forms/FormDefinition.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const DEFAULT_SECTION_FORMAT="unstyled-section";var
|
|
1
|
+
const DEFAULT_SECTION_FORMAT="unstyled-section";var PreSelectionAction;!function(e){e[e.None=0]="None",e[e.RetrieveSuggestions=1]="RetrieveSuggestions",e[e.SelectFirstItem=2]="SelectFirstItem"}(PreSelectionAction=PreSelectionAction||{});export{DEFAULT_SECTION_FORMAT,PreSelectionAction};
|
package/forms/FormHost.d.ts
CHANGED
|
@@ -6,11 +6,11 @@ import type { FormatOptions } from "./numberFormatter";
|
|
|
6
6
|
import type { ExternalEvent } from "../execution/ExternalEvent";
|
|
7
7
|
import type { ComponentType, ReactNode } from "react";
|
|
8
8
|
export { defs };
|
|
9
|
-
|
|
9
|
+
interface FormEventSubscription {
|
|
10
10
|
(): boolean;
|
|
11
11
|
active: boolean;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
interface FormEventHandler {
|
|
14
14
|
(event: defs.Event): void;
|
|
15
15
|
}
|
|
16
16
|
/** Exposes functionality for driving a form. */
|
|
@@ -89,14 +89,26 @@ export declare abstract class FormHost implements FormPresenterHost {
|
|
|
89
89
|
dispose(): boolean;
|
|
90
90
|
/** Renders focus for just rendered elements. */
|
|
91
91
|
renderFocus(target: HTMLElement, name?: string): boolean;
|
|
92
|
-
/** Renders form text as HTML. */
|
|
93
|
-
renderHtml(content: defs.Text | undefined, htmlContentCategory?: defs.HTMLContentCategory): string;
|
|
94
92
|
/** Renders form text as plain text. */
|
|
95
93
|
renderText(content: defs.Text | undefined): string;
|
|
96
94
|
/**
|
|
97
95
|
* Translates the text. This is a bit of a no-op as we only have access to
|
|
98
96
|
* the language strings in FormRenderer.
|
|
99
|
-
* @param content
|
|
97
|
+
* @param content The string or {@link defs.StatusRef} to be translated.
|
|
98
|
+
* @returns The underlying text.
|
|
99
|
+
*/
|
|
100
|
+
translateText(content: string | defs.StatusRef | undefined): string | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Translates the text. This is a bit of a no-op as we only have access to
|
|
103
|
+
* the language strings in FormRenderer.
|
|
104
|
+
* @param content The {@link defs.MarkdownRef} to be translated.
|
|
105
|
+
* @returns The underlying text.
|
|
106
|
+
*/
|
|
107
|
+
translateText(content: defs.MarkdownRef | undefined): defs.MarkdownRef | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Translates the text. This is a bit of a no-op as we only have access to
|
|
110
|
+
* the language strings in FormRenderer.
|
|
111
|
+
* @param content The {@link defs.Text} to be translated.
|
|
100
112
|
* @returns The underlying text.
|
|
101
113
|
*/
|
|
102
114
|
translateText(content: defs.Text | undefined): string | defs.MarkdownRef | undefined;
|
|
@@ -137,7 +149,7 @@ export declare abstract class FormHost implements FormPresenterHost {
|
|
|
137
149
|
/** Dequeues the next event (used by observe()). */
|
|
138
150
|
dequeue(): defs.Event | undefined;
|
|
139
151
|
/** Observes the form. */
|
|
140
|
-
observe(): Bluebird<defs.Event>;
|
|
152
|
+
observe(): Bluebird<defs.Event | undefined>;
|
|
141
153
|
/** Loads the form. */
|
|
142
154
|
load(form?: defs.Form, template?: defs.Form): boolean;
|
|
143
155
|
/** Routes an event to achieve default behavior. */
|
|
@@ -207,7 +219,7 @@ export declare abstract class FormHost implements FormPresenterHost {
|
|
|
207
219
|
/** Finds the name of an element. */
|
|
208
220
|
findName(element: defs.Element | undefined): string | undefined;
|
|
209
221
|
/** Coerces a number. */
|
|
210
|
-
coerceNumber(value: string): number;
|
|
222
|
+
coerceNumber(value: string, locale?: string): number;
|
|
211
223
|
/** Formats a number. */
|
|
212
224
|
formatNumber(value: number, options?: FormatOptions): string;
|
|
213
225
|
/** Renders a component's state. */
|
package/forms/FormHost.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import Bluebird from"bluebird";import{Task}from"../Task.js";import{DEFAULT_LOCALE}from"../constants.js";import*as defs from"./FormDefinition.js";import MutuallyExclusiveSectionGroup from"./MutuallyExclusiveSectionGroup.js";import NumberParser from"./NumberParser.js";import{FormElementTypes}from"./constants.js";import{format}from"./numberFormatter.js";import*as presenter from"./presenter.js";import{isCollapsibleSection,isMutuallyExclusiveSection,isSection,sortAndFilter,text}from"./utils.js";const guid="C0166F74-982A-464E-9FB6-9605CB7649C1:",eventName=guid+"FormEvent";function createEvent(e,t){return new CustomEvent(e,{bubbles:!1,cancelable:!1,detail:t})}function overlay(i,s){switch(typeof i){case"boolean":case"number":case"string":return i;case"object":break;default:return s}if(null===i)return s;if(i instanceof Array){let e=s;void 0!==e&&null!==e||(e=[]);let t=0;for(const r of i){var n=overlay(r,e[t]);void 0!==n&&(t<i.length?e[t]=n:e.push(n),++t)}return e}let e=s;void 0===e&&(e={});for(const t in i)e[t]=overlay(i[t],e[t]);return e}function createSubscription(e){function t(){return void 0!==e&&(t.active=!1,e(),!0)}return t.active=!0,t}class FormHost{constructor(){this.form={defaults:{},elements:{}},this.errors={},this.refs={},this.enabled=!1,this.visible=!1,this.dismiss=!1,this.custom=!1,this.container=document.createElement("div"),this.eventIndex=0,this.eventQueue=[],this.mutuallyExclusiveSections={},this.nextFocus=!1,this.nextRefresh=!1,this.enqueueExternalEvent=e=>{e={type:`external$${e.name}`,name:"header",argument:e};this.enqueue(e.type,e)}}deriveLocale(){return DEFAULT_LOCALE}mount(){var e=this.container,t=e.parentNode;null==t&&document.body.appendChild(e),this.update()}unmount(){var e=this.container;const t=e.parentNode;void 0!==t&&null!==t&&t.removeChild(e)}observeFocus(e){this.enabled&&e instanceof HTMLElement&&(this.lastFocus&&this.lastFocus.target===e||this.setLastFocus(e))}focus(e){!0===(e=null==e?!1:e)&&(this.lastFocus=void 0),!1===e&&!1===(e=this.nextFocus)&&(e=!0),this.nextFocus=e,this.invalidate(!0!==e?e:void 0)}show(){const e=this.container;if(void 0===e)return!1;this.custom||void 0!==this.focusObserver||e.addEventListener("focus",this.focusObserver=e=>this.observeFocus(e.target),!0),this.enabled||(this.nextRefresh=!0,this.focus()),this.enforceMutuallyExclusiveConstraints();var t=this.errors;for(const i in t){const s=this.form.elements[i];void 0!==s&&null!==s&&(s.error=t[i],this.invalidate(i))}return this.idle(),!1!==this.nextRefresh&&(this.enabled=!0,this.visible=!0,this.mount()),this.enabled}isInvalid(e){return!!e.error&&!1!==e.visible}getInvalidElements(){return Object.keys(this.form.elements).map(e=>this.form.elements[e]).filter(this.isInvalid)}hasInvalidChild(e){for(const i in this.form.elements){var t=this.form.elements[i];if(this.isInvalid(t)&&this.getParentSection(t)===e)return!0}return!1}spin(){return void 0!==this.container&&(this.idle(),this.visible&&!this.enabled||(this.nextRefresh=!0,this.enabled=!1,this.visible=!0,this.mount()),this.visible)}hide(){return void 0!==this.container&&(this.idle(),this.visible&&(this.enabled=!1,this.visible=!1,this.unmount()),!0)}dispose(){if(this.dismiss)return!1;{this.dismiss=!0;const t=this.container;t.dispatchEvent(createEvent(eventName));var e=this.focusObserver;return void 0!==e&&t.removeEventListener("focus",e,!0),this.idle(),this.unmount(),this.refs={},presenter.releaseForm(this.container),this.container=void 0,this.lastFocus=void 0,!(this.eventTask=void 0)}}renderFocus(e,t){var i=this.nextFocus;if(this.enabled&&e instanceof HTMLElement)if(!1!==i)if(void 0!==t){if(t===i||!0===i&&void 0===this.lastFocus)return this.nextFocus=!1,this.setLastFocus(e,t),e.focus(),!0}else{const s=this.lastFocus?.target;if(!0===i&&s instanceof HTMLElement&&e.contains(s))return this.nextFocus=!1,s.focus(),!0}else if(!1===i&&t&&t!==this.lastFocus?.name&&this.isElementPositionBeforeLastFocused(t))return this.setLastFocus(e,t),e.focus(),!0;return!1}renderHtml(e,t){return"string"==typeof e?text.textToHtml(e):text.isMarkdown(e)?text.markdownToSafeHtml(e.markdown,{inline:t===defs.HTMLContentCategory.Phrasing}):""}renderText(e){return"string"==typeof e?e:text.isMarkdown(e)?text.markdownToText(e.markdown):""}translateText(e){return"string"==typeof e||text.isMarkdown(e)?e:text.isStatus(e)?e.status:void 0}renderVisual(e){return presenter.render(e)||presenter.renderNone(e)}qualifyDefault(e){var t=sortAndFilter(this.form.elements);for(const r in t){var i=t[r];if(null!=i&&!1!==i.visible&&i.enabled){if(i.default)return e.value=i.value,r;var s=sortAndFilter(i.items);if(null!=s)for(const o in s){var n=s[o];if(null!=n&&n.visible&&n.enabled&&n.default)return e.item=o,e.value=n.value,r}}}}qualify(e,t){var i;return null==t&&(t={}),"clicked"===e&&void 0===t.name&&(t.name=this.qualifyDefault(t)),t.type=e,void 0===t.routingKey&&(i=t.name,t.routingKey=void 0!==i?e+"$"+i:e),t}post(e,t){t=this.publish(e,t);const i=this.container;void 0!==i&&i.dispatchEvent(createEvent(eventName,t))}subscribe(e){let i=e;const t=this.container;if(void 0===t)return createSubscription();const s=function(){i=void 0,t.removeEventListener(eventName,n)},n=function(e){const t=e.detail;void 0!==t?Bluebird.resolve().then(function(){"function"==typeof i&&i(t)}):s()};return t.addEventListener(eventName,n),createSubscription(s)}refresh(e){this.custom||("string"==typeof e?(e=this.refs[e],presenter.refresh(e)):(this.refs={},presenter.refreshForm(this,this.container)))}invalidate(e){const t=this.nextRefresh;"string"==typeof e&&!0!==t&&(!1===t?this.nextRefresh={[e]:!0}:t[e]=!0),void 0!==e&&!0!==e||(this.nextRefresh=!0),!1===e&&!1===t&&(this.nextRefresh={})}update(){var e=this.nextRefresh;if(!0===e&&(this.nextRefresh=!1,this.refresh()),"object"==typeof e){this.nextRefresh=!1;for(const t in e)!0===e[t]&&this.refresh(t)}}idle(){const e=this.timerHandle;void 0!==e&&(this.timerHandle=void 0,e())}busy(){if(void 0===this.timerHandle&&void 0!==this.container){let e=setTimeout(()=>this.spin());this.timerHandle=function(){void 0!==e&&(clearTimeout(e),e=void 0)}}}publish(e,t){return this.enabled?(t=this.enqueue(e,t),0<this.eventQueue.length&&this.spin(),t):this.qualify(e,t)}enqueue(e,t){return t=this.qualify(e,t),void 0!==this.eventTask?(this.resolveEvent(t),this.eventTask=void 0):this.eventQueue.push(t),t}dequeue(){const e=this.eventQueue;if(0<e.length){var t=this.eventIndex,i=e[t++];return t>=e.length?e.length=this.eventIndex=0:this.eventIndex=t,i}}observe(){return Bluebird.attempt(()=>{if(void 0!==this.eventTask)return this.eventTask;var e=this.dequeue();return void 0!==e?e:this.show()?(this.eventTask=new Task(e=>{this.resolveEvent=e}),this.eventTask):void 0})}load(e,t){if(void 0===this.container)return!1;if(this.eventQueue.length=this.eventIndex=0,this.eventTask=void 0,this.errors={},this.lastFocus=void 0,this.nextFocus=!0,this.nextRefresh=!0,this.enqueue("load"),this.enqueue("prepare"),null!=e){e=overlay(e,e={defaults:{},elements:{}});this.form=overlay(t,e);for(const i in this.form.elements){let e=this.form.elements[i];if(e=overlay(e,{showFilter:!1,checked:!1,enabled:!0,hoisted:!1,visible:!0,overlay:!1,default:!1,validates:!1,readOnly:!1,require:!1,autoActivate:!1}),e.items)for(const s in e.items)e.items[s]=overlay(e.items[s],{enabled:!0,checked:!1,visible:!0,default:!1,validates:!1});this.form.elements[i]=e}}return!0}route(e){switch(e.type){case"changed":return this.cascade(e.name);case"checked":return this.changed(e);case"clicked":return this.click(e);case"prepare":return this.hydrate(e);case"suggest":return this.suggest(e);case"validate":return this.verify(e);case"verify":return this.submit(e)}return!1}changed(e){return this.enqueue("changed",{name:e.name,item:e.item,value:e.value}),!0}isElementValid(e,t=!0,i={status:void 0}){return null!=e&&(i.status=void 0,text.isInvalidError(e.error)?!(i.status="invalid"):!0!==e.require||(this.isElementEffectivelyVisible(e)?!!this.isElementValueDefined(e)||!(i.status="missing"):t))}isElementEffectivelyVisible(e){return null!=e&&(!1!==this.getParentSection(e)?.visible&&!1!==e.visible)}isElementValueDefined(e){if(null==e)return!1;if(e.type===FormElementTypes.CHECKBOX)return!0;var t=e.current;if(null!=t)return!0;t=e.value;if(null!=t&&""!==t)return!0;var i=e.items;if(null!=i)for(const n in i){var s=i[n];if(null!=s&&!0===s.checked)return!0}return!1}trap(e){switch(e.type){case"populate":case"load":case"suggest":break;default:return!1}var t=e.name;const i=this.find(t);if(void 0===i||null===i)return!1;e=i.dependsOn;if("string"!=typeof e)return!1;e=this.find(e);return i.enabled=this.isElementEffectivelyVisible(e)&&this.isElementValueDefined(e),this.invalidate(t),!i.enabled}cascade(e){var t=this.find(e);if(null==t||!1===t.dependsOn)return!1;const i={[e]:!0};var s=sortAndFilter(this.form.elements);for(const r in s){const o=s[r];var n=o.dependsOn;if("string"==typeof n){const l=this.find(n);void 0!==l&&"string"!=typeof l.dependsOn&&(l.dependsOn=!0),!0===i[n]&&(i[r]=!0,o.checked=!1,o.current=void 0,o.label=void 0,o.items=void 0,o.value=void 0,this.invalidate(r),o.dependsOn===e&&this.enqueue("populate",{name:r}))}else o.dependsOn=!1}return!0}click(e){var t=this.form.elements[e.name];return null!=t&&t.type==FormElementTypes.BUTTONBAR&&this.validate(e)}hasInitialSelectionToDependOn(e){e=this.form.elements[e];return e.type===FormElementTypes.DROPDOWNLIST&&(void 0!==e.current&&null!==e.current)}hydrate(e){for(const i in sortAndFilter(this.form.elements)){var t=this.form.elements[i].dependsOn;"string"==typeof t&&!this.hasInitialSelectionToDependOn(t)||this.enqueue("populate",{name:i}),this.enqueue("load",{name:i})}return!0}shouldTriggerValidation(e){var t=this.find(e.name);if(null!=t&&"string"==typeof e.value){e=e.item;if("string"!=typeof e)return!0===t.validates;t=t.items;if(null!=t){e=t[e];if(null!=e)return!0===e.validates}}}validate(e){var t=this.shouldTriggerValidation(e);if(!0!==t)return!1===t&&(this.enqueue("end",{name:e.name,item:e.item,value:e.value,routingKey:"end"}),!0);{const n=this.errors={};var i=sortAndFilter(this.form.elements);for(const r in i){var s=i[r];null!=s&&(n[r]=void 0,this.enqueue("validate",{name:r}))}return this.enqueue("verify",{name:e.name,item:e.item,value:e.value,routingKey:"verify"}),!0}}verify(e){var t=e.name,i=this.form.elements[t],e={status:void 0};return!this.isElementValid(i,!0,e)&&(e.status&&(this.errors[t]={status:e.status}),!1===this.nextFocus&&this.focus(t),!0)}suggest(e){const t=this.form.elements[e.name];return void 0!==t&&null!==t&&(t.items={message:{label:{status:"trivial"},enabled:!1}},this.invalidate(e.name),!0)}submit(e){if(!this.hasErrors()){for(const r in this.form.elements)this.form.elements[r].error=void 0;return this.enqueue("submit",{name:e.name,item:e.item,value:e.value}),!0}var t=this.errors;for(const o in t){const l=this.form.elements[o];void 0!==l&&null!==l&&(l.error=t[o],this.invalidate(o))}const i=[];let s=!1;for(const a of this.getInvalidElements()){const u=this.getParentSection(a);if(isMutuallyExclusiveSection(u)){var n=this.findName(u);const h=this.getMutuallyExclusiveSectionGroup(n);if(h){const m=i.find(e=>e.group===h);m?m.element.rowNumber>u.rowNumber&&(m.element=u):(i.push({group:h,element:u}),s=!0)}}else this.isSectionCollapsed(u)&&(u.collapsed=!1,s=!0)}for(const d of i)d.group.expandedSection=d.element;return s&&this.invalidate(),!(this.errors={})}hasErrors(){var e=this.errors;for(const i in e){var t=e[i];if(null!=t)return!0}return!1}find(e){if(null!=e)return"string"==typeof(e="object"==typeof e?e.name:e)?this.form.elements[e]:void 0}findName(e){for(const t in this.form.elements)if(this.form.elements[t]===e)return t}coerceNumber(e){var t=this.deriveLocale();return new NumberParser(t).parse(e)}formatNumber(e,t){return t=t||{locale:this.deriveLocale()},format(t,e)}renderState(e,t,i){return!1}getParentSection(e){e=e.section;if(e){e="string"==typeof e?e:e.name;return this.form.elements[e]}}isSectionCollapsed(e){return!(!e||e.type!==FormElementTypes.SECTION||!isCollapsibleSection(e)&&!isMutuallyExclusiveSection(e))&&!0===e.collapsed}isElementPositionBeforeLastFocused(e){var t=this.lastFocus;if(!t)return!0;if("footer"===e)return!1;if("footer"===t.name)return!0;if(e&&void 0!==t?.rowNumber&&void 0!==t.rowIndex){e=this.form.elements?.[e];if(e)return void 0!==e.rowNumber&&void 0!==e.rowIndex?e.rowNumber<t.rowNumber||e.rowNumber===t.rowNumber&&e.rowIndex<t.rowIndex:e.index<t.rowNumber||e.index===t.rowNumber&&0<t.rowIndex}return!1}setLastFocus(e,t){this.lastFocus={target:e},t&&(this.lastFocus.name=t,(t=this.form.elements?.[t])&&(void 0!==t.rowNumber&&void 0!==t.rowIndex?(this.lastFocus.rowNumber=t.rowNumber,this.lastFocus.rowIndex=t.rowIndex):(this.lastFocus.rowNumber=t.index,this.lastFocus.rowIndex=0)))}getAllSectionElements(){const e={};for(const i in this.form.elements){var t=this.form.elements[i];isSection(t)&&(e[i]=t)}return e}getMutuallyExclusiveSectionGroup(t){let i=this.mutuallyExclusiveSections[t];if(!i){var e=this.find(t);if(!e||!isMutuallyExclusiveSection(e))return;i=new MutuallyExclusiveSectionGroup({elementName:t,element:e});var s=e.format,e=this.getAllSectionElements();const o=Object.keys(sortAndFilter(e,e=>e.rowNumber));t=o.indexOf(t);for(let e=t-1;0<=e;e--){const l=o[e];var n=this.find(l);if(n.format!==s)break;i.unshift({elementName:l,element:n})}for(let e=t+1;e<o.length;e++){const l=o[e];var r=this.find(l);if(r.format!==s)break;i.push({elementName:l,element:r})}i.forEach(e=>{this.mutuallyExclusiveSections[e.elementName]=i})}return i}updateMutuallyExclusiveSections(t){const e=this.getMutuallyExclusiveSectionGroup(t);e.forEach(e=>{e.element.collapsed=e.elementName!==t}),this.refresh()}enforceMutuallyExclusiveConstraints(){const e=[];for(const i of Object.keys(this.form.elements).map(e=>({elementName:e,element:this.form.elements[e]})).filter(e=>isMutuallyExclusiveSection(e.element)&&!1!==e.element.visible&&!0!==e.element.collapsed).sort((e,t)=>e.element.rowNumber-t.element.rowNumber)){var t=this.getMutuallyExclusiveSectionGroup(i.elementName);-1===e.indexOf(t)?e.push(t):i.element.collapsed=!0}}async displayDialog(e,t){await Promise.resolve()}}export{defs,FormHost};
|
|
1
|
+
import Bluebird from"bluebird";import{Task}from"../Task.js";import{DEFAULT_LOCALE}from"../constants.js";import*as defs from"./FormDefinition.js";import MutuallyExclusiveSectionGroup from"./MutuallyExclusiveSectionGroup.js";import NumberParser from"./NumberParser.js";import{FormElementTypes}from"./constants.js";import{format}from"./numberFormatter.js";import*as presenter from"./presenter.js";import{isCollapsibleSection,isMutuallyExclusiveSection,isSection,sortAndFilter,text}from"./utils.js";const guid="C0166F74-982A-464E-9FB6-9605CB7649C1:",eventName=guid+"FormEvent";function createEvent(e,t){return new CustomEvent(e,{bubbles:!1,cancelable:!1,detail:t})}function overlay(s,i){switch(typeof s){case"boolean":case"number":case"string":return s;case"object":break;default:return i}if(null===s)return i;if(s instanceof Array){let e=i;void 0!==e&&null!==e||(e=[]);let t=0;for(const r of s){var n=overlay(r,e[t]);void 0!==n&&(t<s.length?e[t]=n:e.push(n),++t)}return e}let e=i;void 0===e&&(e={});for(const t in s)e[t]=overlay(s[t],e[t]);return e}function createSubscription(e){function t(){return void 0!==e&&(t.active=!1,e(),!0)}return t.active=!0,t}class FormHost{constructor(){this.form={defaults:{},elements:{}},this.errors={},this.refs={},this.enabled=!1,this.visible=!1,this.dismiss=!1,this.custom=!1,this.container=document.createElement("div"),this.eventIndex=0,this.eventQueue=[],this.mutuallyExclusiveSections={},this.nextFocus=!1,this.nextRefresh=!1,this.enqueueExternalEvent=e=>{e={type:`external$${e.name}`,name:"header",argument:e};this.enqueue(e.type,e)}}deriveLocale(){return DEFAULT_LOCALE}mount(){var e=this.container,t=e.parentNode;null==t&&document.body.appendChild(e),this.update()}unmount(){var e=this.container;const t=e.parentNode;void 0!==t&&null!==t&&t.removeChild(e)}observeFocus(e){this.enabled&&e instanceof HTMLElement&&(this.lastFocus&&this.lastFocus.target===e||this.setLastFocus(e))}focus(e){!0===(e=null==e?!1:e)&&(this.lastFocus=void 0),!1===e&&!1===(e=this.nextFocus)&&(e=!0),this.nextFocus=e,this.invalidate(!0!==e?e:void 0)}show(){const e=this.container;if(void 0===e)return!1;this.custom||void 0!==this.focusObserver||e.addEventListener("focus",this.focusObserver=e=>this.observeFocus(e.target),!0),this.enabled||(this.nextRefresh=!0,this.focus()),this.enforceMutuallyExclusiveConstraints();var t=this.errors;for(const s in t){const i=this.form.elements[s];void 0!==i&&null!==i&&(i.error=t[s],this.invalidate(s))}return this.idle(),!1!==this.nextRefresh&&(this.enabled=!0,this.visible=!0,this.mount()),this.enabled}isInvalid(e){return!!e.error&&!1!==e.visible}getInvalidElements(){return Object.keys(this.form.elements).map(e=>this.form.elements[e]).filter(this.isInvalid)}hasInvalidChild(e){for(const s in this.form.elements){var t=this.form.elements[s];if(this.isInvalid(t)&&this.getParentSection(t)===e)return!0}return!1}spin(){return void 0!==this.container&&(this.idle(),this.visible&&!this.enabled||(this.nextRefresh=!0,this.enabled=!1,this.visible=!0,this.mount()),this.visible)}hide(){return void 0!==this.container&&(this.idle(),this.visible&&(this.enabled=!1,this.visible=!1,this.unmount()),!0)}dispose(){if(this.dismiss)return!1;{this.dismiss=!0;const t=this.container;t.dispatchEvent(createEvent(eventName));var e=this.focusObserver;return void 0!==e&&t.removeEventListener("focus",e,!0),this.idle(),this.unmount(),this.refs={},presenter.releaseForm(this.container),this.container=void 0,this.lastFocus=void 0,!(this.eventTask=void 0)}}renderFocus(e,t){var s=this.nextFocus;if(this.enabled&&e instanceof HTMLElement)if(!1!==s)if(void 0!==t){if(t===s||!0===s&&void 0===this.lastFocus)return this.nextFocus=!1,this.setLastFocus(e,t),e.focus(),!0}else{const i=this.lastFocus?.target;if(!0===s&&i instanceof HTMLElement&&e.contains(i))return this.nextFocus=!1,i.focus(),!0}else if(!1===s&&t&&t!==this.lastFocus?.name&&this.isElementPositionBeforeLastFocused(t))return this.setLastFocus(e,t),e.focus(),!0;return!1}renderText(e){return"string"==typeof e?e:text.isMarkdown(e)?text.markdownToText(e.markdown):""}translateText(e){return"string"==typeof e||text.isMarkdown(e)?e:text.isStatus(e)?e.status:void 0}renderVisual(e){return presenter.render(e)||presenter.renderNone(e)}qualifyDefault(e){var t=sortAndFilter(this.form.elements);for(const r in t){var s=t[r];if(null!=s&&!1!==s.visible&&s.enabled){if(s.default)return e.value=s.value,r;var i=sortAndFilter(s.items);if(null!=i)for(const o in i){var n=i[o];if(null!=n&&n.visible&&n.enabled&&n.default)return e.item=o,e.value=n.value,r}}}}qualify(e,t){var s;return null==t&&(t={}),"clicked"===e&&void 0===t.name&&(t.name=this.qualifyDefault(t)),t.type=e,void 0===t.routingKey&&(s=t.name,t.routingKey=void 0!==s?e+"$"+s:e),t}post(e,t){t=this.publish(e,t);const s=this.container;void 0!==s&&s.dispatchEvent(createEvent(eventName,t))}subscribe(e){let s=e;const t=this.container;if(void 0===t)return createSubscription();const i=function(){s=void 0,t.removeEventListener(eventName,n)},n=function(e){const t=e.detail;void 0!==t?Bluebird.resolve().then(function(){"function"==typeof s&&s(t)}):i()};return t.addEventListener(eventName,n),createSubscription(i)}refresh(e){this.custom||("string"==typeof e?(e=this.refs[e],presenter.refresh(e)):(this.refs={},presenter.refreshForm(this,this.container)))}invalidate(e){const t=this.nextRefresh;"string"==typeof e&&!0!==t&&(!1===t?this.nextRefresh={[e]:!0}:t[e]=!0),void 0!==e&&!0!==e||(this.nextRefresh=!0),!1===e&&!1===t&&(this.nextRefresh={})}update(){var e=this.nextRefresh;if(!0===e&&(this.nextRefresh=!1,this.refresh()),"object"==typeof e){this.nextRefresh=!1;for(const t in e)!0===e[t]&&this.refresh(t)}}idle(){const e=this.timerHandle;void 0!==e&&(this.timerHandle=void 0,e())}busy(){if(void 0===this.timerHandle&&void 0!==this.container){let e=setTimeout(()=>this.spin());this.timerHandle=function(){void 0!==e&&(clearTimeout(e),e=void 0)}}}publish(e,t){return this.enabled?(t=this.enqueue(e,t),0<this.eventQueue.length&&this.spin(),t):this.qualify(e,t)}enqueue(e,t){return t=this.qualify(e,t),void 0!==this.eventTask?(this.resolveEvent(t),this.eventTask=void 0):this.eventQueue.push(t),t}dequeue(){const e=this.eventQueue;if(0<e.length){var t=this.eventIndex,s=e[t++];return t>=e.length?e.length=this.eventIndex=0:this.eventIndex=t,s}}observe(){return Bluebird.attempt(()=>{if(void 0!==this.eventTask)return this.eventTask;var e=this.dequeue();return void 0!==e?e:this.show()?(this.eventTask=new Task(e=>{this.resolveEvent=e}),this.eventTask):void 0})}load(e,t){if(void 0===this.container)return!1;if(this.eventQueue.length=this.eventIndex=0,this.eventTask=void 0,this.errors={},this.lastFocus=void 0,this.nextFocus=!0,this.nextRefresh=!0,this.enqueue("load"),this.enqueue("prepare"),null!=e){e=overlay(e,e={defaults:{},elements:{}});this.form=overlay(t,e);for(const s in this.form.elements){let e=this.form.elements[s];if(e=overlay(e,{showFilter:!1,checked:!1,enabled:!0,hoisted:!1,visible:!0,overlay:!1,default:!1,validates:!1,readOnly:!1,require:!1,autoActivate:!1}),e.items)for(const i in e.items)e.items[i]=overlay(e.items[i],{enabled:!0,checked:!1,visible:!0,default:!1,validates:!1});this.form.elements[s]=e}}return!0}route(e){switch(e.type){case"changed":return this.cascade(e.name);case"checked":return this.changed(e);case"clicked":return this.click(e);case"prepare":return this.hydrate(e);case"suggest":return this.suggest(e);case"validate":return this.verify(e);case"verify":return this.submit(e)}return!1}changed(e){return this.enqueue("changed",{name:e.name,item:e.item,value:e.value}),!0}isElementValid(e,t=!0,s={status:void 0}){return null!=e&&(s.status=void 0,text.isInvalidError(e.error)?!(s.status="invalid"):!0!==e.require||(this.isElementEffectivelyVisible(e)?!!this.isElementValueDefined(e)||!(s.status="missing"):t))}isElementEffectivelyVisible(e){return null!=e&&(!1!==this.getParentSection(e)?.visible&&!1!==e.visible)}isElementValueDefined(e){if(null==e)return!1;if(e.type===FormElementTypes.CHECKBOX)return!0;var t=e.current;if(null!=t)return!0;t=e.value;if(null!=t&&""!==t)return!0;var s=e.items;if(null!=s)for(const n in s){var i=s[n];if(null!=i&&!0===i.checked)return!0}return!1}trap(e){switch(e.type){case"populate":case"load":case"suggest":break;default:return!1}var t=e.name;const s=this.find(t);if(void 0===s||null===s)return!1;e=s.dependsOn;if("string"!=typeof e)return!1;e=this.find(e);return s.enabled=this.isElementEffectivelyVisible(e)&&this.isElementValueDefined(e),this.invalidate(t),!s.enabled}cascade(e){var t=this.find(e);if(null==t||!1===t.dependsOn)return!1;const s={[e]:!0};var i=sortAndFilter(this.form.elements);for(const r in i){const o=i[r];var n=o.dependsOn;if("string"==typeof n){const l=this.find(n);void 0!==l&&"string"!=typeof l.dependsOn&&(l.dependsOn=!0),!0===s[n]&&(s[r]=!0,o.checked=!1,o.current=void 0,o.label=void 0,o.items=void 0,o.value=void 0,this.invalidate(r),o.dependsOn===e&&this.enqueue("populate",{name:r}))}else o.dependsOn=!1}return!0}click(e){var t=this.form.elements[e.name];return null!=t&&t.type==FormElementTypes.BUTTONBAR&&this.validate(e)}hasInitialSelectionToDependOn(e){e=this.form.elements[e];return e.type===FormElementTypes.DROPDOWNLIST&&(void 0!==e.current&&null!==e.current)}hydrate(e){for(const s in sortAndFilter(this.form.elements)){var t=this.form.elements[s].dependsOn;"string"==typeof t&&!this.hasInitialSelectionToDependOn(t)||this.enqueue("populate",{name:s}),this.enqueue("load",{name:s})}return!0}shouldTriggerValidation(e){var t=this.find(e.name);if(null!=t&&"string"==typeof e.value){e=e.item;if("string"!=typeof e)return!0===t.validates;t=t.items;if(null!=t){e=t[e];if(null!=e)return!0===e.validates}}}validate(e){var t=this.shouldTriggerValidation(e);if(!0!==t)return!1===t&&(this.enqueue("end",{name:e.name,item:e.item,value:e.value,routingKey:"end"}),!0);{const n=this.errors={};var s=sortAndFilter(this.form.elements);for(const r in s){var i=s[r];null!=i&&(n[r]=void 0,this.enqueue("validate",{name:r}))}return this.enqueue("verify",{name:e.name,item:e.item,value:e.value,routingKey:"verify"}),!0}}verify(e){var t=e.name,s=this.form.elements[t],e={status:void 0};return!this.isElementValid(s,!0,e)&&(e.status&&(this.errors[t]={status:e.status}),!1===this.nextFocus&&this.focus(t),!0)}suggest(e){const t=this.form.elements[e.name];return void 0!==t&&null!==t&&(t.items={message:{label:{status:"trivial"},enabled:!1}},this.invalidate(e.name),!0)}submit(e){if(!this.hasErrors()){for(const r in this.form.elements)this.form.elements[r].error=void 0;return this.enqueue("submit",{name:e.name,item:e.item,value:e.value}),!0}var t=this.errors;for(const o in t){const l=this.form.elements[o];void 0!==l&&null!==l&&(l.error=t[o],this.invalidate(o))}const s=[];let i=!1;for(const u of this.getInvalidElements()){const a=this.getParentSection(u);if(isMutuallyExclusiveSection(a)){var n=this.findName(a);const h=this.getMutuallyExclusiveSectionGroup(n);if(h){const c=s.find(e=>e.group===h);c?c.element.rowNumber>a.rowNumber&&(c.element=a):(s.push({group:h,element:a}),i=!0)}}else this.isSectionCollapsed(a)&&(a.collapsed=!1,i=!0)}for(const m of s)m.group.expandedSection=m.element;return i&&this.invalidate(),!(this.errors={})}hasErrors(){var e=this.errors;for(const s in e){var t=e[s];if(null!=t)return!0}return!1}find(e){if(null!=e)return"string"==typeof(e="object"==typeof e?e.name:e)?this.form.elements[e]:void 0}findName(e){for(const t in this.form.elements)if(this.form.elements[t]===e)return t}coerceNumber(e,t){return t=t||this.deriveLocale(),new NumberParser(t).parse(e)}formatNumber(e,t){return t=t||{locale:this.deriveLocale()},format(t,e)}renderState(e,t,s){return!1}getParentSection(e){e=e.section;if(e){e="string"==typeof e?e:e.name;return this.form.elements[e]}}isSectionCollapsed(e){return!(!e||e.type!==FormElementTypes.SECTION||!isCollapsibleSection(e)&&!isMutuallyExclusiveSection(e))&&!0===e.collapsed}isElementPositionBeforeLastFocused(e){var t=this.lastFocus;if(!t)return!0;if("footer"===e)return!1;if("footer"===t.name)return!0;if(e&&void 0!==t?.rowNumber&&void 0!==t.rowIndex){e=this.form.elements?.[e];if(e)return void 0!==e.rowNumber&&void 0!==e.rowIndex?e.rowNumber<t.rowNumber||e.rowNumber===t.rowNumber&&e.rowIndex<t.rowIndex:e.index<t.rowNumber||e.index===t.rowNumber&&0<t.rowIndex}return!1}setLastFocus(e,t){this.lastFocus={target:e},t&&(this.lastFocus.name=t,(t=this.form.elements?.[t])&&(void 0!==t.rowNumber&&void 0!==t.rowIndex?(this.lastFocus.rowNumber=t.rowNumber,this.lastFocus.rowIndex=t.rowIndex):(this.lastFocus.rowNumber=t.index,this.lastFocus.rowIndex=0)))}getAllSectionElements(){const e={};for(const s in this.form.elements){var t=this.form.elements[s];isSection(t)&&(e[s]=t)}return e}getMutuallyExclusiveSectionGroup(t){let s=this.mutuallyExclusiveSections[t];if(!s){var e=this.find(t);if(!e||!isMutuallyExclusiveSection(e))return;s=new MutuallyExclusiveSectionGroup({elementName:t,element:e});var i=e.format,e=this.getAllSectionElements();const o=Object.keys(sortAndFilter(e,e=>e.rowNumber));t=o.indexOf(t);for(let e=t-1;0<=e;e--){const l=o[e];var n=this.find(l);if(n.format!==i)break;s.unshift({elementName:l,element:n})}for(let e=t+1;e<o.length;e++){const l=o[e];var r=this.find(l);if(r.format!==i)break;s.push({elementName:l,element:r})}s.forEach(e=>{this.mutuallyExclusiveSections[e.elementName]=s})}return s}updateMutuallyExclusiveSections(t){const e=this.getMutuallyExclusiveSectionGroup(t);e.forEach(e=>{e.element.collapsed=e.elementName!==t}),this.refresh()}enforceMutuallyExclusiveConstraints(){const e=[];for(const s of Object.keys(this.form.elements).map(e=>({elementName:e,element:this.form.elements[e]})).filter(e=>isMutuallyExclusiveSection(e.element)&&!1!==e.element.visible&&!0!==e.element.collapsed).sort((e,t)=>e.element.rowNumber-t.element.rowNumber)){var t=this.getMutuallyExclusiveSectionGroup(s.elementName);-1===e.indexOf(t)?e.push(t):s.element.collapsed=!0}}async displayDialog(e,t){await Promise.resolve()}}export{defs,FormHost};
|
|
@@ -16,14 +16,26 @@ export interface FormPresenterHost {
|
|
|
16
16
|
post(type: "changed" | "cancel" | "clicked" | "custom" | "dragged" | "suggest", event?: defs.Event): void;
|
|
17
17
|
/** Disposes the form. */
|
|
18
18
|
dispose(): void;
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Translates the supplied value.
|
|
21
|
+
* @param content The string or {@link defs.StatusRef} to be translated.
|
|
22
|
+
* @returns A translated version of the text.
|
|
23
|
+
*/
|
|
24
|
+
translateText(content: string | defs.StatusRef | undefined): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Translates the supplied value.
|
|
27
|
+
* @param content The {@link defs.MarkdownRef} to be translated.
|
|
28
|
+
*/
|
|
29
|
+
translateText(content: defs.MarkdownRef | undefined): defs.MarkdownRef | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Translates the supplied value.
|
|
32
|
+
* @param content The {@link defs.Text} to be translated.
|
|
33
|
+
*/
|
|
20
34
|
translateText(content: defs.Text | undefined): string | defs.MarkdownRef | undefined;
|
|
21
35
|
/** References all elements. */
|
|
22
36
|
refs: Record<string, FormComponent | undefined>;
|
|
23
37
|
/** Renders the focus. */
|
|
24
38
|
renderFocus(target: Node, name?: string): boolean;
|
|
25
|
-
/** Renders form text to HTML. */
|
|
26
|
-
renderHtml(text: defs.Text, htmlContentCategory?: defs.HTMLContentCategory): string;
|
|
27
39
|
/** Renders form text to display text. */
|
|
28
40
|
renderText(text: defs.Text | undefined): string;
|
|
29
41
|
/** Renders a component's visual. */
|
|
@@ -37,7 +49,7 @@ export interface FormPresenterHost {
|
|
|
37
49
|
name: string;
|
|
38
50
|
} | undefined): defs.Element | undefined;
|
|
39
51
|
/** Coerces a number from a value. */
|
|
40
|
-
coerceNumber(value: string): number;
|
|
52
|
+
coerceNumber(value: string, locale?: string): number;
|
|
41
53
|
/** Formats a value into a string. */
|
|
42
54
|
formatNumber(value: number, options?: FormatOptions): string;
|
|
43
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import BaseAutoComplete,{autocompleteClasses,HighlightOption}from"@vertigis/react-ui/Autocomplete";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import Popper from"@vertigis/react-ui/Popper";import Skeleton from"@vertigis/react-ui/Skeleton";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{ExclusiveTimer}from"../ExclusiveTimer.js";import{autoCompletePropertyConstraints}from"../elements/AutoComplete.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{getItemId,inspectItems,makeSafeClassName}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const StyledAutoComplete=styled(BaseAutoComplete)(()=>({[`.${autocompleteClasses.endAdornment}`]:{right:1}})),popperClasses={skeletonOption:"skeleton-option"},StyledPopper=styled(Popper)(()=>({[`.${autocompleteClasses.listbox}`]:{[`.${autocompleteClasses.option}`]:{display:"block",[`&.${popperClasses.skeletonOption}`]:{'&[data-option-index="0"]':{span:{width:"70%"}},'&[data-option-index="1"]':{span:{width:"85%"}},'&[data-option-index="2"]':{span:{width:"55%"}}}}}})),StyledSkeleton=styled(Skeleton)(()=>({fontSize:"1.25rem",lineHeight:"inherit"})),pendingOption={enabled:!1,label:""},pendingOptions=[pendingOption,pendingOption,pendingOption],AutoComplete=({className:e,component:t,current:u,delay:r,element:o,enabled:n,error:l,items:p,label:m,minLength:s,name:
|
|
1
|
+
import BaseAutoComplete,{autocompleteClasses,HighlightOption}from"@vertigis/react-ui/Autocomplete";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import Popper from"@vertigis/react-ui/Popper";import Skeleton from"@vertigis/react-ui/Skeleton";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{ExclusiveTimer}from"../ExclusiveTimer.js";import{autoCompletePropertyConstraints}from"../elements/AutoComplete.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{getItemId,inspectItems,makeSafeClassName}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const StyledAutoComplete=styled(BaseAutoComplete)(()=>({[`.${autocompleteClasses.endAdornment}`]:{right:1}})),popperClasses={skeletonOption:"skeleton-option"},StyledPopper=styled(Popper)(()=>({[`.${autocompleteClasses.listbox}`]:{[`.${autocompleteClasses.option}`]:{display:"block",[`&.${popperClasses.skeletonOption}`]:{'&[data-option-index="0"]':{span:{width:"70%"}},'&[data-option-index="1"]':{span:{width:"85%"}},'&[data-option-index="2"]':{span:{width:"55%"}}}}}})),StyledSkeleton=styled(Skeleton)(()=>({fontSize:"1.25rem",lineHeight:"inherit"})),pendingOption={enabled:!1,label:""},pendingOptions=[pendingOption,pendingOption,pendingOption],AutoComplete=({className:e,component:t,current:u,delay:r,element:o,enabled:n,error:l,items:p,label:m,minLength:s,name:a,prompt:i,tooltip:c,raiseEvent:d,setProperty:f,setValue:g,value:C})=>{const v=useContext(HostContext),[y,x]=useState(),[b,h]=useState(""),[S,O]=useState([]),[E,k]=useState(null),P=useRef(!1),T=useRef(),I=useRef(!1),R=useRef(v.renderText({status:"trivial"})),N=v.renderText(i),F=v.renderText(c),A=useFocusCallback(n,a,v),L=useRef({}),j=useRef({}),w=useMemo(()=>{let e=r;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.delay.default),Math.max(e,autoCompletePropertyConstraints.delay.minimum)},[r]),H=useMemo(()=>{let e=s;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.minLength.default),Math.max(e,autoCompletePropertyConstraints.minLength.minimum)},[s]),M=t.timer||(t.timer=new ExclusiveTimer),B=()=>{d("suggest",C,b,void 0,M.cancellationToken),O(pendingOptions)},K=()=>{f("items",{}),f("label",void 0)};useEffect(()=>{"clear"===y?K():"input"===y&&(m&&f("label",void 0),P.current=!0,b.length>=H?(f("current",void 0),M.reset(),M.start(w,B)):0<Object.keys(p||{}).length&&K())},[y,b]),useEffect(()=>{var e,t,r=E?.value;C!==r&&(t=(e=getItemId(E,L.current))?j.current[e]:void 0,f("current",e),f("label",t),g(r,{argument:t}))},[E]),useEffect(()=>{const{current:e,items:t,label:r,value:o}=inspectItems(u,p,C);f("current",e),f("label",r||m),f("value",o,!1);const n={};let l=null;const s=[];for(const i in t){var a=t[i];s.push(a);const r=v.renderText(a.label).trim();n[i]=r,e&&i===e&&(l=a)}j.current=n,L.current=t,O(s),k(l)},[p]),useEffect(()=>{var e="string"==typeof u?u:void 0,t=e?L.current[e]:void 0,e=e?j.current[e]:void 0;t?(f("label",e),f("value",t.value),h(e||"")):(f("value",void 0),P.current||h("")),k(t||null)},[u]),useEffect(()=>{P.current||I.current||h(""),P.current=!1,I.current=!1},[m]);const $=v.renderText(m);return React.createElement(FormElement,{className:e,element:o,inputId:T.current,name:a},t=>React.createElement(StyledAutoComplete,{autoSelect:!0,clearOnEscape:!0,clearOnBlur:!1,disabled:!n,filterOptions:e=>e,getOptionDisabled:e=>!1===e.enabled,getOptionKey:e=>getItemId(e,L.current)||"",getOptionLabel:e=>{e=getItemId(e,L.current);return e?j.current[e]:""},inputValue:b,noOptionsText:R.current,onBlur:()=>{1===S.length&&b.toLowerCase()===j.current[0]?.toLowerCase()?(h(j.current[0]),k(S[0])):f("label",b)},onChange:(e,t,r,o)=>{I.current=!0,k(t)},onInputChange:(e,t,r)=>{h(t),x(r)},onKeyDown:e=>{"enter"===getKeyString(e)&&e.stopPropagation()},options:S,PopperComponent:StyledPopper,renderOption:(e,t,{inputValue:r})=>{if(t===pendingOption){var o=clsx(e.className,popperClasses.skeletonOption);return React.createElement("li",{...e,className:o,key:e.id},React.createElement(StyledSkeleton,null))}o=getItemId(t,L.current),o={...e,className:clsx(e.className,t.styleName?makeSafeClassName(t.styleName):void 0),title:t.tooltip?v.renderText(t.tooltip):void 0,inputText:r,optionText:o?j.current[o]:""};return React.createElement(HighlightOption,{...o})},renderInput:e=>(e.inputProps={...e.inputProps,...t,value:e.inputProps.value||$,placeholder:N,title:F},T.current=e.id,React.createElement(FormLabelTextField,{error:!!l,...e,fullWidth:!0,inputRef:A})),value:E}))};export default AutoComplete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormGroup,{formGroupClasses}from"@vertigis/react-ui/FormGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useState}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{arrayEqual}from"../listUtilities.js";import{makeSafeClassName,inspectItems}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${formGroupClasses.root}`]:{paddingBottom:e(2)}})),CheckGroup=({className:e,current:
|
|
1
|
+
import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormGroup,{formGroupClasses}from"@vertigis/react-ui/FormGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useState}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{arrayEqual}from"../listUtilities.js";import{makeSafeClassName,inspectItems}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${formGroupClasses.root}`]:{paddingBottom:e(2)}})),CheckGroup=({className:e,current:m,element:t,enabled:o,items:n,name:r,orientation:a,raiseEvent:s,setProperty:i,setValue:c,value:l})=>{const u=useContext(HostContext),[p,f]=useState([]),[d,h]=useState();useEffect(()=>{var e=inspectItems(m,n,l)["items"];h(e);const t=[],o=[];for(const s in e){var r=e[s];r.checked&&(t.push(s),o.push(r))}arrayEqual(p,t)||f(t);var a=0===o.length?void 0:{refValueType:"items",items:o};c(a,!1)},[n]),useEffect(()=>{const e=[];if(l)for(const t in n)l.items.includes(n[t])&&e.push(t);arrayEqual(p,e)||f(e)},[l]);var v=useFocusCallback(o,r,u);var C=(o,r)=>function(e){const t=d?d[o]:void 0;t&&(e=t.checked=e.currentTarget.checked,function(){const e=[],t=[];for(const a in d){var o=d[a];o.checked&&(e.push(o),t.push(a))}var r=0===e.length?void 0:{refValueType:"items",items:e};c(r,!1),i("current",void 0),arrayEqual(t,p)||f(t)}(),s("changed",e?r:void 0,e,o))};const k=[];for(const g in d){var E=d[g],y=-1!==p.indexOf(g),b=o&&!1!==E.enabled,F=u.renderText(E.tooltip),x=E.styleName?makeSafeClassName(E.styleName):void 0;k.push(React.createElement(FormControlLabel,{className:x,control:React.createElement(Checkbox,{checked:y,inputRef:v,onChange:C(g,E.value)}),disabled:!b,key:g,label:React.createElement(Markdown,{text:E.label}),title:F}))}return React.createElement(StyledFormElement,{className:e,component:"fieldset",element:t,name:r},React.createElement(FormGroup,{row:a===Orientation.HORIZONTAL},k))};export default CheckGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import BaseDateRangePicker from"@vertigis/react-ui/DateRangePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{areValuesEqual,convertToDateRangeRef}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const DateRangePickerField=e=>{const{inputProps:t,...r}=e,{"data-elementError":a,...o}=t;return r.error=r.error||a,React.createElement(DateTimeTextField,{inputProps:o,...r})},PREFIX="DateRangePicker",dateRangePickerClasses={root:`${PREFIX}-root`,toLabel:`${PREFIX}-toLabel`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${dateRangePickerClasses.toLabel}`]:{paddingTop:e(3)}})),DateRangePicker=({className:e,element:t,enabled:r,error:a,format:o,name:s,setProperty:n,setValue:i,tooltip:l,value:m})=>{const u=useContext(HostContext),[c,d]=useState([null,null]),[p,f]=useState(-1),[R,
|
|
1
|
+
import BaseDateRangePicker from"@vertigis/react-ui/DateRangePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{areValuesEqual,convertToDateRangeRef,getDateBounds}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const DateRangePickerField=e=>{const{inputProps:t,...r}=e,{"data-elementError":a,...o}=t;return r.error=r.error||a,React.createElement(DateTimeTextField,{inputProps:o,...r})},PREFIX="DateRangePicker",dateRangePickerClasses={root:`${PREFIX}-root`,toLabel:`${PREFIX}-toLabel`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${dateRangePickerClasses.toLabel}`]:{paddingTop:e(3)}})),DateRangePicker=({className:e,element:t,enabled:r,error:a,format:o,name:s,setProperty:n,setValue:i,tooltip:l,value:m})=>{const u=useContext(HostContext),[c,d]=useState([null,null]),[p,f]=useState(-1),[R,g]=useState([!1,!1]),[x,E]=useState(!1),[D,F]=useState([null,null]),P=useRef(),k=useRef(!0),v=isInvalidError(a);useEffect(()=>{var e=convertToDateRangeRef(m),t=[e?.startDate||null,e?.endDate||null],e=b(t);areValuesEqual(m,e)||i(e,!1),F(t)},[m]),useEffect(()=>{var e=0===p?R[0]:!!c[0],t=1===p?R[1]:!!c[1];g([e,t]);t=e||t;if(t?v||n("error",{status:"invalid"}):v&&n("error",void 0),!x&&-1===p&&!t){if(k.current)return void(k.current=!1);t=b(D);areValuesEqual(m,t)||i(t)}k.current=!1},[c,p,x]);const T=u.renderText(l),C=useFocusCallback(r,s,u),b=e=>{if(e[0]&&e[1])return{refValueType:"daterange",startDate:e[0],endDate:e[1]}},I=useMemo(()=>`${makeUniqueId(s)}-input`,[s]);var S=R[0]||R[1],{min:l,max:o}=getDateBounds(o);return React.createElement(StyledFormElement,{className:clsx(e,dateRangePickerClasses.root),element:t,inputId:I,name:s},S&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},P.current),React.createElement(BaseDateRangePicker,{disabled:!r,maxDate:o,minDate:l,onChange:e=>F(e),onClose:()=>E(!1),onError:e=>d(e),onOpen:()=>E(!0),slots:{textField:DateRangePickerField},slotProps:{fieldSeparator:{children:u.renderText("@common-to"),className:dateRangePickerClasses.toLabel},textField:({position:e})=>({inputProps:{id:"start"===e?I:void 0,"data-elementError":!!a,"data-index":"start"===e?0:1},inputRef:e=>{"0"===e?.dataset.index&&(P.current=e.dataset.formatString,C(e))},onBlur:e=>{Number.parseInt(e.target.dataset.index)===p&&f(-1)},onFocus:e=>{e=Number.parseInt(e.target.dataset.index);f(e)},title:T})},value:D}))};export default DateRangePicker;export{dateRangePickerClasses};
|
package/forms/components/Form.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import AdapterDateFns from"@vertigis/react-ui/AdapterDateFns";import Box from"@vertigis/react-ui/Box";import{LicenseInfo}from"@vertigis/react-ui/LicenseInfo";import LocalizationProvider from"@vertigis/react-ui/LocalizationProvider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useState}from"react";import{FormComponent,FormElementComponent}from"../FormComponent.js";import{FormElementTypes}from"../constants.js";import{getLocale,getLocaleText}from"../dateUtilities.js";import{getKeyString}from"../keyboard.js";import{isMutuallyExclusiveSection
|
|
1
|
+
import AdapterDateFns from"@vertigis/react-ui/AdapterDateFns";import Box from"@vertigis/react-ui/Box";import{LicenseInfo}from"@vertigis/react-ui/LicenseInfo";import LocalizationProvider from"@vertigis/react-ui/LocalizationProvider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useState}from"react";import{FormComponent,FormElementComponent}from"../FormComponent.js";import{FormElementTypes}from"../constants.js";import{getLocale,getLocaleText}from"../dateUtilities.js";import{getKeyString}from"../keyboard.js";import{isMutuallyExclusiveSection}from"../utils.js";const PREFIX="Form",formClasses={body:`${PREFIX}-body`,footer:`${PREFIX}-footer`,formElementContent:`${PREFIX}-element-content`,formElementTitle:`${PREFIX}-element-title`,formElementWithTitleBeside:`${PREFIX}-element-with-title-beside`,header:`${PREFIX}-header`,main:`${PREFIX}-main`,root:`${PREFIX}-root`,row:`${PREFIX}-row`},StyledBox=styled(Box)(()=>({"h1, h2, h3":{margin:0},[`.${formClasses.formElementWithTitleBeside}`]:{alignItems:"start",display:"grid",gridTemplateColumns:"1fr 2fr",[`> .${formClasses.formElementTitle}`]:{gridColumnStart:1,margin:0,overflowWrap:"anywhere"},[`> .${formClasses.formElementContent}`]:{display:"inline-flex",flexDirection:"column",gridColumnStart:2,overflow:"auto"}},[`.${formClasses.row}`]:{display:"flex",gap:"0.5em","> *":{flexGrow:1},"> .CheckBox, > .CheckGroup, > .Image, > .Number, > .RadioGroup":{flexGrow:0},[`.${formClasses.formElementWithTitleBeside}`]:{gridTemplateColumns:"1fr 1fr"}}}));LicenseInfo.setLicenseKey("c14d2671e294e1c22b64a93ed8f2f0f9Tz04ODQ4NixFPTE3NDQ4MzUzNDMwMDAsUz1wcm8sTE09cGVycGV0dWFsLEtWPTI=");const Form=({className:e,component:t})=>{const[o,r]=useState(),[n,i]=useState(),a=t.props["host"];var l,m,t=a["form"];if(useEffect(()=>{let t=!0;var e=a.deriveLocale();return getLocale(e).then(e=>{t?r(e):console.warn("Component was unmounted while loading the locale.")}),getLocaleText(e).then(e=>{t?i(e):console.warn("Component was unmounted while loading the locale.")}),()=>{t=!1}},[]),!o)return null;const s={host:a,type:"header",children:[]},c={host:a,type:"body",children:[]},d={host:a,type:"main",children:[]},f={host:a,type:"footer",children:[]},u={host:a,type:"body",children:[]},p={},h=[];function y(e){return e!==FormElementTypes.SECTION}function E(e){return e===s||e===c||e===f?`${e.type}-section`:e.name}const g=t.elements;for(const L of Object.keys(g).map(e=>[e,g[e]]).sort((e,t)=>{var o=e[1].section,r=t[1].section;return"header"===o||"footer"===r?Number.MIN_SAFE_INTEGER:"footer"===o||"header"===r?Number.MAX_SAFE_INTEGER:e[1].rowNumber===t[1].rowNumber?e[1].rowIndex-t[1].rowIndex:e[1].rowNumber-t[1].rowNumber})){var F,[v,x]=L;if(!0!==(l=x).hoisted&&(!1!==l.visible&&y(l.type)))if(!0!==x.overlay){let e=function(e){if(void 0===e)return c;if("header"===e)return s;if("footer"===e)return f;let t;t="object"==typeof e?e.name:e;let o=(e=>{for(const t of h)if(t.name===e)return t})(t);return void 0===o&&(o={host:a,name:t,type:"section",children:[]},h.push(o)),o}(x.section);void 0!==x.rowNumber&&(F=E(e),e=function(e,t){let o=p[t];o=o||(p[t]=[]);let r=o[e];return void 0===r&&(r=o[e]={host:a,type:"row",children:[]}),r}(x.rowNumber,F)),e.children.push(React.createElement(FormElementComponent,{key:v,host:a,type:"element",name:v,children:[]}))}else u.children.push(React.createElement(FormElementComponent,{key:v,host:a,type:"element",name:v,children:[]}))}const C=[];if(0<s.children.length&&C.push(React.createElement(FormComponent,{key:"header",...s})),0<u.children.length)C.push(React.createElement(FormComponent,{key:"main",...u}));else{k(c);let e,t,o=0;var b=()=>{if(e){switch(t){case"accordion-section":$(e,++o,"accordionGroup");break;case"tab-section":$(e,++o,"tabGroup")}e=void 0,t=void 0}};for(const N of h){var w=N.name,T=g[w],R=T.format;t&&R!==t&&b(),null!=(m=g[m=w])&&(y(m.type)||!0===m.hoisted||!1===m.visible)||(isMutuallyExclusiveSection(T)?e?e.push(N):(e=[N],t=R):k(N))}b(),0<d.children.length&&C.push(React.createElement(FormComponent,{key:"main",...d}))}function I(e){if(!function(e){var t=E(e),o=p[t];if(o)for(const i of Object.keys(o).map(e=>parseInt(e)).sort((e,t)=>e-t)){var r,n=o[i];1<n.children.length?(r=`row-${i}`,e.children.push(React.createElement(FormComponent,{key:r,...n}))):1===n.children.length&&e.children.push(...n.children)}}(e),0<e.children.length){var t=e===c?"body":`$${e.name}`;return React.createElement(FormComponent,{key:t,...e})}}function k(e){e=I(e);e&&d.children.push(e)}function $(e,t,o){const r=[];for(const i of e){var n=I(i);n&&r.push(n)}t=`${o}${t}`,o={children:r,host:a,name:t,type:o};d.children.push(React.createElement(FormComponent,{key:t,...o}))}return 0<f.children.length&&C.push(React.createElement(FormComponent,{key:"footer",...f})),React.createElement(StyledBox,{className:clsx(e,formClasses.root),onKeyDown:function(e){"enter"===getKeyString(e)&&(e.target instanceof HTMLButtonElement||a.post("clicked"))},ref:function(e){a.renderFocus(e)}},React.createElement(LocalizationProvider,{dateAdapter:AdapterDateFns,adapterLocale:o,localeText:{...n,start:a.renderText("@date-range-picker-start-text"),end:a.renderText("@date-range-picker-end-text"),cancelButtonLabel:a.renderText("@common-cancel"),clearButtonLabel:a.renderText("@common-clear"),okButtonLabel:a.renderText("@common-ok"),todayButtonLabel:a.renderText("@common-today")}},C))};export default Form;export{formClasses};
|
|
@@ -10,7 +10,7 @@ interface FormLabelNumberFieldProps {
|
|
|
10
10
|
label: string;
|
|
11
11
|
value: number;
|
|
12
12
|
max: number;
|
|
13
|
-
maxDecimalPlaces
|
|
13
|
+
maxDecimalPlaces?: number;
|
|
14
14
|
min: number;
|
|
15
15
|
}
|
|
16
16
|
declare const FormLabelNumberField: (props: FormLabelNumberFieldProps) => React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import List from"@vertigis/react-ui/List";import ListItemButton from"@vertigis/react-ui/ListItemButton";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import*as React from"react";import{useContext,useEffect,useRef,useState}from"react";import HostContext from"../hostContext.js";import{sanitizeGeometryRef,text}from"../utils.js";import FormElement from"./FormElement.js";import GeometryPickerListItem from"./GeometryPickerListItem.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const GeometryPicker=({autoActivate:e,className:t,element:r,enabled:o,itemLabel:i,name:n,prompt:s,raiseEvent:a,setProperty:c,setValue:l,size:m,state:u,tooltip:d,value:f})=>{const p=useContext(HostContext),[g,v]=useState([]),[h,k]=useState(""),y=u,x=useRef(!1);let E=5;"number"==typeof m&&(E=1<m?Math.ceil(m):1),useEffect(()=>{var e=sanitizeGeometryRef(f);f!==e&&l(e,!1),void 0!==f&&(Array.isArray(i)?v(i):(v([]),text.isMarkdown(i)?i.markdown&&k(i):text.isStatus(i)?i.status&&k(i.status):i&&k(i))),void 0!==y&&null!==y||c("state",[])},[f]);const[R,b]=useState([]),B=useFocusCallback(o,n,p);const I=e=>{let t=y[e];return void 0!==t&&null!==t||(y.length<=e&&(y.length=e,y.push({})),t=y[e]),t},C=n=>()=>{let e;if(1<f.geometry.length){const r=[...f.geometry];if(r.splice(n,1),e={...f,geometry:r},y.splice(n,1),n<g.length){const o=[...g];o.splice(n,1),v(o)}}else y.length=0;let t=[];for(const i of R)i<n?t.push(i):i>n&&t.push(i-1);b(t),l(e,{argument:"remove"})};var L=e=>{o&&C(e)()},P=(e,t,r)=>{const o=I(e);o.focused=t,o.pending=r,p.renderState(n,"geometry",y)};let G=o;const S=[];if(void 0!==f&&void 0!==y){G=o&&f.geometry.length<E;var j=p.renderText("@geometry-picker-remove-item-label");for(const A of f.geometry){var w=S.length;I(w).content=A;var M=`checkbox-list-label-${w}`;S.push(React.createElement(GeometryPickerListItem,{deleteItem:L,disablePadding:!0,itemIndex:w,key:"$"+w,secondaryAction:React.createElement(IconButton,{"aria-label":j,className:"delete",disabled:!o,edge:"end",onClick:C(w),ref:B,title:j},React.createElement(Trash,null)),updateHighlight:P},React.createElement(ListItemButton,{onClick:(o=>()=>{var e=R.indexOf(o);const t=[...R],r=I(o);-1===e?(r.checked=!0,t.push(o)):(r.checked=!1,t.splice(e,1)),b(t)})(w),ref:(t=>e=>{B(e),null!==e&&(e.checked=!!I(t).checked)})(w),selected:-1!==R.indexOf(w)},React.createElement(Markdown,{id:M,inline:!0,text:g[w]||h}))))}}const T=()=>{a("clicked",f)};d=p.renderText(d);return o&&e&&!x.current&&(setTimeout(()=>{c("autoActivate",void 0),x.current=!1,G&&T()}),x.current=!0),React.createElement(FormElement,{className:t,component:"fieldset",element:r,name:n,ref:e=>{p.renderState(n,"geometry",
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import List from"@vertigis/react-ui/List";import ListItemButton from"@vertigis/react-ui/ListItemButton";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import*as React from"react";import{useContext,useEffect,useRef,useState}from"react";import HostContext from"../hostContext.js";import{sanitizeGeometryRef,text}from"../utils.js";import FormElement from"./FormElement.js";import GeometryPickerListItem from"./GeometryPickerListItem.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const GeometryPicker=({autoActivate:e,className:t,element:r,enabled:o,itemLabel:i,name:n,prompt:s,raiseEvent:a,setProperty:c,setValue:l,size:m,state:u,tooltip:d,value:f})=>{const p=useContext(HostContext),[g,v]=useState([]),[h,k]=useState(""),y=u,x=useRef(!1);let E=5;"number"==typeof m&&(E=1<m?Math.ceil(m):1),useEffect(()=>{var e=sanitizeGeometryRef(f);f!==e&&l(e,!1),void 0!==f&&(Array.isArray(i)?v(i):(v([]),text.isMarkdown(i)?i.markdown&&k(i):text.isStatus(i)?i.status&&k(i.status):i&&k(i))),void 0!==y&&null!==y||c("state",[])},[f]);const[R,b]=useState([]),B=useFocusCallback(o,n,p);const I=e=>{let t=y[e];return void 0!==t&&null!==t||(y.length<=e&&(y.length=e,y.push({})),t=y[e]),t},C=n=>()=>{let e;if(1<f.geometry.length){const r=[...f.geometry];if(r.splice(n,1),e={...f,geometry:r},y.splice(n,1),n<g.length){const o=[...g];o.splice(n,1),v(o)}}else y.length=0;let t=[];for(const i of R)i<n?t.push(i):i>n&&t.push(i-1);b(t),l(e,{argument:"remove"})};var L=e=>{o&&C(e)()},P=(e,t,r)=>{const o=I(e);o.focused=t,o.pending=r,p.renderState(n,"geometry",y)};let G=o;const S=[];if(void 0!==f&&void 0!==y){G=o&&f.geometry.length<E;var j=p.renderText("@geometry-picker-remove-item-label");for(const A of f.geometry){var w=S.length;I(w).content=A;var M=`checkbox-list-label-${w}`;S.push(React.createElement(GeometryPickerListItem,{deleteItem:L,disablePadding:!0,itemIndex:w,key:"$"+w,secondaryAction:React.createElement(IconButton,{"aria-label":j,className:"delete",disabled:!o,edge:"end",onClick:C(w),ref:B,title:j},React.createElement(Trash,null)),updateHighlight:P},React.createElement(ListItemButton,{onClick:(o=>()=>{var e=R.indexOf(o);const t=[...R],r=I(o);-1===e?(r.checked=!0,t.push(o)):(r.checked=!1,t.splice(e,1)),b(t)})(w),ref:(t=>e=>{B(e),null!==e&&(e.checked=!!I(t).checked)})(w),selected:-1!==R.indexOf(w)},React.createElement(Markdown,{id:M,inline:!0,text:g[w]||h}))))}}const T=()=>{a("clicked",f)};d=p.renderText(d);return o&&e&&!x.current&&(setTimeout(()=>{c("autoActivate",void 0),x.current=!1,G&&T()}),x.current=!0),React.createElement(FormElement,{className:t,component:"fieldset",element:r,name:n,ref:e=>{let t=y;null===e&&(r.visible||c("state",[]),t=void 0),p.renderState(n,"geometry",t)}},React.createElement(List,null,S),React.createElement(Box,null,React.createElement(Button,{disabled:!G,onClick:T,ref:B,startIcon:React.createElement(Plus,null),title:d,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:s||""}))))};export default GeometryPicker;
|
|
@@ -4,7 +4,7 @@ import type { MarkdownProps as BaseMarkdownProps } from "@vertigis/react-ui/Mark
|
|
|
4
4
|
/**
|
|
5
5
|
* Properties for the `Markdown` component.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
interface MarkdownProps extends Omit<BaseMarkdownProps, "markdown" | "sanitize"> {
|
|
8
8
|
/** The text to be rendered. */
|
|
9
9
|
text: defs.Text | undefined;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{inputClasses}from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{FormElementSize}from"../constants.js";import{numberFormatConfiguration}from"../elements/Number.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{NumberDisplayFormat,DEFAULT_CURRENCY}from"../numberFormatter.js";import{areValuesEqual,
|
|
1
|
+
import{inputClasses}from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{FormElementSize}from"../constants.js";import{countDecimalsInCustomFormat,customFormatNumber,parseCustomFormattedNumber}from"../customNumberFormat.js";import{numberFormatConfiguration}from"../elements/Number.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{NumberDisplayFormat,DEFAULT_CURRENCY,DEFAULT_CUSTOM_FORMAT}from"../numberFormatter.js";import{areValuesEqual,enforceConstraints,getCurrencySymbolInfo,getNumberConstraints,getPercentSymbolInfo,preciseRound,sanitizePrecision}from"../numberUtilities.js";import{isNumber,isNumberRef,isString,makeUniqueId,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="Number",numberClasses={large:`${PREFIX}-large`,medium:`${PREFIX}-medium`,small:`${PREFIX}-small`},StyledFormElement=styled(FormElement)(()=>({[`.${inputClasses.root}`]:{[`&.${numberClasses.large}`]:{width:"50%"},[`&.${numberClasses.medium}`]:{width:"33%"},[`&.${numberClasses.small}`]:{width:"25%"}}})),NumberComponent=({className:e,element:r,enabled:t,error:o,format:p,name:m,prompt:n,require:s,tooltip:a,value:i,setValue:u})=>{const l=useContext(HostContext),[c,b]=useState(!1),[f,d]=useState(),F=useRef(!0),C=`${makeUniqueId(m)}-input`,N=useLocale(),y=l.renderText(n),E=l.renderText(a),{currency:g,customDisplayFormat:D,decimals:R,displayFormat:v,endAdornment:I,isCustom:S,isFixedPoint:x,isPercent:P,numberConstraints:T,startAdornment:A}=useMemo(()=>{var e,r,t=p,o=t?.currency||DEFAULT_CURRENCY,m=t?.displayFormat,n=m===NumberDisplayFormat.CUSTOM,s=m===NumberDisplayFormat.FIXED_POINT,a=m===NumberDisplayFormat.PERCENT,i=getNumberConstraints(t,numberFormatConfiguration),u=t?.customDisplayFormat||DEFAULT_CUSTOM_FORMAT,t=m===NumberDisplayFormat.CUSTOM?-1:sanitizePrecision(t?.precision,i.step,numberFormatConfiguration);let l=null,c=null;return m===NumberDisplayFormat.CURRENCY||m===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(N,o))&&(r=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?l=r:c=r):!a||(e=getPercentSymbolInfo(N))&&(r=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?l=r:c=r),{currency:o,customDisplayFormat:u,decimals:t,displayFormat:m,endAdornment:c,isCustom:n,isFixedPoint:s,isPercent:a,numberConstraints:i,startAdornment:l}},[p]);n=useMemo(()=>v===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(D,f):-1,[f]);const{maximum:U,minimum:M,step:j}=T;a=P?R-2:R,a=Math.max(0,a);const z={currency:g,customDisplayFormat:D,format:v,fractionalDigits:a,locale:N},O=e=>{if("number"==typeof e)return{refValueType:"number",format:{lowerBound:M,precision:R,step:j,upperBound:U},display:l.formatNumber(e,z),numeric:e}},$=()=>{e=void 0===(e=f)?void 0:enforceConstraints(e,T),e=O(e);areValuesEqual(i,e)||u(e);var e=e?.numeric;e!==f&&d(e)};useEffect(()=>{F.current?F.current=!1:c||$()},[c,f]),useEffect(()=>{var e=h(i),r=void 0===e?void 0:O(e);areValuesEqual(i,r)||u(r,!1),e!==f&&d(e)},[i]);const h=e=>{let r;if(isNumber(e))r=e;else if(isString(e)){if(!e)return;r=l.coerceNumber(e,N)}else"number"==typeof e?.numeric&&(r=e.numeric);return"number"==typeof r&&0*r!=0&&(r=void 0),void 0===r?r:enforceConstraints(r,T)},q=e=>{var r,t=getKeyString(e);return"enter"===t?(r=e,$(),r.currentTarget.select(),r.stopPropagation(),r.preventDefault(),!1):"escape"===t?(t=e,(e=isNumberRef(i)?i.numeric:void 0)!==f&&d(e),t.currentTarget.select(),t.stopPropagation(),t.preventDefault(),!1):void 0},L=useFocusCallback(t,m,l);a="string"==typeof r.size?r.size:FormElementSize.Full;const _=S?n:R,w=clsx({[numberClasses.large]:a===FormElementSize.Large,[numberClasses.medium]:a===FormElementSize.Medium,[numberClasses.small]:a===FormElementSize.Small});return React.createElement(StyledFormElement,{className:e,element:r,inputId:C,name:m},e=>React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(S)return customFormatNumber(e,D,z.locale);P&&(e*=100);var r={format:x?z.format:void 0,fractionalDigits:z.fractionalDigits,locale:z.locale};return l.formatNumber(e,r)},parseNumber:e=>{if(S)return parseCustomFormattedNumber(e,D,z.locale);let r=l.coerceNumber(e,N);return P&&(r=preciseRound(r/100,R)),r}}},React.createElement(NumberInput,{allowUndefined:!0,className:w,correctOnBlur:!0,disabled:!t,endAdornment:I,error:!!o,inputProps:{...e,id:C,onKeyDown:q,title:E},inputRef:L,max:U,maxDecimalPlaces:_,min:M,onBlur:()=>{b(!1)},onChange:e=>d(e),onFocus:()=>{b(!0)},placeholder:y,required:s,size:"small",startAdornment:A,value:f})))};export default NumberComponent;export{numberClasses};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import{formControlClasses}from"@vertigis/react-ui/FormControl";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import Stack from"@vertigis/react-ui/Stack";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{numberFormatConfiguration}from"../elements/NumberRangeSlider.js";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,NumberDisplayFormat}from"../numberFormatter.js";import{
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import{formControlClasses}from"@vertigis/react-ui/FormControl";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import Stack from"@vertigis/react-ui/Stack";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{countDecimalsInCustomFormat,customFormatNumber,parseCustomFormattedNumber}from"../customNumberFormat.js";import{numberFormatConfiguration}from"../elements/NumberRangeSlider.js";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,DEFAULT_CUSTOM_FORMAT,NumberDisplayFormat}from"../numberFormatter.js";import{getCurrencySymbolInfo,getPercentSymbolInfo,preciseRound}from"../numberUtilities.js";import{getMarks,getNumberConstraints,getNumberSliderValues,sanitizePrecision}from"../numberUtilities.js";import{makeUniqueId,throttle,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import FormLabelNumberField from"./FormLabelNumberField.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberRangeSlider",numberRangeSliderClasses={container:`${PREFIX}-container`,inputContainer:`${PREFIX}-input-container`,toLabel:`${PREFIX}-to-label`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${numberRangeSliderClasses.container}`]:{display:"inline-flex",flexDirection:"column",paddingLeft:e(2),paddingRight:e(2),paddingTop:e(4),width:"100%",[`.${sliderClasses.markLabel}`]:{transform:"translateX(-100%)",'&[data-index="0"]':{transform:"none"}},[`.${numberRangeSliderClasses.inputContainer}`]:{marginTop:e(1),[`.${formControlClasses.root}`]:{flexGrow:1},[`.${numberRangeSliderClasses.toLabel}`]:{marginLeft:e(2),marginRight:e(2),paddingTop:e(2),alignSelf:"center"}}}})),NumberRangeSlider=({className:e,element:t,enabled:r,format:d,manualEntry:a,showMinMaxLabels:o,showTickMarks:m,name:n,raiseEvent:i,title:s,tooltip:l,value:u,setValue:c})=>{const p=useContext(HostContext),b=useLocale(),{currency:C,customDisplayFormat:F,decimals:f,displayFormat:g,endAdornment:N,isCustom:R,isFixedPoint:y,isPercent:S,numberConstraints:x,startAdornment:E}=useMemo(()=>{var e,t,r=d,a=r?.currency||DEFAULT_CURRENCY,o=r?.displayFormat,m=o===NumberDisplayFormat.CUSTOM,n=o===NumberDisplayFormat.FIXED_POINT,i=o===NumberDisplayFormat.PERCENT,s=getNumberConstraints(r,numberFormatConfiguration),l=r?.customDisplayFormat||DEFAULT_CUSTOM_FORMAT,r=o===NumberDisplayFormat.CUSTOM?-1:sanitizePrecision(r?.precision,s.step,numberFormatConfiguration);let u=null,c=null;return o===NumberDisplayFormat.CURRENCY||o===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(b,a))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?u=t:c=t):!i||(e=getPercentSymbolInfo(b))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?u=t:c=t),{currency:a,customDisplayFormat:l,decimals:r,displayFormat:o,endAdornment:c,isCustom:m,isFixedPoint:n,isPercent:i,numberConstraints:s,startAdornment:u}},[d]);var v=x["step"];const D=x.maximum,A=x.minimum,[T,I]=useState(!1),[L,P]=useState(!1),[M,U]=useState([A,D]);var h=useMemo(()=>g===NumberDisplayFormat.CUSTOM?[countDecimalsInCustomFormat(F,M[0]),countDecimalsInCustomFormat(F,M[1])]:[-1,-1],[M]);const $=useRef(!0),[k,j]=useMemo(()=>{var e=makeUniqueId(n);return[e,`${e}-slider-input`]},[n]);var O=!1!==o,_=!!m,o=!1!==a,m=S?f-2:f,m=Math.max(0,m);const X={currency:C,customDisplayFormat:F,format:g,fractionalDigits:m,locale:b};useEffect(()=>{var e;$.current?$.current=!1:L?B(M):T||(e=getNumberSliderValues(M,x),M[0]===e[0]&&M[1]===e[1]||U(e),w(u,e)||c(e))},[T,L,M]),useEffect(()=>{var e=getNumberSliderValues(u,x);w(u,e)||c(e,!1),w(M,e)||U(e)},[u]);const w=(e,t)=>void 0===e&&void 0===t[0]&&void 0===t[1]||(void 0===e&&null===t[0]&&null===t[1]||!(!Array.isArray(e)||2!==e.length||e[0]!==t[0]||e[1]!==t[1])),B=useMemo(()=>throttle(e=>{i("dragged",e)}),[]),V=useFocusCallback(r,n,p);a=p.renderText(l),m=!r&&!L,l=o?{max:D,min:A,onBlur:()=>{I(!1)},onFocus:()=>{I(!0)},step:v,title:a}:void 0,h=R?h:[f,f];return React.createElement(StyledFormElement,{className:e,element:t,inputId:`${j}-0`,name:n},React.createElement(Box,{className:numberRangeSliderClasses.container},React.createElement(Slider,{disabled:m,getAriaLabel:()=>p.renderText(s),getAriaValueText:e=>p.formatNumber(e,X),marks:getMarks(D,A,v,X,O,_),max:D,min:A,onChange:(e,t)=>{P(!0),Array.isArray(t)&&U(t)},onChangeCommitted:()=>{P(!1)},slotProps:{input:()=>({ref:e=>(null===e||e.id||(e.id=`${j}-${e.getAttribute("data-index")}`),V(e))})},step:v,title:a,value:M,valueLabelDisplay:"on",valueLabelFormat:(e,t)=>p.formatNumber(e,X)}),!1!=o&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(R)return customFormatNumber(e,F,X.locale);S&&(e*=100);var t={format:y?X.format:void 0,fractionalDigits:X.fractionalDigits,locale:X.locale};return p.formatNumber(e,t)},parseNumber:e=>{if(R)return parseCustomFormattedNumber(e,F,X.locale);let t=p.coerceNumber(e,b);return S&&(t=preciseRound(t/100,f)),t}}},React.createElement(Stack,{direction:"row",className:numberRangeSliderClasses.inputContainer},React.createElement(FormLabelNumberField,{disabled:!r,id:`${k}-startInput`,inputProps:l,endAdornment:N,label:p.renderText("@common-start"),max:D,maxDecimalPlaces:h[0],min:A,onChange:e=>{void 0===e&&(e=A),U([e,M[1]])},startAdornment:E,value:M[0]}),React.createElement(Box,{className:numberRangeSliderClasses.toLabel}," ",p.renderText("@common-to")," "),React.createElement(FormLabelNumberField,{disabled:!r,endAdornment:N,id:`${k}-endInput`,inputProps:l,label:p.renderText("@common-end"),max:D,maxDecimalPlaces:h[1],min:A,onChange:e=>{void 0===e&&(e=D),U([M[0],e])},startAdornment:E,value:M[1]})))))};export default NumberRangeSlider;export{numberRangeSliderClasses};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{inputBaseClasses}from"@vertigis/react-ui/InputBase";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,NumberDisplayFormat}from"../numberFormatter.js";import{areValuesEqual,
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{inputBaseClasses}from"@vertigis/react-ui/InputBase";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{countDecimalsInCustomFormat,customFormatNumber,parseCustomFormattedNumber}from"../customNumberFormat.js";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,DEFAULT_CUSTOM_FORMAT,NumberDisplayFormat}from"../numberFormatter.js";import{areValuesEqual,getCurrencySymbolInfo,getMarks,getNumberConstraints,getNumberSliderValues,getPercentSymbolInfo,preciseRound,sanitizePrecision}from"../numberUtilities.js";import{makeUniqueId,throttle,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberSlider",numberSliderClasses={container:`${PREFIX}-container`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${numberSliderClasses.container}`]:{display:"inline-flex",flexDirection:"column",paddingLeft:e(2),paddingRight:e(2),paddingTop:e(4),width:"100%",[`.${sliderClasses.markLabel}`]:{transform:"translateX(-100%)",'&[data-index="0"]':{transform:"none"}},[`.${inputBaseClasses.root}`]:{marginTop:e(1)}}})),NumberSlider=({className:e,element:t,enabled:r,error:a,format:p,manualEntry:o,showMinMaxLabels:m,showTickMarks:s,name:n,raiseEvent:i,title:u,tooltip:l,value:c,setValue:d})=>{const b=useContext(HostContext),f=useLocale(),{currency:C,customDisplayFormat:F,decimals:N,displayFormat:y,endAdornment:g,isCustom:E,isFixedPoint:S,isPercent:x,numberConstraints:D,startAdornment:R}=useMemo(()=>{var e,t,r=p,a=r?.currency||DEFAULT_CURRENCY,o=r?.displayFormat,m=o===NumberDisplayFormat.CUSTOM,s=o===NumberDisplayFormat.FIXED_POINT,n=o===NumberDisplayFormat.PERCENT,i=getNumberConstraints(r),u=r?.customDisplayFormat||DEFAULT_CUSTOM_FORMAT,r=o===NumberDisplayFormat.CUSTOM?-1:sanitizePrecision(r?.precision,i.step);let l=null,c=null;return o===NumberDisplayFormat.CURRENCY||o===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(f,a))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?l=t:c=t):!n||(e=getPercentSymbolInfo(f))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?l=t:c=t),{currency:a,customDisplayFormat:u,decimals:r,displayFormat:o,endAdornment:c,isCustom:m,isFixedPoint:s,isPercent:n,numberConstraints:i,startAdornment:l}},[p]),v=D["step"],I=D.maximum,A=D.minimum,[T,M]=useState(!1),[P,U]=useState(!1),[h,L]=useState(A);var k=useMemo(()=>y===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(F,h):-1,[h]);const B=useRef(!0);var O=`${makeUniqueId(n)}-input`,V=!1!==m,j=!!s,m=!1!==o,s=x?N-2:N,s=Math.max(0,s);const _={currency:C,customDisplayFormat:F,format:y,fractionalDigits:s,locale:f},q=e=>({refValueType:"number",format:{currency:C,customDisplayFormat:F,displayFormat:y,lowerBound:A,precision:N,step:v,upperBound:I},display:b.formatNumber(e,_),numeric:e});useEffect(()=>{var e;B.current?B.current=!1:P?$(h):T||((e=getNumberSliderValues(h,D,!0)[0])!==h&&L(e),e=q(e),areValuesEqual(c,e)||d(e))},[T,P,h]),useEffect(()=>{var e=getNumberSliderValues(c,D,!0)[0],t=q(e);areValuesEqual(c,t)||d(t,!1),h!==e&&L(e)},[c]);const $=useMemo(()=>throttle(e=>{i("dragged",q(e))}),[]);o=useFocusCallback(r,n,b),s=b.renderText(l),l=!r&&!P,r=!r,k=E?k:N;return React.createElement(StyledFormElement,{className:e,element:t,inputId:O,name:n},React.createElement(Box,{className:numberSliderClasses.container},React.createElement(Slider,{disabled:l,getAriaLabel:()=>b.renderText(u),getAriaValueText:e=>b.formatNumber(e,_),marks:getMarks(I,A,v,_,V,j),max:I,min:A,onChange:(e,t)=>{U(!0);t=Array.isArray(t)?t[0]:t;L(t)},onChangeCommitted:()=>{U(!1)},slotProps:{input:{id:O,ref:o}},step:v,title:s,value:"number"==typeof h?h:0,valueLabelDisplay:"on",valueLabelFormat:(e,t)=>b.formatNumber(e,_)}),!1!=m&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(E)return customFormatNumber(e,F,_.locale);x&&(e*=100);var t={format:S?_.format:void 0,fractionalDigits:_.fractionalDigits,locale:_.locale};return b.formatNumber(e,t)},parseNumber:e=>{if(E)return parseCustomFormattedNumber(e,F,_.locale);let t=b.coerceNumber(e,f);return x&&(t=preciseRound(t/100,N)),t}}},React.createElement(NumberInput,{correctOnBlur:!0,disabled:r,endAdornment:g,error:!!a,inputProps:{step:v,title:s},max:I,maxDecimalPlaces:k,min:A,onChange:e=>{void 0===e?L(A):L(e)},onFocus:()=>{M(!0)},onBlur:()=>{M(!1)},size:"small",startAdornment:R,value:h}))))};export default NumberSlider;export{numberSliderClasses};
|