@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.
Files changed (180) hide show
  1. package/Collections.d.ts +27 -27
  2. package/Collections.js +1 -1
  3. package/EnumUtils.d.ts +5 -5
  4. package/EnumUtils.js +1 -1
  5. package/Errors.d.ts +27 -27
  6. package/Hooks.d.ts +2 -2
  7. package/IActivityHandler.d.ts +14 -14
  8. package/LanguageStringUtils.js +1 -1
  9. package/ProgramInspectorFacility.d.ts +1 -1
  10. package/ProgramInspectorFacility.js +1 -1
  11. package/Task.d.ts +3 -3
  12. package/Task.js +1 -1
  13. package/TemplateUtils.d.ts +2 -2
  14. package/Validation.d.ts +10 -1
  15. package/Validation.js +1 -1
  16. package/activities/app/GetApplicationData.d.ts +1 -1
  17. package/activities/app/GetApplicationData.js +1 -1
  18. package/activities/app/RemoveApplicationData.d.ts +1 -1
  19. package/activities/app/RemoveApplicationData.js +1 -1
  20. package/activities/app/SetApplicationData.d.ts +1 -1
  21. package/activities/app/SetApplicationData.js +1 -1
  22. package/activities/arcgis/AddFeatures.d.ts +7 -4
  23. package/activities/arcgis/AddFeatures.js +1 -1
  24. package/activities/arcgis/AreaEngineTask.d.ts +1 -1
  25. package/activities/arcgis/AreaEngineTask.js +1 -1
  26. package/activities/arcgis/BufferEngineTask.d.ts +1 -1
  27. package/activities/arcgis/BufferEngineTask.js +1 -1
  28. package/activities/arcgis/CastGeometry.d.ts +4 -4
  29. package/activities/arcgis/CompareGeometries.d.ts +1 -1
  30. package/activities/arcgis/CompareGeometries.js +1 -1
  31. package/activities/arcgis/DeleteFeatures.d.ts +7 -3
  32. package/activities/arcgis/DeleteFeatures.js +1 -1
  33. package/activities/arcgis/DifferenceEngineTask.d.ts +1 -1
  34. package/activities/arcgis/DifferenceEngineTask.js +1 -1
  35. package/activities/arcgis/FlipEngineTask.d.ts +1 -1
  36. package/activities/arcgis/FlipEngineTask.js +1 -1
  37. package/activities/arcgis/GenerateArcGisToken.d.ts +2 -2
  38. package/activities/arcgis/GeoprocessingAsync.d.ts +2 -2
  39. package/activities/arcgis/GetAttributeValue.d.ts +1 -0
  40. package/activities/arcgis/GetAttributeValues.d.ts +1 -0
  41. package/activities/arcgis/GetCurrentPosition.d.ts +28 -28
  42. package/activities/arcgis/GetFeatureGeometries.d.ts +2 -2
  43. package/activities/arcgis/GetFeatureSetExtent.d.ts +2 -2
  44. package/activities/arcgis/GetFormElementItemsFromFeatures.d.ts +2 -2
  45. package/activities/arcgis/GetFormElementItemsFromFeatures.js +1 -1
  46. package/activities/arcgis/GetGeometryExtent.d.ts +2 -2
  47. package/activities/arcgis/LengthEngineTask.d.ts +1 -1
  48. package/activities/arcgis/LengthEngineTask.js +1 -1
  49. package/activities/arcgis/MapProvider.d.ts +92 -92
  50. package/activities/arcgis/MapProvider.js +1 -1
  51. package/activities/arcgis/NearestCoordinateEngineTask.d.ts +6 -6
  52. package/activities/arcgis/NearestVertexEngineTask.d.ts +6 -6
  53. package/activities/arcgis/NearestVerticesEngineTask.d.ts +6 -6
  54. package/activities/arcgis/ProjectServiceTask.js +1 -1
  55. package/activities/arcgis/ResetLayerDefinitionExpression.d.ts +2 -2
  56. package/activities/arcgis/RunPrint.d.ts +2 -2
  57. package/activities/arcgis/RunPrint.js +1 -1
  58. package/activities/arcgis/RunReport.js +1 -1
  59. package/activities/arcgis/RunWorkflow.d.ts +4 -4
  60. package/activities/arcgis/RunWorkflow.js +1 -1
  61. package/activities/arcgis/SetImageryLayerOptions.d.ts +2 -2
  62. package/activities/arcgis/SetLayerDefinitionExpression.d.ts +2 -2
  63. package/activities/arcgis/SetLayerProperty.d.ts +2 -2
  64. package/activities/arcgis/SetLayerVisibility.d.ts +2 -2
  65. package/activities/arcgis/SetViewExtent.d.ts +4 -4
  66. package/activities/arcgis/SetViewpoint.d.ts +2 -2
  67. package/activities/arcgis/TypeChecking.d.ts +3 -3
  68. package/activities/arcgis/UpdateFeatures.d.ts +6 -3
  69. package/activities/arcgis/UpdateFeatures.js +1 -1
  70. package/activities/arcgis/libs/arcGisRestApi.d.ts +4 -4
  71. package/activities/arcgis/libs/shared.d.ts +9 -0
  72. package/activities/arcgis/libs/shared.js +1 -0
  73. package/activities/arcgis/printing.d.ts +14 -14
  74. package/activities/arcgis/runUtils.d.ts +2 -2
  75. package/activities/arcgis/runUtils.js +1 -1
  76. package/activities/arcgis/shared.d.ts +9 -2
  77. package/activities/arcgis/shared.js +1 -1
  78. package/activities/core/CalculateDate.d.ts +1 -1
  79. package/activities/core/CalculateDate.js +1 -1
  80. package/activities/core/ChannelProvider.d.ts +42 -42
  81. package/activities/core/ChannelProvider.js +1 -1
  82. package/activities/core/ForEach.d.ts +4 -4
  83. package/activities/core/FormatDate.d.ts +21 -21
  84. package/activities/core/FormatDate.js +1 -1
  85. package/activities/core/GetFirstItem.d.ts +1 -0
  86. package/activities/core/GetItemAtIndex.d.ts +1 -0
  87. package/activities/core/GetLastItem.d.ts +1 -0
  88. package/activities/core/GetWorkflowInputs.d.ts +6 -2
  89. package/activities/core/Log.d.ts +1 -1
  90. package/activities/core/Log.js +1 -1
  91. package/activities/core/Loop.d.ts +2 -2
  92. package/activities/core/ParseJson.d.ts +1 -0
  93. package/activities/core/WebRequest.d.ts +2 -2
  94. package/activities/csv/ParseCsv.d.ts +1 -0
  95. package/activities/essentials/GetEssentialsSite.d.ts +2 -2
  96. package/activities/essentials/RunEssentialsWorkflow.d.ts +2 -2
  97. package/activities/essentials/RunEssentialsWorkflow.js +1 -1
  98. package/activities/forms/DisplayForm.d.ts +6 -6
  99. package/activities/forms/DisplayForm.js +1 -1
  100. package/activities/forms/FormActor.d.ts +22 -22
  101. package/activities/forms/FormRenderer.d.ts +2 -2
  102. package/activities/forms/FormRenderer.js +1 -1
  103. package/activities/forms/GetFormElementItemsFromCollection.d.ts +7 -7
  104. package/activities/forms/GetFormElementItemsFromCollection.js +1 -1
  105. package/activities/forms/SetFormElementProperty.d.ts +1 -1
  106. package/activities/math/Max.d.ts +1 -1
  107. package/activities/math/Max.js +1 -1
  108. package/activities/math/Min.d.ts +1 -1
  109. package/activities/math/Min.js +1 -1
  110. package/activities/server/RunApplication.d.ts +2 -2
  111. package/activities/server/RunPython.d.ts +4 -4
  112. package/activities/ui/DialogContent.d.ts +6 -6
  113. package/activities/ui/DialogProvider.d.ts +5 -5
  114. package/activities/ui/DialogProvider.js +1 -1
  115. package/definition/ActivityInput.d.ts +6 -6
  116. package/definition/ProgramInspector.d.ts +118 -118
  117. package/definition/ProgramInspector.js +1 -1
  118. package/definition/Reference.d.ts +2 -2
  119. package/definition/Resource.d.ts +15 -15
  120. package/definition/Transition.d.ts +4 -4
  121. package/diagnostics/ConsoleDebugLogger.d.ts +2 -2
  122. package/diagnostics/ConsoleDebugLogger.js +1 -1
  123. package/execution/ActivityContext.d.ts +35 -35
  124. package/execution/ActivityContext.js +1 -1
  125. package/execution/ActivityContextProxy.d.ts +7 -7
  126. package/execution/ActivityContextProxy.js +1 -1
  127. package/execution/AmbientState.d.ts +29 -29
  128. package/execution/AmbientState.js +1 -1
  129. package/execution/AmbientStateProxy.d.ts +10 -10
  130. package/execution/AmbientStateProxy.js +1 -1
  131. package/execution/AsyncContext.d.ts +1 -1
  132. package/execution/AsyncContext.js +1 -1
  133. package/execution/Engine.d.ts +27 -28
  134. package/execution/Engine.js +1 -1
  135. package/execution/IDebugSession.d.ts +10 -10
  136. package/execution/MonikerFrame.d.ts +2 -2
  137. package/execution/MonikerFrame.js +1 -1
  138. package/execution/Proxy.d.ts +1 -1
  139. package/execution/Proxy.js +1 -1
  140. package/execution/StepContext.d.ts +1 -1
  141. package/execution/StepContext.js +1 -1
  142. package/execution/TransitionContext.d.ts +1 -1
  143. package/execution/TransitionContext.js +1 -1
  144. package/forms/ExclusiveTimer.d.ts +2 -2
  145. package/forms/ExclusiveTimer.js +1 -1
  146. package/forms/FormComponent.d.ts +7 -7
  147. package/forms/FormComponent.js +1 -1
  148. package/forms/FormDefinition.d.ts +50 -42
  149. package/forms/FormHost.d.ts +161 -146
  150. package/forms/FormHost.js +1 -1
  151. package/forms/FormPresenterHost.d.ts +42 -42
  152. package/forms/MutuallyExclusiveSectionGroup.d.ts +6 -6
  153. package/forms/MutuallyExclusiveSectionGroup.js +1 -1
  154. package/forms/NumberParser.d.ts +2 -2
  155. package/forms/branding/WorkflowColor.d.ts +5 -5
  156. package/forms/branding/WorkflowColor.js +1 -1
  157. package/forms/components/AutoComplete.js +1 -1
  158. package/forms/components/Button.js +1 -1
  159. package/forms/components/DateTimePicker.js +1 -1
  160. package/forms/components/Form.js +1 -1
  161. package/forms/components/FormLabelNumberField.d.ts +4 -4
  162. package/forms/components/GeometryPickerListItem.d.ts +4 -4
  163. package/forms/components/ItemPicker.js +1 -1
  164. package/forms/components/NumberRangeSlider.js +1 -1
  165. package/forms/components/NumberSlider.js +1 -1
  166. package/forms/components/Scanner.js +1 -1
  167. package/forms/components/SignatureDialog.d.ts +2 -2
  168. package/forms/components/SketchDialog.d.ts +5 -5
  169. package/forms/components/common.js +1 -1
  170. package/forms/dateUtilities.d.ts +2 -2
  171. package/forms/elements/types.d.ts +2 -2
  172. package/forms/index.d.ts +2 -2
  173. package/forms/numberFormatter.d.ts +8 -8
  174. package/forms/numberUtilities.d.ts +1 -1
  175. package/forms/utils.d.ts +6 -12
  176. package/libs/version.d.ts +1 -1
  177. package/libs/version.js +1 -1
  178. package/package.json +1 -1
  179. package/ui/UIService.d.ts +2 -2
  180. package/ui/UIService.js +1 -1
@@ -1 +1 @@
1
- import rgba from"color-rgba";export default class WorkflowColor{get r(){return this.values[0]}get g(){return this.values[1]}get b(){return this.values[2]}get a(){return this.values[3]}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]}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})`}static fromJSON(t){if(4!==t.length)throw new Error("Invalid JSON. The array must contain four values.");return new WorkflowColor(t)}}
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),P=useRef(!1),R=useRef(),I=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),P.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),P.current||h("")),k(t||null)},[o]),useEffect(()=>{P.current||I.current||h(""),P.current=!1,I.current=!1},[i]);const W=y.renderText(i);return React.createElement(FormElement,{className:e,element:n,inputId:R.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)=>{I.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:$},R.current=t.id,React.createElement(FormLabelTextField,{error:!!s,...t,fullWidth:!0,inputRef:N})),slotProps:{popper:{component:StyledPopper}},value:E}))});export default AutoComplete;
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({classNameProp: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
+ 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:l,setValue:m,tooltip:n,value:c},u)=>{const p=useContext(HostContext),[d,f]=useState(!1),[T,k]=useState(!1),[g,x]=useState(!1),[E,D]=useState(null),P=useRef(),v=p.deriveLocale();console.log(`DateTimePicker: locale ${v}`);const F={locale:v,timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},C=useRef(!0),y=useFocusCallback(r,s,p),R=p.renderText(n),B="datetime",S=isInvalidError(o);useEffect(()=>{const e=makeProperValue(c),t=getNewElementValue(e,B,F);areValuesEqual(c,t)||m(t,!1),D(e||null)},[c]),useEffect(()=>{if(!g&&!T)if(d)S||l("error",{status:"invalid"});else{if(S&&l("error",void 0),C.current)return void(C.current=!1);b()}C.current=!1},[d,T,g]);const b=()=>{const e=getNewElementValue(E,B,F);areValuesEqual(c,e)||m(e)},V=e=>{"enter"!==getKeyString(e)||b()},{min:j,max:w}=getDateBounds(a),N=getAmPm(a),I=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),q=p.renderText(i);return React.createElement(FormElement,{className:e,element:t,inputId:I,name:s,ref:u},e=>React.createElement(React.Fragment,null,S&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},P.current),React.createElement(StyledDateTimePicker,{ampm:N,disabled:!r,key:"date-picker",inputRef:e=>{y(e),e&&(P.current=e.dataset.formatString)},maxDateTime:w,minDateTime:j,onChange:e=>D(e),onClose:()=>x(!1),onError:e=>f(!!e),onOpen:()=>x(!0),open:g,slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!o,id:I,inputProps:{...e,placeholder:q},onBlur:()=>k(!1),onFocus:()=>k(!0),onKeyDown:V,title:R}},value:E})))});export default DateTimePicker;
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;
@@ -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:c}=t.props,{form:l}=c;if(useEffect(()=>{let e=!0;const t=c.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:c,type:"header",children:[]},m={host:c,type:"body",children:[]},a={host:c,type:"main",children:[]},d={host:c,type:"footer",children:[]},f={host:c,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:c,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:c,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=l.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(l.elements).sort(isSingleColumnLayout(l.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:c,type:"element",name:t,children:[]}))}else f.children.push(React.createElement(FormElementComponent,{key:t,host:c,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=l.elements[r],c=i.format;t&&c!==t&&n(),F(r)&&(isMutuallyExclusiveSection(i)?e?e.push(o):(e=[o],t=c):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:c,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||c.post("clicked"))},ref:function(e){c.renderFocus(e)}},React.createElement(LocalizationProvider,{dateAdapter:AdapterDateFns,adapterLocale:o,localeText:{...r,start:c.renderText("@date-range-picker-start-text"),end:c.renderText("@date-range-picker-end-text"),cancelButtonLabel:c.renderText("@common-cancel"),clearButtonLabel:c.renderText("@common-clear"),okButtonLabel:c.renderText("@common-ok"),todayButtonLabel:c.renderText("@common-today")}},w))};export default Form;
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:s,orientation:a,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(s,"item-picker",C)},[h,b]=useState(""),x=o||{};let C=p;const v=useFocusCallback(i,s,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,a=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:a,"data-id":e,onBlur:r?e=>{delete y(e.currentTarget.dataset.id).focused,I.renderState(s,"item-picker",C)}:void 0,onFocus:r?e=>{y(e.currentTarget.dataset.id).focused=!0,I.renderState(s,"item-picker",C)}:void 0,onMouseOver:r?e=>{y(e.currentTarget.dataset.id).pending=!0,I.renderState(s,"item-picker",C)}:void 0,onMouseOut:r?e=>{delete y(e.currentTarget.dataset.id).pending,I.renderState(s,"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:s,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(s,"item-picker"):I.renderState(s,"item-picker",C)},X="multiple"===c&&F.length>0,z=clsx(itemPickerClasses.items,{[itemPickerClasses.horizontal]:a===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=h?React.createElement(InputAdornment,{position:"end"},React.createElement(IconButton,{disabled:!i,onClick:B,title:I.renderText("@common-clear")},React.createElement(Close,{className:itemPickerClasses.clearIcon}))):null,W=d?`${makeUniqueId(s)}-filter`:void 0;let D,K=I.renderText("@item-picker-select");return X&&U>0&&(K=I.renderText("@item-picker-select-visible"),H>0&&(D=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:W,name:s,ref:g},React.createElement(Stack,{spacing:u},d&&React.createElement(Input,{disabled:!i,endAdornment:V,error:!1,fullWidth:!0,id:W,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,K),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")})),D&&React.createElement(Typography,{variant:"subtitle2"},D)),React.createElement(List,{className:z,dense:!0},F)))});export default ItemPicker;
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,title:l,tooltip:u,value:c,setValue:d},p)=>{const b=useContext(HostContext),f=b.deriveLocale(),{currency:C,customDisplayFormat:F,decimals:g,displayFormat:N,endAdornment:y,isCustom:R,isFixedPoint:S,isPercent:x,numberConstraints:E,startAdornment:D}=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(f,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(f);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:A}=E,v=E.maximum,T=E.minimum,[I,P]=useState(!1),[L,M]=useState(!1),[U,h]=useState([T,v]),k=useMemo(()=>N===NumberDisplayFormat.CUSTOM?[countDecimalsInCustomFormat(F,U[0]),countDecimalsInCustomFormat(F,U[1])]:[-1,-1],[U]),$=useRef(!0),[j,w]=useMemo(()=>{const e=makeUniqueId(i);return[e,`${e}-slider-input`]},[i]),O=!1!==n,_=!!m,X=!1!==a;let B=x?g-2:g;B=Math.max(0,B);const V={currency:C,customDisplayFormat:F,format:N,fractionalDigits:B,locale:f},K=()=>{const e=getNumberSliderValues(U,E);U[0]===e[0]&&U[1]===e[1]||h(e),Y(c,e)||d(e)};useEffect(()=>{$.current?$.current=!1:L?q(U):I||K()},[I,L,U]),useEffect(()=>{const e=getNumberSliderValues(c,E);Y(c,e)||d(e,!1),Y(U,e)||h(e)},[c]);const Y=(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])),q=useMemo(()=>throttle(e=>{s("dragged",e)}),[]),z=useFocusCallback(r,i,b),G=b.renderText(u),H=!r&&!L,J=X?{max:v,min:T,onBlur:()=>{P(!1)},onFocus:()=>{P(!0)},step:A,title:G}:void 0,Q=R?k:[g,g],W=e=>{"enter"===getKeyString(e)&&K()};return React.createElement(StyledFormElement,{className:e,element:t,inputId:`${w}-0`,name:i,ref:p},React.createElement(Box,{className:numberRangeSliderClasses.container},React.createElement(Slider,{disabled:H,getAriaLabel:()=>b.renderText(l),getAriaValueText:e=>b.formatNumber(e,V),marks:getMarks(v,T,A,V,O,_),max:v,min:T,onChange:(e,t)=>{M(!0),Array.isArray(t)&&h(t)},onChangeCommitted:()=>{M(!1)},slotProps:{input:()=>({ref:e=>{null===e||e.id||(e.id=`${w}-${e.getAttribute("data-index")}`),z(e)}})},step:A,title:G,value:U,valueLabelDisplay:"on",valueLabelFormat:e=>b.formatNumber(e,V)}),!1!==X&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(R)return customFormatNumber(e,F,V.locale);x&&(e*=100);const t={format:S?V.format:void 0,fractionalDigits:V.fractionalDigits,locale:V.locale};return b.formatNumber(e,t)},parseNumber:e=>{if(R)return parseCustomFormattedNumber(e,F,V.locale);let t=b.coerceNumber(e,f);return x&&(t=preciseRound(t/100,g)),t}}},React.createElement(Stack,{direction:"row",className:numberRangeSliderClasses.inputContainer},React.createElement(FormLabelNumberField,{disabled:!r,id:`${j}-startInput`,inputProps:J,endAdornment:y,label:b.renderText("@common-start"),max:v,maxDecimalPlaces:Q[0],min:T,onChange:e=>{void 0===e&&(e=T),h([e,U[1]])},onKeyDown:W,startAdornment:D,value:U[0]}),React.createElement(Box,{className:numberRangeSliderClasses.toLabel}," ",b.renderText("@common-to")," "),React.createElement(FormLabelNumberField,{disabled:!r,endAdornment:y,id:`${j}-endInput`,inputProps:J,label:b.renderText("@common-end"),max:v,maxDecimalPlaces:Q[1],min:T,onChange:e=>{void 0===e&&(e=v),h([U[0],e])},onKeyDown:W,startAdornment:D,value:U[1]})))))});export default NumberRangeSlider;
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,title:l,tooltip:c,value:p,setValue:d},f)=>{const b=useContext(HostContext),F=b.deriveLocale(),{currency:y,customDisplayFormat:C,decimals:N,displayFormat:g,endAdornment:E,isCustom:S,isFixedPoint:x,isPercent:D,numberConstraints:R,startAdornment:I}=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(F,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(F);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:A}=R,T=R.maximum,v=R.minimum,[M,P]=useState(!1),[U,h]=useState(!1),[k,L]=useState(v),B=useMemo(()=>g===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(C,k):-1,[k]),O=useRef(!0),V=`${makeUniqueId(i)}-input`,j=!1!==s,w=!!n,_=!1!==m;let q=D?N-2:N;q=Math.max(0,q);const $={currency:y,customDisplayFormat:C,format:g,fractionalDigits:q,locale:F},X=e=>({refValueType:"number",format:{currency:y,customDisplayFormat:C,displayFormat:g,lowerBound:v,precision:N,step:A,upperBound:T},display:b.formatNumber(e,$),numeric:e}),z=()=>{const e=getNumberSliderValues(k,R,!0)[0];e!==k&&L(e);const t=X(e);areValuesEqual(p,t)||d(t)};useEffect(()=>{O.current?O.current=!1:U?K(k):M||z()},[M,U,k]),useEffect(()=>{const e=getNumberSliderValues(p,R,!0)[0],t=X(e);areValuesEqual(p,t)||d(t,!1),k!==e&&L(e)},[p]);const K=useMemo(()=>throttle(e=>{u("dragged",X(e))}),[]),Y=useFocusCallback(r,i,b),H=b.renderText(c),G=!r&&!U,J=!r,Q=S?B:N;return React.createElement(StyledFormElement,{className:e,element:t,inputId:V,name:i,ref:f},React.createElement(Box,{className:numberSliderClasses.container},React.createElement(Slider,{disabled:G,getAriaLabel:()=>b.renderText(l),getAriaValueText:e=>b.formatNumber(e,$),marks:getMarks(T,v,A,$,j,w),max:T,min:v,onChange:(e,t)=>{h(!0);const r=Array.isArray(t)?t[0]:t;L(r)},onChangeCommitted:()=>{h(!1)},slotProps:{input:{id:V,ref:Y}},step:A,title:H,value:"number"==typeof k?k:0,valueLabelDisplay:"on",valueLabelFormat:e=>b.formatNumber(e,$)}),!1!==_&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{if(S)return customFormatNumber(e,C,$.locale);D&&(e*=100);const t={format:x?$.format:void 0,fractionalDigits:$.fractionalDigits,locale:$.locale};return b.formatNumber(e,t)},parseNumber:e=>{if(S)return parseCustomFormattedNumber(e,C,$.locale);let t=b.coerceNumber(e,F);return D&&(t=preciseRound(t/100,N)),t}}},React.createElement(NumberInput,{correctOnBlur:!0,disabled:J,endAdornment:E,error:!!o,inputProps:{step:A,title:H},max:T,maxDecimalPlaces:Q,min:v,onBlur:()=>{P(!1)},onChange:e=>{L(void 0===e?v:e)},onFocus:()=>{P(!0)},onKeyDown:e=>{"enter"===getKeyString(e)&&z()},size:"small",startAdornment:I,value:k}))))});export default NumberSlider;
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 D=E.renderText(d),x=!a,b=x||!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)};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:D},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,{className:scannerClasses.button,color:"primary",disabled:x||!C,onClick:P,ref:_,title:D},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;
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])}
@@ -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.48.2+1";
1
+ export declare const VERSION = "5.50.0+14";
package/libs/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION="5.48.2+1";
1
+ export const VERSION="5.50.0+14";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertigis/workflow",
3
- "version": "5.48.2",
3
+ "version": "5.50.0",
4
4
  "author": "VertiGIS",
5
5
  "dependencies": {
6
6
  "@date-fns/utc": "^1.2.0",
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.displayDialog=(e,o)=>new Promise(t=>{this._children=e(this.closeDialog),this._DialogComponent=o,this.resolve=t,this.renderDialog(!0)}),this.closeDialog=()=>{this.renderDialog(!1),this.resolve(),this._children=void 0,this._DialogComponent=void 0,this.resolve=void 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}}
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}}