@vertigis/workflow 5.40.0 → 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.
Files changed (105) hide show
  1. package/activities/arcgis/ArcadeScript.d.ts +5 -1
  2. package/activities/arcgis/ArcadeScript.js +1 -1
  3. package/activities/arcgis/RunPrint.d.ts +1 -0
  4. package/activities/arcgis/RunPrint.js +1 -1
  5. package/activities/arcgis/RunReport.d.ts +1 -0
  6. package/activities/arcgis/RunReport.js +1 -1
  7. package/activities/ui/Alert.d.ts +6 -3
  8. package/activities/ui/Alert.js +1 -1
  9. package/activities/ui/Confirm.d.ts +6 -3
  10. package/activities/ui/Confirm.js +1 -1
  11. package/activities/ui/DialogContent.d.ts +24 -0
  12. package/activities/ui/DialogContent.js +1 -0
  13. package/activities/ui/DialogProvider.d.ts +19 -0
  14. package/activities/ui/DialogProvider.js +1 -0
  15. package/activities/ui/Prompt.d.ts +7 -4
  16. package/activities/ui/Prompt.js +1 -1
  17. package/execution/Engine.js +1 -1
  18. package/forms/FormHost.d.ts +1 -3
  19. package/forms/components/AccordionGroup.js +1 -1
  20. package/forms/components/AutoComplete.d.ts +1 -1
  21. package/forms/components/AutoComplete.js +1 -1
  22. package/forms/components/ButtonBar.d.ts +1 -1
  23. package/forms/components/ButtonBar.js +1 -1
  24. package/forms/components/CheckBox.d.ts +1 -1
  25. package/forms/components/CheckBox.js +1 -1
  26. package/forms/components/CheckGroup.d.ts +1 -1
  27. package/forms/components/CheckGroup.js +1 -1
  28. package/forms/components/Custom.d.ts +1 -1
  29. package/forms/components/Custom.js +1 -1
  30. package/forms/components/DatePicker.d.ts +1 -1
  31. package/forms/components/DatePicker.js +1 -1
  32. package/forms/components/DateRangePicker.d.ts +1 -1
  33. package/forms/components/DateRangePicker.js +1 -1
  34. package/forms/components/DateTimePicker.d.ts +1 -1
  35. package/forms/components/DateTimePicker.js +1 -1
  36. package/forms/components/DropDownList.d.ts +1 -1
  37. package/forms/components/DropDownList.js +1 -1
  38. package/forms/components/FilePicker.d.ts +4 -1
  39. package/forms/components/FilePicker.js +1 -1
  40. package/forms/components/Form.d.ts +1 -1
  41. package/forms/components/Form.js +1 -1
  42. package/forms/components/FormElement.d.ts +37 -0
  43. package/forms/components/FormElement.js +1 -0
  44. package/forms/components/GeometryPicker.d.ts +4 -1
  45. package/forms/components/GeometryPicker.js +1 -1
  46. package/forms/components/HorizontalRule.d.ts +1 -1
  47. package/forms/components/HorizontalRule.js +1 -1
  48. package/forms/components/Image.d.ts +1 -1
  49. package/forms/components/Image.js +1 -1
  50. package/forms/components/ItemPicker.d.ts +1 -1
  51. package/forms/components/ItemPicker.js +1 -1
  52. package/forms/components/ListBox.d.ts +4 -1
  53. package/forms/components/ListBox.js +1 -1
  54. package/forms/components/Markdown.d.ts +1 -3
  55. package/forms/components/Markdown.js +1 -1
  56. package/forms/components/Number.d.ts +1 -1
  57. package/forms/components/Number.js +1 -1
  58. package/forms/components/NumberRangeSlider.d.ts +1 -1
  59. package/forms/components/NumberRangeSlider.js +1 -1
  60. package/forms/components/NumberSlider.d.ts +1 -1
  61. package/forms/components/NumberSlider.js +1 -1
  62. package/forms/components/RadioGroup.d.ts +1 -1
  63. package/forms/components/RadioGroup.js +1 -1
  64. package/forms/components/Scanner.d.ts +1 -1
  65. package/forms/components/Scanner.js +1 -1
  66. package/forms/components/Section.d.ts +1 -1
  67. package/forms/components/Section.js +1 -1
  68. package/forms/components/Signature.d.ts +1 -1
  69. package/forms/components/Signature.js +1 -1
  70. package/forms/components/SignatureDialog.d.ts +3 -1
  71. package/forms/components/SignatureDialog.js +1 -1
  72. package/forms/components/Sketch.d.ts +1 -1
  73. package/forms/components/Sketch.js +1 -1
  74. package/forms/components/SketchDialog.d.ts +3 -8
  75. package/forms/components/SketchDialog.js +1 -1
  76. package/forms/components/TabGroup.js +1 -1
  77. package/forms/components/Text.d.ts +1 -1
  78. package/forms/components/Text.js +1 -1
  79. package/forms/components/TextArea.d.ts +1 -1
  80. package/forms/components/TextArea.js +1 -1
  81. package/forms/components/TextBox.d.ts +1 -1
  82. package/forms/components/TextBox.js +1 -1
  83. package/forms/components/TimePicker.d.ts +1 -1
  84. package/forms/components/TimePicker.js +1 -1
  85. package/forms/{common.d.ts → components/common.d.ts} +13 -28
  86. package/forms/components/common.js +1 -0
  87. package/forms/dateUtilities.d.ts +2 -1
  88. package/forms/dateUtilities.js +1 -1
  89. package/forms/hostContext.d.ts +3 -0
  90. package/forms/hostContext.js +1 -0
  91. package/forms/index.d.ts +0 -21
  92. package/forms/numberUtilities.d.ts +1 -1
  93. package/forms/numberUtilities.js +1 -1
  94. package/forms/presenter.js +1 -1
  95. package/forms/utils.d.ts +13 -0
  96. package/forms/utils.js +1 -1
  97. package/libs/version.d.ts +1 -1
  98. package/libs/version.js +1 -1
  99. package/licensing/LicenseChecker.js +1 -1
  100. package/package.json +5 -5
  101. package/ui/UIService.d.ts +23 -0
  102. package/ui/UIService.js +1 -0
  103. package/forms/FormElement.d.ts +0 -23
  104. package/forms/FormElement.js +0 -1
  105. package/forms/common.js +0 -1
@@ -5,6 +5,10 @@ export interface ArcadeScriptInputs {
5
5
  script: string;
6
6
  /** The parameters to pass to the Arcade script. */
7
7
  parameters?: Record<string, any>;
8
+ /** The profile describing the types of the parameters. */
9
+ profile?: __esri.Profile | "feature-reduction-popup" | "feature-reduction-popup-element" | "feature-z" | "field-calculation" | "form-calculation" | "form-constraint" | "labeling" | "popup" | "popup-element" | "visualization" | string;
10
+ /** The spatial reference to use when executing the Arcade script. */
11
+ spatialReference?: __esri.SpatialReference;
8
12
  }
9
13
  /** Defines outputs for the Arcade script. */
10
14
  export interface ArcadeScriptOutputs {
@@ -13,5 +17,5 @@ export interface ArcadeScriptOutputs {
13
17
  export declare class ArcadeScript implements IActivityHandler {
14
18
  static readonly action = "gcx:wf:arcgis::ArcadeScript";
15
19
  static readonly suite = "gcx:wf:builtin";
16
- execute(inputs: ArcadeScriptInputs): ArcadeScriptOutputs;
20
+ execute(inputs: ArcadeScriptInputs): Promise<ArcadeScriptOutputs>;
17
21
  }
@@ -1 +1 @@
1
- import{parseAndExecuteScript}from"@arcgis/core/arcade/arcade";import{validation}from"../../Validation.js";class ArcadeScript{execute(r){var a=validation.string("script",r.script,validation.never);const t={};var e={vars:t};if(r.parameters)for(const i in r.parameters){var c=r.parameters[i];t["$"+i]=c}return{result:parseAndExecuteScript(a,e,null)}}}ArcadeScript.action="gcx:wf:arcgis::ArcadeScript",ArcadeScript.suite="gcx:wf:builtin";export{ArcadeScript};
1
+ import*as arcade from"@arcgis/core/arcade";import{validation}from"../../Validation.js";class ArcadeScript{async execute(e){var a,r,t=validation.string("script",e.script,validation.never),{parameters:c,spatialReference:i}=e;let s=e["profile"];switch(typeof s){case"string":s=arcade.createArcadeProfile(s);break;case"undefined":s={variables:[]}}const n={};for([a,r]of Object.entries(c||{})){const d="$"===a[0]?a:`$${a}`;n[d]=r,s.variables.some(e=>e.name===d)||s.variables.push({name:d,type:"text"})}const o=await arcade.createArcadeExecutor(t,s);return{result:await o.executeAsync(n,{spatialReference:i})}}}ArcadeScript.action="gcx:wf:arcgis::ArcadeScript",ArcadeScript.suite="gcx:wf:builtin";export{ArcadeScript};
@@ -9,6 +9,7 @@ export interface RunPrintInputs {
9
9
  scale?: number;
10
10
  parameters?: Record<string, any>;
11
11
  resultFileName?: string;
12
+ resolution?: number;
12
13
  }
13
14
  /** Defines outputs for the RunPrint activity. */
14
15
  export interface RunPrintOutputs {
@@ -1 +1 @@
1
- var RunPrint_1;import{__decorate}from"tslib";import{ActivityInputError,ActivityNotImplementedError,GenericActivityError}from"../../Errors.js";import{activateTwo}from"../../Hooks.js";import{validation}from"../../Validation.js";import{ChannelProvider}from"../core/ChannelProvider.js";import{MapProvider}from"./MapProvider.js";import{checkResult,getMapControlNames,getServiceToken,runJob,getServiceUrl}from"./runUtils.js";import{getAuthenticationToken,getPortalDataUrl,getPortalItem,parsePortalItemUrl}from"./shared.js";let RunPrint=RunPrint_1=class{async execute(e,t,r,a){var i=validation.string("url",e.url,validation.never),n=validation.number("scale",e.scale,void 0),o=validation.string("resultFileName",e.resultFileName,"Print");if(void 0!==n&&n<=0)throw new ActivityInputError("scale","Scale must be greater than zero.");var l=parsePortalItemUrl(i);let s,c;if(l&&(c=this.getAuthenticationToken(l.portalUrl),s=getPortalDataUrl(l,c)),!l||!l.itemId)throw Error(`Unable to get item ID for print template '${i}.`);if(!s)throw Error(`Unable to get item URL for print template '${i}.`);const m=t.cancellationToken;i=await getPortalItem(s,r,m);const p=r.create();m.finally(function(){p.cancel()});r=getServiceUrl(i.url,"printing");let u;c&&"public"!==i.access&&(u=await getServiceToken(r,l.portalUrl,c,p));const v=[];if(e.parameters)for(const P of Object.keys(e.parameters)){var g,d=e.parameters[P];d&&(g=d instanceof Array,v.push({name:P,containsMultipleValues:g,value:g?void 0:d,values:g?d:void 0}))}i=await getMapControlNames(l,r,u,p,m);if(i?.length){i=i[0],t=await this.getWebmapParameters(a,i,n,e.extent,t.ambient.trivia);if(t?.length)for(const w of t)v.push(w)}o={template:{itemId:l.itemId,portalUrl:l.portalUrl,title:o},parameters:v},o=(await runJob(r,u,o,p)).response.ticket;return{href:await checkResult(r,u,o,1e3,p,m)}}getAuthenticationToken(e){return getAuthenticationToken(e)}async getWebmapParameters(e,t,r,a,i){const n=e.create();if(await n.load(),!n.map)throw new GenericActivityError("No map available. Unable to generate webmap parameters.");e=r||n.getScale(),a=a||n.getExtent(),i=await this.getWebmap(n,e,i),a=await this.getWgs84Extent(a);return this.prepareWebmapParameters(t,i,r||0,a)}async getWebmap(e,t,r){throw console.warn("getWebmap needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}async getWgs84Extent(e){throw console.warn("getWgs84Extent needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}prepareWebmapParameters(e,t,r,a){throw console.warn("prepareWebmapParameters needs to be overriden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}};RunPrint.action="gcx:wf:geocortex::RunPrint",RunPrint.suite="gcx:wf:builtin",RunPrint=RunPrint_1=__decorate([activateTwo(ChannelProvider,MapProvider)],RunPrint);export{RunPrint};
1
+ var RunPrint_1;import{__decorate}from"tslib";import{ActivityInputError,ActivityNotImplementedError,GenericActivityError}from"../../Errors.js";import{activateTwo}from"../../Hooks.js";import{validation}from"../../Validation.js";import{ChannelProvider}from"../core/ChannelProvider.js";import{MapProvider}from"./MapProvider.js";import{checkResult,getMapControlNames,getServiceToken,runJob,getServiceUrl}from"./runUtils.js";import{getAuthenticationToken,getPortalDataUrl,getPortalItem,parsePortalItemUrl}from"./shared.js";let RunPrint=RunPrint_1=class{async execute(e,t,r,a){var i=validation.string("url",e.url,validation.never),n=validation.number("scale",e.scale,void 0),o=validation.string("resultFileName",e.resultFileName,"Print"),l=validation.number("resolution",e.resolution,96);if(void 0!==n&&n<=0)throw new ActivityInputError("scale","Scale must be greater than zero.");var s=parsePortalItemUrl(i);let m,c;if(s&&(c=this.getAuthenticationToken(s.portalUrl),m=getPortalDataUrl(s,c)),!s||!s.itemId)throw Error(`Unable to get item ID for print template '${i}.`);if(!m)throw Error(`Unable to get item URL for print template '${i}.`);const p=t.cancellationToken;i=await getPortalItem(m,r,p);const u=r.create();p.finally(function(){u.cancel()});r=getServiceUrl(i.url,"printing");let v;c&&"public"!==i.access&&(v=await getServiceToken(r,s.portalUrl,c,u));const g=[];if(e.parameters)for(const b of Object.keys(e.parameters)){var d,P=e.parameters[b];P&&(d=P instanceof Array,g.push({name:b,containsMultipleValues:d,value:d?void 0:P,values:d?P:void 0}))}i=await getMapControlNames(s,r,v,u,p);if(i?.length){i=i[0],t=await this.getWebmapParameters(a,i,n,e.extent,t.ambient.trivia);if(t?.length)for(const w of t)g.push(w)}l={template:{itemId:s.itemId,portalUrl:s.portalUrl,title:o},parameters:g,dpi:l},l=(await runJob(r,v,l,u)).response.ticket;return{href:await checkResult(r,v,l,1e3,u,p)}}getAuthenticationToken(e){return getAuthenticationToken(e)}async getWebmapParameters(e,t,r,a,i){const n=e.create();if(await n.load(),!n.map)throw new GenericActivityError("No map available. Unable to generate webmap parameters.");e=r||n.getScale(),a=a||n.getExtent(),i=await this.getWebmap(n,e,i),a=await this.getWgs84Extent(a);return this.prepareWebmapParameters(t,i,r||0,a)}async getWebmap(e,t,r){throw console.warn("getWebmap needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}async getWgs84Extent(e){throw console.warn("getWgs84Extent needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}prepareWebmapParameters(e,t,r,a){throw console.warn("prepareWebmapParameters needs to be overriden by a client implementation."),new ActivityNotImplementedError(RunPrint_1.action)}};RunPrint.action="gcx:wf:geocortex::RunPrint",RunPrint.suite="gcx:wf:builtin",RunPrint=RunPrint_1=__decorate([activateTwo(ChannelProvider,MapProvider)],RunPrint);export{RunPrint};
@@ -13,6 +13,7 @@ export interface RunReportInputs {
13
13
  dataSources?: DataSource | DataSource[];
14
14
  language?: string;
15
15
  format?: "docx" | "pdf" | "rtf" | "xlsx" | string;
16
+ resolution?: number;
16
17
  }
17
18
  /** Defines outputs for the RunReport activity. */
18
19
  export interface RunReportOutputs {
@@ -1 +1 @@
1
- var RunReport_1;import{__decorate}from"tslib";import{ActivityNotImplementedError}from"../../Errors.js";import{activateTwo}from"../../Hooks.js";import{validation}from"../../Validation.js";import{ChannelProvider}from"../core/ChannelProvider.js";import{MapProvider}from"./MapProvider.js";import{checkResult,getMapControlNames,getServiceToken,runJob,getServiceUrl}from"./runUtils.js";import{getAuthenticationToken,getPortalDataUrl,getPortalItem,parsePortalItemUrl}from"./shared.js";let RunReport=RunReport_1=class{async execute(e,t,r,a){var o=validation.string("url",e.url,validation.never),n=validation.boolean("includeMap",e.includeMap,!1),i=parsePortalItemUrl(o),l=validation.array("webmapParameters",e.webmapParameters,[]),s=validation.string("resultFileName",e.resultFileName,"Report"),p=validation.array("dataSources",e.dataSources),m=validation.string("language",e.language),c=validation.string("format",e.format);let u,d;if(i&&(d=this.getAuthenticationToken(i.portalUrl),u=getPortalDataUrl(i,d)),!i||!i.itemId)throw Error(`Unable to get item ID for report '${o}.`);if(!u)throw Error(`Unable to get item URL for report '${o}.`);const g=t.cancellationToken;o=await getPortalItem(u,r,g);const v=r.create();g.finally(function(){v.cancel()});r=getServiceUrl(o.url,"reporting");let f;d&&"public"!==o.access&&(f=await getServiceToken(r,i.portalUrl,d,v));const b=[{name:"FeatureIds",containsMultipleValues:!0,value:void 0,values:e.featureIds||[]}];if(e.parameters)for(const w of Object.keys(e.parameters)){var R,h=e.parameters[w];h&&(R=h instanceof Array,b.push({name:w,containsMultipleValues:R,value:R?void 0:h,values:R?h:void 0}))}if(l.length)for(const P of l)for(const y of this.prepareWebmapParameters(P.mapName,P.webmap,P.scale,P.extent))b.push(y);else if(n){n=await getMapControlNames(i,r,f,v,g);if(n?.length){n=await this.getWebmapParameters(a,n[0],t.ambient.trivia);if(n?.length)for(const I of n)b.push(I)}}c={template:{itemId:i.itemId,portalUrl:i.portalUrl,title:s},parameters:b,data:p,culture:m||t.ambient.locale,format:c},c=(await runJob(r,f,c,v)).response.ticket;return{href:await checkResult(r,f,c,1e3,v,g)}}getAuthenticationToken(e){return getAuthenticationToken(e)}async getWebmap(e,t,r){throw console.warn("getWebmap needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}async getWebmapExtent(e){throw console.warn("getWebmapExtent needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}async getWebmapParameters(e,t,r){const a=e.create();await a.load();e=await this.getWebmap(a,a.getScale(),r),r=await this.getWebmapExtent(a);return this.prepareWebmapParameters(t,e,0,r)}prepareWebmapParameters(e,t,r,a){throw console.warn("prepareWebmapParameters needs to be overriden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}};RunReport.action="gcx:wf:geocortex::RunReport",RunReport.suite="gcx:wf:builtin",RunReport=RunReport_1=__decorate([activateTwo(ChannelProvider,MapProvider)],RunReport);export{RunReport};
1
+ var RunReport_1;import{__decorate}from"tslib";import{ActivityNotImplementedError}from"../../Errors.js";import{activateTwo}from"../../Hooks.js";import{validation}from"../../Validation.js";import{ChannelProvider}from"../core/ChannelProvider.js";import{MapProvider}from"./MapProvider.js";import{checkResult,getMapControlNames,getServiceToken,runJob,getServiceUrl}from"./runUtils.js";import{getAuthenticationToken,getPortalDataUrl,getPortalItem,parsePortalItemUrl}from"./shared.js";let RunReport=RunReport_1=class{async execute(e,t,r,a){var o=validation.string("url",e.url,validation.never),n=validation.boolean("includeMap",e.includeMap,!1),i=parsePortalItemUrl(o),l=validation.array("webmapParameters",e.webmapParameters,[]),s=validation.string("resultFileName",e.resultFileName,"Report"),p=validation.array("dataSources",e.dataSources),m=validation.string("language",e.language),c=validation.string("format",e.format),u=validation.number("resolution",e.resolution,96);let d,v;if(i&&(v=this.getAuthenticationToken(i.portalUrl),d=getPortalDataUrl(i,v)),!i||!i.itemId)throw Error(`Unable to get item ID for report '${o}.`);if(!d)throw Error(`Unable to get item URL for report '${o}.`);const g=t.cancellationToken;o=await getPortalItem(d,r,g);const f=r.create();g.finally(function(){f.cancel()});r=getServiceUrl(o.url,"reporting");let b;v&&"public"!==o.access&&(b=await getServiceToken(r,i.portalUrl,v,f));const R=[{name:"FeatureIds",containsMultipleValues:!0,value:void 0,values:e.featureIds||[]}];if(e.parameters)for(const P of Object.keys(e.parameters)){var h,w=e.parameters[P];w&&(h=w instanceof Array,R.push({name:P,containsMultipleValues:h,value:h?void 0:w,values:h?w:void 0}))}if(l.length)for(const y of l)for(const I of this.prepareWebmapParameters(y.mapName,y.webmap,y.scale,y.extent))R.push(I);else if(n){n=await getMapControlNames(i,r,b,f,g);if(n?.length){n=await this.getWebmapParameters(a,n[0],t.ambient.trivia);if(n?.length)for(const U of n)R.push(U)}}c={template:{itemId:i.itemId,portalUrl:i.portalUrl,title:s},parameters:R,data:p,dpi:u,culture:m||t.ambient.locale,format:c},c=(await runJob(r,b,c,f)).response.ticket;return{href:await checkResult(r,b,c,1e3,f,g)}}getAuthenticationToken(e){return getAuthenticationToken(e)}async getWebmap(e,t,r){throw console.warn("getWebmap needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}async getWebmapExtent(e){throw console.warn("getWebmapExtent needs to be overridden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}async getWebmapParameters(e,t,r){const a=e.create();await a.load();e=await this.getWebmap(a,a.getScale(),r),r=await this.getWebmapExtent(a);return this.prepareWebmapParameters(t,e,0,r)}prepareWebmapParameters(e,t,r,a){throw console.warn("prepareWebmapParameters needs to be overriden by a client implementation."),new ActivityNotImplementedError(RunReport_1.action)}};RunReport.action="gcx:wf:geocortex::RunReport",RunReport.suite="gcx:wf:builtin",RunReport=RunReport_1=__decorate([activateTwo(ChannelProvider,MapProvider)],RunReport);export{RunReport};
@@ -1,4 +1,5 @@
1
- import type { IActivityHandler, EmptyOutputs } from "../../IActivityHandler";
1
+ import { DialogProvider } from "./DialogProvider";
2
+ import type { IActivityHandler, EmptyOutputs, IActivityContext } from "../../IActivityHandler";
2
3
  /**
3
4
  * Defines the inputs for the Alert activity.
4
5
  * @product This is intended for internal use only within VertiGIS Studio products.
@@ -7,11 +8,13 @@ export interface AlertInputs {
7
8
  /** The text of the alert. */
8
9
  text: string;
9
10
  /** The title of the alert. */
10
- title: string;
11
+ title?: string;
12
+ /** Controls when text is interpreted as markdown. */
13
+ markdown?: boolean;
11
14
  }
12
15
  /** Presents an alert dialog to the user. */
13
16
  export declare class Alert implements IActivityHandler {
14
17
  static readonly action = "gcx:wf:ui::Alert";
15
18
  static readonly suite = "gcx:wf:builtin";
16
- execute(inputs: AlertInputs): PromiseLike<EmptyOutputs>;
19
+ execute(inputs: AlertInputs, context: IActivityContext, dialogProviderType: typeof DialogProvider): Promise<EmptyOutputs>;
17
20
  }
@@ -1 +1 @@
1
- class Alert{execute(e){return new Promise(function(t){setTimeout(function(){window.alert(e.text),t({})})})}}Alert.action="gcx:wf:ui::Alert",Alert.suite="gcx:wf:builtin";export{Alert};
1
+ import{__decorate}from"tslib";import{activate}from"../../Hooks.js";import{validation}from"../../Validation.js";import{DialogProvider}from"./DialogProvider.js";let Alert=class{async execute(t,e,i){var r=validation.string("title",t.title,""),o=validation.boolean("markdown",t.markdown,!1);let a=validation.string("text",t.text,"");return o&&(a={markdown:a}),await i.create(e.ambient.environment.getText).showAlert(a,r),{}}};Alert.action="gcx:wf:ui::Alert",Alert.suite="gcx:wf:builtin",Alert=__decorate([activate(DialogProvider)],Alert);export{Alert};
@@ -1,4 +1,5 @@
1
- import type { IActivityHandler } from "../../IActivityHandler";
1
+ import { DialogProvider } from "./DialogProvider";
2
+ import type { IActivityContext, IActivityHandler } from "../../IActivityHandler";
2
3
  /**
3
4
  * Defines inputs for the Confirm activity.
4
5
  * @product This is intended for internal use only within VertiGIS Studio products.
@@ -7,7 +8,9 @@ export interface ConfirmInputs {
7
8
  /** The text of the basic confirm dialog. */
8
9
  text: string;
9
10
  /** The title of the confirm dialog. */
10
- title: string;
11
+ title?: string;
12
+ /** Controls when text is interpreted as markdown. */
13
+ markdown?: boolean;
11
14
  }
12
15
  /**
13
16
  * Defines outputs for the Confirm activity.
@@ -20,5 +23,5 @@ export interface ConfirmOutputs {
20
23
  export declare class Confirm implements IActivityHandler {
21
24
  static readonly action = "gcx:wf:ui::Confirm";
22
25
  static readonly suite = "gcx:wf:builtin";
23
- execute(inputs: ConfirmInputs): PromiseLike<ConfirmOutputs>;
26
+ execute(inputs: ConfirmInputs, context: IActivityContext, dialogProviderType: typeof DialogProvider): Promise<ConfirmOutputs>;
24
27
  }
@@ -1 +1 @@
1
- class Confirm{execute(t){return new Promise(function(n){setTimeout(function(){var i=confirm(t.text);n({result:i})})})}}Confirm.action="gcx:wf:ui::Confirm",Confirm.suite="gcx:wf:builtin";export{Confirm};
1
+ import{__decorate}from"tslib";import{activate}from"../../Hooks.js";import{validation}from"../../Validation.js";import{DialogProvider}from"./DialogProvider.js";let Confirm=class{async execute(i,t,o){var r=validation.string("title",i.title,""),a=validation.boolean("markdown",i.markdown,!1);let e=validation.string("text",i.text,"");return a&&(e={markdown:e}),{result:await o.create(t.ambient.environment.getText).showConfirm(e,r)}}};Confirm.action="gcx:wf:ui::Confirm",Confirm.suite="gcx:wf:builtin",Confirm=__decorate([activate(DialogProvider)],Confirm);export{Confirm};
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import type { MarkdownRef } from "../../forms/FormDefinition";
3
+ export interface AlertContentProps {
4
+ text: string | MarkdownRef;
5
+ title: string | undefined;
6
+ getText: (key: string) => string;
7
+ onClose: () => void;
8
+ }
9
+ export declare const AlertContent: ({ text, title, getText, onClose }: AlertContentProps) => React.JSX.Element;
10
+ export interface ConfirmContentProps {
11
+ text: string | MarkdownRef;
12
+ title: string | undefined;
13
+ getText: (key: string) => string;
14
+ onClose: (result: boolean) => void;
15
+ }
16
+ export declare const ConfirmContent: ({ text, title, getText, onClose }: ConfirmContentProps) => React.JSX.Element;
17
+ export interface PromptContentProps {
18
+ description: string | MarkdownRef;
19
+ defaultText: string | undefined;
20
+ title: string | undefined;
21
+ getText: (key: string) => string;
22
+ onClose: (result: string | null) => void;
23
+ }
24
+ export declare const PromptContent: ({ description, defaultText, title, getText, onClose, }: PromptContentProps) => React.JSX.Element;
@@ -0,0 +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 Input from"@vertigis/react-ui/Input";import Markdown from"@vertigis/react-ui/Markdown";import React,{useState}from"react";function isMarkdownRef(e){return"object"==typeof e&&"string"==typeof e.markdown}const AlertContent=({text:e,title:t,getText:n,onClose:a})=>{var o=isMarkdownRef(e);return React.createElement(React.Fragment,null,React.createElement(DialogTitle,null,t),React.createElement(DialogContent,{sx:{pb:0}},o&&React.createElement(Markdown,{markdown:e.markdown,escapeHtml:!0,linkTarget:"_blank"}),!o&&e),React.createElement(DialogActions,null,React.createElement(Button,{color:"primary",onClick:a,variant:"contained"},n("@common-ok"))))},ConfirmContent=({text:e,title:t,getText:n,onClose:a})=>{var o=isMarkdownRef(e);return React.createElement(React.Fragment,null,React.createElement(DialogTitle,null,t),React.createElement(DialogContent,{sx:{pb:0}},o&&React.createElement(Markdown,{markdown:e.markdown,escapeHtml:!0,linkTarget:"_blank"}),!o&&e),React.createElement(DialogActions,null,React.createElement(Button,{color:"primary",onClick:()=>a(!0),variant:"contained"},n("@common-ok")),React.createElement(Button,{onClick:()=>a(!1),variant:"contained"},n("@common-cancel"))))},PromptContent=({description:e,defaultText:t,title:n,getText:a,onClose:o})=>{const[r,l]=useState(t||"");t=isMarkdownRef(e);return React.createElement(React.Fragment,null,React.createElement(DialogTitle,null,n),React.createElement(DialogContent,{sx:{pb:0}},t&&React.createElement(Markdown,{markdown:e.markdown,escapeHtml:!0,linkTarget:"_blank"}),!t&&React.createElement(Box,{sx:{pb:1.75,pt:1.75}},e),React.createElement(Input,{value:r,onChange:e=>{l(e.target.value)}})),React.createElement(DialogActions,null,React.createElement(Button,{color:"primary",onClick:()=>{o(r)},variant:"contained"},a("@common-ok")),React.createElement(Button,{onClick:()=>{o(null)},variant:"contained"},a("@common-cancel"))))};export{AlertContent,ConfirmContent,PromptContent};
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ import type { AlertContentProps, ConfirmContentProps, PromptContentProps } from "./DialogContent";
3
+ import type { Activator } from "../../Activator";
4
+ import type { MarkdownRef } from "../../forms/FormDefinition";
5
+ import type { UIService } from "../../ui/UIService";
6
+ export declare class DialogProvider {
7
+ static type: string;
8
+ static create(getText: (key: string) => string): DialogProvider;
9
+ static register(activator: Activator): void;
10
+ protected _getText: (key: string) => string;
11
+ constructor(getText: (key: string) => string);
12
+ uiService: UIService | undefined;
13
+ AlertContent: (props: AlertContentProps) => React.JSX.Element;
14
+ ConfirmContent: (props: ConfirmContentProps) => React.JSX.Element;
15
+ PromptContent: (props: PromptContentProps) => React.JSX.Element;
16
+ showAlert(text: string | MarkdownRef, title?: string): Promise<void>;
17
+ showConfirm(text: string | MarkdownRef, title?: string): Promise<boolean>;
18
+ showPrompt(description: string | MarkdownRef, defaultText?: string, title?: string): Promise<string | null>;
19
+ }
@@ -0,0 +1 @@
1
+ import Dialog from"@vertigis/react-ui/Dialog";import React from"react";import{AlertContent,ConfirmContent,PromptContent}from"./DialogContent.js";class DialogProvider{static create(t){return new this(t)}static register(t){t.factories.push(t=>t===this.type?this:void 0)}constructor(t){this._getText=t,this.AlertContent=AlertContent,this.ConfirmContent=ConfirmContent,this.PromptContent=PromptContent}async showAlert(e,i){return this.uiService.displayDialog(t=>React.createElement(this.AlertContent,{getText:this._getText,onClose:t,text:e,title:i}),Dialog)}async showConfirm(t,i){let o=!1;return await this.uiService.displayDialog(e=>React.createElement(this.ConfirmContent,{getText:this._getText,onClose:t=>{o=t,e()},text:t,title:i}),Dialog),o}async showPrompt(t,i,o){let r=null;return await this.uiService.displayDialog(e=>React.createElement(this.PromptContent,{defaultText:i,description:t,getText:this._getText,onClose:t=>{r=t,e()},title:o}),Dialog),r}}DialogProvider.type="8F03DBFB-C0F4-499D-B176-70F51AF11E40:DialogProvider";export{DialogProvider};
@@ -1,4 +1,5 @@
1
- import type { IActivityHandler } from "../../IActivityHandler";
1
+ import { DialogProvider } from "./DialogProvider";
2
+ import type { IActivityContext, IActivityHandler } from "../../IActivityHandler";
2
3
  /**
3
4
  * Defines the inputs for the Prompt activity.
4
5
  * @product This is intended for internal use only within VertiGIS Studio products.
@@ -7,9 +8,11 @@ export interface PromptInputs {
7
8
  /** The description of the prompt. */
8
9
  description: string;
9
10
  /** The default text of the prompt. */
10
- defaultText: string;
11
+ defaultText?: string;
11
12
  /** The title of the prompt. */
12
- title: string;
13
+ title?: string;
14
+ /** Controls when description is interpreted as markdown. */
15
+ markdown?: boolean;
13
16
  }
14
17
  /**
15
18
  * Defines the output for the Prompt activity.
@@ -22,5 +25,5 @@ export interface PromptOutputs {
22
25
  export declare class Prompt implements IActivityHandler {
23
26
  static readonly action = "gcx:wf:ui::Prompt";
24
27
  static readonly suite = "gcx:wf:builtin";
25
- execute(inputs: PromptInputs): PromiseLike<PromptOutputs>;
28
+ execute(inputs: PromptInputs, context: IActivityContext, dialogProviderType: typeof DialogProvider): Promise<PromptOutputs>;
26
29
  }
@@ -1 +1 @@
1
- class Prompt{execute(o){return new Promise(function(e){setTimeout(function(){var t=window.prompt(o.description,o.defaultText);e({result:t})})})}}Prompt.action="gcx:wf:ui::Prompt",Prompt.suite="gcx:wf:builtin";export{Prompt};
1
+ import{__decorate}from"tslib";import{activate}from"../../Hooks.js";import{validation}from"../../Validation.js";import{DialogProvider}from"./DialogProvider.js";let Prompt=class{async execute(t,o,i){var r=validation.string("title",t.title,""),a=validation.string("defaultText",t.defaultText),e=validation.boolean("markdown",t.markdown,!1);let n=validation.string("description",t.description,"");return e&&(n={markdown:n}),{result:await i.create(o.ambient.environment.getText).showPrompt(n,a,r)}}};Prompt.action="gcx:wf:ui::Prompt",Prompt.suite="gcx:wf:builtin",Prompt=__decorate([activate(DialogProvider)],Prompt);export{Prompt};
@@ -1 +1 @@
1
- import Bluebird from"bluebird";import{Activator}from"../Activator.js";import{getStringsForProgram}from"../LanguageStringUtils.js";import{Task}from"../Task.js";import{ProgramInspector,canonicalizeLocale}from"../definition/ProgramInspector.js";import{getCachedFormElements}from"../execution/ActivityLoader.js";import{BuiltInFormElements}from"../forms/manifest.js";import{check as checkLicense}from"../licensing/LicenseChecker.js";import{run}from"./ProgramRunner.js";class Engine{constructor(e){this._getFormElementRegistration=e=>this.formElements[e],this._registerFormElement=e=>{var t,r=e["id"];this.formElements[r]?(t={...this.formElements[r],...e},this.formElements[r]=t):this.formElements[r]=e},this.activator=new Activator,this.environment={},this.trivia={getFormElementRegistration:this._getFormElementRegistration,registerFormElement:this._registerFormElement},this.factories=[],this.implementations={},this.formElements={...getCachedFormElements(),...BuiltInFormElements},this.appSkuCode=e}setExternalEventHandler(e){this.externalEventCallback=e}removeExternalEventHandler(e){e===this.externalEventCallback&&(this.externalEventCallback=void 0)}static buildOptions(e,t){(t={...t||{}}).locale=canonicalizeLocale(t.locale),t.locale||(t.locale=e.getDefaultLocale()),t.logLevel=t.logLevel||"log";var r=new Proxy({},{get(e,t,r){return t}});const n=getStringsForProgram(e,t);return t.environment={activities:r,encodeHtml:function(e){return"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):""},getText:function(e){if("string"==typeof e&&"@"===e.charAt(0)){var t=e.slice(1);if(t in n)return n[t]}return e},strings:n,...t.environment||{}},t}createHandler(e,t){var r=this.implementations[e];if(void 0!==r){const i=Bluebird.resolve(r);return i.isFulfilled()?new(i.value()):i.then(function(e){return Bluebird.attempt(function(){return new e})})}for(const o of this.factories){var n=o.create(e,this._registerFormElement,t);if(void 0!==n)return n}}run(r,n){return Task.attempt(()=>{let e;r instanceof ProgramInspector?e=r:(e=new ProgramInspector,e.import(r)),checkLicense(e.program,this.appSkuCode),n=Engine.buildOptions(e,n);var t=e.resolveStart(n?n.start:void 0);return run(this,e,n,t)})}enqueueExternalEvent(e){this.externalEventCallback&&this.externalEventCallback(e)}}export{Engine};
1
+ import Bluebird from"bluebird";import{Activator}from"../Activator.js";import{getStringsForProgram}from"../LanguageStringUtils.js";import{Task}from"../Task.js";import{DEFAULT_LOCALE}from"../constants.js";import{ProgramInspector,canonicalizeLocale}from"../definition/ProgramInspector.js";import{getCachedFormElements}from"../execution/ActivityLoader.js";import{SUPPORTED_DATE_FNS_LOCALES}from"../forms/dateUtilities.js";import{BuiltInFormElements}from"../forms/manifest.js";import{check as checkLicense}from"../licensing/LicenseChecker.js";import{run}from"./ProgramRunner.js";class Engine{constructor(e){this._getFormElementRegistration=e=>this.formElements[e],this._registerFormElement=e=>{var t,r=e["id"];this.formElements[r]?(t={...this.formElements[r],...e},this.formElements[r]=t):this.formElements[r]=e},this.activator=new Activator,this.environment={},this.trivia={getFormElementRegistration:this._getFormElementRegistration,registerFormElement:this._registerFormElement},this.factories=[],this.implementations={},this.formElements={...getCachedFormElements(),...BuiltInFormElements},this.appSkuCode=e}setExternalEventHandler(e){this.externalEventCallback=e}removeExternalEventHandler(e){e===this.externalEventCallback&&(this.externalEventCallback=void 0)}static buildOptions(e,t){(t={...t||{}}).locale=canonicalizeLocale(t.locale),t.locale||(t.locale=e.getDefaultLocale()),-1===SUPPORTED_DATE_FNS_LOCALES.indexOf(t.locale)&&(t.locale=DEFAULT_LOCALE),t.logLevel=t.logLevel||"log";var r=new Proxy({},{get(e,t,r){return t}});const n=getStringsForProgram(e,t);return t.environment={activities:r,encodeHtml:function(e){return"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):""},getText:function(e){if("string"==typeof e&&"@"===e.charAt(0)){var t=e.slice(1);if(t in n)return n[t]}return e},strings:n,...t.environment||{}},t}createHandler(e,t){var r=this.implementations[e];if(void 0!==r){const i=Bluebird.resolve(r);return i.isFulfilled()?new(i.value()):i.then(function(e){return Bluebird.attempt(function(){return new e})})}for(const o of this.factories){var n=o.create(e,this._registerFormElement,t);if(void 0!==n)return n}}run(r,n){return Task.attempt(()=>{let e;r instanceof ProgramInspector?e=r:(e=new ProgramInspector,e.import(r)),checkLicense(e.program,this.appSkuCode),n=Engine.buildOptions(e,n);var t=e.resolveStart(n?n.start:void 0);return run(this,e,n,t)})}enqueueExternalEvent(e){this.externalEventCallback&&this.externalEventCallback(e)}}export{Engine};
@@ -21,9 +21,7 @@ export declare abstract class FormHost implements FormPresenterHost {
21
21
  /** Indicates all errors to be assigned. */
22
22
  errors: Record<string, defs.Text | undefined>;
23
23
  /** Indicates any reference information relevant to components. */
24
- refs: {
25
- [name: string]: FormComponent | undefined;
26
- };
24
+ refs: Record<string, FormComponent | undefined>;
27
25
  /** Indicates if the form is enabled. */
28
26
  enabled: boolean;
29
27
  /** Indicates if the form is visible. */
@@ -1 +1 @@
1
- import Box from"@vertigis/react-ui/Box";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";const Root=styled(Box)(({theme:{spacing:o}})=>({marginBottom:o(4),marginTop:o(4)})),AccordionGroup=({className:o,component:t})=>{var t=t.props["children"];return React.createElement(Root,{className:o},t)};export default AccordionGroup;
1
+ import Box from"@vertigis/react-ui/Box";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";const StyledBox=styled(Box)(({theme:{spacing:e}})=>({marginBottom:e(4),marginTop:e(4)})),AccordionGroup=({className:e,component:o})=>{var o=o.props["children"];return React.createElement(StyledBox,{className:e},o)};export default AccordionGroup;
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Auto Complete" Form Element.
6
6
  */
7
- declare const AutoComplete: ({ className, component, current, delay: elementDelay, element, enabled, error, items: elementItems, label, minLength: elementMinLength, name, prompt, tooltip, renderFocus, renderText, raiseEvent, setProperty, setValue, value, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
7
+ declare const AutoComplete: ({ className, component, current, delay: elementDelay, element, enabled, error, items: elementItems, label, minLength: elementMinLength, name, prompt, tooltip, raiseEvent, setProperty, setValue, value, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
8
8
  export default AutoComplete;
@@ -1 +1 @@
1
- import BaseAutoComplete,{autocompleteClasses,HighlightOption}from"@vertigis/react-ui/Autocomplete";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import Popper from"@vertigis/react-ui/Popper";import Skeleton from"@vertigis/react-ui/Skeleton";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{ExclusiveTimer}from"../ExclusiveTimer.js";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{autoCompletePropertyConstraints}from"../elements/AutoComplete.js";import{getKeyString}from"../keyboard.js";import{getItemId,makeSafeClassName,makeUniqueId,inspectItems}from"../utils.js";const StyledAutoComplete=styled(BaseAutoComplete)(()=>({[`.${autocompleteClasses.endAdornment}`]:{right:1}})),popperClasses={skeletonOption:"skeleton-option"},StyledPopper=styled(Popper)(()=>({[`.${autocompleteClasses.listbox}`]:{[`.${autocompleteClasses.option}`]:{display:"block",[`&.${popperClasses.skeletonOption}`]:{'&[data-option-index="0"]':{span:{width:"70%"}},'&[data-option-index="1"]':{span:{width:"85%"}},'&[data-option-index="2"]':{span:{width:"55%"}}}}}})),StyledSkeleton=styled(Skeleton)(()=>({fontSize:"1.25rem",lineHeight:"inherit"})),pendingOption={enabled:!1,label:""},pendingOptions=[pendingOption,pendingOption,pendingOption],AutoComplete=({className:e,component:t,current:u,delay:o,element:r,enabled:n,error:l,items:p,label:m,minLength:a,name:s,prompt:i,tooltip:c,renderFocus:d,renderText:f,raiseEvent:g,setProperty:v,setValue:C,value:y})=>{const[b,h]=useState(),[S,x]=useState(""),[k,E]=useState([]),[O,P]=useState(null),I=useRef(!1),N=useRef(!1),R=`${makeUniqueId(s)}-input`;var F=useRef(f({status:"trivial"}));const T=f(i),A=f(c),L=useFocusCallback(n,s,d),j=useRef({}),w=useRef({}),M=useMemo(()=>{let e=o;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.delay.default),Math.max(e,autoCompletePropertyConstraints.delay.minimum)},[o]),$=useMemo(()=>{let e=a;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.minLength.default),Math.max(e,autoCompletePropertyConstraints.minLength.minimum)},[a]),B=t.timer||(t.timer=new ExclusiveTimer),H=()=>{g("suggest",y,S,void 0,B.cancellationToken),E(pendingOptions)},K=()=>{v("items",{}),v("label",void 0)};useEffect(()=>{"clear"===b?K():"input"===b&&(m&&v("label",void 0),I.current=!0,S.length>=$?(v("current",void 0),B.reset(),B.start(M,H)):0<Object.keys(p||{}).length&&K())},[b,S]),useEffect(()=>{var e,t,o=O?.value;y!==o&&(t=(e=getItemId(O,j.current))?w.current[e]:void 0,v("current",e),v("label",t),C(o,{argument:t}))},[O]),useEffect(()=>{const{current:e,items:t,label:o,value:r}=inspectItems(u,p,y);v("current",e),v("label",o||m),v("value",r,!1);const n={};let l=null;const a=[];for(const i in t){var s=t[i];a.push(s);const o=f(s.label).trim();n[i]=o,e&&i===e&&(l=s)}w.current=n,j.current=t,E(a),P(l)},[p]),useEffect(()=>{var e="string"==typeof u?u:void 0,t=e?j.current[e]:void 0,e=e?w.current[e]:void 0;t?(v("label",e),v("value",t.value),x(e||"")):(v("value",void 0),I.current||x("")),P(t||null)},[u]),useEffect(()=>{I.current||N.current||x(""),I.current=!1,N.current=!1},[m]);const V=f(m);return React.createElement(FormElement,{className:e,component:t,element:r,inputId:R},React.createElement(StyledAutoComplete,{autoSelect:!0,clearOnEscape:!0,clearOnBlur:!1,disabled:!n,filterOptions:e=>e,getOptionDisabled:e=>!1===e.enabled,getOptionLabel:e=>{e=getItemId(e,j.current);return e?w.current[e]:""},inputValue:S,noOptionsText:F.current,onBlur:()=>{1===k.length&&S.toLowerCase()===w.current[0]?.toLowerCase()?(x(w.current[0]),P(k[0])):v("label",S)},onChange:(e,t,o,r)=>{N.current=!0,P(t)},onInputChange:(e,t,o)=>{x(t),h(o)},onKeyDown:e=>{"enter"===getKeyString(e)&&e.stopPropagation()},options:k,PopperComponent:StyledPopper,renderOption:(e,t,{inputValue:o})=>{if(t===pendingOption){var r=clsx(e.className,popperClasses.skeletonOption);return React.createElement("li",{...e,className:r,key:e.id},React.createElement(StyledSkeleton,null))}r=getItemId(t,j.current),r={...e,className:clsx(e.className,t.styleName?makeSafeClassName(t.styleName):void 0),title:t.tooltip?f(t.tooltip):void 0,inputText:o,optionText:r?w.current[r]:""};return React.createElement(HighlightOption,{...r})},renderInput:e=>(e.inputProps={...e.inputProps,id:R,value:e.inputProps.value||V,placeholder:T,title:A},React.createElement(FormLabelTextField,{error:!!l,...e,fullWidth:!0,inputRef:L})),value:O}))};export default AutoComplete;
1
+ import BaseAutoComplete,{autocompleteClasses,HighlightOption}from"@vertigis/react-ui/Autocomplete";import FormLabelTextField from"@vertigis/react-ui/FormLabelTextField";import Popper from"@vertigis/react-ui/Popper";import Skeleton from"@vertigis/react-ui/Skeleton";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{ExclusiveTimer}from"../ExclusiveTimer.js";import{autoCompletePropertyConstraints}from"../elements/AutoComplete.js";import HostContext from"../hostContext.js";import{getKeyString}from"../keyboard.js";import{getItemId,inspectItems,makeSafeClassName,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const StyledAutoComplete=styled(BaseAutoComplete)(()=>({[`.${autocompleteClasses.endAdornment}`]:{right:1}})),popperClasses={skeletonOption:"skeleton-option"},StyledPopper=styled(Popper)(()=>({[`.${autocompleteClasses.listbox}`]:{[`.${autocompleteClasses.option}`]:{display:"block",[`&.${popperClasses.skeletonOption}`]:{'&[data-option-index="0"]':{span:{width:"70%"}},'&[data-option-index="1"]':{span:{width:"85%"}},'&[data-option-index="2"]':{span:{width:"55%"}}}}}})),StyledSkeleton=styled(Skeleton)(()=>({fontSize:"1.25rem",lineHeight:"inherit"})),pendingOption={enabled:!1,label:""},pendingOptions=[pendingOption,pendingOption,pendingOption],AutoComplete=({className:e,component:t,current:u,delay:o,element:r,enabled:n,error:l,items:p,label:m,minLength:s,name:a,prompt:i,tooltip:c,raiseEvent:d,setProperty:f,setValue:g,value:C})=>{const v=useContext(HostContext),[y,x]=useState(),[b,h]=useState(""),[S,k]=useState([]),[E,O]=useState(null),P=useRef(!1),T=useRef(!1),I=`${makeUniqueId(a)}-input`,N=useRef(v.renderText({status:"trivial"})),R=v.renderText(i),F=v.renderText(c),A=useFocusCallback(n,a,v),L=useRef({}),j=useRef({}),w=useMemo(()=>{let e=o;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.delay.default),Math.max(e,autoCompletePropertyConstraints.delay.minimum)},[o]),H=useMemo(()=>{let e=s;return"number"==typeof e&&!isNaN(e)||(e=autoCompletePropertyConstraints.minLength.default),Math.max(e,autoCompletePropertyConstraints.minLength.minimum)},[s]),M=t.timer||(t.timer=new ExclusiveTimer),$=()=>{d("suggest",C,b,void 0,M.cancellationToken),k(pendingOptions)},B=()=>{f("items",{}),f("label",void 0)};useEffect(()=>{"clear"===y?B():"input"===y&&(m&&f("label",void 0),P.current=!0,b.length>=H?(f("current",void 0),M.reset(),M.start(w,$)):0<Object.keys(p||{}).length&&B())},[y,b]),useEffect(()=>{var e,t,o=E?.value;C!==o&&(t=(e=getItemId(E,L.current))?j.current[e]:void 0,f("current",e),f("label",t),g(o,{argument:t}))},[E]),useEffect(()=>{const{current:e,items:t,label:o,value:r}=inspectItems(u,p,C);f("current",e),f("label",o||m),f("value",r,!1);const n={};let l=null;const s=[];for(const i in t){var a=t[i];s.push(a);const o=v.renderText(a.label).trim();n[i]=o,e&&i===e&&(l=a)}j.current=n,L.current=t,k(s),O(l)},[p]),useEffect(()=>{var e="string"==typeof u?u:void 0,t=e?L.current[e]:void 0,e=e?j.current[e]:void 0;t?(f("label",e),f("value",t.value),h(e||"")):(f("value",void 0),P.current||h("")),O(t||null)},[u]),useEffect(()=>{P.current||T.current||h(""),P.current=!1,T.current=!1},[m]);const K=v.renderText(m);return React.createElement(FormElement,{className:e,element:r,inputId:I,name:a},t=>React.createElement(StyledAutoComplete,{autoSelect:!0,clearOnEscape:!0,clearOnBlur:!1,disabled:!n,filterOptions:e=>e,getOptionDisabled:e=>!1===e.enabled,getOptionLabel:e=>{e=getItemId(e,L.current);return e?j.current[e]:""},inputValue:b,noOptionsText:N.current,onBlur:()=>{1===S.length&&b.toLowerCase()===j.current[0]?.toLowerCase()?(h(j.current[0]),O(S[0])):f("label",b)},onChange:(e,t,o,r)=>{T.current=!0,O(t)},onInputChange:(e,t,o)=>{h(t),x(o)},onKeyDown:e=>{"enter"===getKeyString(e)&&e.stopPropagation()},options:S,PopperComponent:StyledPopper,renderOption:(e,t,{inputValue:o})=>{if(t===pendingOption){var r=clsx(e.className,popperClasses.skeletonOption);return React.createElement("li",{...e,className:r,key:e.id},React.createElement(StyledSkeleton,null))}r=getItemId(t,L.current),r={...e,className:clsx(e.className,t.styleName?makeSafeClassName(t.styleName):void 0),title:t.tooltip?v.renderText(t.tooltip):void 0,inputText:o,optionText:r?j.current[r]:""};return React.createElement(HighlightOption,{...r})},renderInput:e=>(e.inputProps={...e.inputProps,...t,id:I,value:e.inputProps.value||K,placeholder:R,title:F},React.createElement(FormLabelTextField,{error:!!l,...e,fullWidth:!0,inputRef:A})),value:E}))};export default AutoComplete;
@@ -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: ({ className, component, element, enabled, items: elementItems, name, orientation, raiseEvent, renderFocus: hostRenderFocus, renderText, translateText, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
7
+ declare const ButtonBar: ({ className, element, enabled, items: elementItems, name, orientation, raiseEvent, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
8
8
  export default ButtonBar;
@@ -1 +1 @@
1
- import Button from"@vertigis/react-ui/Button";import Stack,{stackClasses}from"@vertigis/react-ui/Stack";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import FormElement from"../FormElement.js";import{Orientation}from"../constants.js";import{makeSafeClassName,sortAndFilter}from"../utils.js";import Markdown from"./Markdown.js";const Root=styled(FormElement)(({theme:{spacing:e}})=>({[`.${stackClasses.root}`]:{alignItems:"flex-start",flexWrap:"wrap",marginTop:e(1),marginBottom:e(1)}})),ButtonBar=({className:e,component:t,element:a,enabled:c,items:r,name:d,orientation:o,raiseEvent:u,renderFocus:p,renderText:f,translateText:k})=>{const v=sortAndFilter(r);let E;return React.createElement(Root,{className:e,component:t,element:a},React.createElement(Stack,{direction:o===Orientation.VERTICAL?"column":"row",spacing:1},Object.keys(v).map(e=>{var t,a,r,o=v[e],n=o.styleName?makeSafeClassName(o.styleName):void 0,i=!1!==o.visible,l=c&&!1!==o.enabled&&i,s=f(o.tooltip),m=v[e]["value"];return l&&void 0===E&&(E=e),i?React.createElement(Button,{onClick:(a=e,r=m,function(e){u("clicked",r,void 0,a)}),className:n,color:o.default?"primary":"inherit",disabled:!l,key:e,ref:(t=e,function(e){null!==e&&t===E&&p(e,d)}),title:s,variant:o.default?"contained":"outlined"},React.createElement(Markdown,{inline:!0,text:o.label||"",translateText:k})):null})))};export default ButtonBar;
1
+ import Button from"@vertigis/react-ui/Button";import Stack,{stackClasses}from"@vertigis/react-ui/Stack";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{makeSafeClassName,sortAndFilter}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}})=>({[`.${stackClasses.root}`]:{alignItems:"flex-start",flexWrap:"wrap",marginTop:e(1),marginBottom:e(1)}})),ButtonBar=({className:e,element:t,enabled:l,items:o,name:a,orientation:r,raiseEvent:c})=>{const d=useContext(HostContext),u=sortAndFilter(o),f=useFocusCallback(l,a,d);o=l?Object.entries(u).filter(e=>!1!==e[1].enabled&&!1!==e[1].visible)[0]:void 0;const p=o?o[0]:void 0;return React.createElement(StyledFormElement,{className:e,component:"fieldset",element:t,name:a},React.createElement(Stack,{direction:r===Orientation.VERTICAL?"column":"row",spacing:1},Object.keys(u).map(e=>{var t,o,a=u[e],r=a.styleName?makeSafeClassName(a.styleName):void 0,n=!1!==a.visible,i=l&&!1!==a.enabled&&n,s=d.renderText(a.tooltip),m=u[e]["value"];return n?React.createElement(Button,{className:r,color:a.default?"primary":"inherit",disabled:!i,key:e,onClick:(t=e,o=m,function(e){c("clicked",o,void 0,t)}),ref:p&&e===p?f:void 0,title:s,variant:a.default?"contained":"outlined"},React.createElement(Markdown,{inline:!0,text:a.label||""})):null})))};export default ButtonBar;
@@ -3,5 +3,5 @@ import type { FormElementProps } from "../..";
3
3
  /**
4
4
  * The component for the "Check Box" Form Element.
5
5
  */
6
- declare const CheckBox: ({ checked, className, component, element, enabled, label, name, raiseEvent, renderFocus: hostRenderFocus, renderText, setProperty, tooltip: elementTooltip, translateText, value, }: FormElementProps) => React.JSX.Element;
6
+ declare const CheckBox: ({ checked, className, element, enabled, label, name, raiseEvent, setProperty, tooltip: elementTooltip, value, }: FormElementProps) => React.JSX.Element;
7
7
  export default CheckBox;
@@ -1 +1 @@
1
- import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import*as React from"react";import FormElement from"../FormElement.js";import Markdown from"./Markdown.js";const CheckBox=({checked:e,className:t,component:r,element:o,enabled:a,label:n,name:c,raiseEvent:l,renderFocus:m,renderText:i,setProperty:d,tooltip:s,translateText:k,value:b})=>{s=i(s);return React.createElement(FormElement,{className:t,component:r,element:o},React.createElement(FormControlLabel,{control:React.createElement(Checkbox,{checked:e,onChange:e=>{e=e.target.checked;d("checked",e),l("changed",e?b:void 0,e)},inputRef:e=>{null===e||e.disabled||m(e,c)}}),disabled:!a,label:React.createElement(Markdown,{text:n,translateText:k}),title:s}))};export default CheckBox;
1
+ import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import*as React from"react";import{useContext}from"react";import HostContext from"../hostContext.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const CheckBox=({checked:t,className:e,element:o,enabled:r,label:a,name:c,raiseEvent:m,setProperty:n,tooltip:l,value:s})=>{const i=useContext(HostContext),C=i.renderText(l),d=useFocusCallback(r,c,i),k=e=>{e=e.target.checked;n("checked",e),m("changed",e?s:void 0,e)};return React.createElement(FormElement,{className:e,element:o,name:c},e=>React.createElement(FormControlLabel,{control:React.createElement(Checkbox,{checked:t,inputProps:e,inputRef:d,onChange:k}),disabled:!r,label:React.createElement(Markdown,{text:a}),title:C}))};export default CheckBox;
@@ -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: ({ className, component, current, element, enabled, items: elementItems, name, orientation, raiseEvent, renderFocus: hostRenderFocus, renderText, setProperty, setValue, translateText, value, }: FormElementProps<defs.ItemsRef | undefined>) => React.JSX.Element;
7
+ declare const CheckGroup: ({ className, current, element, enabled, items: elementItems, name, orientation, raiseEvent, setProperty, setValue, value, }: FormElementProps<defs.ItemsRef | undefined>) => React.JSX.Element;
8
8
  export default CheckGroup;
@@ -1 +1 @@
1
- import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormGroup,{formGroupClasses}from"@vertigis/react-ui/FormGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useEffect,useState}from"react";import FormElement from"../FormElement.js";import{Orientation}from"../constants.js";import{arrayEqual}from"../listUtilities.js";import{makeSafeClassName,inspectItems}from"../utils.js";import Markdown from"./Markdown.js";const Root=styled(FormElement)(({theme:{spacing:e}})=>({[`.${formGroupClasses.root}`]:{paddingBottom:e(2)}})),CheckGroup=({className:e,component:t,current:o,element:r,enabled:a,items:s,name:n,orientation:c,raiseEvent:m,renderFocus:i,renderText:l,setProperty:u,setValue:p,translateText:f,value:d})=>{const[h,v]=useState([]),[k,E]=useState();useEffect(()=>{var e=inspectItems(o,s,d)["items"];E(e);const t=[];for(const r in e)e[r].checked&&t.push(r);arrayEqual(h,t)||v(t)},[s]),useEffect(()=>{const e=[];if(d)for(const t in s)d.items.includes(s[t])&&e.push(t);arrayEqual(h,e)||v(e)},[d]);var C=e=>{null===e||e.disabled||i(e,n)};var b=(r,o)=>function(e){const t=k?k[r]:void 0;t&&(e=t.checked=e.currentTarget.checked,function(){const e=[],t=[];for(const a in k){var r=k[a];r.checked&&(e.push(r),t.push(a))}var o=0===e.length?void 0:{refValueType:"items",items:e};p(o,!1),u("current",void 0),arrayEqual(t,h)||v(t)}(),m("changed",e?o:void 0,e,r))};const y=[];for(const G in k){var g=k[G],F=-1!==h.indexOf(G),R=a&&!1!==g.enabled,x=l(g.tooltip),N=g.styleName?makeSafeClassName(g.styleName):void 0;y.push(React.createElement(FormControlLabel,{className:N,control:React.createElement(Checkbox,{checked:F,onChange:b(G,g.value),inputRef:C}),disabled:!R,key:G,label:React.createElement(Markdown,{text:g.label,translateText:f}),title:x}))}return React.createElement(Root,{className:e,component:t,element:r},React.createElement(FormGroup,{row:c===Orientation.HORIZONTAL},y))};export default CheckGroup;
1
+ import Checkbox from"@vertigis/react-ui/Checkbox";import FormControlLabel from"@vertigis/react-ui/FormControlLabel";import FormGroup,{formGroupClasses}from"@vertigis/react-ui/FormGroup";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useState}from"react";import{Orientation}from"../constants.js";import HostContext from"../hostContext.js";import{arrayEqual}from"../listUtilities.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}})=>({[`.${formGroupClasses.root}`]:{paddingBottom:e(2)}})),CheckGroup=({className:e,current:r,element:t,enabled:o,items:a,name:s,orientation:n,raiseEvent:m,setProperty:c,setValue:i,value:l})=>{const u=useContext(HostContext),[f,p]=useState([]),[d,h]=useState();useEffect(()=>{var e=inspectItems(r,a,l)["items"];h(e);const t=[];for(const o in e)e[o].checked&&t.push(o);arrayEqual(f,t)||p(t)},[a]),useEffect(()=>{const e=[];if(l)for(const t in a)l.items.includes(a[t])&&e.push(t);arrayEqual(f,e)||p(e)},[l]);var C=useFocusCallback(o,s,u);var k=(o,r)=>function(e){const t=d?d[o]:void 0;t&&(e=t.checked=e.currentTarget.checked,function(){const e=[],t=[];for(const a in d){var o=d[a];o.checked&&(e.push(o),t.push(a))}var r=0===e.length?void 0:{refValueType:"items",items:e};i(r,!1),c("current",void 0),arrayEqual(t,f)||p(t)}(),m("changed",e?r:void 0,e,o))};const v=[];for(const g in d){var E=d[g],y=-1!==f.indexOf(g),b=o&&!1!==E.enabled,F=u.renderText(E.tooltip),x=E.styleName?makeSafeClassName(E.styleName):void 0;v.push(React.createElement(FormControlLabel,{className:x,control:React.createElement(Checkbox,{checked:y,inputRef:C,onChange:k(g,E.value)}),disabled:!b,key:g,label:React.createElement(Markdown,{text:E.label}),title:F}))}return React.createElement(StyledFormElement,{className:e,component:"fieldset",element:t,name:s},React.createElement(FormGroup,{row:n===Orientation.HORIZONTAL},v))};export default CheckGroup;
@@ -3,5 +3,5 @@ import type { FormElementProps } from "../..";
3
3
  /**
4
4
  * The component for the "Custom" Form Element.
5
5
  */
6
- declare const Custom: ({ className, component, customType, element }: FormElementProps) => React.JSX.Element;
6
+ declare const Custom: ({ className, component, customType, element, name }: FormElementProps) => React.JSX.Element;
7
7
  export default Custom;
@@ -1 +1 @@
1
- import*as React from"react";import{createElement}from"react";import FormElement from"../FormElement.js";import{getElementProps}from"../utils.js";const Custom=({className:e,component:t,customType:m,element:o})=>{var r=t.props.name;let n;return m&&t.elementRegistration&&(n=createElement(t.elementRegistration.component,getElementProps(t,o))),n||(console.warn(`Unable to render custom form element '${r}' of type '${m}'.`),n=`--- ${m} ---`),React.createElement(FormElement,{className:e,component:t,element:o},n)};export default Custom;
1
+ import*as React from"react";import{createElement}from"react";import{getElementProps}from"../utils.js";import FormElement from"./FormElement.js";const Custom=({className:e,component:t,customType:m,element:o,name:n})=>{let r;return m&&t.elementRegistration&&(r=createElement(t.elementRegistration.component,getElementProps(t,o))),r||(console.warn(`Unable to render custom form element '${n}' of type '${m}'.`),r=`--- ${m} ---`),React.createElement(FormElement,{className:e,name:n,element:o},r)};export default Custom;
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Date Picker" Form Element.
6
6
  */
7
- declare const DatePicker: ({ className, component, element, enabled, error: elementError, format: elementFormat, name, prompt, renderFocus, renderText, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.DateTimeRef | undefined>) => React.JSX.Element;
7
+ declare const DatePicker: ({ className, element, enabled, error: elementError, format: elementFormat, name, prompt, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.DateTimeRef | undefined>) => React.JSX.Element;
8
8
  export default DatePicker;
@@ -1 +1 @@
1
- import BaseDatePicker from"@vertigis/react-ui/DatePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{MuiPickersAdapterContext}from"@vertigis/react-ui/LocalizationProvider";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{DEFAULT_LOCALE}from"../../constants.js";import{Calendar}from"../Calendar.js";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{areValuesEqual,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import{isInvalidError}from"../textUtilities.js";import{isDateTimeRef,makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";const DatePicker=({className:e,component:t,element:r,enabled:o,error:a,format:i,name:s,prompt:l,renderFocus:n,renderText:m,setProperty:u,setValue:c,tooltip:d,value:p})=>{const[f,E]=useState(null),[v,D]=useState(!1),[F,x]=useState(!1),[k,T]=useState(null),g=useRef(),C=useRef(!0),P=useFocusCallback(o,s,n);var R=m(d);const V={locale:useContext(MuiPickersAdapterContext)?.utils?.locale?.code||DEFAULT_LOCALE,timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},j=Calendar.useNative(),M="date",S=isInvalidError(a);useEffect(()=>{var e=makeProperValue(p,j),t=getNewElementValue(e,M,V,j);areValuesEqual(p,t)||c(t,!1),T(e||null)},[p]),useEffect(()=>{if(!F&&!v)if(f)S||u("error",{status:"invalid"});else{if(S&&u("error",void 0),C.current)return void(C.current=!1);let e=k||void 0;if(e&&isDateTimeRef(p)){const r=new Date(p.value);e=new Date(e),e.setHours(r.getHours()),e.setMinutes(r.getMinutes()),e.setSeconds(r.getSeconds()),e.setMilliseconds(r.getMilliseconds())}var t=getNewElementValue(e,M,V,j);areValuesEqual(p,t)||c(t)}C.current=!1},[f,v,F]);var{min:n,max:d}=getDateBounds(i),i=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),l=m(l);return React.createElement(FormElement,{className:e,component:t,element:r,inputId:i},S&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},g.current),React.createElement(BaseDatePicker,{disabled:!o,inputRef:e=>{e&&(g.current=e.dataset.formatString,P(e))},key:"date-picker",maxDate:d,minDate:n,onChange:e=>T(e),onClose:()=>x(!1),onError:e=>E(e),onOpen:()=>x(!0),slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!a,id:i,inputProps:{placeholder:l},onBlur:()=>D(!1),onFocus:()=>D(!0),title:R}},value:k}))};export default DatePicker;
1
+ import BaseDatePicker from"@vertigis/react-ui/DatePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{Calendar}from"../Calendar.js";import{areValuesEqual,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{isInvalidError}from"../textUtilities.js";import{isDateTimeRef,makeUniqueId,useLocale}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const DatePicker=({className:e,element:t,enabled:r,error:a,format:o,name:s,prompt:l,setProperty:i,setValue:n,tooltip:m,value:u})=>{const c=useContext(HostContext),[d,p]=useState(null),[f,x]=useState(!1),[E,D]=useState(!1),[v,F]=useState(null),g=useRef(),T=useRef(!0),k=useFocusCallback(r,s,c),C=c.renderText(m);const R={locale:useLocale(),timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},P=Calendar.useNative(),V="date",j=isInvalidError(a);useEffect(()=>{var e=makeProperValue(u,P),t=getNewElementValue(e,V,R,P);areValuesEqual(u,t)||n(t,!1),F(e||null)},[u]),useEffect(()=>{if(!E&&!f)if(d)j||i("error",{status:"invalid"});else{if(j&&i("error",void 0),T.current)return void(T.current=!1);let e=v||void 0;if(e&&isDateTimeRef(u)){const r=new Date(u.value);e=new Date(e),e.setHours(r.getHours()),e.setMinutes(r.getMinutes()),e.setSeconds(r.getSeconds()),e.setMilliseconds(r.getMilliseconds())}var t=getNewElementValue(e,V,R,P);areValuesEqual(u,t)||n(t)}T.current=!1},[d,f,E]);const{min:S,max:H}=getDateBounds(o),w=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),I=c.renderText(l);return React.createElement(FormElement,{className:e,element:t,inputId:w,name:s},e=>React.createElement(React.Fragment,null,j&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},g.current),React.createElement(BaseDatePicker,{disabled:!r,inputRef:e=>{e&&(g.current=e.dataset.formatString,k(e))},key:"date-picker",maxDate:H,minDate:S,onChange:e=>F(e),onClose:()=>D(!1),onError:e=>p(e),onOpen:()=>D(!0),slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!a,id:w,inputProps:{...e,placeholder:I},onBlur:()=>x(!1),onFocus:()=>x(!0),title:C}},value:v})))};export default DatePicker;
@@ -8,5 +8,5 @@ export declare const dateRangePickerClasses: {
8
8
  /**
9
9
  * The component for the "Date Range Picker" Form Element.
10
10
  */
11
- declare const DateRangePicker: ({ className, component, element, enabled, error, format: elementFormat, name, renderFocus, renderText, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<DateRangeRef | undefined>) => React.JSX.Element;
11
+ declare const DateRangePicker: ({ className, element, enabled, error, format: elementFormat, name, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<DateRangeRef | undefined>) => React.JSX.Element;
12
12
  export default DateRangePicker;
@@ -1 +1 @@
1
- import BaseDateRangePicker from"@vertigis/react-ui/DateRangePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{areValuesEqual,convertToDateRangeRef}from"../dateUtilities.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";const DateRangePickerField=e=>{const{inputProps:t,...r}=e,{"data-elementError":a,...o}=t;return r.error=r.error||a,React.createElement(DateTimeTextField,{inputProps:o,...r})},PREFIX="DateRangePicker",dateRangePickerClasses={root:`${PREFIX}-root`,toLabel:`${PREFIX}-toLabel`},Root=styled(FormElement)(({theme:{spacing:e}})=>({[`.${dateRangePickerClasses.toLabel}`]:{paddingTop:e(3)}})),DateRangePicker=({className:e,component:t,element:r,enabled:a,error:o,format:n,name:s,renderFocus:i,renderText:l,setProperty:m,setValue:u,tooltip:c,value:d})=>{const[p,f]=useState([null,null]),[R,g]=useState(-1),[D,E]=useState([!1,!1]),[P,x]=useState(!1),[F,v]=useState([null,null]),k=useRef(),T=useRef(!0),b=isInvalidError(o);useEffect(()=>{var e=convertToDateRangeRef(d),t=[e?.startDate||null,e?.endDate||null],e=S(t);areValuesEqual(d,e)||u(e,!1),v(t)},[d]),useEffect(()=>{var e=0===R?D[0]:!!p[0],t=1===R?D[1]:!!p[1];E([e,t]);t=e||t;if(t?b||m("error",{status:"invalid"}):b&&m("error",void 0),!P&&-1===R&&!t){if(T.current)return void(T.current=!1);t=S(F);areValuesEqual(d,t)||u(t)}T.current=!1},[p,R,P]);const I=l(c),C=useFocusCallback(a,s,i),S=e=>{if(e[0]&&e[1])return{refValueType:"daterange",startDate:e[0],endDate:e[1]}},j=useMemo(()=>`${makeUniqueId(s)}-input`,[s]);var c=D[0]||D[1],{lowerBound:i,upperBound:n}=n||{},i=i?new Date(i):void 0,n=n?new Date(n):void 0;return React.createElement(Root,{className:clsx(e,dateRangePickerClasses.root),component:t,element:r,inputId:j},c&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},k.current),React.createElement(BaseDateRangePicker,{disabled:!a,maxDate:n,minDate:i,onChange:e=>v(e),onClose:()=>x(!1),onError:e=>f(e),onOpen:()=>x(!0),slots:{textField:DateRangePickerField},slotProps:{fieldSeparator:{children:l("@common-to"),className:dateRangePickerClasses.toLabel},textField:({position:e})=>({inputProps:{id:"start"===e?j:void 0,"data-elementError":!!o,"data-index":"start"===e?0:1},inputRef:e=>{"0"===e?.dataset.index&&(k.current=e.dataset.formatString,C(e))},onBlur:e=>{Number.parseInt(e.target.dataset.index)===R&&g(-1)},onFocus:e=>{e=Number.parseInt(e.target.dataset.index);g(e)},title:I})},value:F}))};export default DateRangePicker;export{dateRangePickerClasses};
1
+ import BaseDateRangePicker from"@vertigis/react-ui/DateRangePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{styled}from"@vertigis/react-ui/styles";import clsx from"clsx";import{useContext,useEffect,useMemo,useRef,useState}from"react";import*as React from"react";import{areValuesEqual,convertToDateRangeRef}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const DateRangePickerField=e=>{const{inputProps:t,...r}=e,{"data-elementError":a,...o}=t;return r.error=r.error||a,React.createElement(DateTimeTextField,{inputProps:o,...r})},PREFIX="DateRangePicker",dateRangePickerClasses={root:`${PREFIX}-root`,toLabel:`${PREFIX}-toLabel`},StyledFormElement=styled(FormElement)(({theme:{spacing:e}})=>({[`.${dateRangePickerClasses.toLabel}`]:{paddingTop:e(3)}})),DateRangePicker=({className:e,element:t,enabled:r,error:a,format:o,name:s,setProperty:n,setValue:i,tooltip:l,value:m})=>{const u=useContext(HostContext),[c,d]=useState([null,null]),[p,f]=useState(-1),[R,x]=useState([!1,!1]),[g,E]=useState(!1),[D,F]=useState([null,null]),P=useRef(),v=useRef(!0),k=isInvalidError(a);useEffect(()=>{var e=convertToDateRangeRef(m),t=[e?.startDate||null,e?.endDate||null],e=b(t);areValuesEqual(m,e)||i(e,!1),F(t)},[m]),useEffect(()=>{var e=0===p?R[0]:!!c[0],t=1===p?R[1]:!!c[1];x([e,t]);t=e||t;if(t?k||n("error",{status:"invalid"}):k&&n("error",void 0),!g&&-1===p&&!t){if(v.current)return void(v.current=!1);t=b(D);areValuesEqual(m,t)||i(t)}v.current=!1},[c,p,g]);const T=u.renderText(l),C=useFocusCallback(r,s,u),b=e=>{if(e[0]&&e[1])return{refValueType:"daterange",startDate:e[0],endDate:e[1]}},I=useMemo(()=>`${makeUniqueId(s)}-input`,[s]);var S=R[0]||R[1],{lowerBound:l,upperBound:o}=o||{},l=l?new Date(l):void 0,o=o?new Date(o):void 0;return React.createElement(StyledFormElement,{className:clsx(e,dateRangePickerClasses.root),element:t,inputId:I,name:s},S&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},P.current),React.createElement(BaseDateRangePicker,{disabled:!r,maxDate:o,minDate:l,onChange:e=>F(e),onClose:()=>E(!1),onError:e=>d(e),onOpen:()=>E(!0),slots:{textField:DateRangePickerField},slotProps:{fieldSeparator:{children:u.renderText("@common-to"),className:dateRangePickerClasses.toLabel},textField:({position:e})=>({inputProps:{id:"start"===e?I:void 0,"data-elementError":!!a,"data-index":"start"===e?0:1},inputRef:e=>{"0"===e?.dataset.index&&(P.current=e.dataset.formatString,C(e))},onBlur:e=>{Number.parseInt(e.target.dataset.index)===p&&f(-1)},onFocus:e=>{e=Number.parseInt(e.target.dataset.index);f(e)},title:T})},value:D}))};export default DateRangePicker;export{dateRangePickerClasses};
@@ -4,5 +4,5 @@ import type { defs } from "../FormHost";
4
4
  /**
5
5
  * The component for the "Date Time Picker" Form Element.
6
6
  */
7
- declare const DateTimePicker: ({ className, component, element, enabled, error, format: elementFormat, name, prompt, renderFocus, renderText, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.DateTimeRef | undefined>) => React.JSX.Element;
7
+ declare const DateTimePicker: ({ className, element, enabled, error, format: elementFormat, name, prompt, setProperty, setValue: setElementValue, tooltip: elementTooltip, value: elementValue, }: FormElementProps<defs.DateTimeRef | undefined>) => React.JSX.Element;
8
8
  export default DateTimePicker;
@@ -1 +1 @@
1
- import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import BaseDateTimePicker from"@vertigis/react-ui/DateTimePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{MuiPickersAdapterContext}from"@vertigis/react-ui/LocalizationProvider";import{clockClasses}from"@vertigis/react-ui/TimeClock";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{DEFAULT_LOCALE}from"../../constants.js";import{Calendar}from"../Calendar.js";import FormElement from"../FormElement.js";import{useFocusCallback}from"../common.js";import{areValuesEqual,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";const StylableDateTimePicker=e=>{let{className:t,slotProps:r,...a}=e;return r=r||{},React.createElement(BaseDateTimePicker,{slotProps:{...r,actionBar:{sx:{display:"none"}},popper:{...r.popper,className:t}},...a})},StyledDateTimePicker=styled(StylableDateTimePicker)(({theme:{palette:e}})=>({[`& .${clockClasses.amButton}, .${clockClasses.pmButton}`]:{[`&.${buttonBaseClasses.focusVisible}`]:{color:e.action.active}}})),DateTimePicker=({className:e,component:t,element:r,enabled:a,error:o,format:i,name:s,prompt:l,renderFocus:m,renderText:n,setProperty:c,setValue:u,tooltip:p,value:d})=>{const[f,T]=useState(!1),[E,k]=useState(!1),[v,C]=useState(!1),[D,F]=useState(null),P=useRef();const x={locale:(useContext(MuiPickersAdapterContext)?.utils?.locale?.code||DEFAULT_LOCALE)?.code||DEFAULT_LOCALE,timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},g=useRef(!0),B=useFocusCallback(a,s,m);var y=n(p);const L=Calendar.useNative(),S="datetime",V=isInvalidError(o);useEffect(()=>{var e=makeProperValue(d,L),t=getNewElementValue(e,S,x,L);areValuesEqual(d,t)||u(t,!1),F(e||null)},[d]),useEffect(()=>{if(!v&&!E)if(f)V||c("error",{status:"invalid"});else{if(V&&c("error",void 0),g.current)return void(g.current=!1);var e=getNewElementValue(D,S,x,L);areValuesEqual(d,e)||u(e)}g.current=!1},[f,E,v]);var{min:m,max:p}=getDateBounds(i),i=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),l=n(l);return React.createElement(FormElement,{className:e,component:t,element:r,inputId:i},V&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},P.current),React.createElement(StyledDateTimePicker,{disabled:!a,key:"date-picker",inputRef:e=>{e&&(P.current=e.dataset.formatString,B(e))},maxDateTime:p,minDateTime:m,onChange:e=>F(e),onClose:()=>C(!1),onError:()=>T(!0),onOpen:()=>C(!0),slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!o,id:i,inputProps:{placeholder:l},onBlur:()=>k(!1),onFocus:()=>k(!0),title:y}},value:D}))};export default DateTimePicker;
1
+ import{buttonBaseClasses}from"@vertigis/react-ui/ButtonBase";import BaseDateTimePicker from"@vertigis/react-ui/DateTimePicker";import FormHelperText from"@vertigis/react-ui/FormHelperText";import{clockClasses}from"@vertigis/react-ui/TimeClock";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect,useMemo,useRef,useState}from"react";import{Calendar}from"../Calendar.js";import{areValuesEqual,getDateBounds,getNewElementValue,makeProperValue}from"../dateUtilities.js";import HostContext from"../hostContext.js";import{isInvalidError}from"../textUtilities.js";import{makeUniqueId,useLocale}from"../utils.js";import DateTimeTextField from"./DateTimeTextField.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const StylableDateTimePicker=e=>{let{className:t,slotProps:r,...a}=e;return r=r||{},React.createElement(BaseDateTimePicker,{slotProps:{...r,actionBar:{sx:{display:"none"}},popper:{...r.popper,className:t}},...a})},StyledDateTimePicker=styled(StylableDateTimePicker)(({theme:{palette:e}})=>({[`& .${clockClasses.amButton}, .${clockClasses.pmButton}`]:{[`&.${buttonBaseClasses.focusVisible}`]:{color:e.action.active}}})),DateTimePicker=({className:e,element:t,enabled:r,error:a,format:o,name:s,prompt:i,setProperty:l,setValue:m,tooltip:n,value:u})=>{const c=useContext(HostContext),[p,d]=useState(!1),[f,T]=useState(!1),[k,x]=useState(!1),[E,v]=useState(null),C=useRef();const D={locale:useLocale(),timezone:(new Intl.DateTimeFormat).resolvedOptions().timeZone},F=useRef(!0),P=useFocusCallback(r,s,c),g=c.renderText(n),B=Calendar.useNative(),R="datetime",y=isInvalidError(a);useEffect(()=>{var e=makeProperValue(u,B),t=getNewElementValue(e,R,D,B);areValuesEqual(u,t)||m(t,!1),v(e||null)},[u]),useEffect(()=>{if(!k&&!f)if(p)y||l("error",{status:"invalid"});else{if(y&&l("error",void 0),F.current)return void(F.current=!1);var e=getNewElementValue(E,R,D,B);areValuesEqual(u,e)||m(e)}F.current=!1},[p,f,k]);const{min:S,max:V}=getDateBounds(o),b=useMemo(()=>`${makeUniqueId(s)}-input`,[s]),j=c.renderText(i);return React.createElement(FormElement,{className:e,element:t,inputId:b,name:s},e=>React.createElement(React.Fragment,null,y&&React.createElement(FormHelperText,{component:"div",error:!0,role:"alert"},C.current),React.createElement(StyledDateTimePicker,{disabled:!r,key:"date-picker",inputRef:e=>{e&&(C.current=e.dataset.formatString,P(e))},maxDateTime:V,minDateTime:S,onChange:e=>v(e),onClose:()=>x(!1),onError:()=>d(!0),onOpen:()=>x(!0),slots:{textField:DateTimeTextField},slotProps:{textField:{error:!!a,id:b,inputProps:{...e,placeholder:j},onBlur:()=>T(!1),onFocus:()=>T(!0),title:g}},value:E})))};export default DateTimePicker;
@@ -4,5 +4,5 @@ import type { defs } from "../../activities/forms/FormRenderer";
4
4
  /**
5
5
  * The component for the "Drop Down List" Form Element.
6
6
  */
7
- declare const DropDownList: ({ className, component, current, element, enabled, items: elementItems, name, prompt, raiseEvent, renderFocus, renderText, setProperty, setValue, tooltip, value, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
7
+ declare const DropDownList: ({ className, current, element, enabled, items: elementItems, name, prompt, raiseEvent, setProperty, setValue, tooltip, value, }: FormElementProps<defs.Value | undefined>) => React.JSX.Element;
8
8
  export default DropDownList;
@@ -1 +1 @@
1
- import NativeSelect from"@vertigis/react-ui/NativeSelect";import{useEffect,useState}from"react";import*as React from"react";import FormElement from"../FormElement.js";import{makeSafeClassName,makeUniqueId,inspectItems}from"../utils.js";const DEFAULT_VALUE="__default",DropDownList=({className:e,component:t,current:r,element:a,enabled:l,items:n,name:m,prompt:o,raiseEvent:s,renderFocus:i,renderText:c,setProperty:u,setValue:p,tooltip:d,value:v})=>{var E=`${makeUniqueId(m)}-input`;const[f,b]=useState({});useEffect(()=>{var{current:e,items:t,label:a,value:l}=inspectItems(r,n,v);u("current",e),u("label",a),u("value",l,!1),b(t)},[n]);d=c(d);return React.createElement(FormElement,{className:e,component:t,element:a,inputId:E},React.createElement(NativeSelect,{disabled:!l,inputProps:{id:E},inputRef:e=>{null===e||e.disabled||i(e,m)},onChange:e=>{var t=e.currentTarget.value,e=f[t].value;u("current",t),u("label",f[t].label),e!==v?p(e,{item:t}):s("changed",e,void 0,t)},title:d,value:r||DEFAULT_VALUE},void 0===r&&React.createElement("option",{key:"none",value:DEFAULT_VALUE,disabled:!0},c(o)),Object.keys(f).map(e=>{var t=f[e],a=c(t.label),l=t.styleName?makeSafeClassName(t.styleName):void 0;return React.createElement("option",{className:l,key:e,value:e,title:c(t.tooltip),disabled:!1===t.enabled},a)})))};export default DropDownList;
1
+ import NativeSelect from"@vertigis/react-ui/NativeSelect";import*as React from"react";import{useContext,useEffect,useState}from"react";import HostContext from"../hostContext.js";import{getInputId,inspectItems,makeSafeClassName,makeUniqueId}from"../utils.js";import FormElement from"./FormElement.js";import{useFocusCallback}from"./common.js";const DEFAULT_VALUE="__default",DropDownList=({className:e,current:l,element:t,enabled:a,items:o,name:r,prompt:n,raiseEvent:s,setProperty:m,setValue:i,tooltip:c,value:u})=>{const p=useContext(HostContext);var d=makeUniqueId(r);const v=getInputId(d),[f,E]=useState({});useEffect(()=>{var{current:e,items:t,label:a,value:r}=inspectItems(l,o,u);m("current",e),m("label",a),m("value",r,!1),E(t)},[o]);const b=p.renderText(c),x=e=>{var t=e.currentTarget.value,e=f[t].value;m("current",t),m("label",f[t].label),e!==u?i(e,{item:t}):s("changed",e,void 0,t)},C=useFocusCallback(a,r,p);return React.createElement(FormElement,{className:e,element:t,inputId:v,name:r},e=>React.createElement(NativeSelect,{disabled:!a,inputProps:{...e,id:v},inputRef:C,onChange:x,title:b,value:l||DEFAULT_VALUE},void 0===l&&React.createElement("option",{key:"none",value:DEFAULT_VALUE,disabled:!0},p.renderText(n)),Object.keys(f).map(e=>{var t=f[e],a=p.renderText(t.label),r=t.styleName?makeSafeClassName(t.styleName):void 0;return React.createElement("option",{className:r,key:e,value:e,title:p.renderText(t.tooltip),disabled:!1===t.enabled},a)})))};export default DropDownList;
@@ -6,5 +6,8 @@ export declare const filePickerClasses: {
6
6
  label: string;
7
7
  list: string;
8
8
  };
9
- declare const FilePicker: ({ className, component, element, fileTypes, name, renderFocus, renderText, setValue, size, translateText, value, }: FormElementProps<defs.FilesRef | undefined>) => React.JSX.Element;
9
+ /**
10
+ * The component for the "File Picker" Form Element.
11
+ */
12
+ declare const FilePicker: ({ className, element, enabled, fileTypes, name, setValue, size, value, }: FormElementProps<defs.FilesRef | undefined>) => React.JSX.Element;
10
13
  export default FilePicker;
@@ -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 Stack from"@vertigis/react-ui/Stack";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useEffect}from"react";import FormElement from"../FormElement.js";import{isFilesRef}from"../utils.js";import Markdown from"./Markdown.js";const PREFIX="FilePicker",filePickerClasses={file:`${PREFIX}-file`,label:`${PREFIX}-label`,list:`${PREFIX}-list`},Root=styled(FormElement)(({theme:{palette:e,spacing:t}})=>({[`.${filePickerClasses.list}`]:{marginBottom:t(1),marginTop:t(1),[`.${filePickerClasses.file}`]:{alignItems:"center",display:"flex",gap:t(1),[`.${filePickerClasses.label}`]:{border:`1px solid ${e.grey[200]}`,flexGrow:1,fontStyle:"italic",lineHeight:1,overflow:"hidden",padding:t(1),textOverflow:"ellipsis",whiteSpace:"nowrap"}}}})),FilePicker=({className:e,component:t,element:l,fileTypes:i,name:r,renderFocus:a,renderText:s,setValue:o,size:n,translateText:c,value:m})=>{let f=5,p;"number"==typeof n&&(f=1<n?Math.ceil(n):1),useEffect(()=>{m&&(isFilesRef(m)&&Array.isArray(m.files)||o(void 0,!1))},[m]);n=s(l.tooltip);let u=t.enabled;const d=[];if(void 0!==m){u=t.enabled&&m.files.length<f;var g=s("@file-picker-remove-item-label");for(const E of m.files){var k=d.length;d.push(React.createElement(Box,{key:"$"+k,className:filePickerClasses.file},React.createElement("label",{className:filePickerClasses.label,title:E.name},E.name),React.createElement(IconButton,{"aria-label":g,disabled:!t.enabled,onClick:(l=>()=>{let e;if(m?.files&&1<m.files.length){const t=[...m.files];t.splice(l,1),e={...m,files:t}}o(e)})(k),ref:e=>{null===e||e.disabled||a(e,r)},title:g},React.createElement(Trash,null))))}}d.push(React.createElement(Box,{key:"footer"},React.createElement(Button,{disabled:!u,onClick:()=>{p&&(p.value="",p.click())},ref:e=>{a(e,r)},startIcon:React.createElement(Plus,null),title:n,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:l.prompt||"",translateText:c}))));c=1!==f;return React.createElement(Root,{className:e,component:t,element:l},React.createElement(Stack,{className:filePickerClasses.list},d),React.createElement("input",{type:"file",style:{display:"none"},title:n,onChange:e=>(e=>{var t=e.files;if(t?.length){const l=m?.files||[];for(let e=0;e<t.length&&l.length!==f;e++)l.push(t[e]);e={refValueType:"files",files:l};o(e)}})(e.target),multiple:c,accept:i,ref:e=>{p=e}}))};export default FilePicker;export{filePickerClasses};
1
+ import Box from"@vertigis/react-ui/Box";import Button from"@vertigis/react-ui/Button";import IconButton from"@vertigis/react-ui/IconButton";import Stack from"@vertigis/react-ui/Stack";import Plus from"@vertigis/react-ui/icons/Plus";import Trash from"@vertigis/react-ui/icons/Trash";import{styled}from"@vertigis/react-ui/styles";import*as React from"react";import{useContext,useEffect}from"react";import HostContext from"../hostContext.js";import{isFilesRef}from"../utils.js";import FormElement from"./FormElement.js";import Markdown from"./Markdown.js";import{useFocusCallback}from"./common.js";const PREFIX="FilePicker",filePickerClasses={file:`${PREFIX}-file`,label:`${PREFIX}-label`,list:`${PREFIX}-list`},StyledFormElement=styled(FormElement)(({theme:{palette:e,spacing:t}})=>({[`.${filePickerClasses.list}`]:{marginBottom:t(1),marginTop:t(1),[`.${filePickerClasses.file}`]:{alignItems:"center",display:"flex",gap:t(1),[`.${filePickerClasses.label}`]:{border:`1px solid ${e.grey[200]}`,flexGrow:1,fontStyle:"italic",lineHeight:1,overflow:"hidden",padding:t(1),textOverflow:"ellipsis",whiteSpace:"nowrap"}}}})),FilePicker=({className:e,element:t,enabled:l,fileTypes:i,name:r,setValue:s,size:a,value:o})=>{const n=useContext(HostContext);let c=5,m;"number"==typeof a&&(c=1<a?Math.ceil(a):1),useEffect(()=>{o&&(isFilesRef(o)&&Array.isArray(o.files)||s(void 0,!1))},[o]);var f=n.renderText(t.tooltip);let p=l;const u=[];var d=useFocusCallback(l,r,n);if(void 0!==o){p=l&&o.files.length<c;var k=n.renderText("@file-picker-remove-item-label");for(const E of o.files){var g=u.length;u.push(React.createElement(Box,{key:"$"+g,className:filePickerClasses.file},React.createElement("label",{className:filePickerClasses.label,title:E.name},E.name),React.createElement(IconButton,{"aria-label":k,disabled:!l,onClick:(l=>()=>{let e;if(o?.files&&1<o.files.length){const t=[...o.files];t.splice(l,1),e={...o,files:t}}s(e)})(g),ref:d,title:k},React.createElement(Trash,null))))}}u.push(React.createElement(Box,{key:"footer"},React.createElement(Button,{disabled:!p,onClick:()=>{m&&(m.value="",m.click())},ref:d,startIcon:React.createElement(Plus,null),title:f,variant:"outlined"},React.createElement(Markdown,{inline:!0,text:t.prompt||""}))));a=1!==c;return React.createElement(StyledFormElement,{className:e,component:"fieldset",element:t,name:r},React.createElement(Stack,{className:filePickerClasses.list},u),React.createElement("input",{type:"file",style:{display:"none"},title:f,onChange:e=>(e=>{var t=e.files;if(t?.length){const l=o?.files||[];for(let e=0;e<t.length&&l.length!==c;e++)l.push(t[e]);e={refValueType:"files",files:l};s(e)}})(e.target),multiple:a,accept:i,ref:e=>{m=e}}))};export default FilePicker;export{filePickerClasses};
@@ -19,5 +19,5 @@ export declare const formClasses: {
19
19
  root: string;
20
20
  row: string;
21
21
  };
22
- declare const Form: ({ className, component }: FormProps) => React.JSX.Element;
22
+ declare const Form: ({ className, component }: FormProps) => React.JSX.Element | null;
23
23
  export default Form;