@fieldia/map 0.18.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +143 -3
  2. package/package.json +4 -4
  3. package/src/index.d.mts +5 -0
  4. package/src/index.d.ts +5 -0
  5. package/src/index.js +4 -1
  6. package/src/index.js.map +1 -1
  7. package/src/index.mjs +2 -0
  8. package/src/index.mjs.map +1 -1
  9. package/src/lib/address-labels.d.mts +33 -0
  10. package/src/lib/address-labels.d.ts +33 -0
  11. package/src/lib/address-labels.js +16 -0
  12. package/src/lib/address-labels.js.map +1 -0
  13. package/src/lib/address-labels.mjs +12 -0
  14. package/src/lib/address-labels.mjs.map +1 -0
  15. package/src/lib/address-line.d.mts +11 -0
  16. package/src/lib/address-line.d.ts +11 -0
  17. package/src/lib/address-line.js +51 -0
  18. package/src/lib/address-line.js.map +1 -0
  19. package/src/lib/address-line.mjs +47 -0
  20. package/src/lib/address-line.mjs.map +1 -0
  21. package/src/lib/address-names.d.mts +38 -0
  22. package/src/lib/address-names.d.ts +38 -0
  23. package/src/lib/address-names.js +240 -0
  24. package/src/lib/address-names.js.map +1 -0
  25. package/src/lib/address-names.mjs +232 -0
  26. package/src/lib/address-names.mjs.map +1 -0
  27. package/src/lib/address-parts.d.mts +146 -0
  28. package/src/lib/address-parts.d.ts +146 -0
  29. package/src/lib/address-parts.js +866 -0
  30. package/src/lib/address-parts.js.map +1 -0
  31. package/src/lib/address-parts.mjs +851 -0
  32. package/src/lib/address-parts.mjs.map +1 -0
  33. package/src/lib/address-search.d.mts +25 -0
  34. package/src/lib/address-search.d.ts +25 -0
  35. package/src/lib/address-search.js +70 -0
  36. package/src/lib/address-search.js.map +1 -0
  37. package/src/lib/address-search.mjs +67 -0
  38. package/src/lib/address-search.mjs.map +1 -0
  39. package/src/lib/address-suggest.d.mts +21 -0
  40. package/src/lib/address-suggest.d.ts +21 -0
  41. package/src/lib/address-suggest.js +273 -0
  42. package/src/lib/address-suggest.js.map +1 -0
  43. package/src/lib/address-suggest.mjs +270 -0
  44. package/src/lib/address-suggest.mjs.map +1 -0
  45. package/src/lib/area-count.d.mts +47 -0
  46. package/src/lib/area-count.d.ts +47 -0
  47. package/src/lib/area-count.js +123 -0
  48. package/src/lib/area-count.js.map +1 -0
  49. package/src/lib/area-count.mjs +116 -0
  50. package/src/lib/area-count.mjs.map +1 -0
  51. package/src/lib/card.d.mts +14 -5
  52. package/src/lib/card.d.ts +14 -5
  53. package/src/lib/card.js +67 -12
  54. package/src/lib/card.js.map +1 -1
  55. package/src/lib/card.mjs +66 -12
  56. package/src/lib/card.mjs.map +1 -1
  57. package/src/lib/embed.d.mts +86 -0
  58. package/src/lib/embed.d.ts +86 -0
  59. package/src/lib/embed.js +96 -0
  60. package/src/lib/embed.js.map +1 -0
  61. package/src/lib/embed.mjs +93 -0
  62. package/src/lib/embed.mjs.map +1 -0
  63. package/src/lib/form-map.js +9 -7
  64. package/src/lib/form-map.js.map +1 -1
  65. package/src/lib/form-map.mjs +10 -8
  66. package/src/lib/form-map.mjs.map +1 -1
  67. package/src/lib/kinds.d.mts +6 -4
  68. package/src/lib/kinds.d.ts +6 -4
  69. package/src/lib/kinds.js +49 -2
  70. package/src/lib/kinds.js.map +1 -1
  71. package/src/lib/kinds.mjs +49 -2
  72. package/src/lib/kinds.mjs.map +1 -1
  73. package/src/lib/labels.d.mts +2 -0
  74. package/src/lib/labels.d.ts +2 -0
  75. package/src/lib/labels.js +4 -0
  76. package/src/lib/labels.js.map +1 -1
  77. package/src/lib/labels.mjs +4 -0
  78. package/src/lib/labels.mjs.map +1 -1
  79. package/src/lib/list-view.d.mts +37 -1
  80. package/src/lib/list-view.d.ts +37 -1
  81. package/src/lib/list-view.js +97 -37
  82. package/src/lib/list-view.js.map +1 -1
  83. package/src/lib/list-view.mjs +97 -38
  84. package/src/lib/list-view.mjs.map +1 -1
  85. package/src/lib/map-core.d.mts +6 -1
  86. package/src/lib/map-core.d.ts +6 -1
  87. package/src/lib/map-core.js +13 -5
  88. package/src/lib/map-core.js.map +1 -1
  89. package/src/lib/map-core.mjs +13 -5
  90. package/src/lib/map-core.mjs.map +1 -1
  91. package/src/lib/pins.d.mts +20 -8
  92. package/src/lib/pins.d.ts +20 -8
  93. package/src/lib/pins.js +60 -15
  94. package/src/lib/pins.js.map +1 -1
  95. package/src/lib/pins.mjs +60 -17
  96. package/src/lib/pins.mjs.map +1 -1
  97. package/src/lib/place.js +23 -11
  98. package/src/lib/place.js.map +1 -1
  99. package/src/lib/place.mjs +23 -11
  100. package/src/lib/place.mjs.map +1 -1
  101. package/src/lib/providers.d.mts +16 -0
  102. package/src/lib/providers.d.ts +16 -0
  103. package/src/lib/providers.js +71 -112
  104. package/src/lib/providers.js.map +1 -1
  105. package/src/lib/providers.mjs +71 -112
  106. package/src/lib/providers.mjs.map +1 -1
  107. package/src/lib/regions.js +18 -1
  108. package/src/lib/regions.js.map +1 -1
  109. package/src/lib/regions.mjs +18 -1
  110. package/src/lib/regions.mjs.map +1 -1
  111. package/src/lib/route-line.d.mts +9 -0
  112. package/src/lib/route-line.d.ts +9 -0
  113. package/src/lib/route-line.js +13 -0
  114. package/src/lib/route-line.js.map +1 -1
  115. package/src/lib/route-line.mjs +11 -0
  116. package/src/lib/route-line.mjs.map +1 -1
  117. package/src/lib/routes.js +6 -2
  118. package/src/lib/routes.js.map +1 -1
  119. package/src/lib/routes.mjs +6 -2
  120. package/src/lib/routes.mjs.map +1 -1
  121. package/src/lib/search-box.d.mts +20 -2
  122. package/src/lib/search-box.d.ts +20 -2
  123. package/src/lib/search-box.js +133 -44
  124. package/src/lib/search-box.js.map +1 -1
  125. package/src/lib/search-box.mjs +133 -44
  126. package/src/lib/search-box.mjs.map +1 -1
  127. package/src/lib/settings.d.mts +19 -2
  128. package/src/lib/settings.d.ts +19 -2
  129. package/src/lib/styles.d.mts +12 -1
  130. package/src/lib/styles.d.ts +12 -1
  131. package/src/lib/styles.js +61 -3
  132. package/src/lib/styles.js.map +1 -1
  133. package/src/lib/styles.mjs +59 -2
  134. package/src/lib/styles.mjs.map +1 -1
  135. package/src/lib/view-box.d.mts +18 -0
  136. package/src/lib/view-box.d.ts +18 -0
  137. package/src/lib/view-box.js +31 -0
  138. package/src/lib/view-box.js.map +1 -0
  139. package/src/lib/view-box.mjs +25 -0
  140. package/src/lib/view-box.mjs.map +1 -0
  141. package/src/lib/widgets.d.mts +3 -0
  142. package/src/lib/widgets.d.ts +3 -0
  143. package/src/lib/widgets.js +10 -1
  144. package/src/lib/widgets.js.map +1 -1
  145. package/src/lib/widgets.mjs +10 -1
  146. package/src/lib/widgets.mjs.map +1 -1
@@ -1,5 +1,6 @@
1
- import type { Locale } from '@fieldia/core';
1
+ import type { Locale, ResolvedFilter } from '@fieldia/core';
2
2
  import type { LatLng } from './geo.mjs';
3
+ import type { AddressLabels } from './address-labels.mjs';
3
4
  import type { FormMapLabels, ListMapLabels, MapLabels } from './labels.mjs';
4
5
  import type { PinDrawer } from './pins.mjs';
5
6
  import type { AddressSearch, MapProvider, ReachFinder, ReverseSearch, RouteFinder } from './providers.mjs';
@@ -27,6 +28,22 @@ export interface MapSettings {
27
28
  regions?: Record<string, unknown | (() => unknown)>;
28
29
  /** The app's own pins for a list's map, by the name a page's `pin.widget` gives. */
29
30
  pins?: Record<string, PinDrawer>;
31
+ /**
32
+ * The currency the app's amounts are mostly in, by code ("EGP"): a pin
33
+ * leaves it unsaid ("13.9M") and names any other ("$ 450K"). A page's own
34
+ * `money.home`, on the pin or its field, wins over it.
35
+ */
36
+ homeCurrency?: string;
30
37
  /** The app's own words over the maps', by language. */
31
- labels?: Partial<Record<Locale, Partial<MapLabels & ListMapLabels & FormMapLabels>>>;
38
+ labels?: Partial<Record<Locale, Partial<MapLabels & ListMapLabels & FormMapLabels & AddressLabels>>>;
39
+ /**
40
+ * How a list's map learns how many records its view holds, for "Search
41
+ * this area (24)", when the records on hand cannot say (more than the map
42
+ * shows, or a view past the area searched): `true` asks the data source's
43
+ * `list` for one record and reads its `total`; a function is the app's own
44
+ * count. Asked a moment after the map stops, aborted when it moves again.
45
+ * Left out, only the records on hand are counted, and the button says no
46
+ * number when they cannot tell.
47
+ */
48
+ countArea?: boolean | ((filter: ResolvedFilter[], signal: AbortSignal) => Promise<number>);
32
49
  }
@@ -1,5 +1,6 @@
1
- import type { Locale } from '@fieldia/core';
1
+ import type { Locale, ResolvedFilter } from '@fieldia/core';
2
2
  import type { LatLng } from './geo';
3
+ import type { AddressLabels } from './address-labels';
3
4
  import type { FormMapLabels, ListMapLabels, MapLabels } from './labels';
4
5
  import type { PinDrawer } from './pins';
5
6
  import type { AddressSearch, MapProvider, ReachFinder, ReverseSearch, RouteFinder } from './providers';
@@ -27,6 +28,22 @@ export interface MapSettings {
27
28
  regions?: Record<string, unknown | (() => unknown)>;
28
29
  /** The app's own pins for a list's map, by the name a page's `pin.widget` gives. */
29
30
  pins?: Record<string, PinDrawer>;
31
+ /**
32
+ * The currency the app's amounts are mostly in, by code ("EGP"): a pin
33
+ * leaves it unsaid ("13.9M") and names any other ("$ 450K"). A page's own
34
+ * `money.home`, on the pin or its field, wins over it.
35
+ */
36
+ homeCurrency?: string;
30
37
  /** The app's own words over the maps', by language. */
31
- labels?: Partial<Record<Locale, Partial<MapLabels & ListMapLabels & FormMapLabels>>>;
38
+ labels?: Partial<Record<Locale, Partial<MapLabels & ListMapLabels & FormMapLabels & AddressLabels>>>;
39
+ /**
40
+ * How a list's map learns how many records its view holds, for "Search
41
+ * this area (24)", when the records on hand cannot say (more than the map
42
+ * shows, or a view past the area searched): `true` asks the data source's
43
+ * `list` for one record and reads its `total`; a function is the app's own
44
+ * count. Asked a moment after the map stops, aborted when it moves again.
45
+ * Left out, only the records on hand are counted, and the button says no
46
+ * number when they cannot tell.
47
+ */
48
+ countArea?: boolean | ((filter: ResolvedFilter[], signal: AbortSignal) => Promise<number>);
32
49
  }
@@ -14,9 +14,20 @@ export declare function installLeafletStyles(doc: Document, css: string): void;
14
14
  * tone, bubbles of pins that crowd, the card a pin opens, "Search this area".
15
15
  * Its own stylesheet, so a form with only a place or an area never carries it.
16
16
  */
17
- export declare const LIST_MAP_CSS = "\n.fd-map-list { min-width: 0; }\n.fd-map-mark { overflow: visible; }\n.fd-map-mark:focus { outline: none; }\n/* Each mark is as large as its face, stood on its point by its foot, its middle, or the tip of a label's tail. */\n.fd-map-mark.fd-map-foot { translate: -50% -100%; }\n.fd-map-mark.fd-map-middle { translate: -50% -50%; }\n.fd-map-mark.fd-map-tail { translate: -50% calc(-100% - 6px); }\n.fd-map-face {\n --fd-map-tone: var(--fd-accent); --fd-map-on: var(--fd-accent-text);\n position: relative; box-sizing: border-box; cursor: pointer; transition: scale 0.12s;\n}\n.fd-map-face[data-tone] { --fd-map-on: var(--fd-surface); }\n.fd-map-face[data-tone=\"info\"] { --fd-map-tone: var(--fd-info); }\n.fd-map-face[data-tone=\"success\"] { --fd-map-tone: var(--fd-success); }\n.fd-map-face[data-tone=\"warning\"] { --fd-map-tone: var(--fd-warning); }\n.fd-map-face[data-tone=\"danger\"] { --fd-map-tone: var(--fd-error); }\n.fd-map-face[data-tone=\"muted\"] { --fd-map-tone: var(--fd-muted); }\n.fd-map-face[data-stands=\"foot\"] { transform-origin: 50% 100%; }\n.fd-map-face[data-stands=\"middle\"] { transform-origin: 50% 50%; }\n.fd-map-face[data-hot], .fd-map-mark:hover .fd-map-face, .fd-map-bubble[data-hot], .fd-map-mark:hover .fd-map-bubble { scale: 1.12; }\n.fd-map-mark:focus-visible .fd-map-face, .fd-map-mark:focus-visible .fd-map-bubble { outline: 2px solid var(--fd-focus); outline-offset: 3px; }\n.fd-map-face-icon { display: block; }\n.fd-map-face-icon svg { display: block; width: 100%; height: 100%; }\n.fd-map-face[data-look=\"label\"] {\n padding: 4px 9px; border-radius: 999px; font-weight: 700; font-size: 13px; line-height: 1.25; font-variant-numeric: tabular-nums;\n background: var(--fd-surface); color: var(--fd-text); border: 1.5px solid color-mix(in srgb, var(--fd-text) 20%, transparent); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n}\n.fd-map-face[data-look=\"label\"][data-tone] { color: var(--fd-map-tone); border-color: var(--fd-map-tone); }\n.fd-map-face[data-look=\"label\"]::after {\n content: \"\"; position: absolute; left: 50%; bottom: -5px; width: 8px; height: 8px; margin-left: -4px; transform: rotate(45deg);\n background: inherit; border: inherit; border-top: 0; border-left: 0;\n}\n.fd-map-face[data-look=\"label\"]:is([data-hot], [data-chosen]), .fd-map-mark:hover .fd-map-face[data-look=\"label\"] { background: var(--fd-map-tone); color: var(--fd-map-on); border-color: var(--fd-map-tone); }\n.fd-map-face-text { display: block; max-width: 16ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.fd-map-face[data-look=\"pin\"] { width: 30px; height: 40px; }\n.fd-map-face[data-look=\"pin\"] > svg { display: block; width: 30px; height: 40px; filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.3)); }\n.fd-map-face-body { fill: var(--fd-map-tone); stroke: var(--fd-surface); stroke-width: 1.5; }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon { position: absolute; left: 7px; top: 6px; width: 16px; height: 16px; color: var(--fd-map-on); }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon:empty { left: 10px; top: 9px; width: 10px; height: 10px; border-radius: 50%; background: var(--fd-map-on); }\n.fd-map-face[data-look=\"icon\"] {\n width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%;\n background: var(--fd-map-tone); color: var(--fd-map-on); border: 2px solid var(--fd-surface); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\n.fd-map-face[data-look=\"icon\"] .fd-map-face-icon { width: 20px; height: 20px; }\n.fd-map-face-turn { position: absolute; inset: -9px; pointer-events: none; }\n.fd-map-face-turn::before { content: \"\"; position: absolute; left: 50%; top: 0; margin-left: -5px; border: 5px solid transparent; border-top: 0; border-bottom: 7px solid var(--fd-map-tone); }\n.fd-map-face-photo {\n display: grid; place-items: center; width: 40px; height: 40px; box-sizing: border-box; border-radius: 50%; object-fit: cover;\n border: 3px solid var(--fd-map-tone); background: var(--fd-fill); color: var(--fd-muted); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\nspan.fd-map-face-photo svg { width: 22px; height: 22px; }\n.fd-map-face[data-look=\"photo\"] .fd-map-face-text {\n position: absolute; top: calc(100% + 2px); left: 50%; translate: -50% 0; max-width: 14ch; padding: 1px 6px; border-radius: 999px;\n font-size: 12px; font-weight: 600; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n}\n.fd-map-face[data-look=\"dot\"] { width: 16px; height: 16px; border-radius: 50%; background: var(--fd-map-tone); border: 2px solid var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }\n.fd-map-face:is([data-look=\"icon\"], [data-look=\"dot\"])[data-chosen], .fd-map-face[data-chosen] .fd-map-face-photo { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-map-tone); }\n.fd-map-face[data-chosen]::before, .fd-map-bubble[data-chosen]::before {\n content: \"\u2713\"; position: absolute; top: -7px; right: -7px; z-index: 1; width: 16px; height: 16px; border-radius: 50%; box-sizing: border-box;\n display: grid; place-items: center; font: 700 10px/1 system-ui, sans-serif; background: var(--fd-accent); color: var(--fd-accent-text); border: 1.5px solid var(--fd-surface);\n}\n.fd-map-bubble {\n position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; cursor: pointer;\n background: var(--fd-accent); color: var(--fd-accent-text); font-weight: 700; font-size: 13px; font-variant-numeric: tabular-nums; transition: scale 0.12s;\n box-shadow: 0 0 0 5px color-mix(in srgb, var(--fd-accent) 30%, transparent), 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n.fd-map-bubble[data-size=\"m\"] { width: 40px; height: 40px; }\n.fd-map-bubble[data-size=\"l\"] { width: 48px; height: 48px; }\n.fd-map-card-popup .leaflet-popup-content-wrapper { padding: 0; border-radius: 10px; overflow: hidden; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.24); }\n.fd-map-card-popup .leaflet-popup-content { margin: 0; font: inherit; font-size: 14px; line-height: 1.4; }\n.fd-map-card-popup .leaflet-popup-tip { background: var(--fd-surface); }\n.fd-map-card { display: grid; }\n.fd-map-card-image { display: block; width: 100%; max-width: 100%; aspect-ratio: 16 / 9; object-fit: cover; background: var(--fd-fill); }\n.fd-map-card-body { display: grid; gap: 8px; padding: 10px 12px 12px; }\n.fd-map-card-head { display: flex; align-items: flex-start; gap: 8px; }\n.fd-map-card-title { flex: 1; min-width: 0; font-size: 14.5px; line-height: 1.3; overflow-wrap: anywhere; }\n.fd-map-card-close {\n flex: none; width: 28px; height: 28px; margin: -4px -6px -4px 0; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;\n background: transparent; color: var(--fd-muted); font: 400 20px/1 system-ui, sans-serif; cursor: pointer;\n}\n.fd-map-card[dir=\"rtl\"] .fd-map-card-close { margin: -4px 0 -4px -6px; }\n.fd-map-card-close:hover { background: var(--fd-fill); color: var(--fd-text); }\n.fd-map-card-fields { margin: 0; display: grid; gap: 3px; font-size: 13px; }\n.fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }\n.fd-map-card-fields dt { color: var(--fd-muted); }\n.fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }\n.fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }\n.fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }\n.fd-map-card .fd-button { min-height: 30px; padding-inline: 14px; }\n.fd-map-card :focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n.fd-map-crowd-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; max-height: 220px; overflow: auto; }\n.fd-map-crowd-item { width: 100%; padding: 6px 8px; border: 0; border-radius: 6px; text-align: start; background: transparent; color: var(--fd-text); font: inherit; font-size: 13px; cursor: pointer; }\nbutton.fd-map-crowd-item:hover { background: var(--fd-accent-soft); }\nspan.fd-map-crowd-item { display: block; cursor: default; }\n.fd-map-here {\n position: absolute; top: 10px; left: 50%; translate: -50% 0; z-index: 1000; padding: 7px 14px; border-radius: 999px; white-space: nowrap; cursor: pointer;\n border: 1px solid var(--fd-border); background: var(--fd-surface); color: var(--fd-text); font: inherit; font-size: 13.5px; font-weight: 600; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n.fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n/* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach. */\n@container fd-list (max-width: 860px) { .fd-list[data-view=\"both\"] .fd-map-list .fd-map-box { height: clamp(260px, 46vh, 420px); } }\n.fd-map-ghost .fd-map-face { pointer-events: none; }\n/* The tools that draw an area to search in: at the map's start, the zoom at its end. */\n.fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }\n.fd-map-box[data-side=\"left\"] .fd-map-draw { left: auto; right: 8px; }\n.fd-map-draw button {\n width: 32px; height: 32px; display: grid; place-items: center; padding: 0; cursor: pointer;\n background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n.fd-map-draw button svg { width: 18px; height: 18px; }\n.fd-map-draw button:hover, .fd-map-draw button[aria-pressed=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-draw button[aria-pressed=\"true\"] { background: var(--fd-accent-soft); }\n.fd-map-draw button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n/* While an area is drawn, the pins let every press through to the map. */\n.fd-map-box[data-drawing] .fd-map-mark { pointer-events: none; }\n/* The drawing's bar starts after the tools. */\n.fd-map-list .fd-map-hint { left: 48px; }\n.fd-map-list .fd-map-box[data-side=\"left\"] .fd-map-hint { left: 52px; right: 48px; }\n.fd-map-list-note {\n position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;\n background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);\n}\n";
17
+ export declare const LIST_MAP_CSS = "\n.fd-map-list { min-width: 0; }\n.fd-map-mark { overflow: visible; }\n.fd-map-mark:focus { outline: none; }\n/* Each mark is as large as its face, stood on its point by its foot, its middle, or the tip of a label's tail. */\n.fd-map-mark.fd-map-foot { translate: -50% -100%; }\n.fd-map-mark.fd-map-middle { translate: -50% -50%; }\n.fd-map-mark.fd-map-tail { translate: -50% calc(-100% - 6px); }\n.fd-map-face {\n --fd-map-tone: var(--fd-accent); --fd-map-on: var(--fd-accent-text);\n position: relative; box-sizing: border-box; cursor: pointer; transition: scale 0.12s;\n}\n.fd-map-face[data-tone] { --fd-map-on: var(--fd-surface); }\n.fd-map-face[data-tone=\"info\"] { --fd-map-tone: var(--fd-info); }\n.fd-map-face[data-tone=\"success\"] { --fd-map-tone: var(--fd-success); }\n.fd-map-face[data-tone=\"warning\"] { --fd-map-tone: var(--fd-warning); }\n.fd-map-face[data-tone=\"danger\"] { --fd-map-tone: var(--fd-error); }\n.fd-map-face[data-tone=\"muted\"] { --fd-map-tone: var(--fd-muted); }\n.fd-map-face[data-stands=\"foot\"] { transform-origin: 50% 100%; }\n.fd-map-face[data-stands=\"middle\"] { transform-origin: 50% 50%; }\n.fd-map-face[data-hot], .fd-map-mark:hover .fd-map-face, .fd-map-bubble[data-hot], .fd-map-mark:hover .fd-map-bubble { scale: 1.12; }\n.fd-map-mark:focus-visible .fd-map-face, .fd-map-mark:focus-visible .fd-map-bubble { outline: 2px solid var(--fd-focus); outline-offset: 3px; }\n.fd-map-face-icon { display: block; }\n.fd-map-face-icon svg { display: block; width: 100%; height: 100%; }\n.fd-map-face[data-look=\"label\"] {\n padding: 4px 9px; border-radius: 999px; font-weight: 700; font-size: 13px; line-height: 1.25; font-variant-numeric: tabular-nums;\n background: var(--fd-surface); color: var(--fd-text); border: 1.5px solid color-mix(in srgb, var(--fd-text) 20%, transparent); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n}\n.fd-map-face[data-look=\"label\"][data-tone] { color: var(--fd-map-tone); border-color: var(--fd-map-tone); }\n.fd-map-face[data-look=\"label\"]::after {\n content: \"\"; position: absolute; left: 50%; bottom: -5px; width: 8px; height: 8px; margin-left: -4px; transform: rotate(45deg);\n background: inherit; border: inherit; border-top: 0; border-left: 0;\n}\n.fd-map-face[data-look=\"label\"]:is([data-hot], [data-chosen]), .fd-map-mark:hover .fd-map-face[data-look=\"label\"] { background: var(--fd-map-tone); color: var(--fd-map-on); border-color: var(--fd-map-tone); }\n.fd-map-face-text { display: block; max-width: 16ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.fd-map-face[data-look=\"pin\"] { width: 30px; height: 40px; }\n.fd-map-face[data-look=\"pin\"] > svg { display: block; width: 30px; height: 40px; filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.3)); }\n.fd-map-face-body { fill: var(--fd-map-tone); stroke: var(--fd-surface); stroke-width: 1.5; }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon { position: absolute; left: 7px; top: 6px; width: 16px; height: 16px; color: var(--fd-map-on); }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon:empty { left: 10px; top: 9px; width: 10px; height: 10px; border-radius: 50%; background: var(--fd-map-on); }\n.fd-map-face[data-look=\"icon\"] {\n width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%;\n background: var(--fd-map-tone); color: var(--fd-map-on); border: 2px solid var(--fd-surface); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\n.fd-map-face[data-look=\"icon\"] .fd-map-face-icon { width: 20px; height: 20px; }\n.fd-map-face-turn { position: absolute; inset: -9px; pointer-events: none; }\n.fd-map-face-turn::before { content: \"\"; position: absolute; left: 50%; top: 0; margin-left: -5px; border: 5px solid transparent; border-top: 0; border-bottom: 7px solid var(--fd-map-tone); }\n.fd-map-face-photo {\n display: grid; place-items: center; width: 40px; height: 40px; box-sizing: border-box; border-radius: 50%; object-fit: cover;\n border: 3px solid var(--fd-map-tone); background: var(--fd-fill); color: var(--fd-muted); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\nspan.fd-map-face-photo svg { width: 22px; height: 22px; }\n.fd-map-face[data-look=\"photo\"] .fd-map-face-text {\n position: absolute; top: calc(100% + 2px); left: 50%; translate: -50% 0; max-width: 14ch; padding: 1px 6px; border-radius: 999px;\n font-size: 12px; font-weight: 600; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n}\n.fd-map-face[data-look=\"dot\"] { width: 16px; height: 16px; border-radius: 50%; background: var(--fd-map-tone); border: 2px solid var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }\n.fd-map-face:is([data-look=\"icon\"], [data-look=\"dot\"])[data-chosen], .fd-map-face[data-chosen] .fd-map-face-photo { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-map-tone); }\n.fd-map-face[data-chosen]::before, .fd-map-bubble[data-chosen]::before {\n content: \"\u2713\"; position: absolute; top: -7px; right: -7px; z-index: 1; width: 16px; height: 16px; border-radius: 50%; box-sizing: border-box;\n display: grid; place-items: center; font: 700 10px/1 system-ui, sans-serif; background: var(--fd-accent); color: var(--fd-accent-text); border: 1.5px solid var(--fd-surface);\n}\n.fd-map-bubble {\n position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; cursor: pointer;\n background: var(--fd-accent); color: var(--fd-accent-text); font-weight: 700; font-size: 13px; font-variant-numeric: tabular-nums; transition: scale 0.12s;\n box-shadow: 0 0 0 5px color-mix(in srgb, var(--fd-accent) 30%, transparent), 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n.fd-map-bubble[data-size=\"m\"] { width: 40px; height: 40px; }\n.fd-map-bubble[data-size=\"l\"] { width: 48px; height: 48px; }\n.fd-map-card-popup .leaflet-popup-content-wrapper { padding: 0; border-radius: 10px; overflow: hidden; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.24); }\n.fd-map-card-popup .leaflet-popup-content { margin: 0; font: inherit; font-size: 14px; line-height: 1.4; }\n.fd-map-card-popup .leaflet-popup-tip { background: var(--fd-surface); }\n.fd-map-card { display: grid; }\n.fd-map-card-image { display: block; width: 100%; max-width: 100%; aspect-ratio: 16 / 9; object-fit: cover; background: var(--fd-fill); }\n.fd-map-card-body { display: grid; gap: 8px; padding: 10px 12px 12px; }\n.fd-map-card-head { display: flex; align-items: flex-start; gap: 8px; }\n.fd-map-card-title { flex: 1; min-width: 0; font-size: 14.5px; line-height: 1.3; overflow-wrap: anywhere; }\n.fd-map-card-close {\n flex: none; width: 28px; height: 28px; margin: -4px -6px -4px 0; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;\n background: transparent; color: var(--fd-muted); font: 400 20px/1 system-ui, sans-serif; cursor: pointer;\n}\n.fd-map-card[dir=\"rtl\"] .fd-map-card-close { margin: -4px 0 -4px -6px; }\n.fd-map-card-close:hover { background: var(--fd-fill); color: var(--fd-text); }\n.fd-map-card-fields { margin: 0; display: grid; gap: 3px; font-size: 13px; }\n.fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }\n.fd-map-card-fields dt { color: var(--fd-muted); }\n.fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n/* A title linking to the record's page; bare lines, their labels for a screen reader alone; the first line leading. */\n.fd-map-card .fd-map-card-link { color: inherit; text-decoration: none; }\n.fd-map-card .fd-map-card-link:hover { color: var(--fd-accent); text-decoration: underline; }\n.fd-map-card-picture { display: block; }\n.fd-map-card-fields[data-labels] div { display: block; }\n.fd-map-card-fields[data-labels] dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-map-card-fields[data-labels] dd { text-align: start; font-weight: 400; }\n.fd-map-card-fields[data-lead] > div:first-child dd { font-size: 15.5px; font-weight: 700; color: var(--fd-text); }\n.fd-map-card-fields[data-lead][data-labels] > div + div dd { color: var(--fd-muted); }\n.fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }\n.fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }\n.fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }\n.fd-map-card .fd-button { min-height: 30px; padding-inline: 14px; }\n.fd-map-card :focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n.fd-map-crowd-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; max-height: 220px; overflow: auto; }\n.fd-map-crowd-item { width: 100%; padding: 6px 8px; border: 0; border-radius: 6px; text-align: start; background: transparent; color: var(--fd-text); font: inherit; font-size: 13px; cursor: pointer; }\nbutton.fd-map-crowd-item:hover { background: var(--fd-accent-soft); }\nspan.fd-map-crowd-item { display: block; cursor: default; }\n.fd-map-here {\n position: absolute; top: 10px; left: 50%; translate: -50% 0; z-index: 1000; padding: 7px 14px; border-radius: 999px; white-space: nowrap; cursor: pointer;\n border: 1px solid var(--fd-border); background: var(--fd-surface); color: var(--fd-text); font: inherit; font-size: 13.5px; font-weight: 600; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n.fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n.fd-map-box[data-card] > .fd-map-here { visibility: hidden; }\n/* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach (unless the page says how tall). */\n@container fd-list (max-width: 860px) { .fd-list[data-view=\"both\"] .fd-map-list:not([data-height]) .fd-map-box { height: clamp(260px, 46vh, 420px); } }\n.fd-map-ghost .fd-map-face { pointer-events: none; }\n/* The tools that draw an area to search in: at the map's start, the zoom at its end. */\n.fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }\n.fd-map-box[data-side=\"left\"] .fd-map-draw { left: auto; right: 8px; }\n.fd-map-draw button {\n width: 32px; height: 32px; display: grid; place-items: center; padding: 0; cursor: pointer;\n background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n.fd-map-draw button svg { width: 18px; height: 18px; }\n.fd-map-draw button:hover, .fd-map-draw button[aria-pressed=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-draw button[aria-pressed=\"true\"] { background: var(--fd-accent-soft); }\n.fd-map-draw button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n/* While an area is drawn, the pins let every press through to the map. */\n.fd-map-box[data-drawing] .fd-map-mark { pointer-events: none; }\n/* The drawing's bar starts after the tools. */\n.fd-map-list .fd-map-hint { left: 48px; }\n.fd-map-list .fd-map-box[data-side=\"left\"] .fd-map-hint { left: 52px; right: 48px; }\n.fd-map-list-note {\n position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;\n background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);\n}\n/* As tall as the element it is put in; in the viewer's list, which gives it no height to fill, as tall as a list's map is. */\n.fd-map-list[data-height=\"fill\"] { height: 100%; }\n.fd-list-map .fd-map-list[data-height=\"fill\"] { height: auto; }\n.fd-list-map .fd-map-list[data-height=\"fill\"] .fd-map-box { height: clamp(320px, 64vh, 640px); }\n/* A map that takes every gesture: one finger pans it, the page does not scroll under it. */\n.fd-map-box.leaflet-container[data-gestures=\"all\"] { touch-action: none; }\n";
18
18
  /** The list map's stylesheet, once per document, after the maps' own. */
19
19
  export declare function installListMapStyles(doc: Document): void;
20
+ /**
21
+ * A list's map in a page of its own (`mountListMap`), outside the viewer:
22
+ * what the viewer's form gives its map — a part hidden stays hidden, words
23
+ * for a screen reader alone, its buttons, its sizes — on the map's element
24
+ * alone, so none of it reaches the page round it. Its colours are Fieldia's
25
+ * tokens, light and dark by the page's colour scheme, in Fieldia's tokens'
26
+ * layer: a page's own rule for `.fd-map-embed`, of any weight, sets them.
27
+ */
28
+ export declare const EMBED_CSS = "\n@layer fieldia-tokens {\n.fd-map-embed {\n --fd-text: light-dark(#1f2328, #e8eaed); --fd-muted: light-dark(#59636e, #a3a9b2); --fd-surface: light-dark(#fff, #1f2329); --fd-border: light-dark(#d0d7de, #3a4048);\n --fd-accent: light-dark(#1365d9, #5aa2ff); --fd-accent-text: light-dark(#fff, #0b1220); --fd-accent-soft: light-dark(#e6f4ff, #1d2c42); --fd-focus: var(--fd-accent);\n --fd-info: light-dark(#0b5cad, #7db7ff); --fd-success: light-dark(#2e7d32, #6fd08e); --fd-warning: light-dark(#8a5300, #f2b55c); --fd-error: light-dark(#c62828, #ff8a7a);\n --fd-control-radius: 6px;\n}\n}\n.fd-map-embed { position: relative; color: var(--fd-text); font-size: 14px; line-height: 1.45; }\n.fd-map-embed *, .fd-map-embed ::before, .fd-map-embed ::after { box-sizing: border-box; }\n.fd-map-embed [hidden] { display: none !important; }\n.fd-map-embed .fd-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-map-embed .fd-button {\n font: inherit; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 4px 14px;\n border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); color: var(--fd-text);\n}\n.fd-map-embed .fd-button:hover { border-color: var(--fd-accent); color: var(--fd-accent); }\n.fd-map-embed .fd-button-primary { background: var(--fd-accent); border-color: var(--fd-accent); color: var(--fd-accent-text); }\n.fd-map-embed .fd-button-primary:hover { color: var(--fd-accent-text); filter: brightness(1.12); }\n.fd-map-embed .fd-button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n.fd-map-embed .fd-button[aria-busy=\"true\"] { cursor: progress; opacity: 0.7; }\n";
29
+ /** A list's map's own base, once per document, after the list map's stylesheet: a page of its own carries it, the viewer never does. */
30
+ export declare function installEmbedStyles(doc: Document): void;
20
31
  /**
21
32
  * A form's map, on top of a list map's pins and cards: its label, a route
22
33
  * (the part travelled faded), a place whose news is old, the Follow button,
@@ -14,9 +14,20 @@ export declare function installLeafletStyles(doc: Document, css: string): void;
14
14
  * tone, bubbles of pins that crowd, the card a pin opens, "Search this area".
15
15
  * Its own stylesheet, so a form with only a place or an area never carries it.
16
16
  */
17
- export declare const LIST_MAP_CSS = "\n.fd-map-list { min-width: 0; }\n.fd-map-mark { overflow: visible; }\n.fd-map-mark:focus { outline: none; }\n/* Each mark is as large as its face, stood on its point by its foot, its middle, or the tip of a label's tail. */\n.fd-map-mark.fd-map-foot { translate: -50% -100%; }\n.fd-map-mark.fd-map-middle { translate: -50% -50%; }\n.fd-map-mark.fd-map-tail { translate: -50% calc(-100% - 6px); }\n.fd-map-face {\n --fd-map-tone: var(--fd-accent); --fd-map-on: var(--fd-accent-text);\n position: relative; box-sizing: border-box; cursor: pointer; transition: scale 0.12s;\n}\n.fd-map-face[data-tone] { --fd-map-on: var(--fd-surface); }\n.fd-map-face[data-tone=\"info\"] { --fd-map-tone: var(--fd-info); }\n.fd-map-face[data-tone=\"success\"] { --fd-map-tone: var(--fd-success); }\n.fd-map-face[data-tone=\"warning\"] { --fd-map-tone: var(--fd-warning); }\n.fd-map-face[data-tone=\"danger\"] { --fd-map-tone: var(--fd-error); }\n.fd-map-face[data-tone=\"muted\"] { --fd-map-tone: var(--fd-muted); }\n.fd-map-face[data-stands=\"foot\"] { transform-origin: 50% 100%; }\n.fd-map-face[data-stands=\"middle\"] { transform-origin: 50% 50%; }\n.fd-map-face[data-hot], .fd-map-mark:hover .fd-map-face, .fd-map-bubble[data-hot], .fd-map-mark:hover .fd-map-bubble { scale: 1.12; }\n.fd-map-mark:focus-visible .fd-map-face, .fd-map-mark:focus-visible .fd-map-bubble { outline: 2px solid var(--fd-focus); outline-offset: 3px; }\n.fd-map-face-icon { display: block; }\n.fd-map-face-icon svg { display: block; width: 100%; height: 100%; }\n.fd-map-face[data-look=\"label\"] {\n padding: 4px 9px; border-radius: 999px; font-weight: 700; font-size: 13px; line-height: 1.25; font-variant-numeric: tabular-nums;\n background: var(--fd-surface); color: var(--fd-text); border: 1.5px solid color-mix(in srgb, var(--fd-text) 20%, transparent); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n}\n.fd-map-face[data-look=\"label\"][data-tone] { color: var(--fd-map-tone); border-color: var(--fd-map-tone); }\n.fd-map-face[data-look=\"label\"]::after {\n content: \"\"; position: absolute; left: 50%; bottom: -5px; width: 8px; height: 8px; margin-left: -4px; transform: rotate(45deg);\n background: inherit; border: inherit; border-top: 0; border-left: 0;\n}\n.fd-map-face[data-look=\"label\"]:is([data-hot], [data-chosen]), .fd-map-mark:hover .fd-map-face[data-look=\"label\"] { background: var(--fd-map-tone); color: var(--fd-map-on); border-color: var(--fd-map-tone); }\n.fd-map-face-text { display: block; max-width: 16ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.fd-map-face[data-look=\"pin\"] { width: 30px; height: 40px; }\n.fd-map-face[data-look=\"pin\"] > svg { display: block; width: 30px; height: 40px; filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.3)); }\n.fd-map-face-body { fill: var(--fd-map-tone); stroke: var(--fd-surface); stroke-width: 1.5; }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon { position: absolute; left: 7px; top: 6px; width: 16px; height: 16px; color: var(--fd-map-on); }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon:empty { left: 10px; top: 9px; width: 10px; height: 10px; border-radius: 50%; background: var(--fd-map-on); }\n.fd-map-face[data-look=\"icon\"] {\n width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%;\n background: var(--fd-map-tone); color: var(--fd-map-on); border: 2px solid var(--fd-surface); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\n.fd-map-face[data-look=\"icon\"] .fd-map-face-icon { width: 20px; height: 20px; }\n.fd-map-face-turn { position: absolute; inset: -9px; pointer-events: none; }\n.fd-map-face-turn::before { content: \"\"; position: absolute; left: 50%; top: 0; margin-left: -5px; border: 5px solid transparent; border-top: 0; border-bottom: 7px solid var(--fd-map-tone); }\n.fd-map-face-photo {\n display: grid; place-items: center; width: 40px; height: 40px; box-sizing: border-box; border-radius: 50%; object-fit: cover;\n border: 3px solid var(--fd-map-tone); background: var(--fd-fill); color: var(--fd-muted); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\nspan.fd-map-face-photo svg { width: 22px; height: 22px; }\n.fd-map-face[data-look=\"photo\"] .fd-map-face-text {\n position: absolute; top: calc(100% + 2px); left: 50%; translate: -50% 0; max-width: 14ch; padding: 1px 6px; border-radius: 999px;\n font-size: 12px; font-weight: 600; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n}\n.fd-map-face[data-look=\"dot\"] { width: 16px; height: 16px; border-radius: 50%; background: var(--fd-map-tone); border: 2px solid var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }\n.fd-map-face:is([data-look=\"icon\"], [data-look=\"dot\"])[data-chosen], .fd-map-face[data-chosen] .fd-map-face-photo { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-map-tone); }\n.fd-map-face[data-chosen]::before, .fd-map-bubble[data-chosen]::before {\n content: \"\u2713\"; position: absolute; top: -7px; right: -7px; z-index: 1; width: 16px; height: 16px; border-radius: 50%; box-sizing: border-box;\n display: grid; place-items: center; font: 700 10px/1 system-ui, sans-serif; background: var(--fd-accent); color: var(--fd-accent-text); border: 1.5px solid var(--fd-surface);\n}\n.fd-map-bubble {\n position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; cursor: pointer;\n background: var(--fd-accent); color: var(--fd-accent-text); font-weight: 700; font-size: 13px; font-variant-numeric: tabular-nums; transition: scale 0.12s;\n box-shadow: 0 0 0 5px color-mix(in srgb, var(--fd-accent) 30%, transparent), 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n.fd-map-bubble[data-size=\"m\"] { width: 40px; height: 40px; }\n.fd-map-bubble[data-size=\"l\"] { width: 48px; height: 48px; }\n.fd-map-card-popup .leaflet-popup-content-wrapper { padding: 0; border-radius: 10px; overflow: hidden; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.24); }\n.fd-map-card-popup .leaflet-popup-content { margin: 0; font: inherit; font-size: 14px; line-height: 1.4; }\n.fd-map-card-popup .leaflet-popup-tip { background: var(--fd-surface); }\n.fd-map-card { display: grid; }\n.fd-map-card-image { display: block; width: 100%; max-width: 100%; aspect-ratio: 16 / 9; object-fit: cover; background: var(--fd-fill); }\n.fd-map-card-body { display: grid; gap: 8px; padding: 10px 12px 12px; }\n.fd-map-card-head { display: flex; align-items: flex-start; gap: 8px; }\n.fd-map-card-title { flex: 1; min-width: 0; font-size: 14.5px; line-height: 1.3; overflow-wrap: anywhere; }\n.fd-map-card-close {\n flex: none; width: 28px; height: 28px; margin: -4px -6px -4px 0; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;\n background: transparent; color: var(--fd-muted); font: 400 20px/1 system-ui, sans-serif; cursor: pointer;\n}\n.fd-map-card[dir=\"rtl\"] .fd-map-card-close { margin: -4px 0 -4px -6px; }\n.fd-map-card-close:hover { background: var(--fd-fill); color: var(--fd-text); }\n.fd-map-card-fields { margin: 0; display: grid; gap: 3px; font-size: 13px; }\n.fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }\n.fd-map-card-fields dt { color: var(--fd-muted); }\n.fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n.fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }\n.fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }\n.fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }\n.fd-map-card .fd-button { min-height: 30px; padding-inline: 14px; }\n.fd-map-card :focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n.fd-map-crowd-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; max-height: 220px; overflow: auto; }\n.fd-map-crowd-item { width: 100%; padding: 6px 8px; border: 0; border-radius: 6px; text-align: start; background: transparent; color: var(--fd-text); font: inherit; font-size: 13px; cursor: pointer; }\nbutton.fd-map-crowd-item:hover { background: var(--fd-accent-soft); }\nspan.fd-map-crowd-item { display: block; cursor: default; }\n.fd-map-here {\n position: absolute; top: 10px; left: 50%; translate: -50% 0; z-index: 1000; padding: 7px 14px; border-radius: 999px; white-space: nowrap; cursor: pointer;\n border: 1px solid var(--fd-border); background: var(--fd-surface); color: var(--fd-text); font: inherit; font-size: 13.5px; font-weight: 600; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n.fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n/* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach. */\n@container fd-list (max-width: 860px) { .fd-list[data-view=\"both\"] .fd-map-list .fd-map-box { height: clamp(260px, 46vh, 420px); } }\n.fd-map-ghost .fd-map-face { pointer-events: none; }\n/* The tools that draw an area to search in: at the map's start, the zoom at its end. */\n.fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }\n.fd-map-box[data-side=\"left\"] .fd-map-draw { left: auto; right: 8px; }\n.fd-map-draw button {\n width: 32px; height: 32px; display: grid; place-items: center; padding: 0; cursor: pointer;\n background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n.fd-map-draw button svg { width: 18px; height: 18px; }\n.fd-map-draw button:hover, .fd-map-draw button[aria-pressed=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-draw button[aria-pressed=\"true\"] { background: var(--fd-accent-soft); }\n.fd-map-draw button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n/* While an area is drawn, the pins let every press through to the map. */\n.fd-map-box[data-drawing] .fd-map-mark { pointer-events: none; }\n/* The drawing's bar starts after the tools. */\n.fd-map-list .fd-map-hint { left: 48px; }\n.fd-map-list .fd-map-box[data-side=\"left\"] .fd-map-hint { left: 52px; right: 48px; }\n.fd-map-list-note {\n position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;\n background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);\n}\n";
17
+ export declare const LIST_MAP_CSS = "\n.fd-map-list { min-width: 0; }\n.fd-map-mark { overflow: visible; }\n.fd-map-mark:focus { outline: none; }\n/* Each mark is as large as its face, stood on its point by its foot, its middle, or the tip of a label's tail. */\n.fd-map-mark.fd-map-foot { translate: -50% -100%; }\n.fd-map-mark.fd-map-middle { translate: -50% -50%; }\n.fd-map-mark.fd-map-tail { translate: -50% calc(-100% - 6px); }\n.fd-map-face {\n --fd-map-tone: var(--fd-accent); --fd-map-on: var(--fd-accent-text);\n position: relative; box-sizing: border-box; cursor: pointer; transition: scale 0.12s;\n}\n.fd-map-face[data-tone] { --fd-map-on: var(--fd-surface); }\n.fd-map-face[data-tone=\"info\"] { --fd-map-tone: var(--fd-info); }\n.fd-map-face[data-tone=\"success\"] { --fd-map-tone: var(--fd-success); }\n.fd-map-face[data-tone=\"warning\"] { --fd-map-tone: var(--fd-warning); }\n.fd-map-face[data-tone=\"danger\"] { --fd-map-tone: var(--fd-error); }\n.fd-map-face[data-tone=\"muted\"] { --fd-map-tone: var(--fd-muted); }\n.fd-map-face[data-stands=\"foot\"] { transform-origin: 50% 100%; }\n.fd-map-face[data-stands=\"middle\"] { transform-origin: 50% 50%; }\n.fd-map-face[data-hot], .fd-map-mark:hover .fd-map-face, .fd-map-bubble[data-hot], .fd-map-mark:hover .fd-map-bubble { scale: 1.12; }\n.fd-map-mark:focus-visible .fd-map-face, .fd-map-mark:focus-visible .fd-map-bubble { outline: 2px solid var(--fd-focus); outline-offset: 3px; }\n.fd-map-face-icon { display: block; }\n.fd-map-face-icon svg { display: block; width: 100%; height: 100%; }\n.fd-map-face[data-look=\"label\"] {\n padding: 4px 9px; border-radius: 999px; font-weight: 700; font-size: 13px; line-height: 1.25; font-variant-numeric: tabular-nums;\n background: var(--fd-surface); color: var(--fd-text); border: 1.5px solid color-mix(in srgb, var(--fd-text) 20%, transparent); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n}\n.fd-map-face[data-look=\"label\"][data-tone] { color: var(--fd-map-tone); border-color: var(--fd-map-tone); }\n.fd-map-face[data-look=\"label\"]::after {\n content: \"\"; position: absolute; left: 50%; bottom: -5px; width: 8px; height: 8px; margin-left: -4px; transform: rotate(45deg);\n background: inherit; border: inherit; border-top: 0; border-left: 0;\n}\n.fd-map-face[data-look=\"label\"]:is([data-hot], [data-chosen]), .fd-map-mark:hover .fd-map-face[data-look=\"label\"] { background: var(--fd-map-tone); color: var(--fd-map-on); border-color: var(--fd-map-tone); }\n.fd-map-face-text { display: block; max-width: 16ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.fd-map-face[data-look=\"pin\"] { width: 30px; height: 40px; }\n.fd-map-face[data-look=\"pin\"] > svg { display: block; width: 30px; height: 40px; filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.3)); }\n.fd-map-face-body { fill: var(--fd-map-tone); stroke: var(--fd-surface); stroke-width: 1.5; }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon { position: absolute; left: 7px; top: 6px; width: 16px; height: 16px; color: var(--fd-map-on); }\n.fd-map-face[data-look=\"pin\"] .fd-map-face-icon:empty { left: 10px; top: 9px; width: 10px; height: 10px; border-radius: 50%; background: var(--fd-map-on); }\n.fd-map-face[data-look=\"icon\"] {\n width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%;\n background: var(--fd-map-tone); color: var(--fd-map-on); border: 2px solid var(--fd-surface); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\n.fd-map-face[data-look=\"icon\"] .fd-map-face-icon { width: 20px; height: 20px; }\n.fd-map-face-turn { position: absolute; inset: -9px; pointer-events: none; }\n.fd-map-face-turn::before { content: \"\"; position: absolute; left: 50%; top: 0; margin-left: -5px; border: 5px solid transparent; border-top: 0; border-bottom: 7px solid var(--fd-map-tone); }\n.fd-map-face-photo {\n display: grid; place-items: center; width: 40px; height: 40px; box-sizing: border-box; border-radius: 50%; object-fit: cover;\n border: 3px solid var(--fd-map-tone); background: var(--fd-fill); color: var(--fd-muted); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);\n}\nspan.fd-map-face-photo svg { width: 22px; height: 22px; }\n.fd-map-face[data-look=\"photo\"] .fd-map-face-text {\n position: absolute; top: calc(100% + 2px); left: 50%; translate: -50% 0; max-width: 14ch; padding: 1px 6px; border-radius: 999px;\n font-size: 12px; font-weight: 600; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n}\n.fd-map-face[data-look=\"dot\"] { width: 16px; height: 16px; border-radius: 50%; background: var(--fd-map-tone); border: 2px solid var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }\n.fd-map-face:is([data-look=\"icon\"], [data-look=\"dot\"])[data-chosen], .fd-map-face[data-chosen] .fd-map-face-photo { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-map-tone); }\n.fd-map-face[data-chosen]::before, .fd-map-bubble[data-chosen]::before {\n content: \"\u2713\"; position: absolute; top: -7px; right: -7px; z-index: 1; width: 16px; height: 16px; border-radius: 50%; box-sizing: border-box;\n display: grid; place-items: center; font: 700 10px/1 system-ui, sans-serif; background: var(--fd-accent); color: var(--fd-accent-text); border: 1.5px solid var(--fd-surface);\n}\n.fd-map-bubble {\n position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; cursor: pointer;\n background: var(--fd-accent); color: var(--fd-accent-text); font-weight: 700; font-size: 13px; font-variant-numeric: tabular-nums; transition: scale 0.12s;\n box-shadow: 0 0 0 5px color-mix(in srgb, var(--fd-accent) 30%, transparent), 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n.fd-map-bubble[data-size=\"m\"] { width: 40px; height: 40px; }\n.fd-map-bubble[data-size=\"l\"] { width: 48px; height: 48px; }\n.fd-map-card-popup .leaflet-popup-content-wrapper { padding: 0; border-radius: 10px; overflow: hidden; background: var(--fd-surface); color: var(--fd-text); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.24); }\n.fd-map-card-popup .leaflet-popup-content { margin: 0; font: inherit; font-size: 14px; line-height: 1.4; }\n.fd-map-card-popup .leaflet-popup-tip { background: var(--fd-surface); }\n.fd-map-card { display: grid; }\n.fd-map-card-image { display: block; width: 100%; max-width: 100%; aspect-ratio: 16 / 9; object-fit: cover; background: var(--fd-fill); }\n.fd-map-card-body { display: grid; gap: 8px; padding: 10px 12px 12px; }\n.fd-map-card-head { display: flex; align-items: flex-start; gap: 8px; }\n.fd-map-card-title { flex: 1; min-width: 0; font-size: 14.5px; line-height: 1.3; overflow-wrap: anywhere; }\n.fd-map-card-close {\n flex: none; width: 28px; height: 28px; margin: -4px -6px -4px 0; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;\n background: transparent; color: var(--fd-muted); font: 400 20px/1 system-ui, sans-serif; cursor: pointer;\n}\n.fd-map-card[dir=\"rtl\"] .fd-map-card-close { margin: -4px 0 -4px -6px; }\n.fd-map-card-close:hover { background: var(--fd-fill); color: var(--fd-text); }\n.fd-map-card-fields { margin: 0; display: grid; gap: 3px; font-size: 13px; }\n.fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }\n.fd-map-card-fields dt { color: var(--fd-muted); }\n.fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }\n/* A title linking to the record's page; bare lines, their labels for a screen reader alone; the first line leading. */\n.fd-map-card .fd-map-card-link { color: inherit; text-decoration: none; }\n.fd-map-card .fd-map-card-link:hover { color: var(--fd-accent); text-decoration: underline; }\n.fd-map-card-picture { display: block; }\n.fd-map-card-fields[data-labels] div { display: block; }\n.fd-map-card-fields[data-labels] dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-map-card-fields[data-labels] dd { text-align: start; font-weight: 400; }\n.fd-map-card-fields[data-lead] > div:first-child dd { font-size: 15.5px; font-weight: 700; color: var(--fd-text); }\n.fd-map-card-fields[data-lead][data-labels] > div + div dd { color: var(--fd-muted); }\n.fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }\n.fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }\n.fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }\n.fd-map-card .fd-button { min-height: 30px; padding-inline: 14px; }\n.fd-map-card :focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n.fd-map-crowd-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; max-height: 220px; overflow: auto; }\n.fd-map-crowd-item { width: 100%; padding: 6px 8px; border: 0; border-radius: 6px; text-align: start; background: transparent; color: var(--fd-text); font: inherit; font-size: 13px; cursor: pointer; }\nbutton.fd-map-crowd-item:hover { background: var(--fd-accent-soft); }\nspan.fd-map-crowd-item { display: block; cursor: default; }\n.fd-map-here {\n position: absolute; top: 10px; left: 50%; translate: -50% 0; z-index: 1000; padding: 7px 14px; border-radius: 999px; white-space: nowrap; cursor: pointer;\n border: 1px solid var(--fd-border); background: var(--fd-surface); color: var(--fd-text); font: inherit; font-size: 13.5px; font-weight: 600; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n.fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n.fd-map-box[data-card] > .fd-map-here { visibility: hidden; }\n/* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach (unless the page says how tall). */\n@container fd-list (max-width: 860px) { .fd-list[data-view=\"both\"] .fd-map-list:not([data-height]) .fd-map-box { height: clamp(260px, 46vh, 420px); } }\n.fd-map-ghost .fd-map-face { pointer-events: none; }\n/* The tools that draw an area to search in: at the map's start, the zoom at its end. */\n.fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }\n.fd-map-box[data-side=\"left\"] .fd-map-draw { left: auto; right: 8px; }\n.fd-map-draw button {\n width: 32px; height: 32px; display: grid; place-items: center; padding: 0; cursor: pointer;\n background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n.fd-map-draw button svg { width: 18px; height: 18px; }\n.fd-map-draw button:hover, .fd-map-draw button[aria-pressed=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-map-draw button[aria-pressed=\"true\"] { background: var(--fd-accent-soft); }\n.fd-map-draw button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }\n/* While an area is drawn, the pins let every press through to the map. */\n.fd-map-box[data-drawing] .fd-map-mark { pointer-events: none; }\n/* The drawing's bar starts after the tools. */\n.fd-map-list .fd-map-hint { left: 48px; }\n.fd-map-list .fd-map-box[data-side=\"left\"] .fd-map-hint { left: 52px; right: 48px; }\n.fd-map-list-note {\n position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;\n background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);\n}\n/* As tall as the element it is put in; in the viewer's list, which gives it no height to fill, as tall as a list's map is. */\n.fd-map-list[data-height=\"fill\"] { height: 100%; }\n.fd-list-map .fd-map-list[data-height=\"fill\"] { height: auto; }\n.fd-list-map .fd-map-list[data-height=\"fill\"] .fd-map-box { height: clamp(320px, 64vh, 640px); }\n/* A map that takes every gesture: one finger pans it, the page does not scroll under it. */\n.fd-map-box.leaflet-container[data-gestures=\"all\"] { touch-action: none; }\n";
18
18
  /** The list map's stylesheet, once per document, after the maps' own. */
19
19
  export declare function installListMapStyles(doc: Document): void;
20
+ /**
21
+ * A list's map in a page of its own (`mountListMap`), outside the viewer:
22
+ * what the viewer's form gives its map — a part hidden stays hidden, words
23
+ * for a screen reader alone, its buttons, its sizes — on the map's element
24
+ * alone, so none of it reaches the page round it. Its colours are Fieldia's
25
+ * tokens, light and dark by the page's colour scheme, in Fieldia's tokens'
26
+ * layer: a page's own rule for `.fd-map-embed`, of any weight, sets them.
27
+ */
28
+ export declare const EMBED_CSS = "\n@layer fieldia-tokens {\n.fd-map-embed {\n --fd-text: light-dark(#1f2328, #e8eaed); --fd-muted: light-dark(#59636e, #a3a9b2); --fd-surface: light-dark(#fff, #1f2329); --fd-border: light-dark(#d0d7de, #3a4048);\n --fd-accent: light-dark(#1365d9, #5aa2ff); --fd-accent-text: light-dark(#fff, #0b1220); --fd-accent-soft: light-dark(#e6f4ff, #1d2c42); --fd-focus: var(--fd-accent);\n --fd-info: light-dark(#0b5cad, #7db7ff); --fd-success: light-dark(#2e7d32, #6fd08e); --fd-warning: light-dark(#8a5300, #f2b55c); --fd-error: light-dark(#c62828, #ff8a7a);\n --fd-control-radius: 6px;\n}\n}\n.fd-map-embed { position: relative; color: var(--fd-text); font-size: 14px; line-height: 1.45; }\n.fd-map-embed *, .fd-map-embed ::before, .fd-map-embed ::after { box-sizing: border-box; }\n.fd-map-embed [hidden] { display: none !important; }\n.fd-map-embed .fd-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-map-embed .fd-button {\n font: inherit; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 4px 14px;\n border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); color: var(--fd-text);\n}\n.fd-map-embed .fd-button:hover { border-color: var(--fd-accent); color: var(--fd-accent); }\n.fd-map-embed .fd-button-primary { background: var(--fd-accent); border-color: var(--fd-accent); color: var(--fd-accent-text); }\n.fd-map-embed .fd-button-primary:hover { color: var(--fd-accent-text); filter: brightness(1.12); }\n.fd-map-embed .fd-button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }\n.fd-map-embed .fd-button[aria-busy=\"true\"] { cursor: progress; opacity: 0.7; }\n";
29
+ /** A list's map's own base, once per document, after the list map's stylesheet: a page of its own carries it, the viewer never does. */
30
+ export declare function installEmbedStyles(doc: Document): void;
20
31
  /**
21
32
  * A form's map, on top of a list map's pins and cards: its label, a route
22
33
  * (the part travelled faded), a place whose news is old, the Follow button,
package/src/lib/styles.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FORM_MAP_CSS = exports.LIST_MAP_CSS = exports.MAP_CSS = void 0;
3
+ exports.FORM_MAP_CSS = exports.EMBED_CSS = exports.LIST_MAP_CSS = exports.MAP_CSS = void 0;
4
4
  exports.installMapStyles = installMapStyles;
5
5
  exports.installLeafletStyles = installLeafletStyles;
6
6
  exports.installListMapStyles = installListMapStyles;
7
+ exports.installEmbedStyles = installEmbedStyles;
7
8
  exports.installFormMapStyles = installFormMapStyles;
8
9
  /**
9
10
  * The maps in Fieldia's colours: every colour a token, so a theme, a host's
@@ -229,6 +230,15 @@ span.fd-map-face-photo svg { width: 22px; height: 22px; }
229
230
  .fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }
230
231
  .fd-map-card-fields dt { color: var(--fd-muted); }
231
232
  .fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
233
+ /* A title linking to the record's page; bare lines, their labels for a screen reader alone; the first line leading. */
234
+ .fd-map-card .fd-map-card-link { color: inherit; text-decoration: none; }
235
+ .fd-map-card .fd-map-card-link:hover { color: var(--fd-accent); text-decoration: underline; }
236
+ .fd-map-card-picture { display: block; }
237
+ .fd-map-card-fields[data-labels] div { display: block; }
238
+ .fd-map-card-fields[data-labels] dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
239
+ .fd-map-card-fields[data-labels] dd { text-align: start; font-weight: 400; }
240
+ .fd-map-card-fields[data-lead] > div:first-child dd { font-size: 15.5px; font-weight: 700; color: var(--fd-text); }
241
+ .fd-map-card-fields[data-lead][data-labels] > div + div dd { color: var(--fd-muted); }
232
242
  .fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
233
243
  .fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }
234
244
  .fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }
@@ -244,8 +254,9 @@ span.fd-map-crowd-item { display: block; cursor: default; }
244
254
  }
245
255
  .fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }
246
256
  .fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }
247
- /* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach. */
248
- @container fd-list (max-width: 860px) { .fd-list[data-view="both"] .fd-map-list .fd-map-box { height: clamp(260px, 46vh, 420px); } }
257
+ .fd-map-box[data-card] > .fd-map-here { visibility: hidden; }
258
+ /* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach (unless the page says how tall). */
259
+ @container fd-list (max-width: 860px) { .fd-list[data-view="both"] .fd-map-list:not([data-height]) .fd-map-box { height: clamp(260px, 46vh, 420px); } }
249
260
  .fd-map-ghost .fd-map-face { pointer-events: none; }
250
261
  /* The tools that draw an area to search in: at the map's start, the zoom at its end. */
251
262
  .fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }
@@ -267,6 +278,12 @@ span.fd-map-crowd-item { display: block; cursor: default; }
267
278
  position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;
268
279
  background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);
269
280
  }
281
+ /* As tall as the element it is put in; in the viewer's list, which gives it no height to fill, as tall as a list's map is. */
282
+ .fd-map-list[data-height="fill"] { height: 100%; }
283
+ .fd-list-map .fd-map-list[data-height="fill"] { height: auto; }
284
+ .fd-list-map .fd-map-list[data-height="fill"] .fd-map-box { height: clamp(320px, 64vh, 640px); }
285
+ /* A map that takes every gesture: one finger pans it, the page does not scroll under it. */
286
+ .fd-map-box.leaflet-container[data-gestures="all"] { touch-action: none; }
270
287
  `;
271
288
  /** The list map's stylesheet, once per document, after the maps' own. */
272
289
  function installListMapStyles(doc) {
@@ -278,6 +295,47 @@ function installListMapStyles(doc) {
278
295
  own.textContent = exports.LIST_MAP_CSS;
279
296
  doc.getElementById('fieldia-map-styles')?.after(own);
280
297
  }
298
+ /**
299
+ * A list's map in a page of its own (`mountListMap`), outside the viewer:
300
+ * what the viewer's form gives its map — a part hidden stays hidden, words
301
+ * for a screen reader alone, its buttons, its sizes — on the map's element
302
+ * alone, so none of it reaches the page round it. Its colours are Fieldia's
303
+ * tokens, light and dark by the page's colour scheme, in Fieldia's tokens'
304
+ * layer: a page's own rule for `.fd-map-embed`, of any weight, sets them.
305
+ */
306
+ exports.EMBED_CSS = `
307
+ @layer fieldia-tokens {
308
+ .fd-map-embed {
309
+ --fd-text: light-dark(#1f2328, #e8eaed); --fd-muted: light-dark(#59636e, #a3a9b2); --fd-surface: light-dark(#fff, #1f2329); --fd-border: light-dark(#d0d7de, #3a4048);
310
+ --fd-accent: light-dark(#1365d9, #5aa2ff); --fd-accent-text: light-dark(#fff, #0b1220); --fd-accent-soft: light-dark(#e6f4ff, #1d2c42); --fd-focus: var(--fd-accent);
311
+ --fd-info: light-dark(#0b5cad, #7db7ff); --fd-success: light-dark(#2e7d32, #6fd08e); --fd-warning: light-dark(#8a5300, #f2b55c); --fd-error: light-dark(#c62828, #ff8a7a);
312
+ --fd-control-radius: 6px;
313
+ }
314
+ }
315
+ .fd-map-embed { position: relative; color: var(--fd-text); font-size: 14px; line-height: 1.45; }
316
+ .fd-map-embed *, .fd-map-embed ::before, .fd-map-embed ::after { box-sizing: border-box; }
317
+ .fd-map-embed [hidden] { display: none !important; }
318
+ .fd-map-embed .fd-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
319
+ .fd-map-embed .fd-button {
320
+ font: inherit; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 4px 14px;
321
+ border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); color: var(--fd-text);
322
+ }
323
+ .fd-map-embed .fd-button:hover { border-color: var(--fd-accent); color: var(--fd-accent); }
324
+ .fd-map-embed .fd-button-primary { background: var(--fd-accent); border-color: var(--fd-accent); color: var(--fd-accent-text); }
325
+ .fd-map-embed .fd-button-primary:hover { color: var(--fd-accent-text); filter: brightness(1.12); }
326
+ .fd-map-embed .fd-button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }
327
+ .fd-map-embed .fd-button[aria-busy="true"] { cursor: progress; opacity: 0.7; }
328
+ `;
329
+ /** A list's map's own base, once per document, after the list map's stylesheet: a page of its own carries it, the viewer never does. */
330
+ function installEmbedStyles(doc) {
331
+ installListMapStyles(doc);
332
+ if (doc.getElementById('fieldia-map-embed-styles'))
333
+ return;
334
+ const own = doc.createElement('style');
335
+ own.id = 'fieldia-map-embed-styles';
336
+ own.textContent = exports.EMBED_CSS;
337
+ doc.getElementById('fieldia-list-map-styles')?.after(own);
338
+ }
281
339
  /**
282
340
  * A form's map, on top of a list map's pins and cards: its label, a route
283
341
  * (the part travelled faded), a place whose news is old, the Follow button,
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/styles.ts"],"names":[],"mappings":";;;AA+GA,4CAOC;AAGD,oDAQC;AAuID,oDAOC;AAwCD,oDAOC;AA9TD;;;;;GAKG;AACU,QAAA,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGtB,CAAC;AAEF,0HAA0H;AAC1H,SAAgB,gBAAgB,CAAC,GAAa;IAC5C,IAAI,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC;QAAE,OAAO;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,oBAAoB,CAAC;IAC9B,GAAG,CAAC,WAAW,GAAG,eAAO,CAAC;IAC1B,4EAA4E;IAC5E,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,8GAA8G;AAC9G,SAAgB,oBAAoB,CAAC,GAAa,EAAE,GAAW;IAC7D,IAAI,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC;QAAE,OAAO;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,GAAG,wBAAwB,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACrD,IAAI,GAAG;QAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;QACxB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACU,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6H3B,CAAC;AAEF,yEAAyE;AACzE,SAAgB,oBAAoB,CAAC,GAAa;IAChD,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC;QAAE,OAAO;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,yBAAyB,CAAC;IACnC,GAAG,CAAC,WAAW,GAAG,oBAAY,CAAC;IAC/B,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACU,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B3B,CAAC;AAEF,wEAAwE;AACxE,SAAgB,oBAAoB,CAAC,GAAa;IAChD,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC;QAAE,OAAO;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,yBAAyB,CAAC;IACnC,GAAG,CAAC,WAAW,GAAG,oBAAY,CAAC;IAC/B,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/styles.ts"],"names":[],"mappings":"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"}
@@ -222,6 +222,15 @@ span.fd-map-face-photo svg { width: 22px; height: 22px; }
222
222
  .fd-map-card-fields div { display: flex; justify-content: space-between; gap: 10px; }
223
223
  .fd-map-card-fields dt { color: var(--fd-muted); }
224
224
  .fd-map-card-fields dd { margin: 0; text-align: end; font-weight: 600; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
225
+ /* A title linking to the record's page; bare lines, their labels for a screen reader alone; the first line leading. */
226
+ .fd-map-card .fd-map-card-link { color: inherit; text-decoration: none; }
227
+ .fd-map-card .fd-map-card-link:hover { color: var(--fd-accent); text-decoration: underline; }
228
+ .fd-map-card-picture { display: block; }
229
+ .fd-map-card-fields[data-labels] div { display: block; }
230
+ .fd-map-card-fields[data-labels] dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
231
+ .fd-map-card-fields[data-labels] dd { text-align: start; font-weight: 400; }
232
+ .fd-map-card-fields[data-lead] > div:first-child dd { font-size: 15.5px; font-weight: 700; color: var(--fd-text); }
233
+ .fd-map-card-fields[data-lead][data-labels] > div + div dd { color: var(--fd-muted); }
225
234
  .fd-map-card-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
226
235
  .fd-map-card-choose { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; margin-inline-end: auto; }
227
236
  .fd-map-card-choose input { width: 16px; height: 16px; margin: 0; accent-color: var(--fd-accent); }
@@ -237,8 +246,9 @@ span.fd-map-crowd-item { display: block; cursor: default; }
237
246
  }
238
247
  .fd-map-here:hover { color: var(--fd-accent); border-color: var(--fd-accent); }
239
248
  .fd-map-here:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }
240
- /* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach. */
241
- @container fd-list (max-width: 860px) { .fd-list[data-view="both"] .fd-map-list .fd-map-box { height: clamp(260px, 46vh, 420px); } }
249
+ .fd-map-box[data-card] > .fd-map-here { visibility: hidden; }
250
+ /* The map over the table when the list is too narrow for both side by side: shorter, so the table is in reach (unless the page says how tall). */
251
+ @container fd-list (max-width: 860px) { .fd-list[data-view="both"] .fd-map-list:not([data-height]) .fd-map-box { height: clamp(260px, 46vh, 420px); } }
242
252
  .fd-map-ghost .fd-map-face { pointer-events: none; }
243
253
  /* The tools that draw an area to search in: at the map's start, the zoom at its end. */
244
254
  .fd-map-draw { position: absolute; top: 8px; left: 8px; z-index: 1000; display: grid; gap: 4px; }
@@ -260,6 +270,12 @@ span.fd-map-crowd-item { display: block; cursor: default; }
260
270
  position: absolute; left: 8px; bottom: 28px; z-index: 1000; max-width: calc(100% - 64px); margin: 0; padding: 4px 8px; border-radius: 6px; font-size: 12.5px; line-height: 1.4;
261
271
  background: color-mix(in srgb, var(--fd-surface) 92%, transparent); color: var(--fd-text); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.18);
262
272
  }
273
+ /* As tall as the element it is put in; in the viewer's list, which gives it no height to fill, as tall as a list's map is. */
274
+ .fd-map-list[data-height="fill"] { height: 100%; }
275
+ .fd-list-map .fd-map-list[data-height="fill"] { height: auto; }
276
+ .fd-list-map .fd-map-list[data-height="fill"] .fd-map-box { height: clamp(320px, 64vh, 640px); }
277
+ /* A map that takes every gesture: one finger pans it, the page does not scroll under it. */
278
+ .fd-map-box.leaflet-container[data-gestures="all"] { touch-action: none; }
263
279
  `;
264
280
  /** The list map's stylesheet, once per document, after the maps' own. */
265
281
  export function installListMapStyles(doc) {
@@ -271,6 +287,47 @@ export function installListMapStyles(doc) {
271
287
  own.textContent = LIST_MAP_CSS;
272
288
  doc.getElementById('fieldia-map-styles')?.after(own);
273
289
  }
290
+ /**
291
+ * A list's map in a page of its own (`mountListMap`), outside the viewer:
292
+ * what the viewer's form gives its map — a part hidden stays hidden, words
293
+ * for a screen reader alone, its buttons, its sizes — on the map's element
294
+ * alone, so none of it reaches the page round it. Its colours are Fieldia's
295
+ * tokens, light and dark by the page's colour scheme, in Fieldia's tokens'
296
+ * layer: a page's own rule for `.fd-map-embed`, of any weight, sets them.
297
+ */
298
+ export const EMBED_CSS = `
299
+ @layer fieldia-tokens {
300
+ .fd-map-embed {
301
+ --fd-text: light-dark(#1f2328, #e8eaed); --fd-muted: light-dark(#59636e, #a3a9b2); --fd-surface: light-dark(#fff, #1f2329); --fd-border: light-dark(#d0d7de, #3a4048);
302
+ --fd-accent: light-dark(#1365d9, #5aa2ff); --fd-accent-text: light-dark(#fff, #0b1220); --fd-accent-soft: light-dark(#e6f4ff, #1d2c42); --fd-focus: var(--fd-accent);
303
+ --fd-info: light-dark(#0b5cad, #7db7ff); --fd-success: light-dark(#2e7d32, #6fd08e); --fd-warning: light-dark(#8a5300, #f2b55c); --fd-error: light-dark(#c62828, #ff8a7a);
304
+ --fd-control-radius: 6px;
305
+ }
306
+ }
307
+ .fd-map-embed { position: relative; color: var(--fd-text); font-size: 14px; line-height: 1.45; }
308
+ .fd-map-embed *, .fd-map-embed ::before, .fd-map-embed ::after { box-sizing: border-box; }
309
+ .fd-map-embed [hidden] { display: none !important; }
310
+ .fd-map-embed .fd-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
311
+ .fd-map-embed .fd-button {
312
+ font: inherit; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 4px 14px;
313
+ border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); color: var(--fd-text);
314
+ }
315
+ .fd-map-embed .fd-button:hover { border-color: var(--fd-accent); color: var(--fd-accent); }
316
+ .fd-map-embed .fd-button-primary { background: var(--fd-accent); border-color: var(--fd-accent); color: var(--fd-accent-text); }
317
+ .fd-map-embed .fd-button-primary:hover { color: var(--fd-accent-text); filter: brightness(1.12); }
318
+ .fd-map-embed .fd-button:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 2px; }
319
+ .fd-map-embed .fd-button[aria-busy="true"] { cursor: progress; opacity: 0.7; }
320
+ `;
321
+ /** A list's map's own base, once per document, after the list map's stylesheet: a page of its own carries it, the viewer never does. */
322
+ export function installEmbedStyles(doc) {
323
+ installListMapStyles(doc);
324
+ if (doc.getElementById('fieldia-map-embed-styles'))
325
+ return;
326
+ const own = doc.createElement('style');
327
+ own.id = 'fieldia-map-embed-styles';
328
+ own.textContent = EMBED_CSS;
329
+ doc.getElementById('fieldia-list-map-styles')?.after(own);
330
+ }
274
331
  /**
275
332
  * A form's map, on top of a list map's pins and cards: its label, a route
276
333
  * (the part travelled faded), a place whose news is old, the Follow button,
@@ -1 +1 @@
1
- {"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGtB,CAAC;AAEF,0HAA0H;AAC1H,MAAM,UAAU,gBAAgB,CAAC,GAAa;IAC5C,IAAI,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC;QAAE,OAAO;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,oBAAoB,CAAC;IAC9B,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;IAC1B,4EAA4E;IAC5E,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,oBAAoB,CAAC,GAAa,EAAE,GAAW;IAC7D,IAAI,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC;QAAE,OAAO;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,GAAG,wBAAwB,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACrD,IAAI,GAAG;QAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;QACxB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6H3B,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,GAAa;IAChD,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC;QAAE,OAAO;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,yBAAyB,CAAC;IACnC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC;IAC/B,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B3B,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,GAAa;IAChD,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC;QAAE,OAAO;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,yBAAyB,CAAC;IACnC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC;IAC/B,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ListMap, ResolvedFilter } from '@fieldia/core';
2
+ /**
3
+ * A map's view as a search sees it: its edges in degrees, and the
4
+ * conditions "Search this area" asks for its records with.
5
+ */
6
+ /** A view's edges: west east of east when it spans the antimeridian, -180 and 180 when it is the whole world round. */
7
+ export interface Box {
8
+ south: number;
9
+ west: number;
10
+ north: number;
11
+ east: number;
12
+ }
13
+ /** Whether a box is the whole world round. */
14
+ export declare const whole: (box: Box) => boolean;
15
+ /** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
16
+ export declare function boxOf(south: number, west: number, north: number, east: number): Box;
17
+ /** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
18
+ export declare function boxFilter(spec: ListMap, box: Box): ResolvedFilter[];
@@ -0,0 +1,18 @@
1
+ import type { ListMap, ResolvedFilter } from '@fieldia/core';
2
+ /**
3
+ * A map's view as a search sees it: its edges in degrees, and the
4
+ * conditions "Search this area" asks for its records with.
5
+ */
6
+ /** A view's edges: west east of east when it spans the antimeridian, -180 and 180 when it is the whole world round. */
7
+ export interface Box {
8
+ south: number;
9
+ west: number;
10
+ north: number;
11
+ east: number;
12
+ }
13
+ /** Whether a box is the whole world round. */
14
+ export declare const whole: (box: Box) => boolean;
15
+ /** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
16
+ export declare function boxOf(south: number, west: number, north: number, east: number): Box;
17
+ /** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
18
+ export declare function boxFilter(spec: ListMap, box: Box): ResolvedFilter[];
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.whole = void 0;
4
+ exports.boxOf = boxOf;
5
+ exports.boxFilter = boxFilter;
6
+ const round = (n) => Math.round(n * 1e6) / 1e6;
7
+ const wrap = (lng) => round(((((lng + 180) % 360) + 360) % 360) - 180);
8
+ /** Whether a box is the whole world round. */
9
+ const whole = (box) => box.east - box.west >= 360;
10
+ exports.whole = whole;
11
+ /** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
12
+ function boxOf(south, west, north, east) {
13
+ const all = east - west >= 360;
14
+ return { south: round(Math.max(-90, south)), west: all ? -180 : wrap(west), north: round(Math.min(90, north)), east: all ? 180 : wrap(east) };
15
+ }
16
+ /** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
17
+ function boxFilter(spec, box) {
18
+ if (spec.point)
19
+ return [{ field: spec.point, op: 'within', value: { ...box } }];
20
+ const lng = spec.longitude;
21
+ return [
22
+ { field: spec.latitude, op: 'between', value: [box.south, box.north] },
23
+ // Over the antimeridian no one range holds the longitudes: either side of it, then.
24
+ ...((0, exports.whole)(box)
25
+ ? []
26
+ : box.west <= box.east
27
+ ? [{ field: lng, op: 'between', value: [box.west, box.east] }]
28
+ : [{ any: [{ field: lng, op: '>=', value: box.west }, { field: lng, op: '<=', value: box.east }] }]),
29
+ ];
30
+ }
31
+ //# sourceMappingURL=view-box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-box.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/view-box.ts"],"names":[],"mappings":";;;AAqBA,sBAGC;AAGD,8BAYC;AAxBD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,8CAA8C;AACvC,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAAjD,QAAA,KAAK,SAA4C;AAE9D,2HAA2H;AAC3H,SAAgB,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChJ,CAAC;AAED,uHAAuH;AACvH,SAAgB,SAAS,CAAC,IAAa,EAAE,GAAQ;IAC/C,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAmB,CAAC;IACrC,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,CAAC,QAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;QAChF,oFAAoF;QACpF,GAAG,CAAC,IAAA,aAAK,EAAC,GAAG,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;gBACpB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3H,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ const round = (n) => Math.round(n * 1e6) / 1e6;
2
+ const wrap = (lng) => round(((((lng + 180) % 360) + 360) % 360) - 180);
3
+ /** Whether a box is the whole world round. */
4
+ export const whole = (box) => box.east - box.west >= 360;
5
+ /** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
6
+ export function boxOf(south, west, north, east) {
7
+ const all = east - west >= 360;
8
+ return { south: round(Math.max(-90, south)), west: all ? -180 : wrap(west), north: round(Math.min(90, north)), east: all ? 180 : wrap(east) };
9
+ }
10
+ /** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
11
+ export function boxFilter(spec, box) {
12
+ if (spec.point)
13
+ return [{ field: spec.point, op: 'within', value: { ...box } }];
14
+ const lng = spec.longitude;
15
+ return [
16
+ { field: spec.latitude, op: 'between', value: [box.south, box.north] },
17
+ // Over the antimeridian no one range holds the longitudes: either side of it, then.
18
+ ...(whole(box)
19
+ ? []
20
+ : box.west <= box.east
21
+ ? [{ field: lng, op: 'between', value: [box.west, box.east] }]
22
+ : [{ any: [{ field: lng, op: '>=', value: box.west }, { field: lng, op: '<=', value: box.east }] }]),
23
+ ];
24
+ }
25
+ //# sourceMappingURL=view-box.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-box.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/view-box.ts"],"names":[],"mappings":"AAeA,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,8CAA8C;AAC9C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAE9D,2HAA2H;AAC3H,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChJ,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,SAAS,CAAC,IAAa,EAAE,GAAQ;IAC/C,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAmB,CAAC;IACrC,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,CAAC,QAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;QAChF,oFAAoF;QACpF,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;gBACpB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3H,CAAC;AACJ,CAAC"}
@@ -8,6 +8,9 @@ import type { MapSettings } from './settings.mjs';
8
8
  * its longitude.
9
9
  * - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
10
10
  * a box or a circle.
11
+ * - `"widget": "address-search"` on a char field keeps an address typed on
12
+ * one line, the provider's suggestions under it and no map; a suggestion
13
+ * picked can fill a place field and an address's parts too.
11
14
  *
12
15
  * Every map shares the settings given here: its provider above all.
13
16
  */
@@ -8,6 +8,9 @@ import type { MapSettings } from './settings';
8
8
  * its longitude.
9
9
  * - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
10
10
  * a box or a circle.
11
+ * - `"widget": "address-search"` on a char field keeps an address typed on
12
+ * one line, the provider's suggestions under it and no map; a suggestion
13
+ * picked can fill a place field and an address's parts too.
11
14
  *
12
15
  * Every map shares the settings given here: its provider above all.
13
16
  */
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mapWidgets = mapWidgets;
4
+ const address_search_1 = require("./address-search");
4
5
  const area_1 = require("./area");
5
6
  const place_1 = require("./place");
6
7
  /**
@@ -11,11 +12,19 @@ const place_1 = require("./place");
11
12
  * its longitude.
12
13
  * - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
13
14
  * a box or a circle.
15
+ * - `"widget": "address-search"` on a char field keeps an address typed on
16
+ * one line, the provider's suggestions under it and no map; a suggestion
17
+ * picked can fill a place field and an address's parts too.
14
18
  *
15
19
  * Every map shares the settings given here: its provider above all.
16
20
  */
17
21
  function mapWidgets(settings) {
18
22
  const place = (0, place_1.placeWidget)(settings);
19
- return { 'json.place': place, 'float.place': place, 'json.area': (0, area_1.areaWidget)(settings) };
23
+ return {
24
+ 'json.place': place,
25
+ 'float.place': place,
26
+ 'json.area': (0, area_1.areaWidget)(settings),
27
+ 'char.address-search': (0, address_search_1.addressSearchWidget)(settings),
28
+ };
20
29
  }
21
30
  //# sourceMappingURL=widgets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":";;AAgBA,gCAGC;AAlBD,iCAAoC;AACpC,mCAAsC;AAGtC;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,QAAqB;IAC9C,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,IAAA,iBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":";;AAoBA,gCAQC;AA3BD,qDAAuD;AACvD,iCAAoC;AACpC,mCAAsC;AAGtC;;;;;;;;;;;;;GAaG;AACH,SAAgB,UAAU,CAAC,QAAqB;IAC9C,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,IAAA,iBAAU,EAAC,QAAQ,CAAC;QACjC,qBAAqB,EAAE,IAAA,oCAAmB,EAAC,QAAQ,CAAC;KACrD,CAAC;AACJ,CAAC"}