kepler.gl 3.1.0-alpha.6 → 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 (190) hide show
  1. package/dist/src/actions/src/action-types.d.ts +2 -0
  2. package/dist/src/actions/src/ui-state-actions.d.ts +16 -0
  3. package/dist/src/ai-assistant/src/actions.d.ts +1 -1
  4. package/dist/src/ai-assistant/src/components/ai-assistant-component.d.ts +2 -1
  5. package/dist/src/ai-assistant/src/constants.d.ts +3 -3
  6. package/dist/src/ai-assistant/src/reducers/index.d.ts +1 -1
  7. package/dist/src/ai-assistant/src/tools/basemap-functions.d.ts +1 -1
  8. package/dist/src/ai-assistant/src/tools/filter-function.d.ts +1 -1
  9. package/dist/src/ai-assistant/src/tools/layer-creation-function.d.ts +1 -1
  10. package/dist/src/ai-assistant/src/tools/layer-style-function.d.ts +1 -1
  11. package/dist/src/ai-assistant/src/tools/loadurl-function.d.ts +1 -1
  12. package/dist/src/ai-assistant/src/tools/utils.d.ts +73 -0
  13. package/dist/src/components/src/common/data-table/index.d.ts +1 -1
  14. package/dist/src/components/src/common/data-table/option-dropdown.d.ts +3 -3
  15. package/dist/src/components/src/common/file-uploader/file-drop.d.ts +2 -2
  16. package/dist/src/components/src/kepler-gl.d.ts +5 -0
  17. package/dist/src/components/src/loading-indicator.d.ts +13 -0
  18. package/dist/src/components/src/map-container.d.ts +3 -0
  19. package/dist/src/constants/src/default-settings.d.ts +1 -0
  20. package/dist/src/duckdb/src/plugin.d.ts +1 -0
  21. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +13 -0
  22. package/dist/src/duckdb/src/table/duckdb-table.d.ts +7 -2
  23. package/dist/src/reducers/src/ui-state-updaters.d.ts +10 -0
  24. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -0
  25. package/dist/src/reducers/src/vis-state.d.ts +4 -0
  26. package/dist/src/utils/src/application-config.d.ts +2 -0
  27. package/dist/src/utils/src/observe-dimensions.d.ts +2 -1
  28. package/package.json +5 -3
  29. package/src/actions/dist/action-types.d.ts +2 -0
  30. package/src/actions/dist/action-types.js +2 -1
  31. package/src/actions/dist/ui-state-actions.d.ts +16 -0
  32. package/src/actions/dist/ui-state-actions.js +17 -2
  33. package/src/actions/package.json +8 -8
  34. package/src/actions/src/action-types.ts +1 -0
  35. package/src/actions/src/ui-state-actions.ts +22 -0
  36. package/src/ai-assistant/README.md +76 -0
  37. package/src/ai-assistant/dist/actions.d.ts +1 -1
  38. package/src/ai-assistant/dist/actions.js +2 -2
  39. package/src/ai-assistant/dist/components/ai-assistant-component.d.ts +2 -1
  40. package/src/ai-assistant/dist/components/ai-assistant-component.js +64 -23
  41. package/src/ai-assistant/dist/components/ai-assistant-config.js +67 -54
  42. package/src/ai-assistant/dist/constants.d.ts +3 -3
  43. package/src/ai-assistant/dist/constants.js +4 -4
  44. package/src/ai-assistant/dist/reducers/index.d.ts +1 -1
  45. package/src/ai-assistant/dist/reducers/index.js +2 -2
  46. package/src/ai-assistant/dist/tools/basemap-functions.d.ts +1 -1
  47. package/src/ai-assistant/dist/tools/basemap-functions.js +1 -1
  48. package/src/ai-assistant/dist/tools/filter-function.d.ts +1 -1
  49. package/src/ai-assistant/dist/tools/filter-function.js +9 -6
  50. package/src/ai-assistant/dist/tools/layer-creation-function.d.ts +1 -1
  51. package/src/ai-assistant/dist/tools/layer-creation-function.js +1 -1
  52. package/src/ai-assistant/dist/tools/layer-style-function.d.ts +1 -1
  53. package/src/ai-assistant/dist/tools/layer-style-function.js +1 -1
  54. package/src/ai-assistant/dist/tools/loadurl-function.d.ts +1 -1
  55. package/src/ai-assistant/dist/tools/loadurl-function.js +1 -1
  56. package/src/ai-assistant/dist/tools/utils.d.ts +73 -0
  57. package/src/ai-assistant/dist/tools/utils.js +211 -3
  58. package/src/ai-assistant/package.json +13 -9
  59. package/src/ai-assistant/src/actions.ts +2 -2
  60. package/src/ai-assistant/src/components/ai-assistant-component.tsx +56 -23
  61. package/src/ai-assistant/src/components/ai-assistant-config.tsx +63 -46
  62. package/src/ai-assistant/src/config/models.json +32 -0
  63. package/src/ai-assistant/src/constants.ts +7 -2
  64. package/src/ai-assistant/src/reducers/index.ts +2 -2
  65. package/src/ai-assistant/src/tools/basemap-functions.tsx +1 -1
  66. package/src/ai-assistant/src/tools/filter-function.tsx +11 -7
  67. package/src/ai-assistant/src/tools/layer-creation-function.tsx +1 -1
  68. package/src/ai-assistant/src/tools/layer-style-function.tsx +1 -1
  69. package/src/ai-assistant/src/tools/loadurl-function.tsx +1 -1
  70. package/src/ai-assistant/src/tools/utils.ts +212 -2
  71. package/src/cloud-providers/package.json +2 -2
  72. package/src/common-utils/package.json +3 -3
  73. package/src/components/dist/common/data-table/header-cell.js +10 -10
  74. package/src/components/dist/common/data-table/index.d.ts +1 -1
  75. package/src/components/dist/common/data-table/index.js +1 -1
  76. package/src/components/dist/common/data-table/option-dropdown.d.ts +3 -3
  77. package/src/components/dist/common/data-table/option-dropdown.js +5 -5
  78. package/src/components/dist/common/file-uploader/file-drop.d.ts +2 -2
  79. package/src/components/dist/common/file-uploader/file-drop.js +1 -1
  80. package/src/components/dist/common/portaled.js +1 -1
  81. package/src/components/dist/editor/editor.js +1 -1
  82. package/src/components/dist/kepler-gl.d.ts +5 -0
  83. package/src/components/dist/kepler-gl.js +7 -2
  84. package/src/components/dist/loading-indicator.d.ts +13 -0
  85. package/src/components/dist/loading-indicator.js +40 -0
  86. package/src/components/dist/map-container.d.ts +3 -0
  87. package/src/components/dist/map-container.js +11 -3
  88. package/src/components/dist/modals/save-map-modal.js +4 -3
  89. package/src/components/package.json +15 -15
  90. package/src/components/src/common/data-table/header-cell.tsx +5 -3
  91. package/src/components/src/common/data-table/index.tsx +1 -1
  92. package/src/components/src/common/data-table/option-dropdown.tsx +7 -7
  93. package/src/components/src/common/file-uploader/file-drop.tsx +11 -11
  94. package/src/components/src/common/portaled.tsx +12 -12
  95. package/src/components/src/editor/editor.tsx +3 -3
  96. package/src/components/src/kepler-gl.tsx +7 -2
  97. package/src/components/src/loading-indicator.tsx +49 -0
  98. package/src/components/src/map-container.tsx +19 -1
  99. package/src/components/src/modals/save-map-modal.tsx +6 -2
  100. package/src/constants/dist/default-settings.d.ts +1 -0
  101. package/src/constants/dist/default-settings.js +13 -9
  102. package/src/constants/dist/keyevent.js +1 -1
  103. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/80/7a7c561d7985e92aab7b9683e7baf5a0286b353a8f2609c4c71099f668d012be027929e4bbac937f9aa0c9a61be3bd4405136f582895f05aa0313c8efa42 +1 -0
  104. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8f/f6/b66955867599392dc69ff1db64419e83c087a82c2e3d4b6418d49ac6bc80e3200dd6c86cdfd4a2cf98ce573f71a5281b86ba3df8a7210e02544f63054191 +1 -0
  105. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bd/ba/47ea8fcb11ecd5cd47ad867052e58b1f7e0c8dc5f8918a36fe90eaf45981 +2 -0
  106. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/f0/6e/aadf3c48345aa72e7b2fb92e8c9788d04986b55caf83daa3fbd749c37c44 +2 -0
  107. package/src/constants/package.json +2 -2
  108. package/src/constants/src/default-settings.ts +11 -5
  109. package/src/constants/src/keyevent.ts +2 -2
  110. package/src/constants/umd/keplergl.min.js +1 -1
  111. package/src/deckgl-arrow-layers/package.json +1 -1
  112. package/src/deckgl-layers/package.json +4 -4
  113. package/src/duckdb/dist/components/preview-data-panel.js +2 -11
  114. package/src/duckdb/dist/components/sql-panel.js +7 -3
  115. package/src/duckdb/dist/components/tree.js +5 -4
  116. package/src/duckdb/dist/plugin.d.ts +1 -0
  117. package/src/duckdb/dist/plugin.js +9 -2
  118. package/src/duckdb/dist/processors/data-processor.js +4 -5
  119. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +13 -0
  120. package/src/duckdb/dist/table/duckdb-table-utils.js +110 -0
  121. package/src/duckdb/dist/table/duckdb-table.d.ts +7 -2
  122. package/src/duckdb/dist/table/duckdb-table.js +189 -44
  123. package/src/duckdb/package.json +6 -6
  124. package/src/duckdb/src/components/preview-data-panel.tsx +0 -5
  125. package/src/duckdb/src/components/sql-panel.tsx +4 -2
  126. package/src/duckdb/src/components/tree.tsx +5 -1
  127. package/src/duckdb/src/plugin.ts +8 -1
  128. package/src/duckdb/src/processors/data-processor.ts +3 -4
  129. package/src/duckdb/src/table/duckdb-table-utils.ts +106 -0
  130. package/src/duckdb/src/table/duckdb-table.ts +134 -33
  131. package/src/effects/package.json +5 -5
  132. package/src/layers/dist/icon-layer/icon-layer.js +1 -1
  133. package/src/layers/dist/index.d.ts +3 -0
  134. package/src/layers/dist/index.js +6 -7
  135. package/src/layers/dist/point-layer/point-layer.d.ts +1 -1
  136. package/src/layers/dist/point-layer/point-layer.js +8 -2
  137. package/src/layers/package.json +9 -9
  138. package/src/layers/src/icon-layer/icon-layer.ts +8 -10
  139. package/src/layers/src/index.ts +5 -5
  140. package/src/layers/src/point-layer/point-layer.ts +6 -1
  141. package/src/localization/package.json +1 -1
  142. package/src/processors/dist/data-processor.js +2 -4
  143. package/src/processors/package.json +7 -7
  144. package/src/processors/src/data-processor.ts +1 -3
  145. package/src/reducers/dist/ui-state-updaters.d.ts +10 -0
  146. package/src/reducers/dist/ui-state-updaters.js +22 -2
  147. package/src/reducers/dist/ui-state.js +2 -2
  148. package/src/reducers/dist/vis-state-updaters.d.ts +1 -0
  149. package/src/reducers/dist/vis-state-updaters.js +21 -5
  150. package/src/reducers/dist/vis-state.d.ts +4 -0
  151. package/src/reducers/package.json +16 -16
  152. package/src/reducers/src/ui-state-updaters.ts +24 -0
  153. package/src/reducers/src/ui-state.ts +3 -1
  154. package/src/reducers/src/vis-state-updaters.ts +24 -5
  155. package/src/schemas/dist/dataset-schema.js +38 -2
  156. package/src/schemas/package.json +8 -7
  157. package/src/schemas/src/dataset-schema.ts +43 -1
  158. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/aa/96c67b383dbcd2b95625113a5389c6078fd8a53e6fc73a054229709f2dac1e0a409e7117049485a569fbebf8434a319451842671398904bfe1a7f7b5991c +1 -0
  159. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/aa/228fbff58007b23eea5eb6cc7d2da1f0af1d8a7024129a416ea88b4df0ad7afc7aec93b09f3dd42a98f1d6a6f4dce6b53204818da85ef5becc42f928a64d +1 -0
  160. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/40/72/cac221d8459e6b743bc62ecdb370ed854b21ec30d3f7f4c06c7d1d7ffde2 +2 -0
  161. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c1/39/f7cd1d5947ec6e5d82bfa07041271344eb02f9e67bf5823acf2f22c2d01f +2 -0
  162. package/src/styles/package.json +2 -2
  163. package/src/styles/umd/keplergl.min.js +1 -1
  164. package/src/table/dist/dataset-utils.js +10 -4
  165. package/src/table/package.json +5 -5
  166. package/src/table/src/dataset-utils.ts +7 -1
  167. package/src/tasks/package.json +2 -2
  168. package/src/types/package.json +1 -1
  169. package/src/types/reducers.d.ts +2 -0
  170. package/src/utils/dist/application-config.d.ts +2 -0
  171. package/src/utils/dist/application-config.js +4 -2
  172. package/src/utils/dist/data-utils.js +14 -2
  173. package/src/utils/dist/dataset-utils.js +5 -3
  174. package/src/utils/dist/dom-to-image.js +1 -1
  175. package/src/utils/dist/dom-utils.js +1 -1
  176. package/src/utils/dist/map-style-utils/mapbox-gl-style-editor.js +7 -1
  177. package/src/utils/dist/observe-dimensions.d.ts +2 -1
  178. package/src/utils/dist/observe-dimensions.js +10 -4
  179. package/src/utils/dist/utils.js +1 -1
  180. package/src/utils/package.json +4 -4
  181. package/src/utils/src/application-config.ts +9 -1
  182. package/src/utils/src/data-utils.ts +13 -1
  183. package/src/utils/src/dataset-utils.ts +1 -1
  184. package/src/utils/src/dom-to-image.ts +5 -6
  185. package/src/utils/src/dom-utils.ts +15 -15
  186. package/src/utils/src/map-style-utils/mapbox-gl-style-editor.ts +6 -0
  187. package/src/utils/src/observe-dimensions.ts +9 -4
  188. package/src/utils/src/utils.ts +8 -8
  189. package/umd/keplergl.min.css +1 -1
  190. package/umd/keplergl.min.js +1499 -1428
@@ -1,5 +1,14 @@
1
1
  import { Layer } from '@kepler.gl/layers';
2
2
  import { Datasets, KeplerTable } from '@kepler.gl/table';
3
+ import { SpatialJoinGeometries } from '@openassistant/geoda';
4
+ import { AddDataToMapPayload } from '@kepler.gl/types';
5
+ /**
6
+ * Check if the dataset exists
7
+ * @param datasets The kepler.gl datasets
8
+ * @param datasetName The name of the dataset
9
+ * @param functionName The name of the function
10
+ * @returns The result of the check
11
+ */
3
12
  export declare function checkDatasetNotExists(datasets: Datasets, datasetName: string, functionName: string): {
4
13
  name: string;
5
14
  result: {
@@ -7,6 +16,13 @@ export declare function checkDatasetNotExists(datasets: Datasets, datasetName: s
7
16
  details: string;
8
17
  };
9
18
  } | null;
19
+ /**
20
+ * Check if the field exists
21
+ * @param dataset The kepler.gl dataset
22
+ * @param fieldName The name of the field
23
+ * @param functionName The name of the function
24
+ * @returns The result of the check
25
+ */
10
26
  export declare function checkFieldNotExists(dataset: KeplerTable, fieldName: string, functionName: string): {
11
27
  type: string;
12
28
  name: string;
@@ -15,7 +31,64 @@ export declare function checkFieldNotExists(dataset: KeplerTable, fieldName: str
15
31
  details: string;
16
32
  };
17
33
  } | null;
34
+ /**
35
+ * Interpolate the colors from the original colors with the given number of colors
36
+ * @param originalColors The original colors
37
+ * @param numberOfColors The number of colors
38
+ * @returns The interpolated colors
39
+ */
18
40
  export declare function interpolateColor(originalColors: string[], numberOfColors: number): string[];
41
+ /**
42
+ * Get the values from a dataset for a variable
43
+ * @param datasets
44
+ * @param datasetName
45
+ * @param variableName
46
+ * @returns {number[]}
47
+ */
19
48
  export declare function getValuesFromDataset(datasets: Datasets, datasetName: string, variableName: string): number[];
49
+ /**
50
+ * Get the x and y values from a dataset for a scatterplot
51
+ * @param datasets
52
+ * @param datasetName
53
+ * @param xVariableName
54
+ * @param yVariableName
55
+ * @returns {x: number[], y: number[]}
56
+ */
57
+ export declare function getScatterplotValuesFromDataset(datasets: Datasets, datasetName: string, xVariableName: string, yVariableName: string): {
58
+ x: number[];
59
+ y: number[];
60
+ };
61
+ /**
62
+ * Highlight the rows in a dataset
63
+ * @param datasets The kepler.gl datasets
64
+ * @param layers The kepler.gl layers
65
+ * @param datasetName The name of the dataset
66
+ * @param selectedRowIndices The indices of the rows to highlight
67
+ * @param layerSetIsValid The function to set the layer validity
68
+ */
20
69
  export declare function highlightRows(datasets: Datasets, layers: Layer[], datasetName: string, selectedRowIndices: number[], layerSetIsValid: (layer: Layer, isValid: boolean) => void): void;
70
+ /**
71
+ * Get the dataset context, which is used to provide the dataset information to the AI assistant
72
+ * @param datasets The kepler.gl datasets
73
+ * @param layers The kepler.gl layers
74
+ * @returns The dataset context
75
+ */
21
76
  export declare function getDatasetContext(datasets: Datasets, layers: Layer[]): string;
77
+ /**
78
+ * Get the geometries from a dataset
79
+ * @param datasets The kepler.gl datasets
80
+ * @param layers The kepler.gl layers
81
+ * @param layerData The layer data
82
+ * @param datasetName The name of the dataset
83
+ * @returns The geometries
84
+ */
85
+ export declare function getGeometriesFromDataset(datasets: Datasets, layers: Layer[], layerData: any[], datasetName: string): SpatialJoinGeometries;
86
+ /**
87
+ * Save the data as a new dataset by joining it with the left dataset
88
+ * @param datasets The kepler.gl datasets
89
+ * @param datasetName The name of the left dataset
90
+ * @param data The data to save
91
+ * @param addDataToMap The function to add the data to the map
92
+ */
93
+ export declare function saveAsDataset(datasets: Datasets, datasetName: string, data: Record<string, number[]>, addDataToMap: (data: AddDataToMapPayload) => void): void;
94
+ export declare function highlightRowsByColumnValues(datasets: Datasets, layers: Layer[], datasetName: string, columnName: string, selectedValues: unknown[], layerSetIsValid: (layer: Layer, isValid: boolean) => void): void;
@@ -7,14 +7,29 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.checkDatasetNotExists = checkDatasetNotExists;
8
8
  exports.checkFieldNotExists = checkFieldNotExists;
9
9
  exports.getDatasetContext = getDatasetContext;
10
+ exports.getGeometriesFromDataset = getGeometriesFromDataset;
11
+ exports.getScatterplotValuesFromDataset = getScatterplotValuesFromDataset;
10
12
  exports.getValuesFromDataset = getValuesFromDataset;
11
13
  exports.highlightRows = highlightRows;
14
+ exports.highlightRowsByColumnValues = highlightRowsByColumnValues;
12
15
  exports.interpolateColor = interpolateColor;
16
+ exports.saveAsDataset = saveAsDataset;
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
19
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
20
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
21
  var _colorInterpolate = _interopRequireDefault(require("color-interpolate"));
22
+ var _constants = require("@kepler.gl/constants");
15
23
  // SPDX-License-Identifier: MIT
16
24
  // Copyright contributors to the kepler.gl project
17
25
 
26
+ /**
27
+ * Check if the dataset exists
28
+ * @param datasets The kepler.gl datasets
29
+ * @param datasetName The name of the dataset
30
+ * @param functionName The name of the function
31
+ * @returns The result of the check
32
+ */
18
33
  function checkDatasetNotExists(datasets, datasetName, functionName) {
19
34
  var datasetId = Object.keys(datasets).find(function (dataId) {
20
35
  return datasets[dataId].label === datasetName;
@@ -30,6 +45,14 @@ function checkDatasetNotExists(datasets, datasetName, functionName) {
30
45
  }
31
46
  return null;
32
47
  }
48
+
49
+ /**
50
+ * Check if the field exists
51
+ * @param dataset The kepler.gl dataset
52
+ * @param fieldName The name of the field
53
+ * @param functionName The name of the function
54
+ * @returns The result of the check
55
+ */
33
56
  function checkFieldNotExists(dataset, fieldName, functionName) {
34
57
  var field = dataset.fields.find(function (f) {
35
58
  return f.name === fieldName;
@@ -48,6 +71,13 @@ function checkFieldNotExists(dataset, fieldName, functionName) {
48
71
  }
49
72
  return null;
50
73
  }
74
+
75
+ /**
76
+ * Interpolate the colors from the original colors with the given number of colors
77
+ * @param originalColors The original colors
78
+ * @param numberOfColors The number of colors
79
+ * @returns The interpolated colors
80
+ */
51
81
  function interpolateColor(originalColors, numberOfColors) {
52
82
  if (originalColors.length === numberOfColors) {
53
83
  return originalColors;
@@ -67,6 +97,14 @@ function interpolateColor(originalColors, numberOfColors) {
67
97
  });
68
98
  return hexColors;
69
99
  }
100
+
101
+ /**
102
+ * Get the values from a dataset for a variable
103
+ * @param datasets
104
+ * @param datasetName
105
+ * @param variableName
106
+ * @returns {number[]}
107
+ */
70
108
  function getValuesFromDataset(datasets, datasetName, variableName) {
71
109
  // find which dataset has the variableName
72
110
  var datasetId = Object.keys(datasets).find(function (dataId) {
@@ -83,6 +121,32 @@ function getValuesFromDataset(datasets, datasetName, variableName) {
83
121
  }
84
122
  return [];
85
123
  }
124
+
125
+ /**
126
+ * Get the x and y values from a dataset for a scatterplot
127
+ * @param datasets
128
+ * @param datasetName
129
+ * @param xVariableName
130
+ * @param yVariableName
131
+ * @returns {x: number[], y: number[]}
132
+ */
133
+ function getScatterplotValuesFromDataset(datasets, datasetName, xVariableName, yVariableName) {
134
+ var xValues = getValuesFromDataset(datasets, datasetName, xVariableName);
135
+ var yValues = getValuesFromDataset(datasets, datasetName, yVariableName);
136
+ return {
137
+ x: xValues,
138
+ y: yValues
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Highlight the rows in a dataset
144
+ * @param datasets The kepler.gl datasets
145
+ * @param layers The kepler.gl layers
146
+ * @param datasetName The name of the dataset
147
+ * @param selectedRowIndices The indices of the rows to highlight
148
+ * @param layerSetIsValid The function to set the layer validity
149
+ */
86
150
  function highlightRows(datasets, layers, datasetName, selectedRowIndices, layerSetIsValid) {
87
151
  // update the filteredIndex in the dataset
88
152
  var datasetId = Object.keys(datasets).find(function (dataId) {
@@ -99,10 +163,17 @@ function highlightRows(datasets, layers, datasetName, selectedRowIndices, layerS
99
163
  selectLayers.forEach(function (layer) {
100
164
  layer.formatLayerData(datasets);
101
165
  // trigger a re-render using layerSetIsValid() to update the top layer
102
- layerSetIsValid(selectLayers[0], true);
166
+ layerSetIsValid(layer, true);
103
167
  });
104
168
  }
105
169
  }
170
+
171
+ /**
172
+ * Get the dataset context, which is used to provide the dataset information to the AI assistant
173
+ * @param datasets The kepler.gl datasets
174
+ * @param layers The kepler.gl layers
175
+ * @returns The dataset context
176
+ */
106
177
  function getDatasetContext(datasets, layers) {
107
178
  var context = 'Please remember the following dataset context:';
108
179
  var dataMeta = Object.values(datasets).map(function (dataset) {
@@ -118,11 +189,148 @@ function getDatasetContext(datasets, layers) {
118
189
  return {
119
190
  id: layer.id,
120
191
  label: layer.config.label,
121
- type: layer.type
192
+ type: layer.type,
193
+ geometryMode: layer.config.columnMode,
194
+ // get the valid geometry columns as string
195
+ geometryColumns: Object.fromEntries(Object.entries(layer.config.columns).filter(function (_ref2) {
196
+ var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
197
+ value = _ref3[1];
198
+ return value !== null;
199
+ }).map(function (_ref4) {
200
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
201
+ key = _ref5[0],
202
+ value = _ref5[1];
203
+ return [key, (0, _typeof2["default"])(value) === 'object' && value !== null ? Object.fromEntries(Object.entries(value).filter(function (_ref6) {
204
+ var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
205
+ v = _ref7[1];
206
+ return v !== null;
207
+ })) : value];
208
+ }))
122
209
  };
123
210
  })
124
211
  };
125
212
  });
126
213
  return "".concat(context, "\n").concat(JSON.stringify(dataMeta));
127
214
  }
128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sb3JJbnRlcnBvbGF0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiY2hlY2tEYXRhc2V0Tm90RXhpc3RzIiwiZGF0YXNldHMiLCJkYXRhc2V0TmFtZSIsImZ1bmN0aW9uTmFtZSIsImRhdGFzZXRJZCIsIk9iamVjdCIsImtleXMiLCJmaW5kIiwiZGF0YUlkIiwibGFiZWwiLCJuYW1lIiwicmVzdWx0Iiwic3VjY2VzcyIsImRldGFpbHMiLCJjb25jYXQiLCJqb2luIiwiY2hlY2tGaWVsZE5vdEV4aXN0cyIsImRhdGFzZXQiLCJmaWVsZE5hbWUiLCJmaWVsZCIsImZpZWxkcyIsImYiLCJ0eXBlIiwibWFwIiwiaW50ZXJwb2xhdGVDb2xvciIsIm9yaWdpbmFsQ29sb3JzIiwibnVtYmVyT2ZDb2xvcnMiLCJsZW5ndGgiLCJpbnRlcnAiLCJpbnRlcnBvbGF0ZSIsImNvbG9ycyIsIkFycmF5IiwiZnJvbSIsIl8iLCJqIiwiaGV4Q29sb3JzIiwiY29sb3IiLCJyZ2IiLCJtYXRjaCIsImMiLCJwYXJzZUludCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJnZXRWYWx1ZXNGcm9tRGF0YXNldCIsInZhcmlhYmxlTmFtZSIsImkiLCJnZXRWYWx1ZSIsImhpZ2hsaWdodFJvd3MiLCJsYXllcnMiLCJzZWxlY3RlZFJvd0luZGljZXMiLCJsYXllclNldElzVmFsaWQiLCJmaWx0ZXJlZEluZGV4IiwiYWxsSW5kZXhlcyIsInNlbGVjdExheWVycyIsImZpbHRlciIsImxheWVyIiwiY29uZmlnIiwiaWQiLCJmb3JFYWNoIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZ2V0RGF0YXNldENvbnRleHQiLCJjb250ZXh0IiwiZGF0YU1ldGEiLCJ2YWx1ZXMiLCJfZGVmaW5lUHJvcGVydHkyIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSAnY29sb3ItaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge0RhdGFzZXRzLCBLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0RhdGFzZXROb3RFeGlzdHMoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmdcbikge1xuICBjb25zdCBkYXRhc2V0SWQgPSBPYmplY3Qua2V5cyhkYXRhc2V0cykuZmluZChkYXRhSWQgPT4gZGF0YXNldHNbZGF0YUlkXS5sYWJlbCA9PT0gZGF0YXNldE5hbWUpO1xuICBpZiAoIWRhdGFzZXRJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGRldGFpbHM6IGBEYXRhc2V0IG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgb25lIGZyb20gdGhlIGZvbGxvd2luZyBkYXRhc2V0czogJHtPYmplY3Qua2V5cyhcbiAgICAgICAgICBkYXRhc2V0c1xuICAgICAgICApLmpvaW4oJywgJyl9YFxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0ZpZWxkTm90RXhpc3RzKGRhdGFzZXQ6IEtlcGxlclRhYmxlLCBmaWVsZE5hbWU6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWZpZWxkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsYXllcicsXG4gICAgICBuYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGRldGFpbHM6IGBGaWVsZCBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG9uZSBmcm9tIHRoZSBmb2xsb3dpbmcgZmllbGRzOiAke2RhdGFzZXQuZmllbGRzXG4gICAgICAgICAgLm1hcChmID0+IGYubmFtZSlcbiAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlQ29sb3Iob3JpZ2luYWxDb2xvcnM6IHN0cmluZ1tdLCBudW1iZXJPZkNvbG9yczogbnVtYmVyKSB7XG4gIGlmIChvcmlnaW5hbENvbG9ycy5sZW5ndGggPT09IG51bWJlck9mQ29sb3JzKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsQ29sb3JzO1xuICB9XG4gIGNvbnN0IGludGVycCA9IGludGVycG9sYXRlKG9yaWdpbmFsQ29sb3JzKTtcbiAgY29uc3QgY29sb3JzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBudW1iZXJPZkNvbG9yc30sIChfLCBqKSA9PiBpbnRlcnAoaiAvIChudW1iZXJPZkNvbG9ycyAtIDEpKSk7XG4gIC8vIGNvbnZlcnQgY29sb3JzIGZyb20gJ3JnYigyNTUsIDI1NSwgMjU1KScgdG8gJyNmZmZmZmYnXG4gIGNvbnN0IGhleENvbG9ycyA9IGNvbG9ycy5tYXAoY29sb3IgPT4ge1xuICAgIGNvbnN0IHJnYiA9IGNvbG9yLm1hdGNoKC9cXGQrL2cpO1xuICAgIHJldHVybiBgIyR7cmdiPy5tYXAoYyA9PiBwYXJzZUludChjKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YDtcbiAgfSk7XG4gIHJldHVybiBoZXhDb2xvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZXNGcm9tRGF0YXNldChcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBkYXRhc2V0TmFtZTogc3RyaW5nLFxuICB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuKTogbnVtYmVyW10ge1xuICAvLyBmaW5kIHdoaWNoIGRhdGFzZXQgaGFzIHRoZSB2YXJpYWJsZU5hbWVcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHJldHVybiBbXTtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG4gIGlmIChkYXRhc2V0KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogZGF0YXNldC5sZW5ndGh9LCAoXywgaSkgPT4gZGF0YXNldC5nZXRWYWx1ZSh2YXJpYWJsZU5hbWUsIGkpKTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRSb3dzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgc2VsZWN0ZWRSb3dJbmRpY2VzOiBudW1iZXJbXSxcbiAgbGF5ZXJTZXRJc1ZhbGlkOiAobGF5ZXI6IExheWVyLCBpc1ZhbGlkOiBib29sZWFuKSA9PiB2b2lkXG4pIHtcbiAgLy8gdXBkYXRlIHRoZSBmaWx0ZXJlZEluZGV4IGluIHRoZSBkYXRhc2V0XG4gIGNvbnN0IGRhdGFzZXRJZCA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5maW5kKGRhdGFJZCA9PiBkYXRhc2V0c1tkYXRhSWRdLmxhYmVsID09PSBkYXRhc2V0TmFtZSk7XG4gIGlmICghZGF0YXNldElkKSByZXR1cm47XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhc2V0SWRdO1xuICBpZiAoZGF0YXNldCkge1xuICAgIGRhdGFzZXQuZmlsdGVyZWRJbmRleCA9XG4gICAgICBzZWxlY3RlZFJvd0luZGljZXMubGVuZ3RoID09PSAwID8gZGF0YXNldC5hbGxJbmRleGVzIDogc2VsZWN0ZWRSb3dJbmRpY2VzO1xuICAgIC8vIGdldCBhbGwgbGF5ZXJzIHRoYXQgdXNlIHRoaXMgZGF0YXNldFxuICAgIGNvbnN0IHNlbGVjdExheWVycyA9IGxheWVycy5maWx0ZXIobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCk7XG4gICAgc2VsZWN0TGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgICAgbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzKTtcbiAgICAgIC8vIHRyaWdnZXIgYSByZS1yZW5kZXIgdXNpbmcgbGF5ZXJTZXRJc1ZhbGlkKCkgdG8gdXBkYXRlIHRoZSB0b3AgbGF5ZXJcbiAgICAgIGxheWVyU2V0SXNWYWxpZChzZWxlY3RMYXllcnNbMF0sIHRydWUpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhc2V0Q29udGV4dChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyczogTGF5ZXJbXSkge1xuICBjb25zdCBjb250ZXh0ID0gJ1BsZWFzZSByZW1lbWJlciB0aGUgZm9sbG93aW5nIGRhdGFzZXQgY29udGV4dDonO1xuICBjb25zdCBkYXRhTWV0YSA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLm1hcCgoZGF0YXNldDogS2VwbGVyVGFibGUpID0+ICh7XG4gICAgZGF0YXNldE5hbWU6IGRhdGFzZXQubGFiZWwsXG4gICAgZGF0YXNldElkOiBkYXRhc2V0LmlkLFxuICAgIGZpZWxkczogZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+ICh7W2ZpZWxkLm5hbWVdOiBmaWVsZC50eXBlfSkpLFxuICAgIGxheWVyczogbGF5ZXJzXG4gICAgICAuZmlsdGVyKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpXG4gICAgICAubWFwKGxheWVyID0+ICh7aWQ6IGxheWVyLmlkLCBsYWJlbDogbGF5ZXIuY29uZmlnLmxhYmVsLCB0eXBlOiBsYXllci50eXBlfSkpXG4gIH0pKTtcbiAgcmV0dXJuIGAke2NvbnRleHR9XFxuJHtKU09OLnN0cmluZ2lmeShkYXRhTWV0YSl9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFIQTtBQUNBOztBQU9PLFNBQVNDLHFCQUFxQkEsQ0FDbkNDLFFBQWtCLEVBQ2xCQyxXQUFtQixFQUNuQkMsWUFBb0IsRUFDcEI7RUFDQSxJQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTCxRQUFRLENBQUMsQ0FBQ00sSUFBSSxDQUFDLFVBQUFDLE1BQU07SUFBQSxPQUFJUCxRQUFRLENBQUNPLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEtBQUtQLFdBQVc7RUFBQSxFQUFDO0VBQzlGLElBQUksQ0FBQ0UsU0FBUyxFQUFFO0lBQ2QsT0FBTztNQUNMTSxJQUFJLEVBQUVQLFlBQVk7TUFDbEJRLE1BQU0sRUFBRTtRQUNOQyxPQUFPLEVBQUUsS0FBSztRQUNkQyxPQUFPLHdFQUFBQyxNQUFBLENBQXdFVCxNQUFNLENBQUNDLElBQUksQ0FDeEZMLFFBQ0YsQ0FBQyxDQUFDYyxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2Q7SUFDRixDQUFDO0VBQ0g7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVPLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsT0FBb0IsRUFBRUMsU0FBaUIsRUFBRWYsWUFBb0IsRUFBRTtFQUNqRyxJQUFNZ0IsS0FBSyxHQUFHRixPQUFPLENBQUNHLE1BQU0sQ0FBQ2IsSUFBSSxDQUFDLFVBQUFjLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNYLElBQUksS0FBS1EsU0FBUztFQUFBLEVBQUM7RUFDNUQsSUFBSSxDQUFDQyxLQUFLLEVBQUU7SUFDVixPQUFPO01BQ0xHLElBQUksRUFBRSxPQUFPO01BQ2JaLElBQUksRUFBRVAsWUFB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
215
+
216
+ /**
217
+ * Get the geometries from a dataset
218
+ * @param datasets The kepler.gl datasets
219
+ * @param layers The kepler.gl layers
220
+ * @param layerData The layer data
221
+ * @param datasetName The name of the dataset
222
+ * @returns The geometries
223
+ */
224
+ function getGeometriesFromDataset(datasets, layers, layerData, datasetName) {
225
+ var datasetId = Object.keys(datasets).find(function (dataId) {
226
+ return datasets[dataId].label === datasetName;
227
+ });
228
+ if (!datasetId) return [];
229
+ var dataset = datasets[datasetId];
230
+
231
+ // get the index of the layer
232
+ var layerIndex = layers.findIndex(function (layer) {
233
+ return layer.config.dataId === dataset.id;
234
+ });
235
+ if (layerIndex === -1) return [];
236
+ var geometries = layerData[layerIndex];
237
+ return geometries === null || geometries === void 0 ? void 0 : geometries.data;
238
+ }
239
+
240
+ /**
241
+ * Save the data as a new dataset by joining it with the left dataset
242
+ * @param datasets The kepler.gl datasets
243
+ * @param datasetName The name of the left dataset
244
+ * @param data The data to save
245
+ * @param addDataToMap The function to add the data to the map
246
+ */
247
+ function saveAsDataset(datasets, datasetName, data, addDataToMap) {
248
+ // find datasetId from datasets
249
+ var datasetId = Object.keys(datasets).find(function (dataId) {
250
+ return datasets[dataId].label === datasetName;
251
+ });
252
+ if (!datasetId) return;
253
+ var leftDataset = datasets[datasetId];
254
+ var numRows = leftDataset.length;
255
+ var fields = [].concat((0, _toConsumableArray2["default"])(Object.keys(data).map(function (fieldName, index) {
256
+ return {
257
+ name: fieldName,
258
+ id: "".concat(fieldName, "_").concat(index),
259
+ displayName: fieldName,
260
+ type: determineFieldType(data[fieldName][0])
261
+ };
262
+ })), (0, _toConsumableArray2["default"])(leftDataset.fields.map(function (field, index) {
263
+ return {
264
+ name: field.name,
265
+ id: field.id || "".concat(field.name, "_").concat(index),
266
+ displayName: field.displayName,
267
+ type: field.type
268
+ };
269
+ })));
270
+
271
+ // Pre-calculate data values array
272
+ var dataValues = Object.values(data);
273
+ var rows = Array(numRows).fill(null).map(function (_, rowIdx) {
274
+ return [].concat((0, _toConsumableArray2["default"])(dataValues.map(function (col) {
275
+ return col[rowIdx];
276
+ })), (0, _toConsumableArray2["default"])(leftDataset.fields.map(function (field) {
277
+ return leftDataset.getValue(field.name, rowIdx);
278
+ })));
279
+ });
280
+
281
+ // create new dataset
282
+ var newDatasetName = "".concat(datasetName, "_joined");
283
+ var newDataset = {
284
+ info: {
285
+ id: newDatasetName,
286
+ label: newDatasetName
287
+ },
288
+ data: {
289
+ fields: fields,
290
+ rows: rows
291
+ }
292
+ };
293
+ addDataToMap({
294
+ datasets: [newDataset],
295
+ options: {
296
+ autoCreateLayers: true,
297
+ centerMap: true
298
+ }
299
+ });
300
+ }
301
+
302
+ /**
303
+ * Helper function to determine field type
304
+ * @param value The value to determine the field type
305
+ * @returns The field type
306
+ */
307
+ function determineFieldType(value) {
308
+ return typeof value === 'number' ? Number.isInteger(value) ? _constants.ALL_FIELD_TYPES.integer : _constants.ALL_FIELD_TYPES.real : _constants.ALL_FIELD_TYPES.string;
309
+ }
310
+ function highlightRowsByColumnValues(datasets, layers, datasetName, columnName, selectedValues, layerSetIsValid) {
311
+ var datasetId = Object.keys(datasets).find(function (dataId) {
312
+ return datasets[dataId].label === datasetName;
313
+ });
314
+ if (!datasetId) return;
315
+ var dataset = datasets[datasetId];
316
+ if (dataset) {
317
+ // get the values of the column
318
+ var values = Array.from({
319
+ length: dataset.length
320
+ }, function (_, i) {
321
+ return dataset.getValue(columnName, i);
322
+ });
323
+ // create a dict using the values
324
+ var valueDict = values.reduce(function (acc, value, index) {
325
+ acc[value] = index;
326
+ return acc;
327
+ }, {});
328
+ // need to fix the type error of value here
329
+ var selectedIndices = selectedValues.map(function (value) {
330
+ return valueDict[value];
331
+ });
332
+ // highlight the rows
333
+ highlightRows(datasets, layers, datasetName, selectedIndices, layerSetIsValid);
334
+ }
335
+ }
336
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sb3JJbnRlcnBvbGF0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsImNoZWNrRGF0YXNldE5vdEV4aXN0cyIsImRhdGFzZXRzIiwiZGF0YXNldE5hbWUiLCJmdW5jdGlvbk5hbWUiLCJkYXRhc2V0SWQiLCJPYmplY3QiLCJrZXlzIiwiZmluZCIsImRhdGFJZCIsImxhYmVsIiwibmFtZSIsInJlc3VsdCIsInN1Y2Nlc3MiLCJkZXRhaWxzIiwiY29uY2F0Iiwiam9pbiIsImNoZWNrRmllbGROb3RFeGlzdHMiLCJkYXRhc2V0IiwiZmllbGROYW1lIiwiZmllbGQiLCJmaWVsZHMiLCJmIiwidHlwZSIsIm1hcCIsImludGVycG9sYXRlQ29sb3IiLCJvcmlnaW5hbENvbG9ycyIsIm51bWJlck9mQ29sb3JzIiwibGVuZ3RoIiwiaW50ZXJwIiwiaW50ZXJwb2xhdGUiLCJjb2xvcnMiLCJBcnJheSIsImZyb20iLCJfIiwiaiIsImhleENvbG9ycyIsImNvbG9yIiwicmdiIiwibWF0Y2giLCJjIiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiZ2V0VmFsdWVzRnJvbURhdGFzZXQiLCJ2YXJpYWJsZU5hbWUiLCJpIiwiZ2V0VmFsdWUiLCJnZXRTY2F0dGVycGxvdFZhbHVlc0Zyb21EYXRhc2V0IiwieFZhcmlhYmxlTmFtZSIsInlWYXJpYWJsZU5hbWUiLCJ4VmFsdWVzIiwieVZhbHVlcyIsIngiLCJ5IiwiaGlnaGxpZ2h0Um93cyIsImxheWVycyIsInNlbGVjdGVkUm93SW5kaWNlcyIsImxheWVyU2V0SXNWYWxpZCIsImZpbHRlcmVkSW5kZXgiLCJhbGxJbmRleGVzIiwic2VsZWN0TGF5ZXJzIiwiZmlsdGVyIiwibGF5ZXIiLCJjb25maWciLCJpZCIsImZvckVhY2giLCJmb3JtYXRMYXllckRhdGEiLCJnZXREYXRhc2V0Q29udGV4dCIsImNvbnRleHQiLCJkYXRhTWV0YSIsInZhbHVlcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZW9tZXRyeU1vZGUiLCJjb2x1bW5Nb2RlIiwiZ2VvbWV0cnlDb2x1bW5zIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiY29sdW1ucyIsIl9yZWYyIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWx1ZSIsIl9yZWY0IiwiX3JlZjUiLCJrZXkiLCJfdHlwZW9mMiIsIl9yZWY2IiwiX3JlZjciLCJ2IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEdlb21ldHJpZXNGcm9tRGF0YXNldCIsImxheWVyRGF0YSIsImxheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJnZW9tZXRyaWVzIiwiZGF0YSIsInNhdmVBc0RhdGFzZXQiLCJhZGREYXRhVG9NYXAiLCJsZWZ0RGF0YXNldCIsIm51bVJvd3MiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiaW5kZXgiLCJkaXNwbGF5TmFtZSIsImRldGVybWluZUZpZWxkVHlwZSIsImRhdGFWYWx1ZXMiLCJyb3dzIiwiZmlsbCIsInJvd0lkeCIsImNvbCIsIm5ld0RhdGFzZXROYW1lIiwibmV3RGF0YXNldCIsImluZm8iLCJvcHRpb25zIiwiYXV0b0NyZWF0ZUxheWVycyIsImNlbnRlck1hcCIsIk51bWJlciIsImlzSW50ZWdlciIsIkFMTF9GSUVMRF9UWVBFUyIsImludGVnZXIiLCJyZWFsIiwic3RyaW5nIiwiaGlnaGxpZ2h0Um93c0J5Q29sdW1uVmFsdWVzIiwiY29sdW1uTmFtZSIsInNlbGVjdGVkVmFsdWVzIiwidmFsdWVEaWN0IiwicmVkdWNlIiwiYWNjIiwic2VsZWN0ZWRJbmRpY2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tICdjb2xvci1pbnRlcnBvbGF0ZSc7XG5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7RGF0YXNldHMsIEtlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7U3BhdGlhbEpvaW5HZW9tZXRyaWVzfSBmcm9tICdAb3BlbmFzc2lzdGFudC9nZW9kYSc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkLCBQcm90b0RhdGFzZXQsIFByb3RvRGF0YXNldEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZGF0YXNldCBleGlzdHNcbiAqIEBwYXJhbSBkYXRhc2V0cyBUaGUga2VwbGVyLmdsIGRhdGFzZXRzXG4gKiBAcGFyYW0gZGF0YXNldE5hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFzZXRcbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tEYXRhc2V0Tm90RXhpc3RzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGRhdGFzZXROYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBkZXRhaWxzOiBgRGF0YXNldCBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG9uZSBmcm9tIHRoZSBmb2xsb3dpbmcgZGF0YXNldHM6ICR7T2JqZWN0LmtleXMoXG4gICAgICAgICAgZGF0YXNldHNcbiAgICAgICAgKS5qb2luKCcsICcpfWBcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmaWVsZCBleGlzdHNcbiAqIEBwYXJhbSBkYXRhc2V0IFRoZSBrZXBsZXIuZ2wgZGF0YXNldFxuICogQHBhcmFtIGZpZWxkTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGaWVsZE5vdEV4aXN0cyhkYXRhc2V0OiBLZXBsZXJUYWJsZSwgZmllbGROYW1lOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFmaWVsZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGF5ZXInLFxuICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBkZXRhaWxzOiBgRmllbGQgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBvbmUgZnJvbSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHtkYXRhc2V0LmZpZWxkc1xuICAgICAgICAgIC5tYXAoZiA9PiBmLm5hbWUpXG4gICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSW50ZXJwb2xhdGUgdGhlIGNvbG9ycyBmcm9tIHRoZSBvcmlnaW5hbCBjb2xvcnMgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGNvbG9yc1xuICogQHBhcmFtIG9yaWdpbmFsQ29sb3JzIFRoZSBvcmlnaW5hbCBjb2xvcnNcbiAqIEBwYXJhbSBudW1iZXJPZkNvbG9ycyBUaGUgbnVtYmVyIG9mIGNvbG9yc1xuICogQHJldHVybnMgVGhlIGludGVycG9sYXRlZCBjb2xvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlQ29sb3Iob3JpZ2luYWxDb2xvcnM6IHN0cmluZ1tdLCBudW1iZXJPZkNvbG9yczogbnVtYmVyKSB7XG4gIGlmIChvcmlnaW5hbENvbG9ycy5sZW5ndGggPT09IG51bWJlck9mQ29sb3JzKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsQ29sb3JzO1xuICB9XG4gIGNvbnN0IGludGVycCA9IGludGVycG9sYXRlKG9yaWdpbmFsQ29sb3JzKTtcbiAgY29uc3QgY29sb3JzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBudW1iZXJPZkNvbG9yc30sIChfLCBqKSA9PiBpbnRlcnAoaiAvIChudW1iZXJPZkNvbG9ycyAtIDEpKSk7XG4gIC8vIGNvbnZlcnQgY29sb3JzIGZyb20gJ3JnYigyNTUsIDI1NSwgMjU1KScgdG8gJyNmZmZmZmYnXG4gIGNvbnN0IGhleENvbG9ycyA9IGNvbG9ycy5tYXAoY29sb3IgPT4ge1xuICAgIGNvbnN0IHJnYiA9IGNvbG9yLm1hdGNoKC9cXGQrL2cpO1xuICAgIHJldHVybiBgIyR7cmdiPy5tYXAoYyA9PiBwYXJzZUludChjKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YDtcbiAgfSk7XG4gIHJldHVybiBoZXhDb2xvcnM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZXMgZnJvbSBhIGRhdGFzZXQgZm9yIGEgdmFyaWFibGVcbiAqIEBwYXJhbSBkYXRhc2V0c1xuICogQHBhcmFtIGRhdGFzZXROYW1lXG4gKiBAcGFyYW0gdmFyaWFibGVOYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZXNGcm9tRGF0YXNldChcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBkYXRhc2V0TmFtZTogc3RyaW5nLFxuICB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuKTogbnVtYmVyW10ge1xuICAvLyBmaW5kIHdoaWNoIGRhdGFzZXQgaGFzIHRoZSB2YXJpYWJsZU5hbWVcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHJldHVybiBbXTtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG4gIGlmIChkYXRhc2V0KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogZGF0YXNldC5sZW5ndGh9LCAoXywgaSkgPT4gZGF0YXNldC5nZXRWYWx1ZSh2YXJpYWJsZU5hbWUsIGkpKTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbi8qKlxuICogR2V0IHRoZSB4IGFuZCB5IHZhbHVlcyBmcm9tIGEgZGF0YXNldCBmb3IgYSBzY2F0dGVycGxvdFxuICogQHBhcmFtIGRhdGFzZXRzXG4gKiBAcGFyYW0gZGF0YXNldE5hbWVcbiAqIEBwYXJhbSB4VmFyaWFibGVOYW1lXG4gKiBAcGFyYW0geVZhcmlhYmxlTmFtZVxuICogQHJldHVybnMge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYXR0ZXJwbG90VmFsdWVzRnJvbURhdGFzZXQoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgeFZhcmlhYmxlTmFtZTogc3RyaW5nLFxuICB5VmFyaWFibGVOYW1lOiBzdHJpbmdcbik6IHt4OiBudW1iZXJbXTsgeTogbnVtYmVyW119IHtcbiAgY29uc3QgeFZhbHVlcyA9IGdldFZhbHVlc0Zyb21EYXRhc2V0KGRhdGFzZXRzLCBkYXRhc2V0TmFtZSwgeFZhcmlhYmxlTmFtZSk7XG4gIGNvbnN0IHlWYWx1ZXMgPSBnZXRWYWx1ZXNGcm9tRGF0YXNldChkYXRhc2V0cywgZGF0YXNldE5hbWUsIHlWYXJpYWJsZU5hbWUpO1xuICByZXR1cm4ge3g6IHhWYWx1ZXMsIHk6IHlWYWx1ZXN9O1xufVxuXG4vKipcbiAqIEhpZ2hsaWdodCB0aGUgcm93cyBpbiBhIGRhdGFzZXRcbiAqIEBwYXJhbSBkYXRhc2V0cyBUaGUga2VwbGVyLmdsIGRhdGFzZXRzXG4gKiBAcGFyYW0gbGF5ZXJzIFRoZSBrZXBsZXIuZ2wgbGF5ZXJzXG4gKiBAcGFyYW0gZGF0YXNldE5hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFzZXRcbiAqIEBwYXJhbSBzZWxlY3RlZFJvd0luZGljZXMgVGhlIGluZGljZXMgb2YgdGhlIHJvd3MgdG8gaGlnaGxpZ2h0XG4gKiBAcGFyYW0gbGF5ZXJTZXRJc1ZhbGlkIFRoZSBmdW5jdGlvbiB0byBzZXQgdGhlIGxheWVyIHZhbGlkaXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRSb3dzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgc2VsZWN0ZWRSb3dJbmRpY2VzOiBudW1iZXJbXSxcbiAgbGF5ZXJTZXRJc1ZhbGlkOiAobGF5ZXI6IExheWVyLCBpc1ZhbGlkOiBib29sZWFuKSA9PiB2b2lkXG4pIHtcbiAgLy8gdXBkYXRlIHRoZSBmaWx0ZXJlZEluZGV4IGluIHRoZSBkYXRhc2V0XG4gIGNvbnN0IGRhdGFzZXRJZCA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5maW5kKGRhdGFJZCA9PiBkYXRhc2V0c1tkYXRhSWRdLmxhYmVsID09PSBkYXRhc2V0TmFtZSk7XG4gIGlmICghZGF0YXNldElkKSByZXR1cm47XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhc2V0SWRdO1xuICBpZiAoZGF0YXNldCkge1xuICAgIGRhdGFzZXQuZmlsdGVyZWRJbmRleCA9XG4gICAgICBzZWxlY3RlZFJvd0luZGljZXMubGVuZ3RoID09PSAwID8gZGF0YXNldC5hbGxJbmRleGVzIDogc2VsZWN0ZWRSb3dJbmRpY2VzO1xuICAgIC8vIGdldCBhbGwgbGF5ZXJzIHRoYXQgdXNlIHRoaXMgZGF0YXNldFxuICAgIGNvbnN0IHNlbGVjdExheWVycyA9IGxheWVycy5maWx0ZXIobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCk7XG4gICAgc2VsZWN0TGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgICAgbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzKTtcbiAgICAgIC8vIHRyaWdnZXIgYSByZS1yZW5kZXIgdXNpbmcgbGF5ZXJTZXRJc1ZhbGlkKCkgdG8gdXBkYXRlIHRoZSB0b3AgbGF5ZXJcbiAgICAgIGxheWVyU2V0SXNWYWxpZChsYXllciwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRhdGFzZXQgY29udGV4dCwgd2hpY2ggaXMgdXNlZCB0byBwcm92aWRlIHRoZSBkYXRhc2V0IGluZm9ybWF0aW9uIHRvIHRoZSBBSSBhc3Npc3RhbnRcbiAqIEBwYXJhbSBkYXRhc2V0cyBUaGUga2VwbGVyLmdsIGRhdGFzZXRzXG4gKiBAcGFyYW0gbGF5ZXJzIFRoZSBrZXBsZXIuZ2wgbGF5ZXJzXG4gKiBAcmV0dXJucyBUaGUgZGF0YXNldCBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhc2V0Q29udGV4dChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyczogTGF5ZXJbXSkge1xuICBjb25zdCBjb250ZXh0ID0gJ1BsZWFzZSByZW1lbWJlciB0aGUgZm9sbG93aW5nIGRhdGFzZXQgY29udGV4dDonO1xuICBjb25zdCBkYXRhTWV0YSA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLm1hcCgoZGF0YXNldDogS2VwbGVyVGFibGUpID0+ICh7XG4gICAgZGF0YXNldE5hbWU6IGRhdGFzZXQubGFiZWwsXG4gICAgZGF0YXNldElkOiBkYXRhc2V0LmlkLFxuICAgIGZpZWxkczogZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+ICh7W2ZpZWxkLm5hbWVdOiBmaWVsZC50eXBlfSkpLFxuICAgIGxheWVyczogbGF5ZXJzXG4gICAgICAuZmlsdGVyKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpXG4gICAgICAubWFwKGxheWVyID0+ICh7XG4gICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgbGFiZWw6IGxheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgICAgdHlwZTogbGF5ZXIudHlwZSxcbiAgICAgICAgZ2VvbWV0cnlNb2RlOiBsYXllci5jb25maWcuY29sdW1uTW9kZSxcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWxpZCBnZW9tZXRyeSBjb2x1bW5zIGFzIHN0cmluZ1xuICAgICAgICBnZW9tZXRyeUNvbHVtbnM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucylcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModmFsdWUpLmZpbHRlcigoWywgdl0pID0+IHYgIT09IG51bGwpKVxuICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgIF0pXG4gICAgICAgIClcbiAgICAgIH0pKVxuICB9KSk7XG4gIHJldHVybiBgJHtjb250ZXh0fVxcbiR7SlNPTi5zdHJpbmdpZnkoZGF0YU1ldGEpfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBnZW9tZXRyaWVzIGZyb20gYSBkYXRhc2V0XG4gKiBAcGFyYW0gZGF0YXNldHMgVGhlIGtlcGxlci5nbCBkYXRhc2V0c1xuICogQHBhcmFtIGxheWVycyBUaGUga2VwbGVyLmdsIGxheWVyc1xuICogQHBhcmFtIGxheWVyRGF0YSBUaGUgbGF5ZXIgZGF0YVxuICogQHBhcmFtIGRhdGFzZXROYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhc2V0XG4gKiBAcmV0dXJucyBUaGUgZ2VvbWV0cmllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvbWV0cmllc0Zyb21EYXRhc2V0KFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBhbnlbXSxcbiAgZGF0YXNldE5hbWU6IHN0cmluZ1xuKTogU3BhdGlhbEpvaW5HZW9tZXRyaWVzIHtcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHJldHVybiBbXTtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG5cbiAgLy8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGF5ZXJcbiAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCk7XG4gIGlmIChsYXllckluZGV4ID09PSAtMSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGdlb21ldHJpZXMgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG5cbiAgcmV0dXJuIGdlb21ldHJpZXM/LmRhdGE7XG59XG5cbi8qKlxuICogU2F2ZSB0aGUgZGF0YSBhcyBhIG5ldyBkYXRhc2V0IGJ5IGpvaW5pbmcgaXQgd2l0aCB0aGUgbGVmdCBkYXRhc2V0XG4gKiBAcGFyYW0gZGF0YXNldHMgVGhlIGtlcGxlci5nbCBkYXRhc2V0c1xuICogQHBhcmFtIGRhdGFzZXROYW1lIFRoZSBuYW1lIG9mIHRoZSBsZWZ0IGRhdGFzZXRcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHNhdmVcbiAqIEBwYXJhbSBhZGREYXRhVG9NYXAgVGhlIGZ1bmN0aW9uIHRvIGFkZCB0aGUgZGF0YSB0byB0aGUgbWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQXNEYXRhc2V0KFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGRhdGFzZXROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIG51bWJlcltdPixcbiAgYWRkRGF0YVRvTWFwOiAoZGF0YTogQWRkRGF0YVRvTWFwUGF5bG9hZCkgPT4gdm9pZFxuKSB7XG4gIC8vIGZpbmQgZGF0YXNldElkIGZyb20gZGF0YXNldHNcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHJldHVybjtcblxuICBjb25zdCBsZWZ0RGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG4gIGNvbnN0IG51bVJvd3MgPSBsZWZ0RGF0YXNldC5sZW5ndGg7XG5cbiAgY29uc3QgZmllbGRzOiBQcm90b0RhdGFzZXRGaWVsZFtdID0gW1xuICAgIC8vIE5ldyBmaWVsZHMgZnJvbSBkYXRhXG4gICAgLi4uT2JqZWN0LmtleXMoZGF0YSkubWFwKChmaWVsZE5hbWUsIGluZGV4KSA9PiAoe1xuICAgICAgbmFtZTogZmllbGROYW1lLFxuICAgICAgaWQ6IGAke2ZpZWxkTmFtZX1fJHtpbmRleH1gLFxuICAgICAgZGlzcGxheU5hbWU6IGZpZWxkTmFtZSxcbiAgICAgIHR5cGU6IGRldGVybWluZUZpZWxkVHlwZShkYXRhW2ZpZWxkTmFtZV1bMF0pXG4gICAgfSkpLFxuICAgIC8vIEV4aXN0aW5nIGZpZWxkcyBmcm9tIGxlZnREYXRhc2V0XG4gICAgLi4ubGVmdERhdGFzZXQuZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiAoe1xuICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgIGlkOiBmaWVsZC5pZCB8fCBgJHtmaWVsZC5uYW1lfV8ke2luZGV4fWAsXG4gICAgICBkaXNwbGF5TmFtZTogZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICB0eXBlOiBmaWVsZC50eXBlXG4gICAgfSkpXG4gIF07XG5cbiAgLy8gUHJlLWNhbGN1bGF0ZSBkYXRhIHZhbHVlcyBhcnJheVxuICBjb25zdCBkYXRhVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhkYXRhKTtcblxuICBjb25zdCByb3dzID0gQXJyYXkobnVtUm93cylcbiAgICAuZmlsbChudWxsKVxuICAgIC5tYXAoKF8sIHJvd0lkeCkgPT4gW1xuICAgICAgLy8gTmV3IGRhdGEgdmFsdWVzXG4gICAgICAuLi5kYXRhVmFsdWVzLm1hcChjb2wgPT4gY29sW3Jvd0lkeF0pLFxuICAgICAgLy8gRXhpc3RpbmcgZGF0YXNldCB2YWx1ZXNcbiAgICAgIC4uLmxlZnREYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT4gbGVmdERhdGFzZXQuZ2V0VmFsdWUoZmllbGQubmFtZSwgcm93SWR4KSlcbiAgICBdKTtcblxuICAvLyBjcmVhdGUgbmV3IGRhdGFzZXRcbiAgY29uc3QgbmV3RGF0YXNldE5hbWUgPSBgJHtkYXRhc2V0TmFtZX1fam9pbmVkYDtcbiAgY29uc3QgbmV3RGF0YXNldDogUHJvdG9EYXRhc2V0ID0ge1xuICAgIGluZm86IHtcbiAgICAgIGlkOiBuZXdEYXRhc2V0TmFtZSxcbiAgICAgIGxhYmVsOiBuZXdEYXRhc2V0TmFtZVxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgZmllbGRzLFxuICAgICAgcm93c1xuICAgIH1cbiAgfTtcblxuICBhZGREYXRhVG9NYXAoe2RhdGFzZXRzOiBbbmV3RGF0YXNldF0sIG9wdGlvbnM6IHthdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLCBjZW50ZXJNYXA6IHRydWV9fSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBmaWVsZCB0eXBlXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmllbGQgdHlwZVxuICogQHJldHVybnMgVGhlIGZpZWxkIHR5cGVcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lRmllbGRUeXBlKHZhbHVlOiB1bmtub3duKToga2V5b2YgdHlwZW9mIEFMTF9GSUVMRF9UWVBFUyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInXG4gICAgPyBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKVxuICAgICAgPyBBTExfRklFTERfVFlQRVMuaW50ZWdlclxuICAgICAgOiBBTExfRklFTERfVFlQRVMucmVhbFxuICAgIDogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodFJvd3NCeUNvbHVtblZhbHVlcyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllcnM6IExheWVyW10sXG4gIGRhdGFzZXROYW1lOiBzdHJpbmcsXG4gIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgc2VsZWN0ZWRWYWx1ZXM6IHVua25vd25bXSxcbiAgbGF5ZXJTZXRJc1ZhbGlkOiAobGF5ZXI6IExheWVyLCBpc1ZhbGlkOiBib29sZWFuKSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgZGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoZGF0YUlkID0+IGRhdGFzZXRzW2RhdGFJZF0ubGFiZWwgPT09IGRhdGFzZXROYW1lKTtcbiAgaWYgKCFkYXRhc2V0SWQpIHJldHVybjtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG4gIGlmIChkYXRhc2V0KSB7XG4gICAgLy8gZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGNvbHVtblxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20oe2xlbmd0aDogZGF0YXNldC5sZW5ndGh9LCAoXywgaSkgPT4gZGF0YXNldC5nZXRWYWx1ZShjb2x1bW5OYW1lLCBpKSk7XG4gICAgLy8gY3JlYXRlIGEgZGljdCB1c2luZyB0aGUgdmFsdWVzXG4gICAgY29uc3QgdmFsdWVEaWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t2YWx1ZV0gPSBpbmRleDtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIC8vIG5lZWQgdG8gZml4IHRoZSB0eXBlIGVycm9yIG9mIHZhbHVlIGhlcmVcbiAgICBjb25zdCBzZWxlY3RlZEluZGljZXMgPSBzZWxlY3RlZFZhbHVlcy5tYXAodmFsdWUgPT4gdmFsdWVEaWN0W3ZhbHVlIGFzIGFueV0pO1xuICAgIC8vIGhpZ2hsaWdodCB0aGUgcm93c1xuICAgIGhpZ2hsaWdodFJvd3MoZGF0YXNldHMsIGxheWVycywgZGF0YXNldE5hbWUsIHNlbGVjdGVkSW5kaWNlcywgbGF5ZXJTZXRJc1ZhbGlkKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFLQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFSQTtBQUNBOztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UscUJBQXFCQSxDQUNuQ0MsUUFBa0IsRUFDbEJDLFdBQW1CLEVBQ25CQyxZQUFvQixFQUNwQjtFQUNBLElBQU1DLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNMLFFBQVEsQ0FBQyxDQUFDTSxJQUFJLENBQUMsVUFBQUMsTUFBTTtJQUFBLE9BQUlQLFFBQVEsQ0FBQ08sTUFBTSxDQUFDLENBQUNDLEtBQUssS0FBS1AsV0FBVztFQUFBLEVBQUM7RUFDOUYsSUFBSSxDQUFDRSxTQUFTLEVBQUU7SUFDZCxPQUFPO01BQ0xNLElBQUksRUFBRVAsWUFBWTtNQUNsQlEsTUFBTSxFQUFFO1FBQ05DLE9BQU8sRUFBRSxLQUFLO1FBQ2RD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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.1.0-alpha.6",
4
+ "version": "3.1.0",
5
5
  "description": "kepler.gl AI assistant",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,17 +30,21 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/components": "3.1.0-alpha.6",
34
- "@kepler.gl/constants": "3.1.0-alpha.6",
35
- "@kepler.gl/layers": "3.1.0-alpha.6",
36
- "@kepler.gl/table": "3.1.0-alpha.6",
37
- "@kepler.gl/types": "3.1.0-alpha.6",
38
- "@kepler.gl/utils": "3.1.0-alpha.6",
33
+ "@kepler.gl/components": "3.1.0",
34
+ "@kepler.gl/constants": "3.1.0",
35
+ "@kepler.gl/layers": "3.1.0",
36
+ "@kepler.gl/table": "3.1.0",
37
+ "@kepler.gl/types": "3.1.0",
38
+ "@kepler.gl/utils": "3.1.0",
39
+ "@openassistant/core": "^0.0.7",
40
+ "@openassistant/echarts": "^0.0.6",
41
+ "@openassistant/geoda": "^0.0.6",
42
+ "@openassistant/ui": "^0.0.7",
39
43
  "color-interpolate": "^1.0.5",
40
44
  "echarts": "^5.5.1",
41
45
  "global": "^4.3.0",
42
- "react-ai-assist": "0.0.20",
43
- "react-intl": "^6.3.0"
46
+ "react-intl": "^6.3.0",
47
+ "usehooks-ts": "^3.1.0"
44
48
  },
45
49
  "nyc": {
46
50
  "sourceMap": false,
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
- import {MessageModel} from 'react-ai-assist';
4
+ import {MessageModel} from '@openassistant/core';
5
5
  import {AiAssistantConfig} from './reducers';
6
6
 
7
- const ACTION_PREFIX = '@@react-ai-assistant/';
7
+ const ACTION_PREFIX = '@@openassistant/';
8
8
 
9
9
  export const UPDATE_AI_ASSISTANT_CONFIG = `${ACTION_PREFIX}UPDATE_AI_ASSISTANT_CONFIG`;
10
10
  export const UPDATE_AI_ASSISTANT_MESSAGES = `${ACTION_PREFIX}UPDATE_AI_ASSISTANT_MESSAGES`;
@@ -3,13 +3,16 @@
3
3
 
4
4
  import React, {useEffect} from 'react';
5
5
  import styled, {withTheme} from 'styled-components';
6
+ import {MessageModel, useAssistant} from '@openassistant/core';
6
7
  import {
7
- AiAssistant,
8
- MessageModel,
9
- useAssistant,
10
- histogramFunctionDefinition
11
- } from 'react-ai-assist';
12
- import 'react-ai-assist/dist/index.css';
8
+ dataClassifyFunctionDefinition,
9
+ spatialCountFunctionDefinition,
10
+ SpatialJoinGeometries
11
+ } from '@openassistant/geoda';
12
+ import {histogramFunctionDefinition, scatterplotFunctionDefinition} from '@openassistant/echarts';
13
+ import {AiAssistant} from '@openassistant/ui';
14
+ import '@openassistant/echarts/dist/index.css';
15
+ import '@openassistant/ui/dist/index.css';
13
16
 
14
17
  import {textColorLT} from '@kepler.gl/styles';
15
18
  import {ActionHandler} from '@kepler.gl/actions';
@@ -29,11 +32,17 @@ import {
29
32
  PROMPT_IDEAS,
30
33
  WELCOME_MESSAGE
31
34
  } from '../constants';
32
- import {filterFunctionDefinition} from '../tools/filter-function';
33
35
  import {addLayerFunctionDefinition} from '../tools/layer-creation-function';
34
36
  import {updateLayerColorFunctionDefinition} from '../tools/layer-style-function';
35
37
  import {SelectedKeplerGlActions} from './ai-assistant-manager';
36
- import {getDatasetContext, getValuesFromDataset, highlightRows} from '../tools/utils';
38
+ import {
39
+ getDatasetContext,
40
+ getGeometriesFromDataset,
41
+ getScatterplotValuesFromDataset,
42
+ getValuesFromDataset,
43
+ highlightRows,
44
+ saveAsDataset
45
+ } from '../tools/utils';
37
46
 
38
47
  type ThemeProps = {theme: any};
39
48
 
@@ -69,6 +78,21 @@ function AiAssistantComponentFactory() {
69
78
  mapStyle,
70
79
  visState
71
80
  }: AiAssistantComponentProps & ThemeProps) => {
81
+ // get values from dataset, used by LLM functions
82
+ const getValuesCallback = (datasetName: string, variableName: string): number[] =>
83
+ getValuesFromDataset(visState.datasets, datasetName, variableName);
84
+
85
+ // highlight rows, used by LLM functions and plots (scatterplot, histogram)
86
+ const highlightRowsCallback = (datasetName: string, selectedRowIndices: number[]) =>
87
+ highlightRows(
88
+ visState.datasets,
89
+ visState.layers,
90
+ datasetName,
91
+ selectedRowIndices,
92
+ keplerGlActions.layerSetIsValid
93
+ );
94
+
95
+ // define LLM functions
72
96
  const functions = [
73
97
  basemapFunctionDefinition({mapStyleChange: keplerGlActions.mapStyleChange, mapStyle}),
74
98
  loadUrlFunctionDefinition({
@@ -84,30 +108,37 @@ function AiAssistantComponentFactory() {
84
108
  layerVisualChannelConfigChange: keplerGlActions.layerVisualChannelConfigChange,
85
109
  layers: visState.layers
86
110
  }),
87
- filterFunctionDefinition({
88
- datasets: visState.datasets,
89
- filters: visState.filters,
90
- createOrUpdateFilter: keplerGlActions.createOrUpdateFilter,
91
- setFilter: keplerGlActions.setFilter,
92
- setFilterPlot: keplerGlActions.setFilterPlot
93
- }),
94
111
  histogramFunctionDefinition({
95
- getValues: (datasetName: string, variableName: string): number[] =>
96
- getValuesFromDataset(visState.datasets, datasetName, variableName),
97
- onSelected: (datasetName: string, selectedRowIndices: number[]) =>
98
- highlightRows(
112
+ getValues: getValuesCallback,
113
+ onSelected: highlightRowsCallback
114
+ }),
115
+ scatterplotFunctionDefinition({
116
+ getValues: async (datasetName: string, xVar: string, yVar: string) =>
117
+ getScatterplotValuesFromDataset(visState.datasets, datasetName, xVar, yVar),
118
+ onSelected: highlightRowsCallback
119
+ }),
120
+ dataClassifyFunctionDefinition({
121
+ getValues: getValuesCallback
122
+ }),
123
+ spatialCountFunctionDefinition({
124
+ getValues: getValuesCallback,
125
+ getGeometries: (datasetName: string): SpatialJoinGeometries =>
126
+ getGeometriesFromDataset(
99
127
  visState.datasets,
100
128
  visState.layers,
101
- datasetName,
102
- selectedRowIndices,
103
- keplerGlActions.layerSetIsValid
104
- )
129
+ visState.layerData,
130
+ datasetName
131
+ ),
132
+ saveAsDataset: (datasetName: string, data: Record<string, number[]>) =>
133
+ saveAsDataset(visState.datasets, datasetName, data, keplerGlActions.addDataToMap)
105
134
  })
106
135
  ];
107
136
 
137
+ // enable voice and screen capture
108
138
  const enableVoiceAndScreenCapture =
109
139
  aiAssistant.config.provider === 'openai' || aiAssistant.config.provider === 'google';
110
140
 
141
+ // define assistant props
111
142
  const assistantProps = {
112
143
  name: ASSISTANT_NAME,
113
144
  description: ASSISTANT_DESCRIPTION,
@@ -121,12 +152,14 @@ function AiAssistantComponentFactory() {
121
152
 
122
153
  const {initializeAssistant, addAdditionalContext} = useAssistant(assistantProps);
123
154
 
155
+ // initialize assistant with context
124
156
  const initializeAssistantWithContext = async () => {
125
157
  await initializeAssistant();
126
158
  const context = getDatasetContext(visState.datasets, visState.layers);
127
159
  addAdditionalContext({context});
128
160
  };
129
161
 
162
+ // initialize assistant with context
130
163
  useEffect(() => {
131
164
  initializeAssistantWithContext();
132
165
  // re-initialize assistant when datasets, filters or layers change