kepler.gl 3.1.0-alpha.7 → 3.1.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 (68) hide show
  1. package/dist/src/components/src/common/data-table/index.d.ts +1 -1
  2. package/dist/src/components/src/common/data-table/option-dropdown.d.ts +3 -3
  3. package/dist/src/components/src/kepler-gl.d.ts +1 -0
  4. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -0
  5. package/dist/src/reducers/src/vis-state.d.ts +4 -0
  6. package/dist/src/utils/src/application-config.d.ts +2 -0
  7. package/package.json +3 -2
  8. package/src/actions/package.json +8 -8
  9. package/src/ai-assistant/dist/components/ai-assistant-config.js +66 -53
  10. package/src/ai-assistant/package.json +10 -9
  11. package/src/ai-assistant/src/components/ai-assistant-config.tsx +62 -48
  12. package/src/ai-assistant/src/config/models.json +32 -0
  13. package/src/cloud-providers/package.json +2 -2
  14. package/src/common-utils/package.json +3 -3
  15. package/src/components/dist/common/data-table/header-cell.js +10 -10
  16. package/src/components/dist/common/data-table/index.d.ts +1 -1
  17. package/src/components/dist/common/data-table/index.js +1 -1
  18. package/src/components/dist/common/data-table/option-dropdown.d.ts +3 -3
  19. package/src/components/dist/common/data-table/option-dropdown.js +5 -5
  20. package/src/components/dist/kepler-gl.d.ts +1 -0
  21. package/src/components/dist/modals/save-map-modal.js +4 -3
  22. package/src/components/package.json +15 -15
  23. package/src/components/src/common/data-table/header-cell.tsx +5 -3
  24. package/src/components/src/common/data-table/index.tsx +1 -1
  25. package/src/components/src/common/data-table/option-dropdown.tsx +7 -7
  26. package/src/components/src/modals/save-map-modal.tsx +6 -2
  27. package/src/constants/dist/default-settings.js +8 -5
  28. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/80/7a7c561d7985e92aab7b9683e7baf5a0286b353a8f2609c4c71099f668d012be027929e4bbac937f9aa0c9a61be3bd4405136f582895f05aa0313c8efa42 +1 -0
  29. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/f0/6e/aadf3c48345aa72e7b2fb92e8c9788d04986b55caf83daa3fbd749c37c44 +2 -0
  30. package/src/constants/package.json +2 -2
  31. package/src/constants/src/default-settings.ts +8 -3
  32. package/src/constants/umd/keplergl.min.js +1 -1
  33. package/src/deckgl-arrow-layers/package.json +1 -1
  34. package/src/deckgl-layers/package.json +4 -4
  35. package/src/duckdb/dist/components/preview-data-panel.js +2 -9
  36. package/src/duckdb/dist/components/sql-panel.js +2 -2
  37. package/src/duckdb/dist/plugin.js +8 -2
  38. package/src/duckdb/package.json +6 -6
  39. package/src/duckdb/src/components/preview-data-panel.tsx +0 -3
  40. package/src/duckdb/src/components/sql-panel.tsx +1 -1
  41. package/src/duckdb/src/plugin.ts +7 -1
  42. package/src/effects/package.json +5 -5
  43. package/src/layers/dist/index.d.ts +3 -0
  44. package/src/layers/dist/index.js +6 -7
  45. package/src/layers/package.json +9 -9
  46. package/src/layers/src/index.ts +5 -5
  47. package/src/localization/package.json +1 -1
  48. package/src/processors/package.json +7 -7
  49. package/src/reducers/dist/vis-state-updaters.d.ts +1 -0
  50. package/src/reducers/dist/vis-state-updaters.js +2 -2
  51. package/src/reducers/dist/vis-state.d.ts +4 -0
  52. package/src/reducers/package.json +16 -16
  53. package/src/reducers/src/vis-state-updaters.ts +5 -2
  54. package/src/schemas/dist/dataset-schema.js +32 -2
  55. package/src/schemas/package.json +8 -7
  56. package/src/schemas/src/dataset-schema.ts +34 -1
  57. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/aa/96c67b383dbcd2b95625113a5389c6078fd8a53e6fc73a054229709f2dac1e0a409e7117049485a569fbebf8434a319451842671398904bfe1a7f7b5991c +1 -0
  58. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c1/39/f7cd1d5947ec6e5d82bfa07041271344eb02f9e67bf5823acf2f22c2d01f +2 -0
  59. package/src/styles/package.json +2 -2
  60. package/src/styles/umd/keplergl.min.js +1 -1
  61. package/src/table/package.json +5 -5
  62. package/src/tasks/package.json +2 -2
  63. package/src/types/package.json +1 -1
  64. package/src/utils/dist/application-config.d.ts +2 -0
  65. package/src/utils/dist/application-config.js +4 -2
  66. package/src/utils/package.json +4 -4
  67. package/src/utils/src/application-config.ts +9 -1
  68. package/umd/keplergl.min.js +1151 -1149
@@ -15,25 +15,8 @@ import {
15
15
  import {AiAssistantConfig} from '../index';
16
16
  import ApiKey from '../icons/api-key';
17
17
  import {testApiKey} from '@openassistant/core';
18
-
19
- const PROVIDER_MODELS = {
20
- openai: ['o1-mini', 'o1-preview', 'gpt-4o', 'gpt-4o-mini', 'gpt-3.5-turbo-0125', 'gpt-3.5-turbo'],
21
- google: ['gemini-2.0-flash-exp', 'gemini-1.5-flash', 'gemini-1.5-pro', 'gemini-1.0-pro'],
22
- ollama: [
23
- 'phi4',
24
- 'qwen2.5-coder',
25
- 'qwq',
26
- 'llama3.3',
27
- 'llama3.2',
28
- 'llama3.1',
29
- 'llama3.1:70b',
30
- 'qwen2',
31
- 'llava',
32
- 'mistral',
33
- 'gemma2',
34
- 'phi3.5'
35
- ]
36
- };
18
+ import PROVIDER_MODELS from '../config/models.json';
19
+ import {useLocalStorage} from 'usehooks-ts';
37
20
 
38
21
  type ThemeProps = {theme: any};
39
22
 
@@ -143,12 +126,27 @@ function AiAssistantConfigFactory(RangeSlider: ReturnType<typeof RangeSliderFact
143
126
  const AiAssistantConfig: React.FC<
144
127
  AiAssistantConfigProps & WrappedComponentProps & ThemeProps
145
128
  > = ({intl, aiAssistantConfig, updateAiAssistantConfig}) => {
146
- const [provider, setProvider] = useState(aiAssistantConfig.provider || 'openai');
147
- const [model, setModel] = useState(aiAssistantConfig.model || PROVIDER_MODELS[provider][0]);
148
- const [apiKey, setApiKey] = useState(aiAssistantConfig.apiKey || '');
149
- const [temperature, setTemperature] = useState(aiAssistantConfig.temperature || 0.8);
150
- const [topP, setTopP] = useState(aiAssistantConfig.topP || 0.8);
151
- const [baseUrl, setBaseUrl] = useState(aiAssistantConfig.baseUrl || 'http://localhost:11434');
129
+ const [provider, setProvider] = useLocalStorage(
130
+ 'ai-assistant-provider',
131
+ aiAssistantConfig.provider || 'openai'
132
+ );
133
+ const [model, setModel] = useLocalStorage(
134
+ 'ai-assistant-model',
135
+ aiAssistantConfig.model || PROVIDER_MODELS[provider][0]
136
+ );
137
+ const [apiKey, setApiKey] = useLocalStorage(
138
+ 'ai-assistant-api-key',
139
+ aiAssistantConfig.apiKey || ''
140
+ );
141
+ const [temperature, setTemperature] = useLocalStorage(
142
+ 'ai-assistant-temperature',
143
+ aiAssistantConfig.temperature || 0.8
144
+ );
145
+ const [topP, setTopP] = useLocalStorage('ai-assistant-top-p', aiAssistantConfig.topP || 0.8);
146
+ const [baseUrl, setBaseUrl] = useLocalStorage(
147
+ 'ai-assistant-base-url',
148
+ aiAssistantConfig.baseUrl || 'http://localhost:11434'
149
+ );
152
150
  const [connectionError, setConnectionError] = useState(false);
153
151
  const [errorMessage, setErrorMessage] = useState('');
154
152
  const [isRunning, setIsRunning] = useState(false);
@@ -191,29 +189,45 @@ function AiAssistantConfigFactory(RangeSlider: ReturnType<typeof RangeSliderFact
191
189
 
192
190
  const onStartChat = async () => {
193
191
  setIsRunning(true);
194
- const {success, service} = await testApiKey({
195
- modelProvider: provider,
196
- modelName: model,
197
- apiKey: apiKey,
198
- baseUrl: baseUrl
199
- });
200
- const errorMessage = !success
201
- ? service === 'ollama'
202
- ? 'Connection failed: maybe invalid Ollama Base URL'
203
- : 'Connection failed: maybe invalid API Key'
204
- : '';
205
- setConnectionError(!success);
206
- setErrorMessage(errorMessage);
207
- updateAiAssistantConfig({
208
- provider: provider,
209
- model: model,
210
- apiKey: apiKey,
211
- baseUrl: baseUrl,
212
- isReady: success,
213
- temperature: temperature,
214
- topP: topP
215
- });
216
- setIsRunning(false);
192
+ try {
193
+ const timeoutPromise = new Promise((_, reject) => {
194
+ setTimeout(() => reject(new Error('Connection timeout after 15 seconds')), 15000);
195
+ });
196
+
197
+ const testPromise = testApiKey({
198
+ modelProvider: provider,
199
+ modelName: model,
200
+ apiKey: apiKey,
201
+ baseUrl: baseUrl
202
+ });
203
+
204
+ const result = (await Promise.race([testPromise, timeoutPromise])) as {
205
+ success: boolean;
206
+ service: string;
207
+ };
208
+ const {success, service} = result;
209
+ const errorMessage = !success
210
+ ? service === 'ollama'
211
+ ? 'Connection failed: maybe invalid Ollama Base URL'
212
+ : 'Connection failed: maybe invalid API Key'
213
+ : '';
214
+ setConnectionError(!success);
215
+ setErrorMessage(errorMessage);
216
+ updateAiAssistantConfig({
217
+ provider: provider,
218
+ model: model,
219
+ apiKey: apiKey,
220
+ baseUrl: baseUrl,
221
+ isReady: success,
222
+ temperature: temperature,
223
+ topP: topP
224
+ });
225
+ } catch (error) {
226
+ setConnectionError(true);
227
+ setErrorMessage(error instanceof Error ? error.message : 'Connection failed');
228
+ } finally {
229
+ setIsRunning(false);
230
+ }
217
231
  };
218
232
 
219
233
  return (
@@ -0,0 +1,32 @@
1
+ {
2
+ "deepseek": ["deepseek-chat", "deepseek-reasoner"],
3
+ "openai": [
4
+ "o1-mini",
5
+ "o1-preview",
6
+ "o1",
7
+ "gpt-4o",
8
+ "gpt-4o-mini",
9
+ "gpt-3.5-turbo-0125",
10
+ "gpt-3.5-turbo"
11
+ ],
12
+ "google": ["gemini-2.0-flash-exp", "gemini-1.5-flash", "gemini-1.5-pro", "gemini-1.0-pro"],
13
+ "ollama": [
14
+ "deepseek-r1",
15
+ "deepseek-r1:14b",
16
+ "deepseek-r1:32b",
17
+ "deepseek-r1:70b",
18
+ "deepseek-r1:671b",
19
+ "phi4",
20
+ "qwen2.5-coder",
21
+ "qwq",
22
+ "llama3.3",
23
+ "llama3.2",
24
+ "llama3.1",
25
+ "llama3.1:70b",
26
+ "qwen2",
27
+ "llava",
28
+ "mistral",
29
+ "gemma2",
30
+ "phi3.5"
31
+ ]
32
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/cloud-providers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0-alpha.7",
4
+ "version": "3.1.0",
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.1.0-alpha.7",
33
+ "@kepler.gl/types": "3.1.0",
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.1.0-alpha.7",
4
+ "version": "3.1.0",
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.1.0-alpha.7",
34
- "@kepler.gl/types": "3.1.0-alpha.7",
33
+ "@kepler.gl/constants": "3.1.0",
34
+ "@kepler.gl/types": "3.1.0",
35
35
  "d3-array": "^2.8.0",
36
36
  "global": "^4.3.0",
37
37
  "h3-js": "^3.1.0",
@@ -49,7 +49,7 @@ var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
49
49
  style = cellInfo.style;
50
50
  var colMeta = props.colMeta,
51
51
  sortColumn = props.sortColumn,
52
- _sortTableColumn = props.sortTableColumn,
52
+ sortTableColumn = props.sortTableColumn,
53
53
  pinTableColumn = props.pinTableColumn,
54
54
  copyTableColumn = props.copyTableColumn,
55
55
  setColumnDisplayFormat = props.setColumnDisplayFormat;
@@ -64,8 +64,8 @@ var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
64
64
  var isFormatted = Boolean((_colMeta$column = colMeta[column]) === null || _colMeta$column === void 0 ? void 0 : _colMeta$column.displayFormat);
65
65
  var formatLabels = isFormatted ? (0, _utils.getFieldFormatLabels)(colMeta[column].type) : [];
66
66
  var onSortTable = (0, _react.useCallback)(function () {
67
- return _sortTableColumn(column);
68
- }, [_sortTableColumn, column]);
67
+ return sortTableColumn(column);
68
+ }, [sortTableColumn, column]);
69
69
  var onToggleOptionMenu = (0, _react.useCallback)(function () {
70
70
  return toggleMoreOptions(column);
71
71
  }, [toggleMoreOptions, column]);
@@ -76,7 +76,7 @@ var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
76
76
  return copyTableColumn(column);
77
77
  }, [copyTableColumn, column]);
78
78
  var onSetDisplayFormat = (0, _react.useCallback)(function (displayFormat) {
79
- setColumnDisplayFormat((0, _defineProperty2["default"])({}, column, displayFormat.format));
79
+ setColumnDisplayFormat === null || setColumnDisplayFormat === void 0 || setColumnDisplayFormat((0, _defineProperty2["default"])({}, column, displayFormat.format));
80
80
  }, [column, setColumnDisplayFormat]);
81
81
  var onToggleDisplayFormat = (0, _react.useCallback)(function () {
82
82
  setShowFormatter(!showFormatter);
@@ -86,7 +86,7 @@ var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
86
86
  key: key,
87
87
  style: style,
88
88
  onClick: function onClick(e) {
89
- e.shiftKey ? _sortTableColumn(column) : null;
89
+ e.shiftKey ? sortTableColumn(column) : null;
90
90
  },
91
91
  onDoubleClick: onSortTable,
92
92
  title: column
@@ -134,16 +134,16 @@ var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
134
134
  column: column,
135
135
  colMeta: colMeta,
136
136
  toggleMoreOptions: toggleMoreOptions,
137
- sortTableColumn: function sortTableColumn(mode) {
138
- return _sortTableColumn(column, mode);
139
- },
137
+ sortTableColumn: sortTableColumn ? function (mode) {
138
+ return sortTableColumn(column, mode);
139
+ } : undefined,
140
140
  pinTableColumn: onPin,
141
141
  copyTableColumn: onCopy,
142
- setDisplayFormat: onSetDisplayFormat
142
+ setDisplayFormat: setColumnDisplayFormat ? onSetDisplayFormat : undefined
143
143
  }))));
144
144
  };
145
145
  return HeaderCell;
146
146
  };
147
147
  HeaderCellFactory.deps = [_fieldToken["default"]];
148
148
  var _default = exports["default"] = HeaderCellFactory;
149
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczIiLCJfYnV0dG9uIiwiX2ljb25zIiwiX2NvbnN0YW50cyIsIl9vcHRpb25Ecm9wZG93biIsIl91dGlscyIsIl9maWVsZFRva2VuIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkSGVhZGVyQ2VsbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImhlYWRlckNlbGxCb3JkZXJDb2xvciIsImhlYWRlclBhZGRpbmdUb3AiLCJoZWFkZXJQYWRkaW5nQm90dG9tIiwiY2VsbFBhZGRpbmdTaWRlIiwiaGVhZGVyQ2VsbEJhY2tncm91bmQiLCJIZWFkZXJDZWxsRmFjdG9yeSIsIkZpZWxkVG9rZW4iLCJIZWFkZXJDZWxsIiwiX3JlZiIsIl9jb2xNZXRhJGNvbHVtbiIsImNlbGxJbmZvIiwiY29sdW1ucyIsImlzUGlubmVkIiwidG9nZ2xlTW9yZU9wdGlvbnMiLCJtb3JlT3B0aW9uc0NvbHVtbiIsImNvbHVtbkluZGV4Iiwia2V5Iiwic3R5bGUiLCJjb2xNZXRhIiwic29ydENvbHVtbiIsInNvcnRUYWJsZUNvbHVtbiIsInBpblRhYmxlQ29sdW1uIiwiY29weVRhYmxlQ29sdW1uIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNob3dGb3JtYXR0ZXIiLCJzZXRTaG93Rm9ybWF0dGVyIiwiY29sdW1uIiwiaXNHaG9zdCIsImdob3N0IiwiaXNTb3J0ZWQiLCJmaXJzdENlbGwiLCJpc0Zvcm1hdHRlZCIsIkJvb2xlYW4iLCJkaXNwbGF5Rm9ybWF0IiwiZm9ybWF0TGFiZWxzIiwiZ2V0RmllbGRGb3JtYXRMYWJlbHMiLCJ0eXBlIiwib25Tb3J0VGFibGUiLCJ1c2VDYWxsYmFjayIsIm9uVG9nZ2xlT3B0aW9uTWVudSIsIm9uUGluIiwib25Db3B5Iiwib25TZXREaXNwbGF5Rm9ybWF0IiwiX2RlZmluZVByb3BlcnR5MiIsImZvcm1hdCIsIm9uVG9nZ2xlRGlzcGxheUZvcm1hdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwiY29uY2F0Iiwib25DbGljayIsInNoaWZ0S2V5Iiwib25Eb3VibGVDbGljayIsInRpdGxlIiwiRnJhZ21lbnQiLCJuYW1lIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIkFycm93VXAiLCJoZWlnaHQiLCJBcnJvd0Rvd24iLCJIYXNoIiwiRm9ybWF0dGVyRHJvcGRvd24iLCJsZWZ0IiwidG9wIiwiaXNPcGVuZWQiLCJzZXREaXNwbGF5Rm9ybWF0Iiwib25DbG9zZSIsIlZlcnRUaHJlZURvdHMiLCJtb2RlIiwiZGVwcyIsIkZpZWxkVG9rZW5GYWN0b3J5IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kYXRhLXRhYmxlL2hlYWRlci1jZWxsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDU1NQcm9wZXJ0aWVzLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcbmltcG9ydCB7QXJyb3dVcCwgQXJyb3dEb3duLCBWZXJ0VGhyZWVEb3RzLCBIYXNofSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtTT1JUX09SREVSfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgT3B0aW9uRHJvcGRvd24sIHtGb3JtYXR0ZXJEcm9wZG93bn0gZnJvbSAnLi9vcHRpb24tZHJvcGRvd24nO1xuaW1wb3J0IHtnZXRGaWVsZEZvcm1hdExhYmVsc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0NvbE1ldGF9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IEZpZWxkVG9rZW5GYWN0b3J5LCB7RmllbGRUb2tlblByb3BzfSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtdG9rZW4nO1xuaW1wb3J0IHtEYXRhVGFibGVQcm9wc30gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IFN0eWxlZEhlYWRlckNlbGwgPSBzdHlsZWQuZGl2YFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nVG9wfXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nQm90dG9tfXB4O1xuICBwYWRkaW5nLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuY2VsbFBhZGRpbmdTaWRlfXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGVhZGVyQ2VsbEJhY2tncm91bmR9O1xuXG4gIC5uLXNvcnQtaWR4IHtcbiAgICBmb250LXNpemU6IDlweDtcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZsZXgtZ3JvdzogMTtcblxuICAgIC5jb2wtbmFtZSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgLmNvbC1uYW1lX19sZWZ0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5jb2wtbmFtZV9fbmFtZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tb3JlIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG5cbiAgLmNvbC1uYW1lX19mb3JtYXQgc3ZnIHtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG5gO1xuXG50eXBlIENlbGxJbmZvID0ge1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBpc1Njcm9sbGluZzogYm9vbGVhbjtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcGFyZW50OiBhbnk7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIHN0eWxlOiBDU1NQcm9wZXJ0aWVzO1xufTtcblxudHlwZSBIZWFkZXJDZWxsUHJvcHMgPSB7XG4gIC8vIHBhc3NlZCBkb3duIGZyb20gcmVhY3QgdmlydHVhbGl6ZWQgR3JpZFxuICBjZWxsSW5mbzogQ2VsbEluZm87XG4gIGNvbHVtbnM6IERhdGFUYWJsZVByb3BzWydjb2x1bW5zJ107XG4gIGNvbE1ldGE/OiBDb2xNZXRhO1xuICBpc1Bpbm5lZD86IGJvb2xlYW47XG4gIHNob3dTdGF0cz86IGJvb2xlYW47XG4gIHByb3BzOiBEYXRhVGFibGVQcm9wcztcbiAgdG9nZ2xlTW9yZU9wdGlvbnM6IChtb3JlT3B0aW9uc0NvbHVtbjogc3RyaW5nKSA9PiB2b2lkO1xuICBtb3JlT3B0aW9uc0NvbHVtbjogbnVsbCB8IHN0cmluZztcbn07XG5cbmNvbnN0IEhlYWRlckNlbGxGYWN0b3J5ID0gKEZpZWxkVG9rZW46IFJlYWN0LkZDPEZpZWxkVG9rZW5Qcm9wcz4pID0+IHtcbiAgY29uc3QgSGVhZGVyQ2VsbCA9ICh7XG4gICAgY2VsbEluZm8sXG4gICAgY29sdW1ucyxcbiAgICBpc1Bpbm5lZCxcbiAgICBwcm9wcyxcbiAgICB0b2dnbGVNb3JlT3B0aW9ucyxcbiAgICBtb3JlT3B0aW9uc0NvbHVtblxuICB9OiBIZWFkZXJDZWxsUHJvcHMpID0+IHtcbiAgICBjb25zdCB7Y29sdW1uSW5kZXgsIGtleSwgc3R5bGV9ID0gY2VsbEluZm87XG4gICAgY29uc3Qge1xuICAgICAgY29sTWV0YSxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0VGFibGVDb2x1bW4sXG4gICAgICBwaW5UYWJsZUNvbHVtbixcbiAgICAgIGNvcHlUYWJsZUNvbHVtbixcbiAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3Nob3dGb3JtYXR0ZXIsIHNldFNob3dGb3JtYXR0ZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSW5kZXhdO1xuXG4gICAgY29uc3QgaXNHaG9zdCA9IGNvbHVtbi5naG9zdDtcbiAgICBjb25zdCBpc1NvcnRlZCA9IHNvcnRDb2x1bW5bY29sdW1uXTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSBjb2x1bW5JbmRleCA9PT0gMDtcbiAgICBjb25zdCBpc0Zvcm1hdHRlZCA9IEJvb2xlYW4oY29sTWV0YVtjb2x1bW5dPy5kaXNwbGF5Rm9ybWF0KTtcbiAgICBjb25zdCBmb3JtYXRMYWJlbHMgPSBpc0Zvcm1hdHRlZCA/IGdldEZpZWxkRm9ybWF0TGFiZWxzKGNvbE1ldGFbY29sdW1uXS50eXBlKSA6IFtdO1xuICAgIGNvbnN0IG9uU29ydFRhYmxlID0gdXNlQ2FsbGJhY2soKCkgPT4gc29ydFRhYmxlQ29sdW1uKGNvbHVtbiksIFtzb3J0VGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uVG9nZ2xlT3B0aW9uTWVudSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gdG9nZ2xlTW9yZU9wdGlvbnMoY29sdW1uKSxcbiAgICAgIFt0b2dnbGVNb3JlT3B0aW9ucywgY29sdW1uXVxuICAgICk7XG4gICAgY29uc3Qgb25QaW4gPSB1c2VDYWxsYmFjaygoKSA9PiBwaW5UYWJsZUNvbHVtbihjb2x1bW4pLCBbcGluVGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IGNvcHlUYWJsZUNvbHVtbihjb2x1bW4pLCBbY29weVRhYmxlQ29sdW1uLCBjb2x1bW5dKTtcbiAgICBjb25zdCBvblNldERpc3BsYXlGb3JtYXQgPSB1c2VDYWxsYmFjayhcbiAgICAgIGRpc3BsYXlGb3JtYXQgPT4ge1xuICAgICAgICBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0KHtbY29sdW1uXTogZGlzcGxheUZvcm1hdC5mb3JtYXR9KTtcbiAgICAgIH0sXG4gICAgICBbY29sdW1uLCBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0XVxuICAgICk7XG5cbiAgICBjb25zdCBvblRvZ2dsZURpc3BsYXlGb3JtYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXRTaG93Rm9ybWF0dGVyKCFzaG93Rm9ybWF0dGVyKTtcbiAgICB9LCBbc2hvd0Zvcm1hdHRlcl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRIZWFkZXJDZWxsXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnaGVhZGVyLWNlbGwnLCB7XG4gICAgICAgICAgW2Bjb2x1bW4tJHtjb2x1bW5JbmRleH1gXTogdHJ1ZSxcbiAgICAgICAgICAncGlubmVkLWhlYWRlci1jZWxsJzogaXNQaW5uZWQsXG4gICAgICAgICAgJ2ZpcnN0LWNlbGwnOiBmaXJzdENlbGxcbiAgICAgICAgfSl9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgIGUuc2hpZnRLZXkgPyBzb3J0VGFibGVDb2x1bW4oY29sdW1uKSA6IG51bGw7XG4gICAgICAgIH19XG4gICAgICAgIG9uRG91YmxlQ2xpY2s9e29uU29ydFRhYmxlfVxuICAgICAgICB0aXRsZT17Y29sdW1ufVxuICAgICAgPlxuICAgICAgICB7aXNHaG9zdCA/IChcbiAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImRldGFpbHNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW5hbWVfX2xlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW5hbWVfX25hbWVcIj57Y29sTWV0YVtjb2x1bW5dLm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImNvbC1uYW1lX19zb3J0XCIgb25DbGljaz17b25Tb3J0VGFibGV9PlxuICAgICAgICAgICAgICAgICAgICB7aXNTb3J0ZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgaXNTb3J0ZWQgPT09IFNPUlRfT1JERVIuQVNDRU5ESU5HID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgaGVpZ2h0PVwiMTRweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJvd0Rvd24gaGVpZ2h0PVwiMTRweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fZm9ybWF0XCIgb25DbGljaz17b25Ub2dnbGVEaXNwbGF5Rm9ybWF0fT5cbiAgICAgICAgICAgICAgICAgICAge2lzRm9ybWF0dGVkID8gPEhhc2ggaGVpZ2h0PVwiMTRweFwiIC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlckRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdD17MH1cbiAgICAgICAgICAgICAgICAgICAgICB0b3A9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgaXNPcGVuZWQ9e2lzRm9ybWF0dGVkICYmIHNob3dGb3JtYXR0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD17Y29sTWV0YVtjb2x1bW5dLmRpc3BsYXlGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGlzcGxheUZvcm1hdD17b25TZXREaXNwbGF5Rm9ybWF0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dGb3JtYXR0ZXIoZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdExhYmVscz17Zm9ybWF0TGFiZWxzfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJtb3JlXCIgb25DbGljaz17b25Ub2dnbGVPcHRpb25NZW51fT5cbiAgICAgICAgICAgICAgICAgIDxWZXJ0VGhyZWVEb3RzIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEZpZWxkVG9rZW4gdHlwZT17Y29sTWV0YVtjb2x1bW5dLnR5cGV9IC8+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPE9wdGlvbkRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaXNPcGVuZWQ9e21vcmVPcHRpb25zQ29sdW1uID09PSBjb2x1bW59XG4gICAgICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICAgICAgY29sTWV0YT17Y29sTWV0YX1cbiAgICAgICAgICAgICAgICB0b2dnbGVNb3JlT3B0aW9ucz17dG9nZ2xlTW9yZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgc29ydFRhYmxlQ29sdW1uPXttb2RlID0+IHNvcnRUYWJsZUNvbHVtbihjb2x1bW4sIG1vZGUpfVxuICAgICAgICAgICAgICAgIHBpblRhYmxlQ29sdW1uPXtvblBpbn1cbiAgICAgICAgICAgICAgICBjb3B5VGFibGVDb2x1bW49e29uQ29weX1cbiAgICAgICAgICAgICAgICBzZXREaXNwbGF5Rm9ybWF0PXtvblNldERpc3BsYXlGb3JtYXR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1N0eWxlZEhlYWRlckNlbGw+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIEhlYWRlckNlbGw7XG59O1xuSGVhZGVyQ2VsbEZhY3RvcnkuZGVwcyA9IFtGaWVsZFRva2VuRmFjdG9yeV07XG5leHBvcnQgZGVmYXVsdCBIZWFkZXJDZWxsRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBUix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsV0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQTRFLElBQUFVLGVBQUEsRUFaNUU7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBYix3QkFBQWEsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FB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
149
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczIiLCJfYnV0dG9uIiwiX2ljb25zIiwiX2NvbnN0YW50cyIsIl9vcHRpb25Ecm9wZG93biIsIl91dGlscyIsIl9maWVsZFRva2VuIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkSGVhZGVyQ2VsbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImhlYWRlckNlbGxCb3JkZXJDb2xvciIsImhlYWRlclBhZGRpbmdUb3AiLCJoZWFkZXJQYWRkaW5nQm90dG9tIiwiY2VsbFBhZGRpbmdTaWRlIiwiaGVhZGVyQ2VsbEJhY2tncm91bmQiLCJIZWFkZXJDZWxsRmFjdG9yeSIsIkZpZWxkVG9rZW4iLCJIZWFkZXJDZWxsIiwiX3JlZiIsIl9jb2xNZXRhJGNvbHVtbiIsImNlbGxJbmZvIiwiY29sdW1ucyIsImlzUGlubmVkIiwidG9nZ2xlTW9yZU9wdGlvbnMiLCJtb3JlT3B0aW9uc0NvbHVtbiIsImNvbHVtbkluZGV4Iiwia2V5Iiwic3R5bGUiLCJjb2xNZXRhIiwic29ydENvbHVtbiIsInNvcnRUYWJsZUNvbHVtbiIsInBpblRhYmxlQ29sdW1uIiwiY29weVRhYmxlQ29sdW1uIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNob3dGb3JtYXR0ZXIiLCJzZXRTaG93Rm9ybWF0dGVyIiwiY29sdW1uIiwiaXNHaG9zdCIsImdob3N0IiwiaXNTb3J0ZWQiLCJmaXJzdENlbGwiLCJpc0Zvcm1hdHRlZCIsIkJvb2xlYW4iLCJkaXNwbGF5Rm9ybWF0IiwiZm9ybWF0TGFiZWxzIiwiZ2V0RmllbGRGb3JtYXRMYWJlbHMiLCJ0eXBlIiwib25Tb3J0VGFibGUiLCJ1c2VDYWxsYmFjayIsIm9uVG9nZ2xlT3B0aW9uTWVudSIsIm9uUGluIiwib25Db3B5Iiwib25TZXREaXNwbGF5Rm9ybWF0IiwiX2RlZmluZVByb3BlcnR5MiIsImZvcm1hdCIsIm9uVG9nZ2xlRGlzcGxheUZvcm1hdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwiY29uY2F0Iiwib25DbGljayIsInNoaWZ0S2V5Iiwib25Eb3VibGVDbGljayIsInRpdGxlIiwiRnJhZ21lbnQiLCJuYW1lIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIkFycm93VXAiLCJoZWlnaHQiLCJBcnJvd0Rvd24iLCJIYXNoIiwiRm9ybWF0dGVyRHJvcGRvd24iLCJsZWZ0IiwidG9wIiwiaXNPcGVuZWQiLCJzZXREaXNwbGF5Rm9ybWF0Iiwib25DbG9zZSIsIlZlcnRUaHJlZURvdHMiLCJtb2RlIiwidW5kZWZpbmVkIiwiZGVwcyIsIkZpZWxkVG9rZW5GYWN0b3J5IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kYXRhLXRhYmxlL2hlYWRlci1jZWxsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDU1NQcm9wZXJ0aWVzLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcbmltcG9ydCB7QXJyb3dVcCwgQXJyb3dEb3duLCBWZXJ0VGhyZWVEb3RzLCBIYXNofSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtTT1JUX09SREVSfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgT3B0aW9uRHJvcGRvd24sIHtGb3JtYXR0ZXJEcm9wZG93bn0gZnJvbSAnLi9vcHRpb24tZHJvcGRvd24nO1xuaW1wb3J0IHtnZXRGaWVsZEZvcm1hdExhYmVsc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0NvbE1ldGF9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IEZpZWxkVG9rZW5GYWN0b3J5LCB7RmllbGRUb2tlblByb3BzfSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtdG9rZW4nO1xuaW1wb3J0IHtEYXRhVGFibGVQcm9wc30gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IFN0eWxlZEhlYWRlckNlbGwgPSBzdHlsZWQuZGl2YFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nVG9wfXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nQm90dG9tfXB4O1xuICBwYWRkaW5nLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuY2VsbFBhZGRpbmdTaWRlfXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGVhZGVyQ2VsbEJhY2tncm91bmR9O1xuXG4gIC5uLXNvcnQtaWR4IHtcbiAgICBmb250LXNpemU6IDlweDtcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZsZXgtZ3JvdzogMTtcblxuICAgIC5jb2wtbmFtZSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgLmNvbC1uYW1lX19sZWZ0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5jb2wtbmFtZV9fbmFtZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tb3JlIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG5cbiAgLmNvbC1uYW1lX19mb3JtYXQgc3ZnIHtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG5gO1xuXG50eXBlIENlbGxJbmZvID0ge1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBpc1Njcm9sbGluZzogYm9vbGVhbjtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcGFyZW50OiBhbnk7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIHN0eWxlOiBDU1NQcm9wZXJ0aWVzO1xufTtcblxudHlwZSBIZWFkZXJDZWxsUHJvcHMgPSB7XG4gIC8vIHBhc3NlZCBkb3duIGZyb20gcmVhY3QgdmlydHVhbGl6ZWQgR3JpZFxuICBjZWxsSW5mbzogQ2VsbEluZm87XG4gIGNvbHVtbnM6IERhdGFUYWJsZVByb3BzWydjb2x1bW5zJ107XG4gIGNvbE1ldGE/OiBDb2xNZXRhO1xuICBpc1Bpbm5lZD86IGJvb2xlYW47XG4gIHNob3dTdGF0cz86IGJvb2xlYW47XG4gIHByb3BzOiBEYXRhVGFibGVQcm9wcztcbiAgdG9nZ2xlTW9yZU9wdGlvbnM6IChtb3JlT3B0aW9uc0NvbHVtbjogc3RyaW5nKSA9PiB2b2lkO1xuICBtb3JlT3B0aW9uc0NvbHVtbjogbnVsbCB8IHN0cmluZztcbn07XG5cbmNvbnN0IEhlYWRlckNlbGxGYWN0b3J5ID0gKEZpZWxkVG9rZW46IFJlYWN0LkZDPEZpZWxkVG9rZW5Qcm9wcz4pID0+IHtcbiAgY29uc3QgSGVhZGVyQ2VsbCA9ICh7XG4gICAgY2VsbEluZm8sXG4gICAgY29sdW1ucyxcbiAgICBpc1Bpbm5lZCxcbiAgICBwcm9wcyxcbiAgICB0b2dnbGVNb3JlT3B0aW9ucyxcbiAgICBtb3JlT3B0aW9uc0NvbHVtblxuICB9OiBIZWFkZXJDZWxsUHJvcHMpID0+IHtcbiAgICBjb25zdCB7Y29sdW1uSW5kZXgsIGtleSwgc3R5bGV9ID0gY2VsbEluZm87XG4gICAgY29uc3Qge1xuICAgICAgY29sTWV0YSxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0VGFibGVDb2x1bW4sXG4gICAgICBwaW5UYWJsZUNvbHVtbixcbiAgICAgIGNvcHlUYWJsZUNvbHVtbixcbiAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3Nob3dGb3JtYXR0ZXIsIHNldFNob3dGb3JtYXR0ZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSW5kZXhdO1xuXG4gICAgY29uc3QgaXNHaG9zdCA9IGNvbHVtbi5naG9zdDtcbiAgICBjb25zdCBpc1NvcnRlZCA9IHNvcnRDb2x1bW5bY29sdW1uXTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSBjb2x1bW5JbmRleCA9PT0gMDtcbiAgICBjb25zdCBpc0Zvcm1hdHRlZCA9IEJvb2xlYW4oY29sTWV0YVtjb2x1bW5dPy5kaXNwbGF5Rm9ybWF0KTtcbiAgICBjb25zdCBmb3JtYXRMYWJlbHMgPSBpc0Zvcm1hdHRlZCA/IGdldEZpZWxkRm9ybWF0TGFiZWxzKGNvbE1ldGFbY29sdW1uXS50eXBlKSA6IFtdO1xuICAgIGNvbnN0IG9uU29ydFRhYmxlID0gdXNlQ2FsbGJhY2soKCkgPT4gc29ydFRhYmxlQ29sdW1uKGNvbHVtbiksIFtzb3J0VGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uVG9nZ2xlT3B0aW9uTWVudSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gdG9nZ2xlTW9yZU9wdGlvbnMoY29sdW1uKSxcbiAgICAgIFt0b2dnbGVNb3JlT3B0aW9ucywgY29sdW1uXVxuICAgICk7XG4gICAgY29uc3Qgb25QaW4gPSB1c2VDYWxsYmFjaygoKSA9PiBwaW5UYWJsZUNvbHVtbihjb2x1bW4pLCBbcGluVGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IGNvcHlUYWJsZUNvbHVtbihjb2x1bW4pLCBbY29weVRhYmxlQ29sdW1uLCBjb2x1bW5dKTtcbiAgICBjb25zdCBvblNldERpc3BsYXlGb3JtYXQgPSB1c2VDYWxsYmFjayhcbiAgICAgIGRpc3BsYXlGb3JtYXQgPT4ge1xuICAgICAgICBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0Py4oe1tjb2x1bW5dOiBkaXNwbGF5Rm9ybWF0LmZvcm1hdH0pO1xuICAgICAgfSxcbiAgICAgIFtjb2x1bW4sIHNldENvbHVtbkRpc3BsYXlGb3JtYXRdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uVG9nZ2xlRGlzcGxheUZvcm1hdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldFNob3dGb3JtYXR0ZXIoIXNob3dGb3JtYXR0ZXIpO1xuICAgIH0sIFtzaG93Rm9ybWF0dGVyXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEhlYWRlckNlbGxcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdoZWFkZXItY2VsbCcsIHtcbiAgICAgICAgICBbYGNvbHVtbi0ke2NvbHVtbkluZGV4fWBdOiB0cnVlLFxuICAgICAgICAgICdwaW5uZWQtaGVhZGVyLWNlbGwnOiBpc1Bpbm5lZCxcbiAgICAgICAgICAnZmlyc3QtY2VsbCc6IGZpcnN0Q2VsbFxuICAgICAgICB9KX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgZS5zaGlmdEtleSA/IHNvcnRUYWJsZUNvbHVtbihjb2x1bW4pIDogbnVsbDtcbiAgICAgICAgfX1cbiAgICAgICAgb25Eb3VibGVDbGljaz17b25Tb3J0VGFibGV9XG4gICAgICAgIHRpdGxlPXtjb2x1bW59XG4gICAgICA+XG4gICAgICAgIHtpc0dob3N0ID8gKFxuICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZGV0YWlsc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fbmFtZVwiPntjb2xNZXRhW2NvbHVtbl0ubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiY29sLW5hbWVfX3NvcnRcIiBvbkNsaWNrPXtvblNvcnRUYWJsZX0+XG4gICAgICAgICAgICAgICAgICAgIHtpc1NvcnRlZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICBpc1NvcnRlZCA9PT0gU09SVF9PUkRFUi5BU0NFTkRJTkcgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFycm93RG93biBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImNvbC1uYW1lX19mb3JtYXRcIiBvbkNsaWNrPXtvblRvZ2dsZURpc3BsYXlGb3JtYXR9PlxuICAgICAgICAgICAgICAgICAgICB7aXNGb3JtYXR0ZWQgPyA8SGFzaCBoZWlnaHQ9XCIxNHB4XCIgLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVyRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgICAgICAgICAgICAgIHRvcD17MH1cbiAgICAgICAgICAgICAgICAgICAgICBpc09wZW5lZD17aXNGb3JtYXR0ZWQgJiYgc2hvd0Zvcm1hdHRlcn1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PXtjb2xNZXRhW2NvbHVtbl0uZGlzcGxheUZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREaXNwbGF5Rm9ybWF0PXtvblNldERpc3BsYXlGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Zvcm1hdHRlcihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0TGFiZWxzPXtmb3JtYXRMYWJlbHN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cIm1vcmVcIiBvbkNsaWNrPXtvblRvZ2dsZU9wdGlvbk1lbnV9PlxuICAgICAgICAgICAgICAgICAgPFZlcnRUaHJlZURvdHMgaGVpZ2h0PVwiMTRweFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8RmllbGRUb2tlbiB0eXBlPXtjb2xNZXRhW2NvbHVtbl0udHlwZX0gLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8T3B0aW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICBpc09wZW5lZD17bW9yZU9wdGlvbnNDb2x1bW4gPT09IGNvbHVtbn1cbiAgICAgICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAgICAgICBjb2xNZXRhPXtjb2xNZXRhfVxuICAgICAgICAgICAgICAgIHRvZ2dsZU1vcmVPcHRpb25zPXt0b2dnbGVNb3JlT3B0aW9uc31cbiAgICAgICAgICAgICAgICBzb3J0VGFibGVDb2x1bW49e1xuICAgICAgICAgICAgICAgICAgc29ydFRhYmxlQ29sdW1uID8gbW9kZSA9PiBzb3J0VGFibGVDb2x1bW4oY29sdW1uLCBtb2RlKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwaW5UYWJsZUNvbHVtbj17b25QaW59XG4gICAgICAgICAgICAgICAgY29weVRhYmxlQ29sdW1uPXtvbkNvcHl9XG4gICAgICAgICAgICAgICAgc2V0RGlzcGxheUZvcm1hdD17c2V0Q29sdW1uRGlzcGxheUZvcm1hdCA/IG9uU2V0RGlzcGxheUZvcm1hdCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvU3R5bGVkSGVhZGVyQ2VsbD5cbiAgICApO1xuICB9O1xuICByZXR1cm4gSGVhZGVyQ2VsbDtcbn07XG5IZWFkZXJDZWxsRmFjdG9yeS5kZXBzID0gW0ZpZWxkVG9rZW5GYWN0b3J5XTtcbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxlQUFBLEdBQUFSLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxXQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFBNEUsSUFBQVUsZUFBQSxFQVo1RTtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JB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
@@ -63,7 +63,7 @@ export interface DataTableProps {
63
63
  sortColumn: SortColumn;
64
64
  sortTableColumn: (column: string, mode?: string) => void;
65
65
  pinTableColumn: (column: string) => void;
66
- setColumnDisplayFormat: (formats: {
66
+ setColumnDisplayFormat?: (formats: {
67
67
  [key: string]: string;
68
68
  }) => void;
69
69
  copyTableColumn: (column: string) => void;