@vertigis/workflow 5.48.0 → 5.48.2

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.
@@ -1 +1 @@
1
- import{execute as executeIntersection}from"@arcgis/core/geometry/operators/intersectionOperator";import{validation}from"../../Validation.js";export class IntersectEngineTask{execute(e){const t=validation.array("geometry1",e.geometry1,validation.never),r=validation.array("geometry2",e.geometry2,validation.never),n=Math.max(t.length,r.length),a=[];for(let e=0;e<n;e++){const n=t[e],i=r[e];n&&i?a.push(executeIntersection(n,i)):n?a.push(n):i?a.push(i):a.push(void 0)}return{geometry:a[0],results:a}}}IntersectEngineTask.action="gcx:wf:arcgis::IntersectEngineTask",IntersectEngineTask.suite="gcx:wf:builtin";
1
+ import{executeMany}from"@arcgis/core/geometry/operators/intersectionOperator";import{validation}from"../../Validation.js";export class IntersectEngineTask{execute(e){const t=validation.array("geometry1",e.geometry1,validation.never),r=validation.array("geometry2",e.geometry2,validation.never),n=[];for(const e of r)n.push(...executeMany(t,e));return{geometry:n[0],results:n}}}IntersectEngineTask.action="gcx:wf:arcgis::IntersectEngineTask",IntersectEngineTask.suite="gcx:wf:builtin";
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Button Bar" Form Element.
6
6
  */
7
- declare const ButtonBar: React.ForwardRefExoticComponent<FormElementProps<defs.Value | undefined> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const ButtonBar: React.ForwardRefExoticComponent<FormElementProps<defs.Value | undefined> & React.RefAttributes<HTMLFieldSetElement>>;
8
8
  export default ButtonBar;
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Check Group" Form Element.
6
6
  */
7
- declare const CheckGroup: React.ForwardRefExoticComponent<FormElementProps<defs.ItemsRef | undefined> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const CheckGroup: React.ForwardRefExoticComponent<FormElementProps<defs.ItemsRef | undefined> & React.RefAttributes<HTMLFieldSetElement>>;
8
8
  export default CheckGroup;
@@ -9,5 +9,5 @@ export declare const filePickerClasses: {
9
9
  /**
10
10
  * The component for the "File Picker" Form Element.
11
11
  */
12
- declare const FilePicker: React.ForwardRefExoticComponent<FormElementProps<defs.FilesRef | undefined> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const FilePicker: React.ForwardRefExoticComponent<FormElementProps<defs.FilesRef | undefined> & React.RefAttributes<HTMLFieldSetElement>>;
13
13
  export default FilePicker;
@@ -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{isMutuallyExclusiveSection}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,r]=useState(),[n,i]=useState(),{host:c}=t.props,{form:s}=c;if(useEffect(()=>{let e=!0;const t=c.deriveLocale();return getDateFnsLocale(t).then(t=>{e?r(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 m={host:c,type:"header",children:[]},l={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 r=o[e];return void 0===r&&(r=o[e]={host:c,type:"row",children:[]}),r}function y(e){if(void 0===e)return l;if("header"===e)return m;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 E(e){return e!==FormElementTypes.SECTION}function F(e){return!0!==e.hoisted&&(!1!==e.visible&&E(e.type))}function g(e){const t=C[e];return null==t||!E(t.type)&&(!0!==t.hoisted&&!1!==t.visible)}function x(e){return e===m||e===l||e===d?`${e.type}-section`:e.name}const C=s.elements,b=Object.keys(C).map(e=>[e,C[e]]).sort((e,t)=>{const o=e[1].section,r=t[1].section;return"header"===o||"footer"===r?Number.MIN_SAFE_INTEGER:"footer"===o||"header"===r?Number.MAX_SAFE_INTEGER:e[1].rowNumber===t[1].rowNumber?e[1].rowIndex-t[1].rowIndex:e[1].rowNumber-t[1].rowNumber});for(const e of b){const[t,o]=e;if(F(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(m.children.length>0&&w.push(React.createElement(FormComponent,{key:"header",...m})),f.children.length>0)w.push(React.createElement(FormComponent,{key:"main",...f}));else{let e,t;v(l);let o=0;const r=()=>{if(e){switch(t){case"accordion-section":k(e,++o,"accordionGroup");break;case"tab-section":k(e,++o,"tabGroup")}e=void 0,t=void 0}};for(const o of p){const n=o.name,i=C[n],c=i.format;t&&c!==t&&r(),g(n)&&(isMutuallyExclusiveSection(i)?e?e.push(o):(e=[o],t=c):v(o))}r(),a.children.length>0&&w.push(React.createElement(FormComponent,{key:"main",...a}))}function T(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 r of t){const t=o[r];if(t.children.length>1){const o=`row-${r}`;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===l?"body":`$${e.name}`;return React.createElement(FormComponent,{key:t,...e})}}function v(e){const t=T(e);t&&a.children.push(t)}function k(e,t,o){const r=[];for(const t of e){const e=T(t);e&&r.push(e)}const n=`${o}${t}`,i={children:r,host:c,name:n,type:o};a.children.push(React.createElement(FormComponent,{key:n,...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:{...n,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",[`> .${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;
@@ -33,5 +33,5 @@ interface FormElementProps {
33
33
  */
34
34
  name: string | undefined;
35
35
  }
36
- declare const _default: React.ForwardRefExoticComponent<FormElementProps & React.RefAttributes<HTMLDivElement>>;
36
+ declare const _default: React.ForwardRefExoticComponent<FormElementProps & React.RefAttributes<HTMLDivElement | HTMLFieldSetElement>>;
37
37
  export default _default;
@@ -4,5 +4,5 @@ import type * as defs from "../FormDefinition";
4
4
  /**
5
5
  * The component for the "Geometry Picker" Form Element.
6
6
  */
7
- declare const GeometryPicker: React.ForwardRefExoticComponent<FormElementProps<defs.GeometryRef | undefined> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const GeometryPicker: React.ForwardRefExoticComponent<FormElementProps<defs.GeometryRef | undefined> & React.RefAttributes<HTMLFieldSetElement>>;
8
8
  export default GeometryPicker;
@@ -1 +1 @@
1
- import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import List from"@vertigis/react-ui/List";import ListItemButton from"@vertigis/react-ui/ListItemButton";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import*as React from"react";import{forwardRef,useContext,useEffect,useRef,useState}from"react";import HostContext from"../hostContext.js";import{sanitizeGeometryRef,text}from"../utils.js";import FormElement from"./FormElement.js";import GeometryPickerListItem from"./GeometryPickerListItem.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const GeometryPicker=forwardRef(({autoActivate:e,className:t,element:r,enabled:o,itemLabel:n,name:i,prompt:s,raiseEvent:c,setProperty:a,setValue:l,size:m,state:u,tooltip:d,value:f},p)=>{const g=useContext(HostContext),[h,k]=useState([]),[y,v]=useState(""),x=u,E=useRef(!1);let R=5;"number"==typeof m&&(R=m>1?Math.ceil(m):1),useEffect(()=>{F(p.current)},[p]),useEffect(()=>{const e=sanitizeGeometryRef(f);f!==e&&l(e,!1),void 0!==f&&(Array.isArray(n)?k(n):(k([]),text.isMarkdown(n)?n.markdown&&v(n):text.isStatus(n)?n.status&&v(n.status):n&&v(n))),null==x&&a("state",[])},[f]);const[b,B]=useState([]),I=useFocusCallback(o,i,g),C=e=>()=>{const t=b.indexOf(e),r=[...b],o=L(e);-1===t?(o.checked=!0,r.push(e)):(o.checked=!1,r.splice(t,1)),B(r)},L=e=>{let t=x[e];return null==t&&(x.length<=e&&(x.length=e,x.push({})),t=x[e]),t},P=e=>()=>{let t;if(f.geometry.length>1){const r=[...f.geometry];if(r.splice(e,1),t={...f,geometry:r},x.splice(e,1),e<h.length){const t=[...h];t.splice(e,1),k(t)}}else x.length=0;const r=[];for(const t of b)t<e?r.push(t):t>e&&r.push(t-1);B(r),l(t,{argument:"remove"})},w=e=>t=>{I(t),null!==t&&(t.checked=!!L(e).checked)},G=e=>{o&&P(e)()},S=(e,t,r)=>{const o=L(e);o.focused=t,o.pending=r,g.renderState(i,"geometry",x)};let j=o;const M=[];if(void 0!==f&&void 0!==x){j=o&&f.geometry.length<R;const e=g.renderText("@geometry-picker-remove-item-label");for(const t of f.geometry){const r=M.length;L(r).content=t;const n=`checkbox-list-label-${r}`;M.push(React.createElement(GeometryPickerListItem,{deleteItem:G,disablePadding:!0,itemIndex:r,key:"$"+r,secondaryAction:React.createElement(IconButton,{"aria-label":e,className:"delete",disabled:!o,edge:"end",onClick:P(r),ref:I,title:e},React.createElement(Trash,null)),updateHighlight:S},React.createElement(ListItemButton,{onClick:C(r),ref:w(r),selected:-1!==b.indexOf(r)},React.createElement(Markdown,{id:n,inline:!0,text:h[r]||y}))))}}const T=()=>{c("clicked",f)},A=g.renderText(d),F=e=>{let t=x;null===e&&(r.visible||null==x&&a("state",[]),t=void 0),g.renderState(i,"geometry",t)};return o&&e&&!E.current&&(setTimeout(()=>{a("autoActivate",void 0),E.current=!1,j&&T()}),E.current=!0),React.createElement(FormElement,{className:t,component:"fieldset",element:r,name:i,ref:p},React.createElement(List,null,M),React.createElement(Box,null,React.createElement(Button,{disabled:!j,onClick:T,ref:I,startIcon:React.createElement(Plus,null),title:A,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:s||""}))))});export default GeometryPicker;
1
+ import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import List from"@vertigis/react-ui/List";import ListItemButton from"@vertigis/react-ui/ListItemButton";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import*as React from"react";import{forwardRef,useContext,useEffect,useImperativeHandle,useRef,useState}from"react";import HostContext from"../hostContext.js";import{sanitizeGeometryRef,text}from"../utils.js";import FormElement from"./FormElement.js";import GeometryPickerListItem from"./GeometryPickerListItem.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const GeometryPicker=forwardRef(({autoActivate:e,className:t,element:r,enabled:o,itemLabel:n,name:i,prompt:s,raiseEvent:c,setProperty:a,setValue:l,size:m,state:u,tooltip:d,value:f},p)=>{const g=useRef(null),h=useContext(HostContext),[k,v]=useState([]),[y,x]=useState(""),R=u,E=useRef(!1);let I=5;useImperativeHandle(p,()=>(H(),g.current)),"number"==typeof m&&(I=m>1?Math.ceil(m):1),useEffect(()=>()=>{H()},[g.current]),useEffect(()=>{const e=sanitizeGeometryRef(f);f!==e&&l(e,!1),void 0!==f&&(Array.isArray(n)?v(n):(v([]),text.isMarkdown(n)?n.markdown&&x(n):text.isStatus(n)?n.status&&x(n.status):n&&x(n))),null==R&&a("state",[])},[f]);const[b,B]=useState([]),C=useFocusCallback(o,i,h),L=e=>()=>{const t=b.indexOf(e),r=[...b],o=P(e);-1===t?(o.checked=!0,r.push(e)):(o.checked=!1,r.splice(t,1)),B(r)},P=e=>{let t=R[e];return null==t&&(R.length<=e&&(R.length=e,R.push({})),t=R[e]),t},w=e=>()=>{let t;if(f.geometry.length>1){const r=[...f.geometry];if(r.splice(e,1),t={...f,geometry:r},R.splice(e,1),e<k.length){const t=[...k];t.splice(e,1),v(t)}}else R.length=0;const r=[];for(const t of b)t<e?r.push(t):t>e&&r.push(t-1);B(r),l(t,{argument:"remove"})},G=e=>t=>{C(t),null!==t&&(t.checked=!!P(e).checked)},S=e=>{o&&w(e)()},j=(e,t,r)=>{const o=P(e);o.focused=t,o.pending=r,h.renderState(i,"geometry",R)};let M=o;const T=[];if(void 0!==f&&void 0!==R){M=o&&f.geometry.length<I;const e=h.renderText("@geometry-picker-remove-item-label");for(const t of f.geometry){const r=T.length;P(r).content=t;const n=`checkbox-list-label-${r}`;T.push(React.createElement(GeometryPickerListItem,{deleteItem:S,disablePadding:!0,itemIndex:r,key:"$"+r,secondaryAction:React.createElement(IconButton,{"aria-label":e,className:"delete",disabled:!o,edge:"end",onClick:w(r),ref:C,title:e},React.createElement(Trash,null)),updateHighlight:j},React.createElement(ListItemButton,{onClick:L(r),ref:G(r),selected:-1!==b.indexOf(r)},React.createElement(Markdown,{id:n,inline:!0,text:k[r]||y}))))}}const A=()=>{c("clicked",f)},F=h.renderText(d),H=()=>{let e=R;null===g.current&&(r.visible||null==R&&a("state",[]),e=void 0),h.renderState(i,"geometry",e)};return o&&e&&!E.current&&(setTimeout(()=>{a("autoActivate",void 0),E.current=!1,M&&A()}),E.current=!0),React.createElement(FormElement,{className:t,component:"fieldset",element:r,name:i,ref:g},React.createElement(List,null,T),React.createElement(Box,null,React.createElement(Button,{disabled:!M,onClick:A,ref:C,startIcon:React.createElement(Plus,null),title:F,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:s||""}))))});export default GeometryPicker;
@@ -11,5 +11,5 @@ export declare const itemPickerClasses: {
11
11
  };
12
12
  declare const ItemPicker: React.ForwardRefExoticComponent<FormElementProps<defs.ItemsRef | undefined> & {
13
13
  spacing?: number;
14
- } & React.RefAttributes<HTMLDivElement>>;
14
+ } & React.RefAttributes<HTMLFieldSetElement>>;
15
15
  export default ItemPicker;
@@ -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,useMemo,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:i,enabled:r,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=useContext(HostContext);void 0===u&&(u=1);const I=e=>()=>{const t=b[e].checked;if("single"===c){if(!t)for(const t in b)y(t,t===e)}else y(e,!t);v(!0),g.renderState(s,"item-picker",x)},[R,h]=useState(""),b=o||{};let x=p;const C=useFocusCallback(r,s,g),v=e=>{const t=[];for(const e in b){const i=b[e];i.checked&&t.push(i)}let i;t.length>0&&(i={refValueType:"items",items:t}),areValuesEqual(f,i)||m(i,e)};useEffect(()=>{B(k.current)},[k]),useEffect(()=>{null==x&&(x={items:[],keyToIndex:{}});const e={};for(const t in o){const i=E(t,!1);i&&(e[t]=i)}x.items.length=0,x.keyToIndex={};for(const t in e)x.keyToIndex[t]=x.items.length,x.items.push(e[t]);p!==x&&l("state",x),v(!1)});const E=(e,t=!0)=>{let i=x.keyToIndex[e];if(null==i||null===i){if(!t)return;x.keyToIndex[e]=x.items.length,x.items.push({}),i=x.keyToIndex[e]}return x.items[i]},y=(e,t)=>{b[e].checked=t;const i=E(e);i&&(i.checked=t)},T=e=>t=>{if(C(t),null!==t){const t=!0===b[e].checked;E(e).checked=t}},P=e=>{if(e){if(isGeometryRef(e))return e.geometry;if(isDataRef(e)&&e.data)return e.data.geometry}},L=[];let F;switch(c){case"single":F="radio";break;case"multiple":F="checkbox"}const S={},$={};if(x)for(const e in b){const t=b[e];if(t.checked&&(S[e]=t),E(e).content=P(t.value),!1!==t.visible){$[e]=t;const i=r&&!1!==t.enabled,o=i&&!!F,a=g.renderText(t.tooltip),n=clsx(itemPickerClasses.item,t.styleName?makeSafeClassName(t.styleName):void 0),c=React.createElement(Markdown,{text:t.label});L.push(React.createElement(ListItem,{className:n,disablePadding:!0,key:e},React.createElement(ListItemButton,{className:itemPickerClasses.button,disabled:!i,onClick:o?I(e):void 0,tabIndex:i?void 0:-1,title:a,"data-id":e,onBlur:i?e=>{delete E(e.currentTarget.dataset.id).focused,g.renderState(s,"item-picker",x)}:void 0,onFocus:i?e=>{E(e.currentTarget.dataset.id).focused=!0,g.renderState(s,"item-picker",x)}:void 0,onMouseOver:i?e=>{E(e.currentTarget.dataset.id).pending=!0,g.renderState(s,"item-picker",x)}:void 0,onMouseOut:i?e=>{delete E(e.currentTarget.dataset.id).pending,g.renderState(s,"item-picker",x)}:void 0},"checkbox"===F&&React.createElement(ListItemIcon,null,React.createElement(Checkbox,{edge:"start",checked:!0===b[e]?.checked,disabled:!i,disableRipple:!0,slotProps:{input:{ref:T(e)}},tabIndex:-1,value:e})),"radio"===F&&React.createElement(ListItemIcon,null,React.createElement(Radio,{edge:"start",checked:!0===b[e]?.checked,disabled:!i,disableRipple:!0,name:s,slotProps:{input:{ref:T(e)}},tabIndex:-1,value:e})),React.createElement(ListItemText,null,c))))}}const N=g.renderText(n),w=useMemo(()=>e=>{for(const t in b){const i=b[t];if(e){const t=g.renderText(i.label).toLowerCase();i.visible=t.indexOf(e)>=0}else i.visible=!0}t.forceUpdate()},[b]),M=useMemo(()=>debounce(w),[b]),j=()=>{h(""),w("")},B=e=>{null===e?g.renderState(s,"item-picker"):g.renderState(s,"item-picker",x)},O="multiple"===c&&L.length>0,X=clsx(itemPickerClasses.items,{[itemPickerClasses.horizontal]:a===Orientation.HORIZONTAL});let z,A=0,G=0,q=0,U=0;for(const e in b){const t=$[e];t?(q++,t.checked&&A++):(U++,b[e].checked&&G++)}0===A?z="none":A===q&&(z="all");const V=R?React.createElement(InputAdornment,{position:"end"},React.createElement(IconButton,{disabled:!r,onClick:j,title:g.renderText("@common-clear")},React.createElement(Close,{className:itemPickerClasses.clearIcon}))):null,W=d?`${makeUniqueId(s)}-filter`:void 0;let D,H=g.renderText("@item-picker-select");return O&&U>0&&(H=g.renderText("@item-picker-select-visible"),G>0&&(D=1===G?g.renderText("@item-picker-hidden-selected-item"):`${G} ${g.renderText("@item-picker-hidden-selected-items")}`)),React.createElement(StyledFormElement,{className:e,component:"fieldset",element:i,inputId:W,name:s,ref:k},React.createElement(Stack,{spacing:u},d&&React.createElement(Input,{disabled:!r,endAdornment:V,error:!1,fullWidth:!0,id:W,inputRef:C,onChange:e=>{const t=e.target.value;h(t),M(t.toLowerCase())},onKeyDown:e=>{"escape"===getKeyString(e)&&j()},placeholder:N,type:"text",value:R}),O&&React.createElement(FormControl,{className:itemPickerClasses.allNone},React.createElement(FormLabel,null,H),React.createElement(RadioGroup,{color:"primary",row:!0},React.createElement(FormControlLabel,{value:"all",checked:"all"===z,control:React.createElement(Radio,{size:"small"}),disabled:!r,inputRef:C,onClick:()=>{for(const e in $)y(e,!0);v(!0)},label:g.renderText("@common-all")}),React.createElement(FormControlLabel,{value:"none",checked:"none"===z,control:React.createElement(Radio,{size:"small"}),disabled:!r,onClick:()=>{for(const e in $)y(e,!1);v(!0)},label:g.renderText("@common-none")})),D&&React.createElement(Typography,{variant:"subtitle2"},D)),React.createElement(List,{className:X,dense:!0},L)))});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: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;
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Radio Group" Form Element.
6
6
  */
7
- declare const RadioGroup: React.ForwardRefExoticComponent<FormElementProps<defs.Value | undefined> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const RadioGroup: React.ForwardRefExoticComponent<FormElementProps<defs.Value | undefined> & React.RefAttributes<HTMLFieldSetElement>>;
8
8
  export default RadioGroup;
package/forms/utils.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as text from "./textUtilities";
2
2
  import type { FormComponent } from "./FormComponent";
3
+ import type { ElementTuple } from "./FormDefinition";
3
4
  import type * as defs from "./FormDefinition";
4
5
  import type { FormElementProps } from "./index";
5
6
  import type { Theme } from "@vertigis/react-ui/styles";
@@ -210,3 +211,34 @@ export declare function getItemColors(itemAppearance: defs.ItemAppearance, theme
210
211
  };
211
212
  export declare function getItemSize(size?: string): defs.ItemSize;
212
213
  export declare function getShowBorder(emphasis: defs.Emphasis | "custom", showBorder: boolean | undefined): boolean;
214
+ /**
215
+ * This function checks the elements to decide if they are an older single-column layout, or a newer
216
+ * layout that supports side-by-side elements.
217
+ *
218
+ * Since Workflow 5.25, form element position information has been saved in `rowNumber` and `rowIndex` values, allowing
219
+ * elements to be placed beside each other on the same row.
220
+ * Prior to that, the `index` property was used and all elements were stacked in a single column.
221
+ *
222
+ * The header and footer are excluded from this check as they never contain any of these properties.
223
+ * @param elements A set of form elements to be instpected.
224
+ * @returns True if the elements should be treated as a single-column layout, false if they should allow side-by-sde elements.
225
+ */
226
+ export declare function isSingleColumnLayout(elements: Record<string, defs.Element>): boolean;
227
+ /**
228
+ * This function orders elements based on their `index` property, with the `header` always first and the `footer` always last.
229
+ * @param elementTuple1 The first element to compare.
230
+ * @param elementTuple2 The second element to compare.
231
+ * @returns A negative number if `elementTuple1` should be before `elementTuple2`,
232
+ * a positive number if `elementTuple2` should be before `elementTuple1`,
233
+ * or zero if their `index` values are the same.
234
+ */
235
+ export declare function compareElementIndex(elementTuple1: ElementTuple, elementTuple2: ElementTuple): number;
236
+ /**
237
+ * This function orders elements based on their `rowNumber` and `rowIndex` properties, with the `header` always first and the `footer` always last.
238
+ * @param elementTuple1 The first element to compare.
239
+ * @param elementTuple2 The second element to compare.
240
+ * @returns A negative number if `elementTuple1` should be before `elementTuple2`,
241
+ * a positive number if `elementTuple2` should be before `elementTuple1`,
242
+ * or zero if their `rowNumber` and `rowIndex` values are the same.
243
+ */
244
+ export declare function compareRowNumberAndRowIndex(elementTuple1: ElementTuple, elementTuple2: ElementTuple): number;
package/forms/utils.js CHANGED
@@ -1 +1 @@
1
- import{FormElementTypes}from"./constants.js";import*as text from"./textUtilities.js";const DEFAULT_DEBOUNCE_DELAY=300,DEFAULT_THROTTLE_DELAY=100;export{text};let next=0,seed=(new Date).valueOf();const guid="5DDC9A38-AAAB-44C1-AD87-415160F43D75";export function makeId(){return next>=2147483648&&(seed=(new Date).valueOf(),next=0),`${guid}:${seed}:${next++}`}function indexOf(e,t){if(null==e)return;const r=e.index;return"number"==typeof r?r:t}function compareIndex(e,t){return compareNumber(e.index,t.index)}function compareNumber(e,t){return e<t?-1:e>t?1:0}export function sortAndFilter(e,t){void 0===t&&(t=indexOf);const r={};if("object"!=typeof e||null===e)return r;let n=0;const o=[];for(const r in e){const i=e[r],s=t(i,n++);"number"==typeof s&&o.push({key:r,index:s,item:i})}for(const e of o.sort(compareIndex))r[e.key]=e.item;return r}export function inspectItems(e,t,r){let n;const o=sortAndFilter(t,function(e,t){if(null==e||!1===e.visible)return;const r=e.index;return"number"==typeof r?r:t});if(null!=e&&void 0!==o[e]||(e=void 0),void 0===e&&null!=r)for(const t in o){if(o[t].value===r){e=t;break}e=void 0}return void 0!==e?(n=o[e].label,r=o[e].value):(n=void 0,r=void 0),{current:e,items:o,label:n,value:r}}export function makeSafeClassName(e){return`gcx-forms-${e?.replace(/[\W]/g,"")||"element"}`}let idSuffix=0;export function makeUniqueId(e){return`${makeSafeClassName(e)}-${++idSuffix}`}function addSuffix(e,t){return`${e}-${t}`}export function getAccessibleDescriptionId(e){return addSuffix(e,"accessible-description")}export function getDescriptionId(e){return addSuffix(e,"description")}export function getInputId(e){return addSuffix(e,"input")}export function getLabelId(e){return addSuffix(e,"label")}function isObjectType(e,t){return"object"==typeof e&&null!==e&&(!Array.isArray(e)&&e.refValueType===t)}export function isSection(e){return e?.type===FormElementTypes.SECTION}export function isAccordionSection(e){return isSection(e)&&"accordion-section"===e.format}export function isCollapsibleSection(e){return isSection(e)&&"collapsible-section"===e.format}export function isFieldsetSection(e){return isSection(e)&&"fieldset-section"===e.format}export function isMutuallyExclusiveSection(e){return isAccordionSection(e)||isTabSection(e)}export function isTabSection(e){return isSection(e)&&"tab-section"===e.format}export function isNumber(e){return"number"==typeof e}export function isString(e){return"string"==typeof e}export function isDataRef(e){return isObjectType(e,"data")}export function isDateRangeRef(e){return isObjectType(e,"daterange")}export function isDateTimeRef(e){return isObjectType(e,"date")||isObjectType(e,"time")||isObjectType(e,"datetime")}export function isFilesRef(e){return isObjectType(e,"files")}export function isScanRef(e){return isObjectType(e,"scan")}export function isGeometryRef(e){return isObjectType(e,"geometry")}export function isItemsRef(e){return isObjectType(e,"items")}export function isNumberRef(e){return isObjectType(e,"number")}export function sanitizeGeometryRef(e){if(isGeometryRef(e)){const t=e.geometry;if(Array.isArray(t)&&t.length>0)switch(e.format){case"circle":case"extent":case"line":case"multipoint":case"point":case"polygon":case"polygon-freehand":case"polyline":case"polyline-freehand":return e}}}export function createGeometryRef(e){return{refValueType:"geometry",format:e,geometry:[]}}export function debounce(e,t=300){let r;return function(...n){const o=()=>{r=void 0,e.apply(this,n)};return clearTimeout(r),r=setTimeout(o,t),{now:()=>{r&&(clearTimeout(r),o())},cancel:()=>{r&&(clearTimeout(r),r=void 0)}}}}export function throttle(e,t=100){let r,n;return function(){const o=Date.now(),i=(...t)=>{n=void 0,r=Date.now(),e.apply(this,t)};r&&o<r+t?(clearTimeout(n),n=setTimeout(i,t)):i()}}export function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}export function getElementProps(e,t){const{enabled:r,id:n,raiseEvent:o,setItemProperty:i,setProperty:s,setValue:u}=e,{format:c,manualEntry:a,showMinMaxLabels:f,showTickMarks:p,size:l,type:m,value:d,wrap:y}=t;return{...t,enabled:!!r,id:n,raiseEvent:o,setItemProperty:i,setProperty:s,setValue:u,format:c,manualEntry:a,showMinMaxLabels:f,showTickMarks:p,size:l,type:m,value:d,wrap:y,element:t,name:e.props.name,component:e}}export function getItemId(e,t){if(e)for(const r in t)if(t[r]===e)return r}const BorderStyleArray=["rounded","square"],EmphasisArray=["high","low","medium"],IconPositionArray=["above","below","before","after"],ItemSizeArray=["small","medium","large"],ItemAppearanceKeysArray=["backgroundColor","borderStyle","emphasis","foregroundColor","icon","iconPosition","showBorder","size"],NumberFormatKeysArray=["currency","customDisplayFormat","displayFormat","lowerBound","precision","step","timeFormat","upperBound"],SizeKeysArray=["height","width"];export function isItemAppearanceProperty(e){return ItemAppearanceKeysArray.includes(e)}export function isNumberFormatProperty(e){return NumberFormatKeysArray.includes(e)}export function isSizeProperty(e){return SizeKeysArray.includes(e)}function isBorderStyle(e){return void 0!==e&&BorderStyleArray.includes(e)}function isEmphasis(e){return void 0!==e&&EmphasisArray.includes(e)}function isIconPosition(e){return void 0!==e&&IconPositionArray.includes(e)}function isItemSize(e){return void 0!==e&&ItemSizeArray.includes(e)}export function getBorderStyle(e){return isBorderStyle(e)?e:"square"}export function getEmphasis(e){return"string"!=typeof e||!isEmphasis(e)&&"custom"!==e?"medium":e}export function getIconPosition(e){return isIconPosition(e)?e:"before"}export function getItemColors(e,t){return"custom"!==e.emphasis?{}:{foregroundColor:e.foregroundColor??t.palette.primary.main,backgroundColor:e.backgroundColor??t.palette.background.default}}export function getItemSize(e){return isItemSize(e)?e:"medium"}export function getShowBorder(e,t){switch(e){case"custom":return!1!==t;case"low":return!1;default:return!0}}
1
+ import{FormElementTypes}from"./constants.js";import*as text from"./textUtilities.js";const DEFAULT_DEBOUNCE_DELAY=300,DEFAULT_THROTTLE_DELAY=100;export{text};let next=0,seed=(new Date).valueOf();const guid="5DDC9A38-AAAB-44C1-AD87-415160F43D75";export function makeId(){return next>=2147483648&&(seed=(new Date).valueOf(),next=0),`${guid}:${seed}:${next++}`}function indexOf(e,t){if(null==e)return;const r=e.index;return"number"==typeof r?r:t}function compareIndex(e,t){return compareNumber(e.index,t.index)}function compareNumber(e,t){return e<t?-1:e>t?1:0}export function sortAndFilter(e,t){void 0===t&&(t=indexOf);const r={};if("object"!=typeof e||null===e)return r;let n=0;const o=[];for(const r in e){const i=e[r],u=t(i,n++);"number"==typeof u&&o.push({key:r,index:u,item:i})}for(const e of o.sort(compareIndex))r[e.key]=e.item;return r}export function inspectItems(e,t,r){let n;const o=sortAndFilter(t,function(e,t){if(null==e||!1===e.visible)return;const r=e.index;return"number"==typeof r?r:t});if(null!=e&&void 0!==o[e]||(e=void 0),void 0===e&&null!=r)for(const t in o){if(o[t].value===r){e=t;break}e=void 0}return void 0!==e?(n=o[e].label,r=o[e].value):(n=void 0,r=void 0),{current:e,items:o,label:n,value:r}}export function makeSafeClassName(e){return`gcx-forms-${e?.replace(/[\W]/g,"")||"element"}`}let idSuffix=0;export function makeUniqueId(e){return`${makeSafeClassName(e)}-${++idSuffix}`}function addSuffix(e,t){return`${e}-${t}`}export function getAccessibleDescriptionId(e){return addSuffix(e,"accessible-description")}export function getDescriptionId(e){return addSuffix(e,"description")}export function getInputId(e){return addSuffix(e,"input")}export function getLabelId(e){return addSuffix(e,"label")}function isObjectType(e,t){return"object"==typeof e&&null!==e&&(!Array.isArray(e)&&e.refValueType===t)}export function isSection(e){return e?.type===FormElementTypes.SECTION}export function isAccordionSection(e){return isSection(e)&&"accordion-section"===e.format}export function isCollapsibleSection(e){return isSection(e)&&"collapsible-section"===e.format}export function isFieldsetSection(e){return isSection(e)&&"fieldset-section"===e.format}export function isMutuallyExclusiveSection(e){return isAccordionSection(e)||isTabSection(e)}export function isTabSection(e){return isSection(e)&&"tab-section"===e.format}export function isNumber(e){return"number"==typeof e}export function isString(e){return"string"==typeof e}export function isDataRef(e){return isObjectType(e,"data")}export function isDateRangeRef(e){return isObjectType(e,"daterange")}export function isDateTimeRef(e){return isObjectType(e,"date")||isObjectType(e,"time")||isObjectType(e,"datetime")}export function isFilesRef(e){return isObjectType(e,"files")}export function isScanRef(e){return isObjectType(e,"scan")}export function isGeometryRef(e){return isObjectType(e,"geometry")}export function isItemsRef(e){return isObjectType(e,"items")}export function isNumberRef(e){return isObjectType(e,"number")}export function sanitizeGeometryRef(e){if(isGeometryRef(e)){const t=e.geometry;if(Array.isArray(t)&&t.length>0)switch(e.format){case"circle":case"extent":case"line":case"multipoint":case"point":case"polygon":case"polygon-freehand":case"polyline":case"polyline-freehand":return e}}}export function createGeometryRef(e){return{refValueType:"geometry",format:e,geometry:[]}}export function debounce(e,t=300){let r;return function(...n){const o=()=>{r=void 0,e.apply(this,n)};return clearTimeout(r),r=setTimeout(o,t),{now:()=>{r&&(clearTimeout(r),o())},cancel:()=>{r&&(clearTimeout(r),r=void 0)}}}}export function throttle(e,t=100){let r,n;return function(){const o=Date.now(),i=(...t)=>{n=void 0,r=Date.now(),e.apply(this,t)};r&&o<r+t?(clearTimeout(n),n=setTimeout(i,t)):i()}}export function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}export function getElementProps(e,t){const{enabled:r,id:n,raiseEvent:o,setItemProperty:i,setProperty:u,setValue:s}=e,{format:c,manualEntry:a,showMinMaxLabels:f,showTickMarks:p,size:m,type:l,value:d,wrap:y}=t;return{...t,enabled:!!r,id:n,raiseEvent:o,setItemProperty:i,setProperty:u,setValue:s,format:c,manualEntry:a,showMinMaxLabels:f,showTickMarks:p,size:m,type:l,value:d,wrap:y,element:t,name:e.props.name,component:e}}export function getItemId(e,t){if(e)for(const r in t)if(t[r]===e)return r}const BorderStyleArray=["rounded","square"],EmphasisArray=["high","low","medium"],IconPositionArray=["above","below","before","after"],ItemSizeArray=["small","medium","large"],ItemAppearanceKeysArray=["backgroundColor","borderStyle","emphasis","foregroundColor","icon","iconPosition","showBorder","size"],NumberFormatKeysArray=["currency","customDisplayFormat","displayFormat","lowerBound","precision","step","timeFormat","upperBound"],SizeKeysArray=["height","width"];export function isItemAppearanceProperty(e){return ItemAppearanceKeysArray.includes(e)}export function isNumberFormatProperty(e){return NumberFormatKeysArray.includes(e)}export function isSizeProperty(e){return SizeKeysArray.includes(e)}function isBorderStyle(e){return void 0!==e&&BorderStyleArray.includes(e)}function isEmphasis(e){return void 0!==e&&EmphasisArray.includes(e)}function isIconPosition(e){return void 0!==e&&IconPositionArray.includes(e)}function isItemSize(e){return void 0!==e&&ItemSizeArray.includes(e)}export function getBorderStyle(e){return isBorderStyle(e)?e:"square"}export function getEmphasis(e){return"string"!=typeof e||!isEmphasis(e)&&"custom"!==e?"medium":e}export function getIconPosition(e){return isIconPosition(e)?e:"before"}export function getItemColors(e,t){return"custom"!==e.emphasis?{}:{foregroundColor:e.foregroundColor??t.palette.primary.main,backgroundColor:e.backgroundColor??t.palette.background.default}}export function getItemSize(e){return isItemSize(e)?e:"medium"}export function getShowBorder(e,t){switch(e){case"custom":return!1!==t;case"low":return!1;default:return!0}}export function isSingleColumnLayout(e){return Object.entries(e).filter(e=>!["header","footer"].includes(e[0])).some(e=>void 0===e[1].rowNumber||void 0===e[1].rowIndex)}export function compareElementIndex(e,t){const r=e[1],n=t[1],o=r.section,i=n.section;return"header"===o||"footer"===i?Number.MIN_SAFE_INTEGER:"footer"===o||"header"===i?Number.MAX_SAFE_INTEGER:r.index-n.index}export function compareRowNumberAndRowIndex(e,t){const r=e[1],n=t[1],o=r.section,i=n.section;return"header"===o||"footer"===i?Number.MIN_SAFE_INTEGER:"footer"===o||"header"===i?Number.MAX_SAFE_INTEGER:r.rowNumber===n.rowNumber?r.rowIndex-n.rowIndex:r.rowNumber-n.rowNumber}
package/libs/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "5.48.0+16";
1
+ export declare const VERSION = "5.48.2+1";
package/libs/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION="5.48.0+16";
1
+ export const VERSION="5.48.2+1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertigis/workflow",
3
- "version": "5.48.0",
3
+ "version": "5.48.2",
4
4
  "author": "VertiGIS",
5
5
  "dependencies": {
6
6
  "@date-fns/utc": "^1.2.0",