@vertigis/workflow 5.35.1 → 5.36.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/Hooks.d.ts +3 -3
- package/IActivityHandler.d.ts +1 -6
- package/activities/arcgis/AddAttachment.d.ts +2 -2
- package/activities/arcgis/AddAttachment.js +1 -1
- package/activities/arcgis/AddFeatures.d.ts +3 -3
- package/activities/arcgis/AddFeatures.js +1 -1
- package/activities/arcgis/AddGraphics.d.ts +2 -2
- package/activities/arcgis/AddGraphics.js +1 -1
- package/activities/arcgis/ArcadeScript.d.ts +2 -2
- package/activities/arcgis/ArcadeScript.js +1 -1
- package/activities/arcgis/AreaEngineTask.d.ts +2 -2
- package/activities/arcgis/AreaEngineTask.js +1 -1
- package/activities/arcgis/BufferEngineTask.d.ts +2 -2
- package/activities/arcgis/BufferEngineTask.js +1 -1
- package/activities/arcgis/ClearGraphics.d.ts +1 -1
- package/activities/arcgis/ClearGraphics.js +1 -1
- package/activities/arcgis/ClipEngineTask.d.ts +2 -2
- package/activities/arcgis/ClipEngineTask.js +1 -1
- package/activities/arcgis/CompareGeometries.d.ts +2 -2
- package/activities/arcgis/CompareGeometries.js +1 -1
- package/activities/arcgis/CutEngineTask.d.ts +2 -2
- package/activities/arcgis/CutEngineTask.js +1 -1
- package/activities/arcgis/DeleteAttachments.d.ts +2 -2
- package/activities/arcgis/DeleteAttachments.js +1 -1
- package/activities/arcgis/DeleteFeatures.d.ts +3 -3
- package/activities/arcgis/DeleteFeatures.js +1 -1
- package/activities/arcgis/DensifyEngineTask.d.ts +2 -2
- package/activities/arcgis/DensifyEngineTask.js +1 -1
- package/activities/arcgis/DifferenceEngineTask.d.ts +2 -2
- package/activities/arcgis/DifferenceEngineTask.js +1 -1
- package/activities/arcgis/DistanceEngineTask.d.ts +2 -2
- package/activities/arcgis/DistanceEngineTask.js +1 -1
- package/activities/arcgis/ExtendedSpatialReferenceInfoEngineTask.d.ts +1 -1
- package/activities/arcgis/FlipEngineTask.d.ts +2 -2
- package/activities/arcgis/FlipEngineTask.js +1 -1
- package/activities/arcgis/GeneralizeEngineTask.d.ts +2 -2
- package/activities/arcgis/GeneralizeEngineTask.js +1 -1
- package/activities/arcgis/Geocode.d.ts +2 -2
- package/activities/arcgis/Geocode.js +1 -1
- package/activities/arcgis/GeoprocessingAsync.js +1 -1
- package/activities/arcgis/GetCodedValueDomain.d.ts +4 -4
- package/activities/arcgis/GetCodedValueDomain.js +1 -1
- package/activities/arcgis/GetFeatureLayerInfo.d.ts +2 -2
- package/activities/arcgis/GetFeatureLayerInfo.js +1 -1
- package/activities/arcgis/GetGraphics.d.ts +2 -2
- package/activities/arcgis/GetGraphics.js +1 -1
- package/activities/arcgis/GetLayer.d.ts +2 -2
- package/activities/arcgis/GetLayer.js +1 -1
- package/activities/arcgis/GetLayerDefinitionExpression.d.ts +2 -2
- package/activities/arcgis/GetLayerDefinitionExpression.js +1 -1
- package/activities/arcgis/GetLayerProperty.d.ts +2 -2
- package/activities/arcgis/GetLayerProperty.js +1 -1
- package/activities/arcgis/GetLayerVisibility.d.ts +2 -2
- package/activities/arcgis/GetLayerVisibility.js +1 -1
- package/activities/arcgis/GetMap.d.ts +2 -2
- package/activities/arcgis/GetMap.js +1 -1
- package/activities/arcgis/GetMapScreenshot.d.ts +1 -1
- package/activities/arcgis/GetTable.d.ts +2 -2
- package/activities/arcgis/GetTable.js +1 -1
- package/activities/arcgis/GetViewExtent.d.ts +2 -2
- package/activities/arcgis/GetViewExtent.js +1 -1
- package/activities/arcgis/GetViewpoint.d.ts +2 -2
- package/activities/arcgis/GetViewpoint.js +1 -1
- package/activities/arcgis/IntersectEngineTask.d.ts +2 -2
- package/activities/arcgis/IntersectEngineTask.js +1 -1
- package/activities/arcgis/LengthEngineTask.d.ts +2 -2
- package/activities/arcgis/LengthEngineTask.js +1 -1
- package/activities/arcgis/MapProvider.js +1 -1
- package/activities/arcgis/NearestVertexEngineTask.d.ts +2 -2
- package/activities/arcgis/NearestVertexEngineTask.js +1 -1
- package/activities/arcgis/NearestVerticesEngineTask.d.ts +2 -2
- package/activities/arcgis/NearestVerticesEngineTask.js +1 -1
- package/activities/arcgis/OffsetEngineTask.d.ts +2 -2
- package/activities/arcgis/OffsetEngineTask.js +1 -1
- package/activities/arcgis/QueryAttachmentInfos.d.ts +2 -2
- package/activities/arcgis/QueryAttachmentInfos.js +1 -1
- package/activities/arcgis/QueryTask.js +1 -1
- package/activities/arcgis/RelateEngineTask.d.ts +2 -2
- package/activities/arcgis/RelateEngineTask.js +1 -1
- package/activities/arcgis/RemoveGraphics.d.ts +2 -2
- package/activities/arcgis/RemoveGraphics.js +1 -1
- package/activities/arcgis/RemoveLayer.d.ts +2 -2
- package/activities/arcgis/RemoveLayer.js +1 -1
- package/activities/arcgis/RotateEngineTask.d.ts +2 -2
- package/activities/arcgis/RotateEngineTask.js +1 -1
- package/activities/arcgis/SetFeaturePopup.d.ts +1 -1
- package/activities/arcgis/SetImageryLayerOptions.d.ts +2 -2
- package/activities/arcgis/SetImageryLayerOptions.js +1 -1
- package/activities/arcgis/SetLayerDefinitionExpression.d.ts +2 -2
- package/activities/arcgis/SetLayerDefinitionExpression.js +1 -1
- package/activities/arcgis/SetLayerPopup.d.ts +2 -2
- package/activities/arcgis/SetLayerPopup.js +1 -1
- package/activities/arcgis/SetLayerProperty.d.ts +2 -2
- package/activities/arcgis/SetLayerProperty.js +1 -1
- package/activities/arcgis/SetLayerVisibility.d.ts +2 -2
- package/activities/arcgis/SetLayerVisibility.js +1 -1
- package/activities/arcgis/SetViewExtent.d.ts +2 -2
- package/activities/arcgis/SetViewExtent.js +1 -1
- package/activities/arcgis/SetViewpoint.d.ts +2 -2
- package/activities/arcgis/SetViewpoint.js +1 -1
- package/activities/arcgis/ShowFeaturePopup.d.ts +2 -2
- package/activities/arcgis/ShowFeaturePopup.js +1 -1
- package/activities/arcgis/ShowResults.d.ts +2 -2
- package/activities/arcgis/SimplifyEngineTask.d.ts +2 -2
- package/activities/arcgis/SimplifyEngineTask.js +1 -1
- package/activities/arcgis/UnionEngineTask.d.ts +2 -2
- package/activities/arcgis/UnionEngineTask.js +1 -1
- package/activities/arcgis/UpdateAttachment.d.ts +2 -2
- package/activities/arcgis/UpdateAttachment.js +1 -1
- package/activities/arcgis/UpdateFeatures.d.ts +3 -3
- package/activities/arcgis/UpdateFeatures.js +1 -1
- package/activities/arcgis/libs/arcGisRestApi.d.ts +1 -8
- package/activities/arcgis/tools.d.ts +0 -9
- package/activities/arcgis/tools.js +1 -1
- package/activities/core/WebRequest.js +1 -1
- package/activities/essentials/RunEssentialsWorkflow.d.ts +1 -1
- package/activities/essentials/RunEssentialsWorkflow.js +1 -1
- package/activities/forms/ActivateFormElement.d.ts +2 -2
- package/activities/forms/ActivateFormElement.js +1 -1
- package/activities/forms/AddFormElement.d.ts +3 -3
- package/activities/forms/ClearFormElementError.d.ts +2 -2
- package/activities/forms/ClearFormElementError.js +1 -1
- package/activities/forms/DisplayForm.d.ts +2 -2
- package/activities/forms/DisplayForm.js +1 -1
- package/activities/forms/FormRenderer.d.ts +35 -29
- package/activities/forms/FormRenderer.js +1 -1
- package/activities/forms/HideFormElement.d.ts +2 -2
- package/activities/forms/HideFormElement.js +1 -1
- package/activities/forms/SetCurrentFormElementItem.d.ts +2 -2
- package/activities/forms/SetCurrentFormElementItem.js +1 -1
- package/activities/forms/SetFormElementError.d.ts +2 -2
- package/activities/forms/SetFormElementError.js +1 -1
- package/activities/forms/SetFormElementEvent.d.ts +2 -2
- package/activities/forms/SetFormElementItemProperty.d.ts +2 -2
- package/activities/forms/SetFormElementItemProperty.js +1 -1
- package/activities/forms/SetFormElementItems.d.ts +2 -2
- package/activities/forms/SetFormElementItems.js +1 -1
- package/activities/forms/SetFormElementProperty.d.ts +2 -2
- package/activities/forms/SetFormElementProperty.js +1 -1
- package/activities/forms/ShowFormElement.d.ts +2 -2
- package/activities/forms/ShowFormElement.js +1 -1
- package/execution/ActivityLoader.js +1 -1
- package/execution/Engine.js +1 -1
- package/execution/ModuleLoader.js +1 -1
- package/execution/ProgramRunner.js +1 -1
- package/forms/FormComponent.d.ts +18 -1
- package/forms/FormComponent.js +1 -1
- package/forms/FormDefinition.d.ts +1 -6
- package/forms/FormHost.d.ts +0 -2
- package/forms/FormHost.js +1 -1
- package/forms/FormPresenterHost.d.ts +0 -2
- package/forms/NumberParser.d.ts +1 -0
- package/forms/NumberParser.js +1 -1
- package/forms/common.d.ts +2 -2
- package/forms/common.js +1 -1
- package/forms/components/AutoComplete.d.ts +3 -2
- package/forms/components/AutoComplete.js +1 -1
- package/forms/components/ButtonBar.d.ts +3 -8
- package/forms/components/ButtonBar.js +1 -1
- package/forms/components/CheckBox.d.ts +2 -2
- package/forms/components/CheckBox.js +1 -1
- package/forms/components/CheckGroup.d.ts +3 -2
- package/forms/components/CheckGroup.js +1 -1
- package/forms/components/Custom.d.ts +2 -2
- package/forms/components/Custom.js +1 -1
- package/forms/components/DatePicker.d.ts +3 -2
- package/forms/components/DatePicker.js +1 -1
- package/forms/components/DateRangePicker.d.ts +3 -2
- package/forms/components/DateRangePicker.js +1 -1
- package/forms/components/DateTimePicker.d.ts +3 -2
- package/forms/components/DateTimePicker.js +1 -1
- package/forms/components/DropDownList.js +1 -1
- package/forms/components/FilePicker.js +1 -1
- package/forms/components/Form.js +1 -1
- package/forms/components/FormLabelNumberField.d.ts +3 -1
- package/forms/components/FormLabelNumberField.js +1 -1
- package/forms/components/GeometryPicker.js +1 -1
- package/forms/components/HorizontalRule.d.ts +2 -2
- package/forms/components/Image.d.ts +2 -2
- package/forms/components/Image.js +1 -1
- package/forms/components/ItemPicker.js +1 -1
- package/forms/components/ListBox.d.ts +3 -2
- package/forms/components/ListBox.js +1 -1
- package/forms/components/Markdown.d.ts +3 -4
- package/forms/components/Markdown.js +1 -1
- package/forms/components/Number.d.ts +3 -2
- package/forms/components/Number.js +1 -1
- package/forms/components/NumberRangeSlider.d.ts +2 -2
- package/forms/components/NumberRangeSlider.js +1 -1
- package/forms/components/NumberSlider.d.ts +3 -2
- package/forms/components/NumberSlider.js +1 -1
- package/forms/components/RadioGroup.d.ts +3 -2
- package/forms/components/RadioGroup.js +1 -1
- package/forms/components/Scanner.js +1 -1
- package/forms/components/Section.js +1 -1
- package/forms/components/Signature.js +1 -1
- package/forms/components/SignatureDialog.js +1 -1
- package/forms/components/Text.d.ts +2 -2
- package/forms/components/TextArea.d.ts +2 -2
- package/forms/components/TextArea.js +1 -1
- package/forms/components/TextBox.d.ts +2 -16
- package/forms/components/TextBox.js +1 -1
- package/forms/components/TimePicker.d.ts +3 -2
- package/forms/components/TimePicker.js +1 -1
- package/forms/dateUtilities.d.ts +4 -18
- package/forms/dateUtilities.js +1 -1
- package/forms/index.d.ts +48 -12
- package/forms/listUtilities.d.ts +3 -0
- package/forms/listUtilities.js +1 -0
- package/forms/manifest.d.ts +3 -0
- package/forms/manifest.js +1 -0
- package/forms/numberUtilities.d.ts +40 -3
- package/forms/numberUtilities.js +1 -1
- package/forms/presenter.js +1 -1
- package/forms/renderers.js +1 -1
- package/forms/utils.d.ts +35 -21
- package/forms/utils.js +1 -1
- package/libs/version.d.ts +1 -1
- package/libs/version.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import Input from"@vertigis/react-ui/Input";import*as React from"react";import{useEffect,useState}from"react";import FormElement from"../FormElement.js";import{getKeyString}from"../keyboard.js";import{makeUniqueId}from"../utils.js";const TextBox=({className:e,component:
|
|
1
|
+
import Input from"@vertigis/react-ui/Input";import*as React from"react";import{useEffect,useState}from"react";import FormElement from"../FormElement.js";import{FormElementTypes}from"../constants.js";import{getKeyString}from"../keyboard.js";import{makeUniqueId}from"../utils.js";const TextBox=({className:e,component:t,element:r,enabled:n,formatNumber:o,type:a,maxLength:m,name:l,prompt:u,readOnly:s,renderFocus:p,require:i,tooltip:c,value:d,renderText:f,setValue:g})=>{const[v,y]=useState("");var x=`${makeUniqueId(l)}-input`;const E=a===FormElementTypes.PASSWORDBOX;m=E?void 0:m,u=f(u),s=E?void 0:s,c=f(c);useEffect(()=>{let e="";"string"==typeof d?e=d:"number"!=typeof d||E||(e=o(d)),d!==e&&g(e,!1),v!==e&&y(e)},[d]);const T=e=>{g(e),y(e)};return React.createElement(FormElement,{className:e,component:t,element:r,inputId:x},React.createElement(Input,{disabled:!n,fullWidth:!0,id:x,inputProps:{maxLength:m,onKeyDown:e=>{var t=getKeyString(e);return"enter"===t?(e=>{const t=e.currentTarget;var r=t.value;if(r!==d)return T(r),t.select(),e.stopPropagation(),e.preventDefault(),!1})(e):"escape"===t?(e=>{const t=e.currentTarget;if(t.value!==d)return y(d),t.select(),e.stopPropagation(),e.preventDefault(),!1})(e):void 0},title:c},inputRef:e=>{null===e||e.disabled||p(e,l)},onBlur:e=>{e=e.target.value;e!=d&&T(e)},onChange:e=>{e=e.target.value;e!=v&&y(e)},placeholder:u,readOnly:s,required:i,type:E?"password":"text",value:v}))};export default TextBox;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import { FormElementProps } from "../..";
|
|
3
|
+
import { defs } from "../FormHost";
|
|
3
4
|
/**
|
|
4
5
|
* The component for the "Time Picker" Form Element.
|
|
5
6
|
*/
|
|
6
|
-
declare const TimePicker: ({ className, component, element }:
|
|
7
|
+
declare const TimePicker: ({ className, component, deriveLocale, element, enabled, error, name, prompt, renderFocus, renderText, tooltip: elementTooltip, value: elementValue, setProperty, setValue: setElementValue, }: FormElementProps<defs.DateTimeRef | undefined>) => JSX.Element;
|
|
7
8
|
export default TimePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import{clockClasses}from"@vertigis/react-ui/ClockPicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import BaseTimePicker from"@vertigis/react-ui/TimePicker";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useRef,useState}from"react";import{Calendar}from"../Calendar.js";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{hasErrorChanged,isInvalidDate,
|
|
1
|
+
import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import{clockClasses}from"@vertigis/react-ui/ClockPicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import BaseTimePicker from"@vertigis/react-ui/TimePicker";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useRef,useState}from"react";import{Calendar}from"../Calendar.js";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{areValuesEqual,hasErrorChanged,isInvalidDate,makeProperValue}from"../dateUtilities.js";import{getNewElementValue}from"../dateUtilities.js";import{makeUniqueId}from"../utils.js";const StylableTimePicker=e=>{const{PopperProps:t={},className:r,...a}=e;return React.createElement(BaseTimePicker,{PopperProps:{...t,className:clsx(t.className,r)},...a})},StyledTimePicker=styled(StylableTimePicker)(({theme:{palette:e}})=>({[`& .${clockClasses.amButton}, .${clockClasses.pmButton}`]:{[`&.${buttonBaseClasses.focusVisible}`]:{color:e.action.active}}})),TimePicker=({className:e,component:t,deriveLocale:r,element:a,enabled:o,error:l,name:s,prompt:i,renderFocus:m,renderText:c,tooltip:n,value:u,setProperty:p,setValue:d})=>{const[f,k]=useState(!1),[P,E]=useState(!1),[v,F]=useState(null),T=useRef(),C=useRef(!0);m=useFocusCallback(o,s,m);const b=c(n),g={locale:r(),timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},x=Calendar.useNative(),R="time";useEffect(()=>{var e=makeProperValue(u,x),t=getNewElementValue(e,R,g,x);areValuesEqual(u,t)||d(t,!1),F(e||null)},[u]),useEffect(()=>{var e;C.current?C.current=!1:P||f||(isInvalidDate(v)?V({status:"invalid"}):(V(),e=getNewElementValue(v,R,g,x),areValuesEqual(u,e)||d(e)))},[P,f]);const V=e=>{hasErrorChanged(l,e)&&p("error",e)},h=`${makeUniqueId(s)}-input`,y=c(i);return React.createElement(FormElement,{className:e,component:t,element:a,inputId:h},l&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},T.current),React.createElement(StyledTimePicker,{disabled:!o,key:"date-picker",inputRef:m,onChange:e=>{F(e)},onOpen:()=>{E(!0)},onClose:()=>{E(!1)},renderInput:e=>(T.current=e.inputProps?.placeholder,e.error=!!l,e.inputProps={...e.inputProps,id:h,onBlur:()=>{k(!1)},onFocus:()=>{k(!0)},placeholder:y||e.inputProps?.placeholder,title:b},React.createElement(FormLabelTextField,{...e})),value:v}))};export default TimePicker;
|
package/forms/dateUtilities.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ import { defs } from "./FormHost";
|
|
|
4
4
|
import { FormPresenterHost } from "./FormPresenterHost";
|
|
5
5
|
/**
|
|
6
6
|
* Checks if a form element's value is equal to the supplied value.
|
|
7
|
-
* @param
|
|
7
|
+
* @param elementValue The current value of a Form Element.
|
|
8
8
|
* @param newValue A new value for the Form Element.
|
|
9
9
|
* @returns True if the element's current value and the new value are equal, false otherwise.
|
|
10
10
|
*/
|
|
11
|
-
export declare function areValuesEqual(
|
|
11
|
+
export declare function areValuesEqual(elementValue: defs.Value | undefined, newValue: DateTimeRef | DateRangeRef | undefined | null): boolean;
|
|
12
12
|
/**
|
|
13
13
|
* Checks if a given date is valid or not.
|
|
14
14
|
* @param date The date object to check.
|
|
@@ -96,22 +96,8 @@ declare type Partial = void | boolean | number | string | {
|
|
|
96
96
|
refValueType?: string;
|
|
97
97
|
value?: number;
|
|
98
98
|
};
|
|
99
|
-
export declare function makeProperFormat(value: Partial, format: Partial): defs.DateTimeFormat;
|
|
100
99
|
export declare function makeProperValue(value: number | string | Partial, calendar: Calendar): Date;
|
|
101
100
|
export declare function isInvalidDate(date: Date | null): boolean;
|
|
102
|
-
export declare function hasErrorChanged(
|
|
103
|
-
|
|
104
|
-
* Updates `element.value` with a new `DateTimeRef` using the supplied parameters.
|
|
105
|
-
*
|
|
106
|
-
* Care is taken to ensure we don't replace `element.value` with an identical
|
|
107
|
-
* `DateTimeRef` as this can lead to infinite loops in react components
|
|
108
|
-
* when `element.value` is a dependency of a hook such as `useEffect`.
|
|
109
|
-
* @param element The element to be updated.
|
|
110
|
-
* @param date The new `Date` value to use.
|
|
111
|
-
* @param refValueType The type of value that this represents.
|
|
112
|
-
* @param format The format of the value.
|
|
113
|
-
* @param calendar A calendar to use to get a text representation of the date.
|
|
114
|
-
* @returns True if the value was updated, false otherwise.
|
|
115
|
-
*/
|
|
116
|
-
export declare function updateElementValue(element: defs.Element, date: Date | undefined | null, refValueType: DateTimeType, format: DateTimeFormat, calendar: Calendar): boolean;
|
|
101
|
+
export declare function hasErrorChanged(currentError: defs.Text | undefined, newError: defs.StatusRef | undefined): boolean;
|
|
102
|
+
export declare function getNewElementValue(date: Date | undefined | null, refValueType: DateTimeType, format: DateTimeFormat, calendar: Calendar): DateTimeRef;
|
|
117
103
|
export {};
|
package/forms/dateUtilities.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parse,isAfter}from"date-fns";import{DEFAULT_LOCALE}from"../constants.js";import{parseLocale}from"../definition/ProgramInspector.js";import{Calendar}from"./Calendar.js";import{isStatus}from"./textUtilities.js";import{isDateRangeRef,isDateTimeRef}from"./utils.js";const CURRENT_CENTURY_YEAR_CUTOFF=29,SUPPORTED_DATE_FNS_LOCALES=["cs","da","de","de-AT","en-AU","en-CA","en-GB","en-IN","en-NZ","en-US","en-ZA","fr","fr-CA","fr-CH","it","nb","nl","nl-BE","nn","pt","pt-BR"];let localeDateFormat="",dateFormatSeparator;function areValuesEqual(e,a){
|
|
1
|
+
import{parse,isAfter}from"date-fns";import{DEFAULT_LOCALE}from"../constants.js";import{parseLocale}from"../definition/ProgramInspector.js";import{Calendar}from"./Calendar.js";import{isStatus}from"./textUtilities.js";import{isDateRangeRef,isDateTimeRef}from"./utils.js";const CURRENT_CENTURY_YEAR_CUTOFF=29,SUPPORTED_DATE_FNS_LOCALES=["cs","da","de","de-AT","en-AU","en-CA","en-GB","en-IN","en-NZ","en-US","en-ZA","fr","fr-CA","fr-CH","it","nb","nl","nl-BE","nn","pt","pt-BR"];let localeDateFormat="",dateFormatSeparator;function areValuesEqual(e,a){return void 0===e&&void 0===a||null===e&&null===a||(isDateTimeRef(e)&&a&&isDateTimeRef(a)?e.display===a.display&&e.refValueType===a.refValueType&&e.value===a.value&&areFormatsEqual(e.format,a.format):!!(isDateRangeRef(e)&&a&&isDateRangeRef(a))&&(e.endDate?.valueOf()===a.endDate?.valueOf()&&e.refValueType===a.refValueType&&e.startDate?.valueOf()===a.startDate?.valueOf()))}function areFormatsEqual(e,a){return void 0===e&&void 0===a||("string"==typeof e&&"string"==typeof a?e===a:"object"==typeof e&&"object"==typeof a&&(null===e||null===a?e===a:e.locale===a.locale&&e.timezone===a.timezone))}function isValidDate(e){return e instanceof Date&&!isNaN(e.valueOf())}function tryParseYear(e){if(/^\d+$/.test(e)&&!(4<e.length)){for(2===e.length&&(e=`${CURRENT_CENTURY_YEAR_CUTOFF>=parseInt(e,10)?20:19}${e}`);e.length<4;)e=`0${e}`;return e}}function tryParseMonth(e){if(/^\d+$/.test(e)&&!(2<e.length)){1===e.length&&(e=`0${e}`);var a=parseInt(e,10);if(!(a<1||12<a))return e}}function tryParseDay(e){if(/^\d+$/.test(e)&&!(2<e.length)){1===e.length&&(e=`0${e}`);var a=parseInt(e,10);if(!(a<1||31<a))return e}}function tryParseDateText(e){if(e){const r=(e=e.replace(/\\/g,"\\\\")).match(/(\d+)/g);if(3===r?.length){var e=getLocaleDateFormatSeparator(),a=getLocaleDateFormatTokenPosition("yyyy"),t=getLocaleDateFormatTokenPosition("MM");for(let e=0;e<3;e++){switch(e){case a:r[e]=tryParseYear(r[e]);break;case t:r[e]=tryParseMonth(r[e]);break;default:r[e]=tryParseDay(r[e])}if(void 0===r[e])return}return`${r[0]}${e}${r[1]}${e}${r[2]}`}}}async function getDateFnsLocale(e){const a=[];e=parseLocale(e);if(e){e.territory&&a.push(`${e.language}-${e.territory}`),a.push(e.language);for(const t of a)if(-1!==SUPPORTED_DATE_FNS_LOCALES.indexOf(t)){let e;try{switch(t){case"cs":e=(await import("date-fns/locale/cs")).default;break;case"da":e=(await import("date-fns/locale/da")).default;break;case"de":e=(await import("date-fns/locale/de")).default;break;case"de-AT":e=(await import("date-fns/locale/de-AT")).default;break;case"en-AU":e=(await import("date-fns/locale/en-AU")).default;break;case"en-CA":e=(await import("date-fns/locale/en-CA")).default;break;case"en-GB":e=(await import("date-fns/locale/en-GB")).default;break;case"en-IN":e=(await import("date-fns/locale/en-IN")).default;break;case"en-NZ":e=(await import("date-fns/locale/en-NZ")).default;break;case"en-US":e=(await import("date-fns/locale/en-US")).default;break;case"en-ZA":e=(await import("date-fns/locale/en-ZA")).default;break;case"fr":e=(await import("date-fns/locale/fr")).default;break;case"fr-CA":e=(await import("date-fns/locale/fr-CA")).default;break;case"fr-CH":e=(await import("date-fns/locale/fr-CH")).default;break;case"it":e=(await import("date-fns/locale/it")).default;break;case"nb":e=(await import("date-fns/locale/nb")).default;break;case"nl":e=(await import("date-fns/locale/nl")).default;break;case"nl-BE":e=(await import("date-fns/locale/nl-BE")).default;break;case"nn":e=(await import("date-fns/locale/nn")).default;break;case"pt":e=(await import("date-fns/locale/pt")).default;break;case"pt-BR":e=(await import("date-fns/locale/pt-BR")).default}}catch{continue}if(e?.localize)return e}}}function getLocaleDateFormat(){if(localeDateFormat)return localeDateFormat;const e=new Date(1999,11,31,0,0,0);return localeDateFormat=e.toLocaleDateString(void 0,{year:"numeric",month:"numeric",day:"numeric"}),localeDateFormat=localeDateFormat.replace("1999","yyyy"),localeDateFormat=localeDateFormat.replace("99","yyyy"),localeDateFormat=localeDateFormat.replace("12","MM"),localeDateFormat=localeDateFormat.replace("31","dd"),localeDateFormat}function getLocaleDateFormatSeparator(){var e;return void 0===dateFormatSeparator&&(e=/[^dMy]+/.exec(getLocaleDateFormat()),dateFormatSeparator=e?e[0]:""),dateFormatSeparator}function getLocaleDateFormatTokenPosition(e){const a=getLocaleDateFormat();var t=a.indexOf("yyyy"),r=a.indexOf("MM"),o=a.indexOf("dd");return"yyyy"===e?0===t?0:r<t&&o<t?2:1:"MM"===e?0===r?0:o<r&&t<r?2:1:0===o?0:r<o&&t<o?2:1}const coerceIntoDate=e=>{if(e instanceof Date&&isValidDate(e))return new Date(e.valueOf());if("string"==typeof e)if(/^\d+$/.test(e))e=Number(e);else{var a=tryParseDateText(e);if(a){var t=getLocaleDateFormat(),t=parse(a,t,0);if(isValidDate(t))return t}}if("number"==typeof e){e=new Date(e);if(isValidDate(e))return e}};function convertToDateRangeRef(e){let a,t,r=!1;Array.isArray(e)?(a=coerceIntoDate(e[0]),t=coerceIntoDate(e[1]),r=!0):"object"==typeof e&&(a=coerceIntoDate(e.startDate),t=coerceIntoDate(e.endDate));var o=!!a&&!!t;let n=o&&!isAfter(a,t);return r&&o&&!n&&(e=a,a=t,t=e,n=!0),o&&n?{refValueType:"daterange",startDate:a,endDate:t}:void 0}function __test__setlocaleDateFormatInCache(e){localeDateFormat=e,dateFormatSeparator=void 0}async function loadLocale(e){e=e.deriveLocale();if("inv"!==e&&"en"!==e&&e!==DEFAULT_LOCALE)return getDateFnsLocale(e)}function makeProperValue(e,a){if("object"==typeof e){if(null===e)return;switch(e.refValueType){case"date":case"time":case"datetime":break;default:return}e=e.value}if("number"==typeof e||"string"==typeof e){const t=a.coerceIntoValue(e);if(void 0!==t&&null!==t&&isFinite(t.valueOf()))return t}}function isInvalidDate(e){return e instanceof Date&&isNaN(e.getDate())}function hasErrorChanged(e,a){return(void 0!==e||void 0!==a)&&((null!==e||null!==a)&&(!isStatus(e)||!isStatus(a)||e.status!==a.status))}function getNewElementValue(e,a,t,r){if(null!=e&&isFinite(e.valueOf()))return{refValueType:a,format:t,display:r.format(e,Calendar.fullFormat),value:e.valueOf()}}export{areValuesEqual,isValidDate,tryParseYear,tryParseMonth,tryParseDay,tryParseDateText,getDateFnsLocale,getLocaleDateFormat,getLocaleDateFormatSeparator,getLocaleDateFormatTokenPosition,convertToDateRangeRef,__test__setlocaleDateFormatInCache,loadLocale,makeProperValue,isInvalidDate,hasErrorChanged,getNewElementValue};
|
package/forms/index.d.ts
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { EventArgumentTypes, EventValueTypes } from "./FormComponent";
|
|
3
|
+
import { defs } from "./FormHost";
|
|
4
|
+
import { FormatOptions } from "./numberFormatter";
|
|
2
5
|
export { Orientation, TitleLocation } from "./constants";
|
|
3
6
|
export type { Text } from "./elements/types";
|
|
7
|
+
/**
|
|
8
|
+
* Details about an event to be fired when the value property is updated.
|
|
9
|
+
* If `false`, no event is fired.
|
|
10
|
+
* If `true`, the event is fired with the event object just containing the element's value.
|
|
11
|
+
* If an object containing `"argument"` or `"item" properties, the event is fired and those properties are included in the event object.
|
|
12
|
+
*/
|
|
13
|
+
declare type EventOptions = Partial<Pick<defs.Event, "argument" | "item">> | boolean;
|
|
4
14
|
/** @public */
|
|
5
|
-
export interface FormElementProps<TValue = undefined> extends FormElementSettableProps<TValue> {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
export interface FormElementProps<TValue = undefined> extends FormElementSettableProps<TValue>, Pick<defs.Element, "customType" | "description" | "delay" | "format" | "manualEntry" | "maxLength" | "minLength" | "orientation" | "prompt" | "readOnly" | "require" | "showMinMaxLabels" | "showTickMarks" | "size" | "title" | "tooltip" | "type" | "wrap"> {
|
|
16
|
+
className?: string;
|
|
17
|
+
/** Coerces a number from a value. */
|
|
18
|
+
coerceNumber: (value: string) => number;
|
|
19
|
+
/**
|
|
20
|
+
* Derives the current locale set by the host application (or default if undefined) will be returned.
|
|
21
|
+
*/
|
|
22
|
+
deriveLocale: () => string;
|
|
9
23
|
enabled: boolean;
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
/** Formats a value into a string. */
|
|
25
|
+
formatNumber: (value: number, options?: FormatOptions) => string;
|
|
26
|
+
id: string;
|
|
27
|
+
name: string | undefined;
|
|
14
28
|
/**
|
|
15
29
|
* A callback function to raise an event. The `custom` event accepts any
|
|
16
30
|
* value as the eventValue. Use the Get Form Event Data to access the event
|
|
@@ -19,13 +33,27 @@ export interface FormElementProps<TValue = undefined> extends FormElementSettabl
|
|
|
19
33
|
* is permitted.
|
|
20
34
|
* @param eventValue The value of the event.
|
|
21
35
|
*/
|
|
22
|
-
raiseEvent: (eventName:
|
|
36
|
+
raiseEvent: <K extends keyof EventValueTypes>(eventName: K, eventValue: EventValueTypes[K], argument?: EventArgumentTypes[K], item?: string, cancellationToken?: PromiseLike<void>) => void;
|
|
37
|
+
/** Renders the focus. */
|
|
38
|
+
renderFocus: (target: Node, name?: string) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Renders form text as a string.
|
|
41
|
+
* If `text` is a reference to a language string (e.g. `"@my-language-string"`), it is translated.
|
|
42
|
+
* If `text` is a `MarkdownRef`, it is converted to plain text.
|
|
43
|
+
*/
|
|
44
|
+
renderText: (text: defs.Text | undefined) => string;
|
|
45
|
+
/**
|
|
46
|
+
* Set a property on an item in the element.
|
|
47
|
+
* @param property The name of the property to set.
|
|
48
|
+
* @param value The new value to set.
|
|
49
|
+
*/
|
|
50
|
+
setItemProperty: <K extends keyof FormElementItemSettableProps>(item: string, property: K, value: FormElementItemProps[K]) => void;
|
|
23
51
|
/**
|
|
24
52
|
* Set a property on the element.
|
|
25
53
|
* @param property The name of the property to set.
|
|
26
54
|
* @param value The new value to set.
|
|
27
55
|
*/
|
|
28
|
-
setProperty: <K extends keyof Omit<this, keyof FormElementProps<TValue>> | keyof FormElementSettableProps<TValue>>(property: K, value: this[K]) => void;
|
|
56
|
+
setProperty: <K extends keyof Omit<this, keyof FormElementProps<TValue>> | keyof FormElementSettableProps<TValue>>(property: K, value: this[K], event?: EventOptions) => void;
|
|
29
57
|
/**
|
|
30
58
|
* Sets the `value` property of the element. Equivalent to calling
|
|
31
59
|
* `setProperty("value", value)`.
|
|
@@ -34,13 +62,21 @@ export interface FormElementProps<TValue = undefined> extends FormElementSettabl
|
|
|
34
62
|
*
|
|
35
63
|
* @param value The new value to set.
|
|
36
64
|
*/
|
|
37
|
-
setValue: (value: this["value"]) => void;
|
|
65
|
+
setValue: (value: this["value"], event?: EventOptions) => void;
|
|
66
|
+
/** Translates the supplied value. */
|
|
67
|
+
translateText: (content: defs.Text | undefined) => string | defs.MarkdownRef | undefined;
|
|
38
68
|
}
|
|
39
69
|
/** @public */
|
|
40
|
-
export interface FormElementSettableProps<TValue = undefined> {
|
|
70
|
+
export interface FormElementSettableProps<TValue = undefined> extends Pick<defs.Element, "items" | "checked" | "current" | "error" | "label"> {
|
|
41
71
|
/** The value of the element. */
|
|
42
72
|
value: TValue;
|
|
43
73
|
}
|
|
74
|
+
/** @public */
|
|
75
|
+
export interface FormElementItemProps extends FormElementItemSettableProps, Pick<defs.Item, "default" | "enabled" | "index" | "label" | "styleName" | "tooltip" | "validates" | "value" | "visible"> {
|
|
76
|
+
}
|
|
77
|
+
/** @public */
|
|
78
|
+
export interface FormElementItemSettableProps extends Pick<defs.Item, "checked"> {
|
|
79
|
+
}
|
|
44
80
|
declare type SettablePropsFromProps<TProps extends FormElementProps> = Omit<TProps, keyof FormElementProps> & FormElementSettableProps<TProps["value"]>;
|
|
45
81
|
declare type Unionize<T> = T[keyof T];
|
|
46
82
|
/** @public */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isItemsRef}from"./utils.js";function arrayEqual(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function areValuesEqual(r,e){return r===e||void 0!==r&&void 0!==e&&(!!isItemsRef(r)&&itemArrayEqual(r.items,e.items))}function itemArrayEqual(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}export{arrayEqual,areValuesEqual};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import AutoComplete from"./components/AutoComplete.js";import ButtonBar from"./components/ButtonBar.js";import CheckBox from"./components/CheckBox.js";import CheckGroup from"./components/CheckGroup.js";import Custom from"./components/Custom.js";import DatePicker from"./components/DatePicker.js";import DateRangePicker from"./components/DateRangePicker.js";import DateTimePicker from"./components/DateTimePicker.js";import HorizontalRule from"./components/HorizontalRule.js";import Image from"./components/Image.js";import ListBox from"./components/ListBox.js";import Number from"./components/Number.js";import NumberRangeSlider from"./components/NumberRangeSlider.js";import NumberSlider from"./components/NumberSlider.js";import RadioGroup from"./components/RadioGroup.js";import Text from"./components/Text.js";import TextArea from"./components/TextArea.js";import TextBox from"./components/TextBox.js";import TimePicker from"./components/TimePicker.js";import{FormElementTypes}from"./constants.js";const BuiltInFormElements={[FormElementTypes.AUTOCOMPLETE]:{id:FormElementTypes.AUTOCOMPLETE,component:AutoComplete},[FormElementTypes.BUTTONBAR]:{id:FormElementTypes.BUTTONBAR,component:ButtonBar},[FormElementTypes.CHECKBOX]:{id:FormElementTypes.CHECKBOX,component:CheckBox},[FormElementTypes.CHECKGROUP]:{id:FormElementTypes.CHECKGROUP,component:CheckGroup},[FormElementTypes.CUSTOM]:{id:FormElementTypes.CUSTOM,component:Custom},[FormElementTypes.DATEPICKER]:{id:FormElementTypes.DATEPICKER,component:DatePicker},[FormElementTypes.DATERANGEPICKER]:{id:FormElementTypes.DATERANGEPICKER,component:DateRangePicker},[FormElementTypes.DATETIMEPICKER]:{id:FormElementTypes.DATETIMEPICKER,component:DateTimePicker},[FormElementTypes.HORIZONTALRULE]:{id:FormElementTypes.HORIZONTALRULE,component:HorizontalRule},[FormElementTypes.IMAGE]:{id:FormElementTypes.IMAGE,component:Image},[FormElementTypes.LISTBOX]:{id:FormElementTypes.LISTBOX,component:ListBox},[FormElementTypes.NUMBER]:{id:FormElementTypes.NUMBER,component:Number},[FormElementTypes.NUMBERRANGESLIDER]:{id:FormElementTypes.NUMBERRANGESLIDER,component:NumberRangeSlider},[FormElementTypes.NUMBERSLIDER]:{id:FormElementTypes.NUMBERSLIDER,component:NumberSlider},[FormElementTypes.PASSWORDBOX]:{id:FormElementTypes.PASSWORDBOX,component:TextBox},[FormElementTypes.RADIOGROUP]:{id:FormElementTypes.RADIOGROUP,component:RadioGroup},[FormElementTypes.TEXT]:{id:FormElementTypes.TEXT,component:Text},[FormElementTypes.TEXTAREA]:{id:FormElementTypes.TEXTAREA,component:TextArea},[FormElementTypes.TEXTBOX]:{id:FormElementTypes.TEXTBOX,component:TextBox},[FormElementTypes.TIMEPICKER]:{id:FormElementTypes.TIMEPICKER,component:TimePicker}};export{BuiltInFormElements};
|
|
@@ -31,6 +31,16 @@ export declare const defaultNumberFormatConfiguration: NumberFormatConfiguration
|
|
|
31
31
|
* @returns A {@link defs.NumberConstraints} containing values that can be safely used in a component.
|
|
32
32
|
*/
|
|
33
33
|
export declare function getNumberConstraints(numberFormat: defs.NumberFormat | undefined, partialNumberFormatConfiguration?: Partial<NumberFormatConfiguration>): defs.NumberConstraints;
|
|
34
|
+
/**
|
|
35
|
+
* Counts the number of decimal places in the specified custom format string and returns the result.
|
|
36
|
+
* The supplied value is treated as one of Microsoft's [Custom numeric format strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings)
|
|
37
|
+
*
|
|
38
|
+
* There are lots of unusual ways you can combine the supported characters, but for simplicity, we support the most common use case
|
|
39
|
+
* which is using `#` and numeric characters as placeholders.
|
|
40
|
+
* @param customFormat The custom format to be inspected.
|
|
41
|
+
* @returns The number of decimal places in `customFormat`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function countDecimalsInCustomFormat(customFormat: string | undefined): number;
|
|
34
44
|
/**
|
|
35
45
|
* Counts the number of decimal places in the specified number and returns the result.
|
|
36
46
|
* This uses Intl.NumberFormat rather than number.toString() to ensure that large numbers don't get converted to an exponential format.
|
|
@@ -40,7 +50,7 @@ export declare function getNumberConstraints(numberFormat: defs.NumberFormat | u
|
|
|
40
50
|
* @param value The value to be inspected.
|
|
41
51
|
* @returns The number of decimal places in `value`.
|
|
42
52
|
*/
|
|
43
|
-
export declare function
|
|
53
|
+
export declare function countDecimalsInValue(value: number): number;
|
|
44
54
|
/**
|
|
45
55
|
* Determines how many decimal places should be used in presenting values to the user.
|
|
46
56
|
*
|
|
@@ -83,11 +93,11 @@ export declare function enforceConstraints(value: number, numberConstraints: def
|
|
|
83
93
|
export declare function getNumberSliderValues(values: defs.Value | undefined, numberConstraints: defs.NumberConstraints, singleValue?: boolean): number[];
|
|
84
94
|
/**
|
|
85
95
|
* Checks if a form element's value is equal to the supplied value.
|
|
86
|
-
* @param
|
|
96
|
+
* @param elementValue The current value of a Form Element.
|
|
87
97
|
* @param newValue A new value for the Form Element.
|
|
88
98
|
* @returns True if the element's current value and the new value are equal, false otherwise.
|
|
89
99
|
*/
|
|
90
|
-
export declare function areValuesEqual(
|
|
100
|
+
export declare function areValuesEqual(elementValue: defs.Value | undefined, newValue: defs.NumberRef | undefined): boolean;
|
|
91
101
|
/**
|
|
92
102
|
* A mark on the slider. This is a copy of the interface by the same name in @mui/base/useSlider.
|
|
93
103
|
* We use string rather than React.Node so that we can share this between runtime and designer without discrepancies between the typings.
|
|
@@ -111,3 +121,30 @@ export interface Mark {
|
|
|
111
121
|
* @returns The value for the marks property for the slider.
|
|
112
122
|
*/
|
|
113
123
|
export declare function getMarks(maximum: number, minimum: number, step: number, formatOptions: FormatOptions, showMinMaxLabels: boolean, showTickMarks: boolean): boolean | Mark[];
|
|
124
|
+
/**
|
|
125
|
+
* Rounds a value to the specified number of decimals in a way that should avoid rounding errors.
|
|
126
|
+
* This is based on an example found here:
|
|
127
|
+
* https://medium.com/swlh/how-to-round-to-a-certain-number-of-decimal-places-in-javascript-ed74c471c1b8
|
|
128
|
+
* @param value The value to be rounded.
|
|
129
|
+
* @param decimalPlaces The number of decimal places to round to.
|
|
130
|
+
* @returns An accurately rounded value.
|
|
131
|
+
*/
|
|
132
|
+
export declare function roundAccurately(value: number, decimalPlaces: number): number;
|
|
133
|
+
/**
|
|
134
|
+
* Details about a symbol that is used to represent currency or percentage.
|
|
135
|
+
*/
|
|
136
|
+
declare type SymbolInfo = {
|
|
137
|
+
/**
|
|
138
|
+
* Whether the symbol should appear at the start (before the value) or end (after it).
|
|
139
|
+
*/
|
|
140
|
+
position: "start" | "end";
|
|
141
|
+
/**
|
|
142
|
+
* The symbol to displayed.
|
|
143
|
+
*/
|
|
144
|
+
symbol: string;
|
|
145
|
+
symbolCount?: number;
|
|
146
|
+
integerCount?: number;
|
|
147
|
+
};
|
|
148
|
+
export declare function getCurrencySymbolInfo(locale: string, currency: string): SymbolInfo;
|
|
149
|
+
export declare function getPercentSymbolInfo(locale: string): SymbolInfo;
|
|
150
|
+
export {};
|
package/forms/numberUtilities.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{format}from"./numberFormatter.js";import{isNumberRef,isNumeric}from"./utils.js";const defaultNumberFormatConfiguration={lowerBound:{default:0},precision:{default:3,minimum:-20,maximum:20},step:{default:1},upperBound:{default:100}};function getNumberConstraints(e,r){var{lowerBound:
|
|
1
|
+
import{format}from"./numberFormatter.js";import{isNumberRef,isNumeric}from"./utils.js";const defaultNumberFormatConfiguration={lowerBound:{default:0},precision:{default:3,minimum:-20,maximum:20},step:{default:1},upperBound:{default:100}};function getNumberConstraints(e,r){var{lowerBound:t,upperBound:n}=e=e||{};let{precision:i,step:u}=e;var o,r=getNumberFormatConfiguration(r);let a=isNumeric(t)?t:r.lowerBound.default,m=isNumeric(n)?n:r.upperBound.default;return void 0!==m&&void 0!==a&&m<=a&&(a=r.lowerBound.default,m=r.upperBound.default),i="number"!=typeof i||Number.isNaN(i)?r.precision.default:i,void 0!==r.precision.minimum&&(i=Math.max(i,r.precision.minimum)),void 0!==r.precision.maximum&&(i=Math.min(i,r.precision.maximum)),i<0?(o=Math.pow(10,-1*i),void 0!==u&&u%o==0||(u=o)):(u=isNumeric(u)&&0<u?u:r.step.default,void 0!==m&&void 0!==a&&(u=Math.min(u,m-a),o=(m-a)/u,Number.isInteger(o)||(r=countDecimalsInValue(u),m=roundAccurately(a+Math.floor(o)*u,r)))),{maximum:m,minimum:a,step:u}}const intlNumberFormat=new Intl.NumberFormat("en-US",{minimumFractionDigits:0,maximumFractionDigits:20,useGrouping:!1}),customDecimals=/\.([#\d]+)/;function countDecimalsInCustomFormat(e){if(e){e=customDecimals.exec(e);if(e)return e[1].length}return 0}function countDecimalsInValue(e){if(Number.isInteger(e))return 0;const r=intlNumberFormat.format(e);e=r.indexOf(".");return-1===e?0:r.length-e-1}function sanitizePrecision(e,r,t){t=getNumberFormatConfiguration(t);void 0===e&&(e=t.precision.default);r=countDecimalsInValue(r);return Math.max(r,e)}function getNumberFormatConfiguration(e){const r={lowerBound:{...defaultNumberFormatConfiguration.lowerBound},precision:{...defaultNumberFormatConfiguration.precision},step:{...defaultNumberFormatConfiguration.step},upperBound:{...defaultNumberFormatConfiguration.upperBound}};if(void 0!==e)for(const t in e)r[t]=Object.assign(r[t],e[t]);return r}function enforceConstraints(e,r){var t,n,{maximum:i,minimum:u,step:r}=r;return void 0!==u?(t=(e-u)/r,Number.isInteger(t)||(n=countDecimalsInValue(r),e=roundAccurately(u+Math.round(t)*r,n))):void 0!==i&&(t=(i-e)/r,Number.isInteger(t)||(n=countDecimalsInValue(r),e=roundAccurately(i-Math.round(t)*r,n))),void 0!==u&&e<u&&(e=u),e=void 0!==i&&i<e?i:e}function getNumberSliderValues(e,r,t=!1){let n=[],i=NaN,u=NaN;if("string"==typeof e){const a=e.split("\n").filter(e=>""!==e);e=a.map(e=>(e=>(e=(e||"").trim(),isNumeric(e)?parseFloat(e):NaN))(e))}else"number"==typeof e?i=e:"number"==typeof e?.numeric&&(i=e.numeric);if(Array.isArray(e)&&1<=e.length&&(i=e[0],u=e[1]),void 0===i||isNaN(i)||(i=enforceConstraints(i,r),void 0===u||isNaN(u)?t&&n.push(i):(u=enforceConstraints(u,r),n.push(i,u))),n=n.sort((e,r)=>e-r),n.length===(t?1:2))return n;var o=r.maximum,e=r.minimum;return t?[enforceConstraints((e+o)/2,r)]:[e,o]}function areValuesEqual(e,r){if(void 0===e&&void 0===r||null===e&&null===r)return!0;var t,n;return!(!isNumberRef(e)||!isNumberRef(r))&&(e.display===r.display&&e.refValueType===r.refValueType&&e.numeric===r.numeric&&(t=e.format,n=r.format,void 0===t&&void 0===n||void 0!==t&&void 0!==n&&(t.currency===n.currency&&t.customDisplayFormat===n.customDisplayFormat&&t.displayFormat===n.displayFormat&&t.lowerBound===n.lowerBound&&t.precision===n.precision&&t.step===n.step&&t.upperBound===n.upperBound)))}function getMarks(r,t,n,e,i,u){if(i&&u){const o=[{value:t,label:format(e,t)}];for(let e=t+n;e<r;e+=n)o.push({value:e});return o.push({value:r,label:format(e,r)}),o}return i&&!u?[{value:t,label:format(e,t)},{value:r,label:format(e,r)}]:u}function roundAccurately(e,r){return Number(Math.round(Number(e+`e${r}`))+`e-${r}`)}function getCurrencySymbolInfo(e,r){const t=new Intl.NumberFormat(e,{style:"currency",currency:r,minimumFractionDigits:0,maximumFractionDigits:0,useGrouping:!1}),n=t.formatToParts(0);e=n.filter(e=>"currency"===e.type)[0],r=n.filter(e=>"integer"===e.type)[0];if(e&&r)return{position:n.indexOf(e)<n.indexOf(r)?"start":"end",symbol:e.value}}function getPercentSymbolInfo(e){const r=new Intl.NumberFormat(e,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:0,useGrouping:!1}),t=r.formatToParts(0);var n=t.filter(e=>"percentSign"===e.type)[0],e=t.filter(e=>"integer"===e.type)[0];if(n&&e)return{position:t.indexOf(n)<t.indexOf(e)?"start":"end",symbol:n.value}}export{defaultNumberFormatConfiguration,getNumberConstraints,countDecimalsInCustomFormat,countDecimalsInValue,sanitizePrecision,getNumberFormatConfiguration,enforceConstraints,getNumberSliderValues,areValuesEqual,getMarks,roundAccurately,getCurrencySymbolInfo,getPercentSymbolInfo};
|
package/forms/presenter.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createElement}from"react";import*as React from"react";import{unmountComponentAtNode,render as reactRender}from"react-dom";import{FormComponent}from"./FormComponent.js";import{FormComponentTypes,FormElementTypes}from"./constants.js";import{renderComponent,renderElement,renderNone as renderers_renderNone}from"./renderers.js";import{getElementProps}from"./utils.js";function refresh(e){e instanceof FormComponent&&e.forceUpdate()}function refreshForm(e,r){reactRender(React.createElement(FormComponent,{host:e,type:"form"}),r)}function releaseForm(e){unmountComponentAtNode(e)}function render(e){if(e instanceof FormComponent){if(e.props.type!==FormComponentTypes.ELEMENT)return renderComponent(e);var r=e.prepare();if(null==r)return;var n=r.type;return"string"!=typeof n?void 0:
|
|
1
|
+
import{createElement}from"react";import*as React from"react";import{unmountComponentAtNode,render as reactRender}from"react-dom";import{FormComponent}from"./FormComponent.js";import Custom from"./components/Custom.js";import{FormComponentTypes,FormElementTypes}from"./constants.js";import{renderComponent,renderElement,renderNone as renderers_renderNone}from"./renderers.js";import{getElementProps}from"./utils.js";function refresh(e){e instanceof FormComponent&&e.forceUpdate()}function refreshForm(e,r){reactRender(React.createElement(FormComponent,{host:e,type:"form"}),r)}function releaseForm(e){unmountComponentAtNode(e)}function render(e){if(e instanceof FormComponent){if(e.props.type!==FormComponentTypes.ELEMENT)return renderComponent(e);var r=e.prepare();if(null==r)return;var n=r.type;return"string"!=typeof n?void 0:e.elementRegistration?createElement(e.elementRegistration.component,getElementProps(e,r)):n===FormElementTypes.CUSTOM?createElement(Custom,getElementProps(e,r)):renderElement(n,e,r)}}function renderNone(e){if(e instanceof FormComponent)return renderers_renderNone(e)}export{refresh,refreshForm,releaseForm,render,renderNone};
|
package/forms/renderers.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import*as React from"react";import AccordionGroup from"./components/AccordionGroup.js";import
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import*as React from"react";import AccordionGroup from"./components/AccordionGroup.js";import DropDownList from"./components/DropDownList.js";import FilePicker from"./components/FilePicker.js";import Form,{formClasses}from"./components/Form.js";import GeometryPicker from"./components/GeometryPicker.js";import ItemPicker from"./components/ItemPicker.js";import Scanner from"./components/Scanner.js";import Section from"./components/Section.js";import Signature from"./components/Signature.js";import{FormComponentTypes,FormElementTypes}from"./constants.js";function renderComponent(e){switch(e.props.type){case FormComponentTypes.FORM:return React.createElement(Form,{component:e});case FormComponentTypes.HEADER:return renderBox(e.props.children,formClasses.header);case FormComponentTypes.MAIN:return renderBox(e.props.children,formClasses.main);case FormComponentTypes.FOOTER:return renderBox(e.props.children,formClasses.footer);case FormComponentTypes.BODY:return renderBox(e.props.children,formClasses.body);case FormComponentTypes.ROW:return renderBox(e.props.children,formClasses.row);case FormComponentTypes.SECTION:return renderElement(FormElementTypes.SECTION,e,e.prepare());case FormComponentTypes.ACCORDIONGROUP:return React.createElement(AccordionGroup,{component:e});default:return null}}function renderNone(e){return renderBox([`--- Unsupported Form Element (name=${e.props.name}) ---`],"None")}function renderBox(e,r){return React.createElement(Box,{className:r},e)}function renderElement(e,r,n){switch(e){case FormElementTypes.DROPDOWNLIST:return React.createElement(DropDownList,{component:r,element:n});case FormElementTypes.FILEPICKER:return React.createElement(FilePicker,{component:r,element:n});case FormElementTypes.GEOMETRYPICKER:return React.createElement(GeometryPicker,{component:r,element:n});case FormElementTypes.ITEMPICKER:return React.createElement(ItemPicker,{component:r,element:n});case FormElementTypes.SCANNER:return React.createElement(Scanner,{component:r,element:n});case FormElementTypes.SECTION:return React.createElement(Section,{component:r,element:n});case FormElementTypes.SIGNATURE:return React.createElement(Signature,{component:r,element:n});default:return null}}export{renderComponent,renderNone,renderElement};
|
package/forms/utils.d.ts
CHANGED
|
@@ -46,25 +46,25 @@ export { text };
|
|
|
46
46
|
export declare function makeId(): string;
|
|
47
47
|
/**
|
|
48
48
|
* Performs key/item sorting.
|
|
49
|
-
* @product This is intended for internal use only within VertiGIS Studio products.
|
|
50
49
|
*/
|
|
51
|
-
export declare function sort<T>(items: T | undefined, predicate?: (item: T[keyof T], index: number) => number | undefined): T;
|
|
52
50
|
/**
|
|
53
|
-
* This function
|
|
51
|
+
* This function attempts to sort and filter a collection of items.
|
|
52
|
+
*
|
|
53
|
+
* The sorted is limited as the result is an object, so the order of the keys is not entirely configurable.
|
|
54
54
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
55
|
+
* The filtering is achieved via the predicate. Any item that causes a non-numeric return value from the predicate
|
|
56
|
+
* is dropped from the resulting items.
|
|
57
|
+
*
|
|
58
|
+
* @param items The items to be sorted and filtered.
|
|
59
|
+
* @param predicate The function to call for each item to determine its new index. If this returns something other than a number, the item is excluded from the result.
|
|
60
|
+
* @returns A sorted and filtered version of the items.
|
|
59
61
|
* @product This is intended for internal use only within VertiGIS Studio products.
|
|
60
|
-
* @param element The element whose items are to be sorted.
|
|
61
|
-
* @returns An array of visible items, sorted by index.
|
|
62
62
|
*/
|
|
63
|
-
export declare function
|
|
63
|
+
export declare function sortAndFilter<T>(items: T | undefined, predicate?: (item: T[keyof T], index: number) => number | undefined): T;
|
|
64
64
|
/**
|
|
65
|
-
* Details returned by `
|
|
65
|
+
* Details returned by `inspectItems()`.
|
|
66
66
|
*/
|
|
67
|
-
declare type
|
|
67
|
+
declare type InspectItemsResult = {
|
|
68
68
|
/** The index of the now-selected item, based on the new value of `items`. */
|
|
69
69
|
current: string | undefined;
|
|
70
70
|
/** The sorted and filtered items. */
|
|
@@ -75,17 +75,31 @@ declare type sortAndFilterItemsResult = {
|
|
|
75
75
|
value: defs.Value | undefined;
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
78
|
-
* This function
|
|
79
|
-
*
|
|
80
|
-
*
|
|
78
|
+
* This function interates through the items of the supplied element in preparation for use.
|
|
79
|
+
*
|
|
80
|
+
* It does the following:
|
|
81
81
|
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
82
|
+
* 1. Provides a new set of items.
|
|
83
|
+
* 1. They are sorted and filters to exclude any where `visible` is `false`.
|
|
84
|
+
* 2. Unlike the other values returned, this one should not be updated on the element.
|
|
85
|
+
* This is because we want to be able to change an invisible item back to visible in future,
|
|
86
|
+
* and they are omitted from the returned items.
|
|
87
|
+
* 2. Provides a new value for `element.current`\
|
|
88
|
+
* **IMPORTANT: This should be ignored when using a `defs.ItemsRef` as the value.**
|
|
89
|
+
* 1. It must refer to a visible item.
|
|
90
|
+
* 2. If absent, items' values are compared with `element.value` to find a match. If found, that is the new `current`.
|
|
91
|
+
* 3. Provides a new value for `element.label`.\
|
|
92
|
+
* **IMPORTANT: This should be ignored when using a `defs.ItemsRef` as the value.**
|
|
93
|
+
* 1. This is the label of the item specified by `current`.
|
|
94
|
+
* 4. Provides a new value for `element.value`.\
|
|
95
|
+
* **IMPORTANT: This should be ignored when using a `defs.ItemsRef` as the value.**
|
|
96
|
+
* 1. This is the value of the item specified by `current`.
|
|
97
|
+
* @param current The id of the current item, equivalent to `element.current`.
|
|
98
|
+
* @param items The items, equivalent to `element.items`.
|
|
99
|
+
* @param value The current value, equivalent to `element.value`.
|
|
100
|
+
* @returns A sorted and filtered set if items, along with some other properties that can be updated on `element`.
|
|
87
101
|
*/
|
|
88
|
-
export declare function
|
|
102
|
+
export declare function inspectItems(current: string | undefined, items: Lookup<defs.Item> | undefined, value: defs.Value | undefined): InspectItemsResult;
|
|
89
103
|
/** @product This is intended for internal use only within VertiGIS Studio products. */
|
|
90
104
|
export declare function makeSafeClassName(elementName: string | undefined): string;
|
|
91
105
|
/** @public */
|
package/forms/utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as text from"./textUtilities.js";const DEFAULT_THROTTLE_DELAY=100;let next=0,seed=(new Date).valueOf();const guid="5DDC9A38-AAAB-44C1-AD87-415160F43D75";function makeId(){return 2147483648<=next&&(seed=(new Date).valueOf(),next=0),`${guid}:${seed}:${next++}`}function indexOf(e,t){if(null!=e){e=e.index;return"number"==typeof e?e:t}}function compareIndex(e,t){return compareNumber(e.index,t.index)}function compareNumber(e,t){return e<t?-1:t<e?1:0}function
|
|
1
|
+
import*as text from"./textUtilities.js";const DEFAULT_THROTTLE_DELAY=100;let next=0,seed=(new Date).valueOf();const guid="5DDC9A38-AAAB-44C1-AD87-415160F43D75";function makeId(){return 2147483648<=next&&(seed=(new Date).valueOf(),next=0),`${guid}:${seed}:${next++}`}function indexOf(e,t){if(null!=e){e=e.index;return"number"==typeof e?e:t}}function compareIndex(e,t){return compareNumber(e.index,t.index)}function compareNumber(e,t){return e<t?-1:t<e?1:0}function sortAndFilter(e,t){void 0===t&&(t=indexOf);const n={};if("object"!=typeof e||null===e)return n;let r=0;const i=[];for(const o in e){var s=e[o],a=t(s,r++);"number"==typeof a&&i.push({key:o,index:a,item:s})}for(const u of i.sort(compareIndex))n[u.key]=u.item;return n}function inspectItems(e,t,n){let r;var i=sortAndFilter(t,function(e,t){if(null!=e&&!1!==e.visible){e=e.index;return"number"==typeof e?e:t}});if(void 0===(e=null==e||void 0===i[e]?void 0:e)&&null!=n)for(const s in i){if(i[s].value===n){e=s;break}e=void 0}return n=void 0!==e?(r=i[e].label,i[e].value):r=void 0,{current:e,items:i,label:r,value:n}}function stripClassName(e,t){return e.className.split(" ").filter(e=>0<e.length&&e!==t).join(" ")}function makeSafeClassName(e){return`gcx-forms-${e?.replace(/[\W]/g,"")||"element"}`}let idSuffix=0;function makeUniqueId(e){return`${makeSafeClassName(e)}-${++idSuffix}`}function addClass(e,t){void 0!==e.classList?e.classList.add(t):e.className=stripClassName(e,t)+" "+t}function removeClass(e,t){void 0!==e.classList?e.classList.remove(t):e.className=stripClassName(e,t)}function setClass(e,t,n){(n?addClass:removeClass)(e,t)}function isObjectType(e,t){return"object"==typeof e&&null!==e&&(!Array.isArray(e)&&e.refValueType===t)}function isBoolean(e){return"boolean"==typeof e}function isNumber(e){return"number"==typeof e}function isString(e){return"string"==typeof e}function isDataRef(e){return isObjectType(e,"data")}function isDateRangeRef(e){return isObjectType(e,"daterange")}function isDateTimeRef(e){return isObjectType(e,"date")||isObjectType(e,"time")||isObjectType(e,"datetime")}function isFilesRef(e){return isObjectType(e,"files")}function isScanRef(e){return isObjectType(e,"scan")}function isGeometryRef(e){return isObjectType(e,"geometry")}function isItemsRef(e){return isObjectType(e,"items")}function isNumberRef(e){return isObjectType(e,"number")}function sanitizeGeometryRef(e){if(isGeometryRef(e)){var t=e.geometry;if(Array.isArray(t)&&0<t.length)switch(e.format){case"point":case"polygon":case"polyline":case"polygon-freehand":case"polyline-freehand":case"extent":case"line":return e}}}function createGeometryRef(e){return{refValueType:"geometry",format:e,geometry:[]}}function throttle(i,s=DEFAULT_THROTTLE_DELAY){let a,o;return function(){const e=this,t=arguments;function n(){o=void 0,a=Date.now(),i.apply(e,t)}var r=Date.now();a&&r<a+s?(clearTimeout(o),o=setTimeout(n,s)):n()}}function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}const HostMap=new WeakMap;function getElementProps(e,t){var{enabled:n,id:r,raiseEvent:i,setItemProperty:s,setProperty:a,setValue:o}=e;const u=e.props["host"];let c=HostMap.get(u);c||(c={coerceNumber:u.coerceNumber.bind(u),deriveLocale:u.deriveLocale.bind(u),formatNumber:u.formatNumber.bind(u),renderFocus:u.renderFocus.bind(u),renderText:u.renderText.bind(u),translateText:u.translateText.bind(u)},HostMap.set(u,c));var{format:f,manualEntry:l,showMinMaxLabels:m,showTickMarks:d,size:p,type:y,value:b,wrap:T}=t;return{...t,enabled:!!n,id:r,raiseEvent:i,setItemProperty:s,setProperty:a,setValue:o,format:f,manualEntry:l,showMinMaxLabels:m,showTickMarks:d,size:p,type:y,value:b,wrap:T,coerceNumber:c.coerceNumber,deriveLocale:c.deriveLocale,formatNumber:c.formatNumber,renderFocus:c.renderFocus,renderText:c.renderText,translateText:c.translateText,element:t,name:e.props.name,component:e}}function getItemId(e,t){if(e)for(const n in t)if(t[n]===e)return n}export{text,makeId,sortAndFilter,inspectItems,makeSafeClassName,makeUniqueId,addClass,removeClass,setClass,isBoolean,isNumber,isString,isDataRef,isDateRangeRef,isDateTimeRef,isFilesRef,isScanRef,isGeometryRef,isItemsRef,isNumberRef,sanitizeGeometryRef,createGeometryRef,throttle,isNumeric,getElementProps,getItemId};
|
package/libs/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "5.
|
|
1
|
+
export declare const VERSION = "5.36.0+40";
|
package/libs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const VERSION="5.
|
|
1
|
+
const VERSION="5.36.0+40";export{VERSION};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertigis/workflow",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.36.0",
|
|
4
4
|
"author": "VertiGIS",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@zxing/library": "^0.20.0",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@types/react": "^17.0.53",
|
|
20
20
|
"@types/react-dom": "^17.0.18",
|
|
21
21
|
"@vertigis-internal/licensing": "^5.0.102865",
|
|
22
|
-
"@vertigis/react-ui": "11.32.
|
|
22
|
+
"@vertigis/react-ui": "11.32.2",
|
|
23
23
|
"cross-env": "7.0.3",
|
|
24
24
|
"jest": "29.3.1",
|
|
25
25
|
"jest-environment-jsdom": "^29.3.1",
|