@chelone/core 0.6.0 → 0.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/assistant/assistant-session.d.ts +6 -0
- package/dist/assistant/assistant-session.js +204 -181
- package/dist/assistant/echo-transport.js +26 -29
- package/dist/assistant/http-transport.d.ts +10 -0
- package/dist/assistant/http-transport.js +98 -0
- package/dist/assistant/types.d.ts +1 -7
- package/dist/auth/access-control.d.ts +13 -5
- package/dist/auth/access-control.js +25 -21
- package/dist/auth/auth-options.d.ts +23 -17
- package/dist/auth/auth-options.js +82 -48
- package/dist/auth/permission-matrix.d.ts +12 -0
- package/dist/auth/permission-matrix.js +67 -0
- package/dist/auth/types.d.ts +14 -4
- package/dist/block-editor/block-document.d.ts +64 -0
- package/dist/block-editor/block-document.js +147 -0
- package/dist/block-editor/data-blocks.d.ts +63 -0
- package/dist/block-editor/data-blocks.js +117 -0
- package/dist/chart/chart-data.js +46 -44
- package/dist/command-menu/hotkey.js +58 -47
- package/dist/command-menu/recents.d.ts +4 -0
- package/dist/command-menu/recents.js +12 -11
- package/dist/command-menu/registry.d.ts +9 -5
- package/dist/command-menu/registry.js +36 -46
- package/dist/controller/calendar-dates.d.ts +12 -0
- package/dist/controller/calendar-dates.js +94 -113
- package/dist/controller/calendar-events.js +93 -88
- package/dist/controller/client-list-controller.d.ts +2 -2
- package/dist/controller/client-list-controller.js +251 -254
- package/dist/controller/data-table-columns.d.ts +2 -0
- package/dist/controller/data-table-columns.js +50 -56
- package/dist/controller/deep-equal.d.ts +1 -0
- package/dist/controller/deep-equal.js +14 -0
- package/dist/controller/filter-toggle.js +36 -44
- package/dist/controller/in-place-editor.d.ts +43 -0
- package/dist/controller/in-place-editor.js +43 -0
- package/dist/controller/infinite-list-controller.js +219 -189
- package/dist/controller/inspector.d.ts +55 -0
- package/dist/controller/inspector.js +70 -0
- package/dist/controller/job-monitor.d.ts +10 -4
- package/dist/controller/job-monitor.js +46 -47
- package/dist/controller/kanban-board.js +45 -24
- package/dist/controller/list-controller.d.ts +8 -5
- package/dist/controller/list-controller.js +447 -400
- package/dist/controller/list-params.js +96 -87
- package/dist/controller/pivot-grid.d.ts +4 -4
- package/dist/controller/pivot-grid.js +89 -95
- package/dist/controller/prev-next.d.ts +2 -2
- package/dist/controller/prev-next.js +74 -54
- package/dist/controller/record-controllers.d.ts +14 -6
- package/dist/controller/record-controllers.js +288 -257
- package/dist/controller/record-diff.d.ts +21 -0
- package/dist/controller/record-diff.js +50 -0
- package/dist/controller/record-timeline.d.ts +5 -5
- package/dist/controller/record-timeline.js +42 -30
- package/dist/controller/record-tree.js +57 -47
- package/dist/controller/record-workflow.d.ts +38 -16
- package/dist/controller/record-workflow.js +85 -64
- package/dist/controller/reference-many-controller.d.ts +2 -0
- package/dist/controller/reference-many-controller.js +199 -192
- package/dist/controller/reference-one-controller.d.ts +1 -1
- package/dist/controller/reference-one-controller.js +63 -56
- package/dist/controller/saved-queries.js +104 -91
- package/dist/controller/translate-fallback.js +10 -6
- package/dist/csv/export.d.ts +4 -3
- package/dist/csv/export.js +43 -40
- package/dist/csv/import-controller.d.ts +4 -0
- package/dist/csv/import-controller.js +189 -169
- package/dist/csv/match-headers.js +29 -22
- package/dist/csv/parse-with.js +60 -54
- package/dist/csv/run-import.js +69 -72
- package/dist/csv/validate-rows.d.ts +1 -1
- package/dist/csv/validate-rows.js +65 -52
- package/dist/data/cache-ops.d.ts +5 -4
- package/dist/data/cache-ops.js +208 -188
- package/dist/data/combine-data-providers.js +25 -23
- package/dist/data/data-provider-log.d.ts +45 -0
- package/dist/data/data-provider-log.js +93 -0
- package/dist/data/errors.js +14 -10
- package/dist/data/fake-provider.d.ts +6 -3
- package/dist/data/fake-provider.js +135 -114
- package/dist/data/fetch-utils.js +61 -44
- package/dist/data/filter-branch.d.ts +5 -0
- package/dist/data/filter-branch.js +10 -0
- package/dist/data/get-many-aggregate.js +84 -76
- package/dist/data/http-error.js +17 -12
- package/dist/data/keys.js +50 -36
- package/dist/data/mutation-options.d.ts +14 -9
- package/dist/data/mutation-options.js +93 -109
- package/dist/data/query-options.js +73 -68
- package/dist/data/remove-empty.d.ts +3 -0
- package/dist/data/remove-empty.js +11 -0
- package/dist/data/undoable.d.ts +2 -2
- package/dist/data/undoable.js +190 -174
- package/dist/data/with-lifecycle-callbacks.d.ts +45 -17
- package/dist/data/with-lifecycle-callbacks.js +66 -52
- package/dist/environment/application-update-store.js +58 -55
- package/dist/environment/offline-store.js +21 -21
- package/dist/form/array-binding.d.ts +30 -11
- package/dist/form/array-binding.js +184 -166
- package/dist/form/choice-ids.d.ts +7 -0
- package/dist/form/choice-ids.js +11 -0
- package/dist/form/choices-controller.d.ts +22 -2
- package/dist/form/choices-controller.js +315 -275
- package/dist/form/date-format.d.ts +38 -0
- package/dist/form/date-format.js +89 -0
- package/dist/form/dirty-values.d.ts +2 -2
- package/dist/form/dirty-values.js +22 -11
- package/dist/form/duration.d.ts +22 -0
- package/dist/form/duration.js +49 -0
- package/dist/form/edit-create-form.d.ts +12 -5
- package/dist/form/edit-create-form.js +243 -188
- package/dist/form/event-value.d.ts +6 -0
- package/dist/form/event-value.js +17 -0
- package/dist/form/field-error.d.ts +14 -0
- package/dist/form/field-error.js +28 -0
- package/dist/form/field-name.d.ts +20 -0
- package/dist/form/field-name.js +6 -0
- package/dist/form/filter-form-values.js +63 -49
- package/dist/form/form-controller.d.ts +9 -1
- package/dist/form/form-controller.js +165 -160
- package/dist/form/form-groups.d.ts +4 -3
- package/dist/form/form-groups.js +79 -79
- package/dist/form/form-handle.d.ts +175 -0
- package/dist/form/form-handle.js +68 -0
- package/dist/form/input-binding.d.ts +56 -31
- package/dist/form/input-binding.js +171 -118
- package/dist/form/input-values.d.ts +140 -0
- package/dist/form/input-values.js +206 -0
- package/dist/form/json-text.d.ts +11 -0
- package/dist/form/json-text.js +62 -37
- package/dist/form/save-pipeline.d.ts +6 -8
- package/dist/form/save-pipeline.js +91 -82
- package/dist/form/set-form-values.d.ts +6 -0
- package/dist/form/set-form-values.js +10 -0
- package/dist/form/source.js +97 -65
- package/dist/form/text-of.d.ts +2 -0
- package/dist/form/text-of.js +7 -0
- package/dist/form/validators.d.ts +58 -19
- package/dist/form/validators.js +97 -71
- package/dist/geo/bbox.d.ts +5 -4
- package/dist/geo/bbox.js +69 -48
- package/dist/geo/bounds.d.ts +14 -3
- package/dist/geo/bounds.js +98 -68
- package/dist/geo/constraints.js +88 -93
- package/dist/geo/coordinates.d.ts +10 -0
- package/dist/geo/coordinates.js +44 -23
- package/dist/geo/editor.d.ts +13 -13
- package/dist/geo/editor.js +176 -153
- package/dist/geo/geocoding.d.ts +4 -4
- package/dist/geo/geocoding.js +38 -41
- package/dist/geo/geojson.d.ts +12 -74
- package/dist/geo/geojson.js +52 -40
- package/dist/geo/geometry-math.d.ts +4 -4
- package/dist/geo/geometry-math.js +100 -93
- package/dist/geo/index.d.ts +9 -8
- package/dist/geo/map-layers.d.ts +42 -7
- package/dist/geo/map-layers.js +88 -62
- package/dist/geo/map-style.d.ts +12 -0
- package/dist/geo/map-style.js +43 -32
- package/dist/geo/messages.js +48 -45
- package/dist/geo/nominatim.js +88 -80
- package/dist/geo/osm-presets.d.ts +4 -3
- package/dist/geo/osm-presets.js +108 -86
- package/dist/geo/osm-tags.js +14 -12
- package/dist/geo/overpass.d.ts +14 -2
- package/dist/geo/overpass.js +83 -90
- package/dist/geo/shape-value.d.ts +9 -5
- package/dist/geo/shape-value.js +169 -146
- package/dist/geo/snap-to-roads.d.ts +3 -3
- package/dist/geo/snap-to-roads.js +55 -50
- package/dist/geo/throttle.js +36 -39
- package/dist/guards.d.ts +44 -0
- package/dist/guards.js +77 -0
- package/dist/i18n/default-messages.js +34 -29
- package/dist/i18n/english-messages.d.ts +172 -0
- package/dist/i18n/english-messages.js +359 -189
- package/dist/i18n/i18n.d.ts +2 -2
- package/dist/i18n/i18n.js +47 -60
- package/dist/i18n/inflection.d.ts +34 -0
- package/dist/i18n/inflection.js +82 -0
- package/dist/i18n/messages.d.ts +10 -2
- package/dist/i18n/messages.js +17 -4
- package/dist/i18n/missing-keys.d.ts +4 -0
- package/dist/i18n/missing-keys.js +70 -62
- package/dist/i18n/translatable.d.ts +16 -1
- package/dist/i18n/translatable.js +40 -47
- package/dist/index.d.ts +87 -39
- package/dist/index.js +54 -301
- package/dist/json/deep-equal.d.ts +8 -0
- package/dist/json/deep-equal.js +24 -0
- package/dist/json/strip-json-comments.js +38 -42
- package/dist/noop.d.ts +2 -0
- package/dist/noop.js +4 -0
- package/dist/notification/error-message.d.ts +2 -0
- package/dist/notification/error-message.js +10 -0
- package/dist/notification/notification-store.d.ts +3 -2
- package/dist/notification/notification-store.js +41 -45
- package/dist/onboarding-tour/placement.d.ts +2 -0
- package/dist/onboarding-tour/placement.js +65 -78
- package/dist/onboarding-tour/tour-controller.js +46 -54
- package/dist/realtime/add-events-for-mutations.js +75 -81
- package/dist/realtime/announce-lock.js +16 -13
- package/dist/realtime/broadcast-channel-transport.js +65 -59
- package/dist/realtime/copy-members.js +22 -14
- package/dist/realtime/in-memory-lock-provider.js +40 -48
- package/dist/realtime/live.js +95 -101
- package/dist/realtime/lock-options.js +16 -16
- package/dist/realtime/lock-session.js +91 -78
- package/dist/realtime/memory-transport.js +25 -25
- package/dist/realtime/presence.js +120 -122
- package/dist/realtime/realtime-data-provider.d.ts +10 -0
- package/dist/realtime/realtime-data-provider.js +45 -42
- package/dist/realtime/reconnect-backoff.js +17 -0
- package/dist/realtime/sse-transport.d.ts +31 -0
- package/dist/realtime/sse-transport.js +235 -0
- package/dist/realtime/status-store.js +23 -28
- package/dist/realtime/topic-hub.js +62 -71
- package/dist/realtime/topics.js +10 -12
- package/dist/realtime/types.js +10 -12
- package/dist/realtime/unread-count.js +21 -21
- package/dist/realtime/websocket-transport.d.ts +32 -0
- package/dist/realtime/websocket-transport.js +306 -0
- package/dist/resource/describe-resource.d.ts +2 -0
- package/dist/resource/describe-resource.js +247 -219
- package/dist/resource/get-at-path.js +29 -14
- package/dist/resource/identifier.d.ts +18 -0
- package/dist/resource/identifier.js +27 -0
- package/dist/resource/record.d.ts +4 -0
- package/dist/resource/record.js +10 -0
- package/dist/resource/register.d.ts +7 -0
- package/dist/resource/registry-store.d.ts +45 -15
- package/dist/resource/registry-store.js +67 -60
- package/dist/resource/registry.d.ts +10 -0
- package/dist/resource/registry.js +8 -4
- package/dist/resource/source-path.d.ts +23 -2
- package/dist/rich-text/rich-text-extras.d.ts +134 -0
- package/dist/rich-text/rich-text-extras.js +181 -0
- package/dist/rich-text/rich-text-image.d.ts +124 -0
- package/dist/rich-text/rich-text-image.js +163 -0
- package/dist/rich-text/rich-text.d.ts +6 -0
- package/dist/rich-text/rich-text.js +125 -88
- package/dist/router/location.d.ts +24 -4
- package/dist/router/location.js +43 -18
- package/dist/router/match.js +47 -39
- package/dist/router/paths.js +40 -34
- package/dist/router/record-from-location.d.ts +1 -1
- package/dist/router/record-from-location.js +25 -17
- package/dist/store/adapters.js +51 -55
- package/dist/store/micro-store.js +57 -59
- package/dist/store/shallow-equal.d.ts +12 -0
- package/dist/store/shallow-equal.js +20 -0
- package/dist/store/store.js +54 -57
- package/dist/ui-defaults.d.ts +15 -0
- package/dist/ui-defaults.js +17 -0
- package/package.json +13 -11
package/dist/geo/editor.js
CHANGED
|
@@ -1,168 +1,191 @@
|
|
|
1
|
+
import { isJsonObject } from "../guards.js";
|
|
1
2
|
import { isGeoGeometry } from "./geojson.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
// src/geo/editor.ts
|
|
4
|
+
var EDITOR_PROPERTIES = {
|
|
5
|
+
mode: "mode",
|
|
6
|
+
currentlyDrawing: "currentlyDrawing",
|
|
7
|
+
edited: "edited",
|
|
8
|
+
closingPoint: "closingPoint",
|
|
9
|
+
snappingPoint: "snappingPoint",
|
|
10
|
+
coordinatePoint: "coordinatePoint",
|
|
11
|
+
coordinatePointFeatureId: "coordinatePointFeatureId",
|
|
12
|
+
coordinatePointIds: "coordinatePointIds",
|
|
13
|
+
provisionalCoordinateCount: "provisionalCoordinateCount",
|
|
14
|
+
committedCoordinateCount: "committedCoordinateCount",
|
|
15
|
+
marker: "marker",
|
|
16
|
+
selected: "selected",
|
|
17
|
+
midPoint: "midPoint",
|
|
18
|
+
selectionPointFeatureId: "selectionPointFeatureId",
|
|
19
|
+
selectionPoint: "selectionPoint"
|
|
18
20
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
/** Flags that mark a feature the editor made for itself, not the user's shape. */
|
|
22
|
+
var HELPER_FLAGS = [
|
|
23
|
+
EDITOR_PROPERTIES.selectionPoint,
|
|
24
|
+
EDITOR_PROPERTIES.midPoint,
|
|
25
|
+
EDITOR_PROPERTIES.closingPoint,
|
|
26
|
+
EDITOR_PROPERTIES.snappingPoint,
|
|
27
|
+
EDITOR_PROPERTIES.coordinatePoint,
|
|
28
|
+
EDITOR_PROPERTIES.currentlyDrawing
|
|
26
29
|
];
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Properties the editor adds to a user's own feature. `radiusKilometers` is
|
|
32
|
+
* written by its circle mode and is a literal in its source, not a constant.
|
|
33
|
+
*/
|
|
34
|
+
var EDITOR_OWN_PROPERTIES = [...Object.values(EDITOR_PROPERTIES), "radiusKilometers"];
|
|
35
|
+
/** Where the editor keeps the id a feature had before it went in. */
|
|
36
|
+
var SOURCE_ID = "chelone:id";
|
|
37
|
+
/**
|
|
38
|
+
* Where the editor keeps the properties a feature had before it went in, so
|
|
39
|
+
* none of them can be mistaken for its own flags.
|
|
40
|
+
*/
|
|
41
|
+
var SOURCE_PROPERTIES = "chelone:properties";
|
|
42
|
+
var MODES = {
|
|
43
|
+
Point: "point",
|
|
44
|
+
LineString: "linestring",
|
|
45
|
+
Polygon: "polygon"
|
|
37
46
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
/** Decimals the editor accepts in a position. */
|
|
48
|
+
var EDITOR_DECIMALS = 9;
|
|
49
|
+
/**
|
|
50
|
+
* A position as the editor accepts it: longitude wrapped into -180 to 180,
|
|
51
|
+
* both numbers rounded to 9 decimals, and any altitude dropped.
|
|
52
|
+
*/
|
|
53
|
+
function editorPosition([longitude = NaN, latitude = NaN]) {
|
|
54
|
+
const wrapped = longitude >= -180 && longitude <= 180 ? longitude : ((longitude + 180) % 360 + 360) % 360 - 180;
|
|
55
|
+
return [Number(wrapped.toFixed(EDITOR_DECIMALS)) + 0, Number(latitude.toFixed(EDITOR_DECIMALS)) + 0];
|
|
45
56
|
}
|
|
46
57
|
function editorGeometry(geometry) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
62
|
-
}
|
|
58
|
+
switch (geometry.type) {
|
|
59
|
+
case "Point": return {
|
|
60
|
+
...geometry,
|
|
61
|
+
coordinates: editorPosition(geometry.coordinates)
|
|
62
|
+
};
|
|
63
|
+
case "LineString": return {
|
|
64
|
+
...geometry,
|
|
65
|
+
coordinates: geometry.coordinates.map(editorPosition)
|
|
66
|
+
};
|
|
67
|
+
case "Polygon": return {
|
|
68
|
+
...geometry,
|
|
69
|
+
coordinates: geometry.coordinates.map((ring) => ring.map(editorPosition))
|
|
70
|
+
};
|
|
71
|
+
}
|
|
63
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Copies of the features the editor can hold, each with a fresh `id` from
|
|
75
|
+
* `getId` and a `properties.mode` naming its drawing mode. The editor refuses
|
|
76
|
+
* an id its own strategy did not make, so the source `id` moves to
|
|
77
|
+
* `properties["chelone:id"]`, and the source properties move whole to
|
|
78
|
+
* `properties["chelone:properties"]`. Features it cannot hold are left out.
|
|
79
|
+
* The editor refuses a position with more than 9 decimals, an altitude or a
|
|
80
|
+
* longitude outside -180 to 180, so each copy's positions are rounded to 9
|
|
81
|
+
* decimals, cut to longitude and latitude, and wrapped. The source is not
|
|
82
|
+
* rewritten.
|
|
83
|
+
*/
|
|
64
84
|
function toEditorFeatures(features, getId) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
return result;
|
|
84
|
-
}
|
|
85
|
-
function isPlainObject(value) {
|
|
86
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
85
|
+
const result = [];
|
|
86
|
+
for (const feature of features) {
|
|
87
|
+
const geometry = feature.geometry;
|
|
88
|
+
if (!geometry || geometry.type !== "Point" && geometry.type !== "LineString" && geometry.type !== "Polygon" || geometry.type === "Polygon" && geometry.coordinates.length !== 1) continue;
|
|
89
|
+
const properties = {
|
|
90
|
+
mode: MODES[geometry.type],
|
|
91
|
+
[SOURCE_PROPERTIES]: { ...feature.properties }
|
|
92
|
+
};
|
|
93
|
+
if (feature.id !== void 0) properties[SOURCE_ID] = feature.id;
|
|
94
|
+
result.push({
|
|
95
|
+
type: "Feature",
|
|
96
|
+
id: getId(),
|
|
97
|
+
geometry: editorGeometry(geometry),
|
|
98
|
+
properties
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
87
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* The user's features in an editor snapshot: its helper features (selection
|
|
105
|
+
* points, midpoints, closing points, snapping points and a feature still being
|
|
106
|
+
* drawn) are dropped, and `id` and `properties` come back from `chelone:id`
|
|
107
|
+
* and `chelone:properties`. A feature the editor made has no `id`, and keeps
|
|
108
|
+
* its properties but for the editor's own. A feature with a coordinate that is
|
|
109
|
+
* not a finite number, or a `chelone:properties` that is not a JSON object, is
|
|
110
|
+
* left out.
|
|
111
|
+
*/
|
|
88
112
|
function fromEditorFeatures(snapshot) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
result.push(feature);
|
|
108
|
-
}
|
|
109
|
-
return result;
|
|
113
|
+
const result = [];
|
|
114
|
+
for (const entry of snapshot) {
|
|
115
|
+
const source = { ...entry.properties };
|
|
116
|
+
if (HELPER_FLAGS.some((flag) => source[flag])) continue;
|
|
117
|
+
if (!isGeoGeometry(entry.geometry)) continue;
|
|
118
|
+
const kept = source[SOURCE_PROPERTIES];
|
|
119
|
+
if (SOURCE_PROPERTIES in source && !isJsonObject(kept)) continue;
|
|
120
|
+
const properties = isJsonObject(kept) ? { ...kept } : Object.fromEntries(Object.entries(source).filter(([key]) => key !== SOURCE_ID && key !== SOURCE_PROPERTIES && !EDITOR_OWN_PROPERTIES.includes(key)));
|
|
121
|
+
const feature = {
|
|
122
|
+
type: "Feature",
|
|
123
|
+
geometry: entry.geometry,
|
|
124
|
+
properties
|
|
125
|
+
};
|
|
126
|
+
const id = source[SOURCE_ID];
|
|
127
|
+
if (typeof id === "string" || typeof id === "number") feature.id = id;
|
|
128
|
+
result.push(feature);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
110
131
|
}
|
|
132
|
+
/** Keeps the keys whose value is set. */
|
|
111
133
|
function defined(entries) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
return result;
|
|
134
|
+
const result = {};
|
|
135
|
+
for (const [key, value] of Object.entries(entries)) if (value !== void 0) result[key] = value;
|
|
136
|
+
return result;
|
|
117
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Maps a {@link ShapeStyle} onto the style keys of each Terra Draw mode. A key
|
|
140
|
+
* with no value in `style` is left out so the mode keeps its own default.
|
|
141
|
+
* `pointRadius` becomes a width, the diameter.
|
|
142
|
+
*/
|
|
118
143
|
function editorStyles(style) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
144
|
+
const fill = style.fillColor ?? style.color;
|
|
145
|
+
const width = style.pointRadius === void 0 ? void 0 : style.pointRadius * 2;
|
|
146
|
+
const area = defined({
|
|
147
|
+
fillColor: fill,
|
|
148
|
+
fillOpacity: style.fillOpacity,
|
|
149
|
+
outlineColor: style.color,
|
|
150
|
+
outlineWidth: style.weight,
|
|
151
|
+
outlineOpacity: style.opacity
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
point: defined({
|
|
155
|
+
pointColor: style.pointColor,
|
|
156
|
+
pointWidth: width
|
|
157
|
+
}),
|
|
158
|
+
linestring: defined({
|
|
159
|
+
lineStringColor: style.color,
|
|
160
|
+
lineStringWidth: style.weight,
|
|
161
|
+
lineStringOpacity: style.opacity
|
|
162
|
+
}),
|
|
163
|
+
polygon: area,
|
|
164
|
+
rectangle: { ...area },
|
|
165
|
+
circle: { ...area },
|
|
166
|
+
render: defined({
|
|
167
|
+
pointColor: style.pointColor,
|
|
168
|
+
pointWidth: width,
|
|
169
|
+
lineStringColor: style.color,
|
|
170
|
+
lineStringWidth: style.weight,
|
|
171
|
+
lineStringOpacity: style.opacity,
|
|
172
|
+
polygonFillColor: fill,
|
|
173
|
+
polygonFillOpacity: style.fillOpacity,
|
|
174
|
+
polygonOutlineColor: style.color,
|
|
175
|
+
polygonOutlineWidth: style.weight
|
|
176
|
+
}),
|
|
177
|
+
select: defined({
|
|
178
|
+
selectedPointColor: style.pointColor,
|
|
179
|
+
selectedPointWidth: width,
|
|
180
|
+
selectedLineStringColor: style.color,
|
|
181
|
+
selectedLineStringWidth: style.weight,
|
|
182
|
+
selectedLineStringOpacity: style.opacity,
|
|
183
|
+
selectedPolygonColor: fill,
|
|
184
|
+
selectedPolygonFillOpacity: style.fillOpacity,
|
|
185
|
+
selectedPolygonOutlineColor: style.color,
|
|
186
|
+
selectedPolygonOutlineWidth: style.weight,
|
|
187
|
+
selectedPolygonOutlineOpacity: style.opacity
|
|
188
|
+
})
|
|
189
|
+
};
|
|
162
190
|
}
|
|
163
|
-
export {
|
|
164
|
-
EDITOR_PROPERTIES,
|
|
165
|
-
editorStyles,
|
|
166
|
-
fromEditorFeatures,
|
|
167
|
-
toEditorFeatures
|
|
168
|
-
};
|
|
191
|
+
export { EDITOR_PROPERTIES, editorStyles, fromEditorFeatures, toEditorFeatures };
|
package/dist/geo/geocoding.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { QueryFunctionContext } from "@tanstack/query-core";
|
|
2
|
-
import type {
|
|
2
|
+
import type { LngLatBox } from "./bounds.js";
|
|
3
3
|
export interface GeocodeResult {
|
|
4
4
|
displayName: string;
|
|
5
5
|
lat: number;
|
|
6
6
|
lng: number;
|
|
7
7
|
/** `[west, south, east, north]`. */
|
|
8
|
-
bbox?:
|
|
8
|
+
bbox?: LngLatBox;
|
|
9
9
|
/** The service's own kind of place, such as `city` or `house`. */
|
|
10
10
|
type?: string;
|
|
11
11
|
/** The service's unmapped hit, for fields core does not model. */
|
|
@@ -19,7 +19,7 @@ export interface GeocodeSearchOptions extends GeocodeRequestOptions {
|
|
|
19
19
|
/** ISO 3166-1 alpha-2 codes to restrict the search to. */
|
|
20
20
|
countryCodes?: string[];
|
|
21
21
|
/** `[west, south, east, north]` to favour or restrict hits to. */
|
|
22
|
-
viewBox?:
|
|
22
|
+
viewBox?: LngLatBox;
|
|
23
23
|
}
|
|
24
24
|
export interface GeocodingProvider {
|
|
25
25
|
name: string;
|
|
@@ -45,7 +45,7 @@ export interface GeocodeQueryOptions extends ReverseGeocodeQueryOptions {
|
|
|
45
45
|
minChars?: number;
|
|
46
46
|
limit?: number;
|
|
47
47
|
countryCodes?: string[];
|
|
48
|
-
viewBox?:
|
|
48
|
+
viewBox?: LngLatBox;
|
|
49
49
|
}
|
|
50
50
|
export interface GeocodeQuery<TData> {
|
|
51
51
|
queryKey: readonly unknown[];
|
package/dist/geo/geocoding.js
CHANGED
|
@@ -1,45 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
// src/geo/geocoding.ts
|
|
2
|
+
var FIVE_MINUTES_MS = 3e5;
|
|
3
|
+
/** Query options for `useQuery`; the query's `signal` reaches the provider. */
|
|
2
4
|
function geocodeQueryOptions(provider, query, options = {}) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
retry: false
|
|
25
|
-
};
|
|
5
|
+
const { minChars = 3, limit, countryCodes, viewBox, staleTime = FIVE_MINUTES_MS } = options;
|
|
6
|
+
const trimmed = query.trim();
|
|
7
|
+
return {
|
|
8
|
+
queryKey: [
|
|
9
|
+
"geocode",
|
|
10
|
+
provider.cacheKey ?? provider.name,
|
|
11
|
+
trimmed,
|
|
12
|
+
countryCodes ?? null,
|
|
13
|
+
viewBox ?? null,
|
|
14
|
+
limit ?? null
|
|
15
|
+
],
|
|
16
|
+
queryFn: ({ signal }) => provider.search(trimmed, {
|
|
17
|
+
signal,
|
|
18
|
+
limit,
|
|
19
|
+
countryCodes,
|
|
20
|
+
viewBox
|
|
21
|
+
}),
|
|
22
|
+
enabled: trimmed.length >= minChars,
|
|
23
|
+
staleTime,
|
|
24
|
+
retry: false
|
|
25
|
+
};
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
var round5 = (value) => Math.round(value * 1e5) / 1e5;
|
|
28
28
|
function reverseGeocodeQueryOptions(provider, position, options = {}) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
29
|
+
const { lat, lng } = position;
|
|
30
|
+
return {
|
|
31
|
+
queryKey: [
|
|
32
|
+
"reverse-geocode",
|
|
33
|
+
provider.cacheKey ?? provider.name,
|
|
34
|
+
round5(lat),
|
|
35
|
+
round5(lng)
|
|
36
|
+
],
|
|
37
|
+
queryFn: ({ signal }) => provider.reverse(lat, lng, { signal }),
|
|
38
|
+
enabled: Number.isFinite(lat) && Number.isFinite(lng),
|
|
39
|
+
staleTime: options.staleTime ?? FIVE_MINUTES_MS
|
|
40
|
+
};
|
|
41
41
|
}
|
|
42
|
-
export {
|
|
43
|
-
geocodeQueryOptions,
|
|
44
|
-
reverseGeocodeQueryOptions
|
|
45
|
-
};
|
|
42
|
+
export { geocodeQueryOptions, reverseGeocodeQueryOptions };
|
package/dist/geo/geojson.d.ts
CHANGED
|
@@ -1,75 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
latitude: number,
|
|
5
|
-
...rest: number[]
|
|
6
|
-
];
|
|
7
|
-
/** `[west, south, east, north]`. */
|
|
8
|
-
export type GeoBBox = [
|
|
9
|
-
west: number,
|
|
10
|
-
south: number,
|
|
11
|
-
east: number,
|
|
12
|
-
north: number
|
|
13
|
-
];
|
|
14
|
-
/** `[west, south, min altitude, east, north, max altitude]`. */
|
|
15
|
-
export type GeoBBox3D = [
|
|
16
|
-
west: number,
|
|
17
|
-
south: number,
|
|
18
|
-
minAltitude: number,
|
|
19
|
-
east: number,
|
|
20
|
-
north: number,
|
|
21
|
-
maxAltitude: number
|
|
22
|
-
];
|
|
23
|
-
interface GeoGeometryBase {
|
|
24
|
-
bbox?: GeoBBox | GeoBBox3D;
|
|
25
|
-
}
|
|
26
|
-
export interface GeoPoint extends GeoGeometryBase {
|
|
27
|
-
type: "Point";
|
|
28
|
-
coordinates: GeoPosition;
|
|
29
|
-
}
|
|
30
|
-
export interface GeoMultiPoint extends GeoGeometryBase {
|
|
31
|
-
type: "MultiPoint";
|
|
32
|
-
coordinates: GeoPosition[];
|
|
33
|
-
}
|
|
34
|
-
export interface GeoLineString extends GeoGeometryBase {
|
|
35
|
-
type: "LineString";
|
|
36
|
-
coordinates: GeoPosition[];
|
|
37
|
-
}
|
|
38
|
-
export interface GeoMultiLineString extends GeoGeometryBase {
|
|
39
|
-
type: "MultiLineString";
|
|
40
|
-
coordinates: GeoPosition[][];
|
|
41
|
-
}
|
|
42
|
-
export interface GeoPolygon extends GeoGeometryBase {
|
|
43
|
-
type: "Polygon";
|
|
44
|
-
coordinates: GeoPosition[][];
|
|
45
|
-
}
|
|
46
|
-
export interface GeoMultiPolygon extends GeoGeometryBase {
|
|
47
|
-
type: "MultiPolygon";
|
|
48
|
-
coordinates: GeoPosition[][][];
|
|
49
|
-
}
|
|
50
|
-
export interface GeoGeometryCollection extends GeoGeometryBase {
|
|
51
|
-
type: "GeometryCollection";
|
|
52
|
-
geometries: GeoGeometry[];
|
|
53
|
-
}
|
|
54
|
-
export type GeoGeometry = GeoPoint | GeoMultiPoint | GeoLineString | GeoMultiLineString | GeoPolygon | GeoMultiPolygon | GeoGeometryCollection;
|
|
55
|
-
export interface GeoFeature {
|
|
56
|
-
type: "Feature";
|
|
57
|
-
geometry: GeoGeometry | null;
|
|
58
|
-
properties: Record<string, unknown> | null;
|
|
59
|
-
id?: string | number;
|
|
60
|
-
bbox?: GeoBBox | GeoBBox3D;
|
|
61
|
-
}
|
|
62
|
-
export interface GeoFeatureCollection {
|
|
63
|
-
type: "FeatureCollection";
|
|
64
|
-
features: GeoFeature[];
|
|
65
|
-
bbox?: GeoBBox | GeoBBox3D;
|
|
66
|
-
}
|
|
67
|
-
/** What a map input stores: a geometry, a Feature or a FeatureCollection. */
|
|
68
|
-
export type GeoJsonValue = GeoGeometry | GeoFeature | GeoFeatureCollection;
|
|
1
|
+
import type { Feature, FeatureCollection, Geometry, MultiPolygon, Polygon } from "geojson";
|
|
2
|
+
import { type JsonObject } from "../guards.js";
|
|
3
|
+
export type { Feature, FeatureCollection, Geometry } from "geojson";
|
|
69
4
|
/** True for exactly four finite numbers. */
|
|
70
|
-
export declare function isGeoBBox(value: unknown): value is
|
|
71
|
-
export declare function isGeoGeometry(value: unknown): value is
|
|
72
|
-
|
|
73
|
-
export declare function
|
|
74
|
-
export declare function
|
|
75
|
-
export
|
|
5
|
+
export declare function isGeoBBox(value: unknown): value is [number, number, number, number];
|
|
6
|
+
export declare function isGeoGeometry(value: unknown): value is Geometry;
|
|
7
|
+
/** A Polygon or a MultiPolygon, the geometries turf's area operations take. */
|
|
8
|
+
export declare function isGeoArea(value: unknown): value is Polygon | MultiPolygon;
|
|
9
|
+
export declare function isGeoFeature(value: unknown): value is Feature<Geometry | null, JsonObject | null>;
|
|
10
|
+
export declare function isGeoFeatureCollection(value: unknown): value is FeatureCollection<Geometry | null, JsonObject | null>;
|
|
11
|
+
export declare function isGeoJsonValue(value: unknown): value is Geometry | Feature<Geometry | null, JsonObject | null> | FeatureCollection<Geometry | null, JsonObject | null>;
|
|
12
|
+
/** The features MapLibre draws: a feature with a null geometry has nothing to draw. */
|
|
13
|
+
export declare function placedFeatures(collection: FeatureCollection<Geometry | null, JsonObject | null>): FeatureCollection<Geometry, JsonObject | null>;
|