dtable-statistic 4.3.6 → 4.3.8

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 (112) hide show
  1. package/es/calculator/base-calculator.js +16 -5
  2. package/es/calculator/basic-chart-calculator.js +17 -31
  3. package/es/calculator/combination-calculator.js +20 -34
  4. package/es/calculator/compare-bar-calculator.js +9 -20
  5. package/es/calculator/completeness-calculator.js +10 -24
  6. package/es/calculator/dashboard-calculator.js +6 -20
  7. package/es/calculator/heat-map-calculator.js +6 -20
  8. package/es/calculator/horizontal-bar-calculator.js +2 -13
  9. package/es/calculator/index.js +2 -0
  10. package/es/calculator/map-calculator.js +7 -21
  11. package/es/calculator/mirror-calculator.js +8 -22
  12. package/es/calculator/number-card-calculator.js +4 -18
  13. package/es/calculator/pivot-table-calculator.js +40 -54
  14. package/es/calculator/scatter-calculator.js +6 -20
  15. package/es/calculator/thread-manager.js +41 -41
  16. package/es/calculator/trend-calculator.js +6 -20
  17. package/es/calculator/workers/basic-chart-calculator-worker.js +77 -45
  18. package/es/calculator/workers/calculator.worker.js +5 -2
  19. package/es/calculator/workers/card-calculator-worker.js +13 -9
  20. package/es/calculator/workers/combination-calculator-worker.js +20 -16
  21. package/es/calculator/workers/compare-bar-chart-calculator-worker.js +12 -8
  22. package/es/calculator/workers/completeness-calculator-worker.js +21 -17
  23. package/es/calculator/workers/dashboard-calculator-worker.js +16 -12
  24. package/es/calculator/workers/mirror-calculator-worker.js +14 -10
  25. package/es/calculator/workers/pivot-table-calculator-worker.js +53 -35
  26. package/es/calculator/workers/scatter-calculator-worker.js +15 -11
  27. package/es/calculator/workers/trend-calculator-worker.js +14 -10
  28. package/es/calculator/world-map-calculator.js +6 -20
  29. package/es/components/dialog/chart-addition-edit-dialog.js +1 -1
  30. package/es/components/dialog/chart-addition-widgets/chart-selector.js +1 -1
  31. package/es/components/dialog/statistic-record-dialog/index.js +21 -11
  32. package/es/components/dropdown-menu/statistic-dropdown-menu.js +1 -1
  33. package/es/components/popover/color-rules/rule-filters/number-input.js +5 -5
  34. package/es/components/popover/color-rules-popover.js +2 -2
  35. package/es/components/select/select.js +3 -3
  36. package/es/components/toast/alert.js +2 -0
  37. package/es/components/toast/toastManager.js +1 -0
  38. package/es/constants/color-rules.js +3 -3
  39. package/es/constants/index.js +9 -9
  40. package/es/dashboard.js +7 -13
  41. package/es/desktop-dashboard.js +1 -1
  42. package/es/locale/lang/de.js +10 -10
  43. package/es/locale/lang/en.js +8 -8
  44. package/es/locale/lang/fr.js +10 -10
  45. package/es/locale/lang/zh_CN.js +8 -8
  46. package/es/model/basic-number-card.js +3 -3
  47. package/es/model/compare-bar.js +2 -2
  48. package/es/model/generic-model.js +11 -11
  49. package/es/model/heat-map.js +2 -2
  50. package/es/model/horizontal-bar.js +2 -2
  51. package/es/model/index.js +3 -2
  52. package/es/model/map.js +3 -3
  53. package/es/model/mirror.js +2 -2
  54. package/es/model/trend.js +2 -2
  55. package/es/model/world-map.js +3 -3
  56. package/es/stat-editor/stat-settings/advance-chart-settings/combination-settings.js +7 -7
  57. package/es/stat-editor/stat-settings/advance-chart-settings/index.js +2 -2
  58. package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/combination-style-setting.js +2 -2
  59. package/es/stat-editor/stat-settings/advance-chart-settings/summary-settings.js +1 -1
  60. package/es/stat-editor/stat-settings/basic-chart-settings/bar-settings.js +1 -1
  61. package/es/stat-editor/stat-settings/basic-chart-settings/completeness-chart-settings.js +7 -7
  62. package/es/stat-editor/stat-settings/basic-chart-settings/groupby-settings.js +6 -6
  63. package/es/stat-editor/stat-settings/basic-chart-settings/index.js +4 -4
  64. package/es/stat-editor/stat-settings/basic-chart-settings/pivot-table-settings.js +5 -5
  65. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/bar-chart-style-setting.js +3 -3
  66. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/horizontal-bar-chart-style.js +3 -3
  67. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/pie-chart-style-settings.js +3 -3
  68. package/es/stat-editor/stat-settings/basic-chart-settings/summary-method-setting.js +1 -1
  69. package/es/stat-editor/stat-settings/basic-chart-settings/summary-settings.js +1 -1
  70. package/es/stat-editor/stat-settings/basic-chart-settings/time-comparison-settings.js +4 -18
  71. package/es/stat-editor/stat-settings/color-setting/color-picker.js +1 -0
  72. package/es/stat-editor/stat-settings/public-setting/column-settings.js +1 -1
  73. package/es/stat-editor/stat-settings/public-setting/numeric-summary-item.js +1 -1
  74. package/es/stat-view/area-chart.js +4 -4
  75. package/es/stat-view/bar-chart.js +4 -4
  76. package/es/stat-view/base-chart.js +2 -2
  77. package/es/stat-view/basic-number-card.js +49 -49
  78. package/es/stat-view/combination-chart.js +69 -69
  79. package/es/stat-view/compare-chart.js +4 -4
  80. package/es/stat-view/completeness-chart.js +3 -3
  81. package/es/stat-view/custom-bar.js +2 -2
  82. package/es/stat-view/dashboard-chart.js +50 -50
  83. package/es/stat-view/heat-map.js +2 -2
  84. package/es/stat-view/horizontal-bar-chart.js +4 -4
  85. package/es/stat-view/line-chart.js +4 -4
  86. package/es/stat-view/map.js +3 -3
  87. package/es/stat-view/mirror.js +2 -2
  88. package/es/stat-view/pivot-table/index.js +6 -6
  89. package/es/stat-view/pivot-table/one-dimension-table-no-numeric-columns.js +5 -5
  90. package/es/stat-view/pivot-table/one-dimension-table-with-numeric-columns.js +3 -3
  91. package/es/stat-view/pivot-table/pivot-table-display-name.js +19 -19
  92. package/es/stat-view/pivot-table/two-dimension-table.js +7 -7
  93. package/es/stat-view/ring-chart.js +2 -2
  94. package/es/stat-view/scatter-chart.js +56 -56
  95. package/es/stat-view/treemap-chart.js +50 -49
  96. package/es/stat-view/trend-chart.js +52 -52
  97. package/es/stat-view/world-map.js +3 -3
  98. package/es/utils/cell-format.js +16 -16
  99. package/es/utils/cell-value.js +3 -3
  100. package/es/utils/color-utils.js +3 -3
  101. package/es/utils/column-utils.js +10 -10
  102. package/es/utils/column.js +2 -2
  103. package/es/utils/common-utils.js +10 -8
  104. package/es/utils/export-table-utils.js +38 -38
  105. package/es/utils/object.js +3 -3
  106. package/es/utils/pivot-table.js +3 -3
  107. package/es/utils/row-utils.js +17 -17
  108. package/es/utils/search.js +14 -14
  109. package/es/utils/sql-utils.js +23 -20
  110. package/es/utils/stat-utils.js +52 -52
  111. package/es/utils/trend-utils.js +1 -0
  112. package/package.json +6 -3
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _dtableStore = require("dtable-store");
7
+ var _dtableUtils = require("dtable-utils");
8
8
  var _utils = require("../utils");
9
9
  var _collaborator = require("./collaborator");
10
10
  var _constants = require("../constants");
11
- const SUPPORT_SORT_COLUMNS = [_dtableStore.CellType.TEXT, _dtableStore.CellType.NUMBER, _dtableStore.CellType.DATE, _dtableStore.CellType.SINGLE_SELECT, _dtableStore.CellType.FORMULA, _dtableStore.CellType.LINK_FORMULA, _dtableStore.CellType.CTIME, _dtableStore.CellType.MTIME, _dtableStore.CellType.RATE];
11
+ const SUPPORT_SORT_COLUMNS = [_dtableUtils.CellType.TEXT, _dtableUtils.CellType.NUMBER, _dtableUtils.CellType.DATE, _dtableUtils.CellType.SINGLE_SELECT, _dtableUtils.CellType.FORMULA, _dtableUtils.CellType.LINK_FORMULA, _dtableUtils.CellType.CTIME, _dtableUtils.CellType.MTIME, _dtableUtils.CellType.RATE];
12
12
  class StatUtils {
13
13
  static getGroupLabel(cellValue, formulaRow, column, dateGranularity, geoGranularity, value) {
14
14
  let {
@@ -17,20 +17,20 @@ class StatUtils {
17
17
  data
18
18
  } = column;
19
19
  switch (type) {
20
- case _dtableStore.CellType.TEXT:
20
+ case _dtableUtils.CellType.TEXT:
21
21
  {
22
22
  return cellValue || null;
23
23
  }
24
- case _dtableStore.CellType.NUMBER:
24
+ case _dtableUtils.CellType.NUMBER:
25
25
  {
26
26
  if (!cellValue && cellValue !== 0) {
27
27
  return null;
28
28
  }
29
- const number = (0, _dtableStore.getPrecisionNumber)(cellValue, data);
29
+ const number = (0, _dtableUtils.getPrecisionNumber)(cellValue, data);
30
30
  let valueNumber = parseFloat(number);
31
- return (0, _dtableStore.isNumber)(valueNumber) ? (0, _dtableStore.getNumberDisplayString)(valueNumber, column.data) : valueNumber;
31
+ return (0, _dtableUtils.isNumber)(valueNumber) ? (0, _dtableUtils.getNumberDisplayString)(valueNumber, column.data) : valueNumber;
32
32
  }
33
- case _dtableStore.CellType.SINGLE_SELECT:
33
+ case _dtableUtils.CellType.SINGLE_SELECT:
34
34
  {
35
35
  let isInvalidValue = data && data.options.findIndex(opt => opt.id === cellValue) < 0;
36
36
  if (isInvalidValue) {
@@ -38,20 +38,20 @@ class StatUtils {
38
38
  }
39
39
  return cellValue;
40
40
  }
41
- case _dtableStore.CellType.DATE:
42
- case _dtableStore.CellType.CTIME:
43
- case _dtableStore.CellType.MTIME:
41
+ case _dtableUtils.CellType.DATE:
42
+ case _dtableUtils.CellType.CTIME:
43
+ case _dtableUtils.CellType.MTIME:
44
44
  {
45
45
  if (!dateGranularity) {
46
- return (0, _dtableStore.getDateDisplayString)(cellValue);
46
+ return (0, _dtableUtils.getDateDisplayString)(cellValue);
47
47
  }
48
48
  if (dateGranularity.toUpperCase() === 'QUARTER') {
49
49
  // TODO: fix the unknown word 'QUARTAR'
50
- return _dtableStore.DateUtils.getDateByGranularity(cellValue, 'QUARTAR');
50
+ return _dtableUtils.DateUtils.getDateByGranularity(cellValue, 'QUARTAR');
51
51
  }
52
- return _dtableStore.DateUtils.getDateByGranularity(cellValue, dateGranularity);
52
+ return _dtableUtils.DateUtils.getDateByGranularity(cellValue, dateGranularity);
53
53
  }
54
- case _dtableStore.CellType.MULTIPLE_SELECT:
54
+ case _dtableUtils.CellType.MULTIPLE_SELECT:
55
55
  {
56
56
  let options = data && data.options;
57
57
  if (!Array.isArray(cellValue)) {
@@ -59,45 +59,45 @@ class StatUtils {
59
59
  }
60
60
  return cellValue.filter(id => options.findIndex(o => o.id === id) > -1);
61
61
  }
62
- case _dtableStore.CellType.COLLABORATOR:
62
+ case _dtableUtils.CellType.COLLABORATOR:
63
63
  {
64
64
  if (!Array.isArray(cellValue)) return [];
65
65
  return cellValue.filter(email => (0, _collaborator.isValidCollaboratorEmail)(email));
66
66
  }
67
- case _dtableStore.CellType.CREATOR:
68
- case _dtableStore.CellType.LAST_MODIFIER:
67
+ case _dtableUtils.CellType.CREATOR:
68
+ case _dtableUtils.CellType.LAST_MODIFIER:
69
69
  {
70
70
  return cellValue ? cellValue : null;
71
71
  }
72
- case _dtableStore.CellType.LINK_FORMULA:
73
- case _dtableStore.CellType.FORMULA:
72
+ case _dtableUtils.CellType.LINK_FORMULA:
73
+ case _dtableUtils.CellType.FORMULA:
74
74
  {
75
75
  if (!formulaRow) return '';
76
76
  let formulaCellValue = formulaRow[key];
77
77
  let {
78
78
  result_type
79
79
  } = data || {};
80
- if (result_type === _dtableStore.FORMULA_RESULT_TYPE.ARRAY) {
81
- return (0, _dtableStore.getFormulaDisplayString)(formulaCellValue, data, {
80
+ if (result_type === _dtableUtils.FORMULA_RESULT_TYPE.ARRAY) {
81
+ return (0, _dtableUtils.getFormulaDisplayString)(formulaCellValue, data, {
82
82
  tables: value.tables
83
83
  }) || null;
84
84
  }
85
- if (result_type === _dtableStore.FORMULA_RESULT_TYPE.NUMBER) {
86
- return (0, _dtableStore.getPrecisionNumber)(formulaCellValue, data);
85
+ if (result_type === _dtableUtils.FORMULA_RESULT_TYPE.NUMBER) {
86
+ return (0, _dtableUtils.getPrecisionNumber)(formulaCellValue, data);
87
87
  }
88
88
  return formulaCellValue ? formulaCellValue + '' : null;
89
89
  }
90
- case _dtableStore.CellType.GEOLOCATION:
90
+ case _dtableUtils.CellType.GEOLOCATION:
91
91
  {
92
92
  const {
93
93
  geo_format
94
94
  } = data || {};
95
95
  if (geo_format === 'country_region' || geo_format === 'lng_lat' || !geoGranularity) {
96
- return (0, _dtableStore.getGeolocationDisplayString)(cellValue, data);
96
+ return (0, _dtableUtils.getGeolocationDisplayString)(cellValue, data);
97
97
  }
98
98
  return cellValue ? cellValue[geoGranularity] : null;
99
99
  }
100
- case _dtableStore.CellType.LINK:
100
+ case _dtableUtils.CellType.LINK:
101
101
  {
102
102
  const linkCellValue = formulaRow && formulaRow[key];
103
103
  if (!Array.isArray(linkCellValue)) {
@@ -105,11 +105,11 @@ class StatUtils {
105
105
  }
106
106
  return linkCellValue.map(linkVal => linkVal.display_value);
107
107
  }
108
- case _dtableStore.CellType.CHECKBOX:
108
+ case _dtableUtils.CellType.CHECKBOX:
109
109
  {
110
110
  return String(!!cellValue);
111
111
  }
112
- case _dtableStore.CellType.RATE:
112
+ case _dtableUtils.CellType.RATE:
113
113
  {
114
114
  if (!cellValue) return null;
115
115
  return cellValue + '';
@@ -127,7 +127,7 @@ class StatUtils {
127
127
  } = column;
128
128
  let sortType = 'up';
129
129
  let option_id_index_map = {};
130
- if (column_type === _dtableStore.CellType.SINGLE_SELECT) {
130
+ if (column_type === _dtableUtils.CellType.SINGLE_SELECT) {
131
131
  const {
132
132
  options
133
133
  } = data || {};
@@ -150,7 +150,7 @@ class StatUtils {
150
150
  }
151
151
  if (SUPPORT_SORT_COLUMNS.includes(column_type)) {
152
152
  switch (column_type) {
153
- case _dtableStore.CellType.NUMBER:
153
+ case _dtableUtils.CellType.NUMBER:
154
154
  {
155
155
  if (current) {
156
156
  current = current - 0;
@@ -158,42 +158,42 @@ class StatUtils {
158
158
  if (next) {
159
159
  next = next - 0;
160
160
  }
161
- return (0, _dtableStore.sortNumber)(current, next, sortType);
161
+ return (0, _dtableUtils.sortNumber)(current, next, sortType);
162
162
  }
163
- case _dtableStore.CellType.DATE:
164
- case _dtableStore.CellType.CTIME:
165
- case _dtableStore.CellType.MTIME:
163
+ case _dtableUtils.CellType.DATE:
164
+ case _dtableUtils.CellType.CTIME:
165
+ case _dtableUtils.CellType.MTIME:
166
166
  {
167
- return (0, _dtableStore.sortDate)(current, next, sortType);
167
+ return (0, _dtableUtils.sortDate)(current, next, sortType);
168
168
  }
169
- case _dtableStore.CellType.SINGLE_SELECT:
170
- case _dtableStore.CellType.MULTIPLE_SELECT:
169
+ case _dtableUtils.CellType.SINGLE_SELECT:
170
+ case _dtableUtils.CellType.MULTIPLE_SELECT:
171
171
  {
172
- return (0, _dtableStore.sortSingleSelect)(current, next, {
172
+ return (0, _dtableUtils.sortSingleSelect)(current, next, {
173
173
  sort_type: sortType,
174
174
  option_id_index_map
175
175
  });
176
176
  }
177
- case _dtableStore.CellType.FORMULA:
178
- case _dtableStore.CellType.LINK_FORMULA:
177
+ case _dtableUtils.CellType.FORMULA:
178
+ case _dtableUtils.CellType.LINK_FORMULA:
179
179
  {
180
180
  let {
181
181
  result_type
182
182
  } = data || {};
183
- if (result_type === _dtableStore.FORMULA_RESULT_TYPE.NUMBER) {
183
+ if (result_type === _dtableUtils.FORMULA_RESULT_TYPE.NUMBER) {
184
184
  if (current) {
185
185
  current = current - 0;
186
186
  }
187
187
  if (next) {
188
188
  next = next - 0;
189
189
  }
190
- return (0, _dtableStore.sortNumber)(current, next, sortType);
190
+ return (0, _dtableUtils.sortNumber)(current, next, sortType);
191
191
  }
192
- return (0, _dtableStore.sortText)(result_type, current, next, sortType);
192
+ return (0, _dtableUtils.sortText)(current, next, sortType);
193
193
  }
194
194
  default:
195
195
  {
196
- return (0, _dtableStore.sortText)(current, next, sortType);
196
+ return (0, _dtableUtils.sortText)(current, next, sortType);
197
197
  }
198
198
  }
199
199
  }
@@ -235,7 +235,7 @@ class StatUtils {
235
235
  let existMap = {};
236
236
  rows.forEach(r => {
237
237
  let num;
238
- if (_dtableStore.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
238
+ if (_dtableUtils.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
239
239
  const formulaRow = formula_rows[r._id] || {};
240
240
  num = formulaRow[summary_column_key];
241
241
  num = Array.isArray(num) ? num[0] : num;
@@ -264,14 +264,14 @@ class StatUtils {
264
264
  let validNumbersCount = 0;
265
265
  rows.forEach(r => {
266
266
  let num;
267
- if (_dtableStore.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
267
+ if (_dtableUtils.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
268
268
  let formulaRow = formula_rows[r._id] || {};
269
269
  num = formulaRow[summary_column_key];
270
270
  num = Array.isArray(num) ? num[0] : num;
271
271
  } else {
272
272
  num = r[summary_column_key];
273
273
  }
274
- if ((0, _dtableStore.isNumber)(num)) {
274
+ if ((0, _dtableUtils.isNumber)(num)) {
275
275
  validNumbersCount++;
276
276
  sum += num;
277
277
  }
@@ -289,7 +289,7 @@ class StatUtils {
289
289
  if (rowsLength > 0) {
290
290
  let result = rows.reduce((current, next) => {
291
291
  let currentValue, nextValue;
292
- if (_dtableStore.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
292
+ if (_dtableUtils.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
293
293
  let currentFormulaRow = formula_rows[current._id];
294
294
  let nextFormulaRow = formula_rows[next._id];
295
295
  currentValue = currentFormulaRow && currentFormulaRow[summary_column_key];
@@ -310,7 +310,7 @@ class StatUtils {
310
310
  return isNextGreater ? next : current;
311
311
  }
312
312
  });
313
- if (_dtableStore.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
313
+ if (_dtableUtils.FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
314
314
  let formulaRow = formula_rows[result._id];
315
315
  total = formulaRow && formulaRow[summary_column_key];
316
316
  total = Array.isArray(total) ? total[0] : total;
@@ -339,10 +339,10 @@ class StatUtils {
339
339
  type,
340
340
  data
341
341
  } = column;
342
- if ((0, _dtableStore.isNumericColumn)(column)) {
343
- return (0, _dtableStore.getNumberDisplayString)(value, data);
342
+ if ((0, _dtableUtils.isNumericColumn)(column)) {
343
+ return (0, _dtableUtils.getNumberDisplayString)(value, data);
344
344
  }
345
- if (_dtableStore.FORMULA_COLUMN_TYPES_MAP[type]) {
345
+ if (_dtableUtils.FORMULA_COLUMN_TYPES_MAP[type]) {
346
346
  return (0, _utils.getClientFormulaDisplayString)(value, data);
347
347
  }
348
348
  return value;
@@ -103,6 +103,7 @@ function summaryDurationResult(result, duration, summaryType, summaryMethod, use
103
103
  }
104
104
  }
105
105
  } else {
106
+ // eslint-disable-next-line
106
107
  for (let item of result) {
107
108
  const key = item[0];
108
109
  if (key >= startDate && key < middleDate) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dtable-statistic",
3
- "version": "4.3.6",
3
+ "version": "4.3.8",
4
4
  "description": "statistics",
5
5
  "main": "dist/dtable-statistic.js",
6
6
  "author": "seafile",
@@ -12,7 +12,7 @@
12
12
  "@seafile/seafile-calendar": "0.0.24",
13
13
  "comlink": "^4.3.1",
14
14
  "dayjs": "1.10.7",
15
- "dtable-store": "4.3.6",
15
+ "dtable-utils": "4.3.3",
16
16
  "dtable-web-api": "4.3.5",
17
17
  "glamor": "^2.20.40",
18
18
  "html2canvas": "^1.4.1",
@@ -31,6 +31,7 @@
31
31
  "devDependencies": {
32
32
  "@babel/cli": "7.22.15",
33
33
  "@babel/core": "^7.16.0",
34
+ "@babel/eslint-parser": "^7.16.3",
34
35
  "@babel/plugin-proposal-private-property-in-object": "7.21.11",
35
36
  "@babel/plugin-transform-runtime": "7.22.10",
36
37
  "@babel/runtime": "7.22.11",
@@ -39,8 +40,8 @@
39
40
  "@testing-library/jest-dom": "5.17.0",
40
41
  "@testing-library/react": "^11.1.0",
41
42
  "@testing-library/user-event": "13.5.0",
43
+ "@types/jest": "^29.5.10",
42
44
  "autoprefixer": "10.4.5",
43
- "babel-eslint": "10.0.1",
44
45
  "babel-jest": "^27.4.2",
45
46
  "babel-loader": "^8.2.3",
46
47
  "babel-plugin-import": "^1.13.6",
@@ -51,10 +52,12 @@
51
52
  "browserslist": "^4.18.1",
52
53
  "camelcase": "^6.2.1",
53
54
  "case-sensitive-paths-webpack-plugin": "^2.4.0",
55
+ "circular-dependency-plugin": "^5.2.2",
54
56
  "css-loader": "^6.5.1",
55
57
  "css-minimizer-webpack-plugin": "^3.2.0",
56
58
  "dotenv": "^10.0.0",
57
59
  "dotenv-expand": "^5.1.0",
60
+ "dtable-store": "4.3.6",
58
61
  "eslint": "^8.3.0",
59
62
  "eslint-config-react-app": "^7.0.1",
60
63
  "eslint-webpack-plugin": "^3.1.1",