kepler.gl 3.2.3 → 3.2.5

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 (63) hide show
  1. package/dist/src/duckdb/src/components/index.d.ts +8 -1
  2. package/dist/src/duckdb/src/index.d.ts +3 -5
  3. package/dist/src/duckdb/src/table/index.d.ts +1 -0
  4. package/dist/src/reducers/src/ui-state-updaters.d.ts +1 -1
  5. package/dist/src/utils/src/application-config.d.ts +2 -0
  6. package/package.json +2 -2
  7. package/src/actions/package.json +8 -8
  8. package/src/ai-assistant/dist/components/ai-assistant-component.js +42 -7
  9. package/src/ai-assistant/package.json +7 -7
  10. package/src/ai-assistant/src/components/ai-assistant-component.tsx +17 -4
  11. package/src/cloud-providers/package.json +2 -2
  12. package/src/common-utils/package.json +3 -3
  13. package/src/components/dist/map-container.js +72 -64
  14. package/src/components/package.json +15 -15
  15. package/src/components/src/map-container.tsx +8 -1
  16. package/src/constants/dist/default-settings.js +1 -1
  17. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/a2/7b6ce2c6c94377ff73d3eb84e41a05931160d1d250804fb519215165f383a46120fd1f4662bd2ae95d7c509ce63f4b8e866b515f9f8750cb702709d4bcdc +1 -0
  18. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/d0/bd16d41c708342b14f4c0aaa31136faccd8d411ae1d3962252433ac31d00ac57f49ecd4f6b4d682ccdab28858444adefb98aa54c83743d739b90698c03cf +1 -0
  19. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/10/75/d229810e58d38a1b61f7938bf1587615fbe97f4afa69493e595badd1f471 +2 -0
  20. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/5b/96/163a3fcac4673f000a64cbecbb40621d276cb6f295539b4a6e139bbfc4f5 +2 -0
  21. package/src/constants/package.json +2 -2
  22. package/src/constants/umd/keplergl.min.js +1 -1
  23. package/src/deckgl-arrow-layers/package.json +3 -3
  24. package/src/deckgl-layers/package.json +4 -4
  25. package/src/duckdb/dist/components/index.d.ts +8 -1
  26. package/src/duckdb/dist/components/index.js +54 -11
  27. package/src/duckdb/dist/index.d.ts +3 -5
  28. package/src/duckdb/dist/index.js +28 -40
  29. package/src/duckdb/dist/table/index.d.ts +1 -0
  30. package/src/duckdb/dist/table/index.js +17 -0
  31. package/src/duckdb/package.json +25 -8
  32. package/src/duckdb/src/components/index.tsx +9 -1
  33. package/src/duckdb/src/index.ts +3 -9
  34. package/src/duckdb/src/table/index.ts +5 -0
  35. package/src/effects/package.json +5 -5
  36. package/src/layers/dist/icon-layer/icon-layer.d.ts +3 -1
  37. package/src/layers/dist/icon-layer/icon-layer.js +28 -4
  38. package/src/layers/package.json +9 -9
  39. package/src/layers/src/icon-layer/icon-layer.ts +24 -2
  40. package/src/localization/package.json +1 -1
  41. package/src/processors/package.json +7 -7
  42. package/src/reducers/dist/ui-state-updaters.d.ts +1 -1
  43. package/src/reducers/dist/ui-state-updaters.js +4 -4
  44. package/src/reducers/package.json +16 -16
  45. package/src/reducers/src/ui-state-updaters.ts +9 -4
  46. package/src/schemas/package.json +7 -7
  47. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/92/9b4a08e852e2f12e4702d7c41fe5299bcd72ee10d25072f6aa4bb473d4dbe8d2ea1992b32bf82ea9ad73efdacf9f4e228a18523c93042cc58d07a56115bf +1 -0
  48. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/13/40/aa1c82ba19f8a57b20540cedfbc7086324551b58a599674e858ef4b8c12fad29b2e5d0a17f38ff2fb0adb913909e58b1aada0a79f49e8dc1b3ca673db76f +1 -0
  49. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/58/24/f9a517552c80acd6fe8c93f7ed4a3e8b24272284e6f2257ad18e152a8dbf +2 -0
  50. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/95/15/0b35e451aad3f2352a14cfa64386984de34da0a0b5ad2fc736ecb44d22db +2 -0
  51. package/src/styles/package.json +2 -2
  52. package/src/styles/umd/keplergl.min.js +1 -1
  53. package/src/table/package.json +5 -5
  54. package/src/tasks/package.json +2 -2
  55. package/src/types/layers.d.ts +2 -0
  56. package/src/types/package.json +1 -1
  57. package/src/utils/dist/application-config.d.ts +2 -0
  58. package/src/utils/dist/application-config.js +13 -2
  59. package/src/utils/dist/dom-to-image.js +19 -7
  60. package/src/utils/package.json +4 -5
  61. package/src/utils/src/application-config.ts +17 -1
  62. package/src/utils/src/dom-to-image.ts +18 -6
  63. package/umd/keplergl.min.js +1146 -1146
@@ -1 +1,8 @@
1
- export * from './sql-panel';
1
+ export { SqlPanel } from './sql-panel';
2
+ export { SchemaPanel, SchemaPanelDropMessage } from './schema-panel';
3
+ export { PreviewDataPanel } from './preview-data-panel';
4
+ export { Tree, DatasetNode, ColumnNode } from './tree';
5
+ export { default as MonacoEditor } from './monaco-editor';
6
+ export type { SchemaSuggestion } from './schema-panel';
7
+ export type { PreviewDataPanelProps, QueryResult, DataTableStyle } from './preview-data-panel';
8
+ export type { TreeNodeData, TreeNodeProps, TreeProps } from './tree';
@@ -1,7 +1,5 @@
1
1
  export { DuckDBWasmAdapter } from './adapters/duckdb-wasm-adapter';
2
- export { SqlPanel } from './components';
3
- import { keplerGlDuckDBPlugin } from './plugin';
4
- export { restoreGeoarrowMetadata, KeplerGlDuckDbTable } from './table/duckdb-table';
2
+ export { keplerGlDuckDBPlugin, keplerGlDuckDBPlugin as default } from './plugin';
3
+ export * from './table/duckdb-table';
5
4
  export * from './table/duckdb-table-utils';
6
- export default keplerGlDuckDBPlugin;
7
- export { consolidateFieldTypes, extendFieldsWithDuckDBColumnType, fieldTypeToColumnType } from './processors/data-processor';
5
+ export * from './processors/data-processor';
@@ -0,0 +1 @@
1
+ export * from './duckdb-table-utils';
@@ -28,7 +28,7 @@ export declare const DEFAULT_MAP_CONTROLS: MapControls;
28
28
  * @property imageDataUri Default: `''`,
29
29
  * @property exporting Default: `false`
30
30
  * @property error Default: `false`
31
- * @property escapeXhtmlForWebpack Default: `true`
31
+ * @property escapeXhtmlForWebpack Default: from application config (auto-detected: `true` for webpack)
32
32
  * @public
33
33
  */
34
34
  export declare const DEFAULT_EXPORT_IMAGE: ExportImage;
@@ -49,6 +49,8 @@ export declare type KeplerApplicationConfig = {
49
49
  /** Whether to show the server input field in the raster tile layer setup form */
50
50
  rasterServerShowServerInput?: boolean;
51
51
  enableWMSLayer?: boolean;
52
+ /** Whether to apply fix for uglify error in dom-to-image (should be true for webpack builds, false for Vite) */
53
+ escapeXhtmlForWebpack?: boolean;
52
54
  };
53
55
  export declare const getApplicationConfig: () => Required<KeplerApplicationConfig>;
54
56
  export declare function initApplicationConfig(appConfig?: KeplerApplicationConfig): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kepler.gl",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.3",
4
+ "version": "3.2.5",
5
5
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -103,7 +103,7 @@
103
103
  "@deck.gl/mapbox": "^8.9.27",
104
104
  "@hubble.gl/core": "1.4.0",
105
105
  "@hubble.gl/react": "1.4.0",
106
- "@kepler.gl/components": "3.2.3",
106
+ "@kepler.gl/components": "3.2.5",
107
107
  "@loaders.gl/polyfills": "^4.3.2",
108
108
  "@types/mapbox__geo-viewport": "^0.4.1",
109
109
  "html-webpack-plugin": "^4.3.0",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/actions",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.3",
4
+ "version": "3.2.5",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,13 +31,13 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/cloud-providers": "3.2.3",
35
- "@kepler.gl/constants": "3.2.3",
36
- "@kepler.gl/layers": "3.2.3",
37
- "@kepler.gl/processors": "3.2.3",
38
- "@kepler.gl/table": "3.2.3",
39
- "@kepler.gl/types": "3.2.3",
40
- "@kepler.gl/utils": "3.2.3",
34
+ "@kepler.gl/cloud-providers": "3.2.5",
35
+ "@kepler.gl/constants": "3.2.5",
36
+ "@kepler.gl/layers": "3.2.5",
37
+ "@kepler.gl/processors": "3.2.5",
38
+ "@kepler.gl/table": "3.2.5",
39
+ "@kepler.gl/types": "3.2.5",
40
+ "@kepler.gl/utils": "3.2.5",
41
41
  "@reduxjs/toolkit": "^1.7.2",
42
42
  "@types/lodash": "4.17.5",
43
43
  "@types/react-redux": "^7.1.23",
@@ -69,6 +69,10 @@ function AiAssistantComponent() {
69
69
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
70
70
  ideas = _useState4[0],
71
71
  setIdeas = _useState4[1];
72
+ var _useState5 = (0, _react.useState)(0),
73
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
74
+ restartKey = _useState6[0],
75
+ setRestartKey = _useState6[1];
72
76
 
73
77
  // get dataset meta data and re-initialize assistant when datasets or layers change
74
78
  (0, _react.useEffect)(function () {
@@ -84,7 +88,10 @@ function AiAssistantComponent() {
84
88
  var _useAssistant = (0, _core.useAssistant)(_objectSpread(_objectSpread({}, assistantProps), {}, {
85
89
  instructions: instructions
86
90
  })),
87
- temporaryPrompt = _useAssistant.temporaryPrompt;
91
+ temporaryPrompt = _useAssistant.temporaryPrompt,
92
+ libraryRestartChat = _useAssistant.restartChat;
93
+ var restartChatRef = (0, _react.useRef)(libraryRestartChat);
94
+ restartChatRef.current = libraryRestartChat;
88
95
  var generateIdeas = /*#__PURE__*/function () {
89
96
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
90
97
  var response, match, json;
@@ -128,10 +135,36 @@ function AiAssistantComponent() {
128
135
  }
129
136
  // eslint-disable-next-line react-hooks/exhaustive-deps
130
137
  }, [datasetMetaData]);
131
- var onRestartAssistant = function onRestartAssistant() {
132
- // clean up aiAssistant state
133
- dispatch((0, _actions.updateAiAssistantMessages)([]));
134
- };
138
+ var onRestartAssistant = /*#__PURE__*/function () {
139
+ var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
140
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
141
+ while (1) switch (_context2.prev = _context2.next) {
142
+ case 0:
143
+ dispatch((0, _actions.updateAiAssistantMessages)([]));
144
+ _context2.prev = 1;
145
+ _context2.next = 4;
146
+ return restartChatRef.current();
147
+ case 4:
148
+ _context2.next = 9;
149
+ break;
150
+ case 6:
151
+ _context2.prev = 6;
152
+ _context2.t0 = _context2["catch"](1);
153
+ console.error('Error restarting chat:', _context2.t0);
154
+ case 9:
155
+ setRestartKey(function (prev) {
156
+ return prev + 1;
157
+ });
158
+ case 10:
159
+ case "end":
160
+ return _context2.stop();
161
+ }
162
+ }, _callee2, null, [[1, 6]]);
163
+ }));
164
+ return function onRestartAssistant() {
165
+ return _ref2.apply(this, arguments);
166
+ };
167
+ }();
135
168
  var onMessagesUpdated = function onMessagesUpdated(messages) {
136
169
  dispatch((0, _actions.updateAiAssistantMessages)(messages));
137
170
  };
@@ -143,7 +176,9 @@ function AiAssistantComponent() {
143
176
  };
144
177
  return /*#__PURE__*/_react["default"].createElement(StyledAiAssistantComponent, {
145
178
  className: "ai-assistant-component"
146
- }, /*#__PURE__*/_react["default"].createElement(_ui.AiAssistant, (0, _extends2["default"])({}, assistantProps, {
179
+ }, /*#__PURE__*/_react["default"].createElement(_ui.AiAssistant, (0, _extends2["default"])({
180
+ key: restartKey
181
+ }, assistantProps, {
147
182
  instructions: instructions,
148
183
  theme: _styles.theme.textColor === _styles.textColorLT ? 'light' : 'dark',
149
184
  welcomeMessage: _constants.WELCOME_MESSAGE,
@@ -164,4 +199,4 @@ function AiAssistantComponent() {
164
199
  onRefreshIdeas: generateIdeas
165
200
  })));
166
201
  }
167
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfY29yZSIsIl91aSIsIl9hY3Rpb25zIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl90b29scyIsIl90ZW1wbGF0ZU9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50Iiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJBaUFzc2lzdGFudENvbXBvbmVudCIsInZpc1N0YXRlIiwidXNlU2VsZWN0b3IiLCJzdGF0ZSIsImRlbW8iLCJrZXBsZXJHbCIsIm1hcCIsImFpQXNzaXN0YW50IiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInRvb2xzIiwic2V0dXBMTE1Ub29scyIsImVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSIsImNvbmZpZyIsInByb3ZpZGVyIiwiYXNzaXN0YW50UHJvcHMiLCJuYW1lIiwiQVNTSVNUQU5UX05BTUUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9ERVNDUklQVElPTiIsInZlcnNpb24iLCJBU1NJU1RBTlRfVkVSU0lPTiIsIm1vZGVsUHJvdmlkZXIiLCJtb2RlbCIsImFwaUtleSIsImJhc2VVcmwiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJkYXRhc2V0TWV0YURhdGEiLCJzZXREYXRhc2V0TWV0YURhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlkZWFzIiwic2V0SWRlYXMiLCJ1c2VFZmZlY3QiLCJtZXRhRGF0YSIsImdldERhdGFzZXRDb250ZXh0IiwiZGF0YXNldHMiLCJsYXllcnMiLCJpbnN0cnVjdGlvbnMiLCJjb25jYXQiLCJJTlNUUlVDVElPTlMiLCJfdXNlQXNzaXN0YW50IiwidXNlQXNzaXN0YW50IiwidGVtcG9yYXJ5UHJvbXB0IiwiZ2VuZXJhdGVJZGVhcyIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwibWF0Y2giLCJqc29uIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInByb21wdCIsIlBST01QVF9JREVBUyIsInRlbXBlcmF0dXJlIiwic2VudCIsIkpTT04iLCJwYXJzZSIsInQwIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIm9uUmVzdGFydEFzc2lzdGFudCIsInVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXMiLCJvbk1lc3NhZ2VzVXBkYXRlZCIsIm1lc3NhZ2VzIiwib25TY3JlZW5zaG90Q2xpY2siLCJzZXRTdGFydFNjcmVlbkNhcHR1cmUiLCJvblJlbW92ZVNjcmVlbnNob3QiLCJzZXRTY3JlZW5DYXB0dXJlZCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJBaUFzc2lzdGFudCIsIl9leHRlbmRzMiIsInRoZW1lIiwidGV4dENvbG9yIiwidGV4dENvbG9yTFQiLCJ3ZWxjb21lTWVzc2FnZSIsIldFTENPTUVfTUVTU0FHRSIsInRvcFAiLCJpbml0aWFsTWVzc2FnZXMiLCJlbmFibGVWb2ljZSIsImVuYWJsZVNjcmVlbkNhcHR1cmUiLCJzY3JlZW5DYXB0dXJlZEJhc2U2NCIsInNjcmVlbnNob3RUb0FzayIsInNjcmVlbkNhcHR1cmVkIiwib25SZXN0YXJ0Q2hhdCIsImZvbnRTaXplIiwiYm90TWVzc2FnZUNsYXNzTmFtZSIsImdpdGh1Yklzc3VlTGluayIsIm9uUmVmcmVzaElkZWFzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYWktYXNzaXN0YW50LWNvbXBvbmVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3J9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHt0ZXh0Q29sb3JMVCwgdGhlbWV9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TWVzc2FnZU1vZGVsLCB1c2VBc3Npc3RhbnR9IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuaW1wb3J0IHtBaUFzc2lzdGFudH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvdWknO1xuaW1wb3J0ICdAb3BlbmFzc2lzdGFudC9lY2hhcnRzL2Rpc3QvaW5kZXguY3NzJztcbmltcG9ydCAnQG9wZW5hc3Npc3RhbnQvdWkvZGlzdC9pbmRleC5jc3MnO1xuaW1wb3J0IHtzZXRTY3JlZW5DYXB0dXJlZCwgc2V0U3RhcnRTY3JlZW5DYXB0dXJlLCB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFTU0lTVEFOVF9ERVNDUklQVElPTixcbiAgQVNTSVNUQU5UX05BTUUsXG4gIEFTU0lTVEFOVF9WRVJTSU9OLFxuICBJTlNUUlVDVElPTlMsXG4gIFBST01QVF9JREVBUyxcbiAgV0VMQ09NRV9NRVNTQUdFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldERhdGFzZXRDb250ZXh0fSBmcm9tICcuLi90b29scy91dGlscyc7XG5pbXBvcnQge3NldHVwTExNVG9vbHN9IGZyb20gJy4uL3Rvb2xzL3Rvb2xzJztcbmltcG9ydCB7U3RhdGV9IGZyb20gJy4vYWktYXNzaXN0YW50LW1hbmFnZXInO1xuXG5jb25zdCBTdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudCA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcblxuICAqIHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBBaUFzc2lzdGFudENvbXBvbmVudCgpIHtcbiAgY29uc3QgdmlzU3RhdGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5kZW1vLmtlcGxlckdsLm1hcC52aXNTdGF0ZSk7XG4gIGNvbnN0IGFpQXNzaXN0YW50ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuZGVtby5haUFzc2lzdGFudCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICAvLyBkZWZpbmUgTExNIGZ1bmN0aW9uc1xuICBjb25zdCB0b29scyA9IHNldHVwTExNVG9vbHMoe3Zpc1N0YXRlLCBhaUFzc2lzdGFudCwgZGlzcGF0Y2h9KTtcblxuICAvLyBlbmFibGUgdm9pY2UgYW5kIHNjcmVlbiBjYXB0dXJlXG4gIGNvbnN0IGVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSA9XG4gICAgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ29wZW5haScgfHwgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ2dvb2dsZScgfHwgZmFsc2U7XG5cbiAgLy8gZGVmaW5lIGFzc2lzdGFudCBwcm9wc1xuICBjb25zdCBhc3Npc3RhbnRQcm9wcyA9IHtcbiAgICBuYW1lOiBBU1NJU1RBTlRfTkFNRSxcbiAgICBkZXNjcmlwdGlvbjogQVNTSVNUQU5UX0RFU0NSSVBUSU9OLFxuICAgIHZlcnNpb246IEFTU0lTVEFOVF9WRVJTSU9OLFxuICAgIG1vZGVsUHJvdmlkZXI6IGFpQXNzaXN0YW50Py5jb25maWcucHJvdmlkZXIgfHwgJycsXG4gICAgbW9kZWw6IGFpQXNzaXN0YW50Py5jb25maWcubW9kZWwgfHwgJycsXG4gICAgYXBpS2V5OiBhaUFzc2lzdGFudD8uY29uZmlnLmFwaUtleSB8fCAnJyxcbiAgICBiYXNlVXJsOiBhaUFzc2lzdGFudD8uY29uZmlnLmJhc2VVcmwgfHwgJycsXG4gICAgdG9vbHNcbiAgfTtcblxuICBjb25zdCBbZGF0YXNldE1ldGFEYXRhLCBzZXREYXRhc2V0TWV0YURhdGFdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgW2lkZWFzLCBzZXRJZGVhc10gPSB1c2VTdGF0ZTx7dGl0bGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZ31bXT4oW10pO1xuXG4gIC8vIGdldCBkYXRhc2V0IG1ldGEgZGF0YSBhbmQgcmUtaW5pdGlhbGl6ZSBhc3Npc3RhbnQgd2hlbiBkYXRhc2V0cyBvciBsYXllcnMgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWV0YURhdGEgPSBnZXREYXRhc2V0Q29udGV4dCh2aXNTdGF0ZT8uZGF0YXNldHMsIHZpc1N0YXRlPy5sYXllcnMgfHwgW10pO1xuICAgIHNldERhdGFzZXRNZXRhRGF0YShtZXRhRGF0YSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbdmlzU3RhdGU/LmRhdGFzZXRzLCB2aXNTdGF0ZT8ubGF5ZXJzXSk7XG5cbiAgLy8gdXNlIGRhdGFzZXQgbWV0YSBkYXRhIGluIExMTSBpbnN0cnVjdGlvbnNcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gYCR7SU5TVFJVQ1RJT05TfVxcblxcbiR7ZGF0YXNldE1ldGFEYXRhfWA7XG5cbiAgLy8gZ2VuZXJhdGUgaWRlYXMgZnJvbSBMTE1cbiAgY29uc3Qge3RlbXBvcmFyeVByb21wdH0gPSB1c2VBc3Npc3RhbnQoey4uLmFzc2lzdGFudFByb3BzLCBpbnN0cnVjdGlvbnN9KTtcblxuICBjb25zdCBnZW5lcmF0ZUlkZWFzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRlbXBvcmFyeVByb21wdCh7XG4gICAgICAgIHByb21wdDogUFJPTVBUX0lERUFTLFxuICAgICAgICB0ZW1wZXJhdHVyZTogMS4wXG4gICAgICB9KTtcbiAgICAgIC8vIGZpbmQgW3t9LHt9Li4uXSBpbiB0aGUgdGV4dCBhbmQgcGFyc2UgaXQgYXMganNvbiwgaGFuZGxpbmcgd2hpdGVzcGFjZVxuICAgICAgY29uc3QgbWF0Y2ggPSByZXNwb25zZT8ubWF0Y2goL1xcW1xccypcXHsuKlxcfVxccypcXF0vcyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UobWF0Y2hbMF0pO1xuICAgICAgICBzZXRJZGVhcyhqc29uKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyBpZGVhcycsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBnZXQgaWRlYXMgVUkgY29tcG9uZW50XG4gICAgaWYgKGlkZWFzLmxlbmd0aCA9PT0gMCAmJiBkYXRhc2V0TWV0YURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZ2VuZXJhdGVJZGVhcygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkYXRhc2V0TWV0YURhdGFdKTtcblxuICBjb25zdCBvblJlc3RhcnRBc3Npc3RhbnQgPSAoKSA9PiB7XG4gICAgLy8gY2xlYW4gdXAgYWlBc3Npc3RhbnQgc3RhdGVcbiAgICBkaXNwYXRjaCh1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzKFtdKSk7XG4gIH07XG5cbiAgY29uc3Qgb25NZXNzYWdlc1VwZGF0ZWQgPSAobWVzc2FnZXM6IE1lc3NhZ2VNb2RlbFtdKSA9PiB7XG4gICAgZGlzcGF0Y2godXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhtZXNzYWdlcykpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2NyZWVuc2hvdENsaWNrID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFN0YXJ0U2NyZWVuQ2FwdHVyZSh0cnVlKSk7XG4gIH07XG5cbiAgY29uc3Qgb25SZW1vdmVTY3JlZW5zaG90ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNjcmVlbkNhcHR1cmVkKCcnKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQgY2xhc3NOYW1lPVwiYWktYXNzaXN0YW50LWNvbXBvbmVudFwiPlxuICAgICAgPEFpQXNzaXN0YW50XG4gICAgICAgIHsuLi5hc3Npc3RhbnRQcm9wc31cbiAgICAgICAgaW5zdHJ1Y3Rpb25zPXtpbnN0cnVjdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZS50ZXh0Q29sb3IgPT09IHRleHRDb2xvckxUID8gJ2xpZ2h0JyA6ICdkYXJrJ31cbiAgICAgICAgd2VsY29tZU1lc3NhZ2U9e1dFTENPTUVfTUVTU0FHRX1cbiAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50Py5jb25maWcudGVtcGVyYXR1cmUgfHwgMH1cbiAgICAgICAgdG9wUD17YWlBc3Npc3RhbnQ/LmNvbmZpZy50b3BQIHx8IDB9XG4gICAgICAgIGluaXRpYWxNZXNzYWdlcz17YWlBc3Npc3RhbnQ/Lm1lc3NhZ2VzfVxuICAgICAgICBvbk1lc3NhZ2VzVXBkYXRlZD17b25NZXNzYWdlc1VwZGF0ZWR9XG4gICAgICAgIGVuYWJsZVZvaWNlPXtlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmV9XG4gICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgb25TY3JlZW5zaG90Q2xpY2s9e29uU2NyZWVuc2hvdENsaWNrfVxuICAgICAgICBzY3JlZW5DYXB0dXJlZEJhc2U2ND17YWlBc3Npc3RhbnQ/LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZCB8fCAnJ31cbiAgICAgICAgb25SZW1vdmVTY3JlZW5zaG90PXtvblJlbW92ZVNjcmVlbnNob3R9XG4gICAgICAgIG9uUmVzdGFydENoYXQ9e29uUmVzdGFydEFzc2lzdGFudH1cbiAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICBib3RNZXNzYWdlQ2xhc3NOYW1lPXsnJ31cbiAgICAgICAgZ2l0aHViSXNzdWVMaW5rPXsnaHR0cHM6Ly9naXRodWIuY29tL2tlcGxlcmdsL2tlcGxlci5nbC9pc3N1ZXMnfVxuICAgICAgICBpZGVhcz17aWRlYXN9XG4gICAgICAgIG9uUmVmcmVzaElkZWFzPXtnZW5lcmF0ZUlkZWFzfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxHQUFBLEdBQUFOLE9BQUE7QUFDQUEs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
202
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfY29yZSIsIl91aSIsIl9hY3Rpb25zIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl90b29scyIsIl90ZW1wbGF0ZU9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50Iiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJBaUFzc2lzdGFudENvbXBvbmVudCIsInZpc1N0YXRlIiwidXNlU2VsZWN0b3IiLCJzdGF0ZSIsImRlbW8iLCJrZXBsZXJHbCIsIm1hcCIsImFpQXNzaXN0YW50IiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInRvb2xzIiwic2V0dXBMTE1Ub29scyIsImVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSIsImNvbmZpZyIsInByb3ZpZGVyIiwiYXNzaXN0YW50UHJvcHMiLCJuYW1lIiwiQVNTSVNUQU5UX05BTUUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9ERVNDUklQVElPTiIsInZlcnNpb24iLCJBU1NJU1RBTlRfVkVSU0lPTiIsIm1vZGVsUHJvdmlkZXIiLCJtb2RlbCIsImFwaUtleSIsImJhc2VVcmwiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJkYXRhc2V0TWV0YURhdGEiLCJzZXREYXRhc2V0TWV0YURhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlkZWFzIiwic2V0SWRlYXMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInJlc3RhcnRLZXkiLCJzZXRSZXN0YXJ0S2V5IiwidXNlRWZmZWN0IiwibWV0YURhdGEiLCJnZXREYXRhc2V0Q29udGV4dCIsImRhdGFzZXRzIiwibGF5ZXJzIiwiaW5zdHJ1Y3Rpb25zIiwiY29uY2F0IiwiSU5TVFJVQ1RJT05TIiwiX3VzZUFzc2lzdGFudCIsInVzZUFzc2lzdGFudCIsInRlbXBvcmFyeVByb21wdCIsImxpYnJhcnlSZXN0YXJ0Q2hhdCIsInJlc3RhcnRDaGF0IiwicmVzdGFydENoYXRSZWYiLCJ1c2VSZWYiLCJjdXJyZW50IiwiZ2VuZXJhdGVJZGVhcyIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwibWF0Y2giLCJqc29uIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInByb21wdCIsIlBST01QVF9JREVBUyIsInRlbXBlcmF0dXJlIiwic2VudCIsIkpTT04iLCJwYXJzZSIsInQwIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIm9uUmVzdGFydEFzc2lzdGFudCIsIl9yZWYyIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJ1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzIiwib25NZXNzYWdlc1VwZGF0ZWQiLCJtZXNzYWdlcyIsIm9uU2NyZWVuc2hvdENsaWNrIiwic2V0U3RhcnRTY3JlZW5DYXB0dXJlIiwib25SZW1vdmVTY3JlZW5zaG90Iiwic2V0U2NyZWVuQ2FwdHVyZWQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiQWlBc3Npc3RhbnQiLCJfZXh0ZW5kczIiLCJrZXkiLCJ0aGVtZSIsInRleHRDb2xvciIsInRleHRDb2xvckxUIiwid2VsY29tZU1lc3NhZ2UiLCJXRUxDT01FX01FU1NBR0UiLCJ0b3BQIiwiaW5pdGlhbE1lc3NhZ2VzIiwiZW5hYmxlVm9pY2UiLCJlbmFibGVTY3JlZW5DYXB0dXJlIiwic2NyZWVuQ2FwdHVyZWRCYXNlNjQiLCJzY3JlZW5zaG90VG9Bc2siLCJzY3JlZW5DYXB0dXJlZCIsIm9uUmVzdGFydENoYXQiLCJmb250U2l6ZSIsImJvdE1lc3NhZ2VDbGFzc05hbWUiLCJnaXRodWJJc3N1ZUxpbmsiLCJvblJlZnJlc2hJZGVhcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2FpLWFzc2lzdGFudC1jb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3J9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHt0ZXh0Q29sb3JMVCwgdGhlbWV9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TWVzc2FnZU1vZGVsLCB1c2VBc3Npc3RhbnR9IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuaW1wb3J0IHtBaUFzc2lzdGFudH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvdWknO1xuaW1wb3J0ICdAb3BlbmFzc2lzdGFudC9lY2hhcnRzL2Rpc3QvaW5kZXguY3NzJztcbmltcG9ydCAnQG9wZW5hc3Npc3RhbnQvdWkvZGlzdC9pbmRleC5jc3MnO1xuaW1wb3J0IHtzZXRTY3JlZW5DYXB0dXJlZCwgc2V0U3RhcnRTY3JlZW5DYXB0dXJlLCB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFTU0lTVEFOVF9ERVNDUklQVElPTixcbiAgQVNTSVNUQU5UX05BTUUsXG4gIEFTU0lTVEFOVF9WRVJTSU9OLFxuICBJTlNUUlVDVElPTlMsXG4gIFBST01QVF9JREVBUyxcbiAgV0VMQ09NRV9NRVNTQUdFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldERhdGFzZXRDb250ZXh0fSBmcm9tICcuLi90b29scy91dGlscyc7XG5pbXBvcnQge3NldHVwTExNVG9vbHN9IGZyb20gJy4uL3Rvb2xzL3Rvb2xzJztcbmltcG9ydCB7U3RhdGV9IGZyb20gJy4vYWktYXNzaXN0YW50LW1hbmFnZXInO1xuXG5jb25zdCBTdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudCA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcblxuICAqIHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBBaUFzc2lzdGFudENvbXBvbmVudCgpIHtcbiAgY29uc3QgdmlzU3RhdGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5kZW1vLmtlcGxlckdsLm1hcC52aXNTdGF0ZSk7XG4gIGNvbnN0IGFpQXNzaXN0YW50ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuZGVtby5haUFzc2lzdGFudCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICAvLyBkZWZpbmUgTExNIGZ1bmN0aW9uc1xuICBjb25zdCB0b29scyA9IHNldHVwTExNVG9vbHMoe3Zpc1N0YXRlLCBhaUFzc2lzdGFudCwgZGlzcGF0Y2h9KTtcblxuICAvLyBlbmFibGUgdm9pY2UgYW5kIHNjcmVlbiBjYXB0dXJlXG4gIGNvbnN0IGVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSA9XG4gICAgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ29wZW5haScgfHwgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ2dvb2dsZScgfHwgZmFsc2U7XG5cbiAgLy8gZGVmaW5lIGFzc2lzdGFudCBwcm9wc1xuICBjb25zdCBhc3Npc3RhbnRQcm9wcyA9IHtcbiAgICBuYW1lOiBBU1NJU1RBTlRfTkFNRSxcbiAgICBkZXNjcmlwdGlvbjogQVNTSVNUQU5UX0RFU0NSSVBUSU9OLFxuICAgIHZlcnNpb246IEFTU0lTVEFOVF9WRVJTSU9OLFxuICAgIG1vZGVsUHJvdmlkZXI6IGFpQXNzaXN0YW50Py5jb25maWcucHJvdmlkZXIgfHwgJycsXG4gICAgbW9kZWw6IGFpQXNzaXN0YW50Py5jb25maWcubW9kZWwgfHwgJycsXG4gICAgYXBpS2V5OiBhaUFzc2lzdGFudD8uY29uZmlnLmFwaUtleSB8fCAnJyxcbiAgICBiYXNlVXJsOiBhaUFzc2lzdGFudD8uY29uZmlnLmJhc2VVcmwgfHwgJycsXG4gICAgdG9vbHNcbiAgfTtcblxuICBjb25zdCBbZGF0YXNldE1ldGFEYXRhLCBzZXREYXRhc2V0TWV0YURhdGFdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgW2lkZWFzLCBzZXRJZGVhc10gPSB1c2VTdGF0ZTx7dGl0bGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZ31bXT4oW10pO1xuXG4gIGNvbnN0IFtyZXN0YXJ0S2V5LCBzZXRSZXN0YXJ0S2V5XSA9IHVzZVN0YXRlPG51bWJlcj4oMCk7XG5cbiAgLy8gZ2V0IGRhdGFzZXQgbWV0YSBkYXRhIGFuZCByZS1pbml0aWFsaXplIGFzc2lzdGFudCB3aGVuIGRhdGFzZXRzIG9yIGxheWVycyBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXRhRGF0YSA9IGdldERhdGFzZXRDb250ZXh0KHZpc1N0YXRlPy5kYXRhc2V0cywgdmlzU3RhdGU/LmxheWVycyB8fCBbXSk7XG4gICAgc2V0RGF0YXNldE1ldGFEYXRhKG1ldGFEYXRhKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFt2aXNTdGF0ZT8uZGF0YXNldHMsIHZpc1N0YXRlPy5sYXllcnNdKTtcblxuICAvLyB1c2UgZGF0YXNldCBtZXRhIGRhdGEgaW4gTExNIGluc3RydWN0aW9uc1xuICBjb25zdCBpbnN0cnVjdGlvbnMgPSBgJHtJTlNUUlVDVElPTlN9XFxuXFxuJHtkYXRhc2V0TWV0YURhdGF9YDtcblxuICAvLyBnZW5lcmF0ZSBpZGVhcyBmcm9tIExMTVxuICBjb25zdCB7dGVtcG9yYXJ5UHJvbXB0LCByZXN0YXJ0Q2hhdDogbGlicmFyeVJlc3RhcnRDaGF0fSA9IHVzZUFzc2lzdGFudCh7Li4uYXNzaXN0YW50UHJvcHMsIGluc3RydWN0aW9uc30pO1xuICBcbiAgY29uc3QgcmVzdGFydENoYXRSZWYgPSB1c2VSZWYobGlicmFyeVJlc3RhcnRDaGF0KTtcbiAgcmVzdGFydENoYXRSZWYuY3VycmVudCA9IGxpYnJhcnlSZXN0YXJ0Q2hhdDtcblxuICBjb25zdCBnZW5lcmF0ZUlkZWFzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRlbXBvcmFyeVByb21wdCh7XG4gICAgICAgIHByb21wdDogUFJPTVBUX0lERUFTLFxuICAgICAgICB0ZW1wZXJhdHVyZTogMS4wXG4gICAgICB9KTtcbiAgICAgIC8vIGZpbmQgW3t9LHt9Li4uXSBpbiB0aGUgdGV4dCBhbmQgcGFyc2UgaXQgYXMganNvbiwgaGFuZGxpbmcgd2hpdGVzcGFjZVxuICAgICAgY29uc3QgbWF0Y2ggPSByZXNwb25zZT8ubWF0Y2goL1xcW1xccypcXHsuKlxcfVxccypcXF0vcyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UobWF0Y2hbMF0pO1xuICAgICAgICBzZXRJZGVhcyhqc29uKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyBpZGVhcycsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBnZXQgaWRlYXMgVUkgY29tcG9uZW50XG4gICAgaWYgKGlkZWFzLmxlbmd0aCA9PT0gMCAmJiBkYXRhc2V0TWV0YURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZ2VuZXJhdGVJZGVhcygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkYXRhc2V0TWV0YURhdGFdKTtcblxuICBjb25zdCBvblJlc3RhcnRBc3Npc3RhbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgZGlzcGF0Y2godXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhbXSkpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZXN0YXJ0Q2hhdFJlZi5jdXJyZW50KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzdGFydGluZyBjaGF0OicsIGUpO1xuICAgIH1cbiAgICBcbiAgICBzZXRSZXN0YXJ0S2V5KHByZXYgPT4gcHJldiArIDEpO1xuICB9O1xuXG4gIGNvbnN0IG9uTWVzc2FnZXNVcGRhdGVkID0gKG1lc3NhZ2VzOiBNZXNzYWdlTW9kZWxbXSkgPT4ge1xuICAgIGRpc3BhdGNoKHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXMobWVzc2FnZXMpKTtcbiAgfTtcblxuICBjb25zdCBvblNjcmVlbnNob3RDbGljayA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRTdGFydFNjcmVlbkNhcHR1cmUodHJ1ZSkpO1xuICB9O1xuXG4gIGNvbnN0IG9uUmVtb3ZlU2NyZWVuc2hvdCA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRTY3JlZW5DYXB0dXJlZCgnJykpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50IGNsYXNzTmFtZT1cImFpLWFzc2lzdGFudC1jb21wb25lbnRcIj5cbiAgICAgIDxBaUFzc2lzdGFudFxuICAgICAgICBrZXk9e3Jlc3RhcnRLZXl9XG4gICAgICAgIHsuLi5hc3Npc3RhbnRQcm9wc31cbiAgICAgICAgaW5zdHJ1Y3Rpb25zPXtpbnN0cnVjdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZS50ZXh0Q29sb3IgPT09IHRleHRDb2xvckxUID8gJ2xpZ2h0JyA6ICdkYXJrJ31cbiAgICAgICAgd2VsY29tZU1lc3NhZ2U9e1dFTENPTUVfTUVTU0FHRX1cbiAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50Py5jb25maWcudGVtcGVyYXR1cmUgfHwgMH1cbiAgICAgICAgdG9wUD17YWlBc3Npc3RhbnQ/LmNvbmZpZy50b3BQIHx8IDB9XG4gICAgICAgIGluaXRpYWxNZXNzYWdlcz17YWlBc3Npc3RhbnQ/Lm1lc3NhZ2VzfVxuICAgICAgICBvbk1lc3NhZ2VzVXBkYXRlZD17b25NZXNzYWdlc1VwZGF0ZWR9XG4gICAgICAgIGVuYWJsZVZvaWNlPXtlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmV9XG4gICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgb25TY3JlZW5zaG90Q2xpY2s9e29uU2NyZWVuc2hvdENsaWNrfVxuICAgICAgICBzY3JlZW5DYXB0dXJlZEJhc2U2ND17YWlBc3Npc3RhbnQ/LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZCB8fCAnJ31cbiAgICAgICAgb25SZW1vdmVTY3JlZW5zaG90PXtvblJlbW92ZVNjcmVlbnNob3R9XG4gICAgICAgIG9uUmVzdGFydENoYXQ9e29uUmVzdGFydEFzc2lzdGFudH1cbiAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICBib3RNZXNzYWdlQ2xhc3NOYW1lPXsnJ31cbiAgICAgICAgZ2l0aHViSXNzdWVMaW5rPXsnaHR0cHM6Ly9naXRodWIuY29tL2tlcGxlcmdsL2tlcGxlci5nbC9pc3N1ZXMnfVxuICAgICAgICBpZGVhcz17aWRlYXN9XG4gICAgICAgIG9uUmVmcmVzaElkZWFzPXtnZW5lcmF0ZUlkZWFzfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxHQUFBLEdBQUFOLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBUUEsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBVixPQUFBO0FBQTZDLElBQUFXLGVBQUEsRUFyQjdDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWQsd0JBQUFjLENBQUEsRUFBQUUsQ0FBQSxT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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/ai-assistant",
3
3
  "author": "Xun Li<lixun910@gmail.com>",
4
- "version": "3.2.3",
4
+ "version": "3.2.5",
5
5
  "description": "kepler.gl AI assistant",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -34,12 +34,12 @@
34
34
  "@ai-sdk/deepseek": "^0.2.14",
35
35
  "@ai-sdk/google": "^1.2.18",
36
36
  "@ai-sdk/xai": "^1.2.16",
37
- "@kepler.gl/components": "3.2.3",
38
- "@kepler.gl/constants": "3.2.3",
39
- "@kepler.gl/layers": "3.2.3",
40
- "@kepler.gl/table": "3.2.3",
41
- "@kepler.gl/types": "3.2.3",
42
- "@kepler.gl/utils": "3.2.3",
37
+ "@kepler.gl/components": "3.2.5",
38
+ "@kepler.gl/constants": "3.2.5",
39
+ "@kepler.gl/layers": "3.2.5",
40
+ "@kepler.gl/table": "3.2.5",
41
+ "@kepler.gl/types": "3.2.5",
42
+ "@kepler.gl/utils": "3.2.5",
43
43
  "@openassistant/core": "^0.5.17",
44
44
  "@openassistant/duckdb": "^0.5.17",
45
45
  "@openassistant/echarts": "^0.5.17",
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
- import React, {useEffect, useState} from 'react';
4
+ import React, {useEffect, useRef, useState} from 'react';
5
5
  import {useDispatch, useSelector} from 'react-redux';
6
6
  import styled from 'styled-components';
7
7
  import {textColorLT, theme} from '@kepler.gl/styles';
@@ -59,6 +59,8 @@ export function AiAssistantComponent() {
59
59
 
60
60
  const [ideas, setIdeas] = useState<{title: string; description: string}[]>([]);
61
61
 
62
+ const [restartKey, setRestartKey] = useState<number>(0);
63
+
62
64
  // get dataset meta data and re-initialize assistant when datasets or layers change
63
65
  useEffect(() => {
64
66
  const metaData = getDatasetContext(visState?.datasets, visState?.layers || []);
@@ -70,7 +72,10 @@ export function AiAssistantComponent() {
70
72
  const instructions = `${INSTRUCTIONS}\n\n${datasetMetaData}`;
71
73
 
72
74
  // generate ideas from LLM
73
- const {temporaryPrompt} = useAssistant({...assistantProps, instructions});
75
+ const {temporaryPrompt, restartChat: libraryRestartChat} = useAssistant({...assistantProps, instructions});
76
+
77
+ const restartChatRef = useRef(libraryRestartChat);
78
+ restartChatRef.current = libraryRestartChat;
74
79
 
75
80
  const generateIdeas = async () => {
76
81
  try {
@@ -97,9 +102,16 @@ export function AiAssistantComponent() {
97
102
  // eslint-disable-next-line react-hooks/exhaustive-deps
98
103
  }, [datasetMetaData]);
99
104
 
100
- const onRestartAssistant = () => {
101
- // clean up aiAssistant state
105
+ const onRestartAssistant = async () => {
102
106
  dispatch(updateAiAssistantMessages([]));
107
+
108
+ try {
109
+ await restartChatRef.current();
110
+ } catch (e) {
111
+ console.error('Error restarting chat:', e);
112
+ }
113
+
114
+ setRestartKey(prev => prev + 1);
103
115
  };
104
116
 
105
117
  const onMessagesUpdated = (messages: MessageModel[]) => {
@@ -117,6 +129,7 @@ export function AiAssistantComponent() {
117
129
  return (
118
130
  <StyledAiAssistantComponent className="ai-assistant-component">
119
131
  <AiAssistant
132
+ key={restartKey}
120
133
  {...assistantProps}
121
134
  instructions={instructions}
122
135
  theme={theme.textColor === textColorLT ? 'light' : 'dark'}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/cloud-providers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.3",
4
+ "version": "3.2.5",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/types": "3.2.3",
33
+ "@kepler.gl/types": "3.2.5",
34
34
  "react": "^18.2.0"
35
35
  },
36
36
  "nyc": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/common-utils",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.2.3",
4
+ "version": "3.2.5",
5
5
  "description": "kepler.gl common utils",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/constants": "3.2.3",
34
- "@kepler.gl/types": "3.2.3",
33
+ "@kepler.gl/constants": "3.2.5",
34
+ "@kepler.gl/types": "3.2.5",
35
35
  "d3-array": "^2.8.0",
36
36
  "global": "^4.3.0",
37
37
  "h3-js": "^3.1.0",