ogm-viewer 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/cjs/{index-CVTUnaNg.js → index-mu9UK_Fb.js} +66 -3
  2. package/dist/cjs/{lerc-TQEssgMv.js → lerc-Df0hDWkS.js} +7 -7
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/{ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-settings.ogm-sidebar.ogm-viewer-ifPxRNEo.js → ogm-alerts.ogm-attributes.ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-preview.ogm-previews.ogm-settings.ogm-sidebar.ogm-viewer-DMEfXquS.js} +13843 -6976
  5. package/dist/cjs/ogm-alerts_11.cjs.entry.js +18 -0
  6. package/dist/cjs/ogm-viewer.cjs.js +2 -2
  7. package/dist/collection/assets/icons/exclamation-triangle-fill.svg +3 -0
  8. package/dist/collection/assets/webawesome/styles/color/palettes/base.css +44 -0
  9. package/dist/collection/assets/webawesome/styles/color/palettes/bright.css +145 -0
  10. package/dist/collection/assets/webawesome/styles/color/palettes/default.css +146 -0
  11. package/dist/collection/assets/webawesome/styles/color/palettes/shoelace.css +146 -0
  12. package/dist/collection/assets/webawesome/styles/color/variants/brand.css +162 -0
  13. package/dist/collection/assets/webawesome/styles/color/variants/danger.css +162 -0
  14. package/dist/collection/assets/webawesome/styles/color/variants/neutral.css +162 -0
  15. package/dist/collection/assets/webawesome/styles/color/variants/success.css +162 -0
  16. package/dist/collection/assets/webawesome/styles/color/variants/warning.css +162 -0
  17. package/dist/collection/assets/webawesome/styles/color/variants.css +5 -0
  18. package/dist/collection/assets/webawesome/styles/component/form-control.styles.d.ts +2 -0
  19. package/dist/collection/assets/webawesome/styles/component/form-control.styles.ts +43 -0
  20. package/dist/collection/assets/webawesome/styles/component/host.styles.d.ts +2 -0
  21. package/dist/collection/assets/webawesome/styles/component/host.styles.ts +18 -0
  22. package/dist/collection/assets/webawesome/styles/component/segmented-field.styles.d.ts +19 -0
  23. package/dist/collection/assets/webawesome/styles/component/segmented-field.styles.ts +92 -0
  24. package/dist/collection/assets/webawesome/styles/component/size.styles.d.ts +2 -0
  25. package/dist/collection/assets/webawesome/styles/component/size.styles.ts +26 -0
  26. package/dist/collection/assets/webawesome/styles/component/variants.styles.d.ts +2 -0
  27. package/dist/collection/assets/webawesome/styles/component/variants.styles.ts +69 -0
  28. package/dist/collection/assets/webawesome/styles/component/visually-hidden.styles.d.ts +2 -0
  29. package/dist/collection/assets/webawesome/styles/component/visually-hidden.styles.ts +19 -0
  30. package/dist/collection/assets/webawesome/styles/layers.css +21 -0
  31. package/dist/collection/assets/webawesome/styles/native.css +1439 -0
  32. package/dist/collection/assets/webawesome/styles/themes/awesome.css +614 -0
  33. package/dist/collection/assets/webawesome/styles/themes/default.css +373 -0
  34. package/dist/collection/assets/webawesome/styles/themes/shoelace.css +648 -0
  35. package/dist/collection/assets/webawesome/styles/utilities/align-items.css +44 -0
  36. package/dist/collection/assets/webawesome/styles/utilities/border-radius.css +20 -0
  37. package/dist/collection/assets/webawesome/styles/utilities/flex-wrap.css +16 -0
  38. package/dist/collection/assets/webawesome/styles/utilities/fouce.css +17 -0
  39. package/dist/collection/assets/webawesome/styles/utilities/gap.css +56 -0
  40. package/dist/collection/assets/webawesome/styles/utilities/justify-content.css +32 -0
  41. package/dist/collection/assets/webawesome/styles/utilities/layout.css +159 -0
  42. package/dist/collection/assets/webawesome/styles/utilities/placeholder.css +9 -0
  43. package/dist/collection/assets/webawesome/styles/utilities/prose.css +161 -0
  44. package/dist/collection/assets/webawesome/styles/utilities/scroll-lock.css +20 -0
  45. package/dist/collection/assets/webawesome/styles/utilities/size.css +21 -0
  46. package/dist/collection/assets/webawesome/styles/utilities/text.css +262 -0
  47. package/dist/collection/assets/webawesome/styles/utilities/variants.css +62 -0
  48. package/dist/collection/assets/webawesome/styles/utilities/visually-hidden.css +17 -0
  49. package/dist/collection/assets/webawesome/styles/utilities.css +17 -0
  50. package/dist/collection/assets/webawesome/styles/webawesome.css +11 -0
  51. package/dist/collection/collection-manifest.json +4 -0
  52. package/dist/collection/components/ogm-alerts/ogm-alerts.css +51 -0
  53. package/dist/collection/components/ogm-alerts/ogm-alerts.js +71 -0
  54. package/dist/collection/components/ogm-alerts/ogm-alerts.test.js +26 -0
  55. package/dist/collection/components/ogm-attributes/ogm-attributes.css +68 -0
  56. package/dist/collection/components/ogm-attributes/ogm-attributes.js +112 -0
  57. package/dist/collection/components/ogm-image/ogm-image.css +1 -1
  58. package/dist/collection/components/ogm-image/ogm-image.js +70 -20
  59. package/dist/collection/components/ogm-map/ogm-map.css +43 -44
  60. package/dist/collection/components/ogm-map/ogm-map.js +229 -91
  61. package/dist/collection/components/ogm-menubar/ogm-menubar.css +16 -14
  62. package/dist/collection/components/ogm-menubar/ogm-menubar.js +3 -5
  63. package/dist/collection/components/ogm-menubar/ogm-menubar.test.js +28 -3
  64. package/dist/collection/components/ogm-metadata/ogm-metadata.css +6 -492
  65. package/dist/collection/components/ogm-metadata/ogm-metadata.js +3 -5
  66. package/dist/collection/components/ogm-metadata/ogm-metadata.test.js +1 -1
  67. package/dist/collection/components/ogm-preview/ogm-preview.css +16 -0
  68. package/dist/collection/components/ogm-preview/ogm-preview.js +144 -0
  69. package/dist/collection/components/ogm-preview/ogm-preview.test.js +37 -0
  70. package/dist/collection/components/ogm-previews/ogm-previews.css +45 -0
  71. package/dist/collection/components/ogm-previews/ogm-previews.js +162 -0
  72. package/dist/collection/components/ogm-previews/ogm-previews.test.js +83 -0
  73. package/dist/collection/components/ogm-settings/ogm-settings.js +7 -9
  74. package/dist/collection/components/ogm-sidebar/ogm-sidebar.css +50 -503
  75. package/dist/collection/components/ogm-sidebar/ogm-sidebar.js +8 -12
  76. package/dist/collection/components/ogm-viewer/ogm-viewer.css +4 -974
  77. package/dist/collection/components/ogm-viewer/ogm-viewer.js +69 -32
  78. package/dist/collection/lib/errors.js +137 -0
  79. package/dist/collection/lib/errors.test.js +96 -0
  80. package/dist/collection/lib/previewers/cog-deck.js +14 -9
  81. package/dist/collection/lib/previewers/cog.js +3 -3
  82. package/dist/collection/lib/previewers/geojson.js +3 -2
  83. package/dist/collection/lib/previewers/maplibre.js +9 -15
  84. package/dist/collection/lib/previewers/pmtiles-raster.js +1 -1
  85. package/dist/collection/lib/previewers/pmtiles-vector.js +7 -1
  86. package/dist/collection/lib/previewers/raster.js +1 -1
  87. package/dist/collection/lib/previewers/vector.js +65 -30
  88. package/dist/collection/lib/previewers/wms.js +1 -1
  89. package/dist/collection/lib/record.js +1 -1
  90. package/dist/collection/lib/record.test.js +1 -1
  91. package/dist/collection/lib/references.js +0 -65
  92. package/dist/collection/lib/references.test.js +0 -150
  93. package/dist/collection/lib/sources/cog.js +5 -2
  94. package/dist/collection/lib/sources/geojson.js +9 -2
  95. package/dist/collection/lib/sources/iiif-manifest.js +54 -0
  96. package/dist/collection/lib/sources/iiif-manifest.test.js +110 -0
  97. package/dist/collection/lib/sources/iiif.js +11 -0
  98. package/dist/collection/lib/sources/maplibre.js +8 -0
  99. package/dist/collection/lib/sources/openindexmap.js +3 -0
  100. package/dist/collection/lib/sources/pmtiles.js +10 -4
  101. package/dist/collection/lib/sources/raster.js +3 -3
  102. package/dist/collection/lib/sources/source.js +26 -7
  103. package/dist/collection/lib/sources/tilejson.js +7 -1
  104. package/dist/collection/lib/sources/tms.js +3 -0
  105. package/dist/collection/lib/sources/vector.js +3 -3
  106. package/dist/collection/lib/sources/wms.js +6 -11
  107. package/dist/collection/lib/sources/xyz.js +3 -0
  108. package/dist/collection/lib/themes/maplibre.js +46 -0
  109. package/dist/collection/lib/themes/theme.js +23 -0
  110. package/dist/esm/{index-BdFT_kJa.js → index-DTLAlWKQ.js} +66 -3
  111. package/dist/esm/{lerc-DFDScDrO.js → lerc-CB_Jcu33.js} +2 -2
  112. package/dist/esm/loader.js +3 -3
  113. package/dist/esm/{ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-settings.ogm-sidebar.ogm-viewer-r5w_49n3.js → ogm-alerts.ogm-attributes.ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-preview.ogm-previews.ogm-settings.ogm-sidebar.ogm-viewer-Dlc6USWB.js} +13840 -6977
  114. package/dist/esm/ogm-alerts_11.entry.js +2 -0
  115. package/dist/esm/ogm-viewer.js +3 -3
  116. package/dist/ogm-viewer/assets/icons/exclamation-triangle-fill.svg +3 -0
  117. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/base.css +44 -0
  118. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/bright.css +145 -0
  119. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/default.css +146 -0
  120. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/shoelace.css +146 -0
  121. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/brand.css +162 -0
  122. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/danger.css +162 -0
  123. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/neutral.css +162 -0
  124. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/success.css +162 -0
  125. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/warning.css +162 -0
  126. package/dist/ogm-viewer/assets/webawesome/styles/color/variants.css +5 -0
  127. package/dist/ogm-viewer/assets/webawesome/styles/component/form-control.styles.d.ts +2 -0
  128. package/dist/ogm-viewer/assets/webawesome/styles/component/form-control.styles.ts +43 -0
  129. package/dist/ogm-viewer/assets/webawesome/styles/component/host.styles.d.ts +2 -0
  130. package/dist/ogm-viewer/assets/webawesome/styles/component/host.styles.ts +18 -0
  131. package/dist/ogm-viewer/assets/webawesome/styles/component/segmented-field.styles.d.ts +19 -0
  132. package/dist/ogm-viewer/assets/webawesome/styles/component/segmented-field.styles.ts +92 -0
  133. package/dist/ogm-viewer/assets/webawesome/styles/component/size.styles.d.ts +2 -0
  134. package/dist/ogm-viewer/assets/webawesome/styles/component/size.styles.ts +26 -0
  135. package/dist/ogm-viewer/assets/webawesome/styles/component/variants.styles.d.ts +2 -0
  136. package/dist/ogm-viewer/assets/webawesome/styles/component/variants.styles.ts +69 -0
  137. package/dist/ogm-viewer/assets/webawesome/styles/component/visually-hidden.styles.d.ts +2 -0
  138. package/dist/ogm-viewer/assets/webawesome/styles/component/visually-hidden.styles.ts +19 -0
  139. package/dist/ogm-viewer/assets/webawesome/styles/layers.css +21 -0
  140. package/dist/ogm-viewer/assets/webawesome/styles/native.css +1439 -0
  141. package/dist/ogm-viewer/assets/webawesome/styles/themes/awesome.css +614 -0
  142. package/dist/ogm-viewer/assets/webawesome/styles/themes/default.css +373 -0
  143. package/dist/ogm-viewer/assets/webawesome/styles/themes/shoelace.css +648 -0
  144. package/dist/ogm-viewer/assets/webawesome/styles/utilities/align-items.css +44 -0
  145. package/dist/ogm-viewer/assets/webawesome/styles/utilities/border-radius.css +20 -0
  146. package/dist/ogm-viewer/assets/webawesome/styles/utilities/flex-wrap.css +16 -0
  147. package/dist/ogm-viewer/assets/webawesome/styles/utilities/fouce.css +17 -0
  148. package/dist/ogm-viewer/assets/webawesome/styles/utilities/gap.css +56 -0
  149. package/dist/ogm-viewer/assets/webawesome/styles/utilities/justify-content.css +32 -0
  150. package/dist/ogm-viewer/assets/webawesome/styles/utilities/layout.css +159 -0
  151. package/dist/ogm-viewer/assets/webawesome/styles/utilities/placeholder.css +9 -0
  152. package/dist/ogm-viewer/assets/webawesome/styles/utilities/prose.css +161 -0
  153. package/dist/ogm-viewer/assets/webawesome/styles/utilities/scroll-lock.css +20 -0
  154. package/dist/ogm-viewer/assets/webawesome/styles/utilities/size.css +21 -0
  155. package/dist/ogm-viewer/assets/webawesome/styles/utilities/text.css +262 -0
  156. package/dist/ogm-viewer/assets/webawesome/styles/utilities/variants.css +62 -0
  157. package/dist/ogm-viewer/assets/webawesome/styles/utilities/visually-hidden.css +17 -0
  158. package/dist/ogm-viewer/assets/webawesome/styles/utilities.css +17 -0
  159. package/dist/ogm-viewer/assets/webawesome/styles/webawesome.css +11 -0
  160. package/dist/ogm-viewer/ogm-viewer.esm.js +1 -1
  161. package/dist/ogm-viewer/p-7936ccc9.entry.js +1 -0
  162. package/dist/ogm-viewer/p-CWtUrqsM.js +2822 -0
  163. package/dist/ogm-viewer/p-DTLAlWKQ.js +2 -0
  164. package/dist/ogm-viewer/{p-BeA3REDA.js → p-DqRDI3AC.js} +1 -1
  165. package/dist/types/components/ogm-alerts/ogm-alerts.d.ts +6 -0
  166. package/dist/types/components/ogm-alerts/ogm-alerts.test.d.ts +1 -0
  167. package/dist/types/components/ogm-attributes/ogm-attributes.d.ts +10 -0
  168. package/dist/types/components/ogm-image/ogm-image.d.ts +8 -3
  169. package/dist/types/components/ogm-map/ogm-map.d.ts +38 -14
  170. package/dist/types/components/ogm-menubar/ogm-menubar.d.ts +1 -1
  171. package/dist/types/components/ogm-metadata/ogm-metadata.d.ts +1 -1
  172. package/dist/types/components/ogm-preview/ogm-preview.d.ts +13 -0
  173. package/dist/types/components/ogm-preview/ogm-preview.test.d.ts +1 -0
  174. package/dist/types/components/ogm-previews/ogm-previews.d.ts +12 -0
  175. package/dist/types/components/ogm-previews/ogm-previews.test.d.ts +1 -0
  176. package/dist/types/components/ogm-settings/ogm-settings.d.ts +2 -2
  177. package/dist/types/components/ogm-sidebar/ogm-sidebar.d.ts +1 -1
  178. package/dist/types/components/ogm-viewer/ogm-viewer.d.ts +17 -14
  179. package/dist/types/components.d.ts +122 -18
  180. package/dist/types/lib/errors.d.ts +13 -0
  181. package/dist/types/lib/errors.test.d.ts +1 -0
  182. package/dist/types/lib/previewers/cog-deck.d.ts +7 -3
  183. package/dist/types/lib/previewers/cog.d.ts +2 -2
  184. package/dist/types/lib/previewers/maplibre.d.ts +7 -9
  185. package/dist/types/lib/previewers/pmtiles-vector.d.ts +1 -0
  186. package/dist/types/lib/previewers/vector.d.ts +3 -15
  187. package/dist/types/lib/record.d.ts +1 -1
  188. package/dist/types/lib/references.d.ts +0 -8
  189. package/dist/types/lib/sources/cog.d.ts +3 -2
  190. package/dist/types/lib/sources/geojson.d.ts +3 -2
  191. package/dist/types/lib/sources/iiif-manifest.d.ts +12 -0
  192. package/dist/types/lib/sources/iiif-manifest.test.d.ts +1 -0
  193. package/dist/types/lib/sources/iiif.d.ts +5 -0
  194. package/dist/types/lib/sources/maplibre.d.ts +7 -0
  195. package/dist/types/lib/sources/openindexmap.d.ts +1 -0
  196. package/dist/types/lib/sources/pmtiles.d.ts +6 -4
  197. package/dist/types/lib/sources/raster.d.ts +3 -3
  198. package/dist/types/lib/sources/source.d.ts +7 -7
  199. package/dist/types/lib/sources/tilejson.d.ts +3 -2
  200. package/dist/types/lib/sources/tms.d.ts +1 -0
  201. package/dist/types/lib/sources/vector.d.ts +4 -5
  202. package/dist/types/lib/sources/wms.d.ts +4 -3
  203. package/dist/types/lib/sources/xyz.d.ts +1 -0
  204. package/dist/types/lib/themes/maplibre.d.ts +27 -0
  205. package/dist/types/lib/themes/theme.d.ts +7 -0
  206. package/package.json +3 -2
  207. package/dist/cjs/ogm-image_7.cjs.entry.js +0 -14
  208. package/dist/collection/lib/previewers/index.js +0 -36
  209. package/dist/collection/lib/sources/index.js +0 -29
  210. package/dist/esm/ogm-image_7.entry.js +0 -2
  211. package/dist/ogm-viewer/p-0b81e024.entry.js +0 -1
  212. package/dist/ogm-viewer/p-33R3d9fV.js +0 -1950
  213. package/dist/ogm-viewer/p-BdFT_kJa.js +0 -2
  214. package/dist/types/lib/previewers/index.d.ts +0 -3
  215. package/dist/types/lib/sources/index.d.ts +0 -3
@@ -0,0 +1,11 @@
1
+ import Source from "./source";
2
+ // A source of IIIF image URL(s) to be previewed
3
+ export default class IIIFSource extends Source {
4
+ label() {
5
+ return 'IIIF Image';
6
+ }
7
+ // By default, assume we have a IIIF image URL and just return it
8
+ async getIIIFImageUrls() {
9
+ return [this.url];
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ import Source from "./source";
2
+ // A source of mapped vector or raster data, accessed remotely
3
+ export default class MapLibreSource extends Source {
4
+ // URL used to generate a MapLibre source when adding to map
5
+ getMapLibreSourceUrl() {
6
+ return this.url;
7
+ }
8
+ }
@@ -4,4 +4,7 @@ export default class OpenIndexMapSource extends GeoJSONSource {
4
4
  async getVectorLayers() {
5
5
  return ['indexmap'];
6
6
  }
7
+ label() {
8
+ return 'Index Map';
9
+ }
7
10
  }
@@ -9,10 +9,13 @@ export default class PMTilesSource extends Source {
9
9
  metadata;
10
10
  header;
11
11
  // Store a reference so we can open the archive for metadata inspection
12
- constructor(id, url) {
13
- super(id, url);
12
+ constructor(id, url, bounds) {
13
+ super(id, url, bounds);
14
14
  this.archive = new PMTiles(url);
15
15
  }
16
+ label() {
17
+ return 'PMTiles';
18
+ }
16
19
  // Fetch and memoize PMTiles metadata
17
20
  async getMetadata() {
18
21
  if (!this.metadata) {
@@ -32,7 +35,10 @@ export default class PMTilesSource extends Source {
32
35
  const header = await this.getHeader();
33
36
  return header.tileType === TileType.Mvt || header.tileType === TileType.Mlt;
34
37
  }
38
+ // Used to zoom the map to the data once loaded
35
39
  async getBounds() {
40
+ if (this.bounds)
41
+ return this.bounds;
36
42
  const header = await this.getHeader();
37
43
  return [
38
44
  [header.minLon, header.minLat],
@@ -57,7 +63,7 @@ export default class PMTilesSource extends Source {
57
63
  return undefined;
58
64
  }
59
65
  // Appends the pmtiles:// protocol; must be registered first to work
60
- getSourceUrl() {
66
+ getMapLibreSourceUrl() {
61
67
  return `pmtiles://${this.url}`;
62
68
  }
63
69
  // Raster PMTiles have no specific scheme identifier for MapLibre
@@ -68,7 +74,7 @@ export default class PMTilesSource extends Source {
68
74
  getTileSize() {
69
75
  return undefined;
70
76
  }
71
- async getType() {
77
+ async getMapLibreSourceType() {
72
78
  if (await this.isVector())
73
79
  return 'vector';
74
80
  return 'raster';
@@ -1,13 +1,13 @@
1
- import Source from "./source";
1
+ import MapLibreSource from "./maplibre";
2
2
  // Tiled raster data, accessed remotely
3
- export default class RasterSource extends Source {
3
+ export default class RasterSource extends MapLibreSource {
4
4
  async isVector() {
5
5
  return false;
6
6
  }
7
7
  getTileSize() {
8
8
  return 256;
9
9
  }
10
- async getType() {
10
+ async getMapLibreSourceType() {
11
11
  return 'raster';
12
12
  }
13
13
  }
@@ -1,20 +1,39 @@
1
- // A source of vector or raster data, accessed remotely
1
+ // A source of previewable data at a URL
2
2
  export default class Source {
3
3
  // URL to the remote data source
4
4
  url;
5
- // Unique ID for this source, used in MapLibre style generation
5
+ // Explicitly provided bounds for the source, if any
6
+ bounds;
7
+ // Unique ID for this source
6
8
  id;
7
9
  // Store the source URL
8
- constructor(id, url) {
10
+ constructor(id, url, bounds) {
9
11
  this.id = id;
10
12
  this.url = url;
13
+ this.bounds = bounds;
14
+ }
15
+ // Used to label the tabs for switching between sources, e.g.
16
+ label() {
17
+ return this.constructor.name;
11
18
  }
12
19
  // Check that the URL is valid and accessible
13
20
  async test() {
14
- await fetch(this.url, { method: 'HEAD' });
21
+ try {
22
+ const response = await fetch(this.url, {
23
+ method: 'HEAD',
24
+ signal: AbortSignal.timeout(8000),
25
+ });
26
+ return response.ok;
27
+ }
28
+ catch (error) {
29
+ console.error(`Error checking source URL ${this.url}:`, error);
30
+ return false;
31
+ }
15
32
  }
16
- // URL used to generate a MapLibre source when adding to map
17
- getSourceUrl() {
18
- return this.url;
33
+ // Async because subclasses may do operations to calculate it
34
+ async getBounds() {
35
+ if (this.bounds)
36
+ return this.bounds;
37
+ return undefined;
19
38
  }
20
39
  }
@@ -3,6 +3,9 @@ import Source from "./source";
3
3
  export default class TileJSONSource extends Source {
4
4
  // Metadata parsed from TileJSON document
5
5
  metadata;
6
+ label() {
7
+ return 'TileJSON';
8
+ }
6
9
  // Fetch and memoize metadata
7
10
  async getMetadata() {
8
11
  if (!this.metadata) {
@@ -18,7 +21,10 @@ export default class TileJSONSource extends Source {
18
21
  const pathname = new URL(template).pathname;
19
22
  return pathname.endsWith('.pbf') || pathname.endsWith('.mvt') || pathname.endsWith('.mlt');
20
23
  }
24
+ // Used to zoom the map to the data once loaded
21
25
  async getBounds() {
26
+ if (this.bounds)
27
+ return this.bounds;
22
28
  const metadata = await this.getMetadata();
23
29
  return [
24
30
  [metadata.bounds[0], metadata.bounds[1]],
@@ -37,7 +43,7 @@ export default class TileJSONSource extends Source {
37
43
  return 'mlt';
38
44
  return 'mvt';
39
45
  }
40
- async getType() {
46
+ async getMapLibreSourceType() {
41
47
  if (await this.isVector())
42
48
  return 'vector';
43
49
  return 'raster';
@@ -1,5 +1,8 @@
1
1
  import RasterSource from "./raster";
2
2
  export default class TmsSource extends RasterSource {
3
+ label() {
4
+ return 'Tiled Map Service (TMS)';
5
+ }
3
6
  getScheme() {
4
7
  return 'tms';
5
8
  }
@@ -1,10 +1,10 @@
1
- import Source from "./source";
1
+ import MapLibreSource from "./maplibre";
2
2
  // A source of vector data, accessed remotely
3
- export default class VectorSource extends Source {
3
+ export default class VectorSource extends MapLibreSource {
4
4
  async isVector() {
5
5
  return true;
6
6
  }
7
- async getType() {
7
+ async getMapLibreSourceType() {
8
8
  return 'vector';
9
9
  }
10
10
  }
@@ -13,14 +13,17 @@ export default class WmsSource extends RasterSource {
13
13
  options;
14
14
  // Memoized metadata via GetCapabilities request
15
15
  metadata;
16
- constructor(id, url, options) {
17
- super(id, url);
16
+ constructor(id, url, options, bounds) {
17
+ super(id, url, bounds);
18
18
  this.options = { ...defaultOptions, ...options };
19
19
  // Assume we're using one layer with the given ID if no layer IDs are provided
20
20
  if (!this.options.layerIds || this.options.layerIds.length === 0) {
21
21
  this.options.layerIds = [id];
22
22
  }
23
23
  }
24
+ label() {
25
+ return 'Web Map Service (WMS)';
26
+ }
24
27
  // Fetch and memoize WMS GetCapabilities XML document
25
28
  async getMetadata() {
26
29
  if (!this.metadata) {
@@ -30,15 +33,7 @@ export default class WmsSource extends RasterSource {
30
33
  }
31
34
  return this.metadata;
32
35
  }
33
- // WMS doesn't provide bounds in the URL, so we can't zoom the map
34
- // TODO: use getCapabilities to get the bounding box of the layer(s) and return that
35
- async getBounds() {
36
- return [
37
- [-180, -90],
38
- [180, 90],
39
- ];
40
- }
41
- getSourceUrl() {
36
+ getMapLibreSourceUrl() {
42
37
  return this.tilesUrl;
43
38
  }
44
39
  // WMS has no specific scheme identifier for MapLibre
@@ -1,5 +1,8 @@
1
1
  import RasterSource from "./raster";
2
2
  export default class XyzSource extends RasterSource {
3
+ label() {
4
+ return 'XYZ Tile Service';
5
+ }
3
6
  getScheme() {
4
7
  return 'xyz';
5
8
  }
@@ -0,0 +1,46 @@
1
+ import Theme from "./theme";
2
+ // URLs to MapLibre style documents for basemaps
3
+ export const darkBasemapStyle = 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json';
4
+ export const lightBasemapStyle = 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json';
5
+ // Style properties common to all MapLibre-based previewers
6
+ export default class MapLibreTheme extends Theme {
7
+ getStyle() {
8
+ return {
9
+ padding: this.readCssProperty('--wa-space-xl'),
10
+ opacity: 0.8,
11
+ fillColor: this.dualCssColors('--wa-color-blue-50', '--wa-color-blue-80'),
12
+ fillHighlightColor: this.dualCssColors('--wa-color-cyan-60', '--wa-color-cyan-80'),
13
+ fillSelectedColor: this.dualCssColors('--wa-color-green-50', '--wa-color-green-80'),
14
+ fillInvalidColor: this.dualCssColors('--wa-color-yellow-50', '--wa-color-yellow-80'),
15
+ strokeColor: this.dualCssColors('--wa-color-blue-80', '--wa-color-blue-50'),
16
+ strokeHighlightColor: this.dualCssColors('--wa-color-cyan-80', '--wa-color-cyan-60'),
17
+ strokeSelectedColor: this.dualCssColors('--wa-color-green-80', '--wa-color-green-50'),
18
+ strokeInvalidColor: this.dualCssColors('--wa-color-yellow-80', '--wa-color-yellow-50'),
19
+ textColor: this.readCssProperty('--wa-color-text-normal'),
20
+ textFont: this.readCssProperty('--wa-font-family-body'),
21
+ textSize: 12,
22
+ fillOpacity: 0.5,
23
+ fillHighlightOpacity: 0.8,
24
+ };
25
+ }
26
+ // Get the appropriate basemap style URL based on dark mode
27
+ getBaseMapStyle() {
28
+ return this.darkMode() ? darkBasemapStyle : lightBasemapStyle;
29
+ }
30
+ // If dark mode, use the first CSS color, otherwise use the second CSS color
31
+ dualCssColors(darkColor, lightColor) {
32
+ return this.darkMode() ? this.readCssProperty(darkColor) : this.readCssProperty(lightColor);
33
+ }
34
+ // Atmosphere style for globe
35
+ getSkyStyle() {
36
+ return {
37
+ 'sky-color': '#199EF3',
38
+ 'sky-horizon-blend': 0.5,
39
+ 'horizon-color': '#ffffff',
40
+ 'horizon-fog-blend': 0.5,
41
+ 'fog-color': '#0000ff',
42
+ 'fog-ground-blend': 0.5,
43
+ 'atmosphere-blend': ['interpolate', ['linear'], ['zoom'], 0, 1, 10, 1, 12, 0],
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,23 @@
1
+ // Extracts style values from the DOM/CSS for use in previewers
2
+ export default class Theme {
3
+ element;
4
+ // Store a reference to DOM element so we can use it to inspect styles
5
+ constructor(element) {
6
+ this.element = element;
7
+ }
8
+ // Check if we're in dark mode
9
+ darkMode() {
10
+ return this.readCssProperty('color-scheme') === 'dark';
11
+ }
12
+ // Web Awesome's palette tokens are documented inline (e.g. "#0a3a1d /* oklch(...) */").
13
+ // Browsers are supposed to strip CSS comments before exposing a custom property's computed
14
+ // value, but Safari has a bug where the comment survives, which MapLibre then rejects as an
15
+ // invalid color. Strip it defensively here so we don't depend on browser-specific behavior.
16
+ readCssProperty = (property) => {
17
+ return window
18
+ .getComputedStyle(this.element)
19
+ .getPropertyValue(property)
20
+ .replace(/\/\*.*?\*\//g, '')
21
+ .trim();
22
+ };
23
+ }
@@ -413,6 +413,13 @@ var h = (nodeName, vnodeData, ...children) => {
413
413
  }
414
414
  }
415
415
  }
416
+ if (typeof nodeName === "function") {
417
+ return nodeName(
418
+ vnodeData === null ? {} : vnodeData,
419
+ vNodeChildren,
420
+ vdomFnUtils
421
+ );
422
+ }
416
423
  const vnode = newVNode(nodeName, null);
417
424
  vnode.$attrs$ = vnodeData;
418
425
  if (vNodeChildren.length > 0) {
@@ -442,6 +449,36 @@ var newVNode = (tag, text) => {
442
449
  };
443
450
  var Host = {};
444
451
  var isHost = (node) => node && node.$tag$ === Host;
452
+ var vdomFnUtils = {
453
+ forEach: (children, cb) => children.map(convertToPublic).forEach(cb),
454
+ map: (children, cb) => children.map(convertToPublic).map(cb).map(convertToPrivate)
455
+ };
456
+ var convertToPublic = (node) => ({
457
+ vattrs: node.$attrs$,
458
+ vchildren: node.$children$,
459
+ vkey: node.$key$,
460
+ vname: node.$name$,
461
+ vtag: node.$tag$,
462
+ vtext: node.$text$
463
+ });
464
+ var convertToPrivate = (node) => {
465
+ if (typeof node.vtag === "function") {
466
+ const vnodeData = { ...node.vattrs };
467
+ if (node.vkey) {
468
+ vnodeData.key = node.vkey;
469
+ }
470
+ if (node.vname) {
471
+ vnodeData.name = node.vname;
472
+ }
473
+ return h(node.vtag, vnodeData, ...node.vchildren || []);
474
+ }
475
+ const vnode = newVNode(node.vtag, node.vtext);
476
+ vnode.$attrs$ = node.vattrs;
477
+ vnode.$children$ = node.vchildren;
478
+ vnode.$key$ = node.vkey;
479
+ vnode.$name$ = node.vname;
480
+ return vnode;
481
+ };
445
482
 
446
483
  // src/runtime/normalize-watchers.ts
447
484
  var normalizeWatchers = (raw) => {
@@ -515,7 +552,7 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
515
552
  return;
516
553
  }
517
554
  let isProp = isMemberInElement(elm, memberName);
518
- memberName.toLowerCase();
555
+ let ln = memberName.toLowerCase();
519
556
  if (memberName === "class") {
520
557
  const classList = elm.classList;
521
558
  const oldClasses = parseClassList(oldValue);
@@ -524,7 +561,25 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
524
561
  classList.remove(...oldClasses.filter((c) => c && !newClasses.includes(c)));
525
562
  classList.add(...newClasses.filter((c) => c && !oldClasses.includes(c)));
526
563
  }
527
- } else if (memberName === "key") ; else if (memberName[0] === "a" && memberName.startsWith("attr:")) {
564
+ } else if (memberName === "key") ; else if ((!isProp ) && memberName[0] === "o" && memberName[1] === "n") {
565
+ if (memberName[2] === "-") {
566
+ memberName = memberName.slice(3);
567
+ } else if (isMemberInElement(win, ln)) {
568
+ memberName = ln.slice(2);
569
+ } else {
570
+ memberName = ln[2] + memberName.slice(3);
571
+ }
572
+ if (oldValue || newValue) {
573
+ const capture = memberName.endsWith(CAPTURE_EVENT_SUFFIX);
574
+ memberName = memberName.replace(CAPTURE_EVENT_REGEX, "");
575
+ if (oldValue) {
576
+ plt.rel(elm, memberName, oldValue, capture);
577
+ }
578
+ if (newValue) {
579
+ plt.ael(elm, memberName, newValue, capture);
580
+ }
581
+ }
582
+ } else if (memberName[0] === "a" && memberName.startsWith("attr:")) {
528
583
  const propName = memberName.slice(5);
529
584
  let attrName;
530
585
  {
@@ -599,6 +654,8 @@ var parseClassList = (value) => {
599
654
  }
600
655
  return value.split(parseClassListRegex);
601
656
  };
657
+ var CAPTURE_EVENT_SUFFIX = "Capture";
658
+ var CAPTURE_EVENT_REGEX = new RegExp(CAPTURE_EVENT_SUFFIX + "$");
602
659
 
603
660
  // src/runtime/vdom/update-element.ts
604
661
  var updateElement = (oldVnode, newVnode, isSvgMode2, isInitialRender) => {
@@ -1540,7 +1597,7 @@ var bootstrapLazy = (lazyBundles, options = {}) => {
1540
1597
  var addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
1541
1598
  if (listeners && win.document) {
1542
1599
  listeners.map(([flags, name, method]) => {
1543
- const target = elm;
1600
+ const target = getHostListenerTarget(win.document, elm, flags) ;
1544
1601
  const handler = hostListenerProxy(hostRef, method);
1545
1602
  const opts = hostListenerOpts(flags);
1546
1603
  plt.ael(target, name, handler, opts);
@@ -1562,6 +1619,12 @@ var hostListenerProxy = (hostRef, methodName) => (ev) => {
1562
1619
  consoleError(e, hostRef.$hostElement$);
1563
1620
  }
1564
1621
  };
1622
+ var getHostListenerTarget = (doc, elm, flags) => {
1623
+ if (flags & 16 /* TargetBody */) {
1624
+ return doc.body;
1625
+ }
1626
+ return elm;
1627
+ };
1565
1628
  var hostListenerOpts = (flags) => supportsListenerOptions ? {
1566
1629
  passive: (flags & 1 /* Passive */) !== 0,
1567
1630
  capture: (flags & 2 /* Capture */) !== 0
@@ -1,7 +1,7 @@
1
1
  import { i as inflate_1 } from './pako.esm-KbdoS3Oq.js';
2
- import { g as getDefaultExportFromCjs, L as LercAddCompression, a as LercParameters } from './ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-settings.ogm-sidebar.ogm-viewer-r5w_49n3.js';
2
+ import { g as getDefaultExportFromCjs, L as LercAddCompression, a as LercParameters } from './ogm-alerts.ogm-attributes.ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-preview.ogm-previews.ogm-settings.ogm-sidebar.ogm-viewer-Dlc6USWB.js';
3
3
  import { B as BaseDecoder } from './basedecoder-BK531nfi.js';
4
- import './index-BdFT_kJa.js';
4
+ import './index-DTLAlWKQ.js';
5
5
 
6
6
  var LercDecode = {exports: {}};
7
7
 
@@ -1,11 +1,11 @@
1
- import { b as bootstrapLazy } from './index-BdFT_kJa.js';
2
- export { s as setNonce } from './index-BdFT_kJa.js';
1
+ import { b as bootstrapLazy } from './index-DTLAlWKQ.js';
2
+ export { s as setNonce } from './index-DTLAlWKQ.js';
3
3
  import { g as globalScripts } from './app-globals-DQuL1Twl.js';
4
4
 
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await globalScripts();
8
- return bootstrapLazy([["ogm-image_7",[[513,"ogm-viewer",{"recordUrl":[1,"record-url"],"theme":[1],"record":[32],"previewOpacity":[32],"sidebarOpen":[32],"loadRecord":[64]},[[0,"sidebarToggled","toggleSidebar"],[0,"opacityChange","adjustPreviewOpacity"],[0,"mapLoading","setLoadingStarted"],[0,"imageLoading","setLoadingStarted"],[0,"mapIdle","setLoadingFinished"],[0,"imageLoaded","setLoadingFinished"]],{"recordUrl":[{"updateRecord":0}]}],[513,"ogm-sidebar",{"record":[16],"theme":[1],"open":[4]}],[513,"ogm-image",{"record":[16],"theme":[1],"padding":[2]},null,{"record":[{"onRecordChange":0}],"padding":[{"onPaddingChange":0}]}],[513,"ogm-map",{"record":[16],"theme":[1],"previewOpacity":[2,"preview-opacity"],"padding":[2],"easeMapTo":[64]},null,{"record":[{"previewRecord":0}],"padding":[{"onPaddingChange":0}]}],[513,"ogm-menubar",{"record":[16],"theme":[1],"loading":[4]}],[513,"ogm-metadata",{"record":[16],"theme":[1],"fieldNames":[16],"filteredRecord":[32]}],[513,"ogm-settings",{"record":[16]},[[0,"sl-input","handleOpacityChange"]]]]]], options);
8
+ return bootstrapLazy([["ogm-alerts_11",[[513,"ogm-viewer",{"recordUrl":[1,"record-url"],"theme":[1],"record":[32],"error":[32],"previewOpacity":[32],"sidebarOpen":[32],"loading":[32],"loadRecord":[64]},[[0,"sidebarToggled","toggleSidebar"],[0,"opacityChange","adjustPreviewOpacity"],[0,"mapLoading","setLoadingStarted"],[0,"imageLoading","setLoadingStarted"],[0,"mapIdle","setLoadingFinished"],[0,"imageLoaded","setLoadingFinished"]],{"recordUrl":[{"updateRecord":0}],"record":[{"resetLoading":0}]}],[513,"ogm-previews",{"theme":[1],"record":[16],"previewOpacity":[2,"preview-opacity"],"sidebarPadding":[2,"sidebar-padding"],"sources":[32]},null,{"record":[{"getSources":0}]}],[513,"ogm-sidebar",{"record":[16],"theme":[1],"open":[4]}],[513,"ogm-menubar",{"record":[16],"theme":[1],"loading":[4]}],[513,"ogm-preview",{"theme":[1],"source":[16],"previewOpacity":[2,"preview-opacity"],"sidebarPadding":[2,"sidebar-padding"],"error":[32]},[[0,"previewError","handlePreviewError"]],{"source":[{"resetError":0}]}],[513,"ogm-metadata",{"record":[16],"theme":[1],"fieldNames":[16],"filteredRecord":[32]}],[513,"ogm-settings",{"record":[16]},[[0,"input","handleOpacityChange"]]],[513,"ogm-map",{"source":[16],"theme":[1],"padding":[2],"easeMapTo":[64]},[[16,"featureSelected","handleFeatureSelected"]],{"source":[{"previewSource":0}],"padding":[{"onPaddingChange":0}]}],[513,"ogm-alerts",{"theme":[1],"error":[16]}],[513,"ogm-image",{"source":[16],"theme":[1],"padding":[2]},null,{"source":[{"onSourceChange":0}],"padding":[{"onPaddingChange":0}]}],[513,"ogm-attributes",{"features":[16],"currentIndex":[32]},null,{"features":[{"onFeaturesChange":0}],"currentIndex":[{"onCurrentIndexChange":0}]}]]]], options);
9
9
  };
10
10
 
11
11
  export { defineCustomElements };