@splunk/visualization-context 28.2.3 → 28.4.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 (61) hide show
  1. package/BaseRegistry.d.ts +91 -0
  2. package/BaseRegistry.js +4 -12
  3. package/BaseRegistry.js.map +4 -4
  4. package/DataSourceContext.d.ts +8 -0
  5. package/DataSourceContext.js +1 -1
  6. package/DataSourceContext.js.map +2 -2
  7. package/EventsContext.d.ts +20 -0
  8. package/EventsContext.js +1 -1
  9. package/FeatureFlagContext.d.ts +5 -0
  10. package/FeatureFlagContext.js +4 -4
  11. package/FeatureFlagContext.js.map +3 -3
  12. package/FeatureFlags.d.ts +15 -0
  13. package/GeoContext.d.ts +5 -0
  14. package/GeoContext.js +4 -4
  15. package/GeoContext.js.map +3 -3
  16. package/GeoJsonProvider.d.ts +26 -0
  17. package/GeoJsonProvider.js +102 -37
  18. package/GeoJsonProvider.js.map +4 -4
  19. package/GeoRegistry.d.ts +20 -0
  20. package/GeoRegistry.js +24 -35
  21. package/GeoRegistry.js.map +4 -4
  22. package/IconContext.d.ts +5 -0
  23. package/IconContext.js +4 -4
  24. package/IconContext.js.map +3 -3
  25. package/IconRegistry.d.ts +23 -0
  26. package/IconRegistry.js +6 -16
  27. package/IconRegistry.js.map +4 -4
  28. package/ImageContext.d.ts +5 -0
  29. package/ImageContext.js +4 -4
  30. package/ImageContext.js.map +3 -3
  31. package/ImageRegistry.d.ts +23 -0
  32. package/ImageRegistry.js +6 -16
  33. package/ImageRegistry.js.map +4 -4
  34. package/LICENSE.md +0 -1
  35. package/LocalIconProvider.d.ts +49 -0
  36. package/LocalIconProvider.js +92 -50
  37. package/LocalIconProvider.js.map +4 -4
  38. package/LocalImageProvider.d.ts +39 -0
  39. package/LocalImageProvider.js +109 -45
  40. package/LocalImageProvider.js.map +4 -4
  41. package/MapContext.d.ts +29 -0
  42. package/MapContext.js +1 -1
  43. package/MapContext.js.map +1 -1
  44. package/MessageContext.d.ts +8 -0
  45. package/MockedProvider.d.ts +56 -0
  46. package/MockedProvider.js +137 -56
  47. package/MockedProvider.js.map +4 -4
  48. package/Provider.d.ts +27 -0
  49. package/Provider.js +1 -1
  50. package/Provider.js.map +3 -3
  51. package/TimezoneContext.d.ts +19 -0
  52. package/TimezoneContext.js +1 -1
  53. package/ZoomContext.d.ts +3 -0
  54. package/package.json +6 -6
  55. package/testDataURIs.d.ts +2 -0
  56. package/testDataURIs.js +1 -1
  57. package/testDataURIs.js.map +3 -3
  58. package/testSVG.d.ts +1 -0
  59. package/testSVG.js +1 -1
  60. package/testSVG.js.map +1 -1
  61. package/tsconfig.json +10 -6
@@ -0,0 +1,49 @@
1
+ import Provider from './Provider';
2
+ export declare const b64EncodeUnicode: (str: any) => string;
3
+ export declare const KEY = "__icons__";
4
+ interface IconListOptions {
5
+ offset?: number;
6
+ count?: number;
7
+ meta?: any[];
8
+ search?: string | null;
9
+ }
10
+ /**
11
+ * a local icon provider
12
+ */
13
+ declare class LocalIconProvider extends Provider {
14
+ constructor();
15
+ /**
16
+ * return provider type
17
+ * @return {String} 'local'
18
+ */
19
+ getType(): string;
20
+ /**
21
+ * upload one new icon
22
+ */
23
+ upload(dataURI: any, metaData: any): Promise<any>;
24
+ /**
25
+ * get one icon by icon id
26
+ */
27
+ getById(id: any): Promise<{
28
+ dataURI: string;
29
+ metaData: Record<string, any>;
30
+ }>;
31
+ /**
32
+ * get all icon ids
33
+ * @params options
34
+ * @params options.meta a list of meta data attribute that would be returned with each id
35
+ * @params options.search a search string to filter the returned icons
36
+ */
37
+ listIds({ offset, count, meta, search }?: IconListOptions): Promise<Array<{
38
+ id: string;
39
+ metaData?: Record<string, any>;
40
+ }>>;
41
+ /**
42
+ * delete an icon by icon id
43
+ */
44
+ deleteById(id: any): Promise<{
45
+ dataURI: string;
46
+ metaData: Record<string, any>;
47
+ }>;
48
+ }
49
+ export default LocalIconProvider;
@@ -67,7 +67,7 @@ var __async = (__this, __arguments, generator) => {
67
67
  });
68
68
  };
69
69
 
70
- // src/LocalIconProvider.js
70
+ // src/LocalIconProvider.ts
71
71
  var LocalIconProvider_exports = {};
72
72
  __export(LocalIconProvider_exports, {
73
73
  KEY: () => KEY,
@@ -94,16 +94,52 @@ var defaultImport2 = __toESM(require("@splunk/ui-utils/i18n"));
94
94
  __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
95
95
  var i18n_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
96
96
 
97
- // esm-externals:@splunk/visualization-context/Provider
98
- var Provider_exports = {};
99
- __export(Provider_exports, {
100
- default: () => Provider_default
101
- });
102
- var defaultImport3 = __toESM(require("@splunk/visualization-context/Provider"));
103
- __reExport(Provider_exports, require("@splunk/visualization-context/Provider"));
104
- var Provider_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
97
+ // src/Provider.ts
98
+ var Provider = class {
99
+ constructor() {
100
+ }
101
+ /**
102
+ * return provider type
103
+ */
104
+ getType() {
105
+ throw new Error("getType() not implemented");
106
+ }
107
+ /**
108
+ * return a list of images
109
+ */
110
+ listIds(_0) {
111
+ return __async(this, arguments, function* ({ offset, count }) {
112
+ throw new Error("listIds() not implemented");
113
+ });
114
+ }
115
+ /**
116
+ * add an image to the storage
117
+ */
118
+ upload(dataURI, metaData) {
119
+ return __async(this, null, function* () {
120
+ throw new Error("upload() not implemented");
121
+ });
122
+ }
123
+ /**
124
+ * retrieve imageID
125
+ */
126
+ getById(imageID) {
127
+ return __async(this, null, function* () {
128
+ throw new Error("get() not implemented");
129
+ });
130
+ }
131
+ /**
132
+ * delete image by imageID
133
+ */
134
+ deleteById(imageID) {
135
+ return __async(this, null, function* () {
136
+ throw new Error("delete() not implemented");
137
+ });
138
+ }
139
+ };
140
+ var Provider_default = Provider;
105
141
 
106
- // src/LocalIconProvider.js
142
+ // src/LocalIconProvider.ts
107
143
  var b64EncodeUnicode = (str) => (
108
144
  // first we use encodeURIComponent to get percent-encoded UTF-8,
109
145
  // then we convert the percent encodings into raw bytes which
@@ -162,11 +198,13 @@ var LocalIconProvider = class extends Provider_default {
162
198
  * get one icon by icon id
163
199
  */
164
200
  getById(id) {
165
- const icons = JSON.parse(localStorage.getItem(KEY) || "{}");
166
- if (icons[id]) {
167
- return icons[id];
168
- }
169
- throw new Error((0, i18n_exports._)("The icon is not found."));
201
+ return __async(this, null, function* () {
202
+ const icons = JSON.parse(localStorage.getItem(KEY) || "{}");
203
+ if (icons[id]) {
204
+ return icons[id];
205
+ }
206
+ throw new Error((0, i18n_exports._)("The icon is not found."));
207
+ });
170
208
  }
171
209
  /**
172
210
  * get all icon ids
@@ -174,47 +212,51 @@ var LocalIconProvider = class extends Provider_default {
174
212
  * @params options.meta a list of meta data attribute that would be returned with each id
175
213
  * @params options.search a search string to filter the returned icons
176
214
  */
177
- listIds({ offset = 0, count = 100, meta = [], search = null }) {
178
- try {
179
- const icons = JSON.parse(localStorage.getItem(KEY) || "{}");
180
- const results = [];
181
- Object.keys(icons).slice(offset, count).forEach((id) => {
182
- const icon = { id };
183
- const iconMeta = icons[id].metaData || {};
184
- const isSearchedIcon = search != null && Object.keys(iconMeta).some((attr) => {
185
- const iconMetaValue = iconMeta[attr].toLowerCase();
186
- return iconMetaValue.indexOf(search.toLowerCase()) > -1;
187
- });
188
- if (search == null || isSearchedIcon) {
189
- if (meta && meta.length) {
190
- icon.metaData = {};
191
- meta.forEach((attr) => {
192
- if (iconMeta[attr] != null) {
193
- icon.metaData[attr] = iconMeta[attr];
194
- }
195
- });
215
+ listIds() {
216
+ return __async(this, arguments, function* ({ offset = 0, count = 100, meta = [], search = null } = {}) {
217
+ try {
218
+ const icons = JSON.parse(localStorage.getItem(KEY) || "{}");
219
+ const results = [];
220
+ Object.keys(icons).slice(offset, count).forEach((id) => {
221
+ const icon = { id, metaData: void 0 };
222
+ const iconMeta = icons[id].metaData || {};
223
+ const isSearchedIcon = search != null && Object.keys(iconMeta).some((attr) => {
224
+ const iconMetaValue = iconMeta[attr].toLowerCase();
225
+ return iconMetaValue.indexOf(search.toLowerCase()) > -1;
226
+ });
227
+ if (search == null || isSearchedIcon) {
228
+ if (meta && meta.length) {
229
+ icon.metaData = {};
230
+ meta.forEach((attr) => {
231
+ if (iconMeta[attr] != null) {
232
+ icon.metaData[attr] = iconMeta[attr];
233
+ }
234
+ });
235
+ }
236
+ results.push(icon);
196
237
  }
197
- results.push(icon);
198
- }
199
- });
200
- return results;
201
- } catch (error) {
202
- throw new Error((0, i18n_exports._)("The icon ids cannot be listed."));
203
- }
238
+ });
239
+ return results;
240
+ } catch (error) {
241
+ throw new Error((0, i18n_exports._)("The icon ids cannot be listed."));
242
+ }
243
+ });
204
244
  }
205
245
  /**
206
246
  * delete an icon by icon id
207
247
  */
208
248
  deleteById(id) {
209
- try {
210
- const icon = this.getById(id);
211
- const icons = JSON.parse(localStorage.getItem(KEY));
212
- delete icons[id];
213
- localStorage.setItem(KEY, JSON.stringify(icons));
214
- return icon;
215
- } catch (error) {
216
- throw new Error((0, i18n_exports._)("The icon cannot be deleted."));
217
- }
249
+ return __async(this, null, function* () {
250
+ try {
251
+ const icon = yield this.getById(id);
252
+ const icons = JSON.parse(localStorage.getItem(KEY) || "{}");
253
+ delete icons[id];
254
+ localStorage.setItem(KEY, JSON.stringify(icons));
255
+ return icon;
256
+ } catch (error) {
257
+ throw new Error((0, i18n_exports._)("The icon cannot be deleted."));
258
+ }
259
+ });
218
260
  }
219
261
  };
220
262
  var LocalIconProvider_default = LocalIconProvider;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["src/LocalIconProvider.js", "esm-externals:uuid-v4", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/visualization-context/Provider"],
4
- "sourcesContent": ["/* eslint-disable class-methods-use-this,no-useless-constructor */\nimport uuid from 'uuid-v4';\nimport { _ } from '@splunk/ui-utils/i18n';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport Provider from '@splunk/visualization-context/Provider';\n\nexport const b64EncodeUnicode = str =>\n // first we use encodeURIComponent to get percent-encoded UTF-8,\n // then we convert the percent encodings into raw bytes which\n // can be fed into btoa.\n btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) =>\n String.fromCharCode(parseInt(`0x${p1}`, 16))\n )\n );\n\nexport const KEY = '__icons__';\n\n/**\n * a local icon provider\n */\nclass LocalIconProvider extends Provider {\n constructor() {\n super();\n }\n\n /**\n * return provider type\n * @return {String} 'local'\n */\n getType() {\n return 'local';\n }\n\n /**\n * upload one new icon\n */\n async upload(dataURI, metaData) {\n // get svg from dataURI\n const response = await fetch(dataURI);\n const text = await response.text();\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(text, 'text/xml');\n const svg = xmlDoc.getElementsByTagName('svg')[0];\n\n if (!svg.getAttribute('viewBox')) {\n throw new Error(_('Please upload a valid svg with viewBox attribute.'));\n }\n\n // reset svg attributes\n svg.setAttribute('preserveAspectRatio', 'none');\n // convert back to dataURI\n const serializer = new XMLSerializer();\n const svgStr = b64EncodeUnicode(serializer.serializeToString(svg));\n const iconDataURI = `data:image/svg+xml;base64,${svgStr}`;\n\n // save to localStorage\n try {\n const icon = { dataURI: iconDataURI, metaData };\n const id = uuid();\n let icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n icons = { ...icons, [id]: icon };\n localStorage.setItem(KEY, JSON.stringify(icons));\n return id;\n } catch (error) {\n throw new Error(\n _('The icon cannot be uploaded. Please check whether your localStorage is full.')\n );\n }\n }\n\n /**\n * get one icon by icon id\n */\n getById(id) {\n const icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n if (icons[id]) {\n return icons[id];\n }\n throw new Error(_('The icon is not found.'));\n }\n\n /**\n * get all icon ids\n * @params options\n * @params options.meta a list of meta data attribute that would be returned with each id\n * @params options.search a search string to filter the returned icons\n */\n listIds({ offset = 0, count = 100, meta = [], search = null }) {\n try {\n const icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n const results = [];\n\n Object.keys(icons)\n .slice(offset, count)\n .forEach(id => {\n const icon = { id };\n const iconMeta = icons[id].metaData || {};\n // If search is a valid string, return the icon with matched meta data\n const isSearchedIcon =\n search != null &&\n Object.keys(iconMeta).some(attr => {\n const iconMetaValue = iconMeta[attr].toLowerCase();\n return iconMetaValue.indexOf(search.toLowerCase()) > -1;\n });\n\n if (search == null || isSearchedIcon) {\n if (meta && meta.length) {\n icon.metaData = {};\n meta.forEach(attr => {\n if (iconMeta[attr] != null) {\n icon.metaData[attr] = iconMeta[attr];\n }\n });\n }\n\n results.push(icon);\n }\n });\n\n return results;\n } catch (error) {\n throw new Error(_('The icon ids cannot be listed.'));\n }\n }\n\n /**\n * delete an icon by icon id\n */\n deleteById(id) {\n try {\n const icon = this.getById(id);\n const icons = JSON.parse(localStorage.getItem(KEY));\n delete icons[id];\n localStorage.setItem(KEY, JSON.stringify(icons));\n return icon;\n } catch (error) {\n throw new Error(_('The icon cannot be deleted.'));\n }\n }\n}\n\nexport default LocalIconProvider;\n", "\nimport * as defaultImport from \"uuid-v4\";\nexport * from \"uuid-v4\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/Provider\";\nexport * from \"@splunk/visualization-context/Provider\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport"]
3
+ "sources": ["src/LocalIconProvider.ts", "esm-externals:uuid-v4", "esm-externals:@splunk/ui-utils/i18n", "src/Provider.ts"],
4
+ "sourcesContent": ["/* eslint-disable class-methods-use-this,no-useless-constructor */\nimport uuid from 'uuid-v4';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Provider from './Provider';\n\nexport const b64EncodeUnicode = str =>\n // first we use encodeURIComponent to get percent-encoded UTF-8,\n // then we convert the percent encodings into raw bytes which\n // can be fed into btoa.\n btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) =>\n String.fromCharCode(parseInt(`0x${p1}`, 16))\n )\n );\n\nexport const KEY = '__icons__';\n\ninterface IconListOptions {\n offset?: number;\n count?: number;\n meta?: any[];\n search?: string | null;\n}\n\n/**\n * a local icon provider\n */\nclass LocalIconProvider extends Provider {\n constructor() {\n super();\n }\n\n /**\n * return provider type\n * @return {String} 'local'\n */\n getType() {\n return 'local';\n }\n\n /**\n * upload one new icon\n */\n async upload(dataURI, metaData) {\n // get svg from dataURI\n const response = await fetch(dataURI);\n const text = await response.text();\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(text, 'text/xml');\n const svg = xmlDoc.getElementsByTagName('svg')[0];\n\n if (!svg.getAttribute('viewBox')) {\n throw new Error(_('Please upload a valid svg with viewBox attribute.'));\n }\n\n // reset svg attributes\n svg.setAttribute('preserveAspectRatio', 'none');\n // convert back to dataURI\n const serializer = new XMLSerializer();\n const svgStr = b64EncodeUnicode(serializer.serializeToString(svg));\n const iconDataURI = `data:image/svg+xml;base64,${svgStr}`;\n\n // save to localStorage\n try {\n const icon = { dataURI: iconDataURI, metaData };\n const id = uuid();\n let icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n icons = { ...icons, [id]: icon };\n localStorage.setItem(KEY, JSON.stringify(icons));\n return id;\n } catch (error) {\n throw new Error(\n _('The icon cannot be uploaded. Please check whether your localStorage is full.')\n );\n }\n }\n\n /**\n * get one icon by icon id\n */\n async getById(id): Promise<{ dataURI: string; metaData: Record<string, any> }> {\n const icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n if (icons[id]) {\n return icons[id];\n }\n throw new Error(_('The icon is not found.'));\n }\n\n /**\n * get all icon ids\n * @params options\n * @params options.meta a list of meta data attribute that would be returned with each id\n * @params options.search a search string to filter the returned icons\n */\n async listIds({ offset = 0, count = 100, meta = [], search = null }: IconListOptions = {}): Promise<\n Array<{ id: string; metaData?: Record<string, any> }>\n > {\n try {\n const icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n const results = [];\n\n Object.keys(icons)\n .slice(offset, count)\n .forEach(id => {\n const icon: { id: string; metaData?: Record<string, any> } = { id, metaData: undefined };\n const iconMeta = icons[id].metaData || {};\n // If search is a valid string, return the icon with matched meta data\n const isSearchedIcon =\n search != null &&\n Object.keys(iconMeta).some(attr => {\n const iconMetaValue = iconMeta[attr].toLowerCase();\n return iconMetaValue.indexOf(search.toLowerCase()) > -1;\n });\n\n if (search == null || isSearchedIcon) {\n if (meta && meta.length) {\n icon.metaData = {};\n meta.forEach(attr => {\n if (iconMeta[attr] != null) {\n icon.metaData[attr] = iconMeta[attr];\n }\n });\n }\n\n results.push(icon);\n }\n });\n\n return results;\n } catch (error) {\n throw new Error(_('The icon ids cannot be listed.'));\n }\n }\n\n /**\n * delete an icon by icon id\n */\n async deleteById(id): Promise<{ dataURI: string; metaData: Record<string, any> }> {\n try {\n const icon = await this.getById(id);\n const icons = JSON.parse(localStorage.getItem(KEY) || '{}');\n delete icons[id];\n localStorage.setItem(KEY, JSON.stringify(icons));\n return icon;\n } catch (error) {\n throw new Error(_('The icon cannot be deleted.'));\n }\n }\n}\n\nexport default LocalIconProvider;\n", "\nimport * as defaultImport from \"uuid-v4\";\nexport * from \"uuid-v4\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "/* eslint-disable */\n\nclass Provider {\n constructor() {}\n\n /**\n * return provider type\n */\n getType(): string {\n throw new Error('getType() not implemented');\n }\n\n /**\n * return a list of images\n */\n async listIds({ offset, count }): Promise<any> {\n throw new Error('listIds() not implemented');\n }\n\n /**\n * add an image to the storage\n */\n async upload(dataURI, metaData): Promise<any> {\n throw new Error('upload() not implemented');\n }\n\n /**\n * retrieve imageID\n */\n async getById(imageID): Promise<any> {\n throw new Error('get() not implemented');\n }\n\n /**\n * delete image by imageID\n */\n async deleteById(imageID): Promise<any> {\n throw new Error('delete() not implemented');\n }\n}\n\nexport default Provider;\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport"]
7
7
  }
@@ -0,0 +1,39 @@
1
+ import Provider from './Provider';
2
+ export declare const KEY = "__images__";
3
+ interface ListIdsOptions {
4
+ offset?: number;
5
+ count?: number;
6
+ }
7
+ /**
8
+ * a pure frontend local image provider
9
+ */
10
+ declare class LocalImageProvider extends Provider {
11
+ constructor();
12
+ /**
13
+ * return provider type
14
+ */
15
+ getType(): string;
16
+ /**
17
+ * add a new image
18
+ */
19
+ upload(dataURI: any, metaData: any): Promise<string>;
20
+ /**
21
+ * get image by imageID
22
+ */
23
+ getById(imageID: any): Promise<{
24
+ dataURI: string;
25
+ metaData: Record<string, any>;
26
+ }>;
27
+ /**
28
+ * get all imageIDs
29
+ */
30
+ listIds({ offset, count }?: ListIdsOptions): Promise<string[]>;
31
+ /**
32
+ * delete an image by dataID
33
+ */
34
+ deleteById(imageID: any): Promise<{
35
+ dataURI: string;
36
+ metaData: Record<string, any>;
37
+ }>;
38
+ }
39
+ export default LocalImageProvider;
@@ -46,8 +46,28 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
46
46
  mod
47
47
  ));
48
48
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
49
+ var __async = (__this, __arguments, generator) => {
50
+ return new Promise((resolve, reject) => {
51
+ var fulfilled = (value) => {
52
+ try {
53
+ step(generator.next(value));
54
+ } catch (e) {
55
+ reject(e);
56
+ }
57
+ };
58
+ var rejected = (value) => {
59
+ try {
60
+ step(generator.throw(value));
61
+ } catch (e) {
62
+ reject(e);
63
+ }
64
+ };
65
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
66
+ step((generator = generator.apply(__this, __arguments)).next());
67
+ });
68
+ };
49
69
 
50
- // src/LocalImageProvider.js
70
+ // src/LocalImageProvider.ts
51
71
  var LocalImageProvider_exports = {};
52
72
  __export(LocalImageProvider_exports, {
53
73
  KEY: () => KEY,
@@ -73,16 +93,52 @@ var defaultImport2 = __toESM(require("@splunk/ui-utils/i18n"));
73
93
  __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
74
94
  var i18n_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
75
95
 
76
- // esm-externals:@splunk/visualization-context/Provider
77
- var Provider_exports = {};
78
- __export(Provider_exports, {
79
- default: () => Provider_default
80
- });
81
- var defaultImport3 = __toESM(require("@splunk/visualization-context/Provider"));
82
- __reExport(Provider_exports, require("@splunk/visualization-context/Provider"));
83
- var Provider_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
96
+ // src/Provider.ts
97
+ var Provider = class {
98
+ constructor() {
99
+ }
100
+ /**
101
+ * return provider type
102
+ */
103
+ getType() {
104
+ throw new Error("getType() not implemented");
105
+ }
106
+ /**
107
+ * return a list of images
108
+ */
109
+ listIds(_0) {
110
+ return __async(this, arguments, function* ({ offset, count }) {
111
+ throw new Error("listIds() not implemented");
112
+ });
113
+ }
114
+ /**
115
+ * add an image to the storage
116
+ */
117
+ upload(dataURI, metaData) {
118
+ return __async(this, null, function* () {
119
+ throw new Error("upload() not implemented");
120
+ });
121
+ }
122
+ /**
123
+ * retrieve imageID
124
+ */
125
+ getById(imageID) {
126
+ return __async(this, null, function* () {
127
+ throw new Error("get() not implemented");
128
+ });
129
+ }
130
+ /**
131
+ * delete image by imageID
132
+ */
133
+ deleteById(imageID) {
134
+ return __async(this, null, function* () {
135
+ throw new Error("delete() not implemented");
136
+ });
137
+ }
138
+ };
139
+ var Provider_default = Provider;
84
140
 
85
- // src/LocalImageProvider.js
141
+ // src/LocalImageProvider.ts
86
142
  var KEY = "__images__";
87
143
  var LocalImageProvider = class extends Provider_default {
88
144
  constructor() {
@@ -98,55 +154,63 @@ var LocalImageProvider = class extends Provider_default {
98
154
  * add a new image
99
155
  */
100
156
  upload(dataURI, metaData) {
101
- try {
102
- const id = uuid_v4_default();
103
- const imageObject = { dataURI, metaData };
104
- let images = JSON.parse(localStorage.getItem(KEY) || "{}");
105
- images = __spreadProps(__spreadValues({}, images), { [id]: imageObject });
106
- localStorage.setItem(KEY, JSON.stringify(images));
107
- return id;
108
- } catch (error) {
109
- throw new Error(
110
- (0, i18n_exports._)("The image cannot be uploaded. Please check whether your localStorage is full.")
111
- );
112
- }
157
+ return __async(this, null, function* () {
158
+ try {
159
+ const id = uuid_v4_default();
160
+ const imageObject = { dataURI, metaData };
161
+ let images = JSON.parse(localStorage.getItem(KEY) || "{}");
162
+ images = __spreadProps(__spreadValues({}, images), { [id]: imageObject });
163
+ localStorage.setItem(KEY, JSON.stringify(images));
164
+ return id;
165
+ } catch (error) {
166
+ throw new Error(
167
+ (0, i18n_exports._)("The image cannot be uploaded. Please check whether your localStorage is full.")
168
+ );
169
+ }
170
+ });
113
171
  }
114
172
  /**
115
173
  * get image by imageID
116
174
  */
117
175
  getById(imageID) {
118
- const images = JSON.parse(localStorage.getItem(KEY) || "{}");
119
- const imageObject = images[imageID];
120
- if (imageObject) {
121
- return imageObject;
122
- }
123
- throw new Error((0, i18n_exports._)("The image is not found."));
176
+ return __async(this, null, function* () {
177
+ const images = JSON.parse(localStorage.getItem(KEY) || "{}");
178
+ const imageObject = images[imageID];
179
+ if (imageObject) {
180
+ return imageObject;
181
+ }
182
+ throw new Error((0, i18n_exports._)("The image is not found."));
183
+ });
124
184
  }
125
185
  /**
126
186
  * get all imageIDs
127
187
  */
128
- listIds({ offset, count }) {
129
- try {
130
- const images = JSON.parse(localStorage.getItem(KEY) || "{}");
131
- const imageIDS = Object.keys(images);
132
- return imageIDS.slice(offset, count);
133
- } catch (error) {
134
- throw new Error((0, i18n_exports._)("The image ids cannot be listed."));
135
- }
188
+ listIds() {
189
+ return __async(this, arguments, function* ({ offset = 0, count = 100 } = {}) {
190
+ try {
191
+ const images = JSON.parse(localStorage.getItem(KEY) || "{}");
192
+ const imageIDS = Object.keys(images);
193
+ return imageIDS.slice(offset, count);
194
+ } catch (error) {
195
+ throw new Error((0, i18n_exports._)("The image ids cannot be listed."));
196
+ }
197
+ });
136
198
  }
137
199
  /**
138
200
  * delete an image by dataID
139
201
  */
140
202
  deleteById(imageID) {
141
- try {
142
- const imageObject = this.getById(imageID);
143
- const images = JSON.parse(localStorage.getItem(KEY));
144
- delete images[imageID];
145
- localStorage.setItem(KEY, JSON.stringify(images));
146
- return imageObject;
147
- } catch (error) {
148
- throw new Error((0, i18n_exports._)("The image cannot be deleted."));
149
- }
203
+ return __async(this, null, function* () {
204
+ try {
205
+ const imageObject = yield this.getById(imageID);
206
+ const images = JSON.parse(localStorage.getItem(KEY) || "{}");
207
+ delete images[imageID];
208
+ localStorage.setItem(KEY, JSON.stringify(images));
209
+ return imageObject;
210
+ } catch (error) {
211
+ throw new Error((0, i18n_exports._)("The image cannot be deleted."));
212
+ }
213
+ });
150
214
  }
151
215
  };
152
216
  var LocalImageProvider_default = LocalImageProvider;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["src/LocalImageProvider.js", "esm-externals:uuid-v4", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/visualization-context/Provider"],
4
- "sourcesContent": ["/* eslint-disable class-methods-use-this,no-useless-constructor */\nimport uuid from 'uuid-v4';\nimport { _ } from '@splunk/ui-utils/i18n';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport Provider from '@splunk/visualization-context/Provider';\n\nexport const KEY = '__images__';\n\n/**\n * a pure frontend local image provider\n */\nclass LocalImageProvider extends Provider {\n constructor() {\n super();\n }\n\n /**\n * return provider type\n */\n getType() {\n return 'local';\n }\n\n /**\n * add a new image\n */\n upload(dataURI, metaData) {\n try {\n const id = uuid();\n const imageObject = { dataURI, metaData };\n let images = JSON.parse(localStorage.getItem(KEY) || '{}');\n images = { ...images, [id]: imageObject };\n localStorage.setItem(KEY, JSON.stringify(images));\n return id;\n } catch (error) {\n throw new Error(\n _('The image cannot be uploaded. Please check whether your localStorage is full.')\n );\n }\n }\n\n /**\n * get image by imageID\n */\n getById(imageID) {\n const images = JSON.parse(localStorage.getItem(KEY) || '{}');\n const imageObject = images[imageID];\n if (imageObject) {\n return imageObject;\n }\n throw new Error(_('The image is not found.'));\n }\n\n /**\n * get all imageIDs\n */\n listIds({ offset, count }) {\n try {\n const images = JSON.parse(localStorage.getItem(KEY) || '{}');\n const imageIDS = Object.keys(images);\n return imageIDS.slice(offset, count);\n } catch (error) {\n throw new Error(_('The image ids cannot be listed.'));\n }\n }\n\n /**\n * delete an image by dataID\n */\n deleteById(imageID) {\n try {\n const imageObject = this.getById(imageID);\n const images = JSON.parse(localStorage.getItem(KEY));\n delete images[imageID];\n localStorage.setItem(KEY, JSON.stringify(images));\n return imageObject;\n } catch (error) {\n throw new Error(_('The image cannot be deleted.'));\n }\n }\n}\n\nexport default LocalImageProvider;\n", "\nimport * as defaultImport from \"uuid-v4\";\nexport * from \"uuid-v4\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-context/Provider\";\nexport * from \"@splunk/visualization-context/Provider\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA,oBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAa,gBAA8B,wBAAU;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAA,iBAA+B;AAC/B,yBAAc;AACd,IAAO,eAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,6BAAc;AACd,IAAO,mBAAS,aAAaA,iBAA8B,yBAAUA;;;AHG9D,IAAM,MAAM;AAKnB,IAAM,qBAAN,cAAiC,iBAAS;AAAA,EACtC,cAAc;AACV,UAAM;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACN,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,UAAU;AACtB,QAAI;AACA,YAAM,KAAK,gBAAK;AAChB,YAAM,cAAc,EAAE,SAAS,SAAS;AACxC,UAAI,SAAS,KAAK,MAAM,aAAa,QAAQ,GAAG,KAAK,IAAI;AACzD,eAAS,iCAAK,SAAL,EAAa,CAAC,EAAE,GAAG,YAAY;AACxC,mBAAa,QAAQ,KAAK,KAAK,UAAU,MAAM,CAAC;AAChD,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,YAAM,IAAI;AAAA,YACN,gBAAE,+EAA+E;AAAA,MACrF;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,SAAS;AACb,UAAM,SAAS,KAAK,MAAM,aAAa,QAAQ,GAAG,KAAK,IAAI;AAC3D,UAAM,cAAc,OAAO,OAAO;AAClC,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AACA,UAAM,IAAI,UAAM,gBAAE,yBAAyB,CAAC;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,EAAE,QAAQ,MAAM,GAAG;AACvB,QAAI;AACA,YAAM,SAAS,KAAK,MAAM,aAAa,QAAQ,GAAG,KAAK,IAAI;AAC3D,YAAM,WAAW,OAAO,KAAK,MAAM;AACnC,aAAO,SAAS,MAAM,QAAQ,KAAK;AAAA,IACvC,SAAS,OAAO;AACZ,YAAM,IAAI,UAAM,gBAAE,iCAAiC,CAAC;AAAA,IACxD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAAS;AAChB,QAAI;AACA,YAAM,cAAc,KAAK,QAAQ,OAAO;AACxC,YAAM,SAAS,KAAK,MAAM,aAAa,QAAQ,GAAG,CAAC;AACnD,aAAO,OAAO,OAAO;AACrB,mBAAa,QAAQ,KAAK,KAAK,UAAU,MAAM,CAAC;AAChD,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,YAAM,IAAI,UAAM,gBAAE,8BAA8B,CAAC;AAAA,IACrD;AAAA,EACJ;AACJ;AAEA,IAAO,6BAAQ;",
6
- "names": ["defaultImport", "defaultImport"]
3
+ "sources": ["src/LocalImageProvider.ts", "esm-externals:uuid-v4", "esm-externals:@splunk/ui-utils/i18n", "src/Provider.ts"],
4
+ "sourcesContent": ["/* eslint-disable class-methods-use-this,no-useless-constructor */\nimport uuid from 'uuid-v4';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Provider from './Provider';\n\nexport const KEY = '__images__';\n\ninterface ListIdsOptions {\n offset?: number;\n count?: number;\n}\n\n/**\n * a pure frontend local image provider\n */\nclass LocalImageProvider extends Provider {\n constructor() {\n super();\n }\n\n /**\n * return provider type\n */\n getType() {\n return 'local';\n }\n\n /**\n * add a new image\n */\n async upload(dataURI, metaData): Promise<string> {\n try {\n const id = uuid();\n const imageObject = { dataURI, metaData };\n let images = JSON.parse(localStorage.getItem(KEY) || '{}');\n images = { ...images, [id]: imageObject };\n localStorage.setItem(KEY, JSON.stringify(images));\n return id;\n } catch (error) {\n throw new Error(\n _('The image cannot be uploaded. Please check whether your localStorage is full.')\n );\n }\n }\n\n /**\n * get image by imageID\n */\n async getById(imageID): Promise<{ dataURI: string; metaData: Record<string, any> }> {\n const images = JSON.parse(localStorage.getItem(KEY) || '{}');\n const imageObject = images[imageID];\n if (imageObject) {\n return imageObject;\n }\n throw new Error(_('The image is not found.'));\n }\n\n /**\n * get all imageIDs\n */\n async listIds({ offset = 0, count = 100 }: ListIdsOptions = {}): Promise<string[]> {\n try {\n const images = JSON.parse(localStorage.getItem(KEY) || '{}');\n const imageIDS = Object.keys(images);\n return imageIDS.slice(offset, count);\n } catch (error) {\n throw new Error(_('The image ids cannot be listed.'));\n }\n }\n\n /**\n * delete an image by dataID\n */\n async deleteById(imageID): Promise<{ dataURI: string; metaData: Record<string, any> }> {\n try {\n const imageObject = await this.getById(imageID);\n const images = JSON.parse(localStorage.getItem(KEY) || '{}');\n delete images[imageID];\n localStorage.setItem(KEY, JSON.stringify(images));\n return imageObject;\n } catch (error) {\n throw new Error(_('The image cannot be deleted.'));\n }\n }\n}\n\nexport default LocalImageProvider;\n", "\nimport * as defaultImport from \"uuid-v4\";\nexport * from \"uuid-v4\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "/* eslint-disable */\n\nclass Provider {\n constructor() {}\n\n /**\n * return provider type\n */\n getType(): string {\n throw new Error('getType() not implemented');\n }\n\n /**\n * return a list of images\n */\n async listIds({ offset, count }): Promise<any> {\n throw new Error('listIds() not implemented');\n }\n\n /**\n * add an image to the storage\n */\n async upload(dataURI, metaData): Promise<any> {\n throw new Error('upload() not implemented');\n }\n\n /**\n * retrieve imageID\n */\n async getById(imageID): Promise<any> {\n throw new Error('get() not implemented');\n }\n\n /**\n * delete image by imageID\n */\n async deleteById(imageID): Promise<any> {\n throw new Error('delete() not implemented');\n }\n}\n\nexport default Provider;\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport"]
7
7
  }
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+ import type { StyleSpecification, LayerSpecification } from 'maplibre-gl';
3
+ /**
4
+ * We are omitting the `sources`, `layers`, `verison` properties, and re-adding them with some constraint
5
+ * 1. Changing `sources` and `layers` from optional to required
6
+ * 2. Limiting `sources` type to `VectorSource` and `RasterSource` for MVP
7
+ * 3. `version` property is specific to MapLibre and is always an 8. We will add this internally in the
8
+ * Viz map component and not let the consumers bother
9
+ */
10
+ export interface BaseTileConfig extends Omit<StyleSpecification, 'sources' | 'layers' | 'version'> {
11
+ name: string;
12
+ key?: string;
13
+ theme?: 'light' | 'dark';
14
+ sources?: {
15
+ [sourceName: string]: Record<string, unknown>;
16
+ };
17
+ layers?: LayerSpecification[];
18
+ version?: number;
19
+ }
20
+ export interface MapContextInterface {
21
+ defaultTileConfig?: BaseTileConfig[];
22
+ customTileConfig?: BaseTileConfig[];
23
+ mapboxAccessToken?: string;
24
+ }
25
+ declare const MapContext: React.Context<MapContextInterface>;
26
+ export declare const MapContextProvider: React.Provider<MapContextInterface>;
27
+ export declare const MapContextConsumer: React.Consumer<MapContextInterface>;
28
+ export default MapContext;
29
+ export declare const testTileConfig: BaseTileConfig[];
package/MapContext.js CHANGED
@@ -53,7 +53,7 @@ var react_default = "default" in defaultImport ? defaultImport.default : default
53
53
  var MapContext = react_exports.createContext({
54
54
  defaultTileConfig: []
55
55
  });
56
- MapContext.displayName = `data-splunk-visualization-version-MapContext-${"28.2.3 - f147a8bda"}`;
56
+ MapContext.displayName = `data-splunk-visualization-version-MapContext-${"28.4.0 - 002bd482f"}`;
57
57
  var MapContextProvider = MapContext.Provider;
58
58
  var MapContextConsumer = MapContext.Consumer;
59
59
  var MapContext_default = MapContext;
package/MapContext.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["src/MapContext.tsx", "esm-externals:react"],
4
- "sourcesContent": ["import * as React from 'react';\nimport type { StyleSpecification, LayerSpecification } from 'maplibre-gl';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\n/**\n * We are omitting the `sources`, `layers`, `verison` properties, and re-adding them with some constraint\n * 1. Changing `sources` and `layers` from optional to required\n * 2. Limiting `sources` type to `VectorSource` and `RasterSource` for MVP\n * 3. `version` property is specific to MapLibre and is always an 8. We will add this internally in the\n * Viz map component and not let the consumers bother\n */\nexport interface BaseTileConfig extends Omit<StyleSpecification, 'sources' | 'layers' | 'version'> {\n name: string; // used to populate the tile server dropdown in editor, eg: 'Mapbox Streets V8 tileset'\n key: string; // sets the Viz map option - 'baseLayerTileServer'\n theme?: 'light' | 'dark'; // if no theme is specified, the tileserver is available for all themes\n sources: {\n [sourceName: string]: Record<string, unknown>;\n };\n layers: LayerSpecification[];\n version?: number;\n}\n\nexport interface MapContextInterface {\n defaultTileConfig: BaseTileConfig[];\n customTileConfig?: BaseTileConfig[];\n mapboxAccessToken?: string;\n}\n\nconst MapContext = React.createContext<MapContextInterface>({\n defaultTileConfig: [],\n});\nMapContext.displayName = `data-splunk-visualization-version-MapContext-${__VISION_VERSION__}`;\n\nexport const MapContextProvider = MapContext.Provider;\nexport const MapContextConsumer = MapContext.Consumer;\nexport default MapContext;\n\nexport const testTileConfig: BaseTileConfig[] = [\n {\n name: 'Carto Base Map - Light',\n key: 'carto.base.map.light',\n theme: 'light',\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: ['https://a.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png'],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 12,\n paint: {\n 'raster-fade-duration': 0,\n },\n },\n ],\n },\n {\n name: 'Cart Base Map - dark',\n key: 'carto.base.map.dark',\n theme: 'dark',\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: ['https://a.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png'],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 12,\n paint: {\n 'raster-fade-duration': 0,\n },\n },\n ],\n },\n];\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport type { StyleSpecification, LayerSpecification } from 'maplibre-gl';\n\n// Global provided via webpack\n// eslint-disable-next-line no-underscore-dangle\ndeclare const __VISION_VERSION__: string;\n\n/**\n * We are omitting the `sources`, `layers`, `verison` properties, and re-adding them with some constraint\n * 1. Changing `sources` and `layers` from optional to required\n * 2. Limiting `sources` type to `VectorSource` and `RasterSource` for MVP\n * 3. `version` property is specific to MapLibre and is always an 8. We will add this internally in the\n * Viz map component and not let the consumers bother\n */\nexport interface BaseTileConfig extends Omit<StyleSpecification, 'sources' | 'layers' | 'version'> {\n name: string; // used to populate the tile server dropdown in editor, eg: 'Mapbox Streets V8 tileset'\n key?: string; // sets the Viz map option - 'baseLayerTileServer'\n theme?: 'light' | 'dark'; // if no theme is specified, the tileserver is available for all themes\n sources?: {\n [sourceName: string]: Record<string, unknown>;\n };\n layers?: LayerSpecification[];\n version?: number;\n}\n\nexport interface MapContextInterface {\n defaultTileConfig?: BaseTileConfig[];\n customTileConfig?: BaseTileConfig[];\n mapboxAccessToken?: string;\n}\n\nconst MapContext = React.createContext<MapContextInterface>({\n defaultTileConfig: [],\n});\nMapContext.displayName = `data-splunk-visualization-version-MapContext-${__VISION_VERSION__}`;\n\nexport const MapContextProvider = MapContext.Provider;\nexport const MapContextConsumer = MapContext.Consumer;\nexport default MapContext;\n\nexport const testTileConfig: BaseTileConfig[] = [\n {\n name: 'Carto Base Map - Light',\n key: 'carto.base.map.light',\n theme: 'light',\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: ['https://a.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png'],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 12,\n paint: {\n 'raster-fade-duration': 0,\n },\n },\n ],\n },\n {\n name: 'Cart Base Map - dark',\n key: 'carto.base.map.dark',\n theme: 'dark',\n sources: {\n 'base-tiles': {\n type: 'raster',\n tiles: ['https://a.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png'],\n tileSize: 256,\n },\n },\n layers: [\n {\n id: 'base-layer',\n type: 'raster',\n source: 'base-tiles',\n minzoom: 0,\n maxzoom: 12,\n paint: {\n 'raster-fade-duration': 0,\n },\n },\n ],\n },\n];\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA,oBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAa,gBAA8B,wBAAU;;;AD4BrE,IAAM,aAAmB,4BAAmC;AAAA,EACxD,mBAAmB,CAAC;AACxB,CAAC;AACD,WAAW,cAAc,gDAAgD,oBAAkB;AAEpF,IAAM,qBAAqB,WAAW;AACtC,IAAM,qBAAqB,WAAW;AAC7C,IAAO,qBAAQ;AAER,IAAM,iBAAmC;AAAA,EAC5C;AAAA,IACI,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACL,cAAc;AAAA,QACV,MAAM;AAAA,QACN,OAAO,CAAC,kFAAkF;AAAA,QAC1F,UAAU;AAAA,MACd;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,UACH,wBAAwB;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA;AAAA,IACI,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACL,cAAc;AAAA,QACV,MAAM;AAAA,QACN,OAAO,CAAC,sEAAsE;AAAA,QAC9E,UAAU;AAAA,MACd;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,UACH,wBAAwB;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ interface MessageContextInterface {
3
+ cspMessageLink?: string;
4
+ }
5
+ declare const MessageContext: React.Context<MessageContextInterface>;
6
+ export declare const MessageContextProvider: React.Provider<MessageContextInterface>;
7
+ export declare const MessageContextConsumer: React.Consumer<MessageContextInterface>;
8
+ export default MessageContext;