@fieldia/map 0.14.1 → 0.16.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/README.md +103 -10
- package/package.json +5 -4
- package/src/index.d.mts +5 -1
- package/src/index.d.ts +5 -1
- package/src/index.js +7 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +3 -0
- package/src/index.mjs.map +1 -1
- package/src/lib/answers.d.mts +17 -0
- package/src/lib/answers.d.ts +17 -0
- package/src/lib/answers.js +27 -0
- package/src/lib/answers.js.map +1 -0
- package/src/lib/answers.mjs +21 -0
- package/src/lib/answers.mjs.map +1 -0
- package/src/lib/area.js +29 -246
- package/src/lib/area.js.map +1 -1
- package/src/lib/area.mjs +29 -246
- package/src/lib/area.mjs.map +1 -1
- package/src/lib/card.d.mts +53 -0
- package/src/lib/card.d.ts +53 -0
- package/src/lib/card.js +98 -0
- package/src/lib/card.js.map +1 -0
- package/src/lib/card.mjs +94 -0
- package/src/lib/card.mjs.map +1 -0
- package/src/lib/cluster.d.mts +12 -0
- package/src/lib/cluster.d.ts +12 -0
- package/src/lib/cluster.js +60 -0
- package/src/lib/cluster.js.map +1 -0
- package/src/lib/cluster.mjs +57 -0
- package/src/lib/cluster.mjs.map +1 -0
- package/src/lib/drawing.d.mts +36 -0
- package/src/lib/drawing.d.ts +36 -0
- package/src/lib/drawing.js +267 -0
- package/src/lib/drawing.js.map +1 -0
- package/src/lib/drawing.mjs +263 -0
- package/src/lib/drawing.mjs.map +1 -0
- package/src/lib/form-map.d.mts +16 -0
- package/src/lib/form-map.d.ts +16 -0
- package/src/lib/form-map.js +525 -0
- package/src/lib/form-map.js.map +1 -0
- package/src/lib/form-map.mjs +522 -0
- package/src/lib/form-map.mjs.map +1 -0
- package/src/lib/kinds.js +9 -2
- package/src/lib/kinds.js.map +1 -1
- package/src/lib/kinds.mjs +9 -2
- package/src/lib/kinds.mjs.map +1 -1
- package/src/lib/labels.d.mts +41 -0
- package/src/lib/labels.d.ts +41 -0
- package/src/lib/labels.js +87 -1
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +84 -0
- package/src/lib/labels.mjs.map +1 -1
- package/src/lib/list-view.d.mts +13 -0
- package/src/lib/list-view.d.ts +13 -0
- package/src/lib/list-view.js +464 -0
- package/src/lib/list-view.js.map +1 -0
- package/src/lib/list-view.mjs +461 -0
- package/src/lib/list-view.mjs.map +1 -0
- package/src/lib/map-core.d.mts +2 -2
- package/src/lib/map-core.d.ts +2 -2
- package/src/lib/map-core.js +23 -3
- package/src/lib/map-core.js.map +1 -1
- package/src/lib/map-core.mjs +23 -3
- package/src/lib/map-core.mjs.map +1 -1
- package/src/lib/map-icons.d.mts +8 -0
- package/src/lib/map-icons.d.ts +8 -0
- package/src/lib/map-icons.js +21 -0
- package/src/lib/map-icons.js.map +1 -0
- package/src/lib/map-icons.mjs +18 -0
- package/src/lib/map-icons.mjs.map +1 -0
- package/src/lib/marks.d.mts +34 -0
- package/src/lib/marks.d.ts +34 -0
- package/src/lib/marks.js +56 -0
- package/src/lib/marks.js.map +1 -0
- package/src/lib/marks.mjs +49 -0
- package/src/lib/marks.mjs.map +1 -0
- package/src/lib/pins.d.mts +58 -0
- package/src/lib/pins.d.ts +58 -0
- package/src/lib/pins.js +165 -0
- package/src/lib/pins.js.map +1 -0
- package/src/lib/pins.mjs +156 -0
- package/src/lib/pins.mjs.map +1 -0
- package/src/lib/providers.d.mts +27 -3
- package/src/lib/providers.d.ts +27 -3
- package/src/lib/providers.js +69 -67
- package/src/lib/providers.js.map +1 -1
- package/src/lib/providers.mjs +17 -15
- package/src/lib/providers.mjs.map +1 -1
- package/src/lib/route-line.d.mts +34 -0
- package/src/lib/route-line.d.ts +34 -0
- package/src/lib/route-line.js +53 -0
- package/src/lib/route-line.js.map +1 -0
- package/src/lib/route-line.mjs +47 -0
- package/src/lib/route-line.mjs.map +1 -0
- package/src/lib/routes.d.mts +28 -0
- package/src/lib/routes.d.ts +28 -0
- package/src/lib/routes.js +112 -0
- package/src/lib/routes.js.map +1 -0
- package/src/lib/routes.mjs +105 -0
- package/src/lib/routes.mjs.map +1 -0
- package/src/lib/settings.d.mts +8 -3
- package/src/lib/settings.d.ts +8 -3
- package/src/lib/styles.d.mts +16 -0
- package/src/lib/styles.d.ts +16 -0
- package/src/lib/styles.js +181 -1
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +178 -0
- package/src/lib/styles.mjs.map +1 -1
package/src/lib/pins.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.comma = void 0;
|
|
4
|
+
exports.makePins = makePins;
|
|
5
|
+
exports.withCurrency = withCurrency;
|
|
6
|
+
exports.shown = shown;
|
|
7
|
+
exports.pinText = pinText;
|
|
8
|
+
exports.imageSource = imageSource;
|
|
9
|
+
const core_1 = require("@fieldia/core");
|
|
10
|
+
const widgets_1 = require("@fieldia/widgets");
|
|
11
|
+
const map_icons_1 = require("./map-icons");
|
|
12
|
+
/** The icons drawn as seen from above, facing north: they turn whole with a record's heading. */
|
|
13
|
+
const FROM_ABOVE = new Set(['car', 'arrow']);
|
|
14
|
+
const PIN = `<svg viewBox="0 0 30 40" aria-hidden="true" focusable="false"><path class="fd-map-face-body" d="M15 1C7.3 1 1 7.1 1 14.7 1 25.3 15 39 15 39s14-13.7 14-24.3C29 7.1 22.7 1 15 1z"/></svg>`;
|
|
15
|
+
function makePins(options) {
|
|
16
|
+
const { document: doc, page, locale, pin } = options;
|
|
17
|
+
const icons = { ...map_icons_1.MAP_ICONS, ...options.icons };
|
|
18
|
+
const look = pin.widget ? 'own' : (pin.look ?? (pin.label ? 'label' : pin.image ? 'photo' : pin.icon || pin.iconField ? 'icon' : 'pin'));
|
|
19
|
+
const drawer = pin.widget ? options.drawers?.[pin.widget] : undefined;
|
|
20
|
+
const tones = (pin.tones ?? []).map(({ tone, when }) => ({ tone, when: (0, core_1.compileModifier)(when) }));
|
|
21
|
+
const fields = [
|
|
22
|
+
...new Set([options.title, pin.label, pin.iconField, pin.image, pin.turn, ...tones.flatMap((t) => t.when.fields)]
|
|
23
|
+
.filter((name) => !!name && name in page.fields)
|
|
24
|
+
.flatMap((name) => withCurrency(page, name))),
|
|
25
|
+
];
|
|
26
|
+
const toneOf = (values) => {
|
|
27
|
+
if (!tones.length)
|
|
28
|
+
return undefined;
|
|
29
|
+
const context = (0, core_1.expressionContext)(values, page.fields);
|
|
30
|
+
return tones.find((t) => t.when.evaluate(context))?.tone;
|
|
31
|
+
};
|
|
32
|
+
const icon = (values) => {
|
|
33
|
+
const named = pin.iconField ? values[pin.iconField] : undefined;
|
|
34
|
+
const name = typeof named === 'string' && named ? named : pin.icon;
|
|
35
|
+
return (0, widgets_1.drawIcon)(doc, name, icons) ?? (0, widgets_1.drawIcon)(doc, pin.icon ?? 'pin', icons);
|
|
36
|
+
};
|
|
37
|
+
const span = (className, ...children) => {
|
|
38
|
+
const element = doc.createElement('span');
|
|
39
|
+
element.className = className;
|
|
40
|
+
element.append(...children);
|
|
41
|
+
return element;
|
|
42
|
+
};
|
|
43
|
+
function face(record) {
|
|
44
|
+
const { values } = record;
|
|
45
|
+
const element = doc.createElement('div');
|
|
46
|
+
element.className = 'fd-map-face';
|
|
47
|
+
element.dataset['look'] = look;
|
|
48
|
+
const tone = toneOf(values);
|
|
49
|
+
if (tone)
|
|
50
|
+
element.dataset['tone'] = tone;
|
|
51
|
+
const said = pin.label ? pinText(page, pin.label, values, locale) : '';
|
|
52
|
+
if (look === 'own') {
|
|
53
|
+
if (drawer)
|
|
54
|
+
element.append(drawer(record, { document: doc, locale, page }));
|
|
55
|
+
element.dataset['stands'] = 'middle';
|
|
56
|
+
return { element, stands: 'middle', height: 32 };
|
|
57
|
+
}
|
|
58
|
+
if (look === 'label' && said) {
|
|
59
|
+
element.append(span('fd-map-face-text', said));
|
|
60
|
+
element.dataset['stands'] = 'foot';
|
|
61
|
+
return { element, stands: 'foot', height: 34 };
|
|
62
|
+
}
|
|
63
|
+
if (look === 'pin') {
|
|
64
|
+
element.innerHTML = PIN;
|
|
65
|
+
const inside = pin.icon || pin.iconField ? icon(values) : null;
|
|
66
|
+
element.append(span('fd-map-face-icon', ...(inside ? [inside] : [])));
|
|
67
|
+
element.dataset['stands'] = 'foot';
|
|
68
|
+
return { element, stands: 'foot', height: 40 };
|
|
69
|
+
}
|
|
70
|
+
if (look === 'icon') {
|
|
71
|
+
const drawn = icon(values);
|
|
72
|
+
const glyph = span('fd-map-face-icon', ...(drawn ? [drawn] : []));
|
|
73
|
+
element.append(glyph);
|
|
74
|
+
const turn = pin.turn ? values[pin.turn] : null;
|
|
75
|
+
if (typeof turn === 'number' && Number.isFinite(turn)) {
|
|
76
|
+
// A car seen from above turns itself; a scooter seen from its side stays upright, a pointer on its edge showing the way.
|
|
77
|
+
if (FROM_ABOVE.has(drawn?.dataset['icon'] ?? ''))
|
|
78
|
+
glyph.style.transform = `rotate(${turn}deg)`;
|
|
79
|
+
else {
|
|
80
|
+
const pointer = span('fd-map-face-turn');
|
|
81
|
+
pointer.style.transform = `rotate(${turn}deg)`;
|
|
82
|
+
element.append(pointer);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
element.dataset['stands'] = 'middle';
|
|
86
|
+
return { element, stands: 'middle', height: 34 };
|
|
87
|
+
}
|
|
88
|
+
if (look === 'photo') {
|
|
89
|
+
const source = pin.image ? imageSource(values[pin.image]) : '';
|
|
90
|
+
if (source) {
|
|
91
|
+
const img = doc.createElement('img');
|
|
92
|
+
img.className = 'fd-map-face-photo';
|
|
93
|
+
img.alt = '';
|
|
94
|
+
img.decoding = 'async';
|
|
95
|
+
img.src = source;
|
|
96
|
+
element.append(img);
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
element.append(span('fd-map-face-photo', ...[(0, widgets_1.drawIcon)(doc, 'user', icons)].filter((n) => !!n)));
|
|
100
|
+
if (said)
|
|
101
|
+
element.append(span('fd-map-face-text', said));
|
|
102
|
+
element.dataset['stands'] = 'middle';
|
|
103
|
+
return { element, stands: 'middle', height: 42 };
|
|
104
|
+
}
|
|
105
|
+
// A dot; and a label with nothing to say.
|
|
106
|
+
element.dataset['look'] = 'dot';
|
|
107
|
+
element.dataset['stands'] = 'middle';
|
|
108
|
+
return { element, stands: 'middle', height: 16 };
|
|
109
|
+
}
|
|
110
|
+
function name(record) {
|
|
111
|
+
const title = shown(page, options.title, record.values, locale);
|
|
112
|
+
const said = pin.label && pin.label !== options.title ? shown(page, pin.label, record.values, locale) : '';
|
|
113
|
+
return [title, said].filter(Boolean).join((0, exports.comma)(locale)) || String(record.id);
|
|
114
|
+
}
|
|
115
|
+
return { face, name, fields };
|
|
116
|
+
}
|
|
117
|
+
/** The comma between a name's parts, in the page's language. */
|
|
118
|
+
const comma = (locale) => (locale === 'ar' ? '، ' : ', ');
|
|
119
|
+
exports.comma = comma;
|
|
120
|
+
/** A field, and the field its amount's currency is in. */
|
|
121
|
+
function withCurrency(page, name) {
|
|
122
|
+
const def = page.fields[name];
|
|
123
|
+
return def?.type === 'monetary' && def.currencyField && !def.currencyField.startsWith('parent.') ? [name, def.currencyField] : [name];
|
|
124
|
+
}
|
|
125
|
+
/** A value as a person reads it in full: a card's line, a pin's name. */
|
|
126
|
+
function shown(page, name, values, locale) {
|
|
127
|
+
const def = page.fields[name];
|
|
128
|
+
const value = values[name];
|
|
129
|
+
if (value === null || value === undefined || value === '')
|
|
130
|
+
return '';
|
|
131
|
+
return def ? (0, widgets_1.displayValue)(def, value, values, locale) : String(value);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* What a pin says, short enough for a pin: an amount or a number in the
|
|
135
|
+
* page's language, compact ("E£9.5M", "12K", "4.6"); anything else as a
|
|
136
|
+
* card would show it.
|
|
137
|
+
*/
|
|
138
|
+
function pinText(page, name, values, locale) {
|
|
139
|
+
const def = page.fields[name];
|
|
140
|
+
const value = values[name];
|
|
141
|
+
if (def && typeof value === 'number' && Number.isFinite(value) && (def.type === 'monetary' || def.type === 'integer' || def.type === 'float')) {
|
|
142
|
+
const currency = (0, widgets_1.currencyOf)(def, values);
|
|
143
|
+
const plain = { notation: 'compact', numberingSystem: 'latn', maximumFractionDigits: 1 };
|
|
144
|
+
try {
|
|
145
|
+
if (currency)
|
|
146
|
+
return new Intl.NumberFormat(locale, { ...plain, style: 'currency', currency, currencyDisplay: 'narrowSymbol' }).format(value);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// A currency named by words that are no code: written before the amount, as it is.
|
|
150
|
+
return `${currency} ${new Intl.NumberFormat(locale, plain).format(value)}`;
|
|
151
|
+
}
|
|
152
|
+
return new Intl.NumberFormat(locale, plain).format(value);
|
|
153
|
+
}
|
|
154
|
+
return shown(page, name, values, locale);
|
|
155
|
+
}
|
|
156
|
+
/** An image field's picture as an address: its first file's data, or where it is kept. */
|
|
157
|
+
function imageSource(value) {
|
|
158
|
+
const file = (Array.isArray(value) ? value[0] : value);
|
|
159
|
+
if (!file)
|
|
160
|
+
return '';
|
|
161
|
+
if (typeof file === 'string')
|
|
162
|
+
return file;
|
|
163
|
+
return file.data ? `data:${file.type};base64,${file.data}` : (file.url ?? '');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=pins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pins.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/pins.ts"],"names":[],"mappings":"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"}
|
package/src/lib/pins.mjs
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { compileModifier, expressionContext } from '@fieldia/core';
|
|
2
|
+
import { currencyOf, displayValue, drawIcon } from '@fieldia/widgets';
|
|
3
|
+
import { MAP_ICONS } from './map-icons.mjs';
|
|
4
|
+
/** The icons drawn as seen from above, facing north: they turn whole with a record's heading. */
|
|
5
|
+
const FROM_ABOVE = new Set(['car', 'arrow']);
|
|
6
|
+
const PIN = `<svg viewBox="0 0 30 40" aria-hidden="true" focusable="false"><path class="fd-map-face-body" d="M15 1C7.3 1 1 7.1 1 14.7 1 25.3 15 39 15 39s14-13.7 14-24.3C29 7.1 22.7 1 15 1z"/></svg>`;
|
|
7
|
+
export function makePins(options) {
|
|
8
|
+
const { document: doc, page, locale, pin } = options;
|
|
9
|
+
const icons = { ...MAP_ICONS, ...options.icons };
|
|
10
|
+
const look = pin.widget ? 'own' : (pin.look ?? (pin.label ? 'label' : pin.image ? 'photo' : pin.icon || pin.iconField ? 'icon' : 'pin'));
|
|
11
|
+
const drawer = pin.widget ? options.drawers?.[pin.widget] : undefined;
|
|
12
|
+
const tones = (pin.tones ?? []).map(({ tone, when }) => ({ tone, when: compileModifier(when) }));
|
|
13
|
+
const fields = [
|
|
14
|
+
...new Set([options.title, pin.label, pin.iconField, pin.image, pin.turn, ...tones.flatMap((t) => t.when.fields)]
|
|
15
|
+
.filter((name) => !!name && name in page.fields)
|
|
16
|
+
.flatMap((name) => withCurrency(page, name))),
|
|
17
|
+
];
|
|
18
|
+
const toneOf = (values) => {
|
|
19
|
+
if (!tones.length)
|
|
20
|
+
return undefined;
|
|
21
|
+
const context = expressionContext(values, page.fields);
|
|
22
|
+
return tones.find((t) => t.when.evaluate(context))?.tone;
|
|
23
|
+
};
|
|
24
|
+
const icon = (values) => {
|
|
25
|
+
const named = pin.iconField ? values[pin.iconField] : undefined;
|
|
26
|
+
const name = typeof named === 'string' && named ? named : pin.icon;
|
|
27
|
+
return drawIcon(doc, name, icons) ?? drawIcon(doc, pin.icon ?? 'pin', icons);
|
|
28
|
+
};
|
|
29
|
+
const span = (className, ...children) => {
|
|
30
|
+
const element = doc.createElement('span');
|
|
31
|
+
element.className = className;
|
|
32
|
+
element.append(...children);
|
|
33
|
+
return element;
|
|
34
|
+
};
|
|
35
|
+
function face(record) {
|
|
36
|
+
const { values } = record;
|
|
37
|
+
const element = doc.createElement('div');
|
|
38
|
+
element.className = 'fd-map-face';
|
|
39
|
+
element.dataset['look'] = look;
|
|
40
|
+
const tone = toneOf(values);
|
|
41
|
+
if (tone)
|
|
42
|
+
element.dataset['tone'] = tone;
|
|
43
|
+
const said = pin.label ? pinText(page, pin.label, values, locale) : '';
|
|
44
|
+
if (look === 'own') {
|
|
45
|
+
if (drawer)
|
|
46
|
+
element.append(drawer(record, { document: doc, locale, page }));
|
|
47
|
+
element.dataset['stands'] = 'middle';
|
|
48
|
+
return { element, stands: 'middle', height: 32 };
|
|
49
|
+
}
|
|
50
|
+
if (look === 'label' && said) {
|
|
51
|
+
element.append(span('fd-map-face-text', said));
|
|
52
|
+
element.dataset['stands'] = 'foot';
|
|
53
|
+
return { element, stands: 'foot', height: 34 };
|
|
54
|
+
}
|
|
55
|
+
if (look === 'pin') {
|
|
56
|
+
element.innerHTML = PIN;
|
|
57
|
+
const inside = pin.icon || pin.iconField ? icon(values) : null;
|
|
58
|
+
element.append(span('fd-map-face-icon', ...(inside ? [inside] : [])));
|
|
59
|
+
element.dataset['stands'] = 'foot';
|
|
60
|
+
return { element, stands: 'foot', height: 40 };
|
|
61
|
+
}
|
|
62
|
+
if (look === 'icon') {
|
|
63
|
+
const drawn = icon(values);
|
|
64
|
+
const glyph = span('fd-map-face-icon', ...(drawn ? [drawn] : []));
|
|
65
|
+
element.append(glyph);
|
|
66
|
+
const turn = pin.turn ? values[pin.turn] : null;
|
|
67
|
+
if (typeof turn === 'number' && Number.isFinite(turn)) {
|
|
68
|
+
// A car seen from above turns itself; a scooter seen from its side stays upright, a pointer on its edge showing the way.
|
|
69
|
+
if (FROM_ABOVE.has(drawn?.dataset['icon'] ?? ''))
|
|
70
|
+
glyph.style.transform = `rotate(${turn}deg)`;
|
|
71
|
+
else {
|
|
72
|
+
const pointer = span('fd-map-face-turn');
|
|
73
|
+
pointer.style.transform = `rotate(${turn}deg)`;
|
|
74
|
+
element.append(pointer);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
element.dataset['stands'] = 'middle';
|
|
78
|
+
return { element, stands: 'middle', height: 34 };
|
|
79
|
+
}
|
|
80
|
+
if (look === 'photo') {
|
|
81
|
+
const source = pin.image ? imageSource(values[pin.image]) : '';
|
|
82
|
+
if (source) {
|
|
83
|
+
const img = doc.createElement('img');
|
|
84
|
+
img.className = 'fd-map-face-photo';
|
|
85
|
+
img.alt = '';
|
|
86
|
+
img.decoding = 'async';
|
|
87
|
+
img.src = source;
|
|
88
|
+
element.append(img);
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
element.append(span('fd-map-face-photo', ...[drawIcon(doc, 'user', icons)].filter((n) => !!n)));
|
|
92
|
+
if (said)
|
|
93
|
+
element.append(span('fd-map-face-text', said));
|
|
94
|
+
element.dataset['stands'] = 'middle';
|
|
95
|
+
return { element, stands: 'middle', height: 42 };
|
|
96
|
+
}
|
|
97
|
+
// A dot; and a label with nothing to say.
|
|
98
|
+
element.dataset['look'] = 'dot';
|
|
99
|
+
element.dataset['stands'] = 'middle';
|
|
100
|
+
return { element, stands: 'middle', height: 16 };
|
|
101
|
+
}
|
|
102
|
+
function name(record) {
|
|
103
|
+
const title = shown(page, options.title, record.values, locale);
|
|
104
|
+
const said = pin.label && pin.label !== options.title ? shown(page, pin.label, record.values, locale) : '';
|
|
105
|
+
return [title, said].filter(Boolean).join(comma(locale)) || String(record.id);
|
|
106
|
+
}
|
|
107
|
+
return { face, name, fields };
|
|
108
|
+
}
|
|
109
|
+
/** The comma between a name's parts, in the page's language. */
|
|
110
|
+
export const comma = (locale) => (locale === 'ar' ? '، ' : ', ');
|
|
111
|
+
/** A field, and the field its amount's currency is in. */
|
|
112
|
+
export function withCurrency(page, name) {
|
|
113
|
+
const def = page.fields[name];
|
|
114
|
+
return def?.type === 'monetary' && def.currencyField && !def.currencyField.startsWith('parent.') ? [name, def.currencyField] : [name];
|
|
115
|
+
}
|
|
116
|
+
/** A value as a person reads it in full: a card's line, a pin's name. */
|
|
117
|
+
export function shown(page, name, values, locale) {
|
|
118
|
+
const def = page.fields[name];
|
|
119
|
+
const value = values[name];
|
|
120
|
+
if (value === null || value === undefined || value === '')
|
|
121
|
+
return '';
|
|
122
|
+
return def ? displayValue(def, value, values, locale) : String(value);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* What a pin says, short enough for a pin: an amount or a number in the
|
|
126
|
+
* page's language, compact ("E£9.5M", "12K", "4.6"); anything else as a
|
|
127
|
+
* card would show it.
|
|
128
|
+
*/
|
|
129
|
+
export function pinText(page, name, values, locale) {
|
|
130
|
+
const def = page.fields[name];
|
|
131
|
+
const value = values[name];
|
|
132
|
+
if (def && typeof value === 'number' && Number.isFinite(value) && (def.type === 'monetary' || def.type === 'integer' || def.type === 'float')) {
|
|
133
|
+
const currency = currencyOf(def, values);
|
|
134
|
+
const plain = { notation: 'compact', numberingSystem: 'latn', maximumFractionDigits: 1 };
|
|
135
|
+
try {
|
|
136
|
+
if (currency)
|
|
137
|
+
return new Intl.NumberFormat(locale, { ...plain, style: 'currency', currency, currencyDisplay: 'narrowSymbol' }).format(value);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// A currency named by words that are no code: written before the amount, as it is.
|
|
141
|
+
return `${currency} ${new Intl.NumberFormat(locale, plain).format(value)}`;
|
|
142
|
+
}
|
|
143
|
+
return new Intl.NumberFormat(locale, plain).format(value);
|
|
144
|
+
}
|
|
145
|
+
return shown(page, name, values, locale);
|
|
146
|
+
}
|
|
147
|
+
/** An image field's picture as an address: its first file's data, or where it is kept. */
|
|
148
|
+
export function imageSource(value) {
|
|
149
|
+
const file = (Array.isArray(value) ? value[0] : value);
|
|
150
|
+
if (!file)
|
|
151
|
+
return '';
|
|
152
|
+
if (typeof file === 'string')
|
|
153
|
+
return file;
|
|
154
|
+
return file.data ? `data:${file.type};base64,${file.data}` : (file.url ?? '');
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=pins.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pins.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/pins.ts"],"names":[],"mappings":"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"}
|
package/src/lib/providers.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import { type Fetch } from './answers.mjs';
|
|
2
3
|
import type { Bounds, LatLng } from './geo.mjs';
|
|
3
4
|
/**
|
|
4
|
-
* Where a map's images, credits
|
|
5
|
+
* Where a map's images, credits, address search and routes come from. Every map in
|
|
5
6
|
* the package draws through one of these, so an app changes provider in one
|
|
6
7
|
* place and nothing else moves. Keys never live in Fieldia: the app passes
|
|
7
8
|
* them, or a function that fetches a short-lived token from its own server.
|
|
@@ -53,6 +54,21 @@ export type ReverseSearch = (at: LatLng & {
|
|
|
53
54
|
locale: Locale;
|
|
54
55
|
signal?: AbortSignal;
|
|
55
56
|
}) => Promise<string | null>;
|
|
57
|
+
export type TravelMode = 'car' | 'bike' | 'foot';
|
|
58
|
+
export interface RouteRequest {
|
|
59
|
+
/** Where it starts, the places it passes in order, and where it ends. */
|
|
60
|
+
points: LatLng[];
|
|
61
|
+
mode: TravelMode;
|
|
62
|
+
locale: Locale;
|
|
63
|
+
signal?: AbortSignal;
|
|
64
|
+
}
|
|
65
|
+
/** A route along the roads: its line, how long it is, and how long it takes. */
|
|
66
|
+
export interface RouteFound {
|
|
67
|
+
line: LatLng[];
|
|
68
|
+
metres: number;
|
|
69
|
+
seconds: number;
|
|
70
|
+
}
|
|
71
|
+
export type RouteFinder = (request: RouteRequest) => Promise<RouteFound>;
|
|
56
72
|
export interface MapProvider {
|
|
57
73
|
readonly id: string;
|
|
58
74
|
/** The map images of a kind, or null when the provider has none of it. */
|
|
@@ -71,8 +87,9 @@ export interface MapProvider {
|
|
|
71
87
|
readonly searchAsYouType?: boolean;
|
|
72
88
|
/** Free for trying things out, not for an app in use: a warning says so once. */
|
|
73
89
|
readonly demoOnly?: boolean;
|
|
90
|
+
/** A route along the roads, for a map's routes. */
|
|
91
|
+
readonly route?: RouteFinder;
|
|
74
92
|
}
|
|
75
|
-
type Fetch = typeof globalThis.fetch;
|
|
76
93
|
export interface OpenStreetMapOptions {
|
|
77
94
|
/**
|
|
78
95
|
* Whose search: Photon (komoot's, on OpenStreetMap's data), which answers as
|
|
@@ -82,6 +99,12 @@ export interface OpenStreetMapOptions {
|
|
|
82
99
|
search?: 'photon' | 'nominatim';
|
|
83
100
|
/** Photon's address, for a copy of it the app runs: `https://photon.komoot.io` unless said. */
|
|
84
101
|
photonUrl?: string;
|
|
102
|
+
/**
|
|
103
|
+
* OSRM's address, for routes: its public demo server unless said, which
|
|
104
|
+
* routes by car alone and is for trying things out. A copy the app runs
|
|
105
|
+
* routes by the profiles it was built with (`driving`, `cycling`, `walking`).
|
|
106
|
+
*/
|
|
107
|
+
osrmUrl?: string;
|
|
85
108
|
fetch?: Fetch;
|
|
86
109
|
}
|
|
87
110
|
/**
|
|
@@ -146,7 +169,8 @@ export interface TilesOptions {
|
|
|
146
169
|
search?: AddressSearch;
|
|
147
170
|
reverse?: ReverseSearch;
|
|
148
171
|
searchAsYouType?: boolean;
|
|
172
|
+
/** The app's own routes. */
|
|
173
|
+
route?: RouteFinder;
|
|
149
174
|
}
|
|
150
175
|
/** Map images from any address, such as the app's own server, with their credit. */
|
|
151
176
|
export declare function tiles(options: TilesOptions): MapProvider;
|
|
152
|
-
export {};
|
package/src/lib/providers.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import { type Fetch } from './answers';
|
|
2
3
|
import type { Bounds, LatLng } from './geo';
|
|
3
4
|
/**
|
|
4
|
-
* Where a map's images, credits
|
|
5
|
+
* Where a map's images, credits, address search and routes come from. Every map in
|
|
5
6
|
* the package draws through one of these, so an app changes provider in one
|
|
6
7
|
* place and nothing else moves. Keys never live in Fieldia: the app passes
|
|
7
8
|
* them, or a function that fetches a short-lived token from its own server.
|
|
@@ -53,6 +54,21 @@ export type ReverseSearch = (at: LatLng & {
|
|
|
53
54
|
locale: Locale;
|
|
54
55
|
signal?: AbortSignal;
|
|
55
56
|
}) => Promise<string | null>;
|
|
57
|
+
export type TravelMode = 'car' | 'bike' | 'foot';
|
|
58
|
+
export interface RouteRequest {
|
|
59
|
+
/** Where it starts, the places it passes in order, and where it ends. */
|
|
60
|
+
points: LatLng[];
|
|
61
|
+
mode: TravelMode;
|
|
62
|
+
locale: Locale;
|
|
63
|
+
signal?: AbortSignal;
|
|
64
|
+
}
|
|
65
|
+
/** A route along the roads: its line, how long it is, and how long it takes. */
|
|
66
|
+
export interface RouteFound {
|
|
67
|
+
line: LatLng[];
|
|
68
|
+
metres: number;
|
|
69
|
+
seconds: number;
|
|
70
|
+
}
|
|
71
|
+
export type RouteFinder = (request: RouteRequest) => Promise<RouteFound>;
|
|
56
72
|
export interface MapProvider {
|
|
57
73
|
readonly id: string;
|
|
58
74
|
/** The map images of a kind, or null when the provider has none of it. */
|
|
@@ -71,8 +87,9 @@ export interface MapProvider {
|
|
|
71
87
|
readonly searchAsYouType?: boolean;
|
|
72
88
|
/** Free for trying things out, not for an app in use: a warning says so once. */
|
|
73
89
|
readonly demoOnly?: boolean;
|
|
90
|
+
/** A route along the roads, for a map's routes. */
|
|
91
|
+
readonly route?: RouteFinder;
|
|
74
92
|
}
|
|
75
|
-
type Fetch = typeof globalThis.fetch;
|
|
76
93
|
export interface OpenStreetMapOptions {
|
|
77
94
|
/**
|
|
78
95
|
* Whose search: Photon (komoot's, on OpenStreetMap's data), which answers as
|
|
@@ -82,6 +99,12 @@ export interface OpenStreetMapOptions {
|
|
|
82
99
|
search?: 'photon' | 'nominatim';
|
|
83
100
|
/** Photon's address, for a copy of it the app runs: `https://photon.komoot.io` unless said. */
|
|
84
101
|
photonUrl?: string;
|
|
102
|
+
/**
|
|
103
|
+
* OSRM's address, for routes: its public demo server unless said, which
|
|
104
|
+
* routes by car alone and is for trying things out. A copy the app runs
|
|
105
|
+
* routes by the profiles it was built with (`driving`, `cycling`, `walking`).
|
|
106
|
+
*/
|
|
107
|
+
osrmUrl?: string;
|
|
85
108
|
fetch?: Fetch;
|
|
86
109
|
}
|
|
87
110
|
/**
|
|
@@ -146,7 +169,8 @@ export interface TilesOptions {
|
|
|
146
169
|
search?: AddressSearch;
|
|
147
170
|
reverse?: ReverseSearch;
|
|
148
171
|
searchAsYouType?: boolean;
|
|
172
|
+
/** The app's own routes. */
|
|
173
|
+
route?: RouteFinder;
|
|
149
174
|
}
|
|
150
175
|
/** Map images from any address, such as the app's own server, with their credit. */
|
|
151
176
|
export declare function tiles(options: TilesOptions): MapProvider;
|
|
152
|
-
export {};
|