@geolibre/core 2.7.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1030,6 +1030,80 @@ interface AttributeFormFieldConfig {
1030
1030
  interface AttributeFormConfig {
1031
1031
  fields: AttributeFormFieldConfig[];
1032
1032
  }
1033
+ /**
1034
+ * How a popup renders one field's value (issue #2113). `"auto"` reproduces the
1035
+ * untyped rendering the Identify popup has always done — sanitized KML
1036
+ * `description` markup, an inline `data:image/*;base64` value as a thumbnail,
1037
+ * anything else stringified. The remaining kinds are explicit author choices
1038
+ * so a popup never has to guess from the value.
1039
+ */
1040
+ type PopupFieldKind = "auto" | "text" | "number" | "date" | "link" | "image";
1041
+ /** How a `"date"` field's value is written out. */
1042
+ type PopupDateFormat = "date" | "datetime" | "time" | "iso" | "year";
1043
+ /** Value formatting for one popup field. Every part is optional. */
1044
+ interface PopupFieldFormat {
1045
+ /** Fixed number of decimals for a `"number"` field. */
1046
+ decimals?: number;
1047
+ /** Group thousands with the locale's separator (`"number"` fields). */
1048
+ thousands?: boolean;
1049
+ /** Date rendering for a `"date"` field; defaults to `"date"`. */
1050
+ dateFormat?: PopupDateFormat;
1051
+ /** Text placed before the formatted value. */
1052
+ prefix?: string;
1053
+ /** Text placed after the formatted value, e.g. a unit suffix. */
1054
+ suffix?: string;
1055
+ /** Link text for a `"link"` field; the value itself is used when unset. */
1056
+ linkLabel?: string;
1057
+ }
1058
+ /** One field's entry in a layer's popup configuration. */
1059
+ interface PopupFieldConfig {
1060
+ /** Feature property key. */
1061
+ field: string;
1062
+ /** Display label shown instead of the raw field name. */
1063
+ label?: string;
1064
+ /** How the value renders; defaults to `"auto"`. */
1065
+ kind?: PopupFieldKind;
1066
+ format?: PopupFieldFormat;
1067
+ /** Include this field in the hover tooltip's short subset. */
1068
+ hover?: boolean;
1069
+ }
1070
+ /**
1071
+ * Per-layer configuration for what a viewer sees when they interact with a
1072
+ * feature (issue #2113): which fields the Identify popup shows, in what order,
1073
+ * under what labels and formatting, plus an optional hover tooltip.
1074
+ *
1075
+ * A layer with no `popup` block behaves exactly as it did before this existed:
1076
+ * the layer name as the heading, then every property as a key/value row.
1077
+ * {@link GeoLibreLayer.fieldVisibility} stays authoritative — a `"hidden"` or
1078
+ * `"excluded"` field is dropped even when a popup config names it.
1079
+ */
1080
+ interface LayerPopupConfig {
1081
+ /** `false` suppresses the Identify popup for this layer. Defaults to `true`. */
1082
+ click?: boolean;
1083
+ /** `true` shows a hover tooltip built from the `hover` fields. Defaults to `false`. */
1084
+ hover?: boolean;
1085
+ /** Field whose value titles the popup instead of the layer name. */
1086
+ titleField?: string;
1087
+ /**
1088
+ * MapLibre expression source producing the popup title. Wins over
1089
+ * {@link titleField}; when it fails or produces nothing the title falls
1090
+ * through to `titleField`, and only then to the layer name.
1091
+ */
1092
+ titleExpression?: string;
1093
+ /**
1094
+ * MapLibre expression source producing the whole popup body as text, for
1095
+ * authors who want a sentence rather than a table. When it evaluates, it
1096
+ * replaces the field rows.
1097
+ */
1098
+ bodyExpression?: string;
1099
+ /** `false` drops the synthetic `id` row. Defaults to `true`. */
1100
+ showFeatureId?: boolean;
1101
+ /**
1102
+ * The fields to show and their order. An empty or absent list keeps today's
1103
+ * behavior: every visible property, in the feature's own key order.
1104
+ */
1105
+ fields?: PopupFieldConfig[];
1106
+ }
1033
1107
  /**
1034
1108
  * A virtual field attached to a vector layer (QGIS Field Calculator → "Create
1035
1109
  * virtual field", issue #1321): a column defined by a MapLibre expression that
@@ -1072,6 +1146,60 @@ interface LayerVirtualField {
1072
1146
  */
1073
1147
  errorCount?: number;
1074
1148
  }
1149
+ /**
1150
+ * Quick filters (issue #2114): the data-driven filter controls a layer offers
1151
+ * in its Quick Filters section. What persists is the *control state* — field,
1152
+ * kind, chosen values — not the compiled output; `quick-filters.ts` compiles it
1153
+ * to a MapLibre filter at sync time so a saved filter can always be reopened
1154
+ * and edited.
1155
+ */
1156
+ /** Which control a quick filter renders, and how it compiles. */
1157
+ type QuickFilterKind = "categorical" | "range" | "date" | "text";
1158
+ /** The comparison a `text` quick filter applies (always case-insensitive). */
1159
+ type QuickFilterTextOperator = "contains" | "startsWith" | "equals";
1160
+ /**
1161
+ * How a date field stores its values, deciding whether a `date` quick filter
1162
+ * compares ISO text or epoch numbers. `iso` covers both `YYYY-MM-DD` and full
1163
+ * `YYYY-MM-DDTHH:MM:SSZ` timestamps: only the leading `YYYY-MM-DD` slice is
1164
+ * compared, so a trailing time, a milliseconds fraction, or a `Z` cannot break
1165
+ * a boundary. Mirrors (deliberately, in a smaller form) the value kinds the
1166
+ * Time Slider's `detectValueKind` reports.
1167
+ */
1168
+ type QuickFilterDateKind = "iso" | "epochMs" | "epochS";
1169
+ /** A single filter control persisted on a layer. */
1170
+ interface LayerQuickFilter {
1171
+ /** Stable id, used as the React key and for edits/removal. */
1172
+ id: string;
1173
+ /** The feature property this control narrows. */
1174
+ field: string;
1175
+ kind: QuickFilterKind;
1176
+ /**
1177
+ * `false` keeps the control configured but inert, so a filter can be muted
1178
+ * without losing the values chosen for it. Defaults to enabled.
1179
+ */
1180
+ enabled?: boolean;
1181
+ /**
1182
+ * `categorical`: the chosen values. An empty (or omitted) selection means
1183
+ * "every value" and compiles to nothing — unchecking the last box clears the
1184
+ * filter rather than emptying the map.
1185
+ */
1186
+ values?: (string | number | boolean)[];
1187
+ /** `range`: inclusive bounds. `null`/omitted leaves that side open. */
1188
+ min?: number | null;
1189
+ max?: number | null;
1190
+ /**
1191
+ * `date`: inclusive `YYYY-MM-DD` bounds. The end day is included in full, so
1192
+ * a timestamp field filtered to a single day keeps that whole day.
1193
+ */
1194
+ start?: string | null;
1195
+ end?: string | null;
1196
+ /** `date`: how the field stores its values. Defaults to `iso`. */
1197
+ dateKind?: QuickFilterDateKind;
1198
+ /** `text`: the comparison. Defaults to `contains`. */
1199
+ operator?: QuickFilterTextOperator;
1200
+ /** `text`: the needle. Blank means no constraint. */
1201
+ text?: string;
1202
+ }
1075
1203
  /** Persisted refresh policy and most recent synchronization result for a layer. */
1076
1204
  interface LayerConnection {
1077
1205
  /** Owning layer id. Repeated here so records remain self-describing when exported. */
@@ -1124,6 +1252,41 @@ interface LayerCapabilities {
1124
1252
  /** Can the layer data/symbology be exported/downloaded. */
1125
1253
  export?: boolean;
1126
1254
  }
1255
+ /**
1256
+ * Application privilege identifiers defining discrete capabilities in GeoLibre.
1257
+ */
1258
+ type AppPrivilege = "layers:edit" | "layers:add-remote" | "layers:add-local" | "processing:run" | "processing:sidecar" | "project:save" | "project:share" | "project:share-public" | "plugins:install" | "assistant:use" | "connections:manage" | "export:data" | "export:image" | "settings:manage";
1259
+ /**
1260
+ * Standard named roles bundling application privileges.
1261
+ */
1262
+ type AppRole = "viewer" | "editor" | "publisher" | "administrator" | "custom";
1263
+ /**
1264
+ * Ephemeral application capabilities state defining the active role, effective privileges,
1265
+ * and optional restriction reason for the current session/deployment.
1266
+ */
1267
+ interface AppCapabilities {
1268
+ /**
1269
+ * The assigned application role. `custom` once an ad-hoc `grantAppPrivilege` /
1270
+ * `revokeAppPrivilege` has moved the set away from the bundle a named role
1271
+ * defines, so the role never claims a shape the privileges do not have.
1272
+ */
1273
+ role: AppRole;
1274
+ /** List of granted privileges for the active role or custom configuration. */
1275
+ privileges: AppPrivilege[];
1276
+ /**
1277
+ * Optional human-readable reason covering the whole set (e.g. "Action disabled
1278
+ * by deployment policy"), used for any privilege without its own.
1279
+ */
1280
+ reason?: string;
1281
+ /**
1282
+ * Per-privilege reasons, and why they exist: two privileges can be withheld by
1283
+ * different causes — a role bundle plus a licence limit, say — and a single
1284
+ * `reason` would make the second revocation relabel the first, so every gate
1285
+ * would explain itself with whichever cause happened to be recorded last.
1286
+ * Takes precedence over `reason` for the privileges it names.
1287
+ */
1288
+ privilegeReasons?: Partial<Record<AppPrivilege, string>>;
1289
+ }
1127
1290
  interface GeoLibreLayer {
1128
1291
  id: string;
1129
1292
  name: string;
@@ -1156,6 +1319,11 @@ interface GeoLibreLayer {
1156
1319
  * with the project like {@link joins}.
1157
1320
  */
1158
1321
  attributeForm?: AttributeFormConfig;
1322
+ /**
1323
+ * Popup and hover-tooltip design for this layer, authored in the Style
1324
+ * panel's Popup section. Absent means the default full-property dump.
1325
+ */
1326
+ popup?: LayerPopupConfig;
1159
1327
  /**
1160
1328
  * Persistent attribute joins applied to this layer's features, in order.
1161
1329
  * The joined columns are materialized into `geojson` feature properties (so
@@ -1183,6 +1351,15 @@ interface GeoLibreLayer {
1183
1351
  timeFilter?: unknown[];
1184
1352
  /** Transient MapLibre expression applied by the iframe embed API. */
1185
1353
  embedFilter?: unknown[];
1354
+ /**
1355
+ * Data-driven filter controls authored in the layer's Quick Filters section
1356
+ * (issue #2114). Unlike {@link timeFilter} and {@link embedFilter} this is
1357
+ * persisted control *state*, not a compiled expression: `@geolibre/map`
1358
+ * compiles it at sync time (see `compileQuickFilters`) and combines the
1359
+ * result with the transient filters and the rule-based visibility filter, so
1360
+ * a host page's filter and a user's filter narrow the layer together.
1361
+ */
1362
+ quickFilters?: LayerQuickFilter[];
1186
1363
  sourcePath?: string;
1187
1364
  /**
1188
1365
  * Id of the {@link LayerGroup} this layer belongs to, or `undefined` when the
@@ -1470,6 +1647,8 @@ interface MapPreferences {
1470
1647
  * from Controls -> Elevation.
1471
1648
  */
1472
1649
  showPointerElevation: boolean;
1650
+ /** Whether the built-in 3D terrain control and terrain surface are enabled. */
1651
+ terrainEnabled: boolean;
1473
1652
  /**
1474
1653
  * Notation the status bar reports the pointer coordinate in: `"dd"` decimal
1475
1654
  * degrees (default), `"dms"` degrees/minutes/seconds, `"ddm"` degrees and
@@ -1976,6 +2155,8 @@ interface LayerLibraryEntry {
1976
2155
  virtualFields?: LayerVirtualField[];
1977
2156
  /** Per-field edit-widget/constraint configuration to reapply. */
1978
2157
  attributeForm?: AttributeFormConfig;
2158
+ /** Popup/tooltip design to reapply. */
2159
+ popup?: LayerPopupConfig;
1979
2160
  /**
1980
2161
  * Embedded features, present only for a layer whose source cannot be
1981
2162
  * re-read (in-memory features) or whose local file may be unavailable.
@@ -2005,6 +2186,8 @@ interface GeoLibreProject {
2005
2186
  basemapStyleUrl: string;
2006
2187
  basemapVisible: boolean;
2007
2188
  basemapOpacity: number;
2189
+ /** Custom colour for the Blank background. Null uses the current theme default. */
2190
+ blankBackgroundColor?: string | null;
2008
2191
  layers: GeoLibreLayer[];
2009
2192
  /**
2010
2193
  * Layer selected in the Layers panel when the project was saved. Omitted by
@@ -2670,6 +2853,96 @@ declare function getRegionalBasemapById(id: string | undefined): RegionalBasemap
2670
2853
  /** Whether a style URL is a regional-basemap sentinel, resolvable or not. */
2671
2854
  declare function isRegionalBasemapSentinel(styleUrl: string | undefined): boolean;
2672
2855
  //#endregion
2856
+ //#region src/cesium-imagery.d.ts
2857
+ /**
2858
+ * Maps the project's basemap onto imagery the Cesium globe can render.
2859
+ *
2860
+ * The 2D panes render `basemapStyleUrl` through MapLibre, which understands
2861
+ * vector GL styles and GeoLibre's `geolibre://` sentinels. Cesium understands
2862
+ * neither: it draws imagery from tile providers only. So a globe pane that
2863
+ * simply mounted the store basemap would show nothing, which is why the pane
2864
+ * used to hardcode Ion World Imagery (with a token) or OpenStreetMap (without)
2865
+ * and ignore the user's choice entirely — leaving a bright globe beside dark 2D
2866
+ * panes and breaking the "same map, different projection" promise the multi-map
2867
+ * grid makes.
2868
+ *
2869
+ * This module is the translation. It is deliberately **engine-free** — it
2870
+ * returns a plain descriptor and never imports Cesium — so it lives in
2871
+ * `@geolibre/core` beside the basemap catalogs it reads, the 2D and 3D
2872
+ * renderers share one source of truth, and the Cesium chunk boundary in
2873
+ * `vite.config.ts` stays intact.
2874
+ *
2875
+ * Three outcomes are possible, and the caller has to handle all three (see
2876
+ * {@link CesiumBasemapImagery}): tiles to draw, nothing to draw, or "no raster
2877
+ * equivalent exists — pick your own default".
2878
+ */
2879
+ /**
2880
+ * What the globe should draw underneath the project's data layers.
2881
+ *
2882
+ * - `xyz` — a tile template to render, with the credit and zoom bounds that go
2883
+ * with it.
2884
+ * - `none` — the user chose the blank basemap; draw a bare ellipsoid.
2885
+ * - `default` — this basemap has no raster equivalent (a custom style URL, a
2886
+ * provider style, an offline archive). The renderer falls back to whatever it
2887
+ * can offer, which is Ion World Imagery when a token is configured and
2888
+ * OpenStreetMap otherwise.
2889
+ */
2890
+ type CesiumBasemapImagery = {
2891
+ kind: "none";
2892
+ } | {
2893
+ kind: "default";
2894
+ } | {
2895
+ kind: "xyz";
2896
+ /** Tile template with `{z}`/`{x}`/`{y}` placeholders. */
2897
+ template: string;
2898
+ /** Credit to show on the globe, as the HTML the 2D map already uses. */
2899
+ attribution: string;
2900
+ /** Max native zoom of the source, so the globe overzooms rather than 404s. */
2901
+ maximumLevel?: number;
2902
+ /**
2903
+ * Tile row ordering. `"tms"` numbers rows from the bottom; absent means
2904
+ * standard XYZ. Cesium has no `scheme` option, so a TMS template needs
2905
+ * `{y}` swapped for its `{reverseY}` placeholder at render time.
2906
+ */
2907
+ scheme?: "tms";
2908
+ /**
2909
+ * A transparent overlay drawn directly above {@link template} — the
2910
+ * roads-and-labels tiles a hybrid basemap (Amap Hybrid) bakes in, so one
2911
+ * basemap selection still yields a labelled satellite globe.
2912
+ */
2913
+ overlayTemplate?: string;
2914
+ };
2915
+ /**
2916
+ * Whether two descriptors would draw the same thing.
2917
+ *
2918
+ * Descriptors are built fresh on every call, so two basemaps resolving to the
2919
+ * same analogue — OpenFreeMap `liberty` and `bright` are both the streets
2920
+ * tone — yield equal but distinct objects. A renderer that remembers the
2921
+ * descriptor it drew (to skip redundant work) must compare by value: a
2922
+ * reference check would miss that case and tear down and re-add an identical
2923
+ * tile provider, costing a flash and a round of re-requested tiles for no
2924
+ * visible change.
2925
+ */
2926
+ declare function sameCesiumImagery(a: CesiumBasemapImagery, b: CesiumBasemapImagery): boolean;
2927
+ /**
2928
+ * Translate a basemap style URL into imagery for the Cesium globe.
2929
+ *
2930
+ * Planetary and regional basemaps are already raster tile sets, so they carry
2931
+ * straight over — the globe shows the same Mars/Moon/Amap tiles the 2D panes
2932
+ * do. GeoLibre's own vector styles map to a keyless raster basemap of matching
2933
+ * tone, so switching the project to a dark basemap darkens the globe too.
2934
+ * Everything else reports `default`, leaving the choice of fallback imagery to
2935
+ * the renderer (which knows whether an Ion token is configured).
2936
+ *
2937
+ * A `geolibre://` sentinel that no longer resolves is treated as the default
2938
+ * basemap, mirroring what `resolveMapStyle` does for the 2D map rather than
2939
+ * handing the sentinel onward as if it were fetchable.
2940
+ *
2941
+ * @param styleUrl - The project's `basemapStyleUrl`.
2942
+ * @returns What the globe should draw beneath the data layers.
2943
+ */
2944
+ declare function basemapToCesiumImagery(styleUrl: string | undefined): CesiumBasemapImagery;
2945
+ //#endregion
2673
2946
  //#region src/geojson-z.d.ts
2674
2947
  /**
2675
2948
  * Returns true when any coordinate in the GeoJSON carries a finite, non-zero
@@ -3889,6 +4162,141 @@ declare function validateAttributeFormField(config: AttributeFormFieldConfig, pr
3889
4162
  */
3890
4163
  declare function validateAttributeFormValues(form: AttributeFormConfig | undefined, properties: Record<string, unknown>, options?: AttributeFormEvalOptions): AttributeFormValidation;
3891
4164
  //#endregion
4165
+ //#region src/popup.d.ts
4166
+ /** One resolved popup row, ready for the renderer. */
4167
+ interface PopupRow {
4168
+ /** Feature property key. */
4169
+ field: string;
4170
+ /** Label to print in the key column. */
4171
+ label: string;
4172
+ /** The raw property value, for kinds that need it (image `src`, link `href`). */
4173
+ value: unknown;
4174
+ /** The formatted value text. */
4175
+ text: string;
4176
+ /** How the renderer should draw the value. */
4177
+ kind: PopupFieldKind;
4178
+ /** Link text for a `"link"` row; falls back to the value. */
4179
+ linkLabel?: string;
4180
+ }
4181
+ /** Whether the Identify popup should open for a layer. Default: yes. */
4182
+ declare function isPopupClickEnabled(popup: LayerPopupConfig | undefined): boolean;
4183
+ /** Whether a hover tooltip should follow the pointer. Default: no. */
4184
+ declare function isPopupHoverEnabled(popup: LayerPopupConfig | undefined): boolean;
4185
+ /** The label a popup shows for a configured field. */
4186
+ declare function popupFieldLabel(config: PopupFieldConfig): string;
4187
+ /**
4188
+ * Property keys that never belong in a popup: GeoLibre's own internal columns
4189
+ * and the full-resolution companion of a photo thumbnail (an internal twin of
4190
+ * a value already shown, and often multiple megabytes of data URL).
4191
+ */
4192
+ declare function isInternalPopupField(key: string): boolean;
4193
+ /**
4194
+ * The property keys a popup may show, before any popup config narrows them:
4195
+ * the feature's own keys minus the internal ones and anything the author
4196
+ * marked `"hidden"` or `"excluded"`.
4197
+ */
4198
+ declare function visiblePopupFields(properties: Record<string, unknown>, fieldVisibility?: Record<string, FieldVisibility>): string[];
4199
+ /** Options for {@link formatPopupValue} and {@link resolvePopupRows}. */
4200
+ interface PopupFormatOptions {
4201
+ /**
4202
+ * BCP 47 tag for number/date formatting. Omitted means the runtime default,
4203
+ * which is what the browser uses for every other locale-aware rendering.
4204
+ */
4205
+ locale?: string;
4206
+ }
4207
+ /** Stringify a value the way the untyped popup always has. */
4208
+ declare function stringifyPopupValue(value: unknown): string;
4209
+ /**
4210
+ * Render one value as text under a field's kind and format. `"auto"` and
4211
+ * `"image"` values are returned verbatim (the renderer draws them itself);
4212
+ * every other kind is stringified, formatted, then wrapped in the configured
4213
+ * prefix/suffix.
4214
+ */
4215
+ declare function formatPopupValue(value: unknown, config?: Pick<PopupFieldConfig, "kind" | "format">, options?: PopupFormatOptions): string;
4216
+ /**
4217
+ * The properties a popup may read, with the author's hidden and excluded
4218
+ * fields and GeoLibre's internal columns removed.
4219
+ *
4220
+ * Expressions get this rather than the raw record. `["get", "ssn"]` in a title
4221
+ * or body would otherwise reach a column the author hid, printing it into the
4222
+ * popup — and onto the hover tooltip, which needs no click at all. The rest of
4223
+ * this module already honors `fieldVisibility` field by field; an expression
4224
+ * has no field list to filter, so the filtering has to happen to its input.
4225
+ */
4226
+ declare function visiblePopupProperties(properties: Record<string, unknown>, fieldVisibility?: Record<string, FieldVisibility>): Record<string, unknown>;
4227
+ /** Options for {@link resolvePopupRows}. */
4228
+ interface ResolvePopupRowsOptions extends PopupFormatOptions {
4229
+ popup?: LayerPopupConfig;
4230
+ fieldVisibility?: Record<string, FieldVisibility>;
4231
+ /** Resolve the hover subset (fields flagged `hover`) instead of the full list. */
4232
+ hover?: boolean;
4233
+ }
4234
+ /**
4235
+ * The rows a popup (or hover tooltip) should render for one feature's
4236
+ * properties.
4237
+ *
4238
+ * With no `popup.fields`, every visible property is returned in the feature's
4239
+ * own key order and left untyped, which is exactly what the popup did before
4240
+ * the designer existed. With a list, only the listed fields appear, in the
4241
+ * listed order, under their labels and formats — and a listed field the
4242
+ * feature does not carry is skipped rather than printed empty, so one config
4243
+ * can cover a layer whose features have ragged properties.
4244
+ *
4245
+ * `hover: true` narrows the list to fields flagged `hover`. A hover request
4246
+ * with no flagged field returns nothing: an author who turned the tooltip on
4247
+ * without choosing a field gets no tip rather than the whole table following
4248
+ * the pointer.
4249
+ */
4250
+ declare function resolvePopupRows(properties: Record<string, unknown>, options?: ResolvePopupRowsOptions): PopupRow[];
4251
+ /** Options for {@link resolvePopupTitle} and {@link resolvePopupBody}. */
4252
+ interface PopupExpressionOptions {
4253
+ /**
4254
+ * The author's field visibility, so an expression cannot read a hidden or
4255
+ * excluded column. Omitting it means nothing is hidden.
4256
+ */
4257
+ fieldVisibility?: Record<string, FieldVisibility>;
4258
+ /** The real feature, when the caller has one — feeds `["geometry-type"]`. */
4259
+ feature?: Feature | null;
4260
+ /** Map zoom for `["zoom"]`; defaults to 0. */
4261
+ zoom?: number;
4262
+ }
4263
+ /**
4264
+ * The heading a popup should show: the title expression's value, else the
4265
+ * title field's value, else the layer name. An expression that fails to
4266
+ * compile or evaluate, and a title field that is empty or hidden, both fall
4267
+ * back to the layer name rather than leaving the popup headless.
4268
+ */
4269
+ declare function resolvePopupTitle(layerName: string, properties: Record<string, unknown>, popup: LayerPopupConfig | undefined, options?: PopupExpressionOptions): string;
4270
+ /**
4271
+ * The title the author's own configuration produced, or `null` when there is
4272
+ * none — no title field or expression, or one that evaluated to nothing, or a
4273
+ * field the author hid.
4274
+ *
4275
+ * {@link resolvePopupTitle} is this plus the layer-name fallback. The hover
4276
+ * tooltip needs the two apart: a tip with no fields and no configured title
4277
+ * would be a box repeating the layer name, so it is suppressed — but that
4278
+ * decision has to rest on whether a title was *configured*, not on whether the
4279
+ * resolved text happens to equal the layer name. A city layer named "Olympia"
4280
+ * whose feature is also called "Olympia" is a real title, not a fallback.
4281
+ */
4282
+ declare function resolveConfiguredPopupTitle(properties: Record<string, unknown>, popup: LayerPopupConfig | undefined, options?: PopupExpressionOptions): string | null;
4283
+ /**
4284
+ * The popup body text when the author supplied a body expression, or `null`
4285
+ * when there is none (or it failed) and the field rows should render instead.
4286
+ */
4287
+ declare function resolvePopupBody(properties: Record<string, unknown>, popup: LayerPopupConfig | undefined, options?: PopupExpressionOptions): string | null;
4288
+ /**
4289
+ * Whether a value should render as an inline image thumbnail under `"auto"`.
4290
+ * Kept here so the renderer and the designer's preview agree on what counts.
4291
+ */
4292
+ declare function isInlineImageValue(value: unknown): value is string;
4293
+ /**
4294
+ * Whether a URL is safe to put in a popup `href`/`src`. Only http(s) and
4295
+ * inline raster data URLs: a `javascript:` or `data:text/html` value coming
4296
+ * from an untrusted GeoJSON must never become a live link.
4297
+ */
4298
+ declare function isSafePopupUrl(value: unknown, allowDataImage?: boolean): value is string;
4299
+ //#endregion
3892
4300
  //#region src/joins.d.ts
3893
4301
  /**
3894
4302
  * Match key for a persistent join: empty values (null/undefined/NaN/empty
@@ -4032,6 +4440,52 @@ interface ApplyVirtualFieldsResult {
4032
4440
  */
4033
4441
  declare function applyLayerVirtualFields(features: Feature[], fields: LayerVirtualField[] | undefined): ApplyVirtualFieldsResult;
4034
4442
  //#endregion
4443
+ //#region src/quick-filters.d.ts
4444
+ /**
4445
+ * Compile one quick filter to a MapLibre filter expression, or `null` when it
4446
+ * places no constraint (switched off, no field, or nothing chosen yet). A
4447
+ * control that has been added but not yet answered must never hide features.
4448
+ *
4449
+ * @param filter - The persisted control state.
4450
+ * @returns A MapLibre filter expression, or `null`.
4451
+ */
4452
+ declare function compileQuickFilter(filter: LayerQuickFilter): unknown[] | null;
4453
+ /**
4454
+ * Compile a layer's quick filters into a single MapLibre filter expression.
4455
+ * Multiple controls narrow the data together (`["all", …]`), matching how a
4456
+ * viewer reads a stack of filters. Returns `null` when no control constrains
4457
+ * anything, so the common path adds no filter at all.
4458
+ *
4459
+ * @param filters - The layer's persisted quick filters.
4460
+ * @returns A MapLibre filter expression, or `null`.
4461
+ */
4462
+ declare function compileQuickFilters(filters: readonly LayerQuickFilter[] | undefined): unknown[] | null;
4463
+ /**
4464
+ * The quick filters that actually constrain the layer right now. Drives the
4465
+ * "filtered" badge on the layer row and its count, so an active filter is
4466
+ * never mistaken for missing data.
4467
+ *
4468
+ * @param layer - The layer to inspect.
4469
+ * @returns The constraining filters, in their configured order.
4470
+ */
4471
+ declare function activeQuickFilters(layer: GeoLibreLayer): LayerQuickFilter[];
4472
+ /**
4473
+ * Whether the layer is currently narrowed by at least one quick filter.
4474
+ *
4475
+ * @param layer - The layer to inspect.
4476
+ * @returns `true` when a quick filter constrains the rendered features.
4477
+ */
4478
+ declare function hasActiveQuickFilter(layer: GeoLibreLayer): boolean;
4479
+ /**
4480
+ * Clear every chosen value while keeping the controls themselves, so "Clear
4481
+ * filters" is one action that leaves the layer's configured controls in place
4482
+ * for the next question.
4483
+ *
4484
+ * @param filters - The layer's persisted quick filters.
4485
+ * @returns The same controls with their selections emptied.
4486
+ */
4487
+ declare function clearQuickFilterValues(filters: readonly LayerQuickFilter[] | undefined): LayerQuickFilter[];
4488
+ //#endregion
4035
4489
  //#region src/capabilities.d.ts
4036
4490
  /**
4037
4491
  * Default inferred capabilities for a layer based on its type and metadata.
@@ -4052,6 +4506,95 @@ declare function resolveLayerCapabilities(layer: GeoLibreLayer | undefined): Req
4052
4506
  * Normalizes an untrusted capabilities value from JSON/project data.
4053
4507
  */
4054
4508
  declare function normalizeLayerCapabilities(raw: unknown): LayerCapabilities | undefined;
4509
+ /**
4510
+ * All supported application privilege identifiers in GeoLibre.
4511
+ */
4512
+ declare const ALL_APP_PRIVILEGES: readonly AppPrivilege[];
4513
+ /**
4514
+ * Standard privilege bundles for named application roles.
4515
+ */
4516
+ declare const ROLE_PRIVILEGES: Record<Exclude<AppRole, "custom">, readonly AppPrivilege[]>;
4517
+ /**
4518
+ * Resolves the effective privilege list for a given role, applying custom overrides if specified.
4519
+ */
4520
+ declare function resolveRolePrivileges(role: AppRole, customPrivileges?: readonly AppPrivilege[]): AppPrivilege[];
4521
+ /**
4522
+ * Intersects multiple sets of privileges to derive the effective permissions when multiple
4523
+ * policies (e.g. deployment, organization, and share link) apply simultaneously.
4524
+ */
4525
+ declare function intersectPrivileges(...privilegeSets: (readonly AppPrivilege[])[]): AppPrivilege[];
4526
+ /**
4527
+ * Evaluates whether an application capability set grants a specific privilege.
4528
+ */
4529
+ declare function hasAppPrivilege(capabilities: AppCapabilities | undefined, privilege: AppPrivilege): boolean;
4530
+ /**
4531
+ * Resolves why a privilege is withheld: its own reason if it has one, otherwise
4532
+ * the reason recorded for the capability set as a whole.
4533
+ *
4534
+ * @param capabilities - The active capability set, if any.
4535
+ * @param privilege - The privilege being explained.
4536
+ * @returns The reason, or undefined when none was recorded.
4537
+ */
4538
+ declare function appPrivilegeReason(capabilities: AppCapabilities | undefined, privilege: AppPrivilege): string | undefined;
4539
+ /**
4540
+ * Creates the default unconstrained application capabilities (Administrator role).
4541
+ */
4542
+ declare function createDefaultAppCapabilities(): AppCapabilities;
4543
+ /**
4544
+ * Normalizes an untrusted array of privilege strings.
4545
+ */
4546
+ declare function normalizeAppPrivileges(raw: unknown): AppPrivilege[] | undefined;
4547
+ //#endregion
4548
+ //#region src/deployment-capabilities.d.ts
4549
+ /** A privileged action a deployment can grant or withhold. */
4550
+ type DeploymentCapability =
4551
+ /** Create, save, or otherwise author the project itself. */
4552
+ "project:edit" |
4553
+ /** Bring new data into the map from files, URLs, or services. */
4554
+ "data:add" |
4555
+ /** Run processing/analysis tools (Whitebox, SQL, vector/raster, ML). */
4556
+ "processing:run" |
4557
+ /** Get data or renderings back out (export image, standalone HTML, …). */
4558
+ "export:data" |
4559
+ /** Install, load, or manage plugins. */
4560
+ "plugins:install" |
4561
+ /** Reach the application settings. */
4562
+ "settings:manage";
4563
+ /** Every capability, in a stable order for docs and tests. */
4564
+ declare const DEPLOYMENT_CAPABILITIES: readonly DeploymentCapability[];
4565
+ /**
4566
+ * The default grant: everything. `full` must stay the default so an existing
4567
+ * deployment that configures nothing behaves exactly as it did before.
4568
+ */
4569
+ declare const ALL_DEPLOYMENT_CAPABILITIES: ReadonlySet<DeploymentCapability>;
4570
+ /** Whether an arbitrary string names a capability we know how to enforce. */
4571
+ declare function isDeploymentCapability(value: string): value is DeploymentCapability;
4572
+ /**
4573
+ * The reserved token that grants nothing, for a deployment that wants the map
4574
+ * and nothing else.
4575
+ *
4576
+ * Needed because a blank value cannot mean it: the deployment env reader treats
4577
+ * an empty string as unset (a `-e VAR=` produces one), and unset has to keep
4578
+ * meaning "full" so existing deployments are unchanged. Without a spelling for
4579
+ * "none", the most locked-down configuration would be the one you cannot write.
4580
+ */
4581
+ declare const NO_DEPLOYMENT_CAPABILITIES = "none";
4582
+ /**
4583
+ * Parse a comma-separated capability list from deployment configuration.
4584
+ *
4585
+ * Unknown tokens are dropped rather than throwing: a newer container image may
4586
+ * be configured with a capability this build does not know about, and the safe
4587
+ * reading of an unrecognized grant is "not granted".
4588
+ *
4589
+ * Fails closed on purpose. An operator who set the variable at all meant to
4590
+ * restrict something, so a list that parses to nothing grants nothing — only an
4591
+ * absent (or blank) value falls back to the full set, which is the caller's job
4592
+ * to detect.
4593
+ *
4594
+ * @param raw - The configured value, e.g. `"data:add, export:data"`.
4595
+ * @returns The granted capabilities, with duplicates and unknown names removed.
4596
+ */
4597
+ declare function parseDeploymentCapabilities(raw: string): ReadonlySet<DeploymentCapability>;
4055
4598
  //#endregion
4056
4599
  //#region src/selection.d.ts
4057
4600
  /**
@@ -4307,6 +4850,7 @@ interface CreateProjectOptions {
4307
4850
  /** Celestial body the project describes; defaults to Earth when omitted. */
4308
4851
  ellipsoidId?: string;
4309
4852
  }
4853
+ declare function normalizeBlankBackgroundColor(value: unknown): string | null;
4310
4854
  declare function createDefaultMapView(): MapViewState;
4311
4855
  declare function createEmptyProject(name?: string, options?: CreateProjectOptions): GeoLibreProject;
4312
4856
  /**
@@ -4426,6 +4970,7 @@ declare function projectFromStore(state: {
4426
4970
  basemapStyleUrl: string;
4427
4971
  basemapVisible: boolean;
4428
4972
  basemapOpacity: number;
4973
+ blankBackgroundColor?: string | null;
4429
4974
  layers: GeoLibreLayer[];
4430
4975
  selectedLayerId?: string | null;
4431
4976
  layerGroups?: LayerGroup[];
@@ -4452,6 +4997,7 @@ declare function applyProjectToStore(project: GeoLibreProject): {
4452
4997
  basemapStyleUrl: string;
4453
4998
  basemapVisible: boolean;
4454
4999
  basemapOpacity: number;
5000
+ blankBackgroundColor: string | null;
4455
5001
  layers: GeoLibreLayer[];
4456
5002
  layerGroups: LayerGroup[];
4457
5003
  preferences: ProjectPreferences;
@@ -4727,6 +5273,7 @@ interface LayerLibraryConfigPatch {
4727
5273
  joins?: LayerJoin[];
4728
5274
  virtualFields?: LayerVirtualField[];
4729
5275
  attributeForm?: AttributeFormConfig;
5276
+ popup?: LayerPopupConfig;
4730
5277
  }
4731
5278
  /** How an entry should be re-added to the current project. */
4732
5279
  type LayerLibraryAddPlan =
@@ -5248,6 +5795,19 @@ declare function layerGroupMoveability(layers: GeoLibreLayer[], groups: LayerGro
5248
5795
  down: boolean;
5249
5796
  }>;
5250
5797
  //#endregion
5798
+ //#region src/pixel-format.d.ts
5799
+ /**
5800
+ * Trim a float sample to something readable. A 32-bit raster value decoded to a
5801
+ * JS double prints all 17 digits of its binary representation
5802
+ * (`48.11851119995117`), which is noise past the sensor's precision — six
5803
+ * significant digits is more than any COG carries. Integers are left alone so a
5804
+ * classification code is never shown in exponential form.
5805
+ *
5806
+ * @param value A decoded raster sample.
5807
+ * @returns The sample rendered for display.
5808
+ */
5809
+ declare function formatPixelValue(value: number): string;
5810
+ //#endregion
5251
5811
  //#region src/storymap-sample.d.ts
5252
5812
  /**
5253
5813
  * Build a ready-to-play sample story map.
@@ -5339,7 +5899,7 @@ type VectorToolKind = "buffer" | "centroids" | "convex-hull" | "dissolve" | "bou
5339
5899
  /** Identifiers of the network-analysis tools (`NETWORK_TOOLS` ids). */
5340
5900
  type NetworkToolKind = "isochrone" | "od-matrix" | "sequential-route";
5341
5901
  /** Identifiers of the spatial-statistics tools (`STATISTICS_TOOLS` ids). */
5342
- type StatisticsToolKind = "global-morans-i" | "local-morans-i" | "getis-ord-gi" | "average-nearest-neighbor" | "kernel-density" | "emerging-hot-spot";
5902
+ type StatisticsToolKind = "global-morans-i" | "local-morans-i" | "getis-ord-gi" | "average-nearest-neighbor" | "kernel-density" | "emerging-hot-spot" | "composite-score";
5343
5903
  /**
5344
5904
  * Identifiers of the raster processing tools. Kept in sync by hand with the
5345
5905
  * `id` fields of `RASTER_TOOLS` in `@geolibre/processing` (`raster-tools.ts`);
@@ -5373,6 +5933,7 @@ interface AppState {
5373
5933
  basemapStyleUrl: string;
5374
5934
  basemapVisible: boolean;
5375
5935
  basemapOpacity: number;
5936
+ blankBackgroundColor: string | null;
5376
5937
  layers: GeoLibreLayer[];
5377
5938
  layerGroups: LayerGroup[];
5378
5939
  preferences: ProjectPreferences;
@@ -5434,6 +5995,11 @@ interface AppState {
5434
5995
  * `null` when the set is empty). A single click leaves exactly one id here.
5435
5996
  */
5436
5997
  selectedFeatureIds: string[];
5998
+ /**
5999
+ * Store-layer id targeted by Identify, or {@link IDENTIFY_ALL_LAYERS_ID} for
6000
+ * the map-level mode that queries every visible queryable layer — vector,
6001
+ * DuckDB query, WMS, COG, NetCDF image and time-slider raster alike.
6002
+ */
5437
6003
  identifyLayerId: string | null;
5438
6004
  pointerCoords: [number, number] | null;
5439
6005
  /**
@@ -5459,7 +6025,23 @@ interface AppState {
5459
6025
  metadata: Record<string, unknown>;
5460
6026
  recentProjects: RecentProjectEntry[];
5461
6027
  attributeFilter: string;
6028
+ /**
6029
+ * What this *deployment* is allowed to do (issue #1673). Set once at startup
6030
+ * from the deployment configuration; never from a project file, a URL
6031
+ * parameter, or anything else the visitor controls, and never edited from the
6032
+ * UI. Defaults to the full set so an unconfigured build behaves as before.
6033
+ *
6034
+ * Excluded from the project file and from undo history: it describes the
6035
+ * server that served the app, not the document being edited.
6036
+ */
6037
+ deploymentCapabilities: ReadonlySet<DeploymentCapability>;
5462
6038
  collaboration: CollaborationState;
6039
+ /**
6040
+ * Ephemeral application capability model (issue #1672). Gating role and
6041
+ * privileges for the current session/deployment. Excluded from the project file
6042
+ * and undo history.
6043
+ */
6044
+ capabilities: AppCapabilities;
5463
6045
  ui: {
5464
6046
  processingOpen: boolean;
5465
6047
  /**
@@ -5569,6 +6151,7 @@ interface AppState {
5569
6151
  restoreEarthBasemap: (styleUrl: string) => void;
5570
6152
  setBasemapVisible: (visible: boolean) => void;
5571
6153
  setBasemapOpacity: (opacity: number) => void;
6154
+ setBlankBackgroundColor: (color: string | null) => void;
5572
6155
  setPreferences: (preferences: ProjectPreferences) => void;
5573
6156
  setLegend: (legend: LegendConfig) => void;
5574
6157
  /**
@@ -5704,11 +6287,34 @@ interface AppState {
5704
6287
  }) => void;
5705
6288
  setProjectPath: (path: string | null) => void;
5706
6289
  setProjectName: (name: string) => void;
6290
+ /**
6291
+ * Narrow what this deployment may do. Intended for the startup path only —
6292
+ * calling it later would leave already-rendered surfaces stale.
6293
+ */
6294
+ setDeploymentCapabilities: (capabilities: Iterable<DeploymentCapability>) => void;
5707
6295
  setRecentProjects: (projects: RecentProjectEntry[]) => void;
5708
6296
  rememberRecentProject: (entry: RecentProjectEntry) => void;
5709
6297
  forgetRecentProject: (path: string) => void;
5710
6298
  clearRecentProjects: () => void;
5711
6299
  markSaved: () => void;
6300
+ /**
6301
+ * Assign an application role (e.g. "viewer", "editor", "publisher", "administrator", "custom"),
6302
+ * deriving the effective privileges and optional reason.
6303
+ */
6304
+ setAppRole: (role: AppRole, options?: {
6305
+ customPrivileges?: AppPrivilege[];
6306
+ reason?: string;
6307
+ }) => void;
6308
+ /** Set explicit custom privileges and an optional reason. */
6309
+ setAppPrivileges: (privileges: AppPrivilege[], reason?: string) => void;
6310
+ /** Grant an individual application privilege. */
6311
+ grantAppPrivilege: (privilege: AppPrivilege) => void;
6312
+ /** Revoke an individual application privilege with an optional reason. */
6313
+ revokeAppPrivilege: (privilege: AppPrivilege, reason?: string) => void;
6314
+ /** Reset application capabilities back to the default unconstrained Administrator role. */
6315
+ resetAppCapabilities: () => void;
6316
+ /** Check if the current capabilities grant the requested privilege. */
6317
+ hasAppPrivilege: (privilege: AppPrivilege) => boolean;
5712
6318
  addLayer: (layer: GeoLibreLayer, beforeLayerId?: string | null) => void;
5713
6319
  removeLayer: (id: string) => void;
5714
6320
  updateLayer: (id: string, patch: Partial<GeoLibreLayer>) => void;
@@ -5754,6 +6360,12 @@ interface AppState {
5754
6360
  * the form config entirely.
5755
6361
  */
5756
6362
  setLayerAttributeForm: (id: string, attributeForm: AttributeFormConfig | undefined) => void;
6363
+ /**
6364
+ * Replace the layer's popup/tooltip design (which fields the Identify popup
6365
+ * shows, in what order and under what labels, plus the hover tooltip). Pass
6366
+ * `undefined` to restore the default full-property dump.
6367
+ */
6368
+ setLayerPopup: (id: string, popup: LayerPopupConfig | undefined) => void;
5757
6369
  /**
5758
6370
  * Replace the layer's editor tracking configuration (whether creation/edit
5759
6371
  * author and timestamp columns are maintained, and under which names). Pass
@@ -5766,6 +6378,13 @@ interface AppState {
5766
6378
  * Pass an empty array to detach every virtual field.
5767
6379
  */
5768
6380
  setLayerVirtualFields: (id: string, fields: LayerVirtualField[]) => void;
6381
+ /**
6382
+ * Replace a layer's quick filters (issue #2114). The controls persist with
6383
+ * the project and are compiled to a MapLibre filter at sync time, so this
6384
+ * only stores state — nothing re-derives the layer's data. Pass an empty
6385
+ * array to remove every control.
6386
+ */
6387
+ setLayerQuickFilters: (id: string, filters: LayerQuickFilter[]) => void;
5769
6388
  reorderLayer: (id: string, direction: "up" | "down") => void;
5770
6389
  moveLayer: (id: string, targetIndex: number) => void;
5771
6390
  moveLayersRelative: (layerIds: string[], targetLayerId: string, position: "above" | "below") => void;
@@ -5828,6 +6447,8 @@ interface AppState {
5828
6447
  deleteComment: (commentId: string) => void;
5829
6448
  setComments: (comments: ProjectComment[]) => void;
5830
6449
  }
6450
+ /** Reserved Identify target for querying every visible queryable layer at once. */
6451
+ declare const IDENTIFY_ALL_LAYERS_ID = "__geolibre_identify_all_layers__";
5831
6452
  /**
5832
6453
  * A fresh, inactive collaboration slice (no live session). Frozen (like
5833
6454
  * DEFAULT_LEGEND_CONFIG) to guard against accidental in-place mutation; store
@@ -5854,6 +6475,7 @@ declare const useAppStore: import("zustand").UseBoundStore<Omit<import("zustand"
5854
6475
  basemapStyleUrl: string;
5855
6476
  basemapVisible: boolean;
5856
6477
  basemapOpacity: number;
6478
+ blankBackgroundColor: string | null;
5857
6479
  storymap: StoryMap | null;
5858
6480
  comments: ProjectComment[];
5859
6481
  }>>;
@@ -5869,6 +6491,16 @@ declare function undo(): void;
5869
6491
  declare function redo(): void;
5870
6492
  /** Empty both the undo and redo stacks (e.g. on new/loaded project). */
5871
6493
  declare function clearHistory(): void;
6494
+ /**
6495
+ * React hook for consuming application capability state for a specific privilege.
6496
+ *
6497
+ * @param privilege - The privilege to check.
6498
+ * @returns `{ granted: boolean, reason?: string }`
6499
+ */
6500
+ declare function useAppCapability(privilege: AppPrivilege): {
6501
+ granted: boolean;
6502
+ reason?: string;
6503
+ };
5872
6504
  //#endregion
5873
6505
  //#region src/history.d.ts
5874
6506
  declare function setHistoryCoalesceMs(ms: number): void;
@@ -6241,11 +6873,27 @@ declare function geocodeReverse(lon: number, lat: number, options?: {
6241
6873
  //#region src/runtime-env.d.ts
6242
6874
  /**
6243
6875
  * Resolves runtime environment variables shared by the external-service clients
6244
- * (geocoding, routing). Build-time Vite vars (`import.meta.env`) are overlaid
6876
+ * (geocoding, routing). Allowlisted build-time vars (`__GEOLIBRE_BUILD_ENV__`,
6877
+ * injected by `vite.config.ts`) are overlaid
6245
6878
  * with project-supplied runtime vars (`window.__GEOLIBRE_RUNTIME_ENV__`, set
6246
6879
  * from project preferences) so a self-hosted endpoint can be configured without
6247
6880
  * a rebuild. Carries no React/MapLibre dependency so callers stay unit-testable.
6248
6881
  */
6882
+ /**
6883
+ * The allowlisted build-time environment, with no runtime overlay.
6884
+ *
6885
+ * For settings that must be fixed by the build and NOT overridable by a
6886
+ * `.geolibre.json` a user opened — the auth gate, the deployment profile, the
6887
+ * embed origin allowlist. Routing those through {@link getRuntimeEnvironment}
6888
+ * would let project-supplied `__GEOLIBRE_RUNTIME_ENV__` values relax them.
6889
+ *
6890
+ * Callers should prefer this over reading `import.meta.env` directly: a
6891
+ * whole-object read defeats Vite's per-key replacement and inlines every
6892
+ * `VITE_` var on the build machine into the chunk.
6893
+ *
6894
+ * @returns The build-time environment record.
6895
+ */
6896
+ declare function getBuildEnvironment(): Record<string, string | undefined>;
6249
6897
  /**
6250
6898
  * Merges build-time env with project runtime env (the latter wins). Falls back
6251
6899
  * to build-time env alone outside a browser (e.g. in tests).
@@ -6325,13 +6973,18 @@ declare function getMapboxAccessToken(env?: Record<string, string | undefined>):
6325
6973
  /**
6326
6974
  * Resolves the Cesium Ion access token from the runtime environment.
6327
6975
  *
6328
- * The 3D-globe view's world imagery and terrain need a Cesium Ion token. It is
6976
+ * Cesium World Terrain and Ion World Imagery need a Cesium Ion token. It is
6329
6977
  * supplied via `VITE_CESIUM_TOKEN` (baked in at build time from the bare
6330
6978
  * `CESIUM_TOKEN` env var, which `vite.config.ts` copies into the prefixed name)
6331
6979
  * or set at runtime through Settings → Environment variables
6332
6980
  * (`window.__GEOLIBRE_RUNTIME_ENV__`, which bypasses Vite's envPrefix allowlist,
6333
- * so a bare `CESIUM_TOKEN` entry works there too). When unset, the globe cannot
6334
- * render and the 3D view is not offered.
6981
+ * so a bare `CESIUM_TOKEN` entry works there too).
6982
+ *
6983
+ * The 3D-globe view itself does **not** need one: it draws the project basemap
6984
+ * as its base imagery whenever that basemap has a raster form (see
6985
+ * {@link basemapToCesiumImagery}), and falls back to Ion World Imagery — or, with
6986
+ * no token, to OpenStreetMap — for the ones that do not. So an absent token
6987
+ * costs terrain and the quality of that fallback, not the view.
6335
6988
  *
6336
6989
  * @param env - Environment record (defaults to the runtime environment);
6337
6990
  * injectable for testing.
@@ -6628,5 +7281,5 @@ declare function setStoredAuthorName(name: string): void;
6628
7281
  */
6629
7282
  declare function currentEditorIdentity(): string;
6630
7283
  //#endregion
6631
- export { AddTileLayerOptions, type AppState, ApplyLayerJoinsResult, ApplyVirtualFieldsResult, AttributeFormConfig, AttributeFormEvalOptions, AttributeFormFieldConfig, AttributeFormFieldError, AttributeFormValidation, AttributeFormValueMapEntry, AttributeFormWidget, BLANK_BASEMAP, BLEND_MODES, BUILT_IN_STYLE_PRESETS, BlendMode, CARTOCIUDAD_MIN_INTERVAL_MS, CARTOCIUDAD_PUBLIC_HOST, CHINA_BASEMAPS, CollabInvite, CollaborationChatMessage, CollaborationMode, CollaborationParticipant, CollaborationPresence, CollaborationRole, CollaborationState, ColorRamp, CommentAnchor, CommentAuthor, CommentReply, CompiledFeatureExpression, type ConversionToolKind, CopiedLayerStyle, CopiedRasterStyle, CopiedVectorStyle, CreateProjectOptions, type CredentialRedactionResult, DEFAULT_BASEMAP, DEFAULT_BLEND_MODE, DEFAULT_COLLABORATION_STATE, DEFAULT_DASHBOARD_COLUMNS, DEFAULT_EDITOR_IDENTITY, DEFAULT_EDITOR_TRACKING_CONFIG, DEFAULT_ELLIPSOID_ID, DEFAULT_FORWARD_GEOCODE_ENDPOINT, DEFAULT_GEOCODING_PROVIDER_ID, DEFAULT_LAYER_GROUP_OPACITY, DEFAULT_LAYER_STYLE, DEFAULT_LEGEND_CONFIG, DEFAULT_MAP_GRID_LAYOUT, DEFAULT_PRINT_LAYOUT, DEFAULT_PROJECT_NAME, DEFAULT_PROJECT_PREFERENCES, DEFAULT_REVERSE_GEOCODE_ENDPOINT, DEFAULT_ROUTING_ENDPOINT, DEFAULT_STORY_MAP, DUCKDB_VECTOR_FEATURE_WARN_COUNT, DUCKDB_VECTOR_ROUTE_BYTES, DashboardWidget, DashboardWidgetAggregation, DashboardWidgetType, DiagramData, DiagramDatum, DiagramField, DiagramSizeMode, DiagramType, DominantGeometry, EARTH_MEAN_RADIUS_METERS, EDITOR_IDENTITY_STORAGE_KEY, ELEVATION_REQUEST_TIMEOUT_MS, ELLIPSOIDS, EXPRESSION_FUNCTION_CATEGORIES, EditorTrackingConfig, EditorTrackingStampOptions, EffectiveVectorRule, ElevationFetchError, Ellipsoid, EllipsoidId, EvaluateMapExpressionOptions, ExpressionExpectedType, ExpressionFieldType, ExpressionFunctionCategory, ExpressionFunctionDoc, ExpressionPreview, ExpressionValidation, ExpressionVariable, ExternalNativePaintBridge, ExternalNativePaintMode, FEET_PER_METER, FEET_PER_MILE, FeatureExpressionMatches, FetchLike, FieldVisibility, FillPattern, GEOCODE_DISPLAY_NAME_KEY, GEOCODE_LAT_KEY, GEOCODE_LON_KEY, GEOCODE_PROVIDER_KEY, GEOCODE_SCORE_KEY, GEOCODE_STATUS_KEY, GEOCODING_PROVIDERS, GOOGLE_MAPS_API_KEY_HEADER, GeoLibreLayer, GeoLibreProject, type GeocodeMatch, type GeocodeRequest, type GeocodeStatus, type GeocoderConfig, type GeocodingPreferenceInput, GeocodingPreferences, type GeocodingProvider, type GeocodingProviderId, GeometryGeneratorType, type GpsStatusFix, GraduatedClassificationScheme, IndicatorAggregation, InitialLayerStyleOptions, IsochroneRequestBody, LARGE_VECTOR_FEATURE_THRESHOLD, LAYER_LIBRARY_BUNDLE_TYPE, LAYER_LIBRARY_BUNDLE_VERSION, LAYER_PALETTE, LAYER_TYPES, LabelAnchor, LabelDedupe, LabelStyle, LabelTransform, LayerCapabilities, LayerConnection, LayerGroup, LayerJoin, LayerJoinStats, LayerLibraryAddPlan, LayerLibraryCaptureFailure, LayerLibraryCaptureResult, LayerLibraryConfigPatch, LayerLibraryEntry, LayerPanelGroupHeaders, LayerPanelUnit, LayerStyle, LayerStyleClipboardKind, LayerTreeItem, LayerType, LayerVirtualField, LegendConfig, LegendCustomEntry, LegendCustomItem, LegendCustomShape, LegendItemOverride, LegendPanelPosition, LineDecoration, LngLat, MAX_DASHBOARD_COLUMNS, MAX_DIAGRAM_FEATURES, MAX_DIAGRAM_SCAN_FEATURES, MAX_LAYER_LIBRARY_ENTRIES, MAX_LAYER_LIBRARY_ENTRY_BYTES, MAX_MAP_GRID_DIM, MAX_POINTS_PER_REQUEST, MAX_PROCESSING_HISTORY, MAX_REDACT_DEPTH, MERCATOR_METERS_PER_PIXEL_AT_ZOOM_0, METERS_PER_FOOT, METERS_PER_MILE, METERS_PER_NAUTICAL_MILE, MIN_DASHBOARD_COLUMNS, MIN_DIAGRAM_SIZE, MapGridLayout, MapPreferences, MapProjection, MapScaleUnit, MapViewState, MarkerShape, MatrixRequestBody, ModelGraphEdge, ModelGraphNode, ModelGraphNodeKind, ModelGraphPort, ModelPortKind, ModelToolProvider, NETCDF_IMAGE_SOURCE_KIND, NOMINATIM_MIN_INTERVAL_MS, NOMINATIM_PUBLIC_HOST, type NetworkToolKind, type NominatimForwardResult, type NominatimReverseResult, NonGeographicCoordinates, OPENFREEMAP_BASEMAPS, PHOTO_FULL_PROPERTY, PHOTO_PROPERTY, PLANETARY_BASEMAPS, PLANETARY_BASEMAP_GROUPS, PLANETARY_BASEMAP_SENTINEL_PREFIX, PLANET_SWITCHER_OPTIONS, POINTER_ELEVATION_CACHE_LIMIT, POINTER_ELEVATION_DEBOUNCE_MS, PROJECT_CREDENTIAL_FIELDS, PROJECT_VERSION, PROTOMAPS_BASEMAPS, PUBLIC_GEOCODE_ROW_CAP, PUBLISHABLE_PLUGIN_SETTINGS, ParticipantIdentity, PlanetaryBasemap, PlanetaryBasemapGroup, PlanetaryBasemapSectionId, PointRenderer, PointerElevationResolver, PointerElevationResolverOptions, PolylineBatchOptions, PolylineDecodeResult, PrintLayoutConfig, PrintLayoutCorner, PrintLayoutLegendEntry, PrintLayoutPageFilter, ProcessingModel, ProcessingModelGraph, ProcessingModelStep, ProcessingRerunRequest, ProcessingRun, ProcessingRunKind, ProcessingRunStatus, ProjectComment, ProjectPluginControlPosition, ProjectPluginState, ProjectPreferences, ProjectTemplateEntry, ProportionalSizeRange, RAMP_STYLE_KEYS, RASTER_APPEARANCE_STATE_KEYS, REGIONAL_BASEMAPS, REGIONAL_BASEMAP_GROUPS, REGIONAL_BASEMAP_SENTINEL_PREFIX, type RasterToolKind, RecentProjectEntry, RegionalBasemap, RegionalBasemapRegionId, type ReverseGeocodeDisplay, RouteRequestBody, RoutingConfig, RoutingMetric, RoutingMode, RoutingPoint, RoutingRequestError, RuntimeEnvironmentVariable, SELECTION_MODES, SQL_QUERY_SOURCE_KIND, STYLE_LIBRARY_BUNDLE_TYPE, STYLE_LIBRARY_BUNDLE_VERSION, SYMBOL_STYLE_KEYS, SecondaryMapView, SelectionMode, type StatisticsToolKind, StoryActiveSlideMode, StoryChapter, StoryChapterAlignment, StoryChapterAnimation, StoryChapterLocation, StoryInsetPosition, StoryLayerOpacityChange, StoryMap, StorySlideMode, StrokeWidthUnit, StyleLibraryEntry, StyleLibraryEntryKind, TerrainMapLike, VECTOR_COLOR_RAMPS, ValidateMapExpressionOptions, VectorColorValue, VectorRule, VectorStyleMode, VectorStyleStop, type VectorToolKind, applyCopiedLayerStyle, applyGroupEffects, applyJoinsToLayer, applyLayerJoins, applyLayerVirtualFields, applyMatchedSelection, applyProjectToStore, applySelectionMode, attributeFormFieldLabel, attributeLinkUrl, batchDecodePolylines, bodyLengthToEarth, buildForwardGeocodeUrl, buildIsochroneRequest, buildLayerPanelUnits, buildLayerTree, buildMatrixRequest, buildReverseGeocodeUrl, buildRouteRequest, canRedoProjectRestore, canSaveLayerToLibrary, canUndoProjectRestore, captureLayerLibraryEntry, cascadeLayerJoinRefresh, circleRadiusValue, clearExternalNativePaintBridge, clearHistory, coerceAttributeFormValue, collectDiagramData, collectTransitiveJoinSourceIds, compareSequenceValues, compileFeatureExpression, controlRendersLayer, copyableLayerStyleKind, createDefaultMapView, createDefaultPrintLayout, createEmptyProject, createEqualIntervalBreaks, createGraduatedClassBreaks, createLayerLibraryEntryId, createPointerElevationResolver, createProjectTemplate, createQuantileBreaks, createSampleStoryMap, createStyleLibraryEntryId, csvRowsToGeocodeRequests, currentEditorIdentity, darkenHex, decodePolyline, decodePolylineDetailed, detachProjectCopy, detectNonGeographicCoordinates, diagramAnchor, diagramPixelSize, diagramsSuppressedByPointRenderer, dominantGeometry, drawMarkerPath, earthAreaToBody, earthLengthToBody, editorTrackingFieldNames, effectiveLayerRenderState, effectiveVectorRules, encodePolyline, ensureEditorTrackingFields, evaluateMapExpression, excludeHiddenFieldsFromGeojson, excludeHiddenFieldsFromProject, extractCopiedLayerStyle, extractStyleLibraryStyle, extrusionColorValue, extrusionHeightValue, featureSelectionId, fetchElevations, formatCameraAltitude, formatExpressionPreviewValue, formatRoundNum, generatorCircleRadiusValue, generatorSizeRange, geoJSONToPolylineStr, geocodeForward, geocodeMatchToFeature, geocodeReverse, geocoderMinIntervalMs, geocoderNeedsApiKey, geojsonHasZCoordinates, getActiveBodyRadiusRatio, getActiveEllipsoid, getActiveMeanRadiusMeters, getActiveSemiMajorAxisMeters, getAttributeFormField, getCesiumIonToken, getEllipsoid, getExternalNativePaintBridge, getGeocoderConfig, getGeocodingProvider, getGoogleMapsApiKey, getHistoryCoalesceMs, getMapboxAccessToken, getMaxHistoryFeatureCount, getPlanetaryBasemapById, getPlanetaryBasemapByStyleUrl, getProtomapsApiKey, getProtomapsStyleUrl, getRegionalBasemapById, getRegionalBasemapByStyleUrl, getRoundNum, getRoutingConfig, getRuntimeEnvironment, getSpatialExtensionPath, getVectorColorRamp, googleMapsApiKeyHeaderValue, groupMemberIndices, hasPathTraversal, hasRestorableLayerSource, hasSimpleStyleProperties, inferFieldTypes, inferLayerCapabilities, initialLayerStyle, interpolateColors, interpolateHexColor, interpolateRampColors, invertSelection, isAbsoluteFilesystemPath, isAllowedPluginManifestUrl, isAttributeFormFieldVisible, isCredentialFieldName, isDefaultPrintLayout, isDiagramStyleEnabled, isDuckDBQueryLayer, isExternalNativeLayerRecord, isGooglePhotorealisticTilesetUrl, isHexColor, isInitialLayerStyle, isIpadDesktopUserAgent, isMaintainedEditorTrackingField, isRegionalBasemapSentinel, isStyleLibraryTargetLayer, isStyleSpecColor, isVectorColorExpression, isochroneResponseToFeatures, layerGroupDepth, layerGroupMoveability, layerJoinKey, layerLibraryConfigPatch, layerLibraryEntryNeedsLocalFile, layerPanelGroupHeaders, lineWidthValue, mapZoomStepOutputs, matchFeaturesByExpression, matrixResponseToFeatures, meanRadiusMeters, mercatorMetersPerPixelAtZoom0, metersWidthExpression, nextDelayMs, nextLayerPaletteColor, nominatimResultToFeature, nominatimReverseResultToDisplay, nonEmptyRecord, normalizeDashboardColumns, normalizeGeocodingProviderId, normalizeGroupContiguity, normalizeHexColor, normalizeLayerCapabilities, normalizeLayerLibraryEntries, normalizeMapLayout, normalizeMapViewState, normalizeModelGraph, normalizeModels, normalizePrintLayoutConfig, normalizeProcessingHistory, normalizeProjectComments, normalizeSecondaryMapViews, normalizeStoryMap, normalizeStyleLibraryEntries, normalizeWidgets, parseContours, parseHexColor, parseHexColorList, parseJsonExpression, parseLayerLibrary, parseProject, parseStoryMapCsv, parseStoryMapJson, parseStyleLibrary, parseValueMapText, persistedThreeDTilesRequestHeaders, pickEditorIdentity, planLayerLibraryAdd, pluginOwnsPaint, polylineStrToGeoJSON, printLayoutConfigsEqual, projectFromStore, projectPathLabel, proportionalRadiusExpression, proportionalSizeRange, readStoredAuthorName, reapplyLayerJoins, redactCredentials, redactProjectCredentials, redactUrlCredentials, redo, registerProjectRestoreHistory, removeTrailingJsonCommas, reorderLayerGroupInPanel, requestIsochrone, requestMatrix, requestRoute, resolveEditorTrackingConfig, resolveGeocoderConfig, resolveLayerCapabilities, resolveMapGrid, resolveSvgSource, resolveThreeDTilesRequestHeaders, rgbToHex, routeResponseToFeatures, rowCap, ruleBasedColorExpression, ruleBasedVisibilityFilter, sampleMapTerrain, sampleMapTerrainPoint, sampleRemoteElevations, sanitizeLayerStylePatch, scaleAltitudeToActiveBody, scaleDenomination, scaleSpan, scrubCommentsForRemovedLayers, scrubLegendForRemovedLayers, scrubPrintLayoutForLayers, scrubPrintLayoutForRemovedLayers, scrubWidgetsForRemovedLayers, serializeLayerLibrary, serializeProject, serializeStoryMapCsv, serializeStoryMapJson, serializeStyleLibrary, setActiveEllipsoidId, setExternalNativePaintBridge, setGeocodingFetch, setHistoryCoalesceMs, setMaxHistoryFeatureCount, setStoredAuthorName, shouldThrottle, shouldUseTiledRendering, simpleStyleNumberValue, stampFeatureCollectionEditorTracking, stampFeatureEditorTracking, stampFeaturePropertiesEditorTracking, storyMapHasContent, stripGoogleMapsApiKeyHeader, stripJoinFields, stripVirtualFieldColumns, styleValue, subscribeProjectRestoreHistory, substituteExpressionVariables, supportsBridgedOpacity, transformGeojsonElevation, trimHistoryBySize, undo, unescapePolyline, unmatchedGeocodeFeature, unresolvedLayerLibraryJoins, useAppStore, validateAttributeFormField, validateAttributeFormValues, validateMapExpression, valueMapLabelFor, valueMapToText, vectorCircleColorValue, vectorColorExpression, vectorFillColorValue, vectorFillOpacityValue, vectorLineColorValue, vectorOutlineColorValue, vectorStrokeWidthValue };
7284
+ export { ALL_APP_PRIVILEGES, ALL_DEPLOYMENT_CAPABILITIES, AddTileLayerOptions, AppCapabilities, AppPrivilege, AppRole, type AppState, ApplyLayerJoinsResult, ApplyVirtualFieldsResult, AttributeFormConfig, AttributeFormEvalOptions, AttributeFormFieldConfig, AttributeFormFieldError, AttributeFormValidation, AttributeFormValueMapEntry, AttributeFormWidget, BLANK_BASEMAP, BLEND_MODES, BUILT_IN_STYLE_PRESETS, BlendMode, CARTOCIUDAD_MIN_INTERVAL_MS, CARTOCIUDAD_PUBLIC_HOST, CHINA_BASEMAPS, CesiumBasemapImagery, CollabInvite, CollaborationChatMessage, CollaborationMode, CollaborationParticipant, CollaborationPresence, CollaborationRole, CollaborationState, ColorRamp, CommentAnchor, CommentAuthor, CommentReply, CompiledFeatureExpression, type ConversionToolKind, CopiedLayerStyle, CopiedRasterStyle, CopiedVectorStyle, CreateProjectOptions, type CredentialRedactionResult, DEFAULT_BASEMAP, DEFAULT_BLEND_MODE, DEFAULT_COLLABORATION_STATE, DEFAULT_DASHBOARD_COLUMNS, DEFAULT_EDITOR_IDENTITY, DEFAULT_EDITOR_TRACKING_CONFIG, DEFAULT_ELLIPSOID_ID, DEFAULT_FORWARD_GEOCODE_ENDPOINT, DEFAULT_GEOCODING_PROVIDER_ID, DEFAULT_LAYER_GROUP_OPACITY, DEFAULT_LAYER_STYLE, DEFAULT_LEGEND_CONFIG, DEFAULT_MAP_GRID_LAYOUT, DEFAULT_PRINT_LAYOUT, DEFAULT_PROJECT_NAME, DEFAULT_PROJECT_PREFERENCES, DEFAULT_REVERSE_GEOCODE_ENDPOINT, DEFAULT_ROUTING_ENDPOINT, DEFAULT_STORY_MAP, DEPLOYMENT_CAPABILITIES, DUCKDB_VECTOR_FEATURE_WARN_COUNT, DUCKDB_VECTOR_ROUTE_BYTES, DashboardWidget, DashboardWidgetAggregation, DashboardWidgetType, DeploymentCapability, DiagramData, DiagramDatum, DiagramField, DiagramSizeMode, DiagramType, DominantGeometry, EARTH_MEAN_RADIUS_METERS, EDITOR_IDENTITY_STORAGE_KEY, ELEVATION_REQUEST_TIMEOUT_MS, ELLIPSOIDS, EXPRESSION_FUNCTION_CATEGORIES, EditorTrackingConfig, EditorTrackingStampOptions, EffectiveVectorRule, ElevationFetchError, Ellipsoid, EllipsoidId, EvaluateMapExpressionOptions, ExpressionExpectedType, ExpressionFieldType, ExpressionFunctionCategory, ExpressionFunctionDoc, ExpressionPreview, ExpressionValidation, ExpressionVariable, ExternalNativePaintBridge, ExternalNativePaintMode, FEET_PER_METER, FEET_PER_MILE, FeatureExpressionMatches, FetchLike, FieldVisibility, FillPattern, GEOCODE_DISPLAY_NAME_KEY, GEOCODE_LAT_KEY, GEOCODE_LON_KEY, GEOCODE_PROVIDER_KEY, GEOCODE_SCORE_KEY, GEOCODE_STATUS_KEY, GEOCODING_PROVIDERS, GOOGLE_MAPS_API_KEY_HEADER, GeoLibreLayer, GeoLibreProject, type GeocodeMatch, type GeocodeRequest, type GeocodeStatus, type GeocoderConfig, type GeocodingPreferenceInput, GeocodingPreferences, type GeocodingProvider, type GeocodingProviderId, GeometryGeneratorType, type GpsStatusFix, GraduatedClassificationScheme, IDENTIFY_ALL_LAYERS_ID, IndicatorAggregation, InitialLayerStyleOptions, IsochroneRequestBody, LARGE_VECTOR_FEATURE_THRESHOLD, LAYER_LIBRARY_BUNDLE_TYPE, LAYER_LIBRARY_BUNDLE_VERSION, LAYER_PALETTE, LAYER_TYPES, LabelAnchor, LabelDedupe, LabelStyle, LabelTransform, LayerCapabilities, LayerConnection, LayerGroup, LayerJoin, LayerJoinStats, LayerLibraryAddPlan, LayerLibraryCaptureFailure, LayerLibraryCaptureResult, LayerLibraryConfigPatch, LayerLibraryEntry, LayerPanelGroupHeaders, LayerPanelUnit, LayerPopupConfig, LayerQuickFilter, LayerStyle, LayerStyleClipboardKind, LayerTreeItem, LayerType, LayerVirtualField, LegendConfig, LegendCustomEntry, LegendCustomItem, LegendCustomShape, LegendItemOverride, LegendPanelPosition, LineDecoration, LngLat, MAX_DASHBOARD_COLUMNS, MAX_DIAGRAM_FEATURES, MAX_DIAGRAM_SCAN_FEATURES, MAX_LAYER_LIBRARY_ENTRIES, MAX_LAYER_LIBRARY_ENTRY_BYTES, MAX_MAP_GRID_DIM, MAX_POINTS_PER_REQUEST, MAX_PROCESSING_HISTORY, MAX_REDACT_DEPTH, MERCATOR_METERS_PER_PIXEL_AT_ZOOM_0, METERS_PER_FOOT, METERS_PER_MILE, METERS_PER_NAUTICAL_MILE, MIN_DASHBOARD_COLUMNS, MIN_DIAGRAM_SIZE, MapGridLayout, MapPreferences, MapProjection, MapScaleUnit, MapViewState, MarkerShape, MatrixRequestBody, ModelGraphEdge, ModelGraphNode, ModelGraphNodeKind, ModelGraphPort, ModelPortKind, ModelToolProvider, NETCDF_IMAGE_SOURCE_KIND, NOMINATIM_MIN_INTERVAL_MS, NOMINATIM_PUBLIC_HOST, NO_DEPLOYMENT_CAPABILITIES, type NetworkToolKind, type NominatimForwardResult, type NominatimReverseResult, NonGeographicCoordinates, OPENFREEMAP_BASEMAPS, PHOTO_FULL_PROPERTY, PHOTO_PROPERTY, PLANETARY_BASEMAPS, PLANETARY_BASEMAP_GROUPS, PLANETARY_BASEMAP_SENTINEL_PREFIX, PLANET_SWITCHER_OPTIONS, POINTER_ELEVATION_CACHE_LIMIT, POINTER_ELEVATION_DEBOUNCE_MS, PROJECT_CREDENTIAL_FIELDS, PROJECT_VERSION, PROTOMAPS_BASEMAPS, PUBLIC_GEOCODE_ROW_CAP, PUBLISHABLE_PLUGIN_SETTINGS, ParticipantIdentity, PlanetaryBasemap, PlanetaryBasemapGroup, PlanetaryBasemapSectionId, PointRenderer, PointerElevationResolver, PointerElevationResolverOptions, PolylineBatchOptions, PolylineDecodeResult, PopupDateFormat, PopupExpressionOptions, PopupFieldConfig, PopupFieldFormat, PopupFieldKind, PopupFormatOptions, PopupRow, PrintLayoutConfig, PrintLayoutCorner, PrintLayoutLegendEntry, PrintLayoutPageFilter, ProcessingModel, ProcessingModelGraph, ProcessingModelStep, ProcessingRerunRequest, ProcessingRun, ProcessingRunKind, ProcessingRunStatus, ProjectComment, ProjectPluginControlPosition, ProjectPluginState, ProjectPreferences, ProjectTemplateEntry, ProportionalSizeRange, QuickFilterDateKind, QuickFilterKind, QuickFilterTextOperator, RAMP_STYLE_KEYS, RASTER_APPEARANCE_STATE_KEYS, REGIONAL_BASEMAPS, REGIONAL_BASEMAP_GROUPS, REGIONAL_BASEMAP_SENTINEL_PREFIX, ROLE_PRIVILEGES, type RasterToolKind, RecentProjectEntry, RegionalBasemap, RegionalBasemapRegionId, ResolvePopupRowsOptions, type ReverseGeocodeDisplay, RouteRequestBody, RoutingConfig, RoutingMetric, RoutingMode, RoutingPoint, RoutingRequestError, RuntimeEnvironmentVariable, SELECTION_MODES, SQL_QUERY_SOURCE_KIND, STYLE_LIBRARY_BUNDLE_TYPE, STYLE_LIBRARY_BUNDLE_VERSION, SYMBOL_STYLE_KEYS, SecondaryMapView, SelectionMode, type StatisticsToolKind, StoryActiveSlideMode, StoryChapter, StoryChapterAlignment, StoryChapterAnimation, StoryChapterLocation, StoryInsetPosition, StoryLayerOpacityChange, StoryMap, StorySlideMode, StrokeWidthUnit, StyleLibraryEntry, StyleLibraryEntryKind, TerrainMapLike, VECTOR_COLOR_RAMPS, ValidateMapExpressionOptions, VectorColorValue, VectorRule, VectorStyleMode, VectorStyleStop, type VectorToolKind, activeQuickFilters, appPrivilegeReason, applyCopiedLayerStyle, applyGroupEffects, applyJoinsToLayer, applyLayerJoins, applyLayerVirtualFields, applyMatchedSelection, applyProjectToStore, applySelectionMode, attributeFormFieldLabel, attributeLinkUrl, basemapToCesiumImagery, batchDecodePolylines, bodyLengthToEarth, buildForwardGeocodeUrl, buildIsochroneRequest, buildLayerPanelUnits, buildLayerTree, buildMatrixRequest, buildReverseGeocodeUrl, buildRouteRequest, canRedoProjectRestore, canSaveLayerToLibrary, canUndoProjectRestore, captureLayerLibraryEntry, cascadeLayerJoinRefresh, circleRadiusValue, clearExternalNativePaintBridge, clearHistory, clearQuickFilterValues, coerceAttributeFormValue, collectDiagramData, collectTransitiveJoinSourceIds, compareSequenceValues, compileFeatureExpression, compileQuickFilter, compileQuickFilters, controlRendersLayer, copyableLayerStyleKind, createDefaultAppCapabilities, createDefaultMapView, createDefaultPrintLayout, createEmptyProject, createEqualIntervalBreaks, createGraduatedClassBreaks, createLayerLibraryEntryId, createPointerElevationResolver, createProjectTemplate, createQuantileBreaks, createSampleStoryMap, createStyleLibraryEntryId, csvRowsToGeocodeRequests, currentEditorIdentity, darkenHex, decodePolyline, decodePolylineDetailed, detachProjectCopy, detectNonGeographicCoordinates, diagramAnchor, diagramPixelSize, diagramsSuppressedByPointRenderer, dominantGeometry, drawMarkerPath, earthAreaToBody, earthLengthToBody, editorTrackingFieldNames, effectiveLayerRenderState, effectiveVectorRules, encodePolyline, ensureEditorTrackingFields, evaluateMapExpression, excludeHiddenFieldsFromGeojson, excludeHiddenFieldsFromProject, extractCopiedLayerStyle, extractStyleLibraryStyle, extrusionColorValue, extrusionHeightValue, featureSelectionId, fetchElevations, formatCameraAltitude, formatExpressionPreviewValue, formatPixelValue, formatPopupValue, formatRoundNum, generatorCircleRadiusValue, generatorSizeRange, geoJSONToPolylineStr, geocodeForward, geocodeMatchToFeature, geocodeReverse, geocoderMinIntervalMs, geocoderNeedsApiKey, geojsonHasZCoordinates, getActiveBodyRadiusRatio, getActiveEllipsoid, getActiveMeanRadiusMeters, getActiveSemiMajorAxisMeters, getAttributeFormField, getBuildEnvironment, getCesiumIonToken, getEllipsoid, getExternalNativePaintBridge, getGeocoderConfig, getGeocodingProvider, getGoogleMapsApiKey, getHistoryCoalesceMs, getMapboxAccessToken, getMaxHistoryFeatureCount, getPlanetaryBasemapById, getPlanetaryBasemapByStyleUrl, getProtomapsApiKey, getProtomapsStyleUrl, getRegionalBasemapById, getRegionalBasemapByStyleUrl, getRoundNum, getRoutingConfig, getRuntimeEnvironment, getSpatialExtensionPath, getVectorColorRamp, googleMapsApiKeyHeaderValue, groupMemberIndices, hasActiveQuickFilter, hasAppPrivilege, hasPathTraversal, hasRestorableLayerSource, hasSimpleStyleProperties, inferFieldTypes, inferLayerCapabilities, initialLayerStyle, interpolateColors, interpolateHexColor, interpolateRampColors, intersectPrivileges, invertSelection, isAbsoluteFilesystemPath, isAllowedPluginManifestUrl, isAttributeFormFieldVisible, isCredentialFieldName, isDefaultPrintLayout, isDeploymentCapability, isDiagramStyleEnabled, isDuckDBQueryLayer, isExternalNativeLayerRecord, isGooglePhotorealisticTilesetUrl, isHexColor, isInitialLayerStyle, isInlineImageValue, isInternalPopupField, isIpadDesktopUserAgent, isMaintainedEditorTrackingField, isPopupClickEnabled, isPopupHoverEnabled, isRegionalBasemapSentinel, isSafePopupUrl, isStyleLibraryTargetLayer, isStyleSpecColor, isVectorColorExpression, isochroneResponseToFeatures, layerGroupDepth, layerGroupMoveability, layerJoinKey, layerLibraryConfigPatch, layerLibraryEntryNeedsLocalFile, layerPanelGroupHeaders, lineWidthValue, mapZoomStepOutputs, matchFeaturesByExpression, matrixResponseToFeatures, meanRadiusMeters, mercatorMetersPerPixelAtZoom0, metersWidthExpression, nextDelayMs, nextLayerPaletteColor, nominatimResultToFeature, nominatimReverseResultToDisplay, nonEmptyRecord, normalizeAppPrivileges, normalizeBlankBackgroundColor, normalizeDashboardColumns, normalizeGeocodingProviderId, normalizeGroupContiguity, normalizeHexColor, normalizeLayerCapabilities, normalizeLayerLibraryEntries, normalizeMapLayout, normalizeMapViewState, normalizeModelGraph, normalizeModels, normalizePrintLayoutConfig, normalizeProcessingHistory, normalizeProjectComments, normalizeSecondaryMapViews, normalizeStoryMap, normalizeStyleLibraryEntries, normalizeWidgets, parseContours, parseDeploymentCapabilities, parseHexColor, parseHexColorList, parseJsonExpression, parseLayerLibrary, parseProject, parseStoryMapCsv, parseStoryMapJson, parseStyleLibrary, parseValueMapText, persistedThreeDTilesRequestHeaders, pickEditorIdentity, planLayerLibraryAdd, pluginOwnsPaint, polylineStrToGeoJSON, popupFieldLabel, printLayoutConfigsEqual, projectFromStore, projectPathLabel, proportionalRadiusExpression, proportionalSizeRange, readStoredAuthorName, reapplyLayerJoins, redactCredentials, redactProjectCredentials, redactUrlCredentials, redo, registerProjectRestoreHistory, removeTrailingJsonCommas, reorderLayerGroupInPanel, requestIsochrone, requestMatrix, requestRoute, resolveConfiguredPopupTitle, resolveEditorTrackingConfig, resolveGeocoderConfig, resolveLayerCapabilities, resolveMapGrid, resolvePopupBody, resolvePopupRows, resolvePopupTitle, resolveRolePrivileges, resolveSvgSource, resolveThreeDTilesRequestHeaders, rgbToHex, routeResponseToFeatures, rowCap, ruleBasedColorExpression, ruleBasedVisibilityFilter, sameCesiumImagery, sampleMapTerrain, sampleMapTerrainPoint, sampleRemoteElevations, sanitizeLayerStylePatch, scaleAltitudeToActiveBody, scaleDenomination, scaleSpan, scrubCommentsForRemovedLayers, scrubLegendForRemovedLayers, scrubPrintLayoutForLayers, scrubPrintLayoutForRemovedLayers, scrubWidgetsForRemovedLayers, serializeLayerLibrary, serializeProject, serializeStoryMapCsv, serializeStoryMapJson, serializeStyleLibrary, setActiveEllipsoidId, setExternalNativePaintBridge, setGeocodingFetch, setHistoryCoalesceMs, setMaxHistoryFeatureCount, setStoredAuthorName, shouldThrottle, shouldUseTiledRendering, simpleStyleNumberValue, stampFeatureCollectionEditorTracking, stampFeatureEditorTracking, stampFeaturePropertiesEditorTracking, storyMapHasContent, stringifyPopupValue, stripGoogleMapsApiKeyHeader, stripJoinFields, stripVirtualFieldColumns, styleValue, subscribeProjectRestoreHistory, substituteExpressionVariables, supportsBridgedOpacity, transformGeojsonElevation, trimHistoryBySize, undo, unescapePolyline, unmatchedGeocodeFeature, unresolvedLayerLibraryJoins, useAppCapability, useAppStore, validateAttributeFormField, validateAttributeFormValues, validateMapExpression, valueMapLabelFor, valueMapToText, vectorCircleColorValue, vectorColorExpression, vectorFillColorValue, vectorFillOpacityValue, vectorLineColorValue, vectorOutlineColorValue, vectorStrokeWidthValue, visiblePopupFields, visiblePopupProperties };
6632
7285
  //# sourceMappingURL=index.d.mts.map