@esri/solutions-components 0.6.45 → 0.7.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/dist/cjs/card-manager_3.cjs.entry.js +1 -1
- package/dist/cjs/{downloadUtils-d017810f.js → downloadUtils-e3e595e9.js} +30 -52
- package/dist/cjs/{index.es-de35a9a4.js → index.es-047537b5.js} +1 -1
- package/dist/cjs/map-select-tools_3.cjs.entry.js +1 -1
- package/dist/cjs/public-notification.cjs.entry.js +1 -1
- package/dist/collection/demos/new-public-notification.html +16 -2
- package/dist/collection/utils/downloadUtils.js +28 -50
- package/dist/collection/utils/downloadUtils.ts +7 -13
- package/dist/components/downloadUtils.js +28 -50
- package/dist/esm/card-manager_3.entry.js +1 -1
- package/dist/esm/{downloadUtils-a3f28bae.js → downloadUtils-8fbd1347.js} +29 -51
- package/dist/esm/{index.es-e0432a23.js → index.es-b6705ce7.js} +1 -1
- package/dist/esm/map-select-tools_3.entry.js +1 -1
- package/dist/esm/public-notification.entry.js +1 -1
- package/dist/solutions-components/demos/new-public-notification.html +16 -2
- package/dist/solutions-components/{p-02b1befe.js → p-072680a5.js} +12 -12
- package/dist/solutions-components/{p-5d5d10d5.js → p-092fd5d9.js} +1 -1
- package/dist/solutions-components/{p-4fbf3997.entry.js → p-11cb7b04.entry.js} +1 -1
- package/dist/solutions-components/{p-94d64f05.entry.js → p-7f793144.entry.js} +1 -1
- package/dist/solutions-components/{p-5a5676d4.entry.js → p-f367db61.entry.js} +1 -1
- package/dist/solutions-components/solutions-components.esm.js +1 -1
- package/dist/solutions-components/utils/downloadUtils.ts +7 -13
- package/dist/types/utils/downloadUtils.d.ts +1 -9
- package/package.json +1 -1
| @@ -1507,7 +1507,7 @@ function(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++ | |
| 1507 1507 | 
             
             * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
| 1508 1508 | 
             
             * ====================================================================
         | 
| 1509 1509 | 
             
             */
         | 
| 1510 | 
            -
            function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):import('./index.es- | 
| 1510 | 
            +
            function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):import('./index.es-b6705ce7.js')).catch((function(t){return Promise.reject(new Error("Could not load canvg: "+t))})).then((function(t){return t.default?t.default:t}))}E.API.addSvgAsImage=function(t,r,n,i,o,s,c,u){if(isNaN(r)||isNaN(n))throw a.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments),new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(i)||isNaN(o))throw a.error("jsPDF.addSvgAsImage: Invalid measurements",arguments),new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var h=document.createElement("canvas");h.width=i,h.height=o;var l=h.getContext("2d");l.fillStyle="#fff",l.fillRect(0,0,h.width,h.height);var f={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},d=this;return e().then((function(e){return e.fromString(l,t,f)}),(function(){return Promise.reject(new Error("Could not load canvg."))})).then((function(t){return t.render(f)})).then((function(){d.addImage(h.toDataURL("image/jpeg",1),r,n,i,o,c,u);}))};}(),E.API.putTotalPages=function(t){var e,r=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(t,"g"),r=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(t,this.internal.getFont()),"g"),r=this.pdfEscape16(this.internal.getNumberOfPages()+"",this.internal.getFont()));for(var n=1;n<=this.internal.getNumberOfPages();n++)for(var i=0;i<this.internal.pages[n].length;i++)this.internal.pages[n][i]=this.internal.pages[n][i].replace(e,r);return this},E.API.viewerPreferences=function(e,r){var n;e=e||{},r=r||!1;var i,a,o,s={HideToolbar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:"UseNone",value:"UseNone",type:"name",explicitSet:!1,valueSet:["UseNone","UseOutlines","UseThumbs","UseOC"],pdfVersion:1.3},Direction:{defaultValue:"L2R",value:"L2R",type:"name",explicitSet:!1,valueSet:["L2R","R2L"],pdfVersion:1.3},ViewArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},ViewClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintScaling:{defaultValue:"AppDefault",value:"AppDefault",type:"name",explicitSet:!1,valueSet:["AppDefault","None"],pdfVersion:1.6},Duplex:{defaultValue:"",value:"none",type:"name",explicitSet:!1,valueSet:["Simplex","DuplexFlipShortEdge","DuplexFlipLongEdge","none"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:"",value:"",type:"array",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:"integer",explicitSet:!1,valueSet:null,pdfVersion:1.7}},c=Object.keys(s),u=[],h=0,l=0,f=0;function d(t,e){var r,n=!1;for(r=0;r<t.length;r+=1)t[r]===e&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(s)),this.internal.viewerpreferences.isSubscribed=!1),n=this.internal.viewerpreferences.configuration,"reset"===e||!0===r){var p=c.length;for(f=0;f<p;f+=1)n[c[f]].value=n[c[f]].defaultValue,n[c[f]].explicitSet=!1;}if("object"===t(e))for(a in e)if(o=e[a],d(c,a)&&void 0!==o){if("boolean"===n[a].type&&"boolean"==typeof o)n[a].value=o;else if("name"===n[a].type&&d(n[a].valueSet,o))n[a].value=o;else if("integer"===n[a].type&&Number.isInteger(o))n[a].value=o;else if("array"===n[a].type){for(h=0;h<o.length;h+=1)if(i=!0,1===o[h].length&&"number"==typeof o[h][0])u.push(String(o[h]-1));else if(o[h].length>1){for(l=0;l<o[h].length;l+=1)"number"!=typeof o[h][l]&&(i=!1);!0===i&&u.push([o[h][0]-1,o[h][1]-1].join(" "));}n[a].value="["+u.join(" ")+"]";}else n[a].value=n[a].defaultValue;n[a].explicitSet=!0;}return !1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe("putCatalog",(function(){var t,e=[];for(t in n)!0===n[t].explicitSet&&("name"===n[t].type?e.push("/"+t+" /"+n[t].value):e.push("/"+t+" "+n[t].value));0!==e.length&&this.internal.write("/ViewerPreferences\n<<\n"+e.join("\n")+"\n>>");})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},
         | 
| 1511 1511 | 
             
            /** ====================================================================
         | 
| 1512 1512 | 
             
             * @license
         | 
| 1513 1513 | 
             
             * jsPDF XMP metadata plugin
         | 
| @@ -2554,28 +2554,21 @@ async function _convertPopupArcadeToLabelSpec(expressionInfo) { | |
| 2554 2554 | 
             
             * @param layer Layer from which to fetch features
         | 
| 2555 2555 | 
             
             * @return Promise resolving to a set of executors keyed using the expression name
         | 
| 2556 2556 | 
             
             */
         | 
| 2557 | 
            -
             | 
| 2558 | 
            -
             | 
| 2559 | 
            -
              labelFormat: string,
         | 
| 2560 | 
            -
              layer: __esri.FeatureLayer
         | 
| 2561 | 
            -
            ): Promise<IArcadeExecutors> {
         | 
| 2562 | 
            -
              const arcadeExecutors: IArcadeExecutors = {};
         | 
| 2563 | 
            -
             | 
| 2557 | 
            +
            async function _createArcadeExecutors(labelFormat, layer) {
         | 
| 2558 | 
            +
              const arcadeExecutors = {};
         | 
| 2564 2559 | 
             
              // Are any Arcade expressions in the layer?
         | 
| 2565 2560 | 
             
              if (!Array.isArray(layer.popupTemplate.expressionInfos) || layer.popupTemplate.expressionInfos.length === 0) {
         | 
| 2566 2561 | 
             
                return Promise.resolve(arcadeExecutors);
         | 
| 2567 2562 | 
             
              }
         | 
| 2568 | 
            -
             | 
| 2569 2563 | 
             
              // Are there any Arcade expressions in the label format?
         | 
| 2570 2564 | 
             
              const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
         | 
| 2571 2565 | 
             
              const arcadeExpressionsMatches = labelFormat.match(arcadeExpressionRegExp);
         | 
| 2572 2566 | 
             
              if (!arcadeExpressionsMatches) {
         | 
| 2573 2567 | 
             
                return Promise.resolve(arcadeExecutors);
         | 
| 2574 2568 | 
             
              }
         | 
| 2575 | 
            -
             | 
| 2576 2569 | 
             
              // Generate an Arcade executor for each match
         | 
| 2577 2570 | 
             
              const [arcade] = await loadModules(["esri/arcade"]);
         | 
| 2578 | 
            -
              const labelingProfile | 
| 2571 | 
            +
              const labelingProfile = {
         | 
| 2579 2572 | 
             
                variables: [
         | 
| 2580 2573 | 
             
                  {
         | 
| 2581 2574 | 
             
                    name: "$feature",
         | 
| @@ -2595,38 +2588,26 @@ async function _createArcadeExecutors( | |
| 2595 2588 | 
             
                  }
         | 
| 2596 2589 | 
             
                ]
         | 
| 2597 2590 | 
             
              };
         | 
| 2598 | 
            -
             | 
| 2599 | 
            -
               | 
| 2600 | 
            -
             | 
| 2601 | 
            -
                ( | 
| 2602 | 
            -
                   | 
| 2603 | 
            -
             | 
| 2604 | 
            -
             | 
| 2605 | 
            -
             | 
| 2606 | 
            -
             | 
| 2607 | 
            -
             | 
| 2608 | 
            -
                          arcade.createArcadeExecutor(expressionInfo.expression, labelingProfile);
         | 
| 2609 | 
            -
                      }
         | 
| 2610 | 
            -
                    }
         | 
| 2611 | 
            -
                  );
         | 
| 2612 | 
            -
                }
         | 
| 2613 | 
            -
              );
         | 
| 2614 | 
            -
             | 
| 2591 | 
            +
              const createArcadeExecutorPromises = {};
         | 
| 2592 | 
            +
              arcadeExpressionsMatches.forEach((match) => {
         | 
| 2593 | 
            +
                const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
         | 
| 2594 | 
            +
                (layer.popupTemplate.expressionInfos || []).forEach(expressionInfo => {
         | 
| 2595 | 
            +
                  if (expressionInfo.name === expressionName) {
         | 
| 2596 | 
            +
                    createArcadeExecutorPromises[expressionName] =
         | 
| 2597 | 
            +
                      arcade.createArcadeExecutor(expressionInfo.expression, labelingProfile);
         | 
| 2598 | 
            +
                  }
         | 
| 2599 | 
            +
                });
         | 
| 2600 | 
            +
              });
         | 
| 2615 2601 | 
             
              const promises = Object.values(createArcadeExecutorPromises);
         | 
| 2616 2602 | 
             
              return Promise.all(promises)
         | 
| 2617 | 
            -
             | 
| 2618 | 
            -
                 | 
| 2619 | 
            -
             | 
| 2620 | 
            -
             | 
| 2621 | 
            -
                  for (let i = 0; i < expressionNames.length; ++i) {
         | 
| 2622 | 
            -
                    arcadeExecutors[expressionNames[i]] = executors[i].valueOf() as __esri.ArcadeExecutor;
         | 
| 2623 | 
            -
                  }
         | 
| 2624 | 
            -
             | 
| 2625 | 
            -
                  return arcadeExecutors;
         | 
| 2603 | 
            +
                .then(executors => {
         | 
| 2604 | 
            +
                const expressionNames = Object.keys(createArcadeExecutorPromises);
         | 
| 2605 | 
            +
                for (let i = 0; i < expressionNames.length; ++i) {
         | 
| 2606 | 
            +
                  arcadeExecutors[expressionNames[i]] = executors[i].valueOf();
         | 
| 2626 2607 | 
             
                }
         | 
| 2627 | 
            -
             | 
| 2608 | 
            +
                return arcadeExecutors;
         | 
| 2609 | 
            +
              });
         | 
| 2628 2610 | 
             
            }
         | 
| 2629 | 
            -
            */
         | 
| 2630 2611 | 
             
            /**
         | 
| 2631 2612 | 
             
             * Creates a title from a list of selection set names.
         | 
| 2632 2613 | 
             
             *
         | 
| @@ -3023,7 +3004,7 @@ async function _prepareLabels(webmap, layer, ids, formatUsingLayerPopup = true, | |
| 3023 3004 | 
             
              // Apply the label format
         | 
| 3024 3005 | 
             
              const labels = labelFormatProps.labelFormat.type === "pattern" ?
         | 
| 3025 3006 | 
             
                // Export attributes in format
         | 
| 3026 | 
            -
                await _prepareLabelsFromPattern( | 
| 3007 | 
            +
                await _prepareLabelsFromPattern(layer, featureSet, attributeOrigNames, attributeTypes, attributeDomains, labelFormatProps.attributeFormats, labelFormatProps.labelFormat.format, includeHeaderNames)
         | 
| 3027 3008 | 
             
                : labelFormatProps.labelFormat.type === "executor" ?
         | 
| 3028 3009 | 
             
                  // Export attributes in expression
         | 
| 3029 3010 | 
             
                  await _prepareLabelsUsingExecutor(featureSet, labelFormatProps.labelFormat.format)
         | 
| @@ -3073,31 +3054,28 @@ async function _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomain | |
| 3073 3054 | 
             
             * @param includeHeaderNames Add the label format at the front of the list of generated labels
         | 
| 3074 3055 | 
             
             * @returns Promise resolving with list of labels, each of which is a list of label lines
         | 
| 3075 3056 | 
             
             */
         | 
| 3076 | 
            -
            async function _prepareLabelsFromPattern(
         | 
| 3077 | 
            -
             | 
| 3078 | 
            -
            featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
         | 
| 3057 | 
            +
            async function _prepareLabelsFromPattern(layer, featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
         | 
| 3058 | 
            +
              var _a;
         | 
| 3079 3059 | 
             
              const [intl] = await loadModules(["esri/intl"]);
         | 
| 3080 3060 | 
             
              // Find the label fields that we need to replace with values
         | 
| 3081 3061 | 
             
              const attributeExpressionMatches = _getFieldExpressionsFromLabel(labelFormat);
         | 
| 3082 3062 | 
             
              const attributeNames = _getFieldNamesFromFieldExpressions(attributeExpressionMatches);
         | 
| 3083 3063 | 
             
              // Do we need any Arcade executors?
         | 
| 3084 | 
            -
               | 
| 3085 | 
            -
               | 
| 3064 | 
            +
              const arcadeExecutors = await _createArcadeExecutors(labelFormat, layer);
         | 
| 3065 | 
            +
              const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
         | 
| 3086 3066 | 
             
              // Find the label fields that we need to replace with values
         | 
| 3087 | 
            -
               | 
| 3067 | 
            +
              const arcadeExpressionMatches = (_a = labelFormat.match(arcadeExpressionRegExp)) !== null && _a !== void 0 ? _a : [];
         | 
| 3088 3068 | 
             
              // Convert feature attributes into an array of labels
         | 
| 3089 3069 | 
             
              const labels = await Promise.all(featureSet.map(async (feature) => {
         | 
| 3090 3070 | 
             
                var _a;
         | 
| 3091 3071 | 
             
                let labelPrep = labelFormat;
         | 
| 3092 | 
            -
                 | 
| 3093 | 
            -
                // Replace Arcade expressions in this feature
         | 
| 3072 | 
            +
                //Replace Arcade expressions in this feature
         | 
| 3094 3073 | 
             
                for (let i = 0; i < arcadeExpressionMatches.length; i++) {
         | 
| 3095 | 
            -
                  const match | 
| 3074 | 
            +
                  const match = arcadeExpressionMatches[i];
         | 
| 3096 3075 | 
             
                  const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
         | 
| 3097 | 
            -
                  const value = await arcadeExecutors[expressionName].executeAsync({"$feature": feature, "$layer" | 
| 3076 | 
            +
                  const value = await arcadeExecutors[expressionName].executeAsync({ "$feature": feature, "$layer": layer });
         | 
| 3098 3077 | 
             
                  labelPrep = labelPrep.replace(match, value);
         | 
| 3099 3078 | 
             
                }
         | 
| 3100 | 
            -
                */
         | 
| 3101 3079 | 
             
                // Replace non-Arcade fields in this feature
         | 
| 3102 3080 | 
             
                const attributeValues = (_a = feature.attributes) !== null && _a !== void 0 ? _a : feature;
         | 
| 3103 3081 | 
             
                attributeNames.forEach((attributeName, i) => {
         | 
| @@ -4,7 +4,7 @@ | |
| 4 4 | 
             
             * http://www.apache.org/licenses/LICENSE-2.0
         | 
| 5 5 | 
             
             */
         | 
| 6 6 | 
             
            import { a as commonjsGlobal, c as createCommonjsModule, g as getDefaultExportFromCjs } from './_commonjsHelpers-d5f9d613.js';
         | 
| 7 | 
            -
            import { _ as _typeof_1 } from './downloadUtils- | 
| 7 | 
            +
            import { _ as _typeof_1 } from './downloadUtils-8fbd1347.js';
         | 
| 8 8 | 
             
            import './index-b05b3079.js';
         | 
| 9 9 | 
             
            import './loadModules-0bf05e85.js';
         | 
| 10 10 | 
             
            import './locale-5bdc0197.js';
         | 
| @@ -9,7 +9,7 @@ import { g as goToSelection, h as highlightFeatures, c as queryObjectIds, d as g | |
| 9 9 | 
             
            import { c as EWorkflowType, e as ESelectionMode, f as EDrawMode } from './interfaces-7470d906.js';
         | 
| 10 10 | 
             
            import { s as state } from './publicNotificationStore-05b455ff.js';
         | 
| 11 11 | 
             
            import { a as getComponentClosestLanguage, g as getLocaleComponentStrings } from './locale-5bdc0197.js';
         | 
| 12 | 
            -
            import { d as downloadCSV, a as downloadPDF } from './downloadUtils- | 
| 12 | 
            +
            import { d as downloadCSV, a as downloadPDF } from './downloadUtils-8fbd1347.js';
         | 
| 13 13 | 
             
            import './index-da1495f5.js';
         | 
| 14 14 | 
             
            import './_commonjsHelpers-d5f9d613.js';
         | 
| 15 15 | 
             
            import './solution-resource-be35d35b.js';
         | 
| @@ -9,7 +9,7 @@ import { l as loadModules } from './loadModules-0bf05e85.js'; | |
| 9 9 | 
             
            import { g as goToSelection, h as highlightFeatures } from './mapViewUtils-1e2befd7.js';
         | 
| 10 10 | 
             
            import { s as state } from './publicNotificationStore-05b455ff.js';
         | 
| 11 11 | 
             
            import { g as getLocaleComponentStrings } from './locale-5bdc0197.js';
         | 
| 12 | 
            -
            import { c as consolidateLabels, r as removeDuplicateLabels } from './downloadUtils- | 
| 12 | 
            +
            import { c as consolidateLabels, r as removeDuplicateLabels } from './downloadUtils-8fbd1347.js';
         | 
| 13 13 | 
             
            import './index-da1495f5.js';
         | 
| 14 14 | 
             
            import './_commonjsHelpers-d5f9d613.js';
         | 
| 15 15 | 
             
            import './solution-resource-be35d35b.js';
         | 
| @@ -74,13 +74,27 @@ | |
| 74 74 | 
             
                    Legend,
         | 
| 75 75 | 
             
                    esriConfig
         | 
| 76 76 | 
             
                  ) => {
         | 
| 77 | 
            +
                    let itemId;
         | 
| 78 | 
            +
                    var vars = window.location.search.substring(1).split('&');
         | 
| 79 | 
            +
                    vars.forEach((param) => {
         | 
| 80 | 
            +
                      let vals = param.split('=');
         | 
| 81 | 
            +
                      const v = vals[1];
         | 
| 82 | 
            +
                      switch (vals[0]) {
         | 
| 83 | 
            +
                        case "id":
         | 
| 84 | 
            +
                          itemId = v;
         | 
| 85 | 
            +
                          break;
         | 
| 86 | 
            +
                        default:
         | 
| 87 | 
            +
                          break;
         | 
| 88 | 
            +
                      }
         | 
| 89 | 
            +
                    });
         | 
| 90 | 
            +
             | 
| 77 91 | 
             
                    //esriConfig.portalUrl = "https://solutions.mapsdevext.arcgis.com";
         | 
| 78 92 | 
             
                    var webMap = new WebMap({
         | 
| 79 93 | 
             
                      portalItem: {
         | 
| 80 94 | 
             
                        // solutions
         | 
| 81 | 
            -
                        id: "3715f4899bea4b2a948347c5c2357e58"
         | 
| 95 | 
            +
                        id: itemId ? itemId : "3715f4899bea4b2a948347c5c2357e58"
         | 
| 82 96 | 
             
                        // InstantApps
         | 
| 83 | 
            -
                        //id: "863e4f6f2a7840db896cc1b1606d552d"
         | 
| 97 | 
            +
                        //id: itemId ? itemId : "863e4f6f2a7840db896cc1b1606d552d"
         | 
| 84 98 | 
             
                      }
         | 
| 85 99 | 
             
                    });
         | 
| 86 100 |  |