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,112 @@
1
+ import { h } from "@stencil/core";
2
+ import Autolinker from "autolinker";
3
+ const LABEL_KEYS = ['name', 'title', 'label', 'id'];
4
+ const getFeatureLabel = (feature) => {
5
+ const originalKeys = Object.keys(feature.properties || {});
6
+ if (originalKeys.length === 0)
7
+ return;
8
+ const key = LABEL_KEYS.map(k => originalKeys.find(ok => ok.toLowerCase() === k)).find(Boolean);
9
+ if (key)
10
+ return feature.properties?.[key];
11
+ };
12
+ export class OgmAttributes {
13
+ features = [];
14
+ featureSelected;
15
+ currentIndex = 0;
16
+ onFeaturesChange() {
17
+ this.currentIndex = 0;
18
+ }
19
+ onCurrentIndexChange() {
20
+ const feature = this.features[this.currentIndex];
21
+ if (feature)
22
+ this.featureSelected.emit(feature);
23
+ }
24
+ render() {
25
+ if (this.features.length === 0)
26
+ return null;
27
+ const feature = this.features[this.currentIndex];
28
+ const multiple = this.features.length > 1;
29
+ const label = getFeatureLabel(feature);
30
+ return (h("wa-scroller", { orientation: "vertical" }, h("table", { class: "attribute-table" }, multiple && label ? (h("thead", null, h("tr", { class: "header" }, h("td", { colSpan: 2 }, h("div", { class: "pagination" }, h("wa-button", { appearance: "plain", disabled: this.currentIndex === 0, onClick: () => this.currentIndex-- }, h("wa-icon", { name: "arrow-left", label: "Previous feature", canvas: "auto" })), label && (h("div", { class: "label" }, h("div", null, label))), h("div", { class: "count" }, ' ', "(", this.currentIndex + 1, "/", this.features.length, ")"), h("wa-button", { appearance: "plain", disabled: this.currentIndex === this.features.length - 1, onClick: () => this.currentIndex++ }, h("wa-icon", { name: "arrow-right", label: "Next feature", canvas: "auto" }))))))) : (label && (h("thead", null, h("tr", { class: "header" }, h("td", { colSpan: 2 }, h("div", { class: "label" }, h("div", null, label))))))), h("tbody", null, Object.entries(feature.properties || {}).map(([key, value]) => (h("tr", { key: key }, h("td", { class: "key" }, key), h("td", { class: "value", innerHTML: Autolinker.link(value.toString(), { hashtag: false, mention: false, phone: false }) }))))))));
31
+ }
32
+ static get is() { return "ogm-attributes"; }
33
+ static get encapsulation() { return "shadow"; }
34
+ static get originalStyleUrls() {
35
+ return {
36
+ "$": ["ogm-attributes.css"]
37
+ };
38
+ }
39
+ static get styleUrls() {
40
+ return {
41
+ "$": ["ogm-attributes.css"]
42
+ };
43
+ }
44
+ static get properties() {
45
+ return {
46
+ "features": {
47
+ "type": "unknown",
48
+ "mutable": false,
49
+ "complexType": {
50
+ "original": "MapGeoJSONFeature[]",
51
+ "resolved": "MapGeoJSONFeature[]",
52
+ "references": {
53
+ "MapGeoJSONFeature": {
54
+ "location": "import",
55
+ "path": "maplibre-gl",
56
+ "id": "node_modules::MapGeoJSONFeature",
57
+ "referenceLocation": "MapGeoJSONFeature"
58
+ }
59
+ }
60
+ },
61
+ "required": false,
62
+ "optional": false,
63
+ "docs": {
64
+ "tags": [],
65
+ "text": ""
66
+ },
67
+ "getter": false,
68
+ "setter": false,
69
+ "defaultValue": "[]"
70
+ }
71
+ };
72
+ }
73
+ static get states() {
74
+ return {
75
+ "currentIndex": {}
76
+ };
77
+ }
78
+ static get events() {
79
+ return [{
80
+ "method": "featureSelected",
81
+ "name": "featureSelected",
82
+ "bubbles": true,
83
+ "cancelable": true,
84
+ "composed": true,
85
+ "docs": {
86
+ "tags": [],
87
+ "text": ""
88
+ },
89
+ "complexType": {
90
+ "original": "MapGeoJSONFeature",
91
+ "resolved": "GeoJSONFeature & { layer: (Omit<FillLayerSpecification, \"source\"> | Omit<LineLayerSpecification, \"source\"> | Omit<SymbolLayerSpecification, \"source\"> | Omit<CircleLayerSpecification, \"source\"> | Omit<HeatmapLayerSpecification, \"source\"> | Omit<FillExtrusionLayerSpecification, \"source\"> | Omit<RasterLayerSpecification, \"source\"> | Omit<HillshadeLayerSpecification, \"source\"> | Omit<ColorReliefLayerSpecification, \"source\"> | Omit<BackgroundLayerSpecification, \"source\">) & { source: string; }; source: string; sourceLayer?: string; state: { [key: string]: any; }; }",
92
+ "references": {
93
+ "MapGeoJSONFeature": {
94
+ "location": "import",
95
+ "path": "maplibre-gl",
96
+ "id": "node_modules::MapGeoJSONFeature",
97
+ "referenceLocation": "MapGeoJSONFeature"
98
+ }
99
+ }
100
+ }
101
+ }];
102
+ }
103
+ static get watchers() {
104
+ return [{
105
+ "propName": "features",
106
+ "methodName": "onFeaturesChange"
107
+ }, {
108
+ "propName": "currentIndex",
109
+ "methodName": "onCurrentIndexChange"
110
+ }];
111
+ }
112
+ }
@@ -7,7 +7,7 @@
7
7
 
8
8
  #openseadragon {
9
9
  height: 100%;
10
- background-color: var(--sl-panel-background-color);
10
+ background-color: var(--wa-color-surface-raised);
11
11
  }
12
12
 
13
13
  .controls {
@@ -1,15 +1,19 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { Viewer } from "openseadragon";
3
3
  import { getElement, findElement } from "../../lib/elements";
4
+ import { referenceError } from "../../lib/errors";
4
5
  export class OgmImage {
5
6
  el;
6
- record;
7
+ source;
7
8
  theme;
8
9
  padding = 0;
9
10
  imageLoaded;
10
11
  imageLoading;
12
+ previewError;
11
13
  // OpenSeadragon viewer instance
12
14
  viewer;
15
+ // Guards against reporting more than one error per load attempt
16
+ errorReported = false;
13
17
  // Set up OpenSeadragon viewer on load
14
18
  async componentDidLoad() {
15
19
  this.viewer = new Viewer({
@@ -26,13 +30,24 @@ export class OgmImage {
26
30
  nextButton: getElement(this.el, '.next'),
27
31
  previousButton: getElement(this.el, '.prev'),
28
32
  });
33
+ // Clear loading state whether we succeeded or failed
29
34
  this.viewer.addHandler('open', () => this.imageLoaded.emit());
30
- if (this.record)
35
+ // Surface OpenSeaDragon decode errors here
36
+ this.viewer.addHandler('open-failed', event => {
37
+ this.imageLoaded.emit();
38
+ this.reportError(new Error(event.message));
39
+ });
40
+ // If we do have a source, load the images
41
+ if (this.source)
31
42
  await this.loadImages();
32
43
  }
33
- // Update preview when record changes
34
- async onRecordChange() {
35
- if (this.record)
44
+ // Destroy the viewer when we are removed from the DOM
45
+ disconnectedCallback() {
46
+ this.viewer?.destroy();
47
+ }
48
+ // Update preview when source changes
49
+ async onSourceChange() {
50
+ if (this.source)
36
51
  await this.loadImages();
37
52
  }
38
53
  async onPaddingChange() {
@@ -46,14 +61,29 @@ export class OgmImage {
46
61
  // Get all of the IIIF image URLs and send them to OpenSeadragon
47
62
  // This makes a request to fetch and cache the manifest
48
63
  async loadImages() {
64
+ this.errorReported = false;
49
65
  this.imageLoading.emit();
50
- const images = await this.record.references.iiifImageUrls();
51
- if (!images)
52
- throw new Error('No IIIF images found for record');
53
- this.viewer.open(images);
66
+ try {
67
+ const images = await this.source.getIIIFImageUrls();
68
+ if (!images)
69
+ throw new Error('No IIIF images found for source');
70
+ this.viewer.open(images);
71
+ }
72
+ catch (error) {
73
+ console.error(`Error loading IIIF images for ${this.source.url}:`, error);
74
+ this.imageLoaded.emit();
75
+ this.reportError(error);
76
+ }
77
+ }
78
+ // Emit a single preview error per load attempt
79
+ reportError(error) {
80
+ if (this.errorReported || !this.source)
81
+ return;
82
+ this.errorReported = true;
83
+ this.previewError.emit(referenceError(error, this.source.label(), this.source.url));
54
84
  }
55
85
  render() {
56
- return (h(Host, { key: 'c28429837984f688efbd0fd7be5d2c22cb213109' }, h("div", { key: 'ab4de1759a7d962840674d248cf9a15bc5f4e2b2', id: "openseadragon" }, h("div", { key: '59be4dd45b938f81787239162295de0f3db50401', class: "controls" }, h("sl-button", { key: '14bda0b404dd75a43d146ffa835ce82fbc338655', class: "zoom-in", size: "small", circle: true }, h("sl-icon", { key: '620b15a8ecca41fe547d2aa9a85b190aedfee4bf', name: "zoom-in", label: "Zoom In" })), h("sl-button", { key: 'e12c3c58fd65e04fc2568f941aab72101d443bf8', class: "zoom-out", size: "small", circle: true }, h("sl-icon", { key: '99938bb923d76ebd30f4aa344d714deabdd16e6b', name: "zoom-out", label: "Zoom Out" })), h("sl-button", { key: '2836926f056be59df8c74034c032edea1a2b42f6', class: "home", size: "small", circle: true }, h("sl-icon", { key: 'a1e532707374c5161462483e7b0ff84d62ac28b2', name: "house", label: "Reset View" })), h("sl-button", { key: 'a328228cf8b5ca07d08d972c066ad6cba7cb76d1', class: "full-page", size: "small", circle: true }, h("sl-icon", { key: '743ba0fa2af8df3fe00e037c1e2d89db328001f1', name: "arrows-fullscreen", label: "Full Screen" })), h("sl-button", { key: '100f2e7be8b44aab83e9e99de2f04d6897a2e5a6', class: "next", size: "small", circle: true }, h("sl-icon", { key: 'f1b9f5c24913f27b41e5dfa665bd62764f597a20', name: "arrow-right", label: "Next" })), h("sl-button", { key: '0b6c31c6af12718d256703f4f3b47d1879c14d9a', class: "prev", size: "small", circle: true }, h("sl-icon", { key: '1d9dce41e3dfd2be557417a19309f3fc888a84a2', name: "arrow-left", label: "Previous" }))))));
86
+ return (h(Host, { key: 'ebbebaddac72024a3b311e0e0e501267a83d1e95' }, h("div", { key: '4f171256535cfd11430e2269fda389ffae3cedae', id: "openseadragon" }, h("div", { key: 'c308186a13fd6b8e0b1fadbf1fd1e6924631f9d6', class: "controls" }, h("wa-button", { key: '1f9e0c4c6d881bf09d7ceb160f470992d71ebe07', class: "zoom-in", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: 'cbacb0a388de2c7f349e25172027874a0224a678', name: "zoom-in", label: "Zoom In", canvas: "auto" })), h("wa-button", { key: 'dd8d7e9c5584b124ae105b2187100964f5e3a02a', class: "zoom-out", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: '2b5acf2e07c99df9556692bf534bb3847506e4d4', name: "zoom-out", label: "Zoom Out", canvas: "auto" })), h("wa-button", { key: '5534a5c77ea20a1f77544e5acd99d4247dd3d287', class: "home", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: 'faadb8ea57bf1b831b292eaf66bcea39b7e215d1', name: "house", label: "Reset View", canvas: "auto" })), h("wa-button", { key: '8979cf58a94da89e0e2d132a92fe45323f07de01', class: "full-page", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: '12cb3224e7f14258376c1c0bf6ffc5abda5c2252', name: "arrows-fullscreen", label: "Full Screen", canvas: "auto" })), h("wa-button", { key: 'e79c37f27ff14d5c4991ff30ff88aada467214ec', class: "next", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: 'ee10870ace583257393c53ba12b73ab3b015371b', name: "arrow-right", label: "Next", canvas: "auto" })), h("wa-button", { key: '9d8999e199b7b6338261eb16a655d2199520cf22', class: "prev", size: "s", appearance: "filled-outlined", pill: true }, h("wa-icon", { key: 'fde1a9022b9e5f90e269c75ce87943808031e021', name: "arrow-left", label: "Previous", canvas: "auto" }))))));
57
87
  }
58
88
  static get is() { return "ogm-image"; }
59
89
  static get encapsulation() { return "shadow"; }
@@ -69,18 +99,16 @@ export class OgmImage {
69
99
  }
70
100
  static get properties() {
71
101
  return {
72
- "record": {
102
+ "source": {
73
103
  "type": "unknown",
74
104
  "mutable": false,
75
105
  "complexType": {
76
- "original": "OgmRecord",
77
- "resolved": "OgmRecord",
106
+ "original": "IIIFSource",
107
+ "resolved": "IIIFSource",
78
108
  "references": {
79
- "OgmRecord": {
80
- "location": "import",
81
- "path": "../../lib/record",
82
- "id": "src/lib/record.ts::OgmRecord",
83
- "referenceLocation": "OgmRecord"
109
+ "IIIFSource": {
110
+ "location": "global",
111
+ "id": "global::IIIFSource"
84
112
  }
85
113
  }
86
114
  },
@@ -165,13 +193,35 @@ export class OgmImage {
165
193
  "resolved": "void",
166
194
  "references": {}
167
195
  }
196
+ }, {
197
+ "method": "previewError",
198
+ "name": "previewError",
199
+ "bubbles": true,
200
+ "cancelable": true,
201
+ "composed": true,
202
+ "docs": {
203
+ "tags": [],
204
+ "text": ""
205
+ },
206
+ "complexType": {
207
+ "original": "PreviewError",
208
+ "resolved": "PreviewError",
209
+ "references": {
210
+ "PreviewError": {
211
+ "location": "import",
212
+ "path": "../../lib/errors",
213
+ "id": "src/lib/errors.ts::PreviewError",
214
+ "referenceLocation": "PreviewError"
215
+ }
216
+ }
217
+ }
168
218
  }];
169
219
  }
170
220
  static get elementRef() { return "el"; }
171
221
  static get watchers() {
172
222
  return [{
173
- "propName": "record",
174
- "methodName": "onRecordChange"
223
+ "propName": "source",
224
+ "methodName": "onSourceChange"
175
225
  }, {
176
226
  "propName": "padding",
177
227
  "methodName": "onPaddingChange"
@@ -6,22 +6,55 @@
6
6
  position: relative;
7
7
  }
8
8
 
9
- /* inspection cursor
10
- canvas {
11
- cursor: crosshair;
9
+ /* Color of the map background ("space" around the globe) */
10
+ .maplibregl-canvas {
11
+ background-color: var(--wa-color-surface-default);
12
+ }
13
+
14
+ /* Inspection popups. Vertical scrolling (when content is too tall) is handled by the
15
+ <wa-scroller> inside ogm-attributes, not here - that's what gives it the fading shadow cue. */
16
+ .maplibregl-popup-content {
17
+ max-width: 400px;
18
+ overflow: hidden;
19
+ padding: 0;
20
+ box-shadow: var(--wa-shadow-l);
21
+ border: var(--wa-panel-border-width) solid var(--wa-color-surface-border);
22
+ color: var(--wa-color-text-normal);
23
+ background-color: var(--wa-color-surface-default);
24
+
25
+ .maplibregl-popup-close-button {
26
+ background-color: var(--wa-color-surface-default);
27
+ border-radius: 10px;
28
+ }
29
+ }
30
+
31
+ /* Popup tip (the little triangle) */
32
+ .maplibregl-popup-anchor-right .maplibregl-popup-tip {
33
+ border-left-color: var(--wa-color-surface-border);
34
+ }
35
+
36
+ .maplibregl-popup-anchor-left .maplibregl-popup-tip {
37
+ border-right-color: var(--wa-color-surface-border);
38
+ }
39
+
40
+ .maplibregl-popup-anchor-bottom .maplibregl-popup-tip,
41
+ .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip,
42
+ .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip {
43
+ border-top-color: var(--wa-color-surface-border);
44
+ }
45
+
46
+ .maplibregl-popup-anchor-top .maplibregl-popup-tip,
47
+ .maplibregl-popup-anchor-top-right .maplibregl-popup-tip,
48
+ .maplibregl-popup-anchor-top-left .maplibregl-popup-tip {
49
+ border-bottom-color: var(--wa-color-surface-border);
12
50
  }
13
- */
14
51
 
15
52
  /* Dark mode map adjustments */
16
- .sl-theme-dark {
53
+ .wa-dark {
17
54
  .tile-border {
18
55
  stroke: white;
19
56
  }
20
57
 
21
- .maplibregl-canvas {
22
- background-color: black;
23
- }
24
-
25
58
  .maplibregl-ctrl.maplibregl-ctrl-group {
26
59
  filter: invert(1);
27
60
  }
@@ -30,42 +63,8 @@ canvas {
30
63
  .maplibregl-ctrl-group button:focus:focus-visible {
31
64
  box-shadow: 0 0 2px 2px #ff6900;
32
65
  }
66
+
33
67
  .maplibregl-ctrl button.maplibregl-ctrl-globe-enabled .maplibregl-ctrl-icon {
34
68
  filter: invert(1);
35
69
  }
36
-
37
- details.maplibregl-ctrl.maplibregl-ctrl-attrib {
38
- background-color: black;
39
- color: #999;
40
- }
41
- details.maplibregl-ctrl.maplibregl-ctrl-attrib a {
42
- color: #999;
43
- }
44
- details.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button {
45
- background-color: #999;
46
- }
47
-
48
- div.maplibregl-popup-content {
49
- background-color: black;
50
- }
51
-
52
- div.maplibregl-popup-anchor-right div.maplibregl-popup-tip {
53
- border-left-color: black;
54
- }
55
-
56
- div.maplibregl-popup-anchor-left div.maplibregl-popup-tip {
57
- border-right-color: black;
58
- }
59
-
60
- div.maplibregl-popup-anchor-bottom div.maplibregl-popup-tip,
61
- div.maplibregl-popup-anchor-bottom-right div.maplibregl-popup-tip,
62
- div.maplibregl-popup-anchor-bottom-left div.maplibregl-popup-tip {
63
- border-top-color: black;
64
- }
65
-
66
- div.maplibregl-popup-anchor-top div.maplibregl-popup-tip,
67
- div.maplibregl-popup-anchor-top-right div.maplibregl-popup-tip,
68
- div.maplibregl-popup-anchor-top-left div.maplibregl-popup-tip {
69
- border-bottom-color: black;
70
- }
71
70
  }