@esri/solutions-components 0.6.12 → 0.6.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/dist/assets/t9n/layer-table/resources.json +4 -3
  2. package/dist/assets/t9n/layer-table/resources_en.json +4 -3
  3. package/dist/assets/t9n/map-layer-picker/resources.json +4 -0
  4. package/dist/assets/t9n/map-layer-picker/resources_en.json +4 -0
  5. package/dist/cjs/basemap-gallery_6.cjs.entry.js +20 -5
  6. package/dist/cjs/buffer-tools_4.cjs.entry.js +1 -1
  7. package/dist/cjs/calcite-chip_3.cjs.entry.js +803 -0
  8. package/dist/cjs/calcite-combobox_6.cjs.entry.js +76 -28
  9. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +2 -1
  10. package/dist/cjs/card-manager_3.cjs.entry.js +169 -79
  11. package/dist/cjs/clean-url-d5326abb.js +573 -0
  12. package/dist/cjs/crowdsource-manager.cjs.entry.js +22 -7
  13. package/dist/cjs/{downloadUtils-43f5be48.js → downloadUtils-34a515ad.js} +297 -52
  14. package/dist/cjs/edit-card_2.cjs.entry.js +8 -3
  15. package/dist/cjs/{index.es-8da43c21.js → index.es-0ba11065.js} +3 -2
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/map-select-tools_3.cjs.entry.js +10 -7
  18. package/dist/cjs/{mapViewUtils-a4dd36ec.js → mapViewUtils-a2884698.js} +39 -55
  19. package/dist/cjs/public-notification.cjs.entry.js +7 -6
  20. package/dist/cjs/{publicNotificationStore-b69862af.js → publicNotificationStore-610bd880.js} +0 -4
  21. package/dist/cjs/solution-configuration.cjs.entry.js +44 -43
  22. package/dist/cjs/solution-contents_3.cjs.entry.js +2 -1
  23. package/dist/cjs/{solution-store-3cd104d8.js → solution-store-c443e657.js} +7 -572
  24. package/dist/cjs/solutions-components.cjs.js +1 -1
  25. package/dist/collection/components/basemap-gallery/basemap-gallery.js +23 -1
  26. package/dist/collection/components/card-manager/card-manager.css +0 -5
  27. package/dist/collection/components/card-manager/card-manager.js +3 -3
  28. package/dist/collection/components/crowdsource-manager/crowdsource-manager.css +2 -2
  29. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +210 -6
  30. package/dist/collection/components/edit-card/edit-card.css +8 -0
  31. package/dist/collection/components/edit-card/edit-card.js +19 -0
  32. package/dist/collection/components/info-card/info-card.css +14 -14
  33. package/dist/collection/components/info-card/info-card.js +1 -1
  34. package/dist/collection/components/layer-table/layer-table.css +12 -0
  35. package/dist/collection/components/layer-table/layer-table.js +215 -69
  36. package/dist/collection/components/map-card/map-card.js +115 -5
  37. package/dist/collection/components/map-layer-picker/map-layer-picker.css +4 -0
  38. package/dist/collection/components/map-layer-picker/map-layer-picker.js +107 -27
  39. package/dist/collection/components/map-picker/map-picker.css +5 -1
  40. package/dist/collection/components/map-picker/map-picker.js +3 -3
  41. package/dist/collection/components/map-tools/map-tools.js +104 -1
  42. package/dist/collection/components/pdf-download/pdf-download.js +34 -6
  43. package/dist/collection/components/public-notification/public-notification.js +3 -3
  44. package/dist/collection/utils/downloadUtils.js +208 -82
  45. package/dist/collection/utils/downloadUtils.ts +257 -85
  46. package/dist/collection/utils/interfaces.ts +12 -1
  47. package/dist/collection/utils/mapViewUtils.js +38 -52
  48. package/dist/collection/utils/mapViewUtils.ts +41 -57
  49. package/dist/collection/utils/publicNotificationStore.js +0 -4
  50. package/dist/collection/utils/publicNotificationStore.ts +0 -4
  51. package/dist/collection/utils/test/downloadUtils.spec.js +163 -134
  52. package/dist/collection/utils/test/downloadUtils.spec.tsx +2 -0
  53. package/dist/components/basemap-gallery2.js +2 -0
  54. package/dist/components/calcite-modal.js +1 -409
  55. package/dist/components/card-manager2.js +4 -4
  56. package/dist/components/clean-url.js +567 -0
  57. package/dist/components/crowdsource-manager.js +42 -17
  58. package/dist/components/downloadUtils.js +295 -50
  59. package/dist/components/edit-card2.js +6 -1
  60. package/dist/components/info-card2.js +2 -2
  61. package/dist/components/layer-table2.js +194 -102
  62. package/dist/components/map-card2.js +17 -5
  63. package/dist/components/map-layer-picker2.js +114 -52
  64. package/dist/components/map-picker2.js +4 -4
  65. package/dist/components/map-select-tools2.js +55 -43
  66. package/dist/components/map-tools2.js +20 -1
  67. package/dist/components/mapViewUtils.js +39 -53
  68. package/dist/components/modal.js +416 -0
  69. package/dist/components/pdf-download2.js +6 -4
  70. package/dist/components/public-notification.js +4 -4
  71. package/dist/components/publicNotificationStore.js +0 -4
  72. package/dist/components/refine-selection2.js +61 -49
  73. package/dist/components/solution-configuration.js +25 -24
  74. package/dist/components/solution-store.js +2 -562
  75. package/dist/esm/{ExpandToggle-86761b28.js → ExpandToggle-e614e3e4.js} +1 -1
  76. package/dist/esm/{ar-4a5375c6.js → ar-2f678abc.js} +8 -8
  77. package/dist/esm/basemap-gallery_6.entry.js +20 -5
  78. package/dist/esm/{bg-b25e4b7a.js → bg-e514c4d7.js} +8 -8
  79. package/dist/esm/{bs-2485dfed.js → bs-81584b09.js} +8 -8
  80. package/dist/esm/buffer-tools_4.entry.js +5 -5
  81. package/dist/esm/{ca-bba36d26.js → ca-e8c40e21.js} +8 -8
  82. package/dist/esm/calcite-accordion-item.entry.js +1 -1
  83. package/dist/esm/calcite-action-bar_3.entry.js +5 -5
  84. package/dist/esm/calcite-action-group_2.entry.js +3 -3
  85. package/dist/esm/calcite-action-pad.entry.js +4 -4
  86. package/dist/esm/calcite-action_2.entry.js +5 -5
  87. package/dist/esm/calcite-alert.entry.js +3 -3
  88. package/dist/esm/calcite-avatar.entry.js +1 -1
  89. package/dist/esm/calcite-block-section.entry.js +3 -3
  90. package/dist/esm/calcite-block.entry.js +3 -3
  91. package/dist/esm/calcite-button.entry.js +5 -5
  92. package/dist/esm/calcite-card.entry.js +3 -3
  93. package/dist/esm/calcite-checkbox.entry.js +3 -3
  94. package/dist/esm/calcite-chip-group.entry.js +1 -1
  95. package/dist/esm/calcite-chip_3.entry.js +797 -0
  96. package/dist/esm/calcite-color-picker-hex-input_2.entry.js +1 -1
  97. package/dist/esm/calcite-color-picker.entry.js +3 -3
  98. package/dist/esm/calcite-combobox-item-group.entry.js +2 -2
  99. package/dist/esm/calcite-combobox_6.entry.js +83 -35
  100. package/dist/esm/calcite-date-picker-day_3.entry.js +3 -3
  101. package/dist/esm/calcite-date-picker.entry.js +5 -5
  102. package/dist/esm/calcite-fab.entry.js +1 -1
  103. package/dist/esm/calcite-filter_3.entry.js +3 -3
  104. package/dist/esm/calcite-flow-item.entry.js +3 -3
  105. package/dist/esm/calcite-icon.entry.js +1 -1
  106. package/dist/esm/calcite-inline-editable.entry.js +4 -4
  107. package/dist/esm/calcite-input-date-picker.entry.js +9 -9
  108. package/dist/esm/calcite-input-number_2.entry.js +5 -5
  109. package/dist/esm/{calcite-input-time-picker-7da2e80a.js → calcite-input-time-picker-fe6e499a.js} +55 -55
  110. package/dist/esm/calcite-input-time-picker.entry.js +8 -8
  111. package/dist/esm/calcite-input-time-zone.entry.js +5 -5
  112. package/dist/esm/calcite-input_2.entry.js +5 -5
  113. package/dist/esm/calcite-label.entry.js +2 -2
  114. package/dist/esm/calcite-link.entry.js +1 -1
  115. package/dist/esm/calcite-menu-item.entry.js +3 -3
  116. package/dist/esm/calcite-menu.entry.js +3 -3
  117. package/dist/esm/calcite-modal.entry.js +4 -4
  118. package/dist/esm/calcite-navigation.entry.js +1 -1
  119. package/dist/esm/calcite-option_2.entry.js +3 -3
  120. package/dist/esm/calcite-pagination.entry.js +3 -3
  121. package/dist/esm/calcite-panel_2.entry.js +3 -3
  122. package/dist/esm/calcite-pick-list-group.entry.js +1 -1
  123. package/dist/esm/calcite-pick-list-item.entry.js +3 -3
  124. package/dist/esm/calcite-pick-list.entry.js +2 -2
  125. package/dist/esm/calcite-radio-button.entry.js +3 -3
  126. package/dist/esm/calcite-rating.entry.js +5 -5
  127. package/dist/esm/calcite-scrim.entry.js +3 -3
  128. package/dist/esm/calcite-segmented-control_2.entry.js +3 -3
  129. package/dist/esm/calcite-shell-center-row.entry.js +1 -1
  130. package/dist/esm/calcite-shell-panel_14.entry.js +7 -6
  131. package/dist/esm/calcite-sortable-list.entry.js +2 -2
  132. package/dist/esm/calcite-stepper-item.entry.js +2 -2
  133. package/dist/esm/calcite-stepper.entry.js +1 -1
  134. package/dist/esm/calcite-switch.entry.js +3 -3
  135. package/dist/esm/calcite-text-area.entry.js +5 -5
  136. package/dist/esm/calcite-tile.entry.js +1 -1
  137. package/dist/esm/calcite-time-picker.entry.js +4 -4
  138. package/dist/esm/calcite-tip-manager.entry.js +3 -3
  139. package/dist/esm/calcite-tip.entry.js +3 -3
  140. package/dist/esm/calcite-tree_3.entry.js +1 -1
  141. package/dist/esm/card-manager_3.entry.js +169 -79
  142. package/dist/esm/clean-url-bce022e6.js +567 -0
  143. package/dist/esm/crowdsource-manager.entry.js +22 -7
  144. package/dist/esm/{cs-1052c5ac.js → cs-af5f115e.js} +8 -8
  145. package/dist/esm/{da-b7ed9204.js → da-06d9e22c.js} +8 -8
  146. package/dist/esm/{date-bd5b879c.js → date-641ae749.js} +1 -1
  147. package/dist/esm/{de-at-a993e5ae.js → de-at-f55a700a.js} +8 -8
  148. package/dist/esm/{de-ch-acff745d.js → de-ch-7307675f.js} +8 -8
  149. package/dist/esm/{de-bb68e752.js → de-dc98363f.js} +8 -8
  150. package/dist/esm/{dom-37f2dec9.js → dom-2b326ec3.js} +1 -1
  151. package/dist/esm/{downloadUtils-42156cd8.js → downloadUtils-ac67a786.js} +297 -52
  152. package/dist/esm/edit-card_2.entry.js +8 -3
  153. package/dist/esm/{el-9de96ff0.js → el-91c64808.js} +8 -8
  154. package/dist/esm/{en-au-f68b6bde.js → en-au-df08cc25.js} +8 -8
  155. package/dist/esm/{en-ca-5360517e.js → en-ca-175f7c0f.js} +8 -8
  156. package/dist/esm/{en-gb-de0b3125.js → en-gb-90a08c7f.js} +8 -8
  157. package/dist/esm/{es-5ecbba77.js → es-5cb54b05.js} +8 -8
  158. package/dist/esm/{es-mx-aa126462.js → es-mx-3a0cb804.js} +8 -8
  159. package/dist/esm/{et-7113eeb8.js → et-eceac6dc.js} +8 -8
  160. package/dist/esm/{fi-ffa60f15.js → fi-26e1c14f.js} +8 -8
  161. package/dist/esm/{floating-ui-7cde67cf.js → floating-ui-9f8e4ed4.js} +1 -1
  162. package/dist/esm/{focusTrapComponent-ec344399.js → focusTrapComponent-ad2c3a31.js} +1 -1
  163. package/dist/esm/{form-24e6ef1d.js → form-0871d2c6.js} +1 -1
  164. package/dist/esm/{fr-681c5bf6.js → fr-12a5b0f7.js} +8 -8
  165. package/dist/esm/{fr-ch-9af1f8b1.js → fr-ch-e3406887.js} +8 -8
  166. package/dist/esm/{he-5188f277.js → he-61eba811.js} +8 -8
  167. package/dist/esm/{hi-6a31e3a4.js → hi-a50282b5.js} +8 -8
  168. package/dist/esm/{hr-0598e59d.js → hr-da8bffaf.js} +8 -8
  169. package/dist/esm/{hu-13cb9f41.js → hu-dab932f1.js} +8 -8
  170. package/dist/esm/{id-7f342499.js → id-de468947.js} +8 -8
  171. package/dist/esm/{index.es-f47c4153.js → index.es-f553598f.js} +3 -2
  172. package/dist/esm/{it-57d790f2.js → it-375d9936.js} +8 -8
  173. package/dist/esm/{it-ch-081af760.js → it-ch-7e663d63.js} +8 -8
  174. package/dist/esm/{ja-3affb68e.js → ja-36dbe39d.js} +8 -8
  175. package/dist/esm/{ko-736632aa.js → ko-858bc871.js} +8 -8
  176. package/dist/esm/{label-b6dfb4d5.js → label-b8caf984.js} +1 -1
  177. package/dist/esm/loader.js +1 -1
  178. package/dist/esm/{locale-146251f7.js → locale-00000ab4.js} +1 -1
  179. package/dist/esm/{lt-e7d9b1c3.js → lt-d6dfa7e4.js} +8 -8
  180. package/dist/esm/{lv-4d1a507e.js → lv-facd25c5.js} +8 -8
  181. package/dist/esm/map-select-tools_3.entry.js +10 -7
  182. package/dist/esm/{mapViewUtils-00a04d52.js → mapViewUtils-8141d8c1.js} +39 -53
  183. package/dist/esm/{mk-f960312d.js → mk-5ed05b6a.js} +8 -8
  184. package/dist/esm/{nb-4556b5e9.js → nb-936fc687.js} +8 -8
  185. package/dist/esm/{nl-8e281c01.js → nl-a923d626.js} +8 -8
  186. package/dist/esm/{pl-1460fd5a.js → pl-b1426275.js} +8 -8
  187. package/dist/esm/{pt-660332b6.js → pt-1ac2453f.js} +8 -8
  188. package/dist/esm/{pt-br-dba48f49.js → pt-br-7194cc5f.js} +8 -8
  189. package/dist/esm/public-notification.entry.js +7 -6
  190. package/dist/esm/{publicNotificationStore-90a6a274.js → publicNotificationStore-dcf39a55.js} +0 -4
  191. package/dist/esm/{ro-ac18f292.js → ro-518aaed1.js} +8 -8
  192. package/dist/esm/{ru-b914f6b7.js → ru-762127a3.js} +8 -8
  193. package/dist/esm/{shared-list-render-cc889757.js → shared-list-render-ec232615.js} +1 -1
  194. package/dist/esm/{sk-1be12963.js → sk-f367b7ba.js} +8 -8
  195. package/dist/esm/{sl-5d47e4e4.js → sl-052fd4d2.js} +8 -8
  196. package/dist/esm/solution-configuration.entry.js +25 -24
  197. package/dist/esm/solution-contents_3.entry.js +2 -1
  198. package/dist/esm/{solution-store-cf902566.js → solution-store-b29d50f7.js} +2 -562
  199. package/dist/esm/solutions-components.js +1 -1
  200. package/dist/esm/{sortableComponent-8a84709a.js → sortableComponent-ebd6bb72.js} +1 -1
  201. package/dist/esm/{sr-3281c92d.js → sr-4dc0fdb9.js} +8 -8
  202. package/dist/esm/{sv-e5169404.js → sv-bdc87a4d.js} +8 -8
  203. package/dist/esm/{t9n-d9c203e4.js → t9n-9791aa0c.js} +1 -1
  204. package/dist/esm/{th-937796b8.js → th-d9df674c.js} +8 -8
  205. package/dist/esm/{time-fa1151aa.js → time-73378c4a.js} +1 -1
  206. package/dist/esm/{tr-6d3b100b.js → tr-61e134eb.js} +8 -8
  207. package/dist/esm/{uk-a6edcacf.js → uk-ea3d8da7.js} +8 -8
  208. package/dist/esm/{utils-667cc396.js → utils-593fafd7.js} +1 -1
  209. package/dist/esm/{utils-24a35b5a.js → utils-bd52db7d.js} +2 -2
  210. package/dist/esm/{vi-bf4c179c.js → vi-ade1c25b.js} +8 -8
  211. package/dist/esm/{zh-cn-de1858cb.js → zh-cn-b8756118.js} +8 -8
  212. package/dist/esm/{zh-hk-12fa404f.js → zh-hk-d18c05d9.js} +8 -8
  213. package/dist/esm/{zh-tw-5c4220e5.js → zh-tw-9c98ff7c.js} +8 -8
  214. package/dist/solutions-components/{p-3b891cc4.entry.js → p-01fea8d5.entry.js} +1 -1
  215. package/dist/solutions-components/{p-65022e7f.entry.js → p-02ff64f4.entry.js} +1 -1
  216. package/dist/solutions-components/p-062254a6.entry.js +6 -0
  217. package/dist/solutions-components/{p-bff158ff.js → p-062d2f9a.js} +1 -1
  218. package/dist/solutions-components/{p-f4e5b7e5.entry.js → p-084bced1.entry.js} +1 -1
  219. package/dist/solutions-components/{p-c261335b.entry.js → p-088e4cfc.entry.js} +1 -1
  220. package/dist/solutions-components/p-08b52ed8.entry.js +6 -0
  221. package/dist/solutions-components/{p-96239d0d.js → p-08e35485.js} +1 -1
  222. package/dist/solutions-components/{p-3d3772fb.js → p-0d14d33a.js} +1 -1
  223. package/dist/solutions-components/{p-7f271c31.js → p-11550b3c.js} +3 -3
  224. package/dist/solutions-components/{p-ad19f9b0.entry.js → p-120c4098.entry.js} +1 -1
  225. package/dist/solutions-components/{p-45419d93.entry.js → p-12bcd474.entry.js} +1 -1
  226. package/dist/solutions-components/{p-bd82849c.entry.js → p-1597ec4b.entry.js} +1 -1
  227. package/dist/solutions-components/p-16362eb4.js +36 -0
  228. package/dist/solutions-components/{p-afb35c95.js → p-17d176b5.js} +14 -43
  229. package/dist/solutions-components/{p-3691a072.js → p-1ab414e0.js} +2 -2
  230. package/dist/solutions-components/{p-127c3866.js → p-1c5787b1.js} +1 -1
  231. package/dist/solutions-components/{p-b97886b3.entry.js → p-1d9a5198.entry.js} +1 -1
  232. package/dist/solutions-components/{p-8e3e1ce8.entry.js → p-1dd5c4e6.entry.js} +1 -1
  233. package/dist/solutions-components/{p-97b69f54.entry.js → p-1e62d118.entry.js} +1 -1
  234. package/dist/solutions-components/{p-537c34a4.entry.js → p-1fae3819.entry.js} +1 -1
  235. package/dist/solutions-components/{p-82f0b25b.js → p-21aa112d.js} +1 -1
  236. package/dist/solutions-components/{p-f8944f59.entry.js → p-252a9a7f.entry.js} +1 -1
  237. package/dist/solutions-components/{p-80ea5869.js → p-26b28806.js} +1 -1
  238. package/dist/solutions-components/{p-dac10448.js → p-280fd963.js} +3 -3
  239. package/dist/solutions-components/{p-79d7f324.js → p-29049359.js} +1 -1
  240. package/dist/solutions-components/{p-c033b8ec.entry.js → p-2b378389.entry.js} +1 -1
  241. package/dist/solutions-components/{p-19ec0463.js → p-2bdd1a5d.js} +1 -1
  242. package/dist/solutions-components/{p-cacfa6ae.js → p-2ee21e9d.js} +1 -1
  243. package/dist/solutions-components/{p-300f4299.js → p-2f42ae51.js} +1 -1
  244. package/dist/solutions-components/{p-418be467.js → p-30b3261c.js} +1 -1
  245. package/dist/solutions-components/{p-4d91443a.entry.js → p-32ba2223.entry.js} +1 -1
  246. package/dist/solutions-components/{p-702c6093.js → p-34673137.js} +1 -1
  247. package/dist/solutions-components/{p-61af54b9.entry.js → p-3566ee69.entry.js} +1 -1
  248. package/dist/solutions-components/{p-90a9126f.js → p-358b9cc8.js} +1 -1
  249. package/dist/solutions-components/p-3a8d82a2.js +11 -0
  250. package/dist/solutions-components/{p-628c170b.entry.js → p-3ab94526.entry.js} +1 -1
  251. package/dist/solutions-components/{p-9791fbf1.entry.js → p-3d7aa1b2.entry.js} +1 -1
  252. package/dist/solutions-components/{p-b1daad7e.js → p-3f7119c1.js} +1 -1
  253. package/dist/solutions-components/{p-f0f5ecb2.js → p-3fcd035e.js} +1 -1
  254. package/dist/solutions-components/{p-3766be72.js → p-419c9d89.js} +1 -1
  255. package/dist/solutions-components/p-453d1b31.entry.js +6 -0
  256. package/dist/solutions-components/{p-337f6adf.js → p-46918548.js} +1 -1
  257. package/dist/solutions-components/p-49e9e4e3.js +12 -0
  258. package/dist/solutions-components/p-4d942b0f.entry.js +36 -0
  259. package/dist/solutions-components/{p-85e0d2a3.js → p-4fc92419.js} +1 -1
  260. package/dist/solutions-components/{p-0d08a75d.entry.js → p-52afbe07.entry.js} +1 -1
  261. package/dist/solutions-components/{p-9391bb74.js → p-573d0763.js} +1 -1
  262. package/dist/solutions-components/p-57cf6784.entry.js +6 -0
  263. package/dist/solutions-components/{p-87971116.entry.js → p-59ef9461.entry.js} +1 -1
  264. package/dist/solutions-components/{p-25718b9f.entry.js → p-5e5749c0.entry.js} +1 -1
  265. package/dist/solutions-components/{p-54064b61.entry.js → p-5ff22d2e.entry.js} +1 -1
  266. package/dist/solutions-components/{p-4bd793ef.entry.js → p-617f32a0.entry.js} +1 -1
  267. package/dist/solutions-components/p-64b22d57.entry.js +6 -0
  268. package/dist/solutions-components/{p-747a1293.js → p-6510c06c.js} +1 -1
  269. package/dist/solutions-components/p-654dd5df.entry.js +6 -0
  270. package/dist/solutions-components/{p-1f69762c.js → p-65ba4d10.js} +1 -1
  271. package/dist/solutions-components/{p-4cb7cdb7.entry.js → p-65ffe4b0.entry.js} +1 -1
  272. package/dist/solutions-components/{p-1b4d6511.js → p-68007503.js} +1 -1
  273. package/dist/solutions-components/{p-e849d2ba.entry.js → p-6ba8483c.entry.js} +2 -2
  274. package/dist/solutions-components/{p-9961a2f9.entry.js → p-6c8c7b98.entry.js} +2 -2
  275. package/dist/solutions-components/{p-ff863f3d.entry.js → p-6e5d9ae9.entry.js} +1 -1
  276. package/dist/solutions-components/{p-b6a1c34f.entry.js → p-6ebf870c.entry.js} +1 -1
  277. package/dist/solutions-components/{p-d2d3e4b5.js → p-72f34a0a.js} +1 -1
  278. package/dist/solutions-components/{p-981fc8e4.entry.js → p-7359a6ac.entry.js} +1 -1
  279. package/dist/solutions-components/{p-9abb1c4c.entry.js → p-73fe6f7e.entry.js} +1 -1
  280. package/dist/solutions-components/{p-62e3adbb.js → p-7452d79a.js} +1 -1
  281. package/dist/solutions-components/{p-34169501.js → p-76c2c379.js} +1 -1
  282. package/dist/solutions-components/{p-941721ba.js → p-788aa5d7.js} +1 -1
  283. package/dist/solutions-components/{p-557d4cc5.js → p-79cc0531.js} +2 -2
  284. package/dist/solutions-components/{p-a19d8147.js → p-7a0fa011.js} +1 -1
  285. package/dist/solutions-components/{p-019fe9fe.entry.js → p-7a55cee6.entry.js} +3 -3
  286. package/dist/solutions-components/{p-48329056.entry.js → p-7bc63171.entry.js} +1 -1
  287. package/dist/solutions-components/{p-e7304151.entry.js → p-81664d83.entry.js} +1 -1
  288. package/dist/solutions-components/{p-9504c1b7.js → p-8354f486.js} +1 -1
  289. package/dist/solutions-components/{p-f812e3ee.entry.js → p-84dff306.entry.js} +1 -1
  290. package/dist/solutions-components/{p-a59dba2f.js → p-8594fe6b.js} +1 -1
  291. package/dist/solutions-components/{p-ae3ec77d.js → p-8b2d396e.js} +1 -1
  292. package/dist/solutions-components/{p-38cc8a4d.js → p-8ec6ea34.js} +1 -1
  293. package/dist/solutions-components/{p-da760d1d.entry.js → p-8ee00658.entry.js} +1 -1
  294. package/dist/solutions-components/{p-38211628.js → p-905fcf73.js} +1 -1
  295. package/dist/solutions-components/{p-e502ccce.entry.js → p-929909bc.entry.js} +1 -1
  296. package/dist/solutions-components/{p-dd5f68f2.js → p-948b5722.js} +1 -1
  297. package/dist/solutions-components/{p-39fe9a4c.js → p-956f3207.js} +1 -1
  298. package/dist/solutions-components/{p-f7aa542c.js → p-96287d23.js} +1 -1
  299. package/dist/solutions-components/{p-68630513.entry.js → p-964c0e7d.entry.js} +1 -1
  300. package/dist/solutions-components/{p-b09d8c0e.entry.js → p-98051370.entry.js} +1 -1
  301. package/dist/solutions-components/{p-efd70bf7.entry.js → p-9a94f48c.entry.js} +2 -2
  302. package/dist/solutions-components/{p-318790b8.js → p-9b94501c.js} +1 -1
  303. package/dist/solutions-components/{p-69e26726.js → p-9d4467a3.js} +1 -1
  304. package/dist/solutions-components/{p-f6cf9943.js → p-9e3c9cd2.js} +1 -1
  305. package/dist/solutions-components/{p-30542275.js → p-9fd59203.js} +1 -1
  306. package/dist/solutions-components/{p-d902b790.js → p-a201bffc.js} +1 -1
  307. package/dist/solutions-components/{p-89cbb86a.js → p-a26711e8.js} +3 -3
  308. package/dist/solutions-components/{p-1552c479.entry.js → p-a3729795.entry.js} +1 -1
  309. package/dist/solutions-components/{p-ae4ad673.entry.js → p-a47ed290.entry.js} +2 -2
  310. package/dist/solutions-components/{p-ca5be55f.entry.js → p-a5ef322f.entry.js} +2 -2
  311. package/dist/solutions-components/{p-3658ebd8.entry.js → p-a97e8d6a.entry.js} +1 -1
  312. package/dist/solutions-components/{p-2937523d.js → p-aaea9203.js} +1 -1
  313. package/dist/solutions-components/{p-b7093e6d.entry.js → p-ad1d56b1.entry.js} +1 -1
  314. package/dist/solutions-components/{p-0ca528ec.js → p-adeb0e8f.js} +1 -1
  315. package/dist/solutions-components/{p-31d2a105.entry.js → p-af63959a.entry.js} +1 -1
  316. package/dist/solutions-components/{p-fbd71543.entry.js → p-b1125581.entry.js} +2 -2
  317. package/dist/solutions-components/p-b1c8c6d7.entry.js +6 -0
  318. package/dist/solutions-components/{p-b029c6d8.js → p-b20a31c8.js} +1 -1
  319. package/dist/solutions-components/{p-71400268.js → p-b81131b3.js} +1 -1
  320. package/dist/solutions-components/{p-cc624b0c.entry.js → p-b89c5865.entry.js} +1 -1
  321. package/dist/solutions-components/{p-245d667e.js → p-b9b52743.js} +1 -1
  322. package/dist/solutions-components/p-b9d29f30.entry.js +6 -0
  323. package/dist/solutions-components/{p-0870f436.entry.js → p-ba99e562.entry.js} +1 -1
  324. package/dist/solutions-components/{p-2d614afc.js → p-bc548c06.js} +1 -1
  325. package/dist/solutions-components/{p-29b2f046.js → p-bccbdeb5.js} +1 -1
  326. package/dist/solutions-components/{p-f72e0965.entry.js → p-bd318e33.entry.js} +1 -1
  327. package/dist/solutions-components/{p-74aa84f6.js → p-bd766e49.js} +1 -1
  328. package/dist/solutions-components/{p-9b75102b.entry.js → p-c073d2d6.entry.js} +1 -1
  329. package/dist/solutions-components/p-c6b7e7ff.js +11 -0
  330. package/dist/solutions-components/{p-0503c78d.js → p-c8d0ce92.js} +44 -29
  331. package/dist/solutions-components/{p-dc80cb69.entry.js → p-ca0b3a2b.entry.js} +1 -1
  332. package/dist/solutions-components/{p-e9fcf408.js → p-d5228aed.js} +1 -1
  333. package/dist/solutions-components/{p-80b87453.js → p-d98caa4c.js} +1 -1
  334. package/dist/solutions-components/{p-45b829b5.js → p-dd9c065e.js} +1 -1
  335. package/dist/solutions-components/{p-05b2bdf9.js → p-dedc167c.js} +1 -1
  336. package/dist/solutions-components/{p-a16feeec.js → p-e4f9b782.js} +1 -1
  337. package/dist/solutions-components/{p-ac1bd870.entry.js → p-e572a692.entry.js} +1 -1
  338. package/dist/solutions-components/{p-74521615.entry.js → p-e5dda947.entry.js} +1 -1
  339. package/dist/solutions-components/{p-d793ec96.entry.js → p-e76949eb.entry.js} +5 -5
  340. package/dist/solutions-components/{p-bbfc2724.js → p-e7fbf2fe.js} +1 -1
  341. package/dist/solutions-components/{p-dda325a4.entry.js → p-e9ba0c7f.entry.js} +1 -1
  342. package/dist/solutions-components/{p-75e707d1.js → p-eb60ec2a.js} +1 -1
  343. package/dist/solutions-components/p-ecc95259.js +20 -0
  344. package/dist/solutions-components/{p-85791b16.entry.js → p-ee144348.entry.js} +1 -1
  345. package/dist/solutions-components/p-ee7e2f00.entry.js +34 -0
  346. package/dist/solutions-components/{p-4b4559f9.js → p-f03bed0c.js} +1 -1
  347. package/dist/solutions-components/{p-7a11983d.js → p-f5028a8e.js} +1 -1
  348. package/dist/solutions-components/{p-fb23ba4a.entry.js → p-f50cf603.entry.js} +1 -1
  349. package/dist/solutions-components/{p-f7b520ae.js → p-f7d8b6b3.js} +1 -1
  350. package/dist/solutions-components/{p-792fcd62.entry.js → p-fb0f2016.entry.js} +1 -1
  351. package/dist/solutions-components/solutions-components.esm.js +1 -1
  352. package/dist/solutions-components/utils/downloadUtils.ts +257 -85
  353. package/dist/solutions-components/utils/interfaces.ts +12 -1
  354. package/dist/solutions-components/utils/mapViewUtils.ts +41 -57
  355. package/dist/solutions-components/utils/publicNotificationStore.ts +0 -4
  356. package/dist/solutions-components/utils/test/downloadUtils.spec.tsx +2 -0
  357. package/dist/types/components/basemap-gallery/basemap-gallery.d.ts +5 -0
  358. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +45 -1
  359. package/dist/types/components/edit-card/edit-card.d.ts +8 -0
  360. package/dist/types/components/layer-table/layer-table.d.ts +82 -26
  361. package/dist/types/components/map-card/map-card.d.ts +25 -1
  362. package/dist/types/components/map-layer-picker/map-layer-picker.d.ts +50 -3
  363. package/dist/types/components/map-picker/map-picker.d.ts +2 -2
  364. package/dist/types/components/map-tools/map-tools.d.ts +21 -1
  365. package/dist/types/components/pdf-download/pdf-download.d.ts +4 -2
  366. package/dist/types/components.d.ts +218 -4
  367. package/dist/types/preact.d.ts +6 -3
  368. package/dist/types/utils/downloadUtils.d.ts +34 -16
  369. package/dist/types/utils/interfaces.d.ts +10 -1
  370. package/dist/types/utils/mapViewUtils.d.ts +8 -24
  371. package/dist/types/utils/publicNotificationStore.d.ts +0 -2
  372. package/package.json +8 -9
  373. package/dist/cjs/calcite-chip.cjs.entry.js +0 -259
  374. package/dist/cjs/calcite-notice.cjs.entry.js +0 -139
  375. package/dist/cjs/calcite-tooltip.cjs.entry.js +0 -439
  376. package/dist/esm/calcite-chip.entry.js +0 -255
  377. package/dist/esm/calcite-notice.entry.js +0 -135
  378. package/dist/esm/calcite-tooltip.entry.js +0 -435
  379. package/dist/solutions-components/p-06712292.js +0 -11
  380. package/dist/solutions-components/p-0a0c3764.js +0 -11
  381. package/dist/solutions-components/p-12a7c2db.entry.js +0 -6
  382. package/dist/solutions-components/p-1a47516a.entry.js +0 -22
  383. package/dist/solutions-components/p-2cff8331.entry.js +0 -6
  384. package/dist/solutions-components/p-3a7cd2b0.entry.js +0 -37
  385. package/dist/solutions-components/p-3e9fc0aa.entry.js +0 -11
  386. package/dist/solutions-components/p-712ea336.entry.js +0 -11
  387. package/dist/solutions-components/p-767002cd.js +0 -36
  388. package/dist/solutions-components/p-8e9d9e6a.js +0 -12
  389. package/dist/solutions-components/p-97088307.entry.js +0 -6
  390. package/dist/solutions-components/p-a16e6f5f.entry.js +0 -6
  391. package/dist/solutions-components/p-d118a76e.entry.js +0 -6
  392. package/dist/solutions-components/p-d54c2dfd.entry.js +0 -6
  393. package/dist/solutions-components/p-d7d466e8.entry.js +0 -6
  394. package/dist/solutions-components/p-ffbe89cf.entry.js +0 -6
@@ -23,26 +23,44 @@ import { exportCSV } from "./csvUtils";
23
23
  import { exportPDF } from "./pdfUtils";
24
24
  import { loadModules } from "./loadModules";
25
25
  import { queryFeaturesByID } from "./queryUtils";
26
+ //import * as common from "@esri/solution-common";
26
27
  export { ILabel } from "./pdfUtils";
27
28
  const lineSeparatorChar = "|";
29
+ import { queryRelated } from "@esri/arcgis-rest-feature-layer";
30
+ /**
31
+ * Get the related records for a feature service.
32
+ *
33
+ * @param url Feature service's URL, e.g., layer.url
34
+ * @param relationshipId Id of relationship
35
+ * @param objectIds Objects in the feature service whose related records are sought
36
+ */
37
+ export function getFeatureServiceRelatedRecords(url, relationshipId, objectIds) {
38
+ const options = {
39
+ url: url + `/${relationshipId}`,
40
+ relationshipId,
41
+ objectIds
42
+ };
43
+ return queryRelated(options);
44
+ }
28
45
  //#endregion
29
46
  // ------------------------------------------------------------------------------------------------------------------ //
30
47
  //#region Public functions
31
48
  /**
32
49
  * Create and consolidate labels from all layers
33
50
  *
51
+ * @param webmap Webmap containing layer
34
52
  * @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
35
53
  * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
36
54
  * all attributes are exported
37
55
  * @param includeHeaderNames Add the label format at the front of the list of generated labels
38
56
  * @returns selectionSetNames that will be used for export filenames
39
57
  */
40
- export async function consolidateLabels(exportInfos, formatUsingLayerPopup = true, includeHeaderNames = false, isCSVExport = false) {
58
+ export async function consolidateLabels(webmap, exportInfos, formatUsingLayerPopup = true, includeHeaderNames = false, isCSVExport = false) {
41
59
  const labelRequests = [];
42
60
  Object.keys(exportInfos).forEach(k => {
43
61
  var _a;
44
62
  const labelInfo = exportInfos[k];
45
- labelRequests.push(_prepareLabels(((_a = labelInfo.layerView) === null || _a === void 0 ? void 0 : _a.layer) || labelInfo.layer, labelInfo.ids, formatUsingLayerPopup, includeHeaderNames));
63
+ labelRequests.push(_prepareLabels(webmap, ((_a = labelInfo.layerView) === null || _a === void 0 ? void 0 : _a.layer) || labelInfo.layer, labelInfo.ids, formatUsingLayerPopup, includeHeaderNames));
46
64
  if (isCSVExport) {
47
65
  // add the layer id as a temp value separator that we can use to split values for CSV export
48
66
  labelRequests.push(Promise.resolve([[k]]));
@@ -54,6 +72,7 @@ export async function consolidateLabels(exportInfos, formatUsingLayerPopup = tru
54
72
  /**
55
73
  * Downloads csv of mailing labels for the provided list of ids
56
74
  *
75
+ * @param webmap Webmap containing layer
57
76
  * @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
58
77
  * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
59
78
  * all attributes are exported
@@ -61,8 +80,8 @@ export async function consolidateLabels(exportInfos, formatUsingLayerPopup = tru
61
80
  * @param addColumnTitle Indicates if column headings should be included in output
62
81
  * @returns Promise resolving when function is done
63
82
  */
64
- export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDuplicates = false, addColumnTitle = false) {
65
- let labels = await consolidateLabels(exportInfos, formatUsingLayerPopup, addColumnTitle, true);
83
+ export async function downloadCSV(webmap, exportInfos, formatUsingLayerPopup, removeDuplicates = false, addColumnTitle = false) {
84
+ let labels = await consolidateLabels(webmap, exportInfos, formatUsingLayerPopup, addColumnTitle, true);
66
85
  labels = removeDuplicates ? removeDuplicateLabels(labels) : labels;
67
86
  const layerIds = Object.keys(exportInfos);
68
87
  let layerLabels = [];
@@ -84,6 +103,7 @@ export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDupl
84
103
  /**
85
104
  * Downloads csv of mailing labels for the provided list of ids
86
105
  *
106
+ * @param webmap Webmap containing layer
87
107
  * @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
88
108
  * @param labelPageDescription Provides PDF page layout info
89
109
  * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
@@ -91,8 +111,8 @@ export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDupl
91
111
  * @param initialImageDataUrl Data URL of image for first page
92
112
  * @returns Promise resolving when function is done
93
113
  */
94
- export async function downloadPDF(exportInfos, labelPageDescription, removeDuplicates = false, title = "", initialImageDataUrl = "") {
95
- let labels = await consolidateLabels(exportInfos);
114
+ export async function downloadPDF(webmap, exportInfos, labelPageDescription, removeDuplicates = false, title = "", initialImageDataUrl = "") {
115
+ let labels = await consolidateLabels(webmap, exportInfos);
96
116
  const selectionSetNames = _getSelectionSetNames(exportInfos);
97
117
  labels =
98
118
  // Remove empty lines in labels
@@ -224,6 +244,87 @@ export async function _convertPopupArcadeToLabelSpec(expressionInfo) {
224
244
  format: executor
225
245
  });
226
246
  }
247
+ /**
248
+ * Extracts Arcade expressions from the lines of a label format and creates an Arcade executor for each
249
+ * referenced expression name.
250
+ *
251
+ * @param labelFormat Label to examine
252
+ * @param layer Layer from which to fetch features
253
+ * @return Promise resolving to a set of executors keyed using the expression name
254
+ */
255
+ /*
256
+ async function _createArcadeExecutors(
257
+ labelFormat: string,
258
+ layer: __esri.FeatureLayer
259
+ ): Promise<IArcadeExecutors> {
260
+ const arcadeExecutors: IArcadeExecutors = {};
261
+
262
+ // Are any Arcade expressions in the layer?
263
+ if (!Array.isArray(layer.popupTemplate.expressionInfos) || layer.popupTemplate.expressionInfos.length === 0) {
264
+ return Promise.resolve(arcadeExecutors);
265
+ }
266
+
267
+ // Are there any Arcade expressions in the label format?
268
+ const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
269
+ const arcadeExpressionsMatches = labelFormat.match(arcadeExpressionRegExp);
270
+ if (!arcadeExpressionsMatches) {
271
+ return Promise.resolve(arcadeExecutors);
272
+ }
273
+
274
+ // Generate an Arcade executor for each match
275
+ const [arcade] = await loadModules(["esri/arcade"]);
276
+ const labelingProfile: __esri.Profile = {
277
+ variables: [
278
+ {
279
+ name: "$feature",
280
+ type: "feature"
281
+ },
282
+ {
283
+ name: "$layer",
284
+ type: "featureSet"
285
+ },
286
+ {
287
+ name: "$datastore",
288
+ type: "featureSetCollection"
289
+ },
290
+ {
291
+ name: "$map",
292
+ type: "featureSetCollection"
293
+ }
294
+ ]
295
+ };
296
+
297
+ const createArcadeExecutorPromises: IArcadeExecutorPromises = {};
298
+ arcadeExpressionsMatches.forEach(
299
+ (match: string) => {
300
+ const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
301
+
302
+ (layer.popupTemplate.expressionInfos || []).forEach(
303
+ expressionInfo => {
304
+ if (expressionInfo.name === expressionName) {
305
+ createArcadeExecutorPromises[expressionName] =
306
+ arcade.createArcadeExecutor(expressionInfo.expression, labelingProfile);
307
+ }
308
+ }
309
+ );
310
+ }
311
+ );
312
+
313
+ const promises = Object.values(createArcadeExecutorPromises);
314
+ return Promise.all(promises)
315
+ .then(
316
+ executors => {
317
+ const expressionNames = Object.keys(createArcadeExecutorPromises);
318
+
319
+ for (let i = 0; i < expressionNames.length; ++i) {
320
+ arcadeExecutors[expressionNames[i]] = executors[i].valueOf() as __esri.ArcadeExecutor;
321
+ }
322
+
323
+ return arcadeExecutors;
324
+ }
325
+ );
326
+ }
327
+ */
227
328
  /**
228
329
  * Creates a title from a list of selection set names.
229
330
  *
@@ -236,38 +337,6 @@ export function _createFilename(selectionSetNames) {
236
337
  const title = selectionSetNames.length > 0 ? selectionSetNames.join(", ") : "download";
237
338
  return title;
238
339
  }
239
- /**
240
- * Creates relationship queries for each relationship flag in a popup.
241
- * @param layer Layer whose popup is to be examined
242
- * @return Hash of relationships by their id, or null if there are no relationship flags in the
243
- * popup; each relationship has the properties layer and relatedQuery for the related layer
244
- * and the query for that layer
245
- */
246
- export function _createRelationshipQueries(layer) {
247
- const relationships = {};
248
- const relationshipFieldPattern = /\{relationships\/\d+\//gm;
249
- const relationshipIdPattern = /\d+/;
250
- // Test if this popup has any relationship references
251
- const matches = layer.popupTemplate.content[0].text.match(relationshipFieldPattern);
252
- if (matches) {
253
- matches.forEach(match => {
254
- // Add a query to a found relationship if we don't already have one
255
- const id = match.match(relationshipIdPattern)[0];
256
- if (!relationships.hasOwnProperty(id)) {
257
- const relatedQuery = {
258
- outFields: ['*'],
259
- relationshipId: id,
260
- returnGeometry: false
261
- };
262
- relationships[id] = {
263
- layer,
264
- relatedQuery
265
- };
266
- }
267
- });
268
- }
269
- return relationships;
270
- }
271
340
  /**
272
341
  * Extracts Arcade expression references from the lines of a label format.
273
342
  *
@@ -319,52 +388,73 @@ export function _getFieldNamesFromFieldExpressions(fieldExpressions) {
319
388
  /**
320
389
  * Extracts the label format from the layer.
321
390
  *
391
+ * @param webmap Webmap containing layer
322
392
  * @param layer Layer with label format
323
393
  * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
324
394
  * all attributes are exported
325
- * @param attributeFormats Empty object to hold the formats for each attribute in a feature; the object is filled
326
- * with formats by this function
327
395
  * @returns A Promise resolving to the format of a single label with fields coerced to lowercase, e.g.,
328
- * for ILabelFormat type "pattern": "{name}|{street}|{city}, {state} {zip}"
396
+ * for ILabelFormatProps type "pattern": "{name}|{street}|{city}, {state} {zip}"
329
397
  */
330
- export async function _getLabelFormat(layer, formatUsingLayerPopup, attributeFormats) {
331
- var _a, _b, _c, _d, _e, _f;
332
- let labelFormat = {
333
- type: "unsupported",
334
- format: undefined
398
+ export async function _getLabelFormat(webmap, layer, formatUsingLayerPopup) {
399
+ var _a, _b;
400
+ let labelFormatProps = {
401
+ layer,
402
+ attributeFormats: {},
403
+ relationshipId: undefined,
404
+ labelFormat: {
405
+ type: "unsupported",
406
+ format: undefined
407
+ }
335
408
  };
336
409
  if (layer.popupEnabled) {
337
410
  layer.popupTemplate.fieldInfos.forEach(
338
411
  // Extract any format info that we have
339
412
  fieldInfo => {
340
413
  if (fieldInfo.format) {
341
- attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
414
+ labelFormatProps.attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
342
415
  }
343
416
  });
344
417
  // What is the nature of the label content?
345
418
  // Fields list
346
- if (formatUsingLayerPopup && ((_b = (_a = layer.popupTemplate) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.type) === "fields") {
347
- labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
348
- // If popup is configured with "no attribute information", then no fields will visible
349
- if (labelFormat.format.length === 0) {
350
- // Can we use the popup title?
351
- labelFormat = layer.popupTemplate.title && typeof layer.popupTemplate.title === "string" ?
352
- { type: "pattern", format: layer.popupTemplate.title }
353
- :
354
- // Otherwise revert to using attributes
355
- _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos, true);
419
+ if (formatUsingLayerPopup) {
420
+ const labelFormatType = (_b = (_a = layer.popupTemplate) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.type;
421
+ if (labelFormatType === "relationship") {
422
+ const relationshipId = layer.popupTemplate.content[0].relationshipId;
423
+ const webmapLayers = webmap.layers.toArray().concat(webmap.tables.toArray())
424
+ .filter((entry) => entry.type === "feature"
425
+ && entry.id !== layer.id
426
+ && entry.relationships
427
+ && entry.relationships.some(relationship => relationship.id === relationshipId));
428
+ labelFormatProps = await _getLabelFormat(webmap, webmapLayers[0], formatUsingLayerPopup);
429
+ labelFormatProps.relationshipId = relationshipId;
430
+ }
431
+ else if (labelFormatType === "fields") {
432
+ labelFormatProps.labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
433
+ // If popup is configured with "no attribute information", then no fields will visible
434
+ if (labelFormatProps.labelFormat.format.length === 0) {
435
+ // Can we use the popup title?
436
+ labelFormatProps.labelFormat = layer.popupTemplate.title && typeof layer.popupTemplate.title === "string" ?
437
+ { type: "pattern", format: layer.popupTemplate.title }
438
+ :
439
+ // Otherwise revert to using attributes
440
+ _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos, true);
441
+ }
442
+ // Example text: '<p>{name} {age} years &nbsp;</p><p>started: {start}</p>'
443
+ }
444
+ else if (labelFormatType === "text") {
445
+ labelFormatProps.labelFormat = _convertPopupTextToLabelSpec(layer.popupTemplate.content[0].text);
446
+ // Example 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}',
447
+ }
448
+ else if (labelFormatType === "expression") {
449
+ labelFormatProps.labelFormat = await _convertPopupArcadeToLabelSpec(layer.popupTemplate.content[0].expressionInfo);
450
+ // Fallback to all fields
451
+ }
452
+ else {
453
+ labelFormatProps.labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
356
454
  }
357
- // Example text: '<p>{name} {age} years &nbsp;</p><p>started: {start}</p>'
358
- }
359
- else if (formatUsingLayerPopup && ((_d = (_c = layer.popupTemplate) === null || _c === void 0 ? void 0 : _c.content[0]) === null || _d === void 0 ? void 0 : _d.type) === "text") {
360
- labelFormat = _convertPopupTextToLabelSpec(layer.popupTemplate.content[0].text);
361
- // Example 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}',
362
- }
363
- else if (formatUsingLayerPopup && ((_f = (_e = layer.popupTemplate) === null || _e === void 0 ? void 0 : _e.content[0]) === null || _f === void 0 ? void 0 : _f.type) === "expression") {
364
- labelFormat = await _convertPopupArcadeToLabelSpec(layer.popupTemplate.content[0].expressionInfo);
365
455
  }
366
456
  }
367
- return Promise.resolve(labelFormat);
457
+ return Promise.resolve(labelFormatProps);
368
458
  }
369
459
  /**
370
460
  * Extract selectionSetNames from the provided exportInfos
@@ -436,6 +526,7 @@ export function _prepareAttributeValue(attributeValue, attributeType, attributeD
436
526
  /**
437
527
  * Creates labels from items.
438
528
  *
529
+ * @param webmap Webmap containing layer
439
530
  * @param layer Layer from which to fetch features
440
531
  * @param ids List of ids to download
441
532
  * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
@@ -443,32 +534,51 @@ export function _prepareAttributeValue(attributeValue, attributeType, attributeD
443
534
  * @param includeHeaderNames Add the label format at the front of the list of generated labels
444
535
  * @returns Promise resolving when function is done
445
536
  */
446
- export async function _prepareLabels(layer, ids, formatUsingLayerPopup = true, includeHeaderNames = false) {
447
- // Get the features to export
448
- const featureSet = await queryFeaturesByID(ids, layer, [], false);
537
+ export async function _prepareLabels(webmap, layer, ids, formatUsingLayerPopup = true, includeHeaderNames = false) {
538
+ // Get the label formatting, if any
539
+ const labelFormatProps = await _getLabelFormat(webmap, layer, formatUsingLayerPopup);
540
+ // Because the label may actually come from a related layer, we'll use the layer that comes back from _getLabelFormat.
541
+ // That function returns the supplied layer in all cases except for a "relationship" type of popup.
542
+ const featureLayer = labelFormatProps.layer;
543
+ let featureSet = [];
544
+ if (typeof (labelFormatProps.relationshipId) !== "undefined") {
545
+ // Get the related items for each id
546
+ const relatedRecResponse = await getFeatureServiceRelatedRecords(layer.url, labelFormatProps.relationshipId, ids);
547
+ const objectIdField = layer.objectIdField;
548
+ let relatedFeatureIds = [];
549
+ relatedRecResponse.relatedRecordGroups.forEach((relatedRecGroup) => {
550
+ relatedFeatureIds = relatedFeatureIds.concat(relatedRecGroup.relatedRecords.map((rec) => rec.attributes[objectIdField]));
551
+ });
552
+ // Remove duplicates
553
+ relatedFeatureIds.sort();
554
+ relatedFeatureIds = relatedFeatureIds.filter((id, i) => i === 0 ? true : id !== relatedFeatureIds[i - 1]);
555
+ // Get the full items
556
+ featureSet = await queryFeaturesByID(relatedFeatureIds, featureLayer, [], false);
557
+ }
558
+ else {
559
+ // Get the features to export
560
+ featureSet = await queryFeaturesByID(ids, featureLayer, [], false);
561
+ }
449
562
  // Get field data types. Do we have any domain-based fields?
450
563
  const attributeOrigNames = {};
451
564
  const attributeTypes = {};
452
565
  const attributeDomains = {};
453
- layer.fields.forEach(field => {
566
+ featureLayer.fields.forEach(field => {
454
567
  const lowercaseFieldname = field.name.toLowerCase();
455
568
  attributeOrigNames[lowercaseFieldname] = field.name;
456
569
  attributeDomains[lowercaseFieldname] = field.domain;
457
570
  attributeTypes[lowercaseFieldname] = field.type;
458
571
  });
459
- const attributeFormats = {};
460
- // Get the label formatting, if any
461
- const labelFormat = await _getLabelFormat(layer, formatUsingLayerPopup, attributeFormats);
462
572
  // Apply the label format
463
- const labels = labelFormat.type === "unsupported" ?
464
- // Export all attributes
465
- await _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomains, includeHeaderNames)
466
- : labelFormat.type == "pattern" ?
467
- // Export attributes in format
468
- await _prepareLabelsFromPattern(featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat.format, includeHeaderNames)
573
+ const labels = labelFormatProps.labelFormat.type === "pattern" ?
574
+ // Export attributes in format
575
+ await _prepareLabelsFromPattern(/*layer,*/ featureSet, attributeOrigNames, attributeTypes, attributeDomains, labelFormatProps.attributeFormats, labelFormatProps.labelFormat.format, includeHeaderNames)
576
+ : labelFormatProps.labelFormat.type === "executor" ?
577
+ // Export attributes in expression
578
+ await _prepareLabelsUsingExecutor(featureSet, labelFormatProps.labelFormat.format)
469
579
  :
470
- // Export attributes in expression
471
- await _prepareLabelsUsingExecutor(featureSet, labelFormat.format);
580
+ // Export all attributes
581
+ await _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomains, includeHeaderNames);
472
582
  return Promise.resolve(labels);
473
583
  }
474
584
  /**
@@ -512,14 +622,30 @@ export async function _prepareLabelsFromAll(featureSet, attributeTypes, attribut
512
622
  * @param includeHeaderNames Add the label format at the front of the list of generated labels
513
623
  * @returns Promise resolving with list of labels, each of which is a list of label lines
514
624
  */
515
- export async function _prepareLabelsFromPattern(featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
625
+ export async function _prepareLabelsFromPattern(
626
+ //layer: __esri.FeatureLayer,
627
+ featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
516
628
  const [intl] = await loadModules(["esri/intl"]);
517
629
  // Find the label fields that we need to replace with values
518
630
  const attributeExpressionMatches = _getFieldExpressionsFromLabel(labelFormat);
519
631
  const attributeNames = _getFieldNamesFromFieldExpressions(attributeExpressionMatches);
632
+ // Do we need any Arcade executors?
633
+ //const arcadeExecutors = await _createArcadeExecutors(labelFormat, layer);
634
+ //const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
635
+ // Find the label fields that we need to replace with values
636
+ //const arcadeExpressionMatches = labelFormat.match(arcadeExpressionRegExp) ?? [];
520
637
  // Convert feature attributes into an array of labels
521
638
  const labels = await Promise.all(featureSet.map(async (feature) => {
522
639
  let labelPrep = labelFormat;
640
+ /*
641
+ // Replace Arcade expressions in this feature
642
+ for (let i = 0; i < arcadeExpressionMatches.length; i++) {
643
+ const match: string = arcadeExpressionMatches[i];
644
+ const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
645
+ const value = await arcadeExecutors[expressionName].executeAsync({"$feature": feature, "$layer", layer});
646
+ labelPrep = labelPrep.replace(match, value);
647
+ }
648
+ */
523
649
  // Replace non-Arcade fields in this feature
524
650
  attributeNames.forEach((attributeName, i) => {
525
651
  const lowercaseFieldname = attributeName.toLowerCase();