@esri/solutions-components 0.6.8 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (775) hide show
  1. package/dist/assets/t9n/info-card/resources.json +1 -1
  2. package/dist/assets/t9n/info-card/resources_en.json +1 -1
  3. package/dist/assets/t9n/map-tools/resources.json +1 -1
  4. package/dist/assets/t9n/map-tools/resources_en.json +1 -1
  5. package/dist/cjs/{ExpandToggle-e6a0d66e.js → ExpandToggle-c5690e14.js} +5 -5
  6. package/dist/cjs/{FloatingArrow-0119ec6e.js → FloatingArrow-675171a6.js} +1 -1
  7. package/dist/cjs/{Heading-521f39ac.js → Heading-3712677d.js} +1 -1
  8. package/dist/cjs/{app-globals-72576a1c.js → app-globals-a62ad1ad.js} +3 -3
  9. package/dist/cjs/{ar-1718ae57.js → ar-1dc23c0a.js} +14 -14
  10. package/dist/cjs/{array-46bb7df1.js → array-2db3fd4a.js} +1 -1
  11. package/dist/cjs/{basemap-gallery_4.cjs.entry.js → basemap-gallery_5.cjs.entry.js} +115 -6
  12. package/dist/cjs/{bg-190a176c.js → bg-4024b354.js} +14 -14
  13. package/dist/cjs/{bs-919e0de8.js → bs-3134d711.js} +14 -14
  14. package/dist/cjs/buffer-tools_4.cjs.entry.js +15 -15
  15. package/dist/cjs/{ca-94918e06.js → ca-8d6647d3.js} +14 -14
  16. package/dist/cjs/calcite-accordion-item.cjs.entry.js +7 -12
  17. package/dist/cjs/calcite-accordion.cjs.entry.js +1 -6
  18. package/dist/cjs/calcite-action-bar.cjs.entry.js +31 -26
  19. package/dist/cjs/calcite-action-group_2.cjs.entry.js +18 -20
  20. package/dist/cjs/calcite-action-pad.cjs.entry.js +20 -16
  21. package/dist/cjs/calcite-action_2.cjs.entry.js +17 -22
  22. package/dist/cjs/calcite-alert.cjs.entry.js +11 -11
  23. package/dist/cjs/calcite-avatar.cjs.entry.js +6 -6
  24. package/dist/cjs/calcite-block-section.cjs.entry.js +9 -9
  25. package/dist/cjs/calcite-block.cjs.entry.js +12 -12
  26. package/dist/cjs/calcite-button.cjs.entry.js +12 -12
  27. package/dist/cjs/calcite-card.cjs.entry.js +9 -9
  28. package/dist/cjs/calcite-checkbox.cjs.entry.js +8 -13
  29. package/dist/cjs/calcite-chip-group.cjs.entry.js +6 -11
  30. package/dist/cjs/calcite-chip.cjs.entry.js +11 -11
  31. package/dist/cjs/calcite-color-picker-hex-input_2.cjs.entry.js +8 -8
  32. package/dist/cjs/calcite-color-picker.cjs.entry.js +12 -12
  33. package/dist/cjs/calcite-combobox-item-group.cjs.entry.js +5 -5
  34. package/dist/cjs/calcite-combobox_6.cjs.entry.js +21 -26
  35. package/dist/cjs/calcite-date-picker-day_3.cjs.entry.js +10 -10
  36. package/dist/cjs/calcite-date-picker.cjs.entry.js +11 -11
  37. package/dist/cjs/calcite-fab.cjs.entry.js +6 -6
  38. package/dist/cjs/calcite-filter_5.cjs.entry.js +16 -16
  39. package/dist/cjs/calcite-flow-item.cjs.entry.js +11 -11
  40. package/dist/cjs/calcite-flow.cjs.entry.js +3 -3
  41. package/dist/cjs/calcite-graph.cjs.entry.js +5 -10
  42. package/dist/cjs/calcite-icon.cjs.entry.js +6 -6
  43. package/dist/cjs/calcite-inline-editable.cjs.entry.js +11 -11
  44. package/dist/cjs/calcite-input-date-picker.cjs.entry.js +17 -17
  45. package/dist/cjs/calcite-input-number_2.cjs.entry.js +13 -13
  46. package/dist/cjs/{calcite-input-time-picker-b99baf7b.js → calcite-input-time-picker-4efcd55d.js} +60 -60
  47. package/dist/cjs/calcite-input-time-picker.cjs.entry.js +14 -14
  48. package/dist/cjs/calcite-input-time-zone.cjs.entry.js +12 -12
  49. package/dist/cjs/calcite-input_2.cjs.entry.js +12 -12
  50. package/dist/cjs/calcite-label.cjs.entry.js +5 -5
  51. package/dist/cjs/calcite-link.cjs.entry.js +5 -5
  52. package/dist/cjs/calcite-list-item-group.cjs.entry.js +3 -3
  53. package/dist/cjs/calcite-loader.cjs.entry.js +1 -1
  54. package/dist/cjs/calcite-menu-item.cjs.entry.js +9 -9
  55. package/dist/cjs/calcite-menu.cjs.entry.js +9 -9
  56. package/dist/cjs/calcite-modal.cjs.entry.js +12 -12
  57. package/dist/cjs/calcite-navigation-logo.cjs.entry.js +2 -2
  58. package/dist/cjs/calcite-navigation-user.cjs.entry.js +2 -2
  59. package/dist/cjs/calcite-navigation.cjs.entry.js +5 -5
  60. package/dist/cjs/calcite-notice.cjs.entry.js +11 -11
  61. package/dist/cjs/calcite-option_2.cjs.entry.js +9 -9
  62. package/dist/cjs/calcite-pagination.cjs.entry.js +9 -9
  63. package/dist/cjs/calcite-panel_2.cjs.entry.js +14 -14
  64. package/dist/cjs/calcite-pick-list-group.cjs.entry.js +7 -7
  65. package/dist/cjs/calcite-pick-list-item.cjs.entry.js +12 -12
  66. package/dist/cjs/calcite-pick-list.cjs.entry.js +10 -10
  67. package/dist/cjs/calcite-radio-button-group.cjs.entry.js +2 -7
  68. package/dist/cjs/calcite-radio-button.cjs.entry.js +9 -9
  69. package/dist/cjs/calcite-rating.cjs.entry.js +12 -12
  70. package/dist/cjs/calcite-scrim.cjs.entry.js +8 -8
  71. package/dist/cjs/calcite-segmented-control_2.cjs.entry.js +8 -8
  72. package/dist/cjs/calcite-shell-center-row.cjs.entry.js +6 -6
  73. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +29 -32
  74. package/dist/cjs/calcite-sortable-list.cjs.entry.js +7 -7
  75. package/dist/cjs/calcite-split-button.cjs.entry.js +3 -3
  76. package/dist/cjs/calcite-stepper-item.cjs.entry.js +8 -8
  77. package/dist/cjs/calcite-stepper.cjs.entry.js +3 -8
  78. package/dist/cjs/calcite-switch.cjs.entry.js +8 -8
  79. package/dist/cjs/calcite-text-area.cjs.entry.js +15 -15
  80. package/dist/cjs/calcite-tile-select-group.cjs.entry.js +1 -1
  81. package/dist/cjs/calcite-tile-select.cjs.entry.js +4 -4
  82. package/dist/cjs/calcite-tile.cjs.entry.js +7 -7
  83. package/dist/cjs/calcite-time-picker.cjs.entry.js +10 -10
  84. package/dist/cjs/calcite-tip-manager.cjs.entry.js +9 -9
  85. package/dist/cjs/calcite-tip.cjs.entry.js +10 -10
  86. package/dist/cjs/calcite-tooltip.cjs.entry.js +9 -9
  87. package/dist/cjs/calcite-tree_3.cjs.entry.js +8 -8
  88. package/dist/cjs/{card-manager_4.cjs.entry.js → card-manager_3.cjs.entry.js} +47 -93
  89. package/dist/cjs/{conditionalSlot-85b3a6b3.js → conditionalSlot-126d557f.js} +2 -2
  90. package/dist/cjs/crowdsource-manager.cjs.entry.js +23 -11
  91. package/dist/cjs/{cs-fe27e732.js → cs-b24cd994.js} +14 -14
  92. package/dist/cjs/{da-1b7f3440.js → da-9dee3a1f.js} +14 -14
  93. package/dist/cjs/{date-cec32b0e.js → date-0fec6f6b.js} +2 -2
  94. package/dist/cjs/{de-0dc1effa.js → de-1a98b964.js} +14 -14
  95. package/dist/cjs/{de-at-acdc4d01.js → de-at-782e6c7f.js} +14 -14
  96. package/dist/cjs/{de-ch-778a0d99.js → de-ch-d5c95469.js} +14 -14
  97. package/dist/cjs/{dom-c1807fc1.js → dom-456f9f13.js} +3 -3
  98. package/dist/cjs/{downloadUtils-a8c530f7.js → downloadUtils-1f057ec0.js} +249 -262
  99. package/dist/cjs/edit-card_2.cjs.entry.js +6 -5
  100. package/dist/cjs/{el-fdbc9bc1.js → el-af28cafa.js} +14 -14
  101. package/dist/cjs/{en-au-0ff50cdf.js → en-au-109f3119.js} +14 -14
  102. package/dist/cjs/{en-ca-284e9368.js → en-ca-22890a25.js} +14 -14
  103. package/dist/cjs/{en-gb-0fcae8ae.js → en-gb-dc23c9dd.js} +14 -14
  104. package/dist/cjs/{es-cd54acba.js → es-3f353355.js} +14 -14
  105. package/dist/cjs/{es-mx-2078d50f.js → es-mx-ccb57857.js} +14 -14
  106. package/dist/cjs/{et-17f323f6.js → et-119c047b.js} +14 -14
  107. package/dist/cjs/{fi-82f27397.js → fi-13096d81.js} +14 -14
  108. package/dist/cjs/{filter-bda212b4.js → filter-8d8c453e.js} +1 -1
  109. package/dist/cjs/{floating-ui-8d10af88.js → floating-ui-2b0fbba0.js} +2 -2
  110. package/dist/cjs/{focusTrapComponent-a22fc6a8.js → focusTrapComponent-d8412ddc.js} +4 -4
  111. package/dist/cjs/{form-9d8ebf06.js → form-7c6054c3.js} +2 -2
  112. package/dist/cjs/{fr-af7e1192.js → fr-563dfcd5.js} +14 -14
  113. package/dist/cjs/{fr-ch-5e1f2c28.js → fr-ch-f66cfd49.js} +14 -14
  114. package/dist/cjs/{guid-3abe3cc6.js → guid-d1123d5e.js} +1 -1
  115. package/dist/cjs/{he-ea851800.js → he-d8253a1a.js} +14 -14
  116. package/dist/cjs/{hi-5212a21d.js → hi-58c7c3b5.js} +14 -14
  117. package/dist/cjs/{hr-4eecb2ed.js → hr-5aba114a.js} +14 -14
  118. package/dist/cjs/{hu-6b527d8e.js → hu-38c15915.js} +14 -14
  119. package/dist/cjs/{id-d78f12ec.js → id-3a94c080.js} +14 -14
  120. package/dist/cjs/{index.es-4542630e.js → index.es-a1507f1c.js} +3 -3
  121. package/dist/cjs/{interactive-2fe0f43a.js → interactive-48299817.js} +2 -2
  122. package/dist/cjs/{it-15242935.js → it-88834555.js} +14 -14
  123. package/dist/cjs/{it-ch-9dc21944.js → it-ch-970563cd.js} +14 -14
  124. package/dist/cjs/{ja-f702cfc2.js → ja-13d4b1ae.js} +14 -14
  125. package/dist/cjs/{key-b8b55ea3.js → key-8de93212.js} +1 -1
  126. package/dist/cjs/{ko-aa9bde2c.js → ko-10cbdd98.js} +14 -14
  127. package/dist/cjs/{label-6e33e971.js → label-166e2d81.js} +3 -3
  128. package/dist/cjs/layout-manager.cjs.entry.js +93 -0
  129. package/dist/cjs/{loadModules-31cab7ac.js → loadModules-c5490589.js} +1 -1
  130. package/dist/cjs/{loadable-bac9cdd6.js → loadable-6925d840.js} +1 -1
  131. package/dist/cjs/loader.cjs.js +3 -3
  132. package/dist/cjs/{locale-c63a1b57.js → locale-79c3d30e.js} +5 -5
  133. package/dist/cjs/{locale-d15cd743.js → locale-88c21da2.js} +15 -15
  134. package/dist/cjs/{lt-e741ff2f.js → lt-3fc5017a.js} +14 -14
  135. package/dist/cjs/{lv-92d6768e.js → lv-9d9cf999.js} +14 -14
  136. package/dist/cjs/map-select-tools_3.cjs.entry.js +3 -3
  137. package/dist/cjs/{math-5132d9bd.js → math-f28069f3.js} +1 -1
  138. package/dist/cjs/{mk-b209ac0d.js → mk-9f79812b.js} +14 -14
  139. package/dist/cjs/{nb-db13e666.js → nb-673fe3fd.js} +14 -14
  140. package/dist/cjs/{nl-fcd9e0c5.js → nl-4dc0504f.js} +14 -14
  141. package/dist/cjs/{observers-f5fa975b.js → observers-9912f013.js} +1 -1
  142. package/dist/cjs/{openCloseComponent-5d70fcd8.js → openCloseComponent-05cb01ff.js} +9 -4
  143. package/dist/cjs/{pl-87c83322.js → pl-d809a6c3.js} +14 -14
  144. package/dist/cjs/{pt-b0b5f472.js → pt-78eefbc7.js} +14 -14
  145. package/dist/cjs/{pt-br-03333e90.js → pt-br-55f1893a.js} +14 -14
  146. package/dist/cjs/public-notification.cjs.entry.js +3 -3
  147. package/dist/cjs/{resources-60c27547.js → resources-030a27ed.js} +1 -1
  148. package/dist/cjs/{resources-91409a5d.js → resources-10d29626.js} +1 -1
  149. package/dist/cjs/{resources-9f2b33ee.js → resources-24b6eee0.js} +1 -1
  150. package/dist/cjs/{resources-4da89742.js → resources-2b51cf4c.js} +1 -1
  151. package/dist/cjs/{resources-e1258e8a.js → resources-8f4e8ba8.js} +1 -1
  152. package/dist/cjs/{resources-77713c2e.js → resources-993f6faf.js} +1 -1
  153. package/dist/cjs/{resources-2901b608.js → resources-a2e2a544.js} +1 -1
  154. package/dist/cjs/{resources-c913200c.js → resources-acf9a7ea.js} +1 -1
  155. package/dist/cjs/{resources-8233a151.js → resources-caca31c2.js} +1 -1
  156. package/dist/cjs/{ro-c3661b73.js → ro-f0cff196.js} +14 -14
  157. package/dist/cjs/{ru-8dd3fd58.js → ru-5e9b37f9.js} +14 -14
  158. package/dist/cjs/{shared-list-render-c0adb192.js → shared-list-render-9bbcb306.js} +6 -6
  159. package/dist/cjs/{sk-151d9acf.js → sk-322cd349.js} +14 -14
  160. package/dist/cjs/{sl-9b45a152.js → sl-fd948e50.js} +14 -14
  161. package/dist/cjs/solution-configuration.cjs.entry.js +1 -1
  162. package/dist/cjs/solution-contents_3.cjs.entry.js +1 -1
  163. package/dist/cjs/solutions-components.cjs.js +3 -3
  164. package/dist/cjs/{sortableComponent-58679f07.js → sortableComponent-70bf79de.js} +2 -2
  165. package/dist/cjs/{sr-186bf15c.js → sr-f0058b24.js} +14 -14
  166. package/dist/cjs/{sv-a93fee0c.js → sv-8a8378bf.js} +14 -14
  167. package/dist/cjs/{t9n-1d032c30.js → t9n-62d807df.js} +2 -2
  168. package/dist/cjs/{th-41680352.js → th-f219fad6.js} +14 -14
  169. package/dist/cjs/{time-5e450ec8.js → time-24d40c60.js} +2 -2
  170. package/dist/cjs/{tr-0bd886d6.js → tr-03109641.js} +14 -14
  171. package/dist/cjs/{uk-4fade133.js → uk-dde46112.js} +14 -14
  172. package/dist/cjs/{utils-cd14113f.js → utils-09191c93.js} +2 -2
  173. package/dist/cjs/{utils-acfeed9d.js → utils-651e6663.js} +3 -3
  174. package/dist/cjs/{utils-ae9bdd59.js → utils-852fe124.js} +3 -3
  175. package/dist/cjs/{utils-bae432a9.js → utils-a194dc3d.js} +5 -2
  176. package/dist/cjs/{vi-1c9fe343.js → vi-60ed6e30.js} +14 -14
  177. package/dist/cjs/{zh-cn-28fa1fe1.js → zh-cn-a2f6f51d.js} +14 -14
  178. package/dist/cjs/{zh-hk-5abf8eb5.js → zh-hk-e14e2fc0.js} +14 -14
  179. package/dist/cjs/{zh-tw-07500357.js → zh-tw-7ea0d7e4.js} +14 -14
  180. package/dist/collection/collection-manifest.json +1 -0
  181. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +22 -28
  182. package/dist/collection/components/info-card/info-card.css +14 -0
  183. package/dist/collection/components/info-card/info-card.js +3 -2
  184. package/dist/collection/components/layer-table/layer-table.js +60 -9
  185. package/dist/collection/components/map-card/map-card.js +10 -6
  186. package/dist/collection/components/map-legend/map-legend.css +3 -0
  187. package/dist/collection/components/map-legend/map-legend.js +166 -0
  188. package/dist/collection/components/map-legend/test/map-legend.e2e.js +14 -0
  189. package/dist/collection/components/map-legend/test/map-legend.spec.js +22 -0
  190. package/dist/collection/components/map-tools/map-tools.js +25 -4
  191. package/dist/collection/demos/crowdsource-manager.html +26 -1
  192. package/dist/collection/utils/downloadUtils.js +250 -230
  193. package/dist/collection/utils/downloadUtils.ts +347 -326
  194. package/dist/collection/utils/interfaces.ts +11 -0
  195. package/dist/collection/utils/test/downloadUtils.spec.js +503 -57
  196. package/dist/collection/utils/test/downloadUtils.spec.tsx +587 -61
  197. package/dist/components/ExpandToggle.js +2 -2
  198. package/dist/components/FloatingArrow.js +1 -1
  199. package/dist/components/Heading.js +1 -1
  200. package/dist/components/action-bar.js +23 -15
  201. package/dist/components/action-group.js +9 -10
  202. package/dist/components/action-menu.js +1 -1
  203. package/dist/components/action.js +1 -1
  204. package/dist/components/alert.js +2 -2
  205. package/dist/components/array.js +1 -1
  206. package/dist/components/avatar.js +2 -2
  207. package/dist/components/button.js +1 -1
  208. package/dist/components/calcite-accordion-item.js +2 -7
  209. package/dist/components/calcite-accordion.js +0 -5
  210. package/dist/components/calcite-action-pad.js +10 -5
  211. package/dist/components/calcite-block-section.js +2 -2
  212. package/dist/components/calcite-block.js +2 -2
  213. package/dist/components/calcite-card.js +1 -1
  214. package/dist/components/calcite-chip-group.js +0 -5
  215. package/dist/components/calcite-combobox-item-group.js +1 -1
  216. package/dist/components/calcite-fab.js +1 -1
  217. package/dist/components/calcite-flow-item.js +1 -1
  218. package/dist/components/calcite-flow.js +1 -1
  219. package/dist/components/calcite-inline-editable.js +1 -1
  220. package/dist/components/calcite-input-date-picker.js +1 -1
  221. package/dist/components/calcite-input-time-picker.js +1 -1
  222. package/dist/components/calcite-input-time-zone.js +1 -1
  223. package/dist/components/calcite-list-item-group.js +1 -1
  224. package/dist/components/calcite-menu-item.js +1 -1
  225. package/dist/components/calcite-modal.js +2 -2
  226. package/dist/components/calcite-navigation-logo.js +1 -1
  227. package/dist/components/calcite-navigation-user.js +1 -1
  228. package/dist/components/calcite-navigation.js +2 -2
  229. package/dist/components/calcite-pagination.js +1 -1
  230. package/dist/components/calcite-radio-button-group.js +0 -5
  231. package/dist/components/calcite-radio-button.js +1 -1
  232. package/dist/components/calcite-rating.js +1 -1
  233. package/dist/components/calcite-shell-center-row.js +1 -1
  234. package/dist/components/calcite-sortable-list.js +1 -1
  235. package/dist/components/calcite-split-button.js +1 -1
  236. package/dist/components/calcite-stepper.js +0 -5
  237. package/dist/components/calcite-text-area.js +5 -5
  238. package/dist/components/calcite-tile-select.js +1 -1
  239. package/dist/components/calcite-tip-manager.js +1 -1
  240. package/dist/components/calcite-tip.js +1 -1
  241. package/dist/components/card-manager2.js +5 -5
  242. package/dist/components/checkbox.js +0 -5
  243. package/dist/components/chip.js +2 -2
  244. package/dist/components/color-picker-hex-input.js +2 -2
  245. package/dist/components/color-picker-swatch.js +1 -1
  246. package/dist/components/combobox-item.js +1 -1
  247. package/dist/components/combobox.js +1 -6
  248. package/dist/components/conditionalSlot.js +1 -1
  249. package/dist/components/crowdsource-manager.js +29 -18
  250. package/dist/components/date-picker-month-header.js +1 -1
  251. package/dist/components/date-picker.js +2 -2
  252. package/dist/components/date.js +1 -1
  253. package/dist/components/dom.js +2 -2
  254. package/dist/components/downloadUtils.js +247 -260
  255. package/dist/components/dropdown-group.js +1 -1
  256. package/dist/components/dropdown-item.js +1 -1
  257. package/dist/components/dropdown.js +1 -1
  258. package/dist/components/esri-loader.js +15 -15
  259. package/dist/components/filter.js +1 -1
  260. package/dist/components/filter2.js +1 -1
  261. package/dist/components/floating-ui.js +1 -1
  262. package/dist/components/focusTrapComponent.js +4 -4
  263. package/dist/components/form.js +1 -1
  264. package/dist/components/graph.js +3 -8
  265. package/dist/components/guid.js +1 -1
  266. package/dist/components/handle.js +1 -1
  267. package/dist/components/icon.js +2 -2
  268. package/dist/components/index.js +2 -2
  269. package/dist/components/info-card2.js +9 -8
  270. package/dist/components/input-message.js +1 -1
  271. package/dist/components/input-number.js +1 -1
  272. package/dist/components/input-text.js +1 -1
  273. package/dist/components/input.js +1 -1
  274. package/dist/components/interactive.js +2 -2
  275. package/dist/components/key.js +1 -1
  276. package/dist/components/label.js +2 -2
  277. package/dist/components/label2.js +1 -1
  278. package/dist/components/layer-table2.js +40 -9
  279. package/dist/components/layout-manager.js +129 -1
  280. package/dist/components/list-item2.js +1 -1
  281. package/dist/components/list.js +2 -2
  282. package/dist/components/loadable.js +1 -1
  283. package/dist/components/locale2.js +2 -2
  284. package/dist/components/map-card2.js +46 -37
  285. package/dist/components/map-legend.d.ts +11 -0
  286. package/dist/components/map-legend.js +11 -0
  287. package/dist/components/map-legend2.js +118 -0
  288. package/dist/components/map-tools2.js +47 -22
  289. package/dist/components/math.js +1 -1
  290. package/dist/components/menu.js +1 -1
  291. package/dist/components/notice.js +1 -1
  292. package/dist/components/observers.js +1 -1
  293. package/dist/components/openCloseComponent.js +9 -4
  294. package/dist/components/panel.js +2 -2
  295. package/dist/components/pick-list-item.js +1 -1
  296. package/dist/components/popover.js +3 -8
  297. package/dist/components/resources.js +1 -1
  298. package/dist/components/resources2.js +1 -1
  299. package/dist/components/resources3.js +1 -1
  300. package/dist/components/resources4.js +1 -1
  301. package/dist/components/scrim.js +1 -1
  302. package/dist/components/segmented-control-item.js +1 -1
  303. package/dist/components/select.js +1 -1
  304. package/dist/components/shared-list-render.js +2 -2
  305. package/dist/components/shell-panel.js +9 -6
  306. package/dist/components/shell.js +2 -2
  307. package/dist/components/slider.js +1 -1
  308. package/dist/components/sortableComponent.js +1 -1
  309. package/dist/components/stack.js +2 -2
  310. package/dist/components/t9n.js +1 -1
  311. package/dist/components/tab-title.js +1 -6
  312. package/dist/components/tabs.js +1 -1
  313. package/dist/components/tile.js +1 -1
  314. package/dist/components/time-picker.js +2 -2
  315. package/dist/components/tooltip.js +3 -3
  316. package/dist/components/tree-item.js +2 -2
  317. package/dist/components/tree.js +1 -1
  318. package/dist/components/utils.js +5 -2
  319. package/dist/components/utils2.js +2 -2
  320. package/dist/components/utils3.js +2 -2
  321. package/dist/components/value-list-item.js +1 -1
  322. package/dist/components/value-list.js +2 -2
  323. package/dist/esm/{ExpandToggle-3d10bd1e.js → ExpandToggle-3bfcb842.js} +5 -5
  324. package/dist/esm/{FloatingArrow-29db6da6.js → FloatingArrow-cf140d6b.js} +1 -1
  325. package/dist/esm/{Heading-cb79e5b2.js → Heading-140d10ff.js} +1 -1
  326. package/dist/esm/{app-globals-5cbac6b0.js → app-globals-fffe4e27.js} +3 -3
  327. package/dist/esm/{ar-4b751ba8.js → ar-45abeb31.js} +14 -14
  328. package/dist/esm/{array-751a2b87.js → array-d95985ad.js} +1 -1
  329. package/dist/esm/{basemap-gallery_4.entry.js → basemap-gallery_5.entry.js} +115 -7
  330. package/dist/esm/{bg-5d8bf5ea.js → bg-af759e86.js} +14 -14
  331. package/dist/esm/{bs-ff510e71.js → bs-20d012de.js} +14 -14
  332. package/dist/esm/buffer-tools_4.entry.js +15 -15
  333. package/dist/esm/{ca-b9a5e51a.js → ca-1498df65.js} +14 -14
  334. package/dist/esm/calcite-accordion-item.entry.js +7 -12
  335. package/dist/esm/calcite-accordion.entry.js +1 -6
  336. package/dist/esm/calcite-action-bar.entry.js +31 -26
  337. package/dist/esm/calcite-action-group_2.entry.js +18 -20
  338. package/dist/esm/calcite-action-pad.entry.js +20 -16
  339. package/dist/esm/calcite-action_2.entry.js +17 -22
  340. package/dist/esm/calcite-alert.entry.js +11 -11
  341. package/dist/esm/calcite-avatar.entry.js +6 -6
  342. package/dist/esm/calcite-block-section.entry.js +9 -9
  343. package/dist/esm/calcite-block.entry.js +12 -12
  344. package/dist/esm/calcite-button.entry.js +12 -12
  345. package/dist/esm/calcite-card.entry.js +9 -9
  346. package/dist/esm/calcite-checkbox.entry.js +8 -13
  347. package/dist/esm/calcite-chip-group.entry.js +6 -11
  348. package/dist/esm/calcite-chip.entry.js +11 -11
  349. package/dist/esm/calcite-color-picker-hex-input_2.entry.js +8 -8
  350. package/dist/esm/calcite-color-picker.entry.js +12 -12
  351. package/dist/esm/calcite-combobox-item-group.entry.js +5 -5
  352. package/dist/esm/calcite-combobox_6.entry.js +21 -26
  353. package/dist/esm/calcite-date-picker-day_3.entry.js +10 -10
  354. package/dist/esm/calcite-date-picker.entry.js +11 -11
  355. package/dist/esm/calcite-fab.entry.js +6 -6
  356. package/dist/esm/calcite-filter_5.entry.js +16 -16
  357. package/dist/esm/calcite-flow-item.entry.js +11 -11
  358. package/dist/esm/calcite-flow.entry.js +3 -3
  359. package/dist/esm/calcite-graph.entry.js +5 -10
  360. package/dist/esm/calcite-icon.entry.js +6 -6
  361. package/dist/esm/calcite-inline-editable.entry.js +11 -11
  362. package/dist/esm/calcite-input-date-picker.entry.js +17 -17
  363. package/dist/esm/calcite-input-number_2.entry.js +13 -13
  364. package/dist/esm/{calcite-input-time-picker-13448515.js → calcite-input-time-picker-227e60c3.js} +60 -60
  365. package/dist/esm/calcite-input-time-picker.entry.js +14 -14
  366. package/dist/esm/calcite-input-time-zone.entry.js +12 -12
  367. package/dist/esm/calcite-input_2.entry.js +12 -12
  368. package/dist/esm/calcite-label.entry.js +5 -5
  369. package/dist/esm/calcite-link.entry.js +5 -5
  370. package/dist/esm/calcite-list-item-group.entry.js +3 -3
  371. package/dist/esm/calcite-loader.entry.js +1 -1
  372. package/dist/esm/calcite-menu-item.entry.js +9 -9
  373. package/dist/esm/calcite-menu.entry.js +9 -9
  374. package/dist/esm/calcite-modal.entry.js +12 -12
  375. package/dist/esm/calcite-navigation-logo.entry.js +2 -2
  376. package/dist/esm/calcite-navigation-user.entry.js +2 -2
  377. package/dist/esm/calcite-navigation.entry.js +5 -5
  378. package/dist/esm/calcite-notice.entry.js +11 -11
  379. package/dist/esm/calcite-option_2.entry.js +9 -9
  380. package/dist/esm/calcite-pagination.entry.js +9 -9
  381. package/dist/esm/calcite-panel_2.entry.js +14 -14
  382. package/dist/esm/calcite-pick-list-group.entry.js +7 -7
  383. package/dist/esm/calcite-pick-list-item.entry.js +12 -12
  384. package/dist/esm/calcite-pick-list.entry.js +10 -10
  385. package/dist/esm/calcite-radio-button-group.entry.js +2 -7
  386. package/dist/esm/calcite-radio-button.entry.js +9 -9
  387. package/dist/esm/calcite-rating.entry.js +12 -12
  388. package/dist/esm/calcite-scrim.entry.js +8 -8
  389. package/dist/esm/calcite-segmented-control_2.entry.js +8 -8
  390. package/dist/esm/calcite-shell-center-row.entry.js +6 -6
  391. package/dist/esm/calcite-shell-panel_14.entry.js +29 -32
  392. package/dist/esm/calcite-sortable-list.entry.js +7 -7
  393. package/dist/esm/calcite-split-button.entry.js +3 -3
  394. package/dist/esm/calcite-stepper-item.entry.js +8 -8
  395. package/dist/esm/calcite-stepper.entry.js +3 -8
  396. package/dist/esm/calcite-switch.entry.js +8 -8
  397. package/dist/esm/calcite-text-area.entry.js +15 -15
  398. package/dist/esm/calcite-tile-select-group.entry.js +1 -1
  399. package/dist/esm/calcite-tile-select.entry.js +4 -4
  400. package/dist/esm/calcite-tile.entry.js +7 -7
  401. package/dist/esm/calcite-time-picker.entry.js +10 -10
  402. package/dist/esm/calcite-tip-manager.entry.js +9 -9
  403. package/dist/esm/calcite-tip.entry.js +10 -10
  404. package/dist/esm/calcite-tooltip.entry.js +9 -9
  405. package/dist/esm/calcite-tree_3.entry.js +8 -8
  406. package/dist/esm/{card-manager_4.entry.js → card-manager_3.entry.js} +48 -93
  407. package/dist/esm/{conditionalSlot-27a0fce0.js → conditionalSlot-55a14abd.js} +2 -2
  408. package/dist/esm/crowdsource-manager.entry.js +23 -11
  409. package/dist/esm/{cs-f21a0628.js → cs-3bd67855.js} +14 -14
  410. package/dist/esm/{da-dc48fc4c.js → da-7a76e131.js} +14 -14
  411. package/dist/esm/{date-0ed48e97.js → date-bd5b879c.js} +2 -2
  412. package/dist/esm/{de-59290071.js → de-0808a43e.js} +14 -14
  413. package/dist/esm/{de-at-cd6e6ab7.js → de-at-0b6874cb.js} +14 -14
  414. package/dist/esm/{de-ch-27c44e34.js → de-ch-c9d429dd.js} +14 -14
  415. package/dist/esm/{dom-843e3afd.js → dom-37f2dec9.js} +3 -3
  416. package/dist/esm/{downloadUtils-63661805.js → downloadUtils-64c27514.js} +249 -262
  417. package/dist/esm/edit-card_2.entry.js +6 -5
  418. package/dist/esm/{el-f09fdec6.js → el-66001281.js} +14 -14
  419. package/dist/esm/{en-au-90087aa5.js → en-au-6424fec0.js} +14 -14
  420. package/dist/esm/{en-ca-10751695.js → en-ca-f5f1659d.js} +14 -14
  421. package/dist/esm/{en-gb-0f8547bd.js → en-gb-796beadd.js} +14 -14
  422. package/dist/esm/{es-b0997cf1.js → es-cd139926.js} +14 -14
  423. package/dist/esm/{es-mx-226f5028.js → es-mx-854dc3e4.js} +14 -14
  424. package/dist/esm/{et-dc96c453.js → et-2aa6782d.js} +14 -14
  425. package/dist/esm/{fi-0941704d.js → fi-965727bd.js} +14 -14
  426. package/dist/esm/{filter-1cac3edf.js → filter-60517290.js} +1 -1
  427. package/dist/esm/{floating-ui-d28d0fd6.js → floating-ui-7cde67cf.js} +2 -2
  428. package/dist/esm/{focusTrapComponent-ff3a9f28.js → focusTrapComponent-ec344399.js} +4 -4
  429. package/dist/esm/{form-11c6a015.js → form-04d47b0b.js} +2 -2
  430. package/dist/esm/{fr-8da3458d.js → fr-c1884e89.js} +14 -14
  431. package/dist/esm/{fr-ch-739ceddf.js → fr-ch-1fd8dd3a.js} +14 -14
  432. package/dist/esm/{guid-2bbb8cd1.js → guid-70cda807.js} +1 -1
  433. package/dist/esm/{he-8b662dfa.js → he-0d7b78b4.js} +14 -14
  434. package/dist/esm/{hi-10996f89.js → hi-0376c82d.js} +14 -14
  435. package/dist/esm/{hr-42c2024d.js → hr-28a64903.js} +14 -14
  436. package/dist/esm/{hu-4768b3ff.js → hu-44a02ff7.js} +14 -14
  437. package/dist/esm/{id-24a08170.js → id-034fc4a5.js} +14 -14
  438. package/dist/esm/{index.es-3a3aa8e3.js → index.es-b7bc2db1.js} +3 -3
  439. package/dist/esm/{interactive-eaf4be29.js → interactive-bd6837bc.js} +2 -2
  440. package/dist/esm/{it-ad09649f.js → it-56e52026.js} +14 -14
  441. package/dist/esm/{it-ch-b05fc10d.js → it-ch-a4a0e136.js} +14 -14
  442. package/dist/esm/{ja-ab839b73.js → ja-f2365272.js} +14 -14
  443. package/dist/esm/{key-7a525416.js → key-02fa06ae.js} +1 -1
  444. package/dist/esm/{ko-c778539e.js → ko-e7650b4c.js} +14 -14
  445. package/dist/esm/{label-6a1caf64.js → label-b6dfb4d5.js} +3 -3
  446. package/dist/{components/layout-manager2.js → esm/layout-manager.entry.js} +11 -58
  447. package/dist/esm/{loadModules-2ecd1e44.js → loadModules-f5f910b6.js} +1 -1
  448. package/dist/esm/{loadable-6bca96ad.js → loadable-47170cb6.js} +1 -1
  449. package/dist/esm/loader.js +3 -3
  450. package/dist/esm/{locale-d8561d54.js → locale-146251f7.js} +5 -5
  451. package/dist/esm/{locale-aa3de591.js → locale-efad8f83.js} +15 -15
  452. package/dist/esm/{lt-447d9aa9.js → lt-1577a952.js} +14 -14
  453. package/dist/esm/{lv-4d715e11.js → lv-9ef7e4f6.js} +14 -14
  454. package/dist/esm/map-select-tools_3.entry.js +3 -3
  455. package/dist/esm/{math-5f92f517.js → math-0d6817c3.js} +1 -1
  456. package/dist/esm/{mk-b3d7401a.js → mk-94264e08.js} +14 -14
  457. package/dist/esm/{nb-2b4a8366.js → nb-fa24d5b2.js} +14 -14
  458. package/dist/esm/{nl-c0db1da2.js → nl-33f10900.js} +14 -14
  459. package/dist/esm/{observers-9d66685a.js → observers-95c50046.js} +1 -1
  460. package/dist/esm/{openCloseComponent-2b5c6bed.js → openCloseComponent-10efeff3.js} +9 -4
  461. package/dist/esm/{pl-0d322bb4.js → pl-9ed16565.js} +14 -14
  462. package/dist/esm/{pt-5997598c.js → pt-52731ddf.js} +14 -14
  463. package/dist/esm/{pt-br-6b77e7db.js → pt-br-8de51ff4.js} +14 -14
  464. package/dist/esm/public-notification.entry.js +3 -3
  465. package/dist/esm/{resources-5bce3953.js → resources-0151b0c0.js} +1 -1
  466. package/dist/esm/{resources-94c47e64.js → resources-1e6d76df.js} +1 -1
  467. package/dist/esm/{resources-40d8e06f.js → resources-24255b05.js} +1 -1
  468. package/dist/esm/{resources-dca3d475.js → resources-2e5aa562.js} +1 -1
  469. package/dist/esm/{resources-c253772f.js → resources-2edfa0af.js} +1 -1
  470. package/dist/esm/{resources-a9b2d33c.js → resources-41416583.js} +1 -1
  471. package/dist/esm/{resources-d6a4d343.js → resources-b392187d.js} +1 -1
  472. package/dist/esm/{resources-58d30a0f.js → resources-c676d5de.js} +1 -1
  473. package/dist/esm/{resources-c65f5654.js → resources-efae7280.js} +1 -1
  474. package/dist/esm/{ro-ac3724e0.js → ro-99f009ad.js} +14 -14
  475. package/dist/esm/{ru-4e75151f.js → ru-592ffaf0.js} +14 -14
  476. package/dist/esm/{shared-list-render-abd19c8d.js → shared-list-render-4f0f6af8.js} +6 -6
  477. package/dist/esm/{sk-bbfa22a3.js → sk-44f7bd19.js} +14 -14
  478. package/dist/esm/{sl-867cecfc.js → sl-08cad9bd.js} +14 -14
  479. package/dist/esm/solution-configuration.entry.js +1 -1
  480. package/dist/esm/solution-contents_3.entry.js +1 -1
  481. package/dist/esm/solutions-components.js +3 -3
  482. package/dist/esm/{sortableComponent-db502e97.js → sortableComponent-8a84709a.js} +2 -2
  483. package/dist/esm/{sr-198b5c00.js → sr-84f261fc.js} +14 -14
  484. package/dist/esm/{sv-02d64370.js → sv-d0d7bc1e.js} +14 -14
  485. package/dist/esm/{t9n-76168237.js → t9n-5f748619.js} +2 -2
  486. package/dist/esm/{th-1616e303.js → th-a5149d44.js} +14 -14
  487. package/dist/esm/{time-6721a4c2.js → time-fa1151aa.js} +2 -2
  488. package/dist/esm/{tr-f4619f64.js → tr-feb0cad4.js} +14 -14
  489. package/dist/esm/{uk-df7df34a.js → uk-c9ba62a0.js} +14 -14
  490. package/dist/esm/{utils-f54411df.js → utils-0a5c1a07.js} +3 -3
  491. package/dist/esm/{utils-ccfd94a7.js → utils-667cc396.js} +3 -3
  492. package/dist/esm/{utils-18db6b1d.js → utils-7af1efcc.js} +2 -2
  493. package/dist/esm/{utils-2c91c963.js → utils-7cf107ec.js} +5 -2
  494. package/dist/esm/{vi-176ca9f7.js → vi-788dcb99.js} +14 -14
  495. package/dist/esm/{zh-cn-e13d83d1.js → zh-cn-3ccfb820.js} +14 -14
  496. package/dist/esm/{zh-hk-d97365d8.js → zh-hk-b29b61e8.js} +14 -14
  497. package/dist/esm/{zh-tw-a2b6f0b7.js → zh-tw-2bdbc6eb.js} +14 -14
  498. package/dist/solutions-components/assets/icon/applySelectionToExistingView16.json +1 -0
  499. package/dist/solutions-components/assets/icon/applySelectionToExistingView24.json +1 -0
  500. package/dist/solutions-components/assets/icon/applySelectionToExistingView32.json +1 -0
  501. package/dist/solutions-components/assets/icon/channels16.json +1 -0
  502. package/dist/solutions-components/assets/icon/channels24.json +1 -0
  503. package/dist/solutions-components/assets/icon/channels32.json +1 -0
  504. package/dist/solutions-components/assets/icon/chevronDownLeft16.json +1 -0
  505. package/dist/solutions-components/assets/icon/chevronDownLeft24.json +1 -0
  506. package/dist/solutions-components/assets/icon/chevronDownLeft32.json +1 -0
  507. package/dist/solutions-components/assets/icon/chevronDownRight16.json +1 -0
  508. package/dist/solutions-components/assets/icon/chevronDownRight24.json +1 -0
  509. package/dist/solutions-components/assets/icon/chevronDownRight32.json +1 -0
  510. package/dist/solutions-components/assets/icon/chevronUpLeft16.json +1 -0
  511. package/dist/solutions-components/assets/icon/chevronUpLeft24.json +1 -0
  512. package/dist/solutions-components/assets/icon/chevronUpLeft32.json +1 -0
  513. package/dist/solutions-components/assets/icon/chevronUpRight16.json +1 -0
  514. package/dist/solutions-components/assets/icon/chevronUpRight24.json +1 -0
  515. package/dist/solutions-components/assets/icon/chevronUpRight32.json +1 -0
  516. package/dist/solutions-components/assets/icon/clearSelection16.json +1 -0
  517. package/dist/solutions-components/assets/icon/clearSelection24.json +1 -0
  518. package/dist/solutions-components/assets/icon/clearSelection32.json +1 -0
  519. package/dist/solutions-components/assets/icon/communityLinkChartLayout16.json +1 -0
  520. package/dist/solutions-components/assets/icon/communityLinkChartLayout24.json +1 -0
  521. package/dist/solutions-components/assets/icon/communityLinkChartLayout32.json +1 -0
  522. package/dist/solutions-components/assets/icon/dataCard16.json +1 -0
  523. package/dist/solutions-components/assets/icon/dataCard24.json +1 -0
  524. package/dist/solutions-components/assets/icon/dataCard32.json +1 -0
  525. package/dist/solutions-components/assets/icon/dateTime16.json +1 -0
  526. package/dist/solutions-components/assets/icon/dateTime24.json +1 -0
  527. package/dist/solutions-components/assets/icon/dateTime32.json +1 -0
  528. package/dist/solutions-components/assets/icon/expressionDefinedColor16.json +1 -0
  529. package/dist/solutions-components/assets/icon/expressionDefinedColor24.json +1 -0
  530. package/dist/solutions-components/assets/icon/expressionDefinedColor32.json +1 -0
  531. package/dist/solutions-components/assets/icon/forceDirectedLinkChartLayout16.json +1 -0
  532. package/dist/solutions-components/assets/icon/forceDirectedLinkChartLayout24.json +1 -0
  533. package/dist/solutions-components/assets/icon/forceDirectedLinkChartLayout32.json +1 -0
  534. package/dist/solutions-components/assets/icon/hierarchicalLinkChartLayout16.json +1 -0
  535. package/dist/solutions-components/assets/icon/hierarchicalLinkChartLayout24.json +1 -0
  536. package/dist/solutions-components/assets/icon/hierarchicalLinkChartLayout32.json +1 -0
  537. package/dist/solutions-components/assets/icon/knowledgeStudio16.json +1 -0
  538. package/dist/solutions-components/assets/icon/knowledgeStudio24.json +1 -0
  539. package/dist/solutions-components/assets/icon/knowledgeStudio32.json +1 -0
  540. package/dist/solutions-components/assets/icon/linkChartExpand16.json +1 -0
  541. package/dist/solutions-components/assets/icon/linkChartExpand24.json +1 -0
  542. package/dist/solutions-components/assets/icon/linkChartExpand32.json +1 -0
  543. package/dist/solutions-components/assets/icon/minusSquare16F.json +1 -0
  544. package/dist/solutions-components/assets/icon/minusSquare24F.json +1 -0
  545. package/dist/solutions-components/assets/icon/minusSquare32F.json +1 -0
  546. package/dist/solutions-components/assets/icon/newLinkChart16.json +1 -0
  547. package/dist/solutions-components/assets/icon/newLinkChart24.json +1 -0
  548. package/dist/solutions-components/assets/icon/newLinkChart32.json +1 -0
  549. package/dist/solutions-components/assets/icon/radialTreeLinkChartYayout16.json +1 -0
  550. package/dist/solutions-components/assets/icon/radialTreeLinkChartYayout24.json +1 -0
  551. package/dist/solutions-components/assets/icon/radialTreeLinkChartYayout32.json +1 -0
  552. package/dist/solutions-components/assets/icon/removeLinkchart16.json +1 -0
  553. package/dist/solutions-components/assets/icon/removeLinkchart24.json +1 -0
  554. package/dist/solutions-components/assets/icon/removeLinkchart32.json +1 -0
  555. package/dist/solutions-components/assets/icon/simpleLinkChartLayout16.json +1 -0
  556. package/dist/solutions-components/assets/icon/simpleLinkChartLayout24.json +1 -0
  557. package/dist/solutions-components/assets/icon/simpleLinkChartLayout32.json +1 -0
  558. package/dist/solutions-components/assets/icon/smartTreeLinkChartLayout16.json +1 -0
  559. package/dist/solutions-components/assets/icon/smartTreeLinkChartLayout24.json +1 -0
  560. package/dist/solutions-components/assets/icon/smartTreeLinkChartLayout32.json +1 -0
  561. package/dist/solutions-components/assets/icon/sortAscendingArrow16.json +1 -1
  562. package/dist/solutions-components/assets/icon/sortAscendingArrow24.json +1 -1
  563. package/dist/solutions-components/assets/icon/sortAscendingArrow32.json +1 -1
  564. package/dist/solutions-components/assets/icon/sortDescendingArrow16.json +1 -1
  565. package/dist/solutions-components/assets/icon/sortDescendingArrow24.json +1 -1
  566. package/dist/solutions-components/assets/icon/sortDescendingArrow32.json +1 -1
  567. package/dist/solutions-components/assets/icon/timeZone16.json +1 -0
  568. package/dist/solutions-components/assets/icon/timeZone24.json +1 -0
  569. package/dist/solutions-components/assets/icon/timeZone32.json +1 -0
  570. package/dist/solutions-components/assets/icon/updateProject16.json +1 -0
  571. package/dist/solutions-components/assets/icon/updateProject24.json +1 -0
  572. package/dist/solutions-components/assets/icon/updateProject32.json +1 -0
  573. package/dist/solutions-components/demos/crowdsource-manager.html +26 -1
  574. package/dist/solutions-components/{p-9fb16c72.entry.js → p-0109bef4.entry.js} +10 -10
  575. package/dist/solutions-components/{p-46d5970b.entry.js → p-01c83b8c.entry.js} +1 -1
  576. package/dist/solutions-components/{p-6de98c51.js → p-0266ca81.js} +1 -1
  577. package/dist/solutions-components/{p-8a758303.js → p-05b2bdf9.js} +3 -3
  578. package/dist/solutions-components/p-072155f9.js +12 -0
  579. package/dist/solutions-components/{p-e07b8a72.entry.js → p-082365d6.entry.js} +3 -3
  580. package/dist/solutions-components/{p-ea282908.js → p-0b8463d6.js} +1 -1
  581. package/dist/solutions-components/{p-cad5587c.entry.js → p-0c2e392e.entry.js} +6 -6
  582. package/dist/solutions-components/p-0dce2c3b.entry.js +6 -0
  583. package/dist/solutions-components/{p-c3f8b670.js → p-0ecd7346.js} +1 -1
  584. package/dist/solutions-components/{p-18f1772b.js → p-0ed14b4b.js} +1 -1
  585. package/dist/solutions-components/p-0f77e83c.entry.js +11 -0
  586. package/dist/solutions-components/{p-29d41c7e.js → p-0f85fa4b.js} +1 -1
  587. package/dist/solutions-components/{p-541697d0.js → p-0fa3d1aa.js} +2 -2
  588. package/dist/solutions-components/{p-a6900100.entry.js → p-10e1ebe4.entry.js} +3 -3
  589. package/dist/solutions-components/{p-7c33e500.entry.js → p-12f06497.entry.js} +1 -1
  590. package/dist/solutions-components/{p-f41105c8.js → p-138cf009.js} +1 -1
  591. package/dist/solutions-components/{p-2b96e551.entry.js → p-149b4d3c.entry.js} +3 -3
  592. package/dist/solutions-components/{p-022a9b7a.js → p-167eb73b.js} +1 -1
  593. package/dist/solutions-components/{p-32f9c709.js → p-168a7d63.js} +1 -1
  594. package/dist/solutions-components/{p-2b252afd.entry.js → p-17a29fa6.entry.js} +1 -1
  595. package/dist/solutions-components/p-18538cd9.entry.js +11 -0
  596. package/dist/solutions-components/p-1bcfca9b.entry.js +6 -0
  597. package/dist/solutions-components/{p-19fe7725.js → p-1cebde99.js} +1 -1
  598. package/dist/solutions-components/{p-b948ecd2.entry.js → p-1dbaff04.entry.js} +2 -2
  599. package/dist/solutions-components/{p-2656168f.entry.js → p-1e7a31c1.entry.js} +3 -3
  600. package/dist/solutions-components/{p-d554507d.js → p-1eda2d20.js} +1 -1
  601. package/dist/solutions-components/{p-ef48bd77.entry.js → p-1efcac52.entry.js} +3 -3
  602. package/dist/solutions-components/{p-c6d83122.entry.js → p-1fba74a5.entry.js} +3 -3
  603. package/dist/solutions-components/{p-3cbe5ef3.js → p-2154de6d.js} +1 -1
  604. package/dist/solutions-components/{p-1ea1dcac.js → p-22d06238.js} +1 -1
  605. package/dist/solutions-components/{p-1ede2e18.js → p-2592c0b8.js} +3 -3
  606. package/dist/solutions-components/{p-90bbf223.entry.js → p-261394d7.entry.js} +1 -1
  607. package/dist/solutions-components/{p-754e2df2.js → p-27e0f599.js} +1 -1
  608. package/dist/solutions-components/{p-6a820c4d.js → p-28b5a7cf.js} +1 -1
  609. package/dist/solutions-components/{p-804e4751.entry.js → p-29efbf76.entry.js} +3 -3
  610. package/dist/solutions-components/{p-421d5e7c.js → p-2bf63e2e.js} +1 -1
  611. package/dist/solutions-components/{p-d4c103a8.js → p-2e8a41da.js} +1 -1
  612. package/dist/solutions-components/{p-de59d2f5.js → p-31aaa60f.js} +1 -1
  613. package/dist/solutions-components/{p-a2748b38.entry.js → p-34ef43ce.entry.js} +1 -1
  614. package/dist/solutions-components/{p-97c47bbd.entry.js → p-35cb6eca.entry.js} +3 -3
  615. package/dist/solutions-components/{p-39ff5ee5.js → p-3766be72.js} +2 -2
  616. package/dist/solutions-components/{p-9e727488.js → p-38f906f2.js} +1 -1
  617. package/dist/solutions-components/{p-c5e294e4.js → p-3948a96c.js} +1 -1
  618. package/dist/solutions-components/{p-9bbc05ff.js → p-3a844a72.js} +1 -1
  619. package/dist/solutions-components/{p-825bac0e.js → p-3c15959e.js} +1 -1
  620. package/dist/solutions-components/{p-ffac6f88.entry.js → p-3ce89910.entry.js} +1 -1
  621. package/dist/solutions-components/{p-7920b5a2.entry.js → p-3cfaf52b.entry.js} +2 -2
  622. package/dist/solutions-components/{p-b9749e09.js → p-3d3e6e20.js} +1 -1
  623. package/dist/solutions-components/{p-844ee452.entry.js → p-410068d9.entry.js} +2 -2
  624. package/dist/solutions-components/{p-a775ba2f.entry.js → p-42f9ab43.entry.js} +3 -3
  625. package/dist/solutions-components/{p-2291b598.js → p-43ba7a04.js} +1 -1
  626. package/dist/solutions-components/{p-f28d69ac.entry.js → p-446ab7f8.entry.js} +3 -3
  627. package/dist/solutions-components/{p-4bc7b875.entry.js → p-452850b4.entry.js} +2 -2
  628. package/dist/solutions-components/{p-0fbc27fd.entry.js → p-456f5afe.entry.js} +2 -2
  629. package/dist/solutions-components/{p-b86b4512.entry.js → p-46e0ce0c.entry.js} +2 -2
  630. package/dist/solutions-components/p-470a9ec4.entry.js +6 -0
  631. package/dist/solutions-components/{p-d62784a4.js → p-476e5302.js} +1 -1
  632. package/dist/solutions-components/{p-7b90c18e.entry.js → p-476eb52c.entry.js} +1 -1
  633. package/dist/solutions-components/{p-5961c4e0.js → p-4a75b3dc.js} +1 -1
  634. package/dist/solutions-components/{p-42c7a5fa.entry.js → p-4d76eaf6.entry.js} +2 -2
  635. package/dist/solutions-components/{p-4e4b55b9.entry.js → p-4f9f97b2.entry.js} +3 -3
  636. package/dist/solutions-components/{p-67ce3c0c.entry.js → p-56f1d66b.entry.js} +3 -3
  637. package/dist/solutions-components/{p-5b9b1cbb.entry.js → p-58167087.entry.js} +3 -3
  638. package/dist/solutions-components/{p-ad72a379.entry.js → p-586f0e3d.entry.js} +3 -3
  639. package/dist/solutions-components/{p-6f2edf5b.js → p-588bc0c0.js} +1 -1
  640. package/dist/solutions-components/{p-a040efff.js → p-5958dad9.js} +1 -1
  641. package/dist/solutions-components/{p-4d17943f.js → p-5c9fa0e7.js} +1 -1
  642. package/dist/solutions-components/{p-b4157e6a.js → p-5ceef49b.js} +1 -1
  643. package/dist/solutions-components/{p-c9858d8f.entry.js → p-5d62566c.entry.js} +2 -2
  644. package/dist/solutions-components/{p-5f5c371e.js → p-5e08d4de.js} +1 -1
  645. package/dist/solutions-components/{p-b684bbc7.entry.js → p-5eaaf6ea.entry.js} +1 -1
  646. package/dist/solutions-components/{p-10248e04.js → p-60c15592.js} +1 -1
  647. package/dist/solutions-components/{p-7601988d.entry.js → p-6295e168.entry.js} +2 -2
  648. package/dist/solutions-components/{p-4f0c3fc1.js → p-635bbbd4.js} +1 -1
  649. package/dist/solutions-components/{p-aeebdb15.js → p-636f4631.js} +1 -1
  650. package/dist/solutions-components/{p-fb7e0054.js → p-643a0325.js} +1 -1
  651. package/dist/solutions-components/{p-606ca126.js → p-64e2c099.js} +1 -1
  652. package/dist/solutions-components/{p-ad4d6d02.entry.js → p-651459e2.entry.js} +4 -4
  653. package/dist/solutions-components/{p-b0c4138f.entry.js → p-667e7134.entry.js} +2 -2
  654. package/dist/solutions-components/{p-4b95d05e.entry.js → p-66b5211f.entry.js} +1 -1
  655. package/dist/solutions-components/{p-216801d5.js → p-688f6a0a.js} +1 -1
  656. package/dist/solutions-components/{p-3e139360.js → p-6be3c411.js} +1 -1
  657. package/dist/solutions-components/{p-6a524392.entry.js → p-6ce7b446.entry.js} +2 -2
  658. package/dist/solutions-components/{p-0e7914e6.entry.js → p-6ddc9567.entry.js} +3 -3
  659. package/dist/solutions-components/{p-7b9adfff.js → p-7060caf6.js} +1 -1
  660. package/dist/solutions-components/{p-bd3a3afe.js → p-7262469a.js} +1 -1
  661. package/dist/solutions-components/{p-3f0193e9.js → p-73220ff1.js} +1 -1
  662. package/dist/solutions-components/{p-31ff3452.entry.js → p-78a40191.entry.js} +2 -2
  663. package/dist/solutions-components/{p-82199b7b.entry.js → p-7a027758.entry.js} +1 -1
  664. package/dist/solutions-components/{p-a843af2a.js → p-7b2314ac.js} +1 -1
  665. package/dist/solutions-components/p-7bb12deb.js +11 -0
  666. package/dist/solutions-components/{p-56300653.js → p-7f271c31.js} +5 -5
  667. package/dist/solutions-components/p-7f9642d5.js +21 -0
  668. package/dist/solutions-components/{p-5c097e25.entry.js → p-80cb42e4.entry.js} +3 -3
  669. package/dist/solutions-components/{p-5383607a.js → p-80ea5869.js} +3 -3
  670. package/dist/solutions-components/{p-ab8f5c6b.entry.js → p-81814234.entry.js} +2 -2
  671. package/dist/solutions-components/{p-abda8ca2.entry.js → p-8544d557.entry.js} +2 -2
  672. package/dist/solutions-components/{p-680d193d.entry.js → p-864c190b.entry.js} +3 -3
  673. package/dist/solutions-components/p-869d4521.entry.js +6 -0
  674. package/dist/solutions-components/{p-d3a22725.js → p-872036a8.js} +1 -1
  675. package/dist/solutions-components/{p-22d580b0.entry.js → p-879d6377.entry.js} +3 -3
  676. package/dist/solutions-components/{p-4805ff13.js → p-87d66120.js} +1 -1
  677. package/dist/solutions-components/{p-9cb94ea0.js → p-8927339d.js} +1 -1
  678. package/dist/solutions-components/{p-7aa949a3.entry.js → p-89504313.entry.js} +2 -2
  679. package/dist/solutions-components/{p-cf43278c.entry.js → p-8af52074.entry.js} +3 -3
  680. package/dist/solutions-components/{p-3fc17d72.js → p-8b448a5b.js} +1 -1
  681. package/dist/solutions-components/{p-03fccde6.entry.js → p-8b74f5bb.entry.js} +3 -3
  682. package/dist/solutions-components/p-8b8a6c1f.entry.js +6 -0
  683. package/dist/solutions-components/{p-2ae17fa2.js → p-8c61431d.js} +1 -1
  684. package/dist/solutions-components/{p-634e1240.js → p-8d00a17e.js} +1 -1
  685. package/dist/solutions-components/{p-c07af9c2.entry.js → p-8f68f1d3.entry.js} +2 -2
  686. package/dist/solutions-components/{p-e6bee82f.js → p-8f8d2861.js} +1 -1
  687. package/dist/solutions-components/{p-108fbf59.entry.js → p-90cef98d.entry.js} +1 -1
  688. package/dist/solutions-components/{p-9603c3ff.entry.js → p-9370bb48.entry.js} +2 -2
  689. package/dist/solutions-components/{p-a777b18c.js → p-96239d0d.js} +2 -2
  690. package/dist/solutions-components/p-97a4001d.entry.js +6 -0
  691. package/dist/solutions-components/{p-215d3505.js → p-99402001.js} +1 -1
  692. package/dist/solutions-components/p-99891e57.js +11 -0
  693. package/dist/solutions-components/{p-15ef7894.js → p-9a35ef8e.js} +1 -1
  694. package/dist/solutions-components/{p-35123c90.js → p-9b76bf3d.js} +1 -1
  695. package/dist/solutions-components/{p-6b2f2b85.js → p-a16feeec.js} +4 -4
  696. package/dist/solutions-components/{p-e645edf2.entry.js → p-a1c6db13.entry.js} +1 -1
  697. package/dist/solutions-components/{p-75f26870.js → p-a26dc184.js} +13 -13
  698. package/dist/solutions-components/{p-0cc32f06.js → p-a287be8b.js} +1 -1
  699. package/dist/solutions-components/{p-052ff2c7.js → p-a46f1b45.js} +1 -1
  700. package/dist/solutions-components/{p-1f468797.js → p-ab072027.js} +1 -1
  701. package/dist/solutions-components/{p-31316d61.entry.js → p-ac0abf04.entry.js} +3 -3
  702. package/dist/solutions-components/{p-38ef0684.js → p-ad75b9bb.js} +2 -2
  703. package/dist/solutions-components/{p-a08bd8c1.entry.js → p-ae6a7b3b.entry.js} +1 -1
  704. package/dist/solutions-components/{p-05db4340.js → p-aea37c90.js} +1 -1
  705. package/dist/solutions-components/{p-164be8ef.entry.js → p-b25005cf.entry.js} +1 -1
  706. package/dist/solutions-components/{p-b2e6c578.js → p-b28b6d40.js} +1 -1
  707. package/dist/solutions-components/{p-639cca97.js → p-b28ff52c.js} +1 -1
  708. package/dist/solutions-components/{p-5e59219b.entry.js → p-b2a52acb.entry.js} +1 -1
  709. package/dist/solutions-components/{p-21f00df6.js → p-bde323ec.js} +1 -1
  710. package/dist/solutions-components/{p-a0edbb27.js → p-be146646.js} +1 -1
  711. package/dist/solutions-components/{p-a258f5e7.js → p-c1dcc1e7.js} +1 -1
  712. package/dist/solutions-components/p-c3ab7439.js +11 -0
  713. package/dist/solutions-components/{p-283e3a2d.js → p-c6e55b32.js} +1 -1
  714. package/dist/solutions-components/{p-e10a62f4.entry.js → p-c79c7978.entry.js} +3 -3
  715. package/dist/solutions-components/{p-647a4130.js → p-c9633864.js} +3 -3
  716. package/dist/solutions-components/{p-916f90ec.entry.js → p-c968f9aa.entry.js} +1 -1
  717. package/dist/solutions-components/{p-cf1af08f.entry.js → p-c9df539a.entry.js} +1 -1
  718. package/dist/solutions-components/{p-93074bd4.entry.js → p-ca3d7edd.entry.js} +2 -2
  719. package/dist/solutions-components/{p-2005280f.js → p-cacfa6ae.js} +2 -2
  720. package/dist/solutions-components/{p-27a1ac1f.entry.js → p-cc2393c3.entry.js} +3 -3
  721. package/dist/solutions-components/p-cd673260.js +6 -0
  722. package/dist/solutions-components/{p-761a033a.entry.js → p-cec47579.entry.js} +2 -2
  723. package/dist/solutions-components/{p-32ef065d.entry.js → p-ced11bea.entry.js} +2 -2
  724. package/dist/solutions-components/{p-ee066c67.js → p-cee23126.js} +5 -5
  725. package/dist/solutions-components/p-d2d3e4b5.js +11 -0
  726. package/dist/solutions-components/{p-0ece6df1.entry.js → p-d6f68a4e.entry.js} +2 -2
  727. package/dist/solutions-components/{p-326fa270.js → p-d864b7e3.js} +1 -1
  728. package/dist/solutions-components/{p-5adf37ea.entry.js → p-da6acb22.entry.js} +2 -2
  729. package/dist/solutions-components/{p-de58bd49.js → p-e0c011b8.js} +1 -1
  730. package/dist/solutions-components/{p-58ce5639.js → p-e0fb0920.js} +1 -1
  731. package/dist/solutions-components/{p-b1f84ae5.js → p-e2637fe6.js} +1 -1
  732. package/dist/solutions-components/{p-ef96894d.entry.js → p-e2eb4fd3.entry.js} +4 -4
  733. package/dist/solutions-components/{p-18869c0f.js → p-e3525c00.js} +1 -1
  734. package/dist/solutions-components/{p-1add4e39.entry.js → p-e3d72832.entry.js} +2 -2
  735. package/dist/solutions-components/{p-6431fd69.js → p-e4d2fcc5.js} +3 -3
  736. package/dist/solutions-components/{p-f055a840.js → p-e761b7cd.js} +1 -1
  737. package/dist/solutions-components/{p-4daae757.js → p-ea285144.js} +1 -1
  738. package/dist/solutions-components/p-ebbff02e.js +6 -0
  739. package/dist/solutions-components/{p-07bc4f07.entry.js → p-ec378ea0.entry.js} +3 -3
  740. package/dist/solutions-components/{p-12a4fa84.js → p-ec889511.js} +1 -1
  741. package/dist/solutions-components/{p-e02fcfa9.entry.js → p-f153f1c9.entry.js} +2 -2
  742. package/dist/solutions-components/{p-b49bdc72.entry.js → p-f596eabd.entry.js} +1 -1
  743. package/dist/solutions-components/{p-3aba40e8.js → p-f7b520ae.js} +2 -2
  744. package/dist/solutions-components/{p-4c43820f.entry.js → p-f815b5ef.entry.js} +1 -1
  745. package/dist/solutions-components/{p-955a956a.entry.js → p-fe96e0d9.entry.js} +4 -4
  746. package/dist/solutions-components/{p-b5d67495.entry.js → p-feff224c.entry.js} +2 -2
  747. package/dist/solutions-components/solutions-components.esm.js +1 -1
  748. package/dist/solutions-components/utils/downloadUtils.ts +347 -326
  749. package/dist/solutions-components/utils/interfaces.ts +11 -0
  750. package/dist/solutions-components/utils/test/downloadUtils.spec.tsx +587 -61
  751. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +11 -4
  752. package/dist/types/components/layer-table/layer-table.d.ts +14 -2
  753. package/dist/types/components/map-card/map-card.d.ts +2 -2
  754. package/dist/types/components/map-legend/map-legend.d.ts +64 -0
  755. package/dist/types/components/map-tools/map-tools.d.ts +13 -1
  756. package/dist/types/components.d.ts +40 -11
  757. package/dist/types/preact.d.ts +2 -0
  758. package/dist/types/utils/downloadUtils.d.ts +122 -15
  759. package/dist/types/utils/interfaces.d.ts +9 -0
  760. package/package.json +4 -10
  761. package/dist/solutions-components/p-2d70d3fd.js +0 -12
  762. package/dist/solutions-components/p-361f1fe1.js +0 -11
  763. package/dist/solutions-components/p-3bd99fc9.js +0 -11
  764. package/dist/solutions-components/p-418d0b60.entry.js +0 -6
  765. package/dist/solutions-components/p-525f1188.js +0 -11
  766. package/dist/solutions-components/p-55aefaa8.entry.js +0 -6
  767. package/dist/solutions-components/p-5b5a6ac8.entry.js +0 -6
  768. package/dist/solutions-components/p-91caf655.entry.js +0 -11
  769. package/dist/solutions-components/p-a0a2c53d.js +0 -21
  770. package/dist/solutions-components/p-a6c85bd7.entry.js +0 -6
  771. package/dist/solutions-components/p-b6578a32.js +0 -6
  772. package/dist/solutions-components/p-baccfd70.entry.js +0 -6
  773. package/dist/solutions-components/p-bba3fa4e.entry.js +0 -11
  774. package/dist/solutions-components/p-c1ee0d69.js +0 -11
  775. package/dist/solutions-components/p-d6322e4b.js +0 -6
@@ -15,9 +15,92 @@
15
15
  */
16
16
 
17
17
  import * as downloadUtils from "../downloadUtils";
18
+ import * as esriLoader from 'esri-loader';
18
19
 
19
20
  describe("downloadUtils", () => {
20
21
 
22
+ describe('removeDuplicateLabels', () => {
23
+
24
+ it('should remove duplicate labels', () => {
25
+ const labels = [
26
+ ['Label 1', 'Value 1'],
27
+ ['Label 2', 'Value 2'],
28
+ ['Label 1', 'Value 1']
29
+ ];
30
+ const result = downloadUtils.removeDuplicateLabels(labels);
31
+ expect(result).toEqual([
32
+ ['Label 1', 'Value 1'],
33
+ ['Label 2', 'Value 2']
34
+ ]);
35
+ });
36
+
37
+ });
38
+
39
+ describe("_cleanupLabel", () => {
40
+
41
+ it("handles <br> variants", () => {
42
+ const labelText = "<div style='text-align: left;'>{NAME}<br />{STREET}<br/>{CITY}, {STATE} {ZIP} <br></div>";
43
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
44
+
45
+ const result: string = downloadUtils._cleanupLabel(labelText);
46
+ expect(result).toEqual(expectedCleanedText);
47
+ });
48
+
49
+ it("handles <p>", () => {
50
+ const labelText = "<p>{NAME}</p><p>{STREET}</p><p>{CITY}, {STATE} {ZIP}</p>";
51
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
52
+
53
+ const result: string = downloadUtils._cleanupLabel(labelText);
54
+ expect(result).toEqual(expectedCleanedText);
55
+ });
56
+
57
+ it("handles popup's use of \xA0", () => {
58
+ const labelText =
59
+ "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>";
60
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
61
+
62
+ const result: string = downloadUtils._cleanupLabel(labelText);
63
+ expect(result).toEqual(expectedCleanedText);
64
+ });
65
+
66
+ it("removes newlines and blank lines, and trims each line", () => {
67
+ const labelText =
68
+ " \n\n {NAME} \n \n\n {STREET}\n{CITY}, {STATE} {ZIP}\n\n \n ";
69
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
70
+
71
+ const result: string = downloadUtils._cleanupLabel(labelText);
72
+ expect(result).toEqual(expectedCleanedText);
73
+ });
74
+
75
+ it("handles tabs", () => {
76
+ const labelText =
77
+ " \t\t {NAME} \n \n\n {STREET}\n{CITY}, {STATE} {ZIP}";
78
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
79
+
80
+ const result: string = downloadUtils._cleanupLabel(labelText);
81
+ expect(result).toEqual(expectedCleanedText);
82
+ });
83
+
84
+ it("removes extra HTML", () => {
85
+ const labelText =
86
+ "\n<div style='text-align: left;'><span style='font-weight:bold'>{NAME}</span><br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>\n";
87
+ const expectedCleanedText = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
88
+
89
+ const result: string = downloadUtils._cleanupLabel(labelText);
90
+ expect(result).toEqual(expectedCleanedText);
91
+ });
92
+
93
+ it("handles some special characters", () => {
94
+ const labelText =
95
+ "<div style='text-align: left;'>&lt;{NAME}&gt;<br />{STREET}<br/>{CITY},&nbsp;{STATE}&nbsp;{ZIP}<br></div>";
96
+ const expectedCleanedText = "<{NAME}>|{STREET}|{CITY}, {STATE} {ZIP}";
97
+
98
+ const result: string = downloadUtils._cleanupLabel(labelText);
99
+ expect(result).toEqual(expectedCleanedText);
100
+ });
101
+
102
+ });
103
+
21
104
  describe("_convertPopupFieldsToLabelSpec", () => {
22
105
 
23
106
  it("handles fieldname visibility", () => {
@@ -30,8 +113,10 @@ describe("downloadUtils", () => {
30
113
  const bypassFieldVisiblity = false;
31
114
  const expectedLabelSpec = "{A}|{B}|{D}";
32
115
 
33
- const labelSpec = downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
34
- expect(labelSpec).toEqual(expectedLabelSpec);
116
+ const result: downloadUtils.ILabelFormat =
117
+ downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
118
+ expect(result.type).toEqual("pattern");
119
+ expect(result.format).toEqual(expectedLabelSpec);
35
120
  });
36
121
 
37
122
  it("handles fieldname ignoring visibility", () => {
@@ -44,8 +129,10 @@ describe("downloadUtils", () => {
44
129
  const bypassFieldVisiblity = true;
45
130
  const expectedLabelSpec = "{A}|{B}|{C}|{D}";
46
131
 
47
- const labelSpec = downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
48
- expect(labelSpec).toEqual(expectedLabelSpec);
132
+ const result: downloadUtils.ILabelFormat =
133
+ downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
134
+ expect(result.type).toEqual("pattern");
135
+ expect(result.format).toEqual(expectedLabelSpec);
49
136
  });
50
137
 
51
138
  });
@@ -56,48 +143,81 @@ describe("downloadUtils", () => {
56
143
  const popupInfo = "<div style='text-align: left;'>{NAME}<br />{STREET}<br/>{CITY}, {STATE} {ZIP} <br></div>";
57
144
  const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
58
145
 
59
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
60
- expect(labelSpec).toEqual(expectedLabelSpec);
146
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
147
+ expect(result.type).toEqual("pattern");
148
+ expect(result.format).toEqual(expectedLabelSpec);
61
149
  });
62
150
 
63
151
  it("handles <p>", () => {
64
152
  const popupInfo = "<p>{NAME}</p><p>{STREET}</p><p>{CITY}, {STATE} {ZIP}</p>";
65
153
  const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
66
154
 
67
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
68
- expect(labelSpec).toEqual(expectedLabelSpec);
155
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
156
+ expect(result.type).toEqual("pattern");
157
+ expect(result.format).toEqual(expectedLabelSpec);
69
158
  });
70
159
 
71
160
  it("handles popup's use of \xA0", () => {
72
- const popupInfo = "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>";
161
+ const popupInfo =
162
+ "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>";
73
163
  const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
74
164
 
75
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
76
- expect(labelSpec).toEqual(expectedLabelSpec);
165
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
166
+ expect(result.type).toEqual("pattern");
167
+ expect(result.format).toEqual(expectedLabelSpec);
77
168
  });
78
169
 
79
170
  it("removes newlines and blank lines, and trims each line", () => {
80
- const popupInfo = " \n\n {NAME} \n \n\n {STREET}\n{CITY}, {STATE} {ZIP}\n\n \n ";
171
+ const popupInfo =
172
+ " \n\n {NAME} \n \n\n {STREET}\n{CITY}, {STATE} {ZIP}\n\n \n ";
81
173
  const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
82
174
 
83
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
84
- expect(labelSpec).toEqual(expectedLabelSpec);
175
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
176
+ expect(result.type).toEqual("pattern");
177
+ expect(result.format).toEqual(expectedLabelSpec);
85
178
  });
86
179
 
87
180
  it("removes extra HTML", () => {
88
- const popupInfo = "\n<div style='text-align: left;'><span style='font-weight:bold'>{NAME}</span><br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>\n";
181
+ const popupInfo =
182
+ "\n<div style='text-align: left;'><span style='font-weight:bold'>{NAME}</span><br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>\n";
89
183
  const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
90
184
 
91
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
92
- expect(labelSpec).toEqual(expectedLabelSpec);
185
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
186
+ expect(result.type).toEqual("pattern");
187
+ expect(result.format).toEqual(expectedLabelSpec);
93
188
  });
94
189
 
95
190
  it("handles some special characters", () => {
96
- const popupInfo = "<div style='text-align: left;'>&lt;{NAME}&gt;<br />{STREET}<br/>{CITY},&nbsp;{STATE}&nbsp;{ZIP}<br></div>";
191
+ const popupInfo =
192
+ "<div style='text-align: left;'>&lt;{NAME}&gt;<br />{STREET}<br/>{CITY},&nbsp;{STATE}&nbsp;{ZIP}<br></div>";
97
193
  const expectedLabelSpec = "<{NAME}>|{STREET}|{CITY}, {STATE} {ZIP}";
98
194
 
99
- const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
100
- expect(labelSpec).toEqual(expectedLabelSpec);
195
+ const result: downloadUtils.ILabelFormat = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
196
+ expect(result.type).toEqual("pattern");
197
+ expect(result.format).toEqual(expectedLabelSpec);
198
+ });
199
+
200
+ });
201
+
202
+ describe("_convertPopupArcadeToLabelSpec", () => {
203
+
204
+ it("handles <br> variants", async () => {
205
+ const Arcade = {
206
+ createArcadeExecutor: (): Promise<__esri.ArcadeExecutor> => {
207
+ const executor: __esri.ArcadeExecutor = {} as __esri.ArcadeExecutor;
208
+ return Promise.resolve(executor);
209
+ }
210
+ };
211
+ const loadModulesSpy = jest.spyOn(esriLoader, 'loadModules').mockResolvedValue([Arcade]);
212
+
213
+ const expressionInfo: __esri.ElementExpressionInfo = {
214
+ expression: 'var feat = $feature\nvar label = `\n\t${feat["name"]} ${feat["age"]} years <br>\n\tstarted: ${feat["start"]}\n`\n\nreturn { \n type : \'text\', \n text : label\n}'
215
+ } as any;
216
+
217
+ const result: downloadUtils.ILabelFormat = await downloadUtils._convertPopupArcadeToLabelSpec(expressionInfo);
218
+ expect(result.type).toEqual("executor");
219
+
220
+ loadModulesSpy.mockRestore();
101
221
  });
102
222
 
103
223
  });
@@ -131,294 +251,700 @@ describe("downloadUtils", () => {
131
251
  });
132
252
 
133
253
  describe("_getExpressionsFromLabel", () => {
254
+
134
255
  it("handles a label with ASCII expression names", () => {
135
256
  const labelSpec = "{expression/expr0}\n{OWNERNM1}\n{PSTLADDRESS}\n{PSTLCITY}, {PSTLSTATE} {PSTLZIP5}";
136
257
  const expectedExpressions = ["{expression/expr0}"];
137
258
  const expressions = downloadUtils._getExpressionsFromLabel(labelSpec);
138
259
  expect(expressions).toEqual(expectedExpressions);
139
260
  });
261
+
140
262
  });
141
263
 
142
- describe("_getFieldsFromLabel", () => {
264
+ describe("_getFieldExpressionsFromLabel", () => {
265
+
143
266
  it("handles a label with ASCII field names", () => {
144
267
  const labelSpec = "{expression/expr0}\n{OWNERNM1}\n{PSTLADDRESS}\n{PSTLCITY}, {PSTLSTATE} {PSTLZIP5}";
145
268
  const expectedFields = ["{OWNERNM1}", "{PSTLADDRESS}", "{PSTLCITY}", "{PSTLSTATE}", "{PSTLZIP5}"];
146
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
269
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
147
270
  expect(fields).toEqual(expectedFields);
148
271
  });
149
272
 
150
273
  it("handles a label with Arabic (ar) field name", () => {
151
274
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{بحث}|{time}";
152
275
  const expectedFields = ["{latitude}", "{longitude}", "{بحث}", "{time}"];
153
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
276
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
154
277
  expect(fields).toEqual(expectedFields);
155
278
  });
156
279
 
157
280
  it("handles a label with Bosnian (bs) field name", () => {
158
281
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{računa}|{time}";
159
282
  const expectedFields = ["{latitude}", "{longitude}", "{računa}", "{time}"];
160
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
283
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
161
284
  expect(fields).toEqual(expectedFields);
162
285
  });
163
286
 
164
287
  it("handles a label with Bulgarian (bg) field name", () => {
165
288
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Търсене}|{time}";
166
289
  const expectedFields = ["{latitude}", "{longitude}", "{Търсене}", "{time}"];
167
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
290
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
168
291
  expect(fields).toEqual(expectedFields);
169
292
  });
170
293
 
171
294
  it("handles a label with Catalan (ca) field name", () => {
172
295
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Descripció}|{time}";
173
296
  const expectedFields = ["{latitude}", "{longitude}", "{Descripció}", "{time}"];
174
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
297
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
175
298
  expect(fields).toEqual(expectedFields);
176
299
  });
177
300
 
178
301
  it("handles a label with Simplified Chinese (zh-cn) field name", () => {
179
302
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{帐户个人资料}|{time}";
180
303
  const expectedFields = ["{latitude}", "{longitude}", "{帐户个人资料}", "{time}"];
181
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
304
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
182
305
  expect(fields).toEqual(expectedFields);
183
306
  });
184
307
 
185
308
  it("handles a label with Traditional Chinese (Hong Kong) (zh-hk) field name", () => {
186
309
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{帳號設定檔}|{time}";
187
310
  const expectedFields = ["{latitude}", "{longitude}", "{帳號設定檔}", "{time}"];
188
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
311
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
189
312
  expect(fields).toEqual(expectedFields);
190
313
  });
191
314
 
192
315
  it("handles a label with Traditional Chinese (Taiwan) (zh-tw) field name", () => {
193
316
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{搜尋}|{time}";
194
317
  const expectedFields = ["{latitude}", "{longitude}", "{搜尋}", "{time}"];
195
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
318
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
196
319
  expect(fields).toEqual(expectedFields);
197
320
  });
198
321
 
199
322
  it("handles a label with Croatian (hr) field name", () => {
200
323
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Pretraživanje}|{time}";
201
324
  const expectedFields = ["{latitude}", "{longitude}", "{Pretraživanje}", "{time}"];
202
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
325
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
203
326
  expect(fields).toEqual(expectedFields);
204
327
  });
205
328
 
206
329
  it("handles a label with Czech (cs) field name", () => {
207
330
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Přihlásit}|{time}";
208
331
  const expectedFields = ["{latitude}", "{longitude}", "{Přihlásit}", "{time}"];
209
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
332
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
210
333
  expect(fields).toEqual(expectedFields);
211
334
  });
212
335
 
213
336
  it("handles a label with Danish (da) field name", () => {
214
337
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Vælg}|{time}";
215
338
  const expectedFields = ["{latitude}", "{longitude}", "{Vælg}", "{time}"];
216
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
339
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
217
340
  expect(fields).toEqual(expectedFields);
218
341
  });
219
342
 
220
343
  it("handles a label with Dutch (nl) field name", () => {
221
344
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{geïmplementeerd}|{time}";
222
345
  const expectedFields = ["{latitude}", "{longitude}", "{geïmplementeerd}", "{time}"];
223
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
346
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
224
347
  expect(fields).toEqual(expectedFields);
225
348
  });
226
349
 
227
350
  it("handles a label with Estonian (et) field name", () => {
228
351
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Valdkonnapõhised}|{time}";
229
352
  const expectedFields = ["{latitude}", "{longitude}", "{Valdkonnapõhised}", "{time}"];
230
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
353
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
231
354
  expect(fields).toEqual(expectedFields);
232
355
  });
233
356
 
234
357
  it("handles a label with Finnish (fi) field name", () => {
235
358
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Näytä}|{time}";
236
359
  const expectedFields = ["{latitude}", "{longitude}", "{Näytä}", "{time}"];
237
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
360
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
238
361
  expect(fields).toEqual(expectedFields);
239
362
  });
240
363
 
241
364
  it("handles a label with French (fr) field name", () => {
242
365
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{accès}|{time}";
243
366
  const expectedFields = ["{latitude}", "{longitude}", "{accès}", "{time}"];
244
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
367
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
245
368
  expect(fields).toEqual(expectedFields);
246
369
  });
247
370
 
248
371
  it("handles a label with German (de) field name", () => {
249
372
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Öffentliche}|{time}";
250
373
  const expectedFields = ["{latitude}", "{longitude}", "{Öffentliche}", "{time}"];
251
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
374
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
252
375
  expect(fields).toEqual(expectedFields);
253
376
  });
254
377
 
255
378
  it("handles a label with Greek (el) field name", () => {
256
379
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Αναζήτηση}|{time}";
257
380
  const expectedFields = ["{latitude}", "{longitude}", "{Αναζήτηση}", "{time}"];
258
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
381
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
259
382
  expect(fields).toEqual(expectedFields);
260
383
  });
261
384
 
262
385
  it("handles a label with Hebrew (he) field name", () => {
263
386
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{עוֹמֶק}|{time}";
264
387
  const expectedFields = ["{latitude}", "{longitude}", "{עוֹמֶק}", "{time}"];
265
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
388
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
266
389
  expect(fields).toEqual(expectedFields);
267
390
  });
268
391
 
269
392
  it("handles a label with Hungarian (hu) field name", () => {
270
393
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Nyelvváltás}|{time}";
271
394
  const expectedFields = ["{latitude}", "{longitude}", "{Nyelvváltás}", "{time}"];
272
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
395
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
273
396
  expect(fields).toEqual(expectedFields);
274
397
  });
275
398
 
276
399
  it("handles a label with Indonesian (id) field name", () => {
277
400
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Bahasa}|{time}";
278
401
  const expectedFields = ["{latitude}", "{longitude}", "{Bahasa}", "{time}"];
279
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
402
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
280
403
  expect(fields).toEqual(expectedFields);
281
404
  });
282
405
 
283
406
  it("handles a label with Italian (it) field name", () => {
284
407
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Elettricità}|{time}";
285
408
  const expectedFields = ["{latitude}", "{longitude}", "{Elettricità}", "{time}"];
286
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
409
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
287
410
  expect(fields).toEqual(expectedFields);
288
411
  });
289
412
 
290
413
  it("handles a label with Japanese (ja) field name", () => {
291
414
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{深さ}|{time}";
292
415
  const expectedFields = ["{latitude}", "{longitude}", "{深さ}", "{time}"];
293
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
416
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
294
417
  expect(fields).toEqual(expectedFields);
295
418
  });
296
419
 
297
420
  it("handles a label with Korean (ko) field name", () => {
298
421
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{계정 프로필}|{time}";
299
422
  const expectedFields = ["{latitude}", "{longitude}", "{계정 프로필}", "{time}"];
300
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
423
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
301
424
  expect(fields).toEqual(expectedFields);
302
425
  });
303
426
 
304
427
  it("handles a label with Latvian (lv) field name", () => {
305
428
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Meklēt}|{time}";
306
429
  const expectedFields = ["{latitude}", "{longitude}", "{Meklēt}", "{time}"];
307
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
430
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
308
431
  expect(fields).toEqual(expectedFields);
309
432
  });
310
433
 
311
434
  it("handles a label with Lithuanian (lt) field name", () => {
312
435
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{sričių}|{time}";
313
436
  const expectedFields = ["{latitude}", "{longitude}", "{sričių}", "{time}"];
314
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
437
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
315
438
  expect(fields).toEqual(expectedFields);
316
439
  });
317
440
 
318
441
  it("handles a label with Norwegian (nb) field name", () => {
319
442
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{språk}|{time}";
320
443
  const expectedFields = ["{latitude}", "{longitude}", "{språk}", "{time}"];
321
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
444
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
322
445
  expect(fields).toEqual(expectedFields);
323
446
  });
324
447
 
325
448
  it("handles a label with Polish (pl) field name", () => {
326
449
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Przełącz}|{time}";
327
450
  const expectedFields = ["{latitude}", "{longitude}", "{Przełącz}", "{time}"];
328
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
451
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
329
452
  expect(fields).toEqual(expectedFields);
330
453
  });
331
454
 
332
455
  it("handles a label with Portuguese (Brazil) (pt-br) field name", () => {
333
456
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Configurações}|{time}";
334
457
  const expectedFields = ["{latitude}", "{longitude}", "{Configurações}", "{time}"];
335
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
458
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
336
459
  expect(fields).toEqual(expectedFields);
337
460
  });
338
461
 
339
462
  it("handles a label with Portuguese (Portugal) (pt-pt) field name", () => {
340
463
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{sessão}|{time}";
341
464
  const expectedFields = ["{latitude}", "{longitude}", "{sessão}", "{time}"];
342
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
465
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
343
466
  expect(fields).toEqual(expectedFields);
344
467
  });
345
468
 
346
469
  it("handles a label with Romanian (ro) field name", () => {
347
470
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Copiați}|{time}";
348
471
  const expectedFields = ["{latitude}", "{longitude}", "{Copiați}", "{time}"];
349
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
472
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
350
473
  expect(fields).toEqual(expectedFields);
351
474
  });
352
475
 
353
476
  it("handles a label with Russian (ru) field name", () => {
354
477
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Вход}|{time}";
355
478
  const expectedFields = ["{latitude}", "{longitude}", "{Вход}", "{time}"];
356
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
479
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
357
480
  expect(fields).toEqual(expectedFields);
358
481
  });
359
482
 
360
483
  it("handles a label with Serbian (sr) field name", () => {
361
484
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{pregledač}|{time}";
362
485
  const expectedFields = ["{latitude}", "{longitude}", "{pregledač}", "{time}"];
363
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
486
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
364
487
  expect(fields).toEqual(expectedFields);
365
488
  });
366
489
 
367
490
  it("handles a label with Slovak (sk) field name", () => {
368
491
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Prihlásiť}|{time}";
369
492
  const expectedFields = ["{latitude}", "{longitude}", "{Prihlásiť}", "{time}"];
370
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
493
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
371
494
  expect(fields).toEqual(expectedFields);
372
495
  });
373
496
 
374
497
  it("handles a label with Slovenian (sl) field name", () => {
375
498
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{računa}|{time}";
376
499
  const expectedFields = ["{latitude}", "{longitude}", "{računa}", "{time}"];
377
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
500
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
378
501
  expect(fields).toEqual(expectedFields);
379
502
  });
380
503
 
381
504
  it("handles a label with Spanish (es) field name", () => {
382
505
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{través}|{time}";
383
506
  const expectedFields = ["{latitude}", "{longitude}", "{través}", "{time}"];
384
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
507
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
385
508
  expect(fields).toEqual(expectedFields);
386
509
  });
387
510
 
388
511
  it("handles a label with Swedish (sv) field name", () => {
389
512
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{språk}|{time}";
390
513
  const expectedFields = ["{latitude}", "{longitude}", "{språk}", "{time}"];
391
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
514
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
392
515
  expect(fields).toEqual(expectedFields);
393
516
  });
394
517
 
395
518
  it("handles a label with Thai (th) field name", () => {
396
519
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{โปรไฟล์บัญ}|{time}";
397
520
  const expectedFields = ["{latitude}", "{longitude}", "{โปรไฟล์บัญ}", "{time}"];
398
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
521
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
399
522
  expect(fields).toEqual(expectedFields);
400
523
  });
401
524
 
402
525
  it("handles a label with Turkish (tr) field name", () => {
403
526
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Değiştir}|{time}";
404
527
  const expectedFields = ["{latitude}", "{longitude}", "{Değiştir}", "{time}"];
405
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
528
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
406
529
  expect(fields).toEqual(expectedFields);
407
530
  });
408
531
 
409
532
  it("handles a label with Ukrainian (uk) field name", () => {
410
533
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Пошук}|{time}";
411
534
  const expectedFields = ["{latitude}", "{longitude}", "{Пошук}", "{time}"];
412
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
535
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
413
536
  expect(fields).toEqual(expectedFields);
414
537
  });
415
538
 
416
539
  it("handles a label with Vietnamese (vi) field name", () => {
417
540
  const labelSpec = "{latitude}|{expression/expr0}\n{longitude}|{Chuyển}|{time}";
418
541
  const expectedFields = ["{latitude}", "{longitude}", "{Chuyển}", "{time}"];
419
- const fields = downloadUtils._getFieldsFromLabel(labelSpec);
542
+ const fields = downloadUtils._getFieldExpressionsFromLabel(labelSpec);
420
543
  expect(fields).toEqual(expectedFields);
421
544
  });
545
+
546
+ });
547
+
548
+ describe('_getFieldNamesFromFieldExpressions', () => {
549
+
550
+ it("extracts field names from field name expressions", () => {
551
+ const expressions = ["{NAME}", "{STREET}", "{CITY}", "{STATE}", "{ZIP}"];
552
+ const names = ["NAME", "STREET", "CITY", "STATE", "ZIP"];
553
+ expect(downloadUtils._getFieldNamesFromFieldExpressions(expressions)).toEqual(names);
554
+ });
555
+
556
+ });
557
+
558
+ describe('_getLabelFormat', () => {
559
+
560
+ it('should prepare labels from visible popup fields', async () => {
561
+ const popupTemplate = {
562
+ title: '{name}',
563
+ content: [{
564
+ type: 'fields'
565
+ }],
566
+ fieldInfos: [{
567
+ fieldName: 'name',
568
+ visible: true
569
+ }, {
570
+ fieldName: 'age',
571
+ format: {
572
+ places: 0,
573
+ digitSeparator: true
574
+ },
575
+ visible: true
576
+ }, {
577
+ fieldName: 'start',
578
+ format: {
579
+ dateFormat: 'short-date'
580
+ },
581
+ visible: true
582
+ }]
583
+ };
584
+ const layer = {
585
+ popupEnabled: true,
586
+ popupTemplate
587
+ };
588
+ const formatUsingLayerPopup = true;
589
+
590
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
591
+ const result: downloadUtils.ILabelFormat =
592
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
593
+ expect(result.type).toEqual('pattern');
594
+ expect(result.format).toEqual('{name}|{age}|{start}');
595
+ });
596
+
597
+ it('should prepare labels from a partial set of visible popup fields', async () => {
598
+ const popupTemplate = {
599
+ title: '{name}',
600
+ content: [{
601
+ type: 'fields'
602
+ }],
603
+ fieldInfos: [{
604
+ fieldName: 'name',
605
+ visible: false
606
+ }, {
607
+ fieldName: 'age',
608
+ format: {
609
+ places: 0,
610
+ digitSeparator: true
611
+ },
612
+ visible: false
613
+ }, {
614
+ fieldName: 'start',
615
+ format: {
616
+ dateFormat: 'short-date'
617
+ },
618
+ visible: true
619
+ }]
620
+ };
621
+ const layer = {
622
+ popupEnabled: true,
623
+ popupTemplate
624
+ };
625
+ const formatUsingLayerPopup = true;
626
+
627
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
628
+ const result: downloadUtils.ILabelFormat =
629
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
630
+ expect(result.type).toEqual('pattern');
631
+ expect(result.format).toEqual('{start}');
632
+ });
633
+
634
+ it('should prepare labels from invisible popup fields, but title is present', async () => {
635
+ const popupTemplate = {
636
+ title: '{name}',
637
+ content: [{
638
+ type: 'fields'
639
+ }],
640
+ fieldInfos: [{
641
+ fieldName: 'name',
642
+ visible: false
643
+ }, {
644
+ fieldName: 'age',
645
+ format: {
646
+ places: 0,
647
+ digitSeparator: true
648
+ },
649
+ visible: false
650
+ }, {
651
+ fieldName: 'start',
652
+ format: {
653
+ dateFormat: 'short-date'
654
+ },
655
+ visible: false
656
+ }]
657
+ };
658
+ const layer = {
659
+ popupEnabled: true,
660
+ popupTemplate
661
+ };
662
+ const formatUsingLayerPopup = true;
663
+
664
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
665
+ const result: downloadUtils.ILabelFormat =
666
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
667
+ expect(result.type).toEqual('pattern');
668
+ expect(result.format).toEqual('{name}');
669
+ });
670
+
671
+ it('should prepare labels from invisible popup fields with no title present', async () => {
672
+ const popupTemplate = {
673
+ title: '',
674
+ content: [{
675
+ type: 'fields'
676
+ }],
677
+ fieldInfos: [{
678
+ fieldName: 'name',
679
+ visible: false
680
+ }, {
681
+ fieldName: 'age',
682
+ format: {
683
+ places: 0,
684
+ digitSeparator: true
685
+ },
686
+ visible: false
687
+ }, {
688
+ fieldName: 'start',
689
+ format: {
690
+ dateFormat: 'short-date'
691
+ },
692
+ visible: false
693
+ }]
694
+ };
695
+ const layer = {
696
+ popupEnabled: true,
697
+ popupTemplate
698
+ };
699
+ const formatUsingLayerPopup = true;
700
+
701
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
702
+ const result: downloadUtils.ILabelFormat =
703
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
704
+ expect(result.type).toEqual('pattern');
705
+ expect(result.format).toEqual('{name}|{age}|{start}');
706
+ });
707
+
708
+ it('should prepare labels from popup text', async () => {
709
+ const popupTemplate = {
710
+ title: '{name}',
711
+ content: [{
712
+ type: 'text',
713
+ text: '<p>{name} {age} years &nbsp;</p><p>started: {start}</p>'
714
+ }],
715
+ fieldInfos: [{
716
+ fieldName: 'name',
717
+ visible: true
718
+ }, {
719
+ fieldName: 'age',
720
+ format: {
721
+ places: 0,
722
+ digitSeparator: true
723
+ },
724
+ visible: true
725
+ }, {
726
+ fieldName: 'start',
727
+ format: {
728
+ dateFormat: 'short-date'
729
+ },
730
+ visible: true
731
+ }]
732
+ };
733
+ const layer = {
734
+ popupEnabled: true,
735
+ popupTemplate
736
+ };
737
+ const formatUsingLayerPopup = true;
738
+
739
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
740
+ const result: downloadUtils.ILabelFormat =
741
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
742
+ expect(result.type).toEqual('pattern');
743
+ expect(result.format).toEqual('{name} {age} years|started: {start}');
744
+ });
745
+
746
+ it('should prepare labels from popup Arcade', async () => {
747
+ const Arcade = {
748
+ createArcadeExecutor: (): Promise<__esri.ArcadeExecutor> => {
749
+ const executor: __esri.ArcadeExecutor = {} as __esri.ArcadeExecutor;
750
+ return Promise.resolve(executor);
751
+ }
752
+ };
753
+ const loadModulesSpy = jest.spyOn(esriLoader, 'loadModules').mockResolvedValue([Arcade]);
754
+
755
+ const popupTemplate = {
756
+ title: '{name}',
757
+ content: [{
758
+ type: 'expression',
759
+ expressionInfo: {
760
+ title: 'New expression',
761
+ expression: 'var feat = $feature\nvar label = `\n\t${feat["name"]} ${feat["age"]} years <br>\n\tstarted: ${feat["start"]}\n`\n\nreturn { \n type : \'text\', \n text : label\n}',
762
+ returnType: 'dictionary'
763
+ }
764
+ }],
765
+ fieldInfos: [{
766
+ fieldName: 'name',
767
+ visible: true
768
+ }, {
769
+ fieldName: 'age',
770
+ format: {
771
+ places: 0,
772
+ digitSeparator: true
773
+ },
774
+ visible: true
775
+ }, {
776
+ fieldName: 'start',
777
+ format: {
778
+ dateFormat: 'short-date'
779
+ },
780
+ visible: true
781
+ }]
782
+ };
783
+ const layer = {
784
+ popupEnabled: true,
785
+ popupTemplate
786
+ };
787
+ const formatUsingLayerPopup = true;
788
+
789
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
790
+ const result: downloadUtils.ILabelFormat =
791
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
792
+ expect(result.type).toEqual('executor');
793
+
794
+ loadModulesSpy.mockRestore();
795
+ });
796
+
797
+ it('should prepare labels without popup; formatUsingLayerPopup is true', async () => {
798
+ const layer = {
799
+ popupEnabled: false,
800
+ fields: [
801
+ {
802
+ name: 'name',
803
+ type: 'string'
804
+ },
805
+ {
806
+ name: 'age',
807
+ type: 'integer'
808
+ }
809
+ ]
810
+ } as __esri.FeatureLayer;
811
+ const formatUsingLayerPopup = true;
812
+
813
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
814
+ const result: downloadUtils.ILabelFormat =
815
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
816
+ expect(result.type).toEqual('unsupported');
817
+ expect(result.format).toBeUndefined();
818
+ });
819
+
820
+ it('should prepare labels without popup; formatUsingLayerPopup is false', async () => {
821
+ const layer = {
822
+ popupEnabled: false,
823
+ fields: [
824
+ {
825
+ name: 'name',
826
+ type: 'string'
827
+ },
828
+ {
829
+ name: 'age',
830
+ type: 'integer'
831
+ }
832
+ ]
833
+ } as __esri.FeatureLayer;
834
+ const formatUsingLayerPopup = false;
835
+
836
+ const attributeFormats: downloadUtils.IAttributeFormats = {};
837
+ const result: downloadUtils.ILabelFormat =
838
+ await downloadUtils._getLabelFormat(layer as any, formatUsingLayerPopup, attributeFormats);
839
+ expect(result.type).toEqual('unsupported');
840
+ expect(result.format).toBeUndefined();
841
+ });
842
+
843
+ });
844
+
845
+ describe('_getSelectionSetNames', () => {
846
+
847
+ it('should return selection set names for matching IDs', () => {
848
+ const exportInfos = {
849
+ 'layer1': {
850
+ selectionSetNames: ['Selection Set 1', 'Selection Set 2']
851
+ },
852
+ 'layer2': {
853
+ selectionSetNames: ['Selection Set 3']
854
+ }
855
+ };
856
+ const result = downloadUtils._getSelectionSetNames(exportInfos as any, /^layer/);
857
+ expect(result).toEqual(['Selection Set 1', 'Selection Set 2', 'Selection Set 3']);
858
+ });
859
+
860
+ it('should return an empty array if no matching IDs are found', () => {
861
+ const exportInfos = {
862
+ 'layer1': {
863
+ selectionSetNames: ['Selection Set 1', 'Selection Set 2']
864
+ },
865
+ 'layer2': {
866
+ selectionSetNames: ['Selection Set 3']
867
+ }
868
+ };
869
+ const result = downloadUtils._getSelectionSetNames(exportInfos as any, /^foo/);
870
+ expect(result).toEqual([]);
871
+ });
872
+
873
+ });
874
+
875
+ describe('_prepareAttributeValue', () => {
876
+
877
+ it('should format date attributes using the specified date format', () => {
878
+ const attributeValue = new Date('2022-01-01T00:00:00.000Z');
879
+ const attributeType = 'date';
880
+ const attributeDomain = null;
881
+ const attributeFormat = {
882
+ dateFormat: 'short-date'
883
+ };
884
+ const intl = {
885
+ formatDate: jest.fn().mockReturnValue('01/01/2022'),
886
+ convertDateFormatToIntlOptions: jest.fn().mockReturnValue({})
887
+ };
888
+ const result = downloadUtils._prepareAttributeValue(attributeValue, attributeType, attributeDomain, attributeFormat as any, intl);
889
+ expect(result).toEqual('01/01/2022');
890
+ expect(intl.formatDate).toHaveBeenCalledWith(attributeValue, {});
891
+ expect(intl.convertDateFormatToIntlOptions).toHaveBeenCalledWith('short-date');
892
+ });
893
+
894
+ it('should format number attributes using the specified number format', () => {
895
+ const attributeValue = 1234.5678;
896
+ const attributeType = 'double';
897
+ const attributeDomain = null;
898
+ const attributeFormat = {
899
+ places: 2,
900
+ digitSeparator: true
901
+ };
902
+ const intl = {
903
+ formatNumber: jest.fn().mockReturnValue('1,234.57'),
904
+ convertNumberFormatToIntlOptions: jest.fn().mockReturnValue({})
905
+ };
906
+ const result = downloadUtils._prepareAttributeValue(attributeValue, attributeType, attributeDomain, attributeFormat as any, intl);
907
+ expect(result).toEqual('1,234.57');
908
+ expect(intl.formatNumber).toHaveBeenCalledWith(attributeValue, {});
909
+ expect(intl.convertNumberFormatToIntlOptions).toHaveBeenCalledWith(attributeFormat);
910
+ });
911
+
912
+ it('should return the attribute value if no format is specified', () => {
913
+ const attributeValue = 'Value';
914
+ const attributeType = 'string';
915
+ const attributeDomain = null;
916
+ const attributeFormat = null;
917
+ const intl = {};
918
+ const result = downloadUtils._prepareAttributeValue(attributeValue, attributeType, attributeDomain, attributeFormat, intl);
919
+ expect(result).toEqual('Value');
920
+ });
921
+
922
+ it('should return the domain name for coded-value domain fields', () => {
923
+ const attributeValue = '1';
924
+ const attributeType = 'string';
925
+ const attributeDomain = {
926
+ type: 'coded-value',
927
+ name: 'Domain',
928
+ codedValues: [
929
+ {
930
+ name: 'Value 1',
931
+ code: '1'
932
+ },
933
+ {
934
+ name: 'Value 2',
935
+ code: '2'
936
+ }
937
+ ],
938
+ getName: function (code: string) {
939
+ return this.codedValues.find((codedValue: any) => codedValue.code === code)?.name;
940
+ }
941
+ } as __esri.CodedValueDomain;
942
+ const attributeFormat = null;
943
+ const intl = {};
944
+ const result = downloadUtils._prepareAttributeValue(attributeValue, attributeType, attributeDomain as any, attributeFormat, intl);
945
+ expect(result).toEqual('Value 1');
946
+ });
947
+
422
948
  });
423
949
 
424
950
  });