@vertigis/workflow 5.48.2 → 5.50.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/Collections.d.ts +27 -27
- package/Collections.js +1 -1
- package/EnumUtils.d.ts +5 -5
- package/EnumUtils.js +1 -1
- package/Errors.d.ts +27 -27
- package/Hooks.d.ts +2 -2
- package/IActivityHandler.d.ts +14 -14
- package/LanguageStringUtils.js +1 -1
- package/ProgramInspectorFacility.d.ts +1 -1
- package/ProgramInspectorFacility.js +1 -1
- package/Task.d.ts +3 -3
- package/Task.js +1 -1
- package/TemplateUtils.d.ts +2 -2
- package/Validation.d.ts +10 -1
- package/Validation.js +1 -1
- package/activities/app/GetApplicationData.d.ts +1 -1
- package/activities/app/GetApplicationData.js +1 -1
- package/activities/app/RemoveApplicationData.d.ts +1 -1
- package/activities/app/RemoveApplicationData.js +1 -1
- package/activities/app/SetApplicationData.d.ts +1 -1
- package/activities/app/SetApplicationData.js +1 -1
- package/activities/arcgis/AddFeatures.d.ts +7 -4
- package/activities/arcgis/AddFeatures.js +1 -1
- package/activities/arcgis/AreaEngineTask.d.ts +1 -1
- package/activities/arcgis/AreaEngineTask.js +1 -1
- package/activities/arcgis/BufferEngineTask.d.ts +1 -1
- package/activities/arcgis/BufferEngineTask.js +1 -1
- package/activities/arcgis/CastGeometry.d.ts +4 -4
- package/activities/arcgis/CompareGeometries.d.ts +1 -1
- package/activities/arcgis/CompareGeometries.js +1 -1
- package/activities/arcgis/DeleteFeatures.d.ts +7 -3
- package/activities/arcgis/DeleteFeatures.js +1 -1
- package/activities/arcgis/DifferenceEngineTask.d.ts +1 -1
- package/activities/arcgis/DifferenceEngineTask.js +1 -1
- package/activities/arcgis/FlipEngineTask.d.ts +1 -1
- package/activities/arcgis/FlipEngineTask.js +1 -1
- package/activities/arcgis/GenerateArcGisToken.d.ts +2 -2
- package/activities/arcgis/GeoprocessingAsync.d.ts +2 -2
- package/activities/arcgis/GetAttributeValue.d.ts +1 -0
- package/activities/arcgis/GetAttributeValues.d.ts +1 -0
- package/activities/arcgis/GetCurrentPosition.d.ts +28 -28
- package/activities/arcgis/GetFeatureGeometries.d.ts +2 -2
- package/activities/arcgis/GetFeatureSetExtent.d.ts +2 -2
- package/activities/arcgis/GetFormElementItemsFromFeatures.d.ts +2 -2
- package/activities/arcgis/GetFormElementItemsFromFeatures.js +1 -1
- package/activities/arcgis/GetGeometryExtent.d.ts +2 -2
- package/activities/arcgis/LengthEngineTask.d.ts +1 -1
- package/activities/arcgis/LengthEngineTask.js +1 -1
- package/activities/arcgis/MapProvider.d.ts +92 -92
- package/activities/arcgis/MapProvider.js +1 -1
- package/activities/arcgis/NearestCoordinateEngineTask.d.ts +6 -6
- package/activities/arcgis/NearestVertexEngineTask.d.ts +6 -6
- package/activities/arcgis/NearestVerticesEngineTask.d.ts +6 -6
- package/activities/arcgis/ProjectServiceTask.js +1 -1
- package/activities/arcgis/ResetLayerDefinitionExpression.d.ts +2 -2
- package/activities/arcgis/RunPrint.d.ts +2 -2
- package/activities/arcgis/RunPrint.js +1 -1
- package/activities/arcgis/RunReport.js +1 -1
- package/activities/arcgis/RunWorkflow.d.ts +4 -4
- package/activities/arcgis/RunWorkflow.js +1 -1
- package/activities/arcgis/SetImageryLayerOptions.d.ts +2 -2
- package/activities/arcgis/SetLayerDefinitionExpression.d.ts +2 -2
- package/activities/arcgis/SetLayerProperty.d.ts +2 -2
- package/activities/arcgis/SetLayerVisibility.d.ts +2 -2
- package/activities/arcgis/SetViewExtent.d.ts +4 -4
- package/activities/arcgis/SetViewpoint.d.ts +2 -2
- package/activities/arcgis/TypeChecking.d.ts +3 -3
- package/activities/arcgis/UpdateFeatures.d.ts +6 -3
- package/activities/arcgis/UpdateFeatures.js +1 -1
- package/activities/arcgis/libs/arcGisRestApi.d.ts +4 -4
- package/activities/arcgis/libs/shared.d.ts +9 -0
- package/activities/arcgis/libs/shared.js +1 -0
- package/activities/arcgis/printing.d.ts +14 -14
- package/activities/arcgis/runUtils.d.ts +2 -2
- package/activities/arcgis/runUtils.js +1 -1
- package/activities/arcgis/shared.d.ts +9 -2
- package/activities/arcgis/shared.js +1 -1
- package/activities/core/CalculateDate.d.ts +1 -1
- package/activities/core/CalculateDate.js +1 -1
- package/activities/core/ChannelProvider.d.ts +42 -42
- package/activities/core/ChannelProvider.js +1 -1
- package/activities/core/ForEach.d.ts +4 -4
- package/activities/core/FormatDate.d.ts +21 -21
- package/activities/core/FormatDate.js +1 -1
- package/activities/core/GetFirstItem.d.ts +1 -0
- package/activities/core/GetItemAtIndex.d.ts +1 -0
- package/activities/core/GetLastItem.d.ts +1 -0
- package/activities/core/GetWorkflowInputs.d.ts +6 -2
- package/activities/core/Log.d.ts +1 -1
- package/activities/core/Log.js +1 -1
- package/activities/core/Loop.d.ts +2 -2
- package/activities/core/ParseJson.d.ts +1 -0
- package/activities/core/WebRequest.d.ts +2 -2
- package/activities/csv/ParseCsv.d.ts +1 -0
- package/activities/essentials/GetEssentialsSite.d.ts +2 -2
- package/activities/essentials/RunEssentialsWorkflow.d.ts +2 -2
- package/activities/essentials/RunEssentialsWorkflow.js +1 -1
- package/activities/forms/DisplayForm.d.ts +6 -6
- package/activities/forms/DisplayForm.js +1 -1
- package/activities/forms/FormActor.d.ts +22 -22
- package/activities/forms/FormRenderer.d.ts +2 -2
- package/activities/forms/FormRenderer.js +1 -1
- package/activities/forms/GetFormElementItemsFromCollection.d.ts +7 -7
- package/activities/forms/GetFormElementItemsFromCollection.js +1 -1
- package/activities/forms/SetFormElementProperty.d.ts +1 -1
- package/activities/math/Max.d.ts +1 -1
- package/activities/math/Max.js +1 -1
- package/activities/math/Min.d.ts +1 -1
- package/activities/math/Min.js +1 -1
- package/activities/server/RunApplication.d.ts +2 -2
- package/activities/server/RunPython.d.ts +4 -4
- package/activities/ui/DialogContent.d.ts +6 -6
- package/activities/ui/DialogProvider.d.ts +5 -5
- package/activities/ui/DialogProvider.js +1 -1
- package/definition/ActivityInput.d.ts +6 -6
- package/definition/ProgramInspector.d.ts +118 -118
- package/definition/ProgramInspector.js +1 -1
- package/definition/Reference.d.ts +2 -2
- package/definition/Resource.d.ts +15 -15
- package/definition/Transition.d.ts +4 -4
- package/diagnostics/ConsoleDebugLogger.d.ts +2 -2
- package/diagnostics/ConsoleDebugLogger.js +1 -1
- package/execution/ActivityContext.d.ts +35 -35
- package/execution/ActivityContext.js +1 -1
- package/execution/ActivityContextProxy.d.ts +7 -7
- package/execution/ActivityContextProxy.js +1 -1
- package/execution/AmbientState.d.ts +29 -29
- package/execution/AmbientState.js +1 -1
- package/execution/AmbientStateProxy.d.ts +10 -10
- package/execution/AmbientStateProxy.js +1 -1
- package/execution/AsyncContext.d.ts +1 -1
- package/execution/AsyncContext.js +1 -1
- package/execution/Engine.d.ts +27 -28
- package/execution/Engine.js +1 -1
- package/execution/IDebugSession.d.ts +10 -10
- package/execution/MonikerFrame.d.ts +2 -2
- package/execution/MonikerFrame.js +1 -1
- package/execution/Proxy.d.ts +1 -1
- package/execution/Proxy.js +1 -1
- package/execution/StepContext.d.ts +1 -1
- package/execution/StepContext.js +1 -1
- package/execution/TransitionContext.d.ts +1 -1
- package/execution/TransitionContext.js +1 -1
- package/forms/ExclusiveTimer.d.ts +2 -2
- package/forms/ExclusiveTimer.js +1 -1
- package/forms/FormComponent.d.ts +7 -7
- package/forms/FormComponent.js +1 -1
- package/forms/FormDefinition.d.ts +50 -42
- package/forms/FormHost.d.ts +161 -146
- package/forms/FormHost.js +1 -1
- package/forms/FormPresenterHost.d.ts +42 -42
- package/forms/MutuallyExclusiveSectionGroup.d.ts +6 -6
- package/forms/MutuallyExclusiveSectionGroup.js +1 -1
- package/forms/NumberParser.d.ts +2 -2
- package/forms/branding/WorkflowColor.d.ts +5 -5
- package/forms/branding/WorkflowColor.js +1 -1
- package/forms/components/AutoComplete.js +1 -1
- package/forms/components/Button.js +1 -1
- package/forms/components/DateTimePicker.js +1 -1
- package/forms/components/Form.js +1 -1
- package/forms/components/FormLabelNumberField.d.ts +4 -4
- package/forms/components/GeometryPickerListItem.d.ts +4 -4
- package/forms/components/ItemPicker.js +1 -1
- package/forms/components/NumberRangeSlider.js +1 -1
- package/forms/components/NumberSlider.js +1 -1
- package/forms/components/Scanner.js +1 -1
- package/forms/components/SignatureDialog.d.ts +2 -2
- package/forms/components/SketchDialog.d.ts +5 -5
- package/forms/components/common.js +1 -1
- package/forms/dateUtilities.d.ts +2 -2
- package/forms/elements/types.d.ts +2 -2
- package/forms/index.d.ts +2 -2
- package/forms/numberFormatter.d.ts +8 -8
- package/forms/numberUtilities.d.ts +1 -1
- package/forms/utils.d.ts +6 -12
- package/libs/version.d.ts +1 -1
- package/libs/version.js +1 -1
- package/package.json +1 -1
- package/ui/UIService.d.ts +2 -2
- package/ui/UIService.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import rgba from"color-rgba";export default class WorkflowColor{
|
|
1
|
+
import rgba from"color-rgba";export default class WorkflowColor{constructor(t){if(this.values=[0,0,0,1],"string"==typeof t){if(this.values=rgba(t),0===this.values.length)throw new Error("Invalid rgb value: "+t)}else this.values=[...t]}get a(){return this.values[3]}get b(){return this.values[2]}get g(){return this.values[1]}get r(){return this.values[0]}static fromJSON(t){if(4!==t.length)throw new Error("Invalid JSON. The array must contain four values.");return new WorkflowColor(t)}clone(){return new WorkflowColor(this.values)}equals(t){const{r:r,g:s,b:e,a:i}=t;return this.r===r&&this.g===s&&this.b===e&&this.a===i}toCss(){return 1===this.a?`rgb(${this.r},${this.g},${this.b})`:`rgba(${this.r},${this.g},${this.b},${this.a})`}toJSON(){return[...this.values]}toString(){return`rgba(${this.r},${this.g},${this.b},${this.a})`}}
|
|
@@ -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{forwardRef,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=forwardRef(({className:e,component:t,current:o,delay:r,element:n,enabled:l,error:s,items:a,label:i,minLength:p,name:u,prompt:m,tooltip:c,raiseEvent:d,setProperty:f,setValue:x,value:g},C)=>{const y=useContext(HostContext),[v,T]=useState(),[b,h]=useState(""),[O,S]=useState([]),[E,k]=useState(null),
|
|
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{forwardRef,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=forwardRef(({className:e,component:t,current:o,delay:r,element:n,enabled:l,error:s,items:a,label:i,minLength:p,name:u,prompt:m,tooltip:c,raiseEvent:d,setProperty:f,setValue:x,value:g},C)=>{const y=useContext(HostContext),[v,T]=useState(),[b,h]=useState(""),[O,S]=useState([]),[E,k]=useState(null),I=useRef(!1),P=useRef(),R=useRef(!1),N=useFocusCallback(l,u,y),F=useRef({}),w=useRef({}),A=useMemo(()=>{let e=r;return("number"!=typeof e||isNaN(e))&&(e=autoCompletePropertyConstraints.delay.default),Math.max(e,autoCompletePropertyConstraints.delay.minimum)},[r]),L=useMemo(()=>{let e=p;return("number"!=typeof e||isNaN(e))&&(e=autoCompletePropertyConstraints.minLength.default),Math.max(e,autoCompletePropertyConstraints.minLength.minimum)},[p]),{clearText:j,closeText:M,noOptionsText:H,openText:B,placeholder:K,title:$}=useMemo(()=>({clearText:y.renderText("@common-clear"),closeText:y.renderText("@common-close"),noOptionsText:y.renderText({status:"trivial"}),openText:y.renderText("@common-open"),placeholder:y.renderText(m),title:y.renderText(c)}),[y,m,c]),V=t.timer||(t.timer=new ExclusiveTimer),D=()=>{d("suggest",g,b,void 0,V.cancellationToken),S(pendingOptions)},z=()=>{f("items",{}),f("label",void 0)};useEffect(()=>{"clear"===v?z():"input"===v&&(i&&f("label",void 0),I.current=!0,b.length>=L?(f("current",void 0),V.reset(),V.start(A,D)):Object.keys(a||{}).length>0&&z())},[v,b]),useEffect(()=>{const e=E?.value;if(g!==e){const t=getItemId(E,F.current),o=t?w.current[t]:void 0;f("current",t),f("label",o),x(e,{argument:o})}},[E]),useEffect(()=>{const{current:e,items:t,label:r,value:n}=inspectItems(o,a,g);f("current",e),f("label",r||i),f("value",n,!1);const l={};let s=null;const p=[];for(const o in t){const r=t[o];p.push(r);const n=y.renderText(r.label).trim();l[o]=n,e&&o===e&&(s=r)}w.current=l,F.current=t,S(p),k(s)},[a]),useEffect(()=>{const e="string"==typeof o?o:void 0,t=e?F.current[e]:void 0,r=e?w.current[e]:void 0;t?(f("label",r),f("value",t.value),h(r||"")):(f("value",void 0),I.current||h("")),k(t||null)},[o]),useEffect(()=>{I.current||R.current||h(""),I.current=!1,R.current=!1},[i]);const W=y.renderText(i);return React.createElement(FormElement,{className:e,element:n,inputId:P.current,name:u,ref:C},e=>React.createElement(StyledAutoComplete,{autoSelect:!0,clearOnBlur:!1,clearOnEscape:!0,clearText:j,closeText:M,disabled:!l,filterOptions:e=>e,getOptionDisabled:e=>!1===e.enabled,getOptionKey:e=>getItemId(e,F.current)||"",getOptionLabel:e=>{const t=getItemId(e,F.current);return t?w.current[t]:""},inputValue:b,noOptionsText:H,onBlur:()=>{1===O.length&&b.toLowerCase()===w.current[0]?.toLowerCase()?(h(w.current[0]),k(O[0])):f("label",b)},onChange:(e,t)=>{R.current=!0,k(t)},onInputChange:(e,t,o)=>{h(t),T(o)},onKeyDown:e=>{"enter"===getKeyString(e)&&e.stopPropagation()},openText:B,options:O,renderOption:(e,t,{inputValue:o})=>{if(t===pendingOption){const t=clsx(e.className,popperClasses.skeletonOption);return React.createElement("li",{...e,className:t,key:e.id},React.createElement(StyledSkeleton,null))}const r=getItemId(t,F.current),n={...e,className:clsx(e.className,t.styleName?makeSafeClassName(t.styleName):void 0),title:t.tooltip?y.renderText(t.tooltip):void 0,inputText:o,optionText:r?w.current[r]:""};return React.createElement(HighlightOption,{...n})},renderInput:t=>(t.inputProps={...t.inputProps,...e,value:t.inputProps.value||W,placeholder:K,title:$},P.current=t.id,React.createElement(FormLabelTextField,{error:!!s,...t,fullWidth:!0,inputRef:N})),slotProps:{clearIndicator:{"aria-label":j},popper:{component:StyledPopper}},value:E}))});export default AutoComplete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Button from"@vertigis/react-ui/Button";import{NoIcon}from"@vertigis/react-ui/icons";import{styled,useTheme}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{forwardRef,Children,useMemo,Suspense,lazy}from"react";import WorkflowColor from"../branding/WorkflowColor.js";import{createPalette}from"../branding/createPalette.js";import{getBorderStyle,getEmphasis,getIconPosition,getItemColors,getItemSize,getShowBorder}from"../utils.js";function emphasisToButtonProps(e,o){switch(o&&(e="high"),e){case"low":return{variant:"text",color:"inherit"};case"custom":case"medium":return{variant:"outlined",color:"inherit"};case"high":return{variant:"contained",color:"primary"};default:throw new Error(`Invalid value "${e}" for Emphasis.`)}}function generateButtonOverrides(e,o){const t=e=>Object.fromEntries(Object.entries(e).map(([e,o])=>[e,o.toCss()])),r=e&&t(createPalette(e)),n=o&&t(createPalette(o)),{accentIconForeground:s,buttonForegroundDisabled:a,buttonIcon:i,buttonIconDisabled:d,buttonIconHover:u,buttonBorderDisabled:l,buttonBorderHover:c,emphasizedButtonBackgroundDisabled:m}=r??{},{buttonBackgroundDisabled:b,emphasizedButtonBorderDisabled:g,emphasizedButtonBorderHover:B,emphasizedButtonForegroundDisabled:p,primaryBackground:h}=n??{};return{accentIconForeground:s,buttonBackground:o?.toCss(),buttonBackgroundDisabled:b,buttonBackgroundHover:e?.toCss(),buttonBorder:e?.toCss(),buttonBorderDisabled:l,buttonBorderHover:c,buttonForeground:e?.toCss(),buttonForegroundDisabled:a,buttonForegroundHover:o?.toCss(),buttonIcon:i,buttonIconDisabled:d,buttonIconHover:u,emphasizedButtonBackground:e?.toCss(),emphasizedButtonBackgroundDisabled:m,emphasizedButtonBackgroundHover:o?.toCss(),emphasizedButtonBorder:o?.toCss(),emphasizedButtonBorderDisabled:g,emphasizedButtonBorderHover:B,emphasizedButtonForeground:o?.toCss(),emphasizedButtonForegroundDisabled:p,emphasizedButtonForegroundHover:e?.toCss(),primaryBackground:h}}const PREFIX="WorkflowButton";export const buttonClasses={iconOnly:`${PREFIX}-icon-only`,iconStacked:`${PREFIX}-icon-stacked`,styleRounded:`${PREFIX}-rounded`,border:`${PREFIX}-border`,noBorder:`${PREFIX}-noBorder`};export default forwardRef(({children:e,className:o,disabled:t,item:r,onClick:n,title:s},a)=>{const i=useTheme(),d=r.appearance??{},{backgroundColor:u,foregroundColor:l}=getItemColors(d,i),c=useMemo(()=>{const e=u||l?generateButtonOverrides(l?new WorkflowColor(l):void 0,u?new WorkflowColor(u):void 0):void 0,o=e?Object.fromEntries(Object.keys(e).map(o=>e[o]&&[[`--${o}`],e[o]]).filter(e=>!!e)):{};return styled(Button)({[`&.${buttonClasses.iconOnly}`]:{minWidth:"auto",padding:8,lineHeight:0,"&.MuiButton-sizeSmall":{padding:6},"&.MuiButton-sizeLarge":{padding:10},"& .MuiButton-startIcon":{margin:0},"& .MuiButton-endIcon":{margin:0}},[`&.${buttonClasses.iconStacked}`]:{flexDirection:"column","& .MuiButton-startIcon":{marginTop:6,marginRight:0,marginLeft:0},"& .MuiButton-endIcon":{marginBottom:6,marginRight:0,marginLeft:0}},[`&.${buttonClasses.styleRounded}`]:{borderRadius:"1000px"},[`&.${buttonClasses.noBorder}`]:{border:0,outline:0},[`&.${buttonClasses.border}`]:{border:1,borderStyle:"solid"},[`&.${buttonClasses.border}:hover`]:{border:1,borderStyle:"solid",borderColor:"transparent"},...o})},[u,l]),{icon:m}=d,b=getIconPosition(d.iconPosition),g=useMemo(()=>{let e;return m&&(e=lazy(()=>import("@vertigis/react-ui/icons").then(e=>Promise.resolve({default:e[m]??NoIcon})))),e},[m]);let B,p;if(g){const e=React.createElement(Suspense,{fallback:m},React.createElement(g,null));switch(b){case"above":case"before":B=e;break;case"below":case"after":p=e}}const h=getEmphasis(d.emphasis),f=getShowBorder(h,d.showBorder),C=getItemSize(d.size),I=getBorderStyle(d.borderStyle),v=(B??p)&&0===Children.toArray(e).length,k=clsx(
|
|
1
|
+
import Button from"@vertigis/react-ui/Button";import{NoIcon}from"@vertigis/react-ui/icons";import{styled,useTheme}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{forwardRef,Children,useMemo,Suspense,lazy}from"react";import WorkflowColor from"../branding/WorkflowColor.js";import{createPalette}from"../branding/createPalette.js";import{getBorderStyle,getEmphasis,getIconPosition,getItemColors,getItemSize,getShowBorder}from"../utils.js";function emphasisToButtonProps(e,o){switch(o&&(e="high"),e){case"low":return{variant:"text",color:"inherit"};case"custom":case"medium":return{variant:"outlined",color:"inherit"};case"high":return{variant:"contained",color:"primary"};default:throw new Error(`Invalid value "${e}" for Emphasis.`)}}function generateButtonOverrides(e,o){const t=e=>Object.fromEntries(Object.entries(e).map(([e,o])=>[e,o.toCss()])),r=e&&t(createPalette(e)),n=o&&t(createPalette(o)),{accentIconForeground:s,buttonForegroundDisabled:a,buttonIcon:i,buttonIconDisabled:d,buttonIconHover:u,buttonBorderDisabled:l,buttonBorderHover:c,emphasizedButtonBackgroundDisabled:m}=r??{},{buttonBackgroundDisabled:b,emphasizedButtonBorderDisabled:g,emphasizedButtonBorderHover:B,emphasizedButtonForegroundDisabled:p,primaryBackground:h}=n??{};return{accentIconForeground:s,buttonBackground:o?.toCss(),buttonBackgroundDisabled:b,buttonBackgroundHover:e?.toCss(),buttonBorder:e?.toCss(),buttonBorderDisabled:l,buttonBorderHover:c,buttonForeground:e?.toCss(),buttonForegroundDisabled:a,buttonForegroundHover:o?.toCss(),buttonIcon:i,buttonIconDisabled:d,buttonIconHover:u,emphasizedButtonBackground:e?.toCss(),emphasizedButtonBackgroundDisabled:m,emphasizedButtonBackgroundHover:o?.toCss(),emphasizedButtonBorder:o?.toCss(),emphasizedButtonBorderDisabled:g,emphasizedButtonBorderHover:B,emphasizedButtonForeground:o?.toCss(),emphasizedButtonForegroundDisabled:p,emphasizedButtonForegroundHover:e?.toCss(),primaryBackground:h}}const PREFIX="WorkflowButton";export const buttonClasses={iconOnly:`${PREFIX}-icon-only`,iconStacked:`${PREFIX}-icon-stacked`,styleRounded:`${PREFIX}-rounded`,border:`${PREFIX}-border`,noBorder:`${PREFIX}-noBorder`};export default forwardRef(({children:e,className:o,disabled:t,item:r,onClick:n,title:s},a)=>{const i=useTheme(),d=r.appearance??{},{backgroundColor:u,foregroundColor:l}=getItemColors(d,i),c=useMemo(()=>{const e=u||l?generateButtonOverrides(l?new WorkflowColor(l):void 0,u?new WorkflowColor(u):void 0):void 0,o=e?Object.fromEntries(Object.keys(e).map(o=>e[o]&&[[`--${o}`],e[o]]).filter(e=>!!e)):{};return styled(Button)({[`&.${buttonClasses.iconOnly}`]:{minWidth:"auto",padding:8,lineHeight:0,"&.MuiButton-sizeSmall":{padding:6},"&.MuiButton-sizeLarge":{padding:10},"& .MuiButton-startIcon":{margin:0},"& .MuiButton-endIcon":{margin:0}},[`&.${buttonClasses.iconStacked}`]:{flexDirection:"column","& .MuiButton-startIcon":{marginTop:6,marginRight:0,marginLeft:0},"& .MuiButton-endIcon":{marginBottom:6,marginRight:0,marginLeft:0}},[`&.${buttonClasses.styleRounded}`]:{borderRadius:"1000px"},[`&.${buttonClasses.noBorder}`]:{border:0,outline:0},[`&.${buttonClasses.border}`]:{border:1,borderStyle:"solid"},[`&.${buttonClasses.border}:hover`]:{border:1,borderStyle:"solid",borderColor:"transparent"},...o})},[u,l]),{icon:m}=d,b=getIconPosition(d.iconPosition),g=useMemo(()=>{let e;return m&&(e=lazy(()=>import("@vertigis/react-ui/icons").then(e=>Promise.resolve({default:e[m]??NoIcon})))),e},[m]);let B,p;if(g){const e=React.createElement(Suspense,{fallback:m},React.createElement(g,null));switch(b){case"above":case"before":B=e;break;case"below":case"after":p=e}}const h=getEmphasis(d.emphasis),f=getShowBorder(h,d.showBorder),C=getItemSize(d.size),I=getBorderStyle(d.borderStyle),v=(B??p)&&0===Children.toArray(e).length,k=clsx(o,{[buttonClasses.iconOnly]:v,[buttonClasses.iconStacked]:!v&&("above"===b||"below"===b),[buttonClasses.styleRounded]:"rounded"===I,[buttonClasses.border]:f,[buttonClasses.noBorder]:!f});return React.createElement(c,{className:k,disabled:t,endIcon:p,onClick:n,ref:a,size:C,startIcon:B,title:s,...emphasisToButtonProps(h,r.default)},e)});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import BaseDateTimePicker from"@vertigis/react-ui/DateTimePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{clockClasses}from"@vertigis/react-ui/TimeClock";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{forwardRef,useContext,useEffect,useMemo,useRef,useState}from"react";import{areValuesEqual,getAmPm,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.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 StylableDateTimePicker=e=>{const{className:t,slotProps:r,...o}=e;return React.createElement(BaseDateTimePicker,{slotProps:{...r,actionBar:{sx:{display:"none"}},popper:{...r?.popper,className:t}},...o})},StyledDateTimePicker=styled(StylableDateTimePicker)(({theme:{palette:e}})=>({[`& .${clockClasses.amButton}, .${clockClasses.pmButton}`]:{[`&.${buttonBaseClasses.focusVisible}`]:{color:e.action.active}}})),DateTimePicker=forwardRef(({className:e,element:t,enabled:r,error:o,format:a,name:s,prompt:i,setProperty:
|
|
1
|
+
import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import BaseDateTimePicker from"@vertigis/react-ui/DateTimePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{clockClasses}from"@vertigis/react-ui/TimeClock";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{forwardRef,useContext,useEffect,useMemo,useRef,useState}from"react";import{areValuesEqual,getAmPm,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.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 StylableDateTimePicker=e=>{const{className:t,slotProps:r,...o}=e;return React.createElement(BaseDateTimePicker,{slotProps:{...r,actionBar:{sx:{display:"none"}},popper:{...r?.popper,className:t}},...o})},StyledDateTimePicker=styled(StylableDateTimePicker)(({theme:{palette:e}})=>({[`& .${clockClasses.amButton}, .${clockClasses.pmButton}`]:{[`&.${buttonBaseClasses.focusVisible}`]:{color:e.action.active}}})),DateTimePicker=forwardRef(({className:e,element:t,enabled:r,error:o,format:a,name:s,prompt:i,setProperty:m,setValue:l,tooltip:n,value:c},u)=>{const p=useContext(HostContext),[d,f]=useState(!1),[T,k]=useState(!1),[x,E]=useState(!1),[g,D]=useState(null),P=useRef(),v={locale:p.deriveLocale(),timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},F=useRef(!0),C=useFocusCallback(r,s,p),y=p.renderText(n),R="datetime",B=isInvalidError(o);useEffect(()=>{const e=makeProperValue(c),t=getNewElementValue(e,R,v);areValuesEqual(c,t)||l(t,!1),D(e||null)},[c]),useEffect(()=>{if(!x&&!T)if(d)B||m("error",{status:"invalid"});else{if(B&&m("error",void 0),F.current)return void(F.current=!1);S()}F.current=!1},[d,T,x]);const S=()=>{const e=getNewElementValue(g,R,v);areValuesEqual(c,e)||l(e)},b=e=>{"enter"!==getKeyString(e)||S()},{min:V,max:j}=getDateBounds(a),w=getAmPm(a),N=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),I=p.renderText(i);return React.createElement(FormElement,{className:e,element:t,inputId:N,name:s,ref:u},e=>React.createElement(React.Fragment,null,B&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},P.current),React.createElement(StyledDateTimePicker,{ampm:w,disabled:!r,key:"date-picker",inputRef:e=>{C(e),e&&(P.current=e.dataset.formatString)},maxDateTime:j,minDateTime:V,onChange:e=>D(e),onClose:()=>E(!1),onError:e=>f(!!e),onOpen:()=>E(!0),open:x,slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!o,id:N,inputProps:{...e,placeholder:I},onBlur:()=>k(!1),onFocus:()=>k(!0),onKeyDown:b,title:y}},value:g})))});export default DateTimePicker;
|
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{getDateFnsLocale,getMuiLocaleText}from"../dateUtilities.js";import{getKeyString}from"../keyboard.js";import{compareElementIndex,compareRowNumberAndRowIndex,isMutuallyExclusiveSection,isSingleColumnLayout}from"../utils.js";const PREFIX="Form";export const formClasses={body:"Form-body",footer:"Form-footer",formElementContent:"Form-element-content",formElementTitle:"Form-element-title",formElementWithTitleBeside:"Form-element-with-title-beside",header:"Form-header",main:"Form-main",root:"Form-root",row:"Form-row"};const 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,n]=useState(),[r,i]=useState(),{host:
|
|
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{getDateFnsLocale,getMuiLocaleText}from"../dateUtilities.js";import{getKeyString}from"../keyboard.js";import{compareElementIndex,compareRowNumberAndRowIndex,isMutuallyExclusiveSection,isSingleColumnLayout}from"../utils.js";const PREFIX="Form";export const formClasses={body:"Form-body",footer:"Form-footer",formElementContent:"Form-element-content",formElementTitle:"Form-element-title",formElementWithTitleBeside:"Form-element-with-title-beside",header:"Form-header",main:"Form-main",root:"Form-root",row:"Form-row"};const StyledBox=styled(Box)(()=>({"h1, h2, h3":{margin:0},[`.${formClasses.formElementWithTitleBeside}`]:{alignItems:"start",display:"grid",gridTemplateColumns:"1fr 2fr","> legend":{float:"left"},[`> .${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,n]=useState(),[r,i]=useState(),{host:l}=t.props,{form:c}=l;if(useEffect(()=>{let e=!0;const t=l.deriveLocale();return getDateFnsLocale(t).then(t=>{e?n(t):console.warn("Component was unmounted while loading the locale.")}),getMuiLocaleText(t).then(t=>{e?i(t):console.warn("Component was unmounted while loading the locale.")}),()=>{e=!1}},[]),!o)return null;const s={host:l,type:"header",children:[]},m={host:l,type:"body",children:[]},a={host:l,type:"main",children:[]},d={host:l,type:"footer",children:[]},f={host:l,type:"body",children:[]},u={},p=[];function h(e,t){let o=u[t];o||(o=u[t]=[]);let n=o[e];return void 0===n&&(n=o[e]={host:l,type:"row",children:[]}),n}function y(e){if(void 0===e)return m;if("header"===e)return s;if("footer"===e)return d;let t;t="object"==typeof e?e.name:e;let o=(e=>{for(const t of p)if(t.name===e)return t})(t);return void 0===o&&(o={host:l,name:t,type:"section",children:[]},p.push(o)),o}function g(e){return e!==FormElementTypes.SECTION}function E(e){return!0!==e.hoisted&&(!1!==e.visible&&g(e.type))}function F(e){const t=c.elements[e];return null==t||!g(t.type)&&(!0!==t.hoisted&&!1!==t.visible)}function x(e){return e===s||e===m||e===d?`${e.type}-section`:e.name}const C=Object.entries(c.elements).sort(isSingleColumnLayout(c.elements)?compareElementIndex:compareRowNumberAndRowIndex);for(const e of C){const[t,o]=e;if(E(o))if(!0!==o.overlay){let e=y(o.section);if(void 0!==o.rowNumber){const t=x(e);e=h(o.rowNumber,t)}e.children.push(React.createElement(FormElementComponent,{key:t,host:l,type:"element",name:t,children:[]}))}else f.children.push(React.createElement(FormElementComponent,{key:t,host:l,type:"element",name:t,children:[]}))}const w=[];if(s.children.length>0&&w.push(React.createElement(FormComponent,{key:"header",...s})),f.children.length>0)w.push(React.createElement(FormComponent,{key:"main",...f}));else{let e,t;T(m);let o=0;const n=()=>{if(e){switch(t){case"accordion-section":v(e,++o,"accordionGroup");break;case"tab-section":v(e,++o,"tabGroup")}e=void 0,t=void 0}};for(const o of p){const r=o.name,i=c.elements[r],l=i.format;t&&l!==t&&n(),F(r)&&(isMutuallyExclusiveSection(i)?e?e.push(o):(e=[o],t=l):T(o))}n(),a.children.length>0&&w.push(React.createElement(FormComponent,{key:"main",...a}))}function b(e){if(function(e){const t=x(e),o=u[t];if(o){const t=Object.keys(o).map(e=>parseInt(e)).sort((e,t)=>e-t);for(const n of t){const t=o[n];if(t.children.length>1){const o=`row-${n}`;e.children.push(React.createElement(FormComponent,{key:o,...t}))}else 1===t.children.length&&e.children.push(...t.children)}}}(e),e.children.length>0){const t=e===m?"body":`$${e.name}`;return React.createElement(FormComponent,{key:t,...e})}}function T(e){const t=b(e);t&&a.children.push(t)}function v(e,t,o){const n=[];for(const t of e){const e=b(t);e&&n.push(e)}const r=`${o}${t}`,i={children:n,host:l,name:r,type:o};a.children.push(React.createElement(FormComponent,{key:r,...i}))}return d.children.length>0&&w.push(React.createElement(FormComponent,{key:"footer",...d})),React.createElement(StyledBox,{className:clsx(e,formClasses.root),onKeyDown:function(e){"enter"===getKeyString(e)&&(e.target instanceof HTMLButtonElement||l.post("clicked"))},ref:function(e){l.renderFocus(e)}},React.createElement(LocalizationProvider,{dateAdapter:AdapterDateFns,adapterLocale:o,localeText:{...r,start:l.renderText("@date-range-picker-start-text"),end:l.renderText("@date-range-picker-end-text"),cancelButtonLabel:l.renderText("@common-cancel"),clearButtonLabel:l.renderText("@common-clear"),okButtonLabel:l.renderText("@common-ok"),todayButtonLabel:l.renderText("@common-today")}},w))};export default Form;
|
|
@@ -6,14 +6,14 @@ interface FormLabelNumberFieldProps {
|
|
|
6
6
|
endAdornment?: React.ReactNode;
|
|
7
7
|
id?: string;
|
|
8
8
|
inputProps: InputBaseProps["inputProps"];
|
|
9
|
-
onChange: (value: number | undefined) => void;
|
|
10
|
-
onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;
|
|
11
|
-
startAdornment?: React.ReactNode;
|
|
12
9
|
label: string;
|
|
13
|
-
value: number;
|
|
14
10
|
max: number;
|
|
15
11
|
maxDecimalPlaces?: number;
|
|
16
12
|
min: number;
|
|
13
|
+
onChange: (value: number | undefined) => void;
|
|
14
|
+
onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;
|
|
15
|
+
startAdornment?: React.ReactNode;
|
|
16
|
+
value: number;
|
|
17
17
|
}
|
|
18
18
|
declare const FormLabelNumberField: (props: FormLabelNumberFieldProps) => React.JSX.Element;
|
|
19
19
|
export default FormLabelNumberField;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import type { ListItemProps } from "@vertigis/react-ui/ListItem";
|
|
3
3
|
interface GeometryPickerListItemProps extends ListItemProps {
|
|
4
|
-
/**
|
|
5
|
-
* Numeric index referring to this item's position in the list.
|
|
6
|
-
*/
|
|
7
|
-
itemIndex: number;
|
|
8
4
|
/**
|
|
9
5
|
* Callback for when the user presses "Delete" while this item is focused.
|
|
10
6
|
*/
|
|
11
7
|
deleteItem: (itemIndex: number) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Numeric index referring to this item's position in the list.
|
|
10
|
+
*/
|
|
11
|
+
itemIndex: number;
|
|
12
12
|
/**
|
|
13
13
|
* Callback for updating the highlight style of the associated graphic on the map.
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Checkbox from"@vertigis/react-ui/Checkbox";import FormControl from"@vertigis/react-ui/FormControl";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormLabel from"@vertigis/react-ui/FormLabel";import IconButton from"@vertigis/react-ui/IconButton";import Input from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import List from"@vertigis/react-ui/List";import ListItem from"@vertigis/react-ui/ListItem";import ListItemButton from"@vertigis/react-ui/ListItemButton";import ListItemIcon from"@vertigis/react-ui/ListItemIcon";import ListItemText,{listItemTextClasses}from"@vertigis/react-ui/ListItemText";import Radio from"@vertigis/react-ui/Radio";import RadioGroup from"@vertigis/react-ui/RadioGroup";import Stack from"@vertigis/react-ui/Stack";import Typography from"@vertigis/react-ui/Typography";import Close from"@vertigis/react-ui/icons/Close";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{forwardRef,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{areValuesEqual}from"../listUtilities.js";import{debounce,isDataRef,isGeometryRef,makeSafeClassName,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const PREFIX="ItemPicker";export const itemPickerClasses={allNone:`${PREFIX}-all-none`,button:`${PREFIX}-list-item-button`,clearIcon:`${PREFIX}-clear-button`,horizontal:`${PREFIX}-horizontal`,item:`${PREFIX}-list-item`,items:`${PREFIX}-list-items`};const StyledFormElement=styled(FormElement)(({theme:{typography:e,spacing:t}})=>({[`.${itemPickerClasses.allNone}`]:{marginLeft:t(2)},[`.${itemPickerClasses.clearIcon}`]:{height:e.pxToRem(20),width:e.pxToRem(20)},[`.${itemPickerClasses.items}`]:{[`&.${itemPickerClasses.horizontal}`]:{display:"flex",flexWrap:"wrap",[`.${itemPickerClasses.item}`]:{width:"auto"}},[`.${itemPickerClasses.item}`]:{[`.${itemPickerClasses.button}`]:{paddingBottom:0,paddingTop:0,[`.${listItemTextClasses.primary}`]:{fontWeight:e.fontWeightRegular}}}}})),ItemPicker=forwardRef(({className:e,component:t,element:r,enabled:i,items:o,name:
|
|
1
|
+
import Checkbox from"@vertigis/react-ui/Checkbox";import FormControl from"@vertigis/react-ui/FormControl";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormLabel from"@vertigis/react-ui/FormLabel";import IconButton from"@vertigis/react-ui/IconButton";import Input from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import List from"@vertigis/react-ui/List";import ListItem from"@vertigis/react-ui/ListItem";import ListItemButton from"@vertigis/react-ui/ListItemButton";import ListItemIcon from"@vertigis/react-ui/ListItemIcon";import ListItemText,{listItemTextClasses}from"@vertigis/react-ui/ListItemText";import Radio from"@vertigis/react-ui/Radio";import RadioGroup from"@vertigis/react-ui/RadioGroup";import Stack from"@vertigis/react-ui/Stack";import Typography from"@vertigis/react-ui/Typography";import Close from"@vertigis/react-ui/icons/Close";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{forwardRef,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{areValuesEqual}from"../listUtilities.js";import{debounce,isDataRef,isGeometryRef,makeSafeClassName,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const PREFIX="ItemPicker";export const itemPickerClasses={allNone:`${PREFIX}-all-none`,button:`${PREFIX}-list-item-button`,clearIcon:`${PREFIX}-clear-button`,horizontal:`${PREFIX}-horizontal`,item:`${PREFIX}-list-item`,items:`${PREFIX}-list-items`};const StyledFormElement=styled(FormElement)(({theme:{typography:e,spacing:t}})=>({[`.${itemPickerClasses.allNone}`]:{marginLeft:t(2)},[`.${itemPickerClasses.clearIcon}`]:{height:e.pxToRem(20),width:e.pxToRem(20)},[`.${itemPickerClasses.items}`]:{[`&.${itemPickerClasses.horizontal}`]:{display:"flex",flexWrap:"wrap",[`.${itemPickerClasses.item}`]:{width:"auto"}},[`.${itemPickerClasses.item}`]:{[`.${itemPickerClasses.button}`]:{paddingBottom:0,paddingTop:0,[`.${listItemTextClasses.primary}`]:{fontWeight:e.fontWeightRegular}}}}})),ItemPicker=forwardRef(({className:e,component:t,element:r,enabled:i,items:o,name:a,orientation:s,prompt:n,selectionMode:c,setProperty:l,setValue:m,showFilter:d,spacing:u,state:p,value:f},k)=>{const g=useRef(null),I=useContext(HostContext);void 0===u&&(u=1),useImperativeHandle(k,()=>(O(),g.current)),useEffect(()=>()=>{O()},[g.current]);const R=e=>()=>{const t=x[e].checked;if("single"===c){if(!t)for(const t in x)T(t,t===e)}else T(e,!t);E(!0),I.renderState(a,"item-picker",C)},[h,b]=useState(""),x=o||{};let C=p;const v=useFocusCallback(i,a,I),E=e=>{const t=[];for(const e in x){const r=x[e];r.checked&&t.push(r)}let r;t.length>0&&(r={refValueType:"items",items:t}),areValuesEqual(f,r)||m(r,e)};useEffect(()=>{null==C&&(C={items:[],keyToIndex:{}});const e={};for(const t in o){const r=y(t,!1);r&&(e[t]=r)}C.items.length=0,C.keyToIndex={};for(const t in e)C.keyToIndex[t]=C.items.length,C.items.push(e[t]);p!==C&&l("state",C),E(!1)});const y=(e,t=!0)=>{let r=C.keyToIndex[e];if(null==r||null===r){if(!t)return;C.keyToIndex[e]=C.items.length,C.items.push({}),r=C.keyToIndex[e]}return C.items[r]},T=(e,t)=>{x[e].checked=t;const r=y(e);r&&(r.checked=t)},P=e=>t=>{if(v(t),null!==t){const t=!0===x[e].checked;y(e).checked=t}},L=e=>{if(e){if(isGeometryRef(e))return e.geometry;if(isDataRef(e)&&e.data)return e.data.geometry}},F=[];let S;switch(c){case"single":S="radio";break;case"multiple":S="checkbox"}const $={},N={};if(C)for(const e in x){const t=x[e];if(t.checked&&($[e]=t),y(e).content=L(t.value),!1!==t.visible){N[e]=t;const r=i&&!1!==t.enabled,o=r&&!!S,s=I.renderText(t.tooltip),n=clsx(itemPickerClasses.item,t.styleName?makeSafeClassName(t.styleName):void 0),c=React.createElement(Markdown,{text:t.label});F.push(React.createElement(ListItem,{className:n,disablePadding:!0,key:e},React.createElement(ListItemButton,{className:itemPickerClasses.button,disabled:!r,onClick:o?R(e):void 0,tabIndex:r?void 0:-1,title:s,"data-id":e,onBlur:r?e=>{delete y(e.currentTarget.dataset.id).focused,I.renderState(a,"item-picker",C)}:void 0,onFocus:r?e=>{y(e.currentTarget.dataset.id).focused=!0,I.renderState(a,"item-picker",C)}:void 0,onMouseOver:r?e=>{y(e.currentTarget.dataset.id).pending=!0,I.renderState(a,"item-picker",C)}:void 0,onMouseOut:r?e=>{delete y(e.currentTarget.dataset.id).pending,I.renderState(a,"item-picker",C)}:void 0},"checkbox"===S&&React.createElement(ListItemIcon,null,React.createElement(Checkbox,{edge:"start",checked:!0===x[e]?.checked,disabled:!r,disableRipple:!0,slotProps:{input:{ref:P(e)}},tabIndex:-1,value:e})),"radio"===S&&React.createElement(ListItemIcon,null,React.createElement(Radio,{edge:"start",checked:!0===x[e]?.checked,disabled:!r,disableRipple:!0,name:a,slotProps:{input:{ref:P(e)}},tabIndex:-1,value:e})),React.createElement(ListItemText,null,c))))}}const w=I.renderText(n),M=useMemo(()=>e=>{for(const t in x){const r=x[t];if(e){const t=I.renderText(r.label).toLowerCase();r.visible=t.indexOf(e)>=0}else r.visible=!0}t.forceUpdate()},[x]),j=useMemo(()=>debounce(M),[x]),B=()=>{b(""),M("")},O=()=>{null===g.current?I.renderState(a,"item-picker"):I.renderState(a,"item-picker",C)},X="multiple"===c&&F.length>0,z=clsx(itemPickerClasses.items,{[itemPickerClasses.horizontal]:s===Orientation.HORIZONTAL});let A,G=0,H=0,q=0,U=0;for(const e in x){const t=N[e];t?(q++,t.checked&&G++):(U++,x[e].checked&&H++)}0===G?A="none":G===q&&(A="all");const V=I.renderText("@common-clear"),W=h?React.createElement(InputAdornment,{position:"end"},React.createElement(IconButton,{"aria-label":V,disabled:!i,onClick:B,title:V},React.createElement(Close,{className:itemPickerClasses.clearIcon}))):null,D=d?`${makeUniqueId(a)}-filter`:void 0;let K,Z=I.renderText("@item-picker-select");return X&&U>0&&(Z=I.renderText("@item-picker-select-visible"),H>0&&(K=1===H?I.renderText("@item-picker-hidden-selected-item"):`${H} ${I.renderText("@item-picker-hidden-selected-items")}`)),React.createElement(StyledFormElement,{className:e,component:"fieldset",element:r,inputId:D,name:a,ref:g},React.createElement(Stack,{spacing:u},d&&React.createElement(Input,{disabled:!i,endAdornment:W,error:!1,fullWidth:!0,id:D,inputRef:v,onChange:e=>{const t=e.target.value;b(t),j(t.toLowerCase())},onKeyDown:e=>{"escape"===getKeyString(e)&&B()},placeholder:w,type:"text",value:h}),X&&React.createElement(FormControl,{className:itemPickerClasses.allNone},React.createElement(FormLabel,null,Z),React.createElement(RadioGroup,{color:"primary",row:!0},React.createElement(FormControlLabel,{value:"all",checked:"all"===A,control:React.createElement(Radio,{size:"small"}),disabled:!i,inputRef:v,onClick:()=>{for(const e in N)T(e,!0);E(!0)},label:I.renderText("@common-all")}),React.createElement(FormControlLabel,{value:"none",checked:"none"===A,control:React.createElement(Radio,{size:"small"}),disabled:!i,onClick:()=>{for(const e in N)T(e,!1);E(!0)},label:I.renderText("@common-none")})),K&&React.createElement(Typography,{variant:"subtitle2"},K)),React.createElement(List,{className:z,dense:!0},F)))});export default ItemPicker;
|
|
@@ -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{forwardRef,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{getKeyString}from"../keyboard.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}from"../utils.js";import FormElement from"./FormElement.js";import FormLabelNumberField from"./FormLabelNumberField.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberRangeSlider";export const numberRangeSliderClasses={container:`${PREFIX}-container`,inputContainer:`${PREFIX}-input-container`,toLabel:`${PREFIX}-to-label`};const 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=forwardRef(({className:e,element:t,enabled:r,format:o,manualEntry:a,showMinMaxLabels:n,showTickMarks:m,name:i,raiseEvent:s,
|
|
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{forwardRef,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{getKeyString}from"../keyboard.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}from"../utils.js";import FormElement from"./FormElement.js";import FormLabelNumberField from"./FormLabelNumberField.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberRangeSlider";export const numberRangeSliderClasses={container:`${PREFIX}-container`,inputContainer:`${PREFIX}-input-container`,toLabel:`${PREFIX}-to-label`};const 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=forwardRef(({className:e,element:t,enabled:r,format:o,manualEntry:a,showMinMaxLabels:n,showTickMarks:m,name:i,raiseEvent:s,tooltip:l,value:u,setValue:c},d)=>{const p=useContext(HostContext),b=p.deriveLocale(),{currency:f,customDisplayFormat:C,decimals:F,displayFormat:g,endAdornment:N,isCustom:y,isFixedPoint:R,isPercent:S,numberConstraints:x,startAdornment:E}=useMemo(()=>{const e=o,t=e?.currency||DEFAULT_CURRENCY,r=e?.displayFormat,a=r===NumberDisplayFormat.CUSTOM,n=r===NumberDisplayFormat.FIXED_POINT,m=r===NumberDisplayFormat.PERCENT,i=getNumberConstraints(e,numberFormatConfiguration),s=e?.customDisplayFormat||DEFAULT_CUSTOM_FORMAT,l=r===NumberDisplayFormat.CUSTOM?-1:sanitizePrecision(e?.precision,i.step,numberFormatConfiguration);let u=null,c=null;if(r===NumberDisplayFormat.CURRENCY||r===NumberDisplayFormat.ACCOUNTING){const e=getCurrencySymbolInfo(b,t);if(e){const t=React.createElement(InputAdornment,{position:e.position},e.symbol);"start"===e.position?u=t:c=t}}else if(m){const e=getPercentSymbolInfo(b);if(e){const t=React.createElement(InputAdornment,{position:e.position},e.symbol);"start"===e.position?u=t:c=t}}return{currency:t,customDisplayFormat:s,decimals:l,displayFormat:r,endAdornment:c,isCustom:a,isFixedPoint:n,isPercent:m,numberConstraints:i,startAdornment:u}},[o]),{step:D}=x,A=x.maximum,v=x.minimum,[I,T]=useState(!1),[P,L]=useState(!1),[M,U]=useState([v,A]),h=useMemo(()=>g===NumberDisplayFormat.CUSTOM?[countDecimalsInCustomFormat(C,M[0]),countDecimalsInCustomFormat(C,M[1])]:[-1,-1],[M]),k=useRef(!0),[$,j]=useMemo(()=>{const e=makeUniqueId(i);return[e,`${e}-slider-input`]},[i]),w=!1!==n,O=!!m,_=!1!==a;let X=S?F-2:F;X=Math.max(0,X);const B={currency:f,customDisplayFormat:C,format:g,fractionalDigits:X,locale:b},V=()=>{const e=getNumberSliderValues(M,x);M[0]===e[0]&&M[1]===e[1]||U(e),K(u,e)||c(e)};useEffect(()=>{k.current?k.current=!1:P?Y(M):I||V()},[I,P,M]),useEffect(()=>{const e=getNumberSliderValues(u,x);K(u,e)||c(e,!1),K(M,e)||U(e)},[u]);const K=(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])),Y=useMemo(()=>throttle(e=>{s("dragged",e)}),[]),q=useFocusCallback(r,i,p),z=p.renderText(l),G=!r&&!P,H=_?{max:A,min:v,onBlur:()=>{T(!1)},onFocus:()=>{T(!0)},step:D,title:z}:void 0,J=y?h:[F,F],Q=e=>{"enter"===getKeyString(e)&&V()},W=p.renderText("@common-start"),Z=p.renderText("@common-end");return React.createElement(StyledFormElement,{className:e,element:t,inputId:`${j}-0`,name:i,ref:d},React.createElement(Box,{className:numberRangeSliderClasses.container},React.createElement(Slider,{disabled:G,getAriaLabel:e=>0===e?W:Z,getAriaValueText:e=>p.formatNumber(e,B),marks:getMarks(A,v,D,B,w,O),max:A,min:v,onChange:(e,t)=>{L(!0),Array.isArray(t)&&U(t)},onChangeCommitted:()=>{L(!1)},slotProps:{input:()=>({ref:e=>{null===e||e.id||(e.id=`${j}-${e.getAttribute("data-index")}`),q(e)}})},step:D,title:z,value:M,valueLabelDisplay:"on",valueLabelFormat:e=>p.formatNumber(e,B)}),!1!==_&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(y)return customFormatNumber(e,C,B.locale);S&&(e*=100);const t={format:R?B.format:void 0,fractionalDigits:B.fractionalDigits,locale:B.locale};return p.formatNumber(e,t)},parseNumber:e=>{if(y)return parseCustomFormattedNumber(e,C,B.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:`${$}-startInput`,inputProps:H,endAdornment:N,label:W,max:A,maxDecimalPlaces:J[0],min:v,onChange:e=>{void 0===e&&(e=v),U([e,M[1]])},onKeyDown:Q,startAdornment:E,value:M[0]}),React.createElement(Box,{className:numberRangeSliderClasses.toLabel}," ",p.renderText("@common-to")," "),React.createElement(FormLabelNumberField,{disabled:!r,endAdornment:N,id:`${$}-endInput`,inputProps:H,label:Z,max:A,maxDecimalPlaces:J[1],min:v,onChange:e=>{void 0===e&&(e=A),U([M[0],e])},onKeyDown:Q,startAdornment:E,value:M[1]})))))});export default NumberRangeSlider;
|
|
@@ -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{forwardRef,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{getKeyString}from"../keyboard.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}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberSlider";export const numberSliderClasses={container:`${PREFIX}-container`};const 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=forwardRef(({className:e,element:t,enabled:r,error:o,format:a,manualEntry:m,showMinMaxLabels:s,showTickMarks:n,name:i,raiseEvent:u,
|
|
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{forwardRef,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{getKeyString}from"../keyboard.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}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberSlider";export const numberSliderClasses={container:`${PREFIX}-container`};const 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=forwardRef(({className:e,element:t,enabled:r,error:o,format:a,manualEntry:m,showMinMaxLabels:s,showTickMarks:n,name:i,raiseEvent:u,tooltip:l,value:c,setValue:p},d)=>{const f=useContext(HostContext),b=f.deriveLocale(),{currency:F,customDisplayFormat:y,decimals:C,displayFormat:N,endAdornment:g,isCustom:E,isFixedPoint:S,isPercent:x,numberConstraints:D,startAdornment:R}=useMemo(()=>{const e=a,t=e?.currency||DEFAULT_CURRENCY,r=e?.displayFormat,o=r===NumberDisplayFormat.CUSTOM,m=r===NumberDisplayFormat.FIXED_POINT,s=r===NumberDisplayFormat.PERCENT,n=getNumberConstraints(e),i=e?.customDisplayFormat||DEFAULT_CUSTOM_FORMAT,u=r===NumberDisplayFormat.CUSTOM?-1:sanitizePrecision(e?.precision,n.step);let l=null,c=null;if(r===NumberDisplayFormat.CURRENCY||r===NumberDisplayFormat.ACCOUNTING){const e=getCurrencySymbolInfo(b,t);if(e){const t=React.createElement(InputAdornment,{position:e.position},e.symbol);"start"===e.position?l=t:c=t}}else if(s){const e=getPercentSymbolInfo(b);if(e){const t=React.createElement(InputAdornment,{position:e.position},e.symbol);"start"===e.position?l=t:c=t}}return{currency:t,customDisplayFormat:i,decimals:u,displayFormat:r,endAdornment:c,isCustom:o,isFixedPoint:m,isPercent:s,numberConstraints:n,startAdornment:l}},[a]),{step:I}=D,A=D.maximum,T=D.minimum,[v,M]=useState(!1),[P,U]=useState(!1),[h,k]=useState(T),L=useMemo(()=>N===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(y,h):-1,[h]),B=useRef(!0),O=`${makeUniqueId(i)}-input`,V=!1!==s,j=!!n,w=!1!==m;let _=x?C-2:C;_=Math.max(0,_);const q={currency:F,customDisplayFormat:y,format:N,fractionalDigits:_,locale:b},$=e=>({refValueType:"number",format:{currency:F,customDisplayFormat:y,displayFormat:N,lowerBound:T,precision:C,step:I,upperBound:A},display:f.formatNumber(e,q),numeric:e}),X=()=>{const e=getNumberSliderValues(h,D,!0)[0];e!==h&&k(e);const t=$(e);areValuesEqual(c,t)||p(t)};useEffect(()=>{B.current?B.current=!1:P?z(h):v||X()},[v,P,h]),useEffect(()=>{const e=getNumberSliderValues(c,D,!0)[0],t=$(e);areValuesEqual(c,t)||p(t,!1),h!==e&&k(e)},[c]);const z=useMemo(()=>throttle(e=>{u("dragged",$(e))}),[]),K=useFocusCallback(r,i,f),Y=f.renderText(l),H=!r&&!P,G=!r,J=E?L:C;return React.createElement(StyledFormElement,{className:e,element:t,inputId:O,name:i,ref:d},React.createElement(Box,{className:numberSliderClasses.container},React.createElement(Slider,{disabled:H,getAriaLabel:()=>f.renderText("@common-value"),getAriaValueText:e=>f.formatNumber(e,q),marks:getMarks(A,T,I,q,V,j),max:A,min:T,onChange:(e,t)=>{U(!0);const r=Array.isArray(t)?t[0]:t;k(r)},onChangeCommitted:()=>{U(!1)},slotProps:{input:{id:O,ref:K}},step:I,title:Y,value:"number"==typeof h?h:0,valueLabelDisplay:"on",valueLabelFormat:e=>f.formatNumber(e,q)}),!1!==w&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(E)return customFormatNumber(e,y,q.locale);x&&(e*=100);const t={format:S?q.format:void 0,fractionalDigits:q.fractionalDigits,locale:q.locale};return f.formatNumber(e,t)},parseNumber:e=>{if(E)return parseCustomFormattedNumber(e,y,q.locale);let t=f.coerceNumber(e,b);return x&&(t=preciseRound(t/100,C)),t}}},React.createElement(NumberInput,{correctOnBlur:!0,disabled:G,endAdornment:g,error:!!o,inputProps:{step:I,title:Y},max:A,maxDecimalPlaces:J,min:T,onBlur:()=>{M(!1)},onChange:e=>{k(void 0===e?T:e)},onFocus:()=>{M(!0)},onKeyDown:e=>{"enter"===getKeyString(e)&&X()},size:"small",startAdornment:R,value:h}))))});export default NumberSlider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Button from"@vertigis/react-ui/Button";import Input from"@vertigis/react-ui/Input";import Stack from"@vertigis/react-ui/Stack";import{Close as CloseIcon,ScanBarcode,ScanMulti,ScanQr}from"@vertigis/react-ui/icons";import{styled}from"@vertigis/react-ui/styles";import{useState,useEffect,useRef,useContext,forwardRef}from"react";import*as React from"react";import{ScanType}from"../constants.js";import{scannerConfiguration}from"../elements/Scanner.js";import HostContext from"../hostContext.js";import{isScanRef,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="Scanner";export const scannerClasses={container:`${PREFIX}-container`,button:`${PREFIX}-button`,inputContainer:`${PREFIX}-inner`};const StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${scannerClasses.container}`]:{gap:e(.5),video:{width:"100%"},[`.${scannerClasses.inputContainer}`]:{alignItems:"flex-start",gap:e(.5),[`.${scannerClasses.button}`]:{minWidth:0,padding:e(.5)}}}})),CAMERA_READY_TIMEOUT_MS=1500;var EntryMethod;!function(e){e.Camera="camera",e.Manual="manual"}(EntryMethod||(EntryMethod={}));const convertToScanRef=(e,t,n)=>{const a=typeof e,r="number"===a||"string"===a?e.toString():e?.value?.toString();if(r)return t=t||e?.entryMethod||EntryMethod.Manual,{refValueType:"scan",value:r,scanType:n=n||e?.scanType,entryMethod:t}},Scanner=forwardRef(({autoActivate:e,className:t,element:n,enabled:a,manualEntry:r,name:o,raiseEvent:c,require:s,scanType:i,setProperty:l,setValue:u,size:m,tooltip:d,value:f},p)=>{const E=useContext(HostContext),[C,S]=useState(!0),[y,R]=useState(null),[v,g]=useState(""),[T,w]=useState(!1),[M,h]=useState(scannerConfiguration.rows.default),I=useRef(null),A=`${makeUniqueId(o)}-input`,F="barcode"!==i;useEffect(()=>{let e=scannerConfiguration.rows.default;"number"==typeof m&&(e=Math.max(scannerConfiguration.rows.minimum,m)),h(e)},[m]),useEffect(()=>(w(!0),()=>w(!1)),[]),useEffect(()=>{T&&a&&e&&(l("autoActivate",!1),P())},[T]),useEffect(()=>{y&&(S(!1),setTimeout(()=>{T&&S(!0)},1500))},[y]);const _=useFocusCallback(a,o,E);useEffect(()=>{let e=f;!isScanRef(e)&&e&&(e=convertToScanRef(e),u(e,!1));const t=e?.value||"";v!==t&&g(t)},[f]);const
|
|
1
|
+
import Button from"@vertigis/react-ui/Button";import Input from"@vertigis/react-ui/Input";import Stack from"@vertigis/react-ui/Stack";import{Close as CloseIcon,ScanBarcode,ScanMulti,ScanQr}from"@vertigis/react-ui/icons";import{styled}from"@vertigis/react-ui/styles";import{useState,useEffect,useRef,useContext,forwardRef}from"react";import*as React from"react";import{ScanType}from"../constants.js";import{scannerConfiguration}from"../elements/Scanner.js";import HostContext from"../hostContext.js";import{isScanRef,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="Scanner";export const scannerClasses={container:`${PREFIX}-container`,button:`${PREFIX}-button`,inputContainer:`${PREFIX}-inner`};const StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${scannerClasses.container}`]:{gap:e(.5),video:{width:"100%"},[`.${scannerClasses.inputContainer}`]:{alignItems:"flex-start",gap:e(.5),[`.${scannerClasses.button}`]:{minWidth:0,padding:e(.5)}}}})),CAMERA_READY_TIMEOUT_MS=1500;var EntryMethod;!function(e){e.Camera="camera",e.Manual="manual"}(EntryMethod||(EntryMethod={}));const convertToScanRef=(e,t,n)=>{const a=typeof e,r="number"===a||"string"===a?e.toString():e?.value?.toString();if(r)return t=t||e?.entryMethod||EntryMethod.Manual,{refValueType:"scan",value:r,scanType:n=n||e?.scanType,entryMethod:t}},Scanner=forwardRef(({autoActivate:e,className:t,element:n,enabled:a,manualEntry:r,name:o,raiseEvent:c,require:s,scanType:i,setProperty:l,setValue:u,size:m,tooltip:d,value:f},p)=>{const E=useContext(HostContext),[C,S]=useState(!0),[y,R]=useState(null),[v,g]=useState(""),[T,w]=useState(!1),[M,h]=useState(scannerConfiguration.rows.default),I=useRef(null),A=`${makeUniqueId(o)}-input`,F="barcode"!==i;useEffect(()=>{let e=scannerConfiguration.rows.default;"number"==typeof m&&(e=Math.max(scannerConfiguration.rows.minimum,m)),h(e)},[m]),useEffect(()=>(w(!0),()=>w(!1)),[]),useEffect(()=>{T&&a&&e&&(l("autoActivate",!1),P())},[T]),useEffect(()=>{y&&(S(!1),setTimeout(()=>{T&&S(!0)},1500))},[y]);const _=useFocusCallback(a,o,E);useEffect(()=>{let e=f;!isScanRef(e)&&e&&(e=convertToScanRef(e),u(e,!1));const t=e?.value||"";v!==t&&g(t)},[f]);const x=E.renderText(d),D=!a,b=D||!r,B=(e,t,n)=>{if(e){if(f?.value===e)return;const a=convertToScanRef(e,t,n);u(a),g(e)}},O=async e=>{const{BarcodeFormat:t}=await import("@zxing/browser");let n;return e===ScanType.QrCode?n=[t.AZTEC,t.DATA_MATRIX,t.MAXICODE,t.PDF_417,t.QR_CODE]:e===ScanType.BarCode&&(n=[t.CODABAR,t.CODE_39,t.CODE_93,t.CODE_128,t.EAN_8,t.EAN_13,t.ITF,t.RSS_14,t.RSS_EXPANDED,t.UPC_A,t.UPC_E,t.UPC_EAN_EXTENSION]),n},P=async()=>{if(y)return R(null),void c("cancel",void 0);const{BrowserCodeReader:e,BrowserMultiFormatReader:t}=await import("@zxing/browser");if(!T)return;const n=await(async e=>{const{DecodeHintType:t}=await import("@zxing/library"),n=await O(e),a=new Map;return a.set(t.POSSIBLE_FORMATS,n),a})(i),a=new t(n);R(a),await(async t=>{try{const n=await e.listVideoInputDevices();if(!n||0==n.length)throw new DOMException("No video input devices detected.");const a=await t.decodeOnceFromVideoDevice(void 0,I.current||void 0),r=(await O(ScanType.QrCode)).indexOf(a.getBarcodeFormat())<0?ScanType.BarCode:ScanType.QrCode;B(a.toString(),EntryMethod.Camera,r),R(null)}catch(e){e instanceof DOMException&&(l("error",e.message),R(null))}})(a)},N=y?E.renderText("@common-close"):x;return React.createElement(StyledFormElement,{className:t,element:n,inputId:A,name:o,ref:p},React.createElement(Stack,{className:scannerClasses.container},React.createElement("video",{hidden:!y,ref:I}),React.createElement(Stack,{className:scannerClasses.inputContainer,direction:"row"},React.createElement(Input,{disabled:b,fullWidth:!0,id:A,inputProps:{onKeyDown:e=>{if(F)e.stopPropagation();else{const t=e.currentTarget;R(null),B(t.value,EntryMethod.Manual)}},title:x},inputRef:_,multiline:F,onBlur:e=>{e.currentTarget.value.length>0&&(R(null),B(e.currentTarget.value,EntryMethod.Manual))},onChange:e=>{g(e.currentTarget.value)},required:s,rows:F?M:void 0,spellCheck:!1,value:v}),React.createElement(Button,{"aria-label":N,className:scannerClasses.button,color:"primary",disabled:D||!C,onClick:P,ref:_,title:N},y?React.createElement(CloseIcon,null):i===ScanType.BarCode?React.createElement(ScanBarcode,null):i===ScanType.QrCode?React.createElement(ScanQr,null):React.createElement(ScanMulti,null)))))});export default Scanner;
|
|
@@ -12,13 +12,13 @@ interface StyledDialogProps {
|
|
|
12
12
|
clearCaption: string;
|
|
13
13
|
doneCaption: string;
|
|
14
14
|
format: string;
|
|
15
|
-
helperText: React.JSX.Element | null;
|
|
16
15
|
height: number;
|
|
16
|
+
helperText: React.JSX.Element | null;
|
|
17
17
|
host: FormHostMembers;
|
|
18
|
+
onClose: (confirm: boolean, dataUrl: string | undefined) => void;
|
|
18
19
|
title: React.JSX.Element | null;
|
|
19
20
|
undoCaption: string;
|
|
20
21
|
width: number;
|
|
21
|
-
onClose: (confirm: boolean, dataUrl: string | undefined) => void;
|
|
22
22
|
}
|
|
23
23
|
declare const SignatureDialog: ({ cancelCaption, clearCaption, doneCaption, format, height, helperText, host, title, undoCaption, width, onClose, }: StyledDialogProps) => React.JSX.Element;
|
|
24
24
|
export default SignatureDialog;
|
|
@@ -13,8 +13,6 @@ export type HistoryItem = DrawingHistoryItem | ImageHistoryItem;
|
|
|
13
13
|
* A history item for the end user drawing a line on the dialog.
|
|
14
14
|
*/
|
|
15
15
|
type DrawingHistoryItem = {
|
|
16
|
-
/** The tool used to draw the line. This determines which canvas the line is drawn onto. */
|
|
17
|
-
tool: ToolType;
|
|
18
16
|
/** The style for the ends of the line. */
|
|
19
17
|
lineCap: CanvasLineCap;
|
|
20
18
|
/** The thickness of the line. */
|
|
@@ -23,22 +21,24 @@ type DrawingHistoryItem = {
|
|
|
23
21
|
points: Point[];
|
|
24
22
|
/** The style used to draw the line. This is typically a colour. */
|
|
25
23
|
strokeStyle: string | CanvasGradient | CanvasPattern;
|
|
24
|
+
/** The tool used to draw the line. This determines which canvas the line is drawn onto. */
|
|
25
|
+
tool: ToolType;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
28
|
* A history item for re-editing an existing sketch.
|
|
29
29
|
* This replaces the `DrawingHistoryItem` entries from the initial editing of the form.
|
|
30
30
|
*/
|
|
31
31
|
type ImageHistoryItem = {
|
|
32
|
-
/** The pen tool is specified here to ensure the image is drawn on the correct canvas. */
|
|
33
|
-
tool: "pen";
|
|
34
32
|
/** A data url representing the previous annotations. */
|
|
35
33
|
dataUrl: string;
|
|
34
|
+
/** The pen tool is specified here to ensure the image is drawn on the correct canvas. */
|
|
35
|
+
tool: "pen";
|
|
36
36
|
};
|
|
37
37
|
export interface SketchDialogResult {
|
|
38
38
|
dataUrl: string;
|
|
39
|
+
height: number;
|
|
39
40
|
history: HistoryItem[];
|
|
40
41
|
width: number;
|
|
41
|
-
height: number;
|
|
42
42
|
}
|
|
43
43
|
interface StyledDialogProps {
|
|
44
44
|
dataUrl: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import FormLabel,{formLabelClasses}from"@vertigis/react-ui/FormLabel";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useCallback}from"react";import*as React from"react";import{hasContent,isMarkdown,markdownToText}from"../textUtilities.js";import{getAccessibleDescriptionId,getDescriptionId,getLabelId}from"../utils.js";import{formClasses}from"./Form.js";import Markdown from"./Markdown.js";export function renderTitle(e,r,t,o,s){return hasContent(t)?React.createElement(FormLabel,{className:formClasses.formElementTitle,component:s,htmlFor:o,id:getLabelId(e),required:!!r},React.createElement(Markdown,{inline:!0,text:t})):null}const DescriptionMarkdown=styled(Markdown)(({theme:{palette:e}})=>({[`&.${formLabelClasses.disabled}`]:{color:e.text.disabled}}));export function renderDescription(e,r,t,o){return hasContent(e)?React.createElement(DescriptionMarkdown,{className:clsx(o,{[formLabelClasses.disabled]:!t}),id:getDescriptionId(r),text:e}):null}export function renderAccessibleDescription(e,r,t,o){let s=o.translateText(e);if(!s){const e=o.translateText(r);s=isMarkdown(e)?markdownToText(e.markdown):e}return s?React.createElement(Box,{hidden:!0,id:getAccessibleDescriptionId(t)},s):null}const ErrorMarkdown=styled(Markdown)(({theme:{palette:e}})=>({color:e.custom.errorText,fontStyle:"italic",backgroundColor:e.custom.errorBackground}));export function renderError(e){return hasContent(e)?React.createElement(ErrorMarkdown,{role:"alert",text:e}):null}export function useFocusCallback(e,r,t){return useCallback(e=>{Array.isArray(e?.thumbRefs)&&e.thumbRefs.length>0&&(e=e.thumbRefs[0].current),null===e||e.disabled||t.renderFocus(e,r)},[e,r,t])}
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import FormLabel,{formLabelClasses}from"@vertigis/react-ui/FormLabel";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useCallback}from"react";import*as React from"react";import{hasContent,isMarkdown,markdownToText}from"../textUtilities.js";import{getAccessibleDescriptionId,getDescriptionId,getLabelId}from"../utils.js";import{formClasses}from"./Form.js";import Markdown from"./Markdown.js";export function renderTitle(e,r,t,o,s){return hasContent(t)?React.createElement(FormLabel,{className:formClasses.formElementTitle,component:s,htmlFor:o,id:getLabelId(e),required:!!r},React.createElement(Markdown,{inline:!0,text:t})):null}const DescriptionMarkdown=styled(Markdown)(({theme:{palette:e}})=>({[`&.${formLabelClasses.disabled}`]:{color:e.text.disabled}," p:first-of-type":{marginTop:0}}));export function renderDescription(e,r,t,o){return hasContent(e)?React.createElement(DescriptionMarkdown,{className:clsx(o,{[formLabelClasses.disabled]:!1===t}),id:getDescriptionId(r),text:e}):null}export function renderAccessibleDescription(e,r,t,o){let s=o.translateText(e);if(!s){const e=o.translateText(r);s=isMarkdown(e)?markdownToText(e.markdown):e}return s?React.createElement(Box,{hidden:!0,id:getAccessibleDescriptionId(t)},s):null}const ErrorMarkdown=styled(Markdown)(({theme:{palette:e}})=>({color:e.custom.errorText,fontStyle:"italic",backgroundColor:e.custom.errorBackground}));export function renderError(e){return hasContent(e)?React.createElement(ErrorMarkdown,{role:"alert",text:e}):null}export function useFocusCallback(e,r,t){return useCallback(e=>{Array.isArray(e?.thumbRefs)&&e.thumbRefs.length>0&&(e=e.thumbRefs[0].current),null===e||e.disabled||t.renderFocus(e,r)},[e,r,t])}
|
package/forms/dateUtilities.d.ts
CHANGED
|
@@ -103,8 +103,8 @@ export declare function getLocaleDateFormatTokenPosition(token: "yyyy" | "dd" |
|
|
|
103
103
|
* start and end dates
|
|
104
104
|
*/
|
|
105
105
|
type DateRangeLike = (Date | number | string)[] | {
|
|
106
|
-
startDate: Date | string;
|
|
107
106
|
endDate: Date | string;
|
|
107
|
+
startDate: Date | string;
|
|
108
108
|
};
|
|
109
109
|
/**
|
|
110
110
|
* Attempts to convert user input into a valid DateRangeRef if possible. If arrays of dates,
|
|
@@ -126,8 +126,8 @@ type PartialValue = void | boolean | number | string | {
|
|
|
126
126
|
[name: string]: any;
|
|
127
127
|
format?: PartialValue | void;
|
|
128
128
|
locale?: string;
|
|
129
|
-
timezone?: string;
|
|
130
129
|
refValueType?: string;
|
|
130
|
+
timezone?: string;
|
|
131
131
|
value?: number;
|
|
132
132
|
};
|
|
133
133
|
export declare function makeProperValue(value: number | string | PartialValue): Date | undefined;
|
|
@@ -7,12 +7,12 @@ import type * as defs from "../FormDefinition";
|
|
|
7
7
|
export type Text = string | defs.MarkdownRef;
|
|
8
8
|
/** Properties common to all Elements, except the Header. */
|
|
9
9
|
export interface ElementBase {
|
|
10
|
+
/** Indicates the name of the style that will be applied to the element. */
|
|
11
|
+
readonly styleName?: string;
|
|
10
12
|
/** Indicates the type of the element. */
|
|
11
13
|
readonly type?: string;
|
|
12
14
|
/** Indicates that the element is visible or not. */
|
|
13
15
|
readonly visible?: boolean;
|
|
14
|
-
/** Indicates the name of the style that will be applied to the element. */
|
|
15
|
-
readonly styleName?: string;
|
|
16
16
|
}
|
|
17
17
|
/** Exposes the Element.enabled and Element.error properties. */
|
|
18
18
|
export interface EditableElement {
|
package/forms/index.d.ts
CHANGED
|
@@ -83,13 +83,13 @@ export type PropertyChangeEvent<TSettableProps, TSetProperty> = Unionize<{
|
|
|
83
83
|
export interface FormElementRegistration<TProps extends FormElementProps<any> = FormElementProps, TSettableProps extends SettablePropsFromProps<TProps> = SettablePropsFromProps<TProps>> {
|
|
84
84
|
/** The React component definition of the form element. */
|
|
85
85
|
component: React.ComponentType<TProps>;
|
|
86
|
-
/** The unique identifier of the element. */
|
|
87
|
-
id: string;
|
|
88
86
|
/**
|
|
89
87
|
* Generate the initial properties of the form element. This will be assigned to
|
|
90
88
|
* the element properties before first render.
|
|
91
89
|
*/
|
|
92
90
|
getInitialProperties?: () => Partial<TSettableProps>;
|
|
91
|
+
/** The unique identifier of the element. */
|
|
92
|
+
id: string;
|
|
93
93
|
/**
|
|
94
94
|
* This function will be invoked prior to updating a property of the element
|
|
95
95
|
* state. It will be invoked even if the element isn't currently visible.
|
|
@@ -42,14 +42,6 @@ export declare enum NumberDisplayFormat {
|
|
|
42
42
|
* Options supported by {@link format}.
|
|
43
43
|
*/
|
|
44
44
|
export interface FormatOptions {
|
|
45
|
-
/**
|
|
46
|
-
* The locale to use when formatting the number.
|
|
47
|
-
*/
|
|
48
|
-
locale: string;
|
|
49
|
-
/**
|
|
50
|
-
* The number format. See {@link NumberFormatter.format}.
|
|
51
|
-
*/
|
|
52
|
-
format?: NumberDisplayFormat;
|
|
53
45
|
/**
|
|
54
46
|
* See NumberFormat.currency.
|
|
55
47
|
*/
|
|
@@ -58,10 +50,18 @@ export interface FormatOptions {
|
|
|
58
50
|
* The custom number format. Required for a format type of 'Custom'
|
|
59
51
|
*/
|
|
60
52
|
customDisplayFormat?: string;
|
|
53
|
+
/**
|
|
54
|
+
* The number format. See {@link NumberFormatter.format}.
|
|
55
|
+
*/
|
|
56
|
+
format?: NumberDisplayFormat;
|
|
61
57
|
/**
|
|
62
58
|
* See NumberFormat.precision.
|
|
63
59
|
*/
|
|
64
60
|
fractionalDigits?: number;
|
|
61
|
+
/**
|
|
62
|
+
* The locale to use when formatting the number.
|
|
63
|
+
*/
|
|
64
|
+
locale: string;
|
|
65
65
|
}
|
|
66
66
|
export declare const DEFAULT_CURRENCY = "USD";
|
|
67
67
|
export declare const DEFAULT_CUSTOM_FORMAT = "#.##";
|
|
@@ -93,8 +93,8 @@ export declare function areValuesEqual(elementValue: defs.Value | undefined, new
|
|
|
93
93
|
* We use string rather than React.Node so that we can share this between runtime and designer without discrepancies between the typings.
|
|
94
94
|
*/
|
|
95
95
|
interface Mark {
|
|
96
|
-
value: number;
|
|
97
96
|
label?: string;
|
|
97
|
+
value: number;
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
100
|
* Gets marks to be used with the @vertigis/react-ui/Slider component.
|
package/forms/utils.d.ts
CHANGED
|
@@ -4,6 +4,12 @@ import type { ElementTuple } from "./FormDefinition";
|
|
|
4
4
|
import type * as defs from "./FormDefinition";
|
|
5
5
|
import type { FormElementProps } from "./index";
|
|
6
6
|
import type { Theme } from "@vertigis/react-ui/styles";
|
|
7
|
+
export interface DebounceResult {
|
|
8
|
+
/** Do not invoke the scheduled function at all. */
|
|
9
|
+
cancel: () => void;
|
|
10
|
+
/** Invoke the scheduled function immediately, without any further delay. */
|
|
11
|
+
now: () => void;
|
|
12
|
+
}
|
|
7
13
|
/**
|
|
8
14
|
* Constraints for a property that may specify a default value and bounds.
|
|
9
15
|
*/
|
|
@@ -33,12 +39,6 @@ export interface PropertyConstraintsWithMinimum<T> extends PropertyConstraints<T
|
|
|
33
39
|
export interface FormElementPropertyConstraints {
|
|
34
40
|
[key: string]: PropertyConstraints<any> | undefined;
|
|
35
41
|
}
|
|
36
|
-
export interface DebounceResult {
|
|
37
|
-
/** Invoke the scheduled function immediately, without any further delay. */
|
|
38
|
-
now: () => void;
|
|
39
|
-
/** Do not invoke the scheduled function at all. */
|
|
40
|
-
cancel: () => void;
|
|
41
|
-
}
|
|
42
42
|
/**
|
|
43
43
|
* Exporting text since it was split out from here into it's own file as part of the designer
|
|
44
44
|
* CRA migration. This was necessary since babel does not support namespaces.
|
|
@@ -151,12 +151,6 @@ export declare function isNumberRef(value: defs.Value | undefined): value is def
|
|
|
151
151
|
export declare function sanitizeGeometryRef(value: defs.Value | undefined): defs.GeometryRef | undefined;
|
|
152
152
|
/** @product This is intended for internal use only within VertiGIS Studio products. */
|
|
153
153
|
export declare function createGeometryRef(format: defs.GeometryFormat): defs.GeometryRef;
|
|
154
|
-
export interface DebounceResult {
|
|
155
|
-
/** Invoke the scheduled function immediately, without any further delay. */
|
|
156
|
-
now: () => void;
|
|
157
|
-
/** Do not invoke the scheduled function at all. */
|
|
158
|
-
cancel: () => void;
|
|
159
|
-
}
|
|
160
154
|
/**
|
|
161
155
|
* Creates a debounced function that will invoke the given function
|
|
162
156
|
* only after the function has not been called for the duration of the delay.
|
package/libs/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "5.
|
|
1
|
+
export declare const VERSION = "5.50.0+14";
|
package/libs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION="5.
|
|
1
|
+
export const VERSION="5.50.0+14";
|
package/package.json
CHANGED
package/ui/UIService.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ import type { ElementType, ReactNode } from "react";
|
|
|
6
6
|
* to allow Web to call its version.
|
|
7
7
|
*/
|
|
8
8
|
export declare class UIService {
|
|
9
|
-
private _children;
|
|
10
9
|
private _DialogComponent;
|
|
10
|
+
private _children;
|
|
11
11
|
private resolve;
|
|
12
12
|
private root;
|
|
13
13
|
private readonly rootElementId;
|
|
@@ -16,8 +16,8 @@ export declare class UIService {
|
|
|
16
16
|
* @param rootElementId The id of the element in the DOM that will contain the dialog.
|
|
17
17
|
*/
|
|
18
18
|
constructor(rootElementId: string);
|
|
19
|
-
displayDialog: (children: (closeDialog: () => void) => ReactNode, DialogComponent: ElementType<any>) => Promise<void>;
|
|
20
19
|
closeDialog: () => void;
|
|
20
|
+
displayDialog: (children: (closeDialog: () => void) => ReactNode, DialogComponent: ElementType<any>) => Promise<void>;
|
|
21
21
|
renderDialog: (open: boolean) => null | undefined;
|
|
22
22
|
wrapProviders: (content: React.JSX.Element) => React.JSX.Element;
|
|
23
23
|
}
|
package/ui/UIService.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{createRoot}from"react-dom/client";export class UIService{constructor(e){this.
|
|
1
|
+
import React from"react";import{createRoot}from"react-dom/client";export class UIService{constructor(e){this.closeDialog=()=>{this.renderDialog(!1),this.resolve(),this._children=void 0,this._DialogComponent=void 0,this.resolve=void 0},this.displayDialog=(e,o)=>new Promise(t=>{this._children=e(this.closeDialog),this._DialogComponent=o,this.resolve=t,this.renderDialog(!0)}),this.renderDialog=e=>{const o=this._DialogComponent,t=this._children;if(!o)return null;if(!this.root){const e=document.getElementById(this.rootElementId);this.root=createRoot(e)}this.root.render(this.wrapProviders(React.createElement(o,{open:e},t)))},this.wrapProviders=e=>(console.warn("UIService.wrapProviders should be overridden by the client."),e),this.rootElementId=e}}
|