@arcgis/common-components 4.29.0-beta.5 → 4.29.0-beta.50

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 (137) hide show
  1. package/README.md +1 -1
  2. package/dist/arcgis-common-components/arcgis-common-components.esm.js +1 -1
  3. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ar.json +78 -0
  4. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.bg.json +78 -0
  5. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.bs.json +78 -0
  6. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ca.json +78 -0
  7. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.cs.json +78 -0
  8. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.da.json +78 -0
  9. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.de.json +78 -0
  10. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.el.json +78 -0
  11. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.en.json +78 -0
  12. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.es.json +78 -0
  13. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.et.json +78 -0
  14. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.fi.json +78 -0
  15. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.fr.json +78 -0
  16. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.he.json +78 -0
  17. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.hr.json +78 -0
  18. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.hu.json +78 -0
  19. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.id.json +78 -0
  20. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.it.json +78 -0
  21. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ja.json +78 -0
  22. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ko.json +78 -0
  23. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.lt.json +78 -0
  24. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.lv.json +78 -0
  25. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.nb.json +78 -0
  26. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.nl.json +78 -0
  27. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.pl.json +78 -0
  28. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.pt-BR.json +78 -0
  29. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.pt-PT.json +78 -0
  30. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ro.json +78 -0
  31. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.ru.json +78 -0
  32. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.sk.json +78 -0
  33. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.sl.json +78 -0
  34. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.sr.json +78 -0
  35. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.sv.json +78 -0
  36. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.th.json +78 -0
  37. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.tr.json +78 -0
  38. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.uk.json +78 -0
  39. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.vi.json +78 -0
  40. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.zh-CN.json +78 -0
  41. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.zh-HK.json +78 -0
  42. package/dist/arcgis-common-components/assets/field-info/t9n/field-info.t9n.zh-TW.json +78 -0
  43. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ar.json +17 -0
  44. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.bg.json +17 -0
  45. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.bs.json +17 -0
  46. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ca.json +17 -0
  47. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.cs.json +17 -0
  48. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.da.json +17 -0
  49. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.de.json +17 -0
  50. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.el.json +17 -0
  51. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.en.json +17 -0
  52. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.es.json +17 -0
  53. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.et.json +17 -0
  54. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.fi.json +17 -0
  55. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.fr.json +17 -0
  56. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.he.json +17 -0
  57. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.hr.json +17 -0
  58. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.hu.json +17 -0
  59. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.id.json +17 -0
  60. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.it.json +17 -0
  61. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ja.json +17 -0
  62. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ko.json +17 -0
  63. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.lt.json +17 -0
  64. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.lv.json +17 -0
  65. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.nb.json +17 -0
  66. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.nl.json +17 -0
  67. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.pl.json +17 -0
  68. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.pt-BR.json +17 -0
  69. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.pt-PT.json +17 -0
  70. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ro.json +17 -0
  71. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.ru.json +17 -0
  72. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.sk.json +17 -0
  73. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.sl.json +17 -0
  74. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.sr.json +17 -0
  75. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.sv.json +17 -0
  76. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.th.json +17 -0
  77. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.tr.json +17 -0
  78. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.uk.json +17 -0
  79. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.vi.json +17 -0
  80. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.zh-CN.json +17 -0
  81. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.zh-HK.json +17 -0
  82. package/dist/arcgis-common-components/assets/field-pick-list/t9n/field-pick-list.t9n.zh-TW.json +17 -0
  83. package/dist/arcgis-common-components/p-6c7d2684.js +1 -0
  84. package/dist/arcgis-common-components/p-7318a1d1.entry.js +1 -0
  85. package/dist/arcgis-common-components/p-a91ab432.js +2 -0
  86. package/dist/arcgis-common-components/p-efab92a8.entry.js +1 -0
  87. package/dist/cjs/arcgis-common-components.cjs.js +3 -3
  88. package/dist/cjs/arcgis-field-info.cjs.entry.js +1025 -0
  89. package/dist/cjs/arcgis-field-pick-list.cjs.entry.js +245 -0
  90. package/dist/cjs/index-5ec7f592.js +90 -0
  91. package/dist/cjs/index-e0422bc8.js +1887 -0
  92. package/dist/cjs/loader.cjs.js +3 -12
  93. package/dist/components/{arcgis-api-key.d.ts → arcgis-field-info.d.ts} +4 -4
  94. package/dist/components/arcgis-field-info.js +6 -0
  95. package/dist/components/{arcgis-identity.d.ts → arcgis-field-pick-list.d.ts} +4 -4
  96. package/dist/components/arcgis-field-pick-list.js +301 -0
  97. package/dist/components/field-info.js +1108 -0
  98. package/dist/components/index.d.ts +5 -4
  99. package/dist/components/index.js +1 -3
  100. package/dist/esm/arcgis-common-components.js +4 -4
  101. package/dist/esm/arcgis-field-info.entry.js +1021 -0
  102. package/dist/esm/arcgis-field-pick-list.entry.js +241 -0
  103. package/dist/esm/index-0c129ec4.js +1856 -0
  104. package/dist/esm/index-ba4fe890.js +59 -0
  105. package/dist/esm/loader.js +4 -13
  106. package/dist/loader/index.d.ts +2 -2
  107. package/dist/types/components/field-info/field-info.d.ts +68 -0
  108. package/dist/types/components/field-info/t9n-types.d.ts +82 -0
  109. package/dist/types/components/field-info/utils/basic.d.ts +44 -0
  110. package/dist/types/components/field-info/utils/feature.d.ts +17 -0
  111. package/dist/types/components/field-info/utils/field.d.ts +25 -0
  112. package/dist/types/components/field-info/utils/index.d.ts +3 -0
  113. package/dist/types/components/field-pick-list/field-pick-list.d.ts +122 -0
  114. package/dist/types/components/field-pick-list/t9n-types.d.ts +17 -0
  115. package/dist/types/components/field-pick-list/utils/types.d.ts +25 -0
  116. package/dist/types/components.d.ts +258 -49
  117. package/dist/types/stencil-public-runtime.d.ts +61 -17
  118. package/package.json +24 -26
  119. package/dist/arcgis-common-components/p-3768a3bb.entry.js +0 -1
  120. package/dist/arcgis-common-components/p-84fccaad.entry.js +0 -1
  121. package/dist/arcgis-common-components/p-9625972e.js +0 -1
  122. package/dist/arcgis-common-components/p-b0c98bba.js +0 -2
  123. package/dist/cjs/arcgis-api-key.cjs.entry.js +0 -51
  124. package/dist/cjs/arcgis-identity.cjs.entry.js +0 -139
  125. package/dist/cjs/index-e8c59179.js +0 -858
  126. package/dist/cjs/index-f1a937af.js +0 -65
  127. package/dist/components/arcgis-api-key.js +0 -67
  128. package/dist/components/arcgis-identity.js +0 -165
  129. package/dist/components/index2.js +0 -40
  130. package/dist/esm/arcgis-api-key.entry.js +0 -47
  131. package/dist/esm/arcgis-identity.entry.js +0 -135
  132. package/dist/esm/index-1f7e8e45.js +0 -831
  133. package/dist/esm/index-71b437b1.js +0 -40
  134. package/dist/esm/polyfills/css-shim.js +0 -1
  135. package/dist/types/components/arcgis-api-key/arcgis-api-key.d.ts +0 -9
  136. package/dist/types/components/arcgis-identity/arcgis-identity.d.ts +0 -31
  137. package/dist/types/components/types.d.ts +0 -10
@@ -0,0 +1,1108 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, getAssetPath, h as h$1, Fragment, Host } from '@stencil/core/internal/client';
2
+
3
+ const amd = "define" in window && typeof window.define === "function" && "amd" in window.define;
4
+ function requireModule(modulePath) {
5
+ return new Promise((resolve) => window.require([modulePath], (moduleDefault) => {
6
+ resolve(moduleDefault);
7
+ }));
8
+ }
9
+ async function importRestSupportQuery() {
10
+ if (amd) {
11
+ return requireModule("esri/rest/support/Query");
12
+ }
13
+ const module = await import('@arcgis/core/rest/support/Query.js');
14
+ return module.default;
15
+ }
16
+ async function importConfig() {
17
+ if (amd) {
18
+ return requireModule("esri/config");
19
+ }
20
+ const module = await import('@arcgis/core/config.js');
21
+ return module.default;
22
+ }
23
+ async function importCoreLang() {
24
+ if (amd) {
25
+ return requireModule("esri/core/lang");
26
+ }
27
+ const module = await import('@arcgis/core/core/lang.js');
28
+ return module;
29
+ }
30
+ async function importCoreReactiveUtils() {
31
+ if (amd) {
32
+ return requireModule("esri/core/reactiveUtils");
33
+ }
34
+ const module = await import('@arcgis/core/core/reactiveUtils.js');
35
+ return module;
36
+ }
37
+ async function importIntl() {
38
+ if (amd) {
39
+ return requireModule("esri/intl");
40
+ }
41
+ const module = await import('@arcgis/core/intl.js');
42
+ return module;
43
+ }
44
+ async function importSmartMappingStatisticsSummaryStatistics() {
45
+ if (amd) {
46
+ return requireModule("esri/smartMapping/statistics/summaryStatistics");
47
+ }
48
+ const module = await import('@arcgis/core/smartMapping/statistics/summaryStatistics.js');
49
+ return module.default;
50
+ }
51
+ async function importSmartMappingStatisticsUniqueValues() {
52
+ if (amd) {
53
+ return requireModule("esri/smartMapping/statistics/uniqueValues");
54
+ }
55
+ const module = await import('@arcgis/core/smartMapping/statistics/uniqueValues.js');
56
+ return module.default;
57
+ }
58
+
59
+ function S(e,t){let n=e;for(;n;){if(n===t)return !0;if(!n.parentNode)return !1;n.parentNode instanceof ShadowRoot?n=n.parentNode.host:n=n.parentNode;}return !1}function T(e,t,n=()=>{}){if(!t||t.length<=0)return;let r=new MutationObserver(o=>{for(let i of o)S(e,i.target)&&n();});return r.observe(document.documentElement,{attributes:!0,attributeFilter:t,subtree:!0}),r}function E(e,t){let n=e;for(;n;){let r=n.closest(t);if(r)return r;let o=n.getRootNode();if(o===document)return null;n=o.host;}return null}function C(e){return f(e,"dir","ltr")}function f(e,t,n){return E(e,`[${t}]`)?.getAttribute(t)??n}var x=new Set(["ar","bg","bs","ca","cs","da","de","el","en","es","et","fi","fr","he","hr","hu","id","it","ja","ko","lt","lv","nl","nb","pl","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","th","tr","uk","vi","zh-CN","zh-HK","zh-TW"]),a=new Map;async function N(e,t,n=""){let r=`${t}/${n}${e}.json`;if(a.has(r))return a.get(r);try{let o=await fetch(r);if(o.ok){let s=await o.json();return a.set(r,s),s}if(e==="en"){a.set(r,void 0);return}let i=await N("en",t,n);return a.set(r,i),i}catch{a.set(r,void 0);return}}function R(e){let t=f(e,"lang",navigator?.language||"en");if(x.has(t))return {lang:t,t9nLocale:t};let n=t.slice(0,2);return {lang:t,t9nLocale:x.has(n)?n:"en"}}var m=new WeakMap,h=new WeakMap,_=new WeakMap;async function F(e,t,n){h.set(e,t),m.set(e,T(e._hostElement,["lang"],()=>{b(e,n);})),await b(e,n);}function U(e){m.get(e)?.disconnect(),m.delete(e),h.delete(e);}async function b(e,t){let{lang:n,t9nLocale:r}=R(e._hostElement);if(n===e._lang&&r===e._t9nLocale||(n!==e._lang&&(e._lang=n),r===e._t9nLocale))return;let o=_.get(e);if(!o){let i=h.get(e)??"",s=e._hostElement.tagName.toLowerCase().replace("arcgis-",""),u=`${i}/${s}/t9n`,l=`${s}.t9n.`;o=await N(r,u,l);}e._t9nLocale=r,e._t9nStrings=o,await t?.call(e);}
60
+
61
+ var Status;
62
+ (function (Status) {
63
+ Status["MISSING"] = "missing";
64
+ Status["IN_PROGRESS"] = "inProgress";
65
+ Status["SUCCESS"] = "success";
66
+ Status["FAILED"] = "failed";
67
+ })(Status || (Status = {}));
68
+ var SimpleFieldTypes;
69
+ (function (SimpleFieldTypes) {
70
+ SimpleFieldTypes["NUMBER"] = "number";
71
+ SimpleFieldTypes["STRING"] = "string";
72
+ SimpleFieldTypes["DATE"] = "date";
73
+ SimpleFieldTypes["DATE_ONLY"] = "date-only";
74
+ SimpleFieldTypes["TIME_ONLY"] = "time-only";
75
+ SimpleFieldTypes["TIMESTAMP_OFFSET"] = "timestamp-offset";
76
+ SimpleFieldTypes["OID"] = "oid";
77
+ SimpleFieldTypes["GUID"] = "guid";
78
+ SimpleFieldTypes["UNKNOWN"] = "unknown";
79
+ })(SimpleFieldTypes || (SimpleFieldTypes = {}));
80
+ /**
81
+ * Returns true if the value is defined
82
+ * @param value - value to check
83
+ */
84
+ function isDefined(value) {
85
+ return value !== undefined && value !== null;
86
+ }
87
+ /**
88
+ * Returns the URL used for queries.
89
+ * E.g. SceneLayers need to use the FeatureLayer URL for queries.
90
+ * @param value - value to check
91
+ */
92
+ function getQueryURL(layer) {
93
+ if (layer.type === "scene") {
94
+ return layer.associatedLayer?.url;
95
+ }
96
+ return layer.url;
97
+ }
98
+
99
+ /**
100
+ * Returns additional field information from layer
101
+ * @param props - properties containing layer and fieldName
102
+ */
103
+ function getFieldInfo(props) {
104
+ const { layer, fieldName } = props;
105
+ let fieldInfo = undefined;
106
+ const { popupTemplate } = layer;
107
+ const popupFieldInfos = popupTemplate ? popupTemplate.fieldInfos : [];
108
+ (layer.type === "imagery-tile"
109
+ ? layer.rasterFields
110
+ : layer.type === "imagery" && layer.rasterFields?.length
111
+ ? layer.rasterFields
112
+ : layer.fields)
113
+ .filter((layerField) => layerField.name === fieldName)
114
+ .forEach((layerField) => {
115
+ const list = popupFieldInfos
116
+ ? popupFieldInfos.filter((fInfo) => fInfo.fieldName === layerField.name)
117
+ : null;
118
+ const label = list?.length ? list[0].label : null;
119
+ if (/^raster.(item|service)pixelvalue/iu.test(fieldName)) {
120
+ // e.g. "Raster.ServicePixelValue" | "Raster.ItemPixelValue" | "Raster.ServicePixelValue.Raw"
121
+ // layer.rasterFields reports them as type "string"
122
+ layerField.type = "double";
123
+ }
124
+ const featureFilterField = {
125
+ layerField,
126
+ label: label || layerField.alias || layerField.name
127
+ };
128
+ featureFilterField.codedValues = getCodedValues(fieldName, props);
129
+ _getSimpleFieldType(featureFilterField);
130
+ if (featureFilterField.simpleFieldType) {
131
+ fieldInfo = featureFilterField;
132
+ } // else can't use field
133
+ });
134
+ return fieldInfo;
135
+ }
136
+ /**
137
+ * Returns feature count in layer
138
+ * @param props - properties containing layer and fieldName
139
+ */
140
+ async function getFeatureCount(props) {
141
+ props.statisticsStatus = Status.IN_PROGRESS;
142
+ const { layer, view } = props;
143
+ if (layer.type === "imagery" || layer.type === "imagery-tile" || layer.type === "stream") {
144
+ throw new Error("could not get feature count");
145
+ }
146
+ try {
147
+ return await getFeatureCountCommon(layer, view);
148
+ }
149
+ catch {
150
+ return;
151
+ }
152
+ }
153
+ /**
154
+ * Returns summary statistics
155
+ * @param props - properties containing layer and fieldName
156
+ */
157
+ async function getStatistics(props) {
158
+ const { layer, view, fieldName, fieldInfo, modules } = props;
159
+ if (layer.type === "imagery" || layer.type === "imagery-tile") {
160
+ throw new Error("could not get statistics for ImageryLayer/ImageryTileLayer");
161
+ }
162
+ if (!fieldInfo ||
163
+ fieldInfo.layerField.type === "oid" ||
164
+ fieldInfo.layerField.type === "guid" ||
165
+ fieldInfo.layerField.type === "global-id") {
166
+ const count = await getFeatureCount(props);
167
+ return Promise.resolve({ totalCount: count, nullcount: 0 } /*StatisticsResult*/);
168
+ }
169
+ try {
170
+ const result = await modules.summaryStatistics({
171
+ layer,
172
+ view,
173
+ field: fieldName
174
+ });
175
+ if (!isDefined(result.count)) {
176
+ // statistics is unusable
177
+ throw new Error("could not get statistics");
178
+ }
179
+ // if we hit maxRecordCount other stats values are probably not correct either
180
+ const hitMaxRecordCount = "sourceJSON" in layer && layer.sourceJSON.maxRecordCount === result.count;
181
+ // count only contains features with a value (!= null)
182
+ if (isDefined(result.nullcount) && !hitMaxRecordCount) {
183
+ // we can add the feature count without null and the count of nulls
184
+ const stats /*StatisticsResult*/ = { ...result, totalCount: result.count + result.nullcount };
185
+ return stats;
186
+ }
187
+ else {
188
+ // we want the total feature count
189
+ // happens e.g. for SceneLayers with older stats cache
190
+ const count = await getFeatureCount(props);
191
+ const stats = { ...result, totalCount: count };
192
+ return stats;
193
+ }
194
+ }
195
+ catch (error) {
196
+ throw new Error("could not get statistics");
197
+ }
198
+ }
199
+ /**
200
+ * Returns unique values
201
+ * @param props - properties containing layer and fieldName
202
+ */
203
+ async function getUniqueValues(props) {
204
+ const { layer, view, fieldName, modules } = props;
205
+ if (layer.type === "imagery" || layer.type === "imagery-tile") {
206
+ throw new Error("could not get unique values for ImageryLayer/ImageryTileLayer");
207
+ }
208
+ if (layer.type === "feature" && !layer.url) {
209
+ layer.outFields = ["*"];
210
+ }
211
+ try {
212
+ const result = await modules.uniqueValues({
213
+ layer,
214
+ view,
215
+ field: fieldName
216
+ });
217
+ return result;
218
+ }
219
+ catch {
220
+ throw new Error("could not get unique values");
221
+ }
222
+ }
223
+ function _getSimpleFieldType(featureFilterField) {
224
+ switch (featureFilterField.layerField.type) {
225
+ case "string":
226
+ featureFilterField.simpleFieldType = SimpleFieldTypes.STRING;
227
+ break;
228
+ case "date":
229
+ featureFilterField.simpleFieldType = SimpleFieldTypes.DATE;
230
+ break;
231
+ case "timestamp-offset":
232
+ featureFilterField.simpleFieldType = SimpleFieldTypes.TIMESTAMP_OFFSET;
233
+ break;
234
+ case "date-only":
235
+ featureFilterField.simpleFieldType = SimpleFieldTypes.DATE_ONLY;
236
+ break;
237
+ case "time-only":
238
+ featureFilterField.simpleFieldType = SimpleFieldTypes.TIME_ONLY;
239
+ break;
240
+ case "oid":
241
+ featureFilterField.simpleFieldType = SimpleFieldTypes.OID;
242
+ break;
243
+ case "guid":
244
+ case "global-id":
245
+ featureFilterField.simpleFieldType = SimpleFieldTypes.GUID;
246
+ break;
247
+ case "small-integer":
248
+ case "big-integer":
249
+ case "integer":
250
+ case "single":
251
+ case "double":
252
+ case "long":
253
+ featureFilterField.simpleFieldType = SimpleFieldTypes.NUMBER;
254
+ break;
255
+ }
256
+ }
257
+ function getCodedValues(fieldName, props) {
258
+ const { layer, modules } = props;
259
+ if (layer.type !== "feature") {
260
+ return;
261
+ }
262
+ const typeIdField = layer.typeIdField;
263
+ const types = layer.types;
264
+ let fieldDomains = undefined;
265
+ const field = layer.fields.find((field) => field.name === fieldName);
266
+ const fieldDomain = field.domain;
267
+ if (typeIdField && types) {
268
+ // layer has types
269
+ if (typeIdField === fieldName) {
270
+ // this is the field with the types
271
+ fieldDomains = types.map((type) =>
272
+ // fake coded Values
273
+ ({
274
+ code: type.id,
275
+ name: type.name
276
+ }));
277
+ }
278
+ else {
279
+ // field does not have types; look farther inside the types
280
+ fieldDomains = [];
281
+ types.forEach((type) => {
282
+ if (!type.domains || !type.domains[fieldName] || type.domains[fieldName].type === "inherited") {
283
+ const domain = fieldDomain;
284
+ if (domain?.codedValues) {
285
+ domain.codedValues.forEach(async (codedValue) => {
286
+ let found = false;
287
+ fieldDomains.forEach((codedVal) => {
288
+ if (codedVal.code === codedValue.code) {
289
+ found = true;
290
+ if (`, ${codedVal.name},`.indexOf(`, ${codedValue.name},`) === -1) {
291
+ codedVal.name += `, ${codedValue.name}`;
292
+ }
293
+ }
294
+ });
295
+ if (!found) {
296
+ fieldDomains.push(modules.esriLang.clone(codedValue));
297
+ }
298
+ });
299
+ }
300
+ }
301
+ else if (type.domains?.[fieldName]?.codedValues) {
302
+ type.domains[fieldName].codedValues.forEach(async (codedValue) => {
303
+ let found = false;
304
+ fieldDomains.forEach((codedVal) => {
305
+ if (codedVal.code === codedValue.code) {
306
+ found = true;
307
+ if (`, ${codedVal.name},`.indexOf(`, ${codedValue.name},`) === -1) {
308
+ codedVal.name += `, ${codedValue.name}`;
309
+ }
310
+ }
311
+ });
312
+ if (!found) {
313
+ fieldDomains.push(modules.esriLang.clone(codedValue));
314
+ }
315
+ });
316
+ }
317
+ });
318
+ }
319
+ if (!fieldDomains?.length && fieldDomain?.codedValues) {
320
+ fieldDomains = modules.esriLang.clone(fieldDomain.codedValues);
321
+ }
322
+ }
323
+ else if (fieldDomain?.codedValues) {
324
+ // domains directly on the layer field
325
+ fieldDomains = field.domain.codedValues;
326
+ }
327
+ return fieldDomains?.length ? fieldDomains : null;
328
+ }
329
+
330
+ /**
331
+ * Returns up to 5 features from the layer to get sample data
332
+ * @param props - properties containing layer and view
333
+ */
334
+ async function getOneFeature(props) {
335
+ const { view, layer } = props;
336
+ if (layer.type === "imagery" || layer.type === "imagery-tile") {
337
+ throw new Error("could not get feature");
338
+ }
339
+ if ((layer.type === "feature" && !layer.url) || layer.type === "wfs") {
340
+ // feature collection or wfs
341
+ const query = layer.createQuery();
342
+ query.start = 0;
343
+ query.num = 5;
344
+ query.outFields = ["*"];
345
+ const result = await layer.queryFeatures(query);
346
+ if (result.features?.length) {
347
+ return result;
348
+ }
349
+ else {
350
+ throw new Error("could not get feature");
351
+ }
352
+ }
353
+ else {
354
+ // service
355
+ if (!view) {
356
+ // get feature from service directly
357
+ return _queryOneFeature(props);
358
+ }
359
+ const layerView = (await view.whenLayerView(layer));
360
+ const hasAllFields = layerView.availableFields.length === layer.fields.length;
361
+ if (hasAllFields || (["stream", "ogc-feature"].indexOf(layer.type) > -1 && layerView.availableFields.length > 0)) {
362
+ // features on client have all fields
363
+ // or we can't make a server query, so we take what we can get
364
+ const query = layer.createQuery();
365
+ query.start = 0;
366
+ query.num = 5;
367
+ query.outFields = ["*"];
368
+ const result = await layerView.queryFeatures(query);
369
+ if (result.features?.length) {
370
+ // client side features
371
+ return result;
372
+ }
373
+ else {
374
+ // get feature from service
375
+ return _queryOneFeature(props);
376
+ }
377
+ }
378
+ else {
379
+ // get feature from service
380
+ return _queryOneFeature(props);
381
+ }
382
+ }
383
+ }
384
+ async function _queryOneFeature(props) {
385
+ const { layer, modules } = props;
386
+ if (["imagery", "imagery-tile", "stream", "ogc-feature"].indexOf(layer.type) > -1) {
387
+ throw new Error("cannot get feature from service");
388
+ }
389
+ const query = new modules.Query({
390
+ where: "1=1",
391
+ outFields: ["*"],
392
+ returnGeometry: false
393
+ });
394
+ return layer.queryFeatures(query);
395
+ }
396
+ /**
397
+ * Returns feature count of layer
398
+ * @param layer - FeatureLayer | WFSLayer | OGCFeatureLayer | StreamLayer | CSVLayer
399
+ * @param mapView - View
400
+ */
401
+ async function getFeatureCountCommon(layer, view) {
402
+ if (layer.type === "feature" && !layer.url) {
403
+ return getFeatureCountForCollection(layer);
404
+ }
405
+ else if (layer.type === "feature" ||
406
+ layer.type === "csv" ||
407
+ layer.type === "scene" ||
408
+ layer.type === "wfs" ||
409
+ layer.type === "geojson") {
410
+ return await layer.queryFeatureCount();
411
+ }
412
+ else if (view && (layer.type === "stream" || layer.type === "ogc-feature")) {
413
+ return getFeatureCountFromView(layer, view);
414
+ }
415
+ return undefined;
416
+ }
417
+ /**
418
+ * Returns feature count of feature collection layer
419
+ * @param layer - FeatureLayer
420
+ */
421
+ async function getFeatureCountForCollection(layer) {
422
+ const query = layer.createQuery();
423
+ query.outFields = ["*"];
424
+ const result = await layer.queryFeatures(query);
425
+ if (result.features?.length) {
426
+ return result.features.length;
427
+ }
428
+ else {
429
+ throw new Error("could not get feature count");
430
+ }
431
+ }
432
+ /**
433
+ * Returns feature count of feature collection layer
434
+ * @param layer - StreamLayer | OGCFeatureLayer
435
+ */
436
+ async function getFeatureCountFromView(layer, view) {
437
+ // we can only get the features from the map
438
+ const layerView = (await view.whenLayerView(layer));
439
+ return layerView.queryFeatureCount();
440
+ }
441
+
442
+ const fieldInfoScss = ":host{height:100%}.container{padding:6px;background-color:white}.title{font-weight:bold;padding:5px 0}.missing{color:#a9a9a9}.data{color:#a9a9a9}.count{white-space:nowrap}.section{padding:6px 0}.statistics-row{border-top:1px solid #e0e0e0;padding:6px 0;display:flex;justify-content:space-between}.statistics-row-top-values{border-top:1px solid #e0e0e0;padding:20px 0 6px 0;display:flex;justify-content:space-between}";
443
+
444
+ const ArcgisFieldInfo = /*@__PURE__*/ proxyCustomElement(class ArcgisFieldInfo extends HTMLElement {
445
+ constructor() {
446
+ super();
447
+ this.__registerHost();
448
+ this.__attachShadow();
449
+ this.arcgisFieldInfoComplete = createEvent(this, "arcgisFieldInfoComplete", 7);
450
+ this.view = undefined;
451
+ this.layer = undefined;
452
+ this.fieldName = undefined;
453
+ this.hideStatistics = false;
454
+ this.oneFeatureResponse = undefined;
455
+ this.oneFeatureResponseStatus = Status.MISSING;
456
+ this.statistics = undefined;
457
+ this.statisticsStatus = Status.MISSING;
458
+ this.uniqueValues = undefined;
459
+ this.uniqueValuesStatus = Status.MISSING;
460
+ this._lang = "";
461
+ this._t9nLocale = "";
462
+ this._t9nStrings = undefined;
463
+ }
464
+ //--------------------------------------------------------------------------
465
+ //
466
+ // Lifecycle
467
+ //
468
+ //--------------------------------------------------------------------------
469
+ async componentWillLoad() {
470
+ await F(this, getAssetPath("./assets"));
471
+ const esriLang = await importCoreLang();
472
+ const esriConfig = await importConfig();
473
+ const intl = await importIntl();
474
+ const Query = await importRestSupportQuery();
475
+ const summaryStatistics = await importSmartMappingStatisticsSummaryStatistics();
476
+ const uniqueValues = await importSmartMappingStatisticsUniqueValues();
477
+ const { view, layer, fieldName, hideStatistics } = this;
478
+ let sublayerFL;
479
+ if (layer.declaredClass === "esri.layers.support.Sublayer") {
480
+ // need to create a FeatureLayer
481
+ const sublayer = layer;
482
+ const { whenOnce } = await importCoreReactiveUtils();
483
+ if (view)
484
+ await whenOnce(() => !view.updating);
485
+ sublayerFL = await sublayer.createFeatureLayer();
486
+ await sublayerFL.load();
487
+ }
488
+ this.props = {
489
+ view,
490
+ layer: sublayerFL || layer,
491
+ fieldName,
492
+ hideStatistics,
493
+ modules: { esriLang, esriConfig, intl, Query, summaryStatistics, uniqueValues }
494
+ };
495
+ // required for initial load
496
+ this.props.fieldInfo = getFieldInfo(this.props);
497
+ // we don't know if the SceneLayer has an associated FL
498
+ // don't prompt for a login if it's not accessible
499
+ if (layer.type === "scene") {
500
+ esriConfig.request.interceptors?.push({
501
+ urls: `${getQueryURL(layer)}/${layer.layerId}`,
502
+ before(params) {
503
+ params.requestOptions.authMode = "no-prompt";
504
+ }
505
+ });
506
+ }
507
+ this.oneFeatureResponseStatus = Status.IN_PROGRESS;
508
+ try {
509
+ const result = await getOneFeature(this.props);
510
+ this.oneFeatureResponse = result;
511
+ this.oneFeatureResponseStatus = Status.SUCCESS;
512
+ }
513
+ catch {
514
+ this.oneFeatureResponseStatus = Status.FAILED;
515
+ }
516
+ if (layer.type === "stream") {
517
+ this.uniqueValuesStatus = Status.FAILED;
518
+ this.statisticsStatus = Status.FAILED;
519
+ return;
520
+ }
521
+ if (hideStatistics) {
522
+ this.uniqueValuesStatus = Status.FAILED;
523
+ }
524
+ else {
525
+ this.uniqueValuesStatus = Status.IN_PROGRESS;
526
+ try {
527
+ const uniqueValues = await getUniqueValues(this.props);
528
+ this.uniqueValues = uniqueValues;
529
+ if (uniqueValues?.uniqueValueInfos?.length) {
530
+ this.uniqueValuesStatus = Status.SUCCESS;
531
+ }
532
+ else {
533
+ this.uniqueValuesStatus = Status.FAILED;
534
+ }
535
+ }
536
+ catch (error) {
537
+ this.uniqueValuesStatus = Status.FAILED;
538
+ }
539
+ }
540
+ if (hideStatistics) {
541
+ this.statisticsStatus = Status.FAILED;
542
+ }
543
+ else {
544
+ this.statisticsStatus = Status.IN_PROGRESS;
545
+ try {
546
+ const statistics = await getStatistics(this.props);
547
+ if (!isDefined(statistics.totalCount) &&
548
+ isDefined(statistics.count) &&
549
+ this.uniqueValuesStatus === Status.SUCCESS) {
550
+ // take null values count from unique values and add with non-null count from statistics
551
+ const infos = this.uniqueValues.uniqueValueInfos;
552
+ for (let i = 0; i < infos.length; i += 1) {
553
+ const info = infos[i];
554
+ if (info.value === null) {
555
+ statistics.totalCount = info.count + statistics.count;
556
+ break;
557
+ }
558
+ }
559
+ if (!isDefined(statistics.totalCount)) {
560
+ // no null values
561
+ statistics.totalCount = statistics.count;
562
+ }
563
+ }
564
+ this.statistics = statistics;
565
+ this.statisticsStatus = Status.SUCCESS;
566
+ }
567
+ catch {
568
+ this.statisticsStatus = Status.FAILED;
569
+ }
570
+ }
571
+ }
572
+ async componentDidLoad() {
573
+ // once component is visible make other calls
574
+ const { props } = this;
575
+ const { modules } = props;
576
+ modules.intl.setLocale(this._lang);
577
+ // modules.intl.setLocale(this.locale) not returning the correct formatting for e.g. it-ch
578
+ }
579
+ disconnectedCallback() {
580
+ U(this);
581
+ }
582
+ // --------------------------------------------------------------------------
583
+ //
584
+ // Render Methods
585
+ //
586
+ //--------------------------------------------------------------------------
587
+ render() {
588
+ const { props } = this;
589
+ const { fieldInfo } = props;
590
+ if (!fieldInfo) {
591
+ return h$1(Fragment, null);
592
+ }
593
+ return (h$1(Host, null, h$1("div", { class: "container" }, this.renderFieldType(), this.renderFieldAlias(), this.renderFieldDescription(), this.renderFieldValueType(), this.renderFieldSampleValue(), this.renderFieldFormat(), this.renderFieldStatistics())));
594
+ }
595
+ renderFieldType() {
596
+ const { _t9nStrings, props } = this;
597
+ const { fieldInfo } = props;
598
+ const fieldType = this._getFieldTypeLabel(fieldInfo.layerField.type);
599
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldType), h$1("div", null, fieldType)));
600
+ }
601
+ renderFieldAlias() {
602
+ const { _t9nStrings, props } = this;
603
+ const { fieldInfo } = props;
604
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldAlias), h$1("div", null, fieldInfo.label)));
605
+ }
606
+ renderFieldDescription() {
607
+ const { _t9nStrings, props } = this;
608
+ const { layer } = props;
609
+ if (layer.type !== "feature") {
610
+ return h$1(Fragment, null);
611
+ }
612
+ const { fieldInfo } = props;
613
+ const description = fieldInfo.layerField.description;
614
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldDescription), h$1("div", { class: {
615
+ missing: !description
616
+ } }, description || _t9nStrings.fieldDescriptionNotSet)));
617
+ }
618
+ renderFieldValueType() {
619
+ const { _t9nStrings, props } = this;
620
+ const { layer } = props;
621
+ if (layer.type !== "feature") {
622
+ return h$1(Fragment, null);
623
+ }
624
+ const { fieldInfo } = props;
625
+ const fieldValueType = this._getFieldValueTypeCamelCase(fieldInfo);
626
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldValueType), h$1("div", { class: !fieldValueType ? "missing" : "" }, fieldValueType
627
+ ? _t9nStrings.fieldValueTypes[fieldValueType]
628
+ : _t9nStrings.fieldValueTypeNotSet)));
629
+ }
630
+ renderFieldSampleValue() {
631
+ const { oneFeatureResponse, oneFeatureResponseStatus, statisticsStatus, statistics, uniqueValuesStatus, uniqueValues, _t9nStrings, props } = this;
632
+ const { layer, fieldName, fieldInfo } = props;
633
+ const { statistics: statStrings } = _t9nStrings;
634
+ let value;
635
+ if (["imagery", "imagery-tile"].indexOf(layer.type) > -1) {
636
+ return h$1(Fragment, null);
637
+ }
638
+ if (layer.type !== "stream" &&
639
+ [SimpleFieldTypes.STRING, SimpleFieldTypes.OID, SimpleFieldTypes.GUID].indexOf(this._getStatisticsType(fieldInfo)) > -1 &&
640
+ uniqueValuesStatus !== Status.FAILED) {
641
+ // we show top values
642
+ return h$1(Fragment, null);
643
+ }
644
+ if (oneFeatureResponseStatus === Status.SUCCESS) {
645
+ // find first valid value entry
646
+ oneFeatureResponse.features.forEach((feature) => {
647
+ if (value === undefined || (value === null && feature.attributes[fieldName] !== null)) {
648
+ value = feature.attributes[fieldName];
649
+ }
650
+ });
651
+ }
652
+ else if (statisticsStatus === Status.SUCCESS) {
653
+ // use statistics min value
654
+ value = statistics.min;
655
+ }
656
+ else if (uniqueValuesStatus === Status.SUCCESS) {
657
+ // use a non-null value
658
+ value = uniqueValues.uniqueValueInfos?.[0]?.value || uniqueValues.uniqueValueInfos?.[1]?.value;
659
+ }
660
+ const codedValues = fieldInfo.codedValues;
661
+ if (isDefined(value)) {
662
+ if (codedValues) {
663
+ value = codedValues.find((codedValue) => value === codedValue.code)?.name || value;
664
+ }
665
+ else {
666
+ value = this._getDisplayString(value);
667
+ }
668
+ }
669
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldSampleValue), h$1("div", { class: (oneFeatureResponseStatus === Status.FAILED &&
670
+ statisticsStatus === Status.FAILED &&
671
+ uniqueValuesStatus === Status.FAILED) ||
672
+ !isDefined(value)
673
+ ? "missing"
674
+ : "" }, oneFeatureResponseStatus === Status.SUCCESS ||
675
+ statisticsStatus === Status.SUCCESS ||
676
+ uniqueValuesStatus === Status.SUCCESS
677
+ ? !isDefined(value)
678
+ ? statStrings.allNulls
679
+ : `${value}`
680
+ : oneFeatureResponseStatus === Status.FAILED &&
681
+ statisticsStatus === Status.FAILED &&
682
+ uniqueValuesStatus === Status.FAILED
683
+ ? _t9nStrings.fieldSampleNotAvailable
684
+ : _t9nStrings.fieldSampleRetrieving)));
685
+ }
686
+ renderFieldFormat() {
687
+ const { _t9nStrings, props } = this;
688
+ const { fieldName, fieldInfo, layer } = props;
689
+ if (["single", "double", "long"].indexOf(fieldInfo.layerField.type) === -1) {
690
+ return h$1(Fragment, null);
691
+ }
692
+ const popupTemplate = layer.popupTemplate;
693
+ if (popupTemplate?.fieldInfos) {
694
+ const popFieldInfos = popupTemplate.fieldInfos?.filter((fieldInfo) => fieldInfo.fieldName === fieldName);
695
+ if (popFieldInfos?.length) {
696
+ const popFieldInfo = popFieldInfos[0];
697
+ if (isDefined(popFieldInfo?.format?.places)) {
698
+ const num = popFieldInfo.format.places;
699
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldDecimalPlaces), h$1("div", null,
700
+ // eslint-disable-next-line no-template-curly-in-string
701
+ _t9nStrings.fieldNumDecimalPlaces.replace("${number}", num.toString()))));
702
+ }
703
+ }
704
+ }
705
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldDecimalPlaces), h$1("div", { class: "missing" }, _t9nStrings.fieldDecimalPlacesNotAvailable)));
706
+ }
707
+ renderFieldStatistics() {
708
+ const { statisticsStatus, uniqueValuesStatus, hideStatistics, _t9nStrings, props } = this;
709
+ const { layer, fieldInfo } = props;
710
+ if (hideStatistics) {
711
+ this.arcgisFieldInfoComplete.emit();
712
+ return h$1(Fragment, null);
713
+ }
714
+ if (["stream", "imagery", "imagery-tile"].indexOf(layer.type) > -1 ||
715
+ ["long"].indexOf(fieldInfo.layerField.type) > -1) {
716
+ // can't get statistics
717
+ this.arcgisFieldInfoComplete.emit();
718
+ return h$1(Fragment, null);
719
+ }
720
+ return (h$1("div", { class: "section" }, h$1("div", { class: "title" }, _t9nStrings.fieldStatistics), !statisticsStatus || statisticsStatus === Status.MISSING || statisticsStatus === Status.IN_PROGRESS ? (h$1("div", { key: "field-info-statistics-content", class: "missing" }, _t9nStrings.fieldStatisticsRetrieving)) : statisticsStatus === Status.FAILED && uniqueValuesStatus !== Status.SUCCESS ? (this.renderNoStatistics()) : (h$1("div", { key: "field-info-statistics-content", ref: () => this.arcgisFieldInfoComplete.emit() }, this.renderStatistics()))));
721
+ }
722
+ renderNoStatistics() {
723
+ const { _t9nStrings } = this;
724
+ return (h$1("div", { key: "field-info-statistics-content", ref: () => this.arcgisFieldInfoComplete.emit(), class: "missing" }, _t9nStrings.fieldStatisticsNotAvailable));
725
+ }
726
+ renderStatistics() {
727
+ const { props } = this;
728
+ const { fieldInfo } = props;
729
+ switch (this._getStatisticsType(fieldInfo)) {
730
+ case SimpleFieldTypes.NUMBER:
731
+ return this.renderNumberStatistics();
732
+ case SimpleFieldTypes.STRING:
733
+ case SimpleFieldTypes.OID:
734
+ case SimpleFieldTypes.GUID:
735
+ return this.renderStringStatistics();
736
+ case SimpleFieldTypes.DATE:
737
+ case SimpleFieldTypes.DATE_ONLY:
738
+ case SimpleFieldTypes.TIME_ONLY:
739
+ case SimpleFieldTypes.TIMESTAMP_OFFSET:
740
+ return this.renderDateStatistics();
741
+ default:
742
+ return h$1(Fragment, null);
743
+ }
744
+ }
745
+ renderNumberStatistics() {
746
+ const { statistics, _t9nStrings } = this;
747
+ if (!statistics) {
748
+ return this.renderNoStatistics();
749
+ }
750
+ const { statistics: statStrings } = _t9nStrings;
751
+ return (h$1("div", null, h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.numberOfValues), h$1("div", { class: "data" }, this._printNumValue(statistics.totalCount))), isDefined(statistics.sum) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.sumOfValues), h$1("div", { class: "data" }, this._printNumValue(statistics.sum)))) : null, isDefined(statistics.min) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.minimum), h$1("div", { class: "data" }, this._printNumValue(statistics.min)))) : null, isDefined(statistics.max) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.maximum), h$1("div", { class: "data" }, this._printNumValue(statistics.max)))) : null, isDefined(statistics.avg) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.average), h$1("div", { class: "data" }, this._printNumValue(statistics.avg)))) : null, isDefined(statistics.stddev) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.standardDeviation), h$1("div", { class: "data" }, this._printNumValue(statistics.stddev)))) : null, this.renderNullValues()));
752
+ }
753
+ renderStringStatistics() {
754
+ const { statistics, uniqueValuesStatus, _t9nStrings } = this;
755
+ const { statistics: statStrings } = _t9nStrings;
756
+ return (h$1("div", null, h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.numberOfValues), uniqueValuesStatus !== Status.SUCCESS ? (h$1("div", { class: "missing" }, "--")) : (h$1("div", { class: "data" }, this._printNumValue(statistics?.totalCount)))), this.renderNullValues(), this.renderTopValues()));
757
+ }
758
+ renderDateStatistics() {
759
+ // TODO UTC offset
760
+ const { statistics, view, props, _t9nStrings } = this;
761
+ const { fieldInfo } = props;
762
+ if (!statistics) {
763
+ return this.renderNoStatistics();
764
+ }
765
+ const { statistics: statStrings } = _t9nStrings;
766
+ const dateRange = statistics.max - statistics.min;
767
+ const years = Math.floor(dateRange / 31536000000);
768
+ let months = Math.floor((dateRange - years * 31536000000) / 2628000000);
769
+ let days = Math.ceil((dateRange - months * 2628000000) / 86400000);
770
+ if (days >= 30) {
771
+ months += 1;
772
+ days = 0;
773
+ }
774
+ let timeSpan = years === 1
775
+ ? statStrings.timeSpanOptions.year
776
+ : years > 1
777
+ ? // eslint-disable-next-line no-template-curly-in-string
778
+ statStrings.timeSpanOptions.years.replace("${years}", years.toString())
779
+ : "";
780
+ timeSpan += years > 0 && (months > 0 || days > 0) ? ", " : "";
781
+ timeSpan +=
782
+ months === 1
783
+ ? statStrings.timeSpanOptions.month
784
+ : months > 1
785
+ ? // eslint-disable-next-line no-template-curly-in-string
786
+ statStrings.timeSpanOptions.months.replace("${months}", months.toString())
787
+ : "";
788
+ timeSpan += months > 0 && days > 0 ? ", " : "";
789
+ timeSpan +=
790
+ days === 1
791
+ ? statStrings.timeSpanOptions.day
792
+ : days > 1
793
+ ? // eslint-disable-next-line no-template-curly-in-string
794
+ statStrings.timeSpanOptions.days.replace("${days}", days.toString())
795
+ : "";
796
+ const showStats = fieldInfo.simpleFieldType !== SimpleFieldTypes.TIMESTAMP_OFFSET ||
797
+ !view ||
798
+ view.timeZone !== "unknown";
799
+ const isTimeOnly = fieldInfo.simpleFieldType === SimpleFieldTypes.TIME_ONLY;
800
+ return (h$1("div", null, h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.numberOfValues), h$1("div", { class: "data" }, this._printNumValue(statistics?.totalCount))), showStats && isDefined(statistics.min) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, isTimeOnly ? statStrings.minimumTime : statStrings.minimumDate), h$1("div", { class: "data" }, `${this._getDisplayString(statistics.min)}`))) : null, showStats && isDefined(statistics.max) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, isTimeOnly ? statStrings.maximumTime : statStrings.maximumDate), h$1("div", { class: "data" }, `${this._getDisplayString(statistics.max)}`))) : null, showStats && isDefined(statistics.avg) ? (h$1("div", { class: "statistics-row" }, h$1("div", null, isTimeOnly ? statStrings.averageTime : statStrings.averageDate), h$1("div", { class: "data" }, `${this._getDisplayString(statistics.avg)}`))) : null, showStats && !isTimeOnly && isDefined(statistics.min) && isDefined(statistics.max) && dateRange > 0 ? (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.timespan), h$1("div", { class: "data" }, timeSpan))) : null, this.renderNullValues()));
801
+ }
802
+ renderTopValues() {
803
+ const { uniqueValues, uniqueValuesStatus, _t9nStrings, props } = this;
804
+ const { fieldInfo } = props;
805
+ const { statistics: statStrings } = _t9nStrings;
806
+ if (uniqueValues?.uniqueValueInfos?.length) {
807
+ const infos = uniqueValues.uniqueValueInfos;
808
+ infos.sort((a, b) => (a.count < b.count ? 1 : a.count > b.count ? -1 : 0));
809
+ const codedValues = fieldInfo.codedValues;
810
+ const values = infos
811
+ .filter((info) => info.value !== null)
812
+ .filter((info, idx) => info && idx < 10)
813
+ .map((info) => {
814
+ let value = info.value;
815
+ if (codedValues) {
816
+ codedValues.forEach((codeValue) => {
817
+ if (value === codeValue.code) {
818
+ value = codeValue.name;
819
+ }
820
+ });
821
+ }
822
+ else {
823
+ value = this._getDisplayString(value);
824
+ }
825
+ return (h$1("div", { class: "statistics-row" }, h$1("div", { class: "data" }, `${value}`), h$1("div", { class: `$"data" $"count"` }, this._printNumValue(info.count))));
826
+ });
827
+ if (!values.length) {
828
+ return h$1(Fragment, null);
829
+ }
830
+ return (h$1("div", null, h$1("div", { class: "statistics-row-top-values" }, h$1("div", null, infos.length > 10 ? statStrings.topTenValues : statStrings.topValues), h$1("div", null, statStrings.count)), values));
831
+ }
832
+ else {
833
+ return (h$1("div", null, h$1("div", { class: "statistics-row-top-values" }, h$1("div", null, statStrings.topValues), h$1("div", null, statStrings.count)), h$1("div", { class: "statistics-row" }, h$1("div", { class: "missing" }, uniqueValuesStatus === Status.FAILED
834
+ ? _t9nStrings.fieldUniqueValuesNotAvailable
835
+ : _t9nStrings.fieldSampleRetrieving))));
836
+ }
837
+ }
838
+ renderNullValues() {
839
+ const { statistics, uniqueValues, _t9nStrings } = this;
840
+ const { statistics: statStrings } = _t9nStrings;
841
+ let count = statistics?.nullcount;
842
+ if (!isDefined(count) && uniqueValues) {
843
+ const infos = uniqueValues.uniqueValueInfos;
844
+ for (let i = 0; i < infos.length; i += 1) {
845
+ const info = infos[i];
846
+ if (info.value === null) {
847
+ count = info.count;
848
+ break;
849
+ }
850
+ }
851
+ }
852
+ return (h$1("div", { class: "statistics-row" }, h$1("div", null, statStrings.numberOfNulls), !isDefined(count) ? (h$1("div", { class: "missing" }, "--")) : (h$1("div", { class: "data" }, `${Number.parseInt(count).toLocaleString()}`))));
853
+ }
854
+ // --------------------------------------------------------------------------
855
+ //
856
+ // Private methods
857
+ //
858
+ // --------------------------------------------------------------------------
859
+ _getFieldTypeLabel(fieldType) {
860
+ const { _t9nStrings } = this;
861
+ const fieldTypes = _t9nStrings.fieldTypes;
862
+ switch (fieldType) {
863
+ case "small-integer":
864
+ return fieldTypes.smallInteger;
865
+ case "big-integer":
866
+ return fieldTypes.bigInteger;
867
+ case "integer":
868
+ return fieldTypes.integer;
869
+ case "single":
870
+ return fieldTypes.single;
871
+ case "double":
872
+ return fieldTypes.double;
873
+ case "long":
874
+ return fieldTypes.long;
875
+ case "string":
876
+ return fieldTypes.string;
877
+ case "date":
878
+ return fieldTypes.date;
879
+ case "date-only":
880
+ return fieldTypes.dateOnly;
881
+ case "time-only":
882
+ return fieldTypes.timeOnly;
883
+ case "timestamp-offset":
884
+ return fieldTypes.timestampOffset;
885
+ case "oid":
886
+ return fieldTypes.oid;
887
+ case "guid":
888
+ return fieldTypes.guid;
889
+ case "global-id":
890
+ return fieldTypes.globalId;
891
+ default:
892
+ return fieldTypes.string;
893
+ }
894
+ }
895
+ _getStatisticsType(fieldInfo) {
896
+ // "count-or-amount","percentage-or-ratio","measurement","unique-identifier","coordinate","binary"
897
+ // "name-or-title","type-or-category","description","location-or-place-name","ordered-or-ranked","date-and-time"
898
+ switch (fieldInfo.layerField.type) {
899
+ case "small-integer":
900
+ case "big-integer":
901
+ case "integer":
902
+ case "single":
903
+ case "double": {
904
+ if (fieldInfo.codedValues) {
905
+ return SimpleFieldTypes.STRING;
906
+ }
907
+ switch (fieldInfo.layerField.valueType) {
908
+ case "name-or-title":
909
+ case "type-or-category":
910
+ case "description":
911
+ case "location-or-place-name":
912
+ case "ordered-or-ranked":
913
+ case "binary":
914
+ //case "date-and-time":
915
+ return SimpleFieldTypes.STRING;
916
+ default:
917
+ return SimpleFieldTypes.NUMBER;
918
+ }
919
+ }
920
+ case "string":
921
+ return SimpleFieldTypes.STRING;
922
+ case "date":
923
+ return SimpleFieldTypes.DATE;
924
+ case "timestamp-offset":
925
+ return SimpleFieldTypes.TIMESTAMP_OFFSET;
926
+ case "date-only":
927
+ return SimpleFieldTypes.DATE_ONLY;
928
+ case "time-only":
929
+ return SimpleFieldTypes.TIME_ONLY;
930
+ default:
931
+ return SimpleFieldTypes.STRING;
932
+ }
933
+ }
934
+ _getFieldValueTypeCamelCase(field) {
935
+ switch (field.layerField.valueType) {
936
+ case "count-or-amount":
937
+ return "countOrAmount";
938
+ case "percentage-or-ratio":
939
+ return "percentageOrRatio";
940
+ case "unique-identifier":
941
+ return "uniqueIdentifier";
942
+ case "name-or-title":
943
+ return "nameOrTitle";
944
+ case "type-or-category":
945
+ return "typeOrCategory";
946
+ case "location-or-place-name":
947
+ return "locationOrPlaceName";
948
+ case "ordered-or-ranked":
949
+ return "orderedOrRanked";
950
+ case "date-and-time":
951
+ return "dateAndTime";
952
+ default:
953
+ return field.layerField.valueType;
954
+ }
955
+ }
956
+ _getDisplayString(value) {
957
+ const { props } = this;
958
+ const { fieldInfo } = props;
959
+ switch (fieldInfo.simpleFieldType) {
960
+ case SimpleFieldTypes.DATE:
961
+ return this._getDateString(value);
962
+ case SimpleFieldTypes.TIMESTAMP_OFFSET:
963
+ return this._getTimestampOffsetString(value);
964
+ case SimpleFieldTypes.DATE_ONLY:
965
+ return this._getDateOnlyString(value);
966
+ case SimpleFieldTypes.TIME_ONLY:
967
+ return this._getTimeOnlyString(value);
968
+ case SimpleFieldTypes.NUMBER:
969
+ return this._getNumberString(value);
970
+ case SimpleFieldTypes.GUID:
971
+ return this._getGuidString(value);
972
+ default:
973
+ // string, oid, global-id
974
+ return `${value}`;
975
+ }
976
+ }
977
+ _getDateString(value) {
978
+ const { modules, view } = this.props;
979
+ if (view && view.timeZone === "unknown") {
980
+ return modules.intl.formatDate(value, {
981
+ ...modules.intl.convertDateFormatToIntlOptions("short-date-short-time"),
982
+ timeZone: "utc",
983
+ timeZoneName: "shortOffset"
984
+ });
985
+ }
986
+ else {
987
+ // known issues with formatting it-CH
988
+ return modules.intl.formatDate(value, {
989
+ ...modules.intl.convertDateFormatToIntlOptions("short-date-short-time"),
990
+ timeZone: view?.timeZone || "system"
991
+ });
992
+ }
993
+ }
994
+ _getTimestampOffsetString(value) {
995
+ /*
996
+ const timestamp = "2023-03-19T16:00:00.123-01:00";
997
+ console.log("timestamp", timestamp);
998
+ console.log(
999
+ "local Time",
1000
+ intl.formatTimestamp(timestamp, intl.convertDateFormatToIntlOptions("short-date-short-time"))
1001
+ );
1002
+ console.log(
1003
+ "mapView Time (except unknown)",
1004
+ intl.formatTimestamp(timestamp, {
1005
+ ...intl.convertDateFormatToIntlOptions("short-date-short-time"),
1006
+ timeZone: view.timeZone,
1007
+ })
1008
+ );
1009
+ console.log(
1010
+ "UTC Time (mapView time unknown)",
1011
+ intl.formatTimestamp(timestamp, {
1012
+ ...intl.convertDateFormatToIntlOptions("short-date-short-time"),
1013
+ timeZone: "utc",
1014
+ timeZoneName: "shortOffset"
1015
+ })
1016
+ );
1017
+ console.log(
1018
+ "Raw",
1019
+ intl.formatTimestamp(timestamp, {
1020
+ ...intl.convertDateFormatToIntlOptions("short-date-short-time"),
1021
+ timeZoneName: "shortOffset"
1022
+ })
1023
+ );
1024
+ */
1025
+ const { modules, view } = this.props;
1026
+ if (typeof value === "string") {
1027
+ // raw value from layer
1028
+ if (view && view.timeZone === "unknown") {
1029
+ return modules.intl.formatTimestamp(value, {
1030
+ ...modules.intl.convertDateFormatToIntlOptions("short-date-short-time"),
1031
+ timeZone: "utc",
1032
+ timeZoneName: "shortOffset"
1033
+ });
1034
+ }
1035
+ else {
1036
+ return modules.intl.formatTimestamp(value, {
1037
+ ...modules.intl.convertDateFormatToIntlOptions("short-date-short-time"),
1038
+ timeZone: view?.timeZone || "system"
1039
+ });
1040
+ }
1041
+ }
1042
+ else {
1043
+ // e.g. UNIX timestamp from statistics call
1044
+ return this._getDateString(value);
1045
+ }
1046
+ }
1047
+ _getDateOnlyString(value) {
1048
+ const { props } = this;
1049
+ const { modules } = props;
1050
+ return modules.intl.formatDateOnly(value, modules.intl.convertDateFormatToIntlOptions("short-date"));
1051
+ }
1052
+ _getTimeOnlyString(value) {
1053
+ const { props } = this;
1054
+ const { modules } = props;
1055
+ if (typeof value === "string") {
1056
+ return modules.intl.formatTimeOnly(value, modules.intl.convertDateFormatToIntlOptions("short-date-long-time"));
1057
+ }
1058
+ else {
1059
+ // UNIX timestamp
1060
+ return modules.intl.formatDate(value, {
1061
+ ...modules.intl.convertDateFormatToIntlOptions("long-time"),
1062
+ timeZone: "utc"
1063
+ });
1064
+ }
1065
+ }
1066
+ _getGuidString(value) {
1067
+ return value.startsWith("{") ? value : `{${value}}`;
1068
+ }
1069
+ _getNumberString(value) {
1070
+ return this.props.modules.intl.formatNumber(value);
1071
+ }
1072
+ _printNumValue(value) {
1073
+ return isDefined(value) ? this._getNumberString(Math.round(value * 100) / 100) : `--`;
1074
+ }
1075
+ static get assetsDirs() { return ["assets"]; }
1076
+ get _hostElement() { return this; }
1077
+ static get style() { return fieldInfoScss; }
1078
+ }, [1, "arcgis-field-info", {
1079
+ "view": [16],
1080
+ "layer": [16],
1081
+ "fieldName": [1, "field-name"],
1082
+ "hideStatistics": [4, "hide-statistics"],
1083
+ "oneFeatureResponse": [32],
1084
+ "oneFeatureResponseStatus": [32],
1085
+ "statistics": [32],
1086
+ "statisticsStatus": [32],
1087
+ "uniqueValues": [32],
1088
+ "uniqueValuesStatus": [32],
1089
+ "_lang": [32],
1090
+ "_t9nLocale": [32],
1091
+ "_t9nStrings": [32]
1092
+ }]);
1093
+ function defineCustomElement() {
1094
+ if (typeof customElements === "undefined") {
1095
+ return;
1096
+ }
1097
+ const components = ["arcgis-field-info"];
1098
+ components.forEach(tagName => { switch (tagName) {
1099
+ case "arcgis-field-info":
1100
+ if (!customElements.get(tagName)) {
1101
+ customElements.define(tagName, ArcgisFieldInfo);
1102
+ }
1103
+ break;
1104
+ } });
1105
+ }
1106
+ defineCustomElement();
1107
+
1108
+ export { ArcgisFieldInfo as A, C, F, U, defineCustomElement as d, importIntl as i };