@vertigis/workflow 5.40.1 → 5.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/activities/arcgis/ArcadeScript.d.ts +5 -1
- package/activities/arcgis/ArcadeScript.js +1 -1
- package/activities/arcgis/RunPrint.d.ts +1 -0
- package/activities/arcgis/RunPrint.js +1 -1
- package/activities/arcgis/RunReport.d.ts +1 -0
- package/activities/arcgis/RunReport.js +1 -1
- package/activities/ui/Alert.d.ts +6 -3
- package/activities/ui/Alert.js +1 -1
- package/activities/ui/Confirm.d.ts +6 -3
- package/activities/ui/Confirm.js +1 -1
- package/activities/ui/DialogContent.d.ts +24 -0
- package/activities/ui/DialogContent.js +1 -0
- package/activities/ui/DialogProvider.d.ts +19 -0
- package/activities/ui/DialogProvider.js +1 -0
- package/activities/ui/Prompt.d.ts +7 -4
- package/activities/ui/Prompt.js +1 -1
- package/execution/Engine.js +1 -1
- package/forms/FormHost.d.ts +1 -3
- package/forms/components/AccordionGroup.js +1 -1
- package/forms/components/AutoComplete.d.ts +1 -1
- package/forms/components/AutoComplete.js +1 -1
- package/forms/components/ButtonBar.d.ts +1 -1
- package/forms/components/ButtonBar.js +1 -1
- package/forms/components/CheckBox.d.ts +1 -1
- package/forms/components/CheckBox.js +1 -1
- package/forms/components/CheckGroup.d.ts +1 -1
- package/forms/components/CheckGroup.js +1 -1
- package/forms/components/Custom.d.ts +1 -1
- package/forms/components/Custom.js +1 -1
- package/forms/components/DatePicker.d.ts +1 -1
- package/forms/components/DatePicker.js +1 -1
- package/forms/components/DateRangePicker.d.ts +1 -1
- package/forms/components/DateRangePicker.js +1 -1
- package/forms/components/DateTimePicker.d.ts +1 -1
- package/forms/components/DateTimePicker.js +1 -1
- package/forms/components/DropDownList.d.ts +1 -1
- package/forms/components/DropDownList.js +1 -1
- package/forms/components/FilePicker.d.ts +4 -1
- package/forms/components/FilePicker.js +1 -1
- package/forms/components/Form.d.ts +1 -1
- package/forms/components/Form.js +1 -1
- package/forms/components/FormElement.d.ts +37 -0
- package/forms/components/FormElement.js +1 -0
- package/forms/components/GeometryPicker.d.ts +4 -1
- package/forms/components/GeometryPicker.js +1 -1
- package/forms/components/HorizontalRule.d.ts +1 -1
- package/forms/components/HorizontalRule.js +1 -1
- package/forms/components/Image.d.ts +1 -1
- package/forms/components/Image.js +1 -1
- package/forms/components/ItemPicker.d.ts +1 -1
- package/forms/components/ItemPicker.js +1 -1
- package/forms/components/ListBox.d.ts +4 -1
- package/forms/components/ListBox.js +1 -1
- package/forms/components/Markdown.d.ts +1 -3
- package/forms/components/Markdown.js +1 -1
- package/forms/components/Number.d.ts +1 -1
- package/forms/components/Number.js +1 -1
- package/forms/components/NumberRangeSlider.d.ts +1 -1
- package/forms/components/NumberRangeSlider.js +1 -1
- package/forms/components/NumberSlider.d.ts +1 -1
- package/forms/components/NumberSlider.js +1 -1
- package/forms/components/RadioGroup.d.ts +1 -1
- package/forms/components/RadioGroup.js +1 -1
- package/forms/components/Scanner.d.ts +1 -1
- package/forms/components/Scanner.js +1 -1
- package/forms/components/Section.d.ts +1 -1
- package/forms/components/Section.js +1 -1
- package/forms/components/Signature.d.ts +1 -1
- package/forms/components/Signature.js +1 -1
- package/forms/components/SignatureDialog.d.ts +3 -1
- package/forms/components/SignatureDialog.js +1 -1
- package/forms/components/Sketch.d.ts +1 -1
- package/forms/components/Sketch.js +1 -1
- package/forms/components/SketchDialog.d.ts +3 -8
- package/forms/components/SketchDialog.js +1 -1
- package/forms/components/TabGroup.js +1 -1
- package/forms/components/Text.d.ts +1 -1
- package/forms/components/Text.js +1 -1
- package/forms/components/TextArea.d.ts +1 -1
- package/forms/components/TextArea.js +1 -1
- package/forms/components/TextBox.d.ts +1 -1
- package/forms/components/TextBox.js +1 -1
- package/forms/components/TimePicker.d.ts +1 -1
- package/forms/components/TimePicker.js +1 -1
- package/forms/{common.d.ts → components/common.d.ts} +13 -28
- package/forms/components/common.js +1 -0
- package/forms/dateUtilities.d.ts +2 -1
- package/forms/dateUtilities.js +1 -1
- package/forms/hostContext.d.ts +3 -0
- package/forms/hostContext.js +1 -0
- package/forms/index.d.ts +0 -21
- package/forms/numberUtilities.d.ts +1 -1
- package/forms/numberUtilities.js +1 -1
- package/forms/presenter.js +1 -1
- package/forms/utils.d.ts +13 -0
- package/forms/utils.js +1 -1
- package/libs/version.d.ts +1 -1
- package/libs/version.js +1 -1
- package/licensing/LicenseChecker.js +1 -1
- package/package.json +5 -5
- package/ui/UIService.d.ts +23 -0
- package/ui/UIService.js +1 -0
- package/forms/FormElement.d.ts +0 -23
- package/forms/FormElement.js +0 -1
- package/forms/common.js +0 -1
package/forms/components/Form.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import AdapterDateFns from"@vertigis/react-ui/AdapterDateFns";import Box from"@vertigis/react-ui/Box";import{LicenseInfo}from"@vertigis/react-ui/LicenseInfo";import LocalizationProvider from"@vertigis/react-ui/LocalizationProvider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useState}from"react";import{FormComponent,FormElementComponent}from"../FormComponent.js";import{FormElementTypes}from"../constants.js";import{
|
|
1
|
+
import AdapterDateFns from"@vertigis/react-ui/AdapterDateFns";import Box from"@vertigis/react-ui/Box";import{LicenseInfo}from"@vertigis/react-ui/LicenseInfo";import LocalizationProvider from"@vertigis/react-ui/LocalizationProvider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useState}from"react";import{FormComponent,FormElementComponent}from"../FormComponent.js";import{FormElementTypes}from"../constants.js";import{getLocale}from"../dateUtilities.js";import{getKeyString}from"../keyboard.js";import{isMutuallyExclusiveSection,sortAndFilter}from"../utils.js";const PREFIX="Form",formClasses={body:`${PREFIX}-body`,footer:`${PREFIX}-footer`,formElementContent:`${PREFIX}-element-content`,formElementTitle:`${PREFIX}-element-title`,formElementWithTitleBeside:`${PREFIX}-element-with-title-beside`,header:`${PREFIX}-header`,main:`${PREFIX}-main`,root:`${PREFIX}-root`,row:`${PREFIX}-row`},StyledBox=styled(Box)(()=>({"h1, h2, h3":{margin:0},[`.${formClasses.formElementWithTitleBeside}`]:{alignItems:"start",display:"grid",gridTemplateColumns:"1fr 2fr",[`> .${formClasses.formElementTitle}`]:{gridColumnStart:1,margin:0,overflowWrap:"anywhere"},[`> .${formClasses.formElementContent}`]:{display:"inline-flex",flexDirection:"column",gridColumnStart:2,overflow:"auto"}},[`.${formClasses.row}`]:{display:"flex",gap:"0.5em","> *":{flexGrow:1},"> .CheckBox, > .CheckGroup, > .Image, > .Number, > .RadioGroup":{flexGrow:0},[`.${formClasses.formElementWithTitleBeside}`]:{gridTemplateColumns:"1fr 1fr"}}}));LicenseInfo.setLicenseKey("c14d2671e294e1c22b64a93ed8f2f0f9Tz04ODQ4NixFPTE3NDQ4MzUzNDMwMDAsUz1wcm8sTE09cGVycGV0dWFsLEtWPTI=");const Form=({className:e,component:t})=>{const[o,r]=useState(),l=t.props.host;if(useEffect(()=>{let t=!0;return getLocale(l).then(e=>{t?r(e):console.warn("Component was unmounted while loading the locale.")}),()=>{t=!1}},[]),!o)return null;const n={host:l,type:"header",children:[]},i={host:l,type:"body",children:[]},a={host:l,type:"main",children:[]},s={host:l,type:"footer",children:[]},m={host:l,type:"body",children:[]},c={},d=[];function f(e){return e!==FormElementTypes.SECTION}function p(e){return e===n||e===i||e===s?`${e.type}-section`:e.name}const h=sortAndFilter(t.props.host.form.elements);for(const $ in h){var u,y=h[$];if(!0!==(E=y).hoisted&&(!1!==E.visible&&f(E.type)))if(!0!==y.overlay){let e=function(e){if(void 0===e)return i;if("header"===e)return n;if("footer"===e)return s;let t;t="object"==typeof e?e.name:e;let o=(e=>{for(const t of d)if(t.name===e)return t})(t);return void 0===o&&(o={host:l,name:t,type:"section",children:[]},d.push(o)),o}(y.section);void 0!==y.rowNumber&&(u=p(e),e=function(e,t){let o=c[t];o=o||(c[t]=[]);let r=o[e];return void 0===r&&(r=o[e]={host:l,type:"row",children:[]}),r}(y.rowNumber,u)),e.children.push(React.createElement(FormElementComponent,{key:$,host:l,type:"element",name:$,children:[]}))}else m.children.push(React.createElement(FormElementComponent,{key:$,host:l,type:"element",name:$,children:[]}))}var E,F;const g=[];if(0<n.children.length&&g.push(React.createElement(FormComponent,{key:"header",...n})),0<m.children.length)g.push(React.createElement(FormComponent,{key:"main",...m}));else{T(i);let e,t,o=0;var C=()=>{if(e){switch(t){case"accordion-section":w(e,++o,"accordionGroup");break;case"tab-section":w(e,++o,"tabGroup")}e=void 0,t=void 0}};for(const k of d){var v=k.name,x=h[v],R=x.format;t&&R!==t&&C(),null!=(F=h[F=v])&&(f(F.type)||!0===F.hoisted||!1===F.visible)||(isMutuallyExclusiveSection(x)?e?e.push(k):(e=[k],t=R):T(k))}C(),0<a.children.length&&g.push(React.createElement(FormComponent,{key:"main",...a}))}function b(e){if(!function(e){var t=p(e),o=c[t];if(o)for(const i of Object.keys(o).sort((e,t)=>parseInt(e)-parseInt(t))){var r,n=o[i];1<n.children.length?(r=`row-${i}`,e.children.push(React.createElement(FormComponent,{key:r,...n}))):1===n.children.length&&e.children.push(...n.children)}}(e),0<e.children.length){var t=e===i?"body":`$${e.name}`;return React.createElement(FormComponent,{key:t,...e})}}function T(e){e=b(e);e&&a.children.push(e)}function w(e,t,o){const r=[];for(const i of e){var n=b(i);n&&r.push(n)}t=`${o}${t}`,o={children:r,host:l,name:t,type:o};a.children.push(React.createElement(FormComponent,{key:t,...o}))}return 0<s.children.length&&g.push(React.createElement(FormComponent,{key:"footer",...s})),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:{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")}},g))};export default Form;export{formClasses};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { defs } from "../FormHost";
|
|
3
|
+
import type { AriaAttributes, ElementType } from "react";
|
|
4
|
+
import type { ReactNode } from "react";
|
|
5
|
+
interface FormElementProps {
|
|
6
|
+
/**
|
|
7
|
+
* The components contained by this Form Element.
|
|
8
|
+
*
|
|
9
|
+
* When a function is specified, the aria attributes for the title and description/accessible description are returned,
|
|
10
|
+
* to allow the consumer to assign them to the appropriate HTML Element.
|
|
11
|
+
*
|
|
12
|
+
* When a node is specified, the legacy behaviour of assigning the aria attributes to the root of the Form Element is used.
|
|
13
|
+
*/
|
|
14
|
+
children?: ReactNode | ((ariaAttributes: AriaAttributes) => ReactNode);
|
|
15
|
+
/**
|
|
16
|
+
* The CSS class name of the root element.
|
|
17
|
+
*/
|
|
18
|
+
className?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The component used for the root node. Either a string to use a HTML element or a component. The default is "div".
|
|
21
|
+
*/
|
|
22
|
+
component?: ElementType;
|
|
23
|
+
/**
|
|
24
|
+
* The Form Element to be rendered within this Component.
|
|
25
|
+
*/
|
|
26
|
+
element: defs.Element;
|
|
27
|
+
/**
|
|
28
|
+
* The id of the default input to be associated with the title.
|
|
29
|
+
*/
|
|
30
|
+
inputId?: string;
|
|
31
|
+
/**
|
|
32
|
+
* The name of the element.
|
|
33
|
+
*/
|
|
34
|
+
name: string | undefined;
|
|
35
|
+
}
|
|
36
|
+
declare const _default: React.ForwardRefExoticComponent<FormElementProps & React.RefAttributes<HTMLDivElement>>;
|
|
37
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import FormControl from"@vertigis/react-ui/FormControl";import clsx from"clsx";import{forwardRef,useContext}from"react";import*as React from"react";import{TitleLocation}from"../constants.js";import HostContext from"../hostContext.js";import{makeSafeClassName,makeUniqueId}from"../utils.js";import{formClasses}from"./Form.js";import{renderAccessibleDescription,renderDescription,renderError,renderTitle}from"./common.js";export default forwardRef((e,r)=>{var{children:t,className:o,component:i,element:s,inputId:n,name:a}=e,l=useContext(HostContext),m=makeUniqueId(a),c=renderTitle(m,s.require,s.title,n,"fieldset"===i?"legend":void 0),e=renderDescription(s.description,m,s.enabled),n=renderAccessibleDescription(s.accessibleDescription,s.description,m,l),l=renderError(s.error);const d={className:clsx(o,s.type,{[formClasses.formElementWithTitleBeside]:s.titleLocation===TitleLocation.BESIDE,[makeSafeClassName(a)]:!!a,[makeSafeClassName(s.styleName)]:!!s.styleName}),component:i,error:!!l,id:m,ref:r,required:s.require};m=c?.props?.id,r=n?.props?.id;const p=t instanceof Function?t:void 0;let f=t instanceof Function?void 0:t;p?f=p({"aria-labelledby":m,"aria-describedby":r}):(d["aria-labelledby"]=m,d["aria-describedby"]=r);let u=[c];return s.titleLocation===TitleLocation.BESIDE?u.push(React.createElement("div",{className:formClasses.formElementContent},e,n,l,f)):(u.push(e),u.push(n),u.push(l),u.push(f)),React.createElement(FormControl,{fullWidth:!0,...d},...u)});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import type { FormElementProps } from "../..";
|
|
3
3
|
import type * as defs from "../FormDefinition";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The component for the "Geometry Picker" Form Element.
|
|
6
|
+
*/
|
|
7
|
+
declare const GeometryPicker: ({ autoActivate, className, element, enabled, itemLabel: elementItemLabel, name, prompt, raiseEvent, setProperty, setValue, size, state: elementState, tooltip: elementTooltip, value, }: FormElementProps<defs.GeometryRef | undefined>) => React.JSX.Element;
|
|
5
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{useEffect,useRef,useState}from"react";import
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import List from"@vertigis/react-ui/List";import ListItemButton from"@vertigis/react-ui/ListItemButton";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import*as React from"react";import{useContext,useEffect,useRef,useState}from"react";import HostContext from"../hostContext.js";import{sanitizeGeometryRef,text}from"../utils.js";import FormElement from"./FormElement.js";import GeometryPickerListItem from"./GeometryPickerListItem.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const GeometryPicker=({autoActivate:e,className:t,element:r,enabled:o,itemLabel:i,name:n,prompt:s,raiseEvent:a,setProperty:c,setValue:l,size:m,state:u,tooltip:d,value:f})=>{const p=useContext(HostContext),[g,v]=useState([]),[h,k]=useState(""),y=u,x=useRef(!1);let E=5;"number"==typeof m&&(E=1<m?Math.ceil(m):1),useEffect(()=>{var e=sanitizeGeometryRef(f);f!==e&&l(e,!1),void 0!==f&&(Array.isArray(i)?v(i):(v([]),text.isMarkdown(i)?i.markdown&&k(i):text.isStatus(i)?i.status&&k(i.status):i&&k(i))),void 0!==y&&null!==y||c("state",[])},[f]);const[R,b]=useState([]),B=useFocusCallback(o,n,p);const I=e=>{let t=y[e];return void 0!==t&&null!==t||(y.length<=e&&(y.length=e,y.push({})),t=y[e]),t},C=n=>()=>{let e;if(1<f.geometry.length){const r=[...f.geometry];if(r.splice(n,1),e={...f,geometry:r},y.splice(n,1),n<g.length){const o=[...g];o.splice(n,1),v(o)}}else y.length=0;let t=[];for(const i of R)i<n?t.push(i):i>n&&t.push(i-1);b(t),l(e,{argument:"remove"})};var L=e=>{o&&C(e)()},P=(e,t,r)=>{const o=I(e);o.focused=t,o.pending=r,p.renderState(n,"geometry",y)};let G=o;const S=[];if(void 0!==f&&void 0!==y){G=o&&f.geometry.length<E;var j=p.renderText("@geometry-picker-remove-item-label");for(const A of f.geometry){var w=S.length;I(w).content=A;var M=`checkbox-list-label-${w}`;S.push(React.createElement(GeometryPickerListItem,{deleteItem:L,disablePadding:!0,itemIndex:w,key:"$"+w,secondaryAction:React.createElement(IconButton,{"aria-label":j,className:"delete",disabled:!o,edge:"end",onClick:C(w),ref:B,title:j},React.createElement(Trash,null)),updateHighlight:P},React.createElement(ListItemButton,{onClick:(o=>()=>{var e=R.indexOf(o);const t=[...R],r=I(o);-1===e?(r.checked=!0,t.push(o)):(r.checked=!1,t.splice(e,1)),b(t)})(w),ref:(t=>e=>{B(e),null!==e&&(e.checked=!!I(t).checked)})(w),selected:-1!==R.indexOf(w)},React.createElement(Markdown,{id:M,inline:!0,text:g[w]||h}))))}}const T=()=>{a("clicked",f)};d=p.renderText(d);return o&&e&&!x.current&&(setTimeout(()=>{c("autoActivate",void 0),x.current=!1,G&&T()}),x.current=!0),React.createElement(FormElement,{className:t,component:"fieldset",element:r,name:n,ref:e=>{p.renderState(n,"geometry",null===e?void 0:y)}},React.createElement(List,null,S),React.createElement(Box,null,React.createElement(Button,{disabled:!G,onClick:T,ref:B,startIcon:React.createElement(Plus,null),title:d,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:s||""}))))};export default GeometryPicker;
|
|
@@ -3,5 +3,5 @@ import type { FormElementProps } from "../..";
|
|
|
3
3
|
/**
|
|
4
4
|
* The component for the "Horizontal Rule" Form Element.
|
|
5
5
|
*/
|
|
6
|
-
declare const HorizontalRule: ({ className,
|
|
6
|
+
declare const HorizontalRule: ({ className, element, name }: FormElementProps) => React.JSX.Element;
|
|
7
7
|
export default HorizontalRule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Divider from"@vertigis/react-ui/Divider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{FormElementTypes}from"../constants.js";import{makeSafeClassName}from"../utils.js";const
|
|
1
|
+
import Divider from"@vertigis/react-ui/Divider";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{FormElementTypes}from"../constants.js";import{makeSafeClassName}from"../utils.js";const StyledDivider=styled(Divider)(({theme:{spacing:e}})=>({marginBottom:e(3),marginTop:e(3)})),HorizontalRule=({className:e,element:t,name:a})=>React.createElement(StyledDivider,{className:clsx(e,FormElementTypes.HORIZONTALRULE,{[makeSafeClassName(a)]:!!a,[makeSafeClassName(t.styleName)]:!!t.styleName})});export default HorizontalRule;
|
|
@@ -3,5 +3,5 @@ import type { FormElementProps } from "../..";
|
|
|
3
3
|
/**
|
|
4
4
|
* The component for the "Image" Form Element.
|
|
5
5
|
*/
|
|
6
|
-
declare const Image: ({ className,
|
|
6
|
+
declare const Image: ({ className, element, name, size, tooltip: elementTooltip, value, }: FormElementProps<string>) => React.JSX.Element;
|
|
7
7
|
export default Image;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import
|
|
1
|
+
import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext}from"react";import HostContext from"../hostContext.js";import FormElement from"./FormElement.js";const StyledFormElement=styled(FormElement)(()=>({overflow:"hidden",img:{alignSelf:"start"}})),Image=({className:e,element:t,name:o,size:m,tooltip:r,value:l})=>{const n=useContext(HostContext);let s,a;"number"==typeof m&&(a=m,s=m),"object"==typeof m&&("number"==typeof m.width&&(s=m.width),"number"==typeof m.height&&(a=m.height));let i;"string"==typeof l&&(i=l);r=n.renderText(r);return React.createElement(StyledFormElement,{className:e,element:t,name:o},React.createElement("img",{src:i,alt:r,title:r,width:s,height:a}))};export default Image;
|
|
@@ -9,7 +9,7 @@ export declare const itemPickerClasses: {
|
|
|
9
9
|
item: string;
|
|
10
10
|
items: string;
|
|
11
11
|
};
|
|
12
|
-
declare const ItemPicker: ({ className, component, element, enabled, items: elementItems, name, orientation, prompt,
|
|
12
|
+
declare const ItemPicker: ({ className, component, element, enabled, items: elementItems, name, orientation, prompt, selectionMode, setProperty, setValue, showFilter, spacing, state: elementState, value, }: FormElementProps<defs.ItemsRef | undefined> & {
|
|
13
13
|
spacing?: number | undefined;
|
|
14
14
|
}) => React.JSX.Element;
|
|
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{useEffect,useMemo,useState}from"react";import
|
|
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{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",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`},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=({className:e,component:o,element:t,enabled:i,items:a,name:r,orientation:s,prompt:n,selectionMode:l,setProperty:c,setValue:m,showFilter:d,spacing:u,state:p,value:f})=>{const k=useContext(HostContext);void 0===u&&(u=1);const[g,I]=useState(""),R=a||{};let h=p;const v=useFocusCallback(i,r,k),b=e=>{const t=[];for(const o in R){var i=R[o];i.checked&&t.push(i)}let r;0<t.length&&(r={refValueType:"items",items:t}),areValuesEqual(f,r)||m(r,e)};useEffect(()=>{void 0!==h&&null!==h||(h={items:[],keyToIndex:{}});const e={};for(const i in a){var t=x(i,!1);t&&(e[i]=t)}h.items.length=0,h.keyToIndex={};for(const r in e)h.keyToIndex[r]=h.items.length,h.items.push(e[r]);p!==h&&c("state",h),b(!1)});const x=(e,t=!0)=>{let i=h.keyToIndex[e];if(null==i||null===i){if(!t)return;h.keyToIndex[e]=h.items.length,h.items.push({}),i=h.keyToIndex[e]}return h.items[i]},C=(e,t)=>{R[e].checked=t;const i=x(e);i&&(i.checked=t)};var E=t=>e=>{null!==e&&(v(e),e=!0===R[t].checked,x(t).checked=e)};const y=[];let T;switch(l){case"single":T="radio";break;case"multiple":T="checkbox"}let L={},P={};if(h)for(const K in R){var F,S,$,N,w=R[K];w.checked&&(L[K]=w),x(K).content=(e=>{if(e){if(isGeometryRef(e))return e.geometry;if(isDataRef(e)&&e.data)return e.data.geometry}})(w.value),!1!==w.visible&&(P[K]=w,S=(F=i&&!1!==w.enabled)&&!!T,$=k.renderText(w.tooltip),N=clsx(itemPickerClasses.item,w.styleName?makeSafeClassName(w.styleName):void 0),w=React.createElement(Markdown,{text:w.label}),y.push(React.createElement(ListItem,{className:N,disablePadding:!0,key:K},React.createElement(ListItemButton,{className:itemPickerClasses.button,disabled:!F,onClick:S?(i=>()=>{var e=R[i].checked;if("single"===l){if(!e)for(const t in R)C(t,t===i)}else C(i,!e);b(!0),k.renderState(r,"item-picker",h)})(K):void 0,tabIndex:F?void 0:-1,title:$,"data-id":K,onBlur:F?e=>{delete x(e.currentTarget.dataset.id).focused,k.renderState(r,"item-picker",h)}:void 0,onFocus:F?e=>{x(e.currentTarget.dataset.id).focused=!0,k.renderState(r,"item-picker",h)}:void 0,onMouseOver:F?e=>{x(e.currentTarget.dataset.id).pending=!0,k.renderState(r,"item-picker",h)}:void 0,onMouseOut:F?e=>{delete x(e.currentTarget.dataset.id).pending,k.renderState(r,"item-picker",h)}:void 0},"checkbox"===T&&React.createElement(ListItemIcon,null,React.createElement(Checkbox,{edge:"start",checked:!0===R[K]?.checked,disabled:!F,disableRipple:!0,inputRef:E(K),tabIndex:-1,value:K})),"radio"===T&&React.createElement(ListItemIcon,null,React.createElement(Radio,{edge:"start",checked:!0===R[K]?.checked,disabled:!F,disableRipple:!0,inputRef:E(K),name:r,tabIndex:-1,value:K})),React.createElement(ListItemText,null,w)))))}var M=k.renderText(n);const j=useMemo(()=>e=>{for(const t in R){const i=R[t];if(e){const r=k.renderText(i.label).toLowerCase();i.visible=0<=r.indexOf(e)}else i.visible=!0}o.forceUpdate()},[R]),B=useMemo(()=>debounce(j),[R]);const O=()=>{I(""),j("")};var X="multiple"===l&&0<y.length,z=clsx(itemPickerClasses.items,{[itemPickerClasses.horizontal]:s===Orientation.HORIZONTAL});let A,G=0,q=0,U=0,V=0;for(const Z in R){var W=P[Z];W?(U++,W.checked&&G++):(V++,R[Z].checked&&q++)}0===G?A="none":G===U&&(A="all");n=g?React.createElement(InputAdornment,{position:"end"},React.createElement(IconButton,{disabled:!i,onClick:O,title:k.renderText("@common-clear")},React.createElement(Close,{className:itemPickerClasses.clearIcon}))):null,s=d?`${makeUniqueId(r)}-filter`:void 0;let D,H=k.renderText("@item-picker-select");return X&&0<V&&(H=k.renderText("@item-picker-select-visible"),0<q&&(D=1===q?k.renderText("@item-picker-hidden-selected-item"):`${q} ${k.renderText("@item-picker-hidden-selected-items")}`)),React.createElement(StyledFormElement,{className:e,component:"fieldset",element:t,inputId:s,name:r,ref:e=>{null===e?k.renderState(r,"item-picker"):k.renderState(r,"item-picker",h)}},React.createElement(Stack,{spacing:u},d&&React.createElement(Input,{disabled:!i,endAdornment:n,error:!1,fullWidth:!0,id:s,inputRef:v,onChange:e=>{const t=e.target.value;I(t),B(t.toLowerCase())},onKeyDown:e=>{"escape"===getKeyString(e)&&O()},placeholder:M,type:"text",value:g}),X&&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"===A,control:React.createElement(Radio,{size:"small"}),disabled:!i,inputRef:v,onClick:()=>{for(const e in P)C(e,!0);b(!0)},label:k.renderText("@common-all")}),React.createElement(FormControlLabel,{value:"none",checked:"none"===A,control:React.createElement(Radio,{size:"small"}),disabled:!i,onClick:()=>{for(const e in P)C(e,!1);b(!0)},label:k.renderText("@common-none")})),D&&React.createElement(Typography,{variant:"subtitle2"},D)),React.createElement(List,{className:z,dense:!0},y)))};export default ItemPicker;export{itemPickerClasses};
|
|
@@ -4,5 +4,8 @@ import type * as defs from "../FormDefinition";
|
|
|
4
4
|
export declare const listBoxClasses: {
|
|
5
5
|
select: string;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The component for the "List Box" Form Element.
|
|
9
|
+
*/
|
|
10
|
+
declare const ListBox: ({ className, current, element, enabled, items: elementItems, name, require, setItemProperty, setValue: setElementValue, size: elementSize, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.ItemsRef | undefined>) => React.JSX.Element;
|
|
8
11
|
export default ListBox;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Select from"@vertigis/react-ui/Select";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useState}from"react";import
|
|
1
|
+
import Select from"@vertigis/react-ui/Select";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useContext,useEffect,useState}from"react";import HostContext from"../hostContext.js";import{areValuesEqual,arrayEqual}from"../listUtilities.js";import{makeSafeClassName,makeUniqueId,inspectItems}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="ListBox",listBoxClasses={select:`${PREFIX}-select`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({"&&&":{[`.${listBoxClasses.select}`]:{paddingRight:e(1)}}})),ListBox=({className:e,current:t,element:s,enabled:a,items:l,name:o,require:r,setItemProperty:m,setValue:i,size:c,tooltip:n,value:u})=>{const d=useContext(HostContext),p=`${makeUniqueId(o)}-input`,f=inspectItems(t,l,u)["items"],[x,h]=useState([]),v=useFocusCallback(a,o,d);useEffect(()=>{const e=[];for(const t in l)l[t].checked&&e.push(t);arrayEqual(x,e)||h(e),E(e,!1)});const E=(e,t)=>{e=0===e.length?void 0:{refValueType:"items",items:e.map(e=>f[e])};areValuesEqual(u,e)||i(e,t)},C=e=>{const t=e.target["options"],s=[];for(let e=0;e<t.length;e++){var a=t.item(e),l=a.value;a.selected&&s.push(l)}for(const i in f){var o=f[i].checked,r=-1!==s.indexOf(i);o!==r&&m(i,"checked",r)}E(s,!0)},k=[];for(const q in f){const I=f[q];var y=d.renderText(I.label);const F=d.renderText(I.tooltip);I.checked=!0===I.checked;var b=clsx(I.styleName?makeSafeClassName(I.styleName):void 0),g=!1===I.enabled?void 0:!!I.checked;k.push(React.createElement("option",{"aria-selected":g,className:b,key:q,title:F,value:q,disabled:!1===I.enabled},y))}const F=d.renderText(n)||void 0;let S;return"number"==typeof c&&(S=c),React.createElement(StyledFormElement,{className:e,element:s,inputId:p,name:o},e=>React.createElement(Select,{disabled:!a||0===k.length,inputProps:{...e,"aria-multiselectable":!0,"aria-orientation":"vertical","aria-required":r,className:listBoxClasses.select,id:p,role:"listbox",size:S,title:F},inputRef:v,multiple:!0,native:!0,onChange:C,value:x},k))};export default ListBox;export{listBoxClasses};
|
|
@@ -7,8 +7,6 @@ import type { MarkdownProps as BaseMarkdownProps } from "@vertigis/react-ui/Mark
|
|
|
7
7
|
export interface MarkdownProps extends Omit<BaseMarkdownProps, "markdown" | "sanitize"> {
|
|
8
8
|
/** The text to be rendered. */
|
|
9
9
|
text: defs.Text | undefined;
|
|
10
|
-
/** Translates the supplied value. */
|
|
11
|
-
translateText: (content: defs.Text | undefined) => string | defs.MarkdownRef | undefined;
|
|
12
10
|
}
|
|
13
|
-
declare const Markdown: ({ text,
|
|
11
|
+
declare const Markdown: ({ text, escapeHtml, linkTarget, ...otherProps }: MarkdownProps) => React.JSX.Element | null;
|
|
14
12
|
export default Markdown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import BaseMarkdown from"@vertigis/react-ui/Markdown";import*as React from"react";import{hasContent,isMarkdown}from"../textUtilities.js";const Markdown=({text:t,
|
|
1
|
+
import BaseMarkdown from"@vertigis/react-ui/Markdown";import*as React from"react";import{useContext}from"react";import HostContext from"../hostContext.js";import{hasContent,isMarkdown}from"../textUtilities.js";const Markdown=({text:t,escapeHtml:e=!0,linkTarget:a="_blank",...o})=>{const r=useContext(HostContext);t=r.translateText(t);return hasContent(t)?isMarkdown(t)?React.createElement(BaseMarkdown,{markdown:t.markdown,escapeHtml:e,linkTarget:a,...o}):React.createElement(React.Fragment,null,t):null};export default Markdown;
|
|
@@ -9,5 +9,5 @@ export declare const numberClasses: {
|
|
|
9
9
|
/**
|
|
10
10
|
* The component for the "Number" Form Elements.
|
|
11
11
|
*/
|
|
12
|
-
declare const NumberComponent: ({ className,
|
|
12
|
+
declare const NumberComponent: ({ className, element, enabled, error, format, name, prompt, require, tooltip: elementTooltip, value: elementValue, setValue: setElementValue, }: FormElementProps<defs.NumberRef | undefined>) => React.JSX.Element;
|
|
13
13
|
export default NumberComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{inputClasses}from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect,useMemo,useRef,useState}from"react";import
|
|
1
|
+
import{inputClasses}from"@vertigis/react-ui/Input";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{FormElementSize}from"../constants.js";import{numberFormatConfiguration}from"../elements/Number.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{NumberDisplayFormat,DEFAULT_CURRENCY}from"../numberFormatter.js";import{areValuesEqual,countDecimalsInCustomFormat,enforceConstraints,getCurrencySymbolInfo,getNumberConstraints,getPercentSymbolInfo,preciseRound,sanitizePrecision}from"../numberUtilities.js";import{isNumber,isNumberRef,isString,makeUniqueId,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="Number",numberClasses={large:`${PREFIX}-large`,medium:`${PREFIX}-medium`,small:`${PREFIX}-small`},StyledFormElement=styled(FormElement)(()=>({[`.${inputClasses.root}`]:{[`&.${numberClasses.large}`]:{width:"50%"},[`&.${numberClasses.medium}`]:{width:"33%"},[`&.${numberClasses.small}`]:{width:"25%"}}})),NumberComponent=({className:e,element:r,enabled:t,error:o,format:l,name:m,prompt:n,require:s,tooltip:a,value:i,setValue:u})=>{const c=useContext(HostContext),[p,f]=useState(!1),[d,b]=useState(),C=useRef(!0),F=`${makeUniqueId(m)}-input`,y=useLocale(),N=c.renderText(n),g=c.renderText(a),{currency:E,customDisplayFormat:v,decimals:R,displayFormat:I,endAdornment:D,isPercent:S,numberConstraints:x,startAdornment:P}=useMemo(()=>{var e,r,t=l,o=t?.currency||DEFAULT_CURRENCY,m=t?.displayFormat,n=m===NumberDisplayFormat.PERCENT,s=getNumberConstraints(t,numberFormatConfiguration),a=t?.customDisplayFormat,t=m===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(a):t?.precision,t=sanitizePrecision(t,s.step,numberFormatConfiguration);let i=null,u=null;return m===NumberDisplayFormat.CURRENCY||m===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(y,o))&&(r=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?i=r:u=r):!n||(e=getPercentSymbolInfo(y))&&(r=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?i=r:u=r),{currency:o,customDisplayFormat:a,decimals:t,displayFormat:m,endAdornment:u,isPercent:n,numberConstraints:s,startAdornment:i}},[l]),{maximum:A,minimum:U,step:z}=x;a=S?R-2:R;const T={currency:E,customDisplayFormat:v,format:I,fractionalDigits:a=Math.max(0,a),locale:y},j=e=>{if("number"==typeof e)return{refValueType:"number",format:{lowerBound:U,precision:R,step:z,upperBound:A},display:c.formatNumber(e,T),numeric:e}},$=()=>{e=void 0===(e=d)?void 0:enforceConstraints(e,x),e=j(e);areValuesEqual(i,e)||u(e);var e=e?.numeric;e!==d&&b(e)};useEffect(()=>{C.current?C.current=!1:p||$()},[p,d]),useEffect(()=>{var e=h(i),r=void 0===e?void 0:j(e);areValuesEqual(i,r)||u(r,!1),e!==d&&b(e)},[i]);const h=e=>{let r;if(isNumber(e))r=e;else if(isString(e)){if(!e)return;r=c.coerceNumber(e)}else"number"==typeof e?.numeric&&(r=e.numeric);return"number"==typeof r&&0*r!=0&&(r=void 0),void 0===r?r:enforceConstraints(r,x)},q=e=>{var r,t=getKeyString(e);return"enter"===t?(r=e,$(),r.currentTarget.select(),r.stopPropagation(),r.preventDefault(),!1):"escape"===t?(t=e,(e=isNumberRef(i)?i.numeric:void 0)!==d&&b(e),t.currentTarget.select(),t.stopPropagation(),t.preventDefault(),!1):void 0},w=useFocusCallback(t,m,c);a="string"==typeof r.size?r.size:FormElementSize.Full;const k=clsx({[numberClasses.large]:a===FormElementSize.Large,[numberClasses.medium]:a===FormElementSize.Medium,[numberClasses.small]:a===FormElementSize.Small});return React.createElement(StyledFormElement,{className:e,element:r,inputId:F,name:m},e=>React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{S&&(e*=100);var r={fractionalDigits:T.fractionalDigits,locale:T.locale};return c.formatNumber(e,r)},parseNumber:e=>{let r=c.coerceNumber(e);return S&&(r=preciseRound(r/100,R)),r}}},React.createElement(NumberInput,{allowUndefined:!0,className:k,correctOnBlur:!0,disabled:!t,endAdornment:D,error:!!o,inputProps:{...e,id:F,onKeyDown:q,title:g},inputRef:w,max:A,maxDecimalPlaces:R,min:U,onBlur:()=>{f(!1)},onChange:e=>b(e),onFocus:()=>{f(!0)},placeholder:N,required:s,size:"small",startAdornment:P,value:d})))};export default NumberComponent;export{numberClasses};
|
|
@@ -8,5 +8,5 @@ export declare const numberRangeSliderClasses: {
|
|
|
8
8
|
/**
|
|
9
9
|
* The component for the "Number Range Slider" Form Element.
|
|
10
10
|
*/
|
|
11
|
-
declare const NumberRangeSlider: ({ className,
|
|
11
|
+
declare const NumberRangeSlider: ({ className, element, enabled, format, manualEntry: elementManualEntry, showMinMaxLabels: elementShowMinMaxLabels, showTickMarks: elementShowTickMarks, name, raiseEvent, title, tooltip: elementTooltip, value: elementValue, setValue: setElementValue, }: FormElementProps<number[] | undefined>) => React.JSX.Element;
|
|
12
12
|
export default NumberRangeSlider;
|
|
@@ -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{useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import{formControlClasses}from"@vertigis/react-ui/FormControl";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import Stack from"@vertigis/react-ui/Stack";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{numberFormatConfiguration}from"../elements/NumberRangeSlider.js";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,NumberDisplayFormat}from"../numberFormatter.js";import{countDecimalsInCustomFormat,getCurrencySymbolInfo,getPercentSymbolInfo,preciseRound}from"../numberUtilities.js";import{getMarks,getNumberConstraints,getNumberSliderValues,sanitizePrecision}from"../numberUtilities.js";import{makeUniqueId,throttle,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import FormLabelNumberField from"./FormLabelNumberField.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberRangeSlider",numberRangeSliderClasses={container:`${PREFIX}-container`,inputContainer:`${PREFIX}-input-container`,toLabel:`${PREFIX}-to-label`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${numberRangeSliderClasses.container}`]:{display:"inline-flex",flexDirection:"column",paddingLeft:e(2),paddingRight:e(2),paddingTop:e(4),width:"100%",[`.${sliderClasses.markLabel}`]:{transform:"translateX(-100%)",'&[data-index="0"]':{transform:"none"}},[`.${numberRangeSliderClasses.inputContainer}`]:{marginTop:e(1),[`.${formControlClasses.root}`]:{flexGrow:1},[`.${numberRangeSliderClasses.toLabel}`]:{marginLeft:e(2),marginRight:e(2),paddingTop:e(2),alignSelf:"center"}}}})),NumberRangeSlider=({className:e,element:t,enabled:r,format:u,manualEntry:a,showMinMaxLabels:n,showTickMarks:o,name:m,raiseEvent:i,title:s,tooltip:l,value:c,setValue:d})=>{const p=useContext(HostContext),b=useLocale(),{currency:g,customDisplayFormat:f,decimals:C,displayFormat:F,endAdornment:R,isPercent:N,numberConstraints:y,startAdornment:x}=useMemo(()=>{var e,t,r=u,a=r?.currency||DEFAULT_CURRENCY,n=r?.displayFormat,o=n===NumberDisplayFormat.PERCENT,m=getNumberConstraints(r,numberFormatConfiguration),i=r?.customDisplayFormat,r=n===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(i):r?.precision,r=sanitizePrecision(r,m.step,numberFormatConfiguration);let s=null,l=null;return n===NumberDisplayFormat.CURRENCY||n===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(b,a))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?s=t:l=t):!o||(e=getPercentSymbolInfo(b))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?s=t:l=t),{currency:a,customDisplayFormat:i,decimals:r,displayFormat:n,endAdornment:l,isPercent:o,numberConstraints:m,startAdornment:s}},[u]);var S=y["step"];const v=y.maximum,E=y.minimum,[A,D]=useState(!1),[I,L]=useState(!1),[P,h]=useState([E,v]),T=useRef(!0),[$,k]=useMemo(()=>{var e=makeUniqueId(m);return[e,`${e}-slider-input`]},[m]);var M=!1!==n,U=!!o,n=!1!==a,o=N?C-2:C;const j={currency:g,customDisplayFormat:f,format:F,fractionalDigits:o=Math.max(0,o),locale:b};useEffect(()=>{var e;T.current?T.current=!1:I?B(P):A||(e=getNumberSliderValues(P,y),P[0]===e[0]&&P[1]===e[1]||h(e),w(c,e)||d(e))},[A,I,P]),useEffect(()=>{var e=getNumberSliderValues(c,y);w(c,e)||d(e,!1),w(P,e)||h(e)},[c]);const w=(e,t)=>void 0===e&&void 0===t[0]&&void 0===t[1]||(void 0===e&&null===t[0]&&null===t[1]||!(!Array.isArray(e)||2!==e.length||e[0]!==t[0]||e[1]!==t[1])),B=useMemo(()=>throttle(e=>{i("dragged",e)}),[]),V=useFocusCallback(r,m,p);a=p.renderText(l),o=!r&&!I,l=n?{max:v,min:E,onBlur:()=>{D(!1)},onFocus:()=>{D(!0)},step:S,title:a}:void 0;return React.createElement(StyledFormElement,{className:e,element:t,inputId:`${k}-0`,name:m},React.createElement(Box,{className:numberRangeSliderClasses.container},React.createElement(Slider,{disabled:o,getAriaLabel:()=>p.renderText(s),getAriaValueText:e=>p.formatNumber(e,j),marks:getMarks(v,E,S,j,M,U),max:v,min:E,onChange:(e,t)=>{L(!0),Array.isArray(t)&&h(t)},onChangeCommitted:()=>{L(!1)},slotProps:{input:()=>({ref:e=>(null===e||e.id||(e.id=`${k}-${e.attributes["data-index"].value}`),V(e))})},step:S,title:a,value:P,valueLabelDisplay:"on",valueLabelFormat:(e,t)=>p.formatNumber(e,j)}),!1!=n&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{N&&(e*=100);var t={fractionalDigits:j.fractionalDigits,locale:j.locale};return p.formatNumber(e,t)},parseNumber:e=>{let t=p.coerceNumber(e);return N&&(t=preciseRound(t/100,C)),t}}},React.createElement(Stack,{direction:"row",className:numberRangeSliderClasses.inputContainer},React.createElement(FormLabelNumberField,{disabled:!r,id:`${$}-startInput`,inputProps:l,endAdornment:R,label:p.renderText("@common-start"),max:v,maxDecimalPlaces:C,min:E,onChange:e=>{void 0===e&&(e=E),h([e,P[1]])},startAdornment:x,value:P[0]}),React.createElement(Box,{className:numberRangeSliderClasses.toLabel}," ",p.renderText("@common-to")," "),React.createElement(FormLabelNumberField,{disabled:!r,endAdornment:R,id:`${$}-endInput`,inputProps:l,label:p.renderText("@common-end"),max:v,maxDecimalPlaces:C,min:E,onChange:e=>{void 0===e&&(e=v),h([P[0],e])},startAdornment:x,value:P[1]})))))};export default NumberRangeSlider;export{numberRangeSliderClasses};
|
|
@@ -7,5 +7,5 @@ export declare const numberSliderClasses: {
|
|
|
7
7
|
/**
|
|
8
8
|
* The component for the "Number Slider" Form Element.
|
|
9
9
|
*/
|
|
10
|
-
declare const NumberSlider: ({ className,
|
|
10
|
+
declare const NumberSlider: ({ className, element, enabled, error, format, manualEntry: elementManualEntry, showMinMaxLabels: elementShowMinMaxLabels, showTickMarks: elementShowTickMarks, name, raiseEvent, title, tooltip: elementTooltip, value: elementValue, setValue: setElementValue, }: FormElementProps<NumberRef | undefined>) => React.JSX.Element;
|
|
11
11
|
export default NumberSlider;
|
|
@@ -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{useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import InputAdornment from"@vertigis/react-ui/InputAdornment";import{inputBaseClasses}from"@vertigis/react-ui/InputBase";import{NumberFormatContext}from"@vertigis/react-ui/NumberFormatContext";import NumberInput from"@vertigis/react-ui/NumberInput";import Slider,{sliderClasses}from"@vertigis/react-ui/Slider";import{styled}from"@vertigis/react-ui/styles";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import HostContext from"../hostContext.js";import{DEFAULT_CURRENCY,NumberDisplayFormat}from"../numberFormatter.js";import{areValuesEqual,countDecimalsInCustomFormat,getCurrencySymbolInfo,getMarks,getNumberConstraints,getNumberSliderValues,getPercentSymbolInfo,preciseRound,sanitizePrecision}from"../numberUtilities.js";import{makeUniqueId,throttle,useLocale}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="NumberSlider",numberSliderClasses={container:`${PREFIX}-container`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${numberSliderClasses.container}`]:{display:"inline-flex",flexDirection:"column",paddingLeft:e(2),paddingRight:e(2),paddingTop:e(4),width:"100%",[`.${sliderClasses.markLabel}`]:{transform:"translateX(-100%)",'&[data-index="0"]':{transform:"none"}},[`.${inputBaseClasses.root}`]:{marginTop:e(1)}}})),NumberSlider=({className:e,element:t,enabled:r,error:a,format:u,manualEntry:o,showMinMaxLabels:s,showTickMarks:m,name:n,raiseEvent:i,title:l,tooltip:c,value:p,setValue:d})=>{const b=useContext(HostContext),f=useLocale(),{currency:y,customDisplayFormat:C,decimals:N,displayFormat:g,endAdornment:F,isPercent:E,numberConstraints:x,startAdornment:S}=useMemo(()=>{var e,t,r=u,a=r?.currency||DEFAULT_CURRENCY,o=r?.displayFormat,s=o===NumberDisplayFormat.PERCENT,m=getNumberConstraints(r),n=r?.customDisplayFormat,r=o===NumberDisplayFormat.CUSTOM?countDecimalsInCustomFormat(n):r?.precision,r=sanitizePrecision(r,m.step);let i=null,l=null;return o===NumberDisplayFormat.CURRENCY||o===NumberDisplayFormat.ACCOUNTING?(e=getCurrencySymbolInfo(f,a))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?i=t:l=t):!s||(e=getPercentSymbolInfo(f))&&(t=React.createElement(InputAdornment,{position:e.position},e.symbol),"start"===e.position?i=t:l=t),{currency:a,customDisplayFormat:n,decimals:r,displayFormat:o,endAdornment:l,isPercent:s,numberConstraints:m,startAdornment:i}},[u]),R=x["step"],v=x.maximum,D=x.minimum,[I,A]=useState(!1),[P,h]=useState(!1),[T,k]=useState(D),B=useRef(!0);var L=`${makeUniqueId(n)}-input`,M=!1!==s,U=!!m,s=!1!==o,m=E?N-2:N,m=Math.max(0,m);const V={currency:y,customDisplayFormat:C,format:g,fractionalDigits:m,locale:f},j=e=>({refValueType:"number",format:{currency:y,customDisplayFormat:C,displayFormat:g,lowerBound:D,precision:N,step:R,upperBound:v},display:b.formatNumber(e,V),numeric:e});useEffect(()=>{var e;B.current?B.current=!1:P?q(T):I||((e=getNumberSliderValues(T,x,!0)[0])!==T&&k(e),e=j(e),areValuesEqual(p,e)||d(e))},[I,P,T]),useEffect(()=>{var e=getNumberSliderValues(p,x,!0)[0],t=j(e);areValuesEqual(p,t)||d(t,!1),T!==e&&k(e)},[p]);const q=useMemo(()=>throttle(e=>{i("dragged",j(e))}),[]);o=useFocusCallback(r,n,b),m=b.renderText(c),c=!r&&!P,r=!r;return React.createElement(StyledFormElement,{className:e,element:t,inputId:L,name:n},React.createElement(Box,{className:numberSliderClasses.container},React.createElement(Slider,{disabled:c,getAriaLabel:()=>b.renderText(l),getAriaValueText:e=>b.formatNumber(e,V),marks:getMarks(v,D,R,V,M,U),max:v,min:D,onChange:(e,t)=>{h(!0);t=Array.isArray(t)?t[0]:t;k(t)},onChangeCommitted:()=>{h(!1)},slotProps:{input:{id:L,ref:o}},step:R,title:m,value:"number"==typeof T?T:0,valueLabelDisplay:"on",valueLabelFormat:(e,t)=>b.formatNumber(e,V)}),!1!=s&&React.createElement(NumberFormatContext.Provider,{value:{formatNumber:e=>{E&&(e*=100);var t={fractionalDigits:V.fractionalDigits,locale:V.locale};return b.formatNumber(e,t)},parseNumber:e=>{let t=b.coerceNumber(e);return E&&(t=preciseRound(t/100,N)),t}}},React.createElement(NumberInput,{correctOnBlur:!0,disabled:r,endAdornment:F,error:!!a,inputProps:{step:R,title:m},max:v,maxDecimalPlaces:N,min:D,onChange:e=>{void 0===e?k(D):k(e)},onFocus:()=>{A(!0)},onBlur:()=>{A(!1)},size:"small",startAdornment:S,value:T}))))};export default NumberSlider;export{numberSliderClasses};
|
|
@@ -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: ({ className,
|
|
7
|
+
declare const RadioGroup: ({ className, current, element, enabled, id, items: elementItems, label, name, orientation, raiseEvent, setProperty, setValue, value, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
|
|
8
8
|
export default RadioGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import Radio from"@vertigis/react-ui/Radio";import BaseRadioGroup from"@vertigis/react-ui/RadioGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useEffect}from"react";import
|
|
1
|
+
import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import Radio from"@vertigis/react-ui/Radio";import BaseRadioGroup from"@vertigis/react-ui/RadioGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{makeSafeClassName,inspectItems}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({marginBottom:e(1.5)})),RadioGroup=({className:e,current:t,element:o,enabled:a,id:r,items:m,label:l,name:n,orientation:s,raiseEvent:i,setProperty:c,setValue:u,value:d})=>{const p=useContext(HostContext),f=inspectItems(t,m,d);var v=f.items;const R=[];var b=useFocusCallback(a,n,p);useEffect(()=>{t!==f.current&&c("current",f.current),l!==f.label&&c("label",f.label),d!==f.value&&u(f.value,!1)});for(const k in v){const y=v[k];var C=a&&!1!==y.enabled,E=p.renderText(y.tooltip),F=y.styleName?makeSafeClassName(y.styleName):void 0;R.push(React.createElement(FormControlLabel,{className:F,control:React.createElement(Radio,{inputRef:b,onClick:()=>{t!==k&&(c("current",k),y.value!==d?u(y.value,{item:k}):i("changed",y.value,void 0,k))}}),disabled:!C,key:k,label:React.createElement(Markdown,{text:y.label}),title:E,value:k}))}return React.createElement(StyledFormElement,{className:e,component:"fieldset",element:o,name:n},React.createElement(BaseRadioGroup,{name:r,row:s===Orientation.HORIZONTAL,value:t||""},R))};export default RadioGroup;
|
|
@@ -7,5 +7,5 @@ export declare const scannerClasses: {
|
|
|
7
7
|
button: string;
|
|
8
8
|
inputContainer: string;
|
|
9
9
|
};
|
|
10
|
-
declare const Scanner: ({ autoActivate, className,
|
|
10
|
+
declare const Scanner: ({ autoActivate, className, element, enabled, manualEntry, name, raiseEvent, require, scanType, setProperty, setValue: setElementValue, size, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.ScanRef | undefined>) => React.JSX.Element;
|
|
11
11
|
export default Scanner;
|
|
@@ -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}from"react";import*as React from"react";import
|
|
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}from"react";import*as React from"react";import{ScanType}from"../constants.js";import{scannerConfiguration}from"../elements/Scanner.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{isScanRef,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const PREFIX="Scanner",scannerClasses={container:`${PREFIX}-container`,button:`${PREFIX}-button`,inputContainer:`${PREFIX}-inner`},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,a)=>{var r=typeof e,r="number"==r||"string"==r?e.toString():e?.value?.toString();if(r)return t=t||e?.entryMethod||EntryMethod.Manual,{refValueType:"scan",value:r,scanType:a=a||e?.scanType,entryMethod:t}},Scanner=({autoActivate:e,className:t,element:a,enabled:r,manualEntry:n,name:o,raiseEvent:c,require:s,scanType:i,setProperty:l,setValue:u,size:m,tooltip:d,value:p})=>{const E=useContext(HostContext),[f,S]=useState(!0),[C,y]=useState(null),[v,g]=useState(""),[F,R]=useState(!1),[T,B]=useState(scannerConfiguration.rows.default),M=useRef(null);var h=`${makeUniqueId(o)}-input`;const w="barcode"!==i;useEffect(()=>{let e=scannerConfiguration.rows.default;"number"==typeof m&&(e=Math.max(scannerConfiguration.rows.minimum,m)),B(e)},[m]),useEffect(()=>(R(!0),()=>R(!1)),[]),useEffect(()=>{F&&r&&e&&(l("autoActivate",!1),b())},[F]),useEffect(()=>{const e=()=>{S(!1),setTimeout(()=>{F&&S(!0)},CAMERA_READY_TIMEOUT_MS)};return C&&e(),()=>{C&&(C.reset(),e())}},[C]);var A=useFocusCallback(r,o,E);useEffect(()=>{let e=p;!isScanRef(e)&&e&&(e=convertToScanRef(e),u(e,!1));var t=e?.value||"";v!==t&&g(t)},[p]);var I=E.renderText(d),d=!r,n=d||!n;const _=(e,t,a)=>{e&&p?.value!==e&&(a=convertToScanRef(e,t,a),u(a),g(e))},D=async e=>{var t=await import("@zxing/library");let a;return e===ScanType.QrCode?a=[t.BarcodeFormat.AZTEC,t.BarcodeFormat.DATA_MATRIX,t.BarcodeFormat.MAXICODE,t.BarcodeFormat.PDF_417,t.BarcodeFormat.QR_CODE]:e===ScanType.BarCode&&(a=[t.BarcodeFormat.CODABAR,t.BarcodeFormat.CODE_39,t.BarcodeFormat.CODE_93,t.BarcodeFormat.CODE_128,t.BarcodeFormat.EAN_8,t.BarcodeFormat.EAN_13,t.BarcodeFormat.ITF,t.BarcodeFormat.RSS_14,t.BarcodeFormat.RSS_EXPANDED,t.BarcodeFormat.UPC_A,t.BarcodeFormat.UPC_E,t.BarcodeFormat.UPC_EAN_EXTENSION]),a},b=async()=>{if(C)return y(null),void c("cancel",void 0);if(F){var e=await(async e=>{var t=await import("@zxing/library"),e=await D(e);const a=new Map;return a.set(t.DecodeHintType.POSSIBLE_FORMATS,e),a})(i);const t=await import("@zxing/library");e=new t.BrowserMultiFormatReader(e);y(e),await(async e=>{try{var t=await e.listVideoInputDevices();if(!t||0==t.length)throw new DOMException("No video input devices detected.");const r=await e.decodeOnceFromVideoDevice(void 0,M.current||void 0),n=await D(ScanType.QrCode);var a=n.indexOf(r.getBarcodeFormat())<0?ScanType.BarCode:ScanType.QrCode;_(r.toString(),EntryMethod.Camera,a),y(null)}catch(e){e instanceof DOMException&&(l("error",e.message),y(null))}})(e)}};return React.createElement(StyledFormElement,{className:t,element:a,inputId:h,name:o},React.createElement(Stack,{className:scannerClasses.container},React.createElement("video",{hidden:!C,ref:M}),React.createElement(Stack,{className:scannerClasses.inputContainer,direction:"row"},React.createElement(Input,{disabled:n,fullWidth:!0,id:h,inputProps:{title:I},inputRef:A,multiline:w,onBlur:e=>{0<e.currentTarget.value.length&&(y(null),_(e.currentTarget.value,EntryMethod.Manual))},onChange:e=>{g(e.currentTarget.value)},onKeyDown:e=>{"enter"===getKeyString(e)&&e.stopPropagation(),w||(e=e.currentTarget,y(null),_(e.value,EntryMethod.Manual))},required:s,rows:w?T:void 0,spellCheck:!1,value:v}),React.createElement(Button,{className:scannerClasses.button,color:"primary",disabled:d||!f,onClick:b,ref:A,title:I},C?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;export{scannerClasses};
|
|
@@ -12,5 +12,5 @@ export declare const sectionClasses: {
|
|
|
12
12
|
/**
|
|
13
13
|
* The component for the "Section" Form Element.
|
|
14
14
|
*/
|
|
15
|
-
declare const Section: ({ accessibleDescription: elementAccessibleDescription, className, collapsed, component, description: elementDescription, element, enabled, error: elementError,
|
|
15
|
+
declare const Section: ({ accessibleDescription: elementAccessibleDescription, className, collapsed, component, description: elementDescription, element, enabled, error: elementError, name, setProperty, }: FormElementProps) => React.JSX.Element;
|
|
16
16
|
export default Section;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Accordion,{accordionClasses}from"@vertigis/react-ui/Accordion";import AccordionSummary from"@vertigis/react-ui/AccordionSummary";import Box from"@vertigis/react-ui/Box";import FormLabel from"@vertigis/react-ui/FormLabel";import ChevronDown from"@vertigis/react-ui/icons/ChevronDown";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useEffect}from"react";import{defs}from"../FormHost.js";import
|
|
1
|
+
import Accordion,{accordionClasses}from"@vertigis/react-ui/Accordion";import AccordionSummary from"@vertigis/react-ui/AccordionSummary";import Box from"@vertigis/react-ui/Box";import FormLabel from"@vertigis/react-ui/FormLabel";import ChevronDown from"@vertigis/react-ui/icons/ChevronDown";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import*as React from"react";import{useContext,useEffect}from"react";import{defs}from"../FormHost.js";import HostContext from"../hostContext.js";import{getLabelId,isAccordionSection,isCollapsibleSection,isFieldsetSection,isTabSection,makeSafeClassName,makeUniqueId}from"../utils.js";import Markdown from"./Markdown.js";import{renderAccessibleDescription,renderDescription,renderError,useFocusCallback}from"./common.js";const PREFIX="WorkflowSection",sectionClasses={root:`${PREFIX}-root`,basicSection:`${PREFIX}-basicSection`,fieldSetSection:`${PREFIX}-fieldSetSection`,tabSection:`${PREFIX}-tabSetSection`,title:`${PREFIX}-title`,unstyledSection:`${PREFIX}-unstyledSection`,description:`${PREFIX}-description`},StyledAccordion=styled(Accordion)(({theme:{spacing:e}})=>({[`.${accordionClasses.region}`]:{padding:e(1),[`.${sectionClasses.description} p`]:{marginBottom:0,marginTop:0,padding:e(.5)}}})),StyledTabPage=styled(Box)(({theme:{spacing:e}})=>({padding:e(1)})),StyledSection=styled(Box)(({theme:{palette:e,spacing:t,typography:{pxToRem:o}}})=>({margin:`${t(4)} 0 ${t(4)} 0`,[`.${sectionClasses.description} p`]:{marginBottom:0,marginTop:0,padding:t(.5)},[`&.${sectionClasses.basicSection}`]:{borderLeft:`6px solid ${e.primary[500]}`,paddingLeft:t(1),paddingRight:t(1)},[`&.${sectionClasses.fieldSetSection}`]:{position:"relative",border:`3px solid ${e.primary[500]}`,borderLeft:"none",borderRight:"none",padding:`${t(3)} 0 ${t(2)} 0`,[`.${sectionClasses.title}`]:{backgroundColor:e.background.default,position:"absolute",top:o(-22),left:0,padding:0,"& span":{paddingRight:t(1)}}},[`&.${sectionClasses.unstyledSection}`]:{marginBottom:0,marginTop:0}})),Section=({accessibleDescription:e,className:t,collapsed:o,component:i,description:s,element:n,enabled:r,error:a,name:c,setProperty:l})=>{const d=useContext(HostContext);let m;null!=n&&n.format&&(m=n.format),m=void 0!==m&&null!==m?m:defs.DEFAULT_SECTION_FORMAT;const p=isAccordionSection(n);var S=isFieldsetSection(n),f=isTabSection(n);const b=p||f||isCollapsibleSection(n);var u=`${makeUniqueId(c)}-input`,g=useFocusCallback(r,c,d);useEffect(()=>(d.refs[c]=i,()=>{d.refs[c]=void 0}),[]);var C,y,E,$=(C=n,y=u,E=S?"legend":void 0,React.createElement(FormLabel,{className:sectionClasses.title,error:b&&(d.hasInvalidChild(C)||!!a),id:getLabelId(y),component:E||"h6"},React.createElement(Markdown,{inline:!0,text:C.title}))),r=renderDescription(s,u,r,sectionClasses.description),e=renderAccessibleDescription(e,s,u,d),s=renderError(a),u={"aria-labelledby":$?.props?.id,"aria-details":r?.props?.id,"aria-describedby":e?.props?.id},s=[r,e,s,i.props.children],n=clsx(t,n.type,sectionClasses.root,{[sectionClasses.basicSection]:"basic-section"===m,[sectionClasses.fieldSetSection]:"fieldset-section"===m,[sectionClasses.tabSection]:"tab-section"===m,[sectionClasses.unstyledSection]:"unstyled-section"===m,[makeSafeClassName(c)]:!!c,[makeSafeClassName(n.styleName)]:!!n.styleName});if(f)return React.createElement(StyledTabPage,{"aria-labelledby":`simple-tab-${c}`,className:n,hidden:o,id:`simple-tabpanel-${c}`,role:"tabpanel"},...s);if(b)return React.createElement(StyledAccordion,{className:n,expanded:!0!==o,onChange:(e,t)=>{p&&t?d.updateMutuallyExclusiveSections(c):l("collapsed",!t)},...u},React.createElement(AccordionSummary,{expandIcon:React.createElement(ChevronDown,null),ref:g},$),...s);{const i=S?"fieldset":"section";return React.createElement(StyledSection,{className:n,component:i,...u},$,React.createElement(Box,null,...s))}};export default Section;export{sectionClasses};
|
|
@@ -8,5 +8,5 @@ export declare const signatureClasses: {
|
|
|
8
8
|
/**
|
|
9
9
|
* The component for the "Signature" Form Element.
|
|
10
10
|
*/
|
|
11
|
-
declare const Signature: ({ className,
|
|
11
|
+
declare const Signature: ({ className, element, enabled, label, name, prompt, require, setValue, size, title, tooltip: elementTooltip, value, }: FormElementProps<defs.SignatureRef | undefined>) => React.JSX.Element;
|
|
12
12
|
export default Signature;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import Dialog from"@vertigis/react-ui/Dialog";import IconButton from"@vertigis/react-ui/IconButton";import SignatureIcon from"@vertigis/react-ui/icons/Signature";import Trash from"@vertigis/react-ui/icons/Trash";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useEffect,useState}from"react";import
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import Dialog from"@vertigis/react-ui/Dialog";import IconButton from"@vertigis/react-ui/IconButton";import SignatureIcon from"@vertigis/react-ui/icons/Signature";import Trash from"@vertigis/react-ui/icons/Trash";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useState}from"react";import{signatureConfiguration}from"../elements/Signature.js";import HostContext from"../hostContext.js";import{makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import SignatureDialog from"./SignatureDialog.js";import{renderTitle,useFocusCallback}from"./common.js";const PREFIX="Signature",signatureClasses={button:`${PREFIX}-button`,image:`${PREFIX}-image`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${signatureClasses.button}`]:{marginBottom:e(1),marginTop:e(1)},[`.${signatureClasses.image}`]:{alignItems:"flex-start",display:"flex",flexDirection:"row",gap:e(1),img:{border:"solid 1px grey",flexShrink:1,minWidth:0}}})),Signature=({className:e,element:t,enabled:a,label:i,name:r,prompt:o,require:n,setValue:s,size:l,title:m,tooltip:c,value:u})=>{const g=useContext(HostContext),[d,f]=useState(),[p,x]=useState(500),C=g.renderText(c),h=useFocusCallback(a,r,g),E=g.renderText("@common-clear");useEffect(()=>{let e=signatureConfiguration.width.default;"number"!=typeof l||isNaN(l)?"object"!=typeof l||void 0===l.width||isNaN(l.width)||(e=l.width):e=l,e=Math.max(e,signatureConfiguration.width.minimum),e=Math.min(e,signatureConfiguration.width.maximum),x(e)},[l]),useEffect(()=>{f(u?.dataUrl)},[u]);const b=async e=>{if(e){const a=await fetch(e);var t=await a.blob(),t=new File([t],`${r}.png`,{type:t.type});s({refValueType:"signature",dataUrl:e,file:t})}else s(void 0);f(e)};return React.createElement(StyledFormElement,{className:e,element:t,name:r},d?React.createElement(Box,{className:signatureClasses.image},React.createElement("img",{src:d,alt:C}),React.createElement(IconButton,{"aria-label":E,disabled:!a,onClick:()=>b(void 0),title:E},React.createElement(Trash,null))):null,d?null:React.createElement(Box,{className:signatureClasses.button},React.createElement(Button,{disabled:!a,onClick:async()=>{const e=Math.round(.4*p);await g.displayDialog(a=>React.createElement(SignatureDialog,{cancelCaption:g.renderText("@common-cancel"),clearCaption:E,doneCaption:g.renderText("@common-done"),format:"image/png",height:e,helperText:React.createElement(Markdown,{inline:!0,text:i}),host:g,onClose:(e,t)=>{e&&b(t),a()},title:renderTitle(makeUniqueId(r+"-dialog"),n,m),undoCaption:g.renderText("@common-undo"),width:p}),Dialog)},ref:h,startIcon:React.createElement(SignatureIcon,null),title:C,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:o||""}))))};export default Signature;export{signatureClasses};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import type { FormHostMembers } from "../hostContext";
|
|
2
3
|
export declare const signatureDialogClasses: {
|
|
3
4
|
canvas: string;
|
|
4
5
|
canvasAnnotations: string;
|
|
@@ -13,10 +14,11 @@ export interface StyledDialogProps {
|
|
|
13
14
|
format: string;
|
|
14
15
|
helperText: React.JSX.Element | null;
|
|
15
16
|
height: number;
|
|
17
|
+
host: FormHostMembers;
|
|
16
18
|
title: React.JSX.Element | null;
|
|
17
19
|
undoCaption: string;
|
|
18
20
|
width: number;
|
|
19
21
|
onClose: (confirm: boolean, dataUrl: string | undefined) => void;
|
|
20
22
|
}
|
|
21
|
-
declare const SignatureDialog: ({ cancelCaption, clearCaption, doneCaption, format, height, helperText, title, undoCaption, width, onClose, }: StyledDialogProps) => React.JSX.Element;
|
|
23
|
+
declare const SignatureDialog: ({ cancelCaption, clearCaption, doneCaption, format, height, helperText, host, title, undoCaption, width, onClose, }: StyledDialogProps) => React.JSX.Element;
|
|
22
24
|
export default SignatureDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import DialogActions from"@vertigis/react-ui/DialogActions";import DialogContent from"@vertigis/react-ui/DialogContent";import DialogTitle from"@vertigis/react-ui/DialogTitle";import IconButton from"@vertigis/react-ui/IconButton";import Skeleton from"@vertigis/react-ui/Skeleton";import Stack from"@vertigis/react-ui/Stack";import Typography from"@vertigis/react-ui/Typography";import Trash from"@vertigis/react-ui/icons/Trash";import Undo from"@vertigis/react-ui/icons/Undo";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{lazy,Suspense}from"react";const SignaturePadWrapper=lazy(()=>import("react-signature-pad-wrapper")),DialogPrefix="SignatureDialog",signatureDialogClasses={canvas:`${DialogPrefix}-canvas`,canvasAnnotations:`${DialogPrefix}-canvas-annotations`,container:`${DialogPrefix}-container`,mark:`${DialogPrefix}-mark`,titleText:`${DialogPrefix}-title-text`},StyledDialogTitle=styled(DialogTitle)(()=>({display:"flex",[`.${signatureDialogClasses.titleText}`]:{flexGrow:1,flexShrink:1}})),StyledDialogContent=styled(DialogContent)(({theme:{spacing:e,typography:t}})=>({[`.${signatureDialogClasses.container}`]:{backgroundColor:"#eee",filter:"drop-shadow(2px 2px 2px grey)",[`.${signatureDialogClasses.canvas}`]:{position:"relative",zIndex:1},[`.${signatureDialogClasses.canvasAnnotations}`]:{alignItems:"center",display:"flex",flexDirection:"column",marginTop:t.pxToRem(-64),paddingLeft:e(1),paddingRight:e(1),position:"relative",zIndex:0,[`.${signatureDialogClasses.mark}`]:{fontSize:"large",borderBottom:"solid 1px black",width:"100%"}}}})),NonItalicCaption=styled(Typography)(()=>({fontStyle:"inherit"})),SignatureDialog=({cancelCaption:e,clearCaption:t,doneCaption:a,format:i,height:o,helperText:r,
|
|
1
|
+
import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import DialogActions from"@vertigis/react-ui/DialogActions";import DialogContent from"@vertigis/react-ui/DialogContent";import DialogTitle from"@vertigis/react-ui/DialogTitle";import IconButton from"@vertigis/react-ui/IconButton";import Skeleton from"@vertigis/react-ui/Skeleton";import Stack from"@vertigis/react-ui/Stack";import Typography from"@vertigis/react-ui/Typography";import Trash from"@vertigis/react-ui/icons/Trash";import Undo from"@vertigis/react-ui/icons/Undo";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{lazy,Suspense}from"react";import{HostProvider}from"../hostContext.js";const SignaturePadWrapper=lazy(()=>import("react-signature-pad-wrapper")),DialogPrefix="SignatureDialog",signatureDialogClasses={canvas:`${DialogPrefix}-canvas`,canvasAnnotations:`${DialogPrefix}-canvas-annotations`,container:`${DialogPrefix}-container`,mark:`${DialogPrefix}-mark`,titleText:`${DialogPrefix}-title-text`},StyledDialogTitle=styled(DialogTitle)(()=>({display:"flex",[`.${signatureDialogClasses.titleText}`]:{flexGrow:1,flexShrink:1}})),StyledDialogContent=styled(DialogContent)(({theme:{spacing:e,typography:t}})=>({[`.${signatureDialogClasses.container}`]:{backgroundColor:"#eee",filter:"drop-shadow(2px 2px 2px grey)",[`.${signatureDialogClasses.canvas}`]:{position:"relative",zIndex:1},[`.${signatureDialogClasses.canvasAnnotations}`]:{alignItems:"center",display:"flex",flexDirection:"column",marginTop:t.pxToRem(-64),paddingLeft:e(1),paddingRight:e(1),position:"relative",zIndex:0,[`.${signatureDialogClasses.mark}`]:{fontSize:"large",borderBottom:"solid 1px black",width:"100%"}}}})),NonItalicCaption=styled(Typography)(()=>({fontStyle:"inherit"})),SignatureDialog=({cancelCaption:e,clearCaption:t,doneCaption:a,format:i,height:o,helperText:r,host:n,title:l,undoCaption:s,width:c,onClose:g})=>{let m,p,u;return React.createElement(HostProvider,{value:n},React.createElement(StyledDialogTitle,null,React.createElement("div",{className:signatureDialogClasses.titleText},l),React.createElement(Stack,{direction:"row"},React.createElement(IconButton,{"aria-label":s,onClick:async()=>{if(m){const e=m.toData();e.pop(),m.fromData(e)}},title:s},React.createElement(Undo,null)),React.createElement(IconButton,{"aria-label":t,onClick:async()=>{p&&p.clear()},title:t},React.createElement(Trash,null)))),React.createElement(StyledDialogContent,null,React.createElement(Box,{className:signatureDialogClasses.container,sx:{height:`${o}px`,width:`${c}px`}},React.createElement(Suspense,{fallback:React.createElement(Skeleton,{variant:"rectangular",width:c,height:o})},React.createElement(SignaturePadWrapper,{canvasProps:{className:signatureDialogClasses.canvas},ref:e=>{m=e||void 0,p=m?.instance||void 0,u=m?.canvas?.current||void 0,u&&(u.oncontextmenu=()=>!1,u.height=o,u.width=c)}}),React.createElement(Box,{className:signatureDialogClasses.canvasAnnotations},React.createElement(Typography,{"aria-hidden":!0,className:signatureDialogClasses.mark},"X"),React.createElement(NonItalicCaption,{variant:"caption"},r))))),React.createElement(DialogActions,null,React.createElement(Button,{color:"primary",onClick:()=>{let e;p&&!p.isEmpty()&&(e=p.toDataURL(i)),g(!0,e)},variant:"contained"},a),React.createElement(Button,{color:"inherit",onClick:()=>{g(!1,void 0)},variant:"outlined"},e)))};export default SignatureDialog;export{signatureDialogClasses};
|
|
@@ -9,5 +9,5 @@ export declare const sketchClasses: {
|
|
|
9
9
|
/**
|
|
10
10
|
* The component for the "Sketch" Form Element.
|
|
11
11
|
*/
|
|
12
|
-
declare const Sketch: ({ className,
|
|
12
|
+
declare const Sketch: ({ className, element, enabled, name, prompt, require, setValue, size, source, title, tooltip: elementTooltip, value, }: FormElementProps<defs.SketchRef | undefined>) => React.JSX.Element;
|
|
13
13
|
export default Sketch;
|