survey-analytics 2.5.14 → 3.0.0-beta.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 (215) hide show
  1. package/fesm/shared.mjs +754 -3179
  2. package/fesm/shared.mjs.map +1 -1
  3. package/fesm/shared2.mjs +9687 -8187
  4. package/fesm/shared2.mjs.map +1 -1
  5. package/fesm/shared3.mjs +4982 -0
  6. package/fesm/shared3.mjs.map +1 -0
  7. package/fesm/shared4.mjs +42 -0
  8. package/fesm/shared4.mjs.map +1 -0
  9. package/fesm/survey.analytics.apexcharts.mjs +1061 -0
  10. package/fesm/survey.analytics.apexcharts.mjs.map +1 -0
  11. package/fesm/survey.analytics.core.mjs +3 -3
  12. package/fesm/survey.analytics.mjs +7 -755
  13. package/fesm/survey.analytics.mjs.map +1 -1
  14. package/fesm/survey.analytics.mongo.mjs +1 -1
  15. package/fesm/survey.analytics.plotly.mjs +13 -0
  16. package/fesm/survey.analytics.plotly.mjs.map +1 -0
  17. package/fesm/survey.analytics.tabulator.mjs +335 -180
  18. package/fesm/survey.analytics.tabulator.mjs.map +1 -1
  19. package/fesm/themes/index.mjs +1942 -0
  20. package/fesm/themes/index.mjs.map +1 -0
  21. package/package.json +37 -10
  22. package/survey-analytics-plotly.types/alternativeVizualizersWrapper.d.ts +73 -0
  23. package/survey-analytics-plotly.types/analytics-localization/arabic.d.ts +100 -0
  24. package/survey-analytics-plotly.types/analytics-localization/dutch.d.ts +100 -0
  25. package/survey-analytics-plotly.types/analytics-localization/english.d.ts +130 -0
  26. package/survey-analytics-plotly.types/analytics-localization/farsi.d.ts +100 -0
  27. package/survey-analytics-plotly.types/analytics-localization/finnish.d.ts +100 -0
  28. package/survey-analytics-plotly.types/analytics-localization/french.d.ts +100 -0
  29. package/survey-analytics-plotly.types/analytics-localization/german.d.ts +100 -0
  30. package/survey-analytics-plotly.types/analytics-localization/italian.d.ts +100 -0
  31. package/survey-analytics-plotly.types/analytics-localization/japanese.d.ts +100 -0
  32. package/survey-analytics-plotly.types/analytics-localization/norwegian.d.ts +100 -0
  33. package/survey-analytics-plotly.types/analytics-localization/polish.d.ts +100 -0
  34. package/survey-analytics-plotly.types/analytics-localization/portuguese.d.ts +100 -0
  35. package/survey-analytics-plotly.types/analytics-localization/russian.d.ts +100 -0
  36. package/survey-analytics-plotly.types/analytics-localization/spanish.d.ts +100 -0
  37. package/survey-analytics-plotly.types/analytics-localization/swedish.d.ts +100 -0
  38. package/survey-analytics-plotly.types/boolean.d.ts +15 -0
  39. package/survey-analytics-plotly.types/card.d.ts +29 -0
  40. package/survey-analytics-plotly.types/chartConfig.d.ts +9 -0
  41. package/survey-analytics-plotly.types/config.d.ts +35 -0
  42. package/survey-analytics-plotly.types/dashboard.d.ts +51 -0
  43. package/survey-analytics-plotly.types/dataProvider.d.ts +69 -0
  44. package/survey-analytics-plotly.types/entries/plotly.d.ts +2 -0
  45. package/survey-analytics-plotly.types/entries/summary.core.d.ts +44 -0
  46. package/survey-analytics-plotly.types/filterInfo.d.ts +11 -0
  47. package/survey-analytics-plotly.types/histogram.d.ts +102 -0
  48. package/{survey-analytics.types/layoutEngine.d.ts → survey-analytics-plotly.types/layout-engine.d.ts} +0 -12
  49. package/survey-analytics-plotly.types/localizationManager.d.ts +152 -0
  50. package/survey-analytics-plotly.types/matrix.d.ts +17 -0
  51. package/survey-analytics-plotly.types/matrixDropdownGrouped.d.ts +15 -0
  52. package/survey-analytics-plotly.types/muuri-layout-engine.d.ts +13 -0
  53. package/survey-analytics-plotly.types/nps.d.ts +37 -0
  54. package/survey-analytics-plotly.types/number.d.ts +27 -0
  55. package/survey-analytics-plotly.types/pivot.d.ts +59 -0
  56. package/{survey-analytics.types → survey-analytics-plotly.types}/plotly/chart-adapter.d.ts +11 -2
  57. package/survey-analytics-plotly.types/plotly/setup.d.ts +150 -0
  58. package/survey-analytics-plotly.types/ranking.d.ts +12 -0
  59. package/survey-analytics-plotly.types/selectBase.d.ts +116 -0
  60. package/survey-analytics-plotly.types/statisticCalculators.d.ts +9 -0
  61. package/survey-analytics-plotly.types/statistics-table.d.ts +28 -0
  62. package/survey-analytics-plotly.types/svgbundle.d.ts +2 -0
  63. package/survey-analytics-plotly.types/text.d.ts +25 -0
  64. package/survey-analytics-plotly.types/theme.d.ts +50 -0
  65. package/survey-analytics-plotly.types/themes/default-light.d.ts +965 -0
  66. package/survey-analytics-plotly.types/utils/calculationDateRanges.d.ts +35 -0
  67. package/survey-analytics-plotly.types/utils/dateRangeModel.d.ts +32 -0
  68. package/survey-analytics-plotly.types/utils/dateRangeWidget.d.ts +38 -0
  69. package/survey-analytics-plotly.types/utils/dropdownActionWidget.d.ts +31 -0
  70. package/survey-analytics-plotly.types/utils/dropdownBase.d.ts +47 -0
  71. package/survey-analytics-plotly.types/utils/dropdownWidget.d.ts +40 -0
  72. package/survey-analytics-plotly.types/utils/index.d.ts +62 -0
  73. package/survey-analytics-plotly.types/utils/toggle.d.ts +17 -0
  74. package/survey-analytics-plotly.types/utils/utils.d.ts +9 -0
  75. package/survey-analytics-plotly.types/visualizationComposite.d.ts +8 -0
  76. package/survey-analytics-plotly.types/visualizationManager.d.ts +60 -0
  77. package/survey-analytics-plotly.types/visualizationMatrixDropdown.d.ts +23 -0
  78. package/survey-analytics-plotly.types/visualizationMatrixDynamic.d.ts +8 -0
  79. package/survey-analytics-plotly.types/visualizationPanel.d.ts +464 -0
  80. package/survey-analytics-plotly.types/visualizationPanelDynamic.d.ts +20 -0
  81. package/survey-analytics-plotly.types/visualizerBase.d.ts +422 -0
  82. package/survey-analytics-plotly.types/visualizerDescription.d.ts +19 -0
  83. package/survey-analytics-plotly.types/visualizerFactory.d.ts +41 -0
  84. package/survey-analytics-plotly.types/wordcloud/stopwords/dutch.d.ts +1 -0
  85. package/survey-analytics-plotly.types/wordcloud/stopwords/english.d.ts +1 -0
  86. package/survey-analytics-plotly.types/wordcloud/stopwords/index.d.ts +3 -0
  87. package/survey-analytics-plotly.types/wordcloud/stopwords/norwegian.d.ts +1 -0
  88. package/survey-analytics-plotly.types/wordcloud/stopwords/spanish.d.ts +1 -0
  89. package/survey-analytics-plotly.types/wordcloud/widget.d.ts +38 -0
  90. package/survey-analytics-plotly.types/wordcloud/wordcloud.d.ts +28 -0
  91. package/survey-analytics-tabulator.types/analytics-localization/english.d.ts +28 -0
  92. package/survey-analytics-tabulator.types/entries/tabulator.d.ts +2 -25
  93. package/survey-analytics-tabulator.types/entries/tabulator.fontless.d.ts +26 -0
  94. package/survey-analytics-tabulator.types/localizationManager.d.ts +28 -0
  95. package/survey-analytics-tabulator.types/tables/extensions/footerextensions.d.ts +1 -0
  96. package/survey-analytics-tabulator.types/tables/extensions/tableextensions.d.ts +2 -1
  97. package/survey-analytics-tabulator.types/tables/tabulator.d.ts +7 -0
  98. package/survey-analytics-tabulator.types/theme.d.ts +50 -0
  99. package/survey-analytics-tabulator.types/themes/default-light.d.ts +965 -0
  100. package/survey-analytics-tabulator.types/utils/dropdownActionWidget.d.ts +31 -0
  101. package/survey-analytics-tabulator.types/utils/dropdownBase.d.ts +47 -0
  102. package/survey-analytics-tabulator.types/utils/dropdownWidget.d.ts +40 -0
  103. package/survey-analytics-tabulator.types/utils/index.d.ts +25 -2
  104. package/survey-analytics.types/alternativeVizualizersWrapper.d.ts +9 -4
  105. package/survey-analytics.types/analytics-localization/english.d.ts +28 -0
  106. package/survey-analytics.types/apexcharts/chart-adapter.d.ts +29 -0
  107. package/survey-analytics.types/apexcharts/index.d.ts +2 -0
  108. package/survey-analytics.types/apexcharts/setup.d.ts +185 -0
  109. package/survey-analytics.types/boolean.d.ts +1 -1
  110. package/survey-analytics.types/card.d.ts +29 -0
  111. package/survey-analytics.types/chartConfig.d.ts +9 -0
  112. package/survey-analytics.types/config.d.ts +1 -33
  113. package/survey-analytics.types/dashboard.d.ts +51 -0
  114. package/survey-analytics.types/dataProvider.d.ts +17 -0
  115. package/survey-analytics.types/entries/apexcharts.d.ts +2 -0
  116. package/survey-analytics.types/entries/apexcharts.fontless.d.ts +2 -0
  117. package/survey-analytics.types/entries/summary.core.d.ts +6 -0
  118. package/survey-analytics.types/histogram.d.ts +29 -13
  119. package/survey-analytics.types/layout-engine.d.ts +29 -0
  120. package/survey-analytics.types/localizationManager.d.ts +28 -0
  121. package/survey-analytics.types/matrix.d.ts +3 -2
  122. package/survey-analytics.types/matrixDropdownGrouped.d.ts +3 -2
  123. package/survey-analytics.types/muuri-layout-engine.d.ts +13 -0
  124. package/survey-analytics.types/nps.d.ts +5 -10
  125. package/survey-analytics.types/number.d.ts +8 -7
  126. package/survey-analytics.types/pivot.d.ts +25 -35
  127. package/survey-analytics.types/ranking.d.ts +3 -2
  128. package/survey-analytics.types/selectBase.d.ts +12 -15
  129. package/survey-analytics.types/statisticCalculators.d.ts +8 -13
  130. package/survey-analytics.types/statistics-table.d.ts +2 -2
  131. package/survey-analytics.types/text.d.ts +4 -3
  132. package/survey-analytics.types/theme.d.ts +50 -0
  133. package/survey-analytics.types/themes/default-light.d.ts +965 -0
  134. package/survey-analytics.types/utils/calculationDateRanges.d.ts +35 -0
  135. package/survey-analytics.types/utils/dateRangeModel.d.ts +32 -0
  136. package/survey-analytics.types/utils/dateRangeWidget.d.ts +38 -0
  137. package/survey-analytics.types/utils/dropdownActionWidget.d.ts +31 -0
  138. package/survey-analytics.types/utils/dropdownBase.d.ts +47 -0
  139. package/survey-analytics.types/utils/dropdownWidget.d.ts +40 -0
  140. package/survey-analytics.types/utils/index.d.ts +25 -2
  141. package/survey-analytics.types/utils/toggle.d.ts +17 -0
  142. package/survey-analytics.types/utils/utils.d.ts +9 -0
  143. package/survey-analytics.types/visualizationComposite.d.ts +1 -1
  144. package/survey-analytics.types/visualizationManager.d.ts +5 -5
  145. package/survey-analytics.types/visualizationMatrixDropdown.d.ts +2 -1
  146. package/survey-analytics.types/visualizationMatrixDynamic.d.ts +1 -1
  147. package/survey-analytics.types/visualizationPanel.d.ts +20 -3
  148. package/survey-analytics.types/visualizationPanelDynamic.d.ts +2 -1
  149. package/survey-analytics.types/visualizerBase.d.ts +65 -10
  150. package/survey-analytics.types/visualizerDescription.d.ts +19 -0
  151. package/survey-analytics.types/visualizerFactory.d.ts +11 -2
  152. package/survey-analytics.types/wordcloud/wordcloud.d.ts +6 -4
  153. package/survey.analytics.core.css +1131 -99
  154. package/survey.analytics.core.css.map +1 -1
  155. package/survey.analytics.core.js +5063 -1002
  156. package/survey.analytics.core.js.map +1 -1
  157. package/survey.analytics.core.min.css +9 -6
  158. package/survey.analytics.core.min.js +1 -1
  159. package/survey.analytics.core.min.js.LICENSE.txt +1 -1
  160. package/survey.analytics.css +1494 -103
  161. package/survey.analytics.css.map +1 -1
  162. package/survey.analytics.d.ts +1 -2
  163. package/survey.analytics.fontless.css +1629 -0
  164. package/survey.analytics.fontless.css.map +1 -0
  165. package/survey.analytics.fontless.min.css +14 -0
  166. package/survey.analytics.js +7427 -3055
  167. package/survey.analytics.js.map +1 -1
  168. package/survey.analytics.min.css +11 -6
  169. package/survey.analytics.min.js +1 -1
  170. package/survey.analytics.min.js.LICENSE.txt +1 -1
  171. package/survey.analytics.mongo.js +2 -2
  172. package/survey.analytics.mongo.js.map +1 -1
  173. package/survey.analytics.mongo.min.js +1 -1
  174. package/survey.analytics.mongo.min.js.LICENSE.txt +1 -1
  175. package/survey.analytics.plotly.css +1714 -0
  176. package/survey.analytics.plotly.css.map +1 -0
  177. package/survey.analytics.plotly.d.ts +1 -0
  178. package/survey.analytics.plotly.fontless.css +1492 -0
  179. package/survey.analytics.plotly.fontless.css.map +1 -0
  180. package/survey.analytics.plotly.fontless.min.css +13 -0
  181. package/survey.analytics.plotly.js +23829 -0
  182. package/survey.analytics.plotly.js.map +1 -0
  183. package/survey.analytics.plotly.min.css +14 -0
  184. package/survey.analytics.plotly.min.js +2 -0
  185. package/survey.analytics.plotly.min.js.LICENSE.txt +22 -0
  186. package/survey.analytics.tabulator.css +992 -132
  187. package/survey.analytics.tabulator.css.map +1 -1
  188. package/survey.analytics.tabulator.fontless.css +1121 -0
  189. package/survey.analytics.tabulator.fontless.css.map +1 -0
  190. package/survey.analytics.tabulator.fontless.min.css +6 -0
  191. package/survey.analytics.tabulator.js +2608 -235
  192. package/survey.analytics.tabulator.js.map +1 -1
  193. package/survey.analytics.tabulator.min.css +3 -2
  194. package/survey.analytics.tabulator.min.js +1 -1
  195. package/survey.analytics.tabulator.min.js.LICENSE.txt +1 -1
  196. package/themes/default-dark.js +1032 -0
  197. package/themes/default-dark.js.map +1 -0
  198. package/themes/default-dark.min.js +2 -0
  199. package/themes/default-dark.min.js.LICENSE.txt +5 -0
  200. package/themes/default-light.js +1032 -0
  201. package/themes/default-light.js.map +1 -0
  202. package/themes/default-light.min.js +2 -0
  203. package/themes/default-light.min.js.LICENSE.txt +5 -0
  204. package/themes/index.js +2063 -0
  205. package/themes/index.js.map +1 -0
  206. package/themes/index.min.js +2 -0
  207. package/themes/index.min.js.LICENSE.txt +5 -0
  208. package/themes/themes/default-dark.d.ts +965 -0
  209. package/themes/themes/default-light.d.ts +965 -0
  210. package/themes/themes/index.d.ts +1934 -0
  211. package/themes/utils/helpers.d.ts +8 -0
  212. package/survey-analytics.types/plotly/setup.d.ts +0 -32
  213. /package/{survey-analytics.types/entries/summary.d.ts → survey-analytics-plotly.types/entries/plotly.fontless.d.ts} +0 -0
  214. /package/{survey-analytics.types → survey-analytics-plotly.types}/plotly/index.d.ts +0 -0
  215. /package/{survey-analytics.types → survey-analytics-plotly.types}/plotly/legacy.d.ts +0 -0
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Dashboard library v2.5.14
2
+ * surveyjs - SurveyJS Dashboard library v3.0.0-beta.0
3
3
  * Copyright (c) 2015-2026 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
6
6
 
7
- import { D as DocumentHelper, l as localization, c as createImagesContainer, d as createLinksContainer, e as createCommercialLicenseLink, f as svgTemplate } from './shared.mjs';
8
- export { s as setupLocale, a as surveyStrings } from './shared.mjs';
7
+ import { a as DocumentHelper, l as localization, d as createImagesContainer, e as createLinksContainer, f as createCommercialLicenseLink, g as svgTemplate, D as DashboardTheme } from './shared3.mjs';
8
+ export { s as setupLocale, b as surveyStrings } from './shared3.mjs';
9
9
  import { ItemValue, settings, Serializer, surveyLocalization, hasLicense, EventBase, Event } from 'survey-core';
10
10
  import { TabulatorFull } from 'tabulator-tables';
11
11
 
@@ -19,16 +19,19 @@ class TableExtensions {
19
19
  if (!!extensions) {
20
20
  extensions = this.sortExtensions(extensions);
21
21
  extensions.forEach((extension) => {
22
- if (!!extension.render && this.table.allowExtension(extension)) {
23
- var action = extension.render(this.table, options);
24
- if (!!action) {
25
- targetNode.appendChild(action);
26
- this.renderedExtensions.push(extension);
27
- }
28
- }
22
+ this.renderExtension(extension, targetNode, options);
29
23
  });
30
24
  }
31
25
  }
26
+ renderExtension(extension, targetNode, options) {
27
+ if (!!extension.render && this.table.allowExtension(extension)) {
28
+ var action = extension.render(this.table, options);
29
+ if (!!action) {
30
+ targetNode.appendChild(action);
31
+ this.renderedExtensions.push(extension);
32
+ }
33
+ }
34
+ }
32
35
  destroy() {
33
36
  this.renderedExtensions.forEach((extension) => {
34
37
  if (!!extension.destroy)
@@ -93,8 +96,7 @@ TableExtensions.registerExtension({
93
96
  name: "details",
94
97
  visibleIndex: 0,
95
98
  render: (_table, options) => {
96
- const btn = DocumentHelper.createSvgButton("detail");
97
- btn.title = localization.getString("showMinorColumns");
99
+ const btn = DocumentHelper.createSvgButton("more-24x24", localization.getString("showMinorColumns"));
98
100
  btn.className += " sa-table__row-extension";
99
101
  btn.onclick = () => {
100
102
  options.row.toggleDetails();
@@ -107,121 +109,95 @@ TableExtensions.registerExtension({
107
109
  name: "select",
108
110
  visibleIndex: -1,
109
111
  render: function (_table, opt) {
110
- var row = opt.row;
111
- var checkbox = DocumentHelper.createElement("input", "sa-table__row-extension", {
112
- type: "checkbox",
113
- });
114
- checkbox.checked = row.getIsSelected();
115
- checkbox.onchange = function () {
112
+ const itemClassSelected = "sa-checkbox--checked";
113
+ const row = opt.row;
114
+ const iconContainer = DocumentHelper.createSvgButton("check-24x24");
115
+ iconContainer.onclick = () => {
116
116
  row.toggleSelect();
117
+ if (row.getIsSelected()) {
118
+ iconContainer.classList.add(itemClassSelected);
119
+ }
120
+ else {
121
+ iconContainer.classList.remove(itemClassSelected);
122
+ }
117
123
  };
118
- return checkbox;
124
+ iconContainer.className = "sa-checkbox sa-table__row-extension";
125
+ if (row.getIsSelected()) {
126
+ iconContainer.classList.add(itemClassSelected);
127
+ }
128
+ // var checkbox = <HTMLInputElement>DocumentHelper.createElement(
129
+ // "input",
130
+ // "sa-table__row-extension",
131
+ // {
132
+ // type: "checkbox",
133
+ // }
134
+ // );
135
+ // checkbox.checked = row.getIsSelected();
136
+ // checkbox.onchange = function () {
137
+ // row.toggleSelect();
138
+ // };
139
+ return iconContainer;
119
140
  },
120
141
  });
121
142
 
122
143
  TableExtensions.registerExtension({
123
144
  location: "header",
124
145
  name: "filter",
125
- visibleIndex: 0,
146
+ visibleIndex: 1,
126
147
  render: function (table) {
127
- const input = DocumentHelper.createInput("sa-table__global-filter sa-table__header-extension", localization.getString("filterPlaceholder"));
128
- input.onchange = (event) => {
129
- table.applyFilter(event.target.value);
130
- };
131
- return input;
148
+ // const input = DocumentHelper.createInput(
149
+ // "sa-table__global-filter sa-table__header-extension",
150
+ // localization.getString("filterPlaceholder")
151
+ // );
152
+ // input.onchange = (event: any) => {
153
+ // table.applyFilter(event.target.value);
154
+ // };
155
+ const el = DocumentHelper.createTextEditor({
156
+ onchange: (val) => { table.applyFilter(val); }
157
+ });
158
+ return el;
132
159
  },
133
160
  });
134
161
  TableExtensions.registerExtension({
135
162
  location: "header",
136
163
  name: "showcolumn",
137
- visibleIndex: 2,
138
- destroy: function () {
139
- this.onDestroy();
140
- },
164
+ visibleIndex: 20,
141
165
  render: function (table) {
142
- const dropdown = DocumentHelper.createElement("select", "sa-table__show-column sa-table__header-extension");
143
- function update() {
144
- var hiddenColumns = table.columns.filter((column) => !column.isVisible);
145
- if (hiddenColumns.length == 0) {
146
- dropdown.style.display = "none";
147
- return;
166
+ // const dropdown = DocumentHelper.createElement(
167
+ // "select",
168
+ // "sa-table__show-column sa-table__header-extension"
169
+ // );
170
+ const allColumns = table.columns.map((column) => {
171
+ var text = column.displayName || column.name;
172
+ if (!!text && text.length > 20) {
173
+ text = text.substring(0, 20) + "...";
148
174
  }
149
- dropdown.style.display = "inline-block";
150
- dropdown.innerHTML = "";
151
- var option = DocumentHelper.createElement("option", "", {
152
- text: localization.getString("showColumn"),
153
- disabled: true,
154
- selected: true,
155
- });
156
- dropdown.appendChild(option);
157
- hiddenColumns.forEach((column) => {
158
- var text = column.displayName || column.name;
159
- if (!!text && text.length > 20) {
160
- text = text.substring(0, 20) + "...";
161
- }
162
- var option = DocumentHelper.createElement("option", "", {
163
- text: text,
164
- title: column.displayName,
165
- value: column.name,
166
- });
167
- dropdown.appendChild(option);
168
- });
169
- }
170
- dropdown.onchange = (e) => {
171
- const val = e.target.value;
172
- e.stopPropagation();
173
- if (!val)
174
- return;
175
- table.setColumnVisibility(val, true);
176
- };
177
- update();
178
- var onVisibilityChangedCallback = () => {
179
- update();
180
- };
181
- table.onColumnsVisibilityChanged.add(onVisibilityChangedCallback);
182
- this.onDestroy = () => {
183
- table.onColumnsVisibilityChanged.remove(onVisibilityChangedCallback);
184
- };
185
- return dropdown;
186
- },
187
- });
188
- TableExtensions.registerExtension({
189
- location: "header",
190
- name: "showentries",
191
- visibleIndex: 3,
192
- render: function (table) {
193
- if (table.options.paginationEnabled === false) {
194
- return DocumentHelper.createElement("div");
195
- }
196
- function getEntriesDropdown(table) {
197
- const el = DocumentHelper.createElement("select");
198
- var optionsValues = table.paginationSizeSelector || ["1", "5", "10", "25", "50", "75", "100"];
199
- optionsValues.forEach(function (val) {
200
- var option = DocumentHelper.createElement("option", "", {
201
- value: val,
202
- text: val,
203
- });
204
- el.appendChild(option);
205
- });
206
- el.value = String(table.getPageSize());
207
- el.onchange = () => {
208
- table.setPageSize(Number(el.value));
175
+ return {
176
+ value: column.name,
177
+ text: text,
178
+ title: column.displayName || column.name,
179
+ icon: "check-24x24"
209
180
  };
210
- return el;
211
- }
212
- const selectorContainer = DocumentHelper.createElement("div", "sa-table__entries");
213
- const spaceSpan = DocumentHelper.createElement("span", "sa-table__header-space");
214
- const showSpan = DocumentHelper.createElement("span", "sa-table__entries-label sa-table__entries-label--right", {
215
- innerText: localization.getString("showLabel"),
216
181
  });
217
- const entriesSpan = DocumentHelper.createElement("span", "sa-table__entries-label sa-table__entries-label--left", {
218
- innerText: localization.getString("entriesLabel"),
182
+ const dropdown = DocumentHelper.createActionDropdown({
183
+ options: allColumns,
184
+ isSelected: (option) => {
185
+ const hiddenColumns = table.columns.filter((column) => !column.isVisible);
186
+ return hiddenColumns.length === 0 || hiddenColumns.filter(el => el.name === option.value).length === 0;
187
+ },
188
+ handler: (e) => {
189
+ if (!!e) {
190
+ if (!e)
191
+ return;
192
+ const column = table.columns.filter((column) => column.name === e)[0];
193
+ table.setColumnVisibility(e, !column.isVisible);
194
+ return false;
195
+ }
196
+ },
197
+ title: localization.getString("columns")
219
198
  });
220
- selectorContainer.appendChild(spaceSpan);
221
- selectorContainer.appendChild(showSpan);
222
- selectorContainer.appendChild(getEntriesDropdown(table));
223
- selectorContainer.appendChild(entriesSpan);
224
- return selectorContainer;
199
+ dropdown.className += " sa-table__show-column sa-table__header-extension";
200
+ return dropdown;
225
201
  },
226
202
  });
227
203
  TableExtensions.registerExtension({
@@ -229,41 +205,126 @@ TableExtensions.registerExtension({
229
205
  name: "removerows",
230
206
  visibleIndex: -1,
231
207
  render: function (table) {
232
- var btn = DocumentHelper.createElement("button", "sa-table__btn sa-table__btn--green sa-table__header-extension ", { innerText: localization.getString("removeRows") });
233
- btn.onclick = function () {
208
+ const btn = DocumentHelper.createButton((e) => {
234
209
  table.getCreatedRows().forEach(function (row) {
235
210
  if (row.getIsSelected()) {
236
211
  row.remove();
237
212
  }
238
213
  });
239
- };
214
+ }, localization.getString("removeRows"), "sa-button");
215
+ btn.className += " sa-table__header-extension sa-button-brand-tertiary";
240
216
  return btn;
217
+ // var btn = DocumentHelper.createElement(
218
+ // "button",
219
+ // "sa-table__btn sa-table__header-extension ",
220
+ // { innerText: localization.getString("removeRows") }
221
+ // );
222
+ // btn.onclick = function () {
223
+ // table.getCreatedRows().forEach(function (row) {
224
+ // if (row.getIsSelected()) {
225
+ // row.remove();
226
+ // }
227
+ // });
228
+ // };
229
+ // return btn;
241
230
  },
242
231
  });
243
232
  TableExtensions.registerExtension({
244
233
  location: "header",
245
234
  name: "changelocale",
246
- visibleIndex: 1,
235
+ visibleIndex: 40,
247
236
  render: function (table) {
248
237
  var locales = table.getLocales();
249
238
  if (table.options.disableLocaleSwitch || locales.length < 2)
250
239
  return null;
251
- const el = (DocumentHelper.createElement("select", "sa-table__header-extension", {}));
240
+ /*
241
+ const el = <HTMLSelectElement>(
242
+ DocumentHelper.createElement("select", "sa-table__header-extension", {})
243
+ );
252
244
  var optionsValues = [localization.getString("changeLocale")].concat(locales);
253
245
  optionsValues.forEach(function (val) {
254
- var option = DocumentHelper.createElement("option", "", {
255
- value: val,
256
- text: localization.localeNames[val] || localization.getString(val) || val,
257
- });
258
- el.appendChild(option);
246
+ var option = DocumentHelper.createElement("option", "", {
247
+ value: val,
248
+ text: localization.localeNames[val] || localization.getString(val) || val,
249
+ });
250
+ el.appendChild(option);
259
251
  });
260
252
  el.onchange = () => {
261
- table.locale = el.value;
253
+ table.locale = el.value;
262
254
  };
255
+ */
256
+ const optionsValues = locales.map(val => { return { value: val, text: localization.localeNames[val] || localization.getString(val) || val }; });
257
+ const el = DocumentHelper.createActionDropdown({
258
+ options: optionsValues,
259
+ isSelected: (option) => false,
260
+ handler: (e) => {
261
+ if (!!e) {
262
+ table.locale = e;
263
+ }
264
+ return true;
265
+ },
266
+ title: () => localization.getString("changeLocale"),
267
+ });
268
+ el.className += " sa-table__header-extension";
263
269
  return el;
264
270
  },
265
271
  });
266
272
 
273
+ TableExtensions.registerExtension({
274
+ location: "footer",
275
+ name: "showentries",
276
+ visibleIndex: 30,
277
+ render: function (table) {
278
+ if (table.options.paginationEnabled === false) {
279
+ return DocumentHelper.createElement("div");
280
+ }
281
+ function getEntriesDropdown(table) {
282
+ /*
283
+ const el = <HTMLSelectElement>DocumentHelper.createElement("select");
284
+ var optionsValues = table.paginationSizeSelector || ["1", "5", "10", "25", "50", "75", "100"];
285
+ optionsValues.forEach(function (val) {
286
+ var option = DocumentHelper.createElement("option", "", {
287
+ value: val,
288
+ text: val,
289
+ });
290
+ el.appendChild(option);
291
+ });
292
+ el.value = String(table.getPageSize());
293
+
294
+ el.onchange = () => {
295
+ table.setPageSize(Number(el.value));
296
+ };
297
+
298
+ return el;
299
+ */
300
+ const optionsValues = table.paginationSizeSelector || ["1", "5", "10", "25", "50", "75", "100"];
301
+ const el = DocumentHelper.createActionDropdown({
302
+ options: optionsValues.map(val => { return { value: val, text: val }; }),
303
+ isSelected: (option) => {
304
+ return option.value === table.getPageSize();
305
+ },
306
+ handler: (e) => {
307
+ if (e !== undefined && e !== null) {
308
+ table.setPageSize(Number(e));
309
+ }
310
+ return true;
311
+ },
312
+ title: () => { return String(table.getPageSize()); },
313
+ direction: "up"
314
+ });
315
+ el.className += " sa-table__entries-value";
316
+ return el;
317
+ }
318
+ const selectorContainer = DocumentHelper.createElement("div", "sa-table__entries");
319
+ const showSpan = DocumentHelper.createElement("span", "sa-table__entries-label sa-table__entries-label--right", {
320
+ innerText: localization.getString("entriesOnPageLabel"),
321
+ });
322
+ selectorContainer.appendChild(showSpan);
323
+ selectorContainer.appendChild(getEntriesDropdown(table));
324
+ return selectorContainer;
325
+ },
326
+ });
327
+
267
328
  var QuestionLocation;
268
329
  (function (QuestionLocation) {
269
330
  QuestionLocation[QuestionLocation["Column"] = 0] = "Column";
@@ -279,10 +340,16 @@ var ColumnDataType;
279
340
  TableExtensions.registerExtension({
280
341
  location: "column",
281
342
  name: "drag",
282
- visibleIndex: 0,
343
+ visibleIndex: 10,
283
344
  render: function (table, options) {
284
- const btn = DocumentHelper.createElement("button", "sa-table__svg-button sa-table__drag-button");
285
- btn.appendChild(DocumentHelper.createSvgElement("drag"));
345
+ const btn = DocumentHelper.createSvgButton("drag-24x24");
346
+ btn.className = "sa-table__svg-button sa-table__drag-button";
347
+ btn.title = localization.getString("columnReorder");
348
+ // const btn = DocumentHelper.createElement(
349
+ // "button",
350
+ // "sa-table__svg-button sa-table__drag-button"
351
+ // );
352
+ // btn.appendChild(DocumentHelper.createSvgElement("drag-24x24"));
286
353
  btn.addEventListener("mousedown", () => {
287
354
  table.enableColumnReorder();
288
355
  document.body.addEventListener("mouseup", () => {
@@ -295,12 +362,12 @@ TableExtensions.registerExtension({
295
362
  TableExtensions.registerExtension({
296
363
  location: "column",
297
364
  name: "sort",
298
- visibleIndex: 1,
365
+ visibleIndex: 20,
299
366
  render: function (table, options) {
300
367
  const descTitle = localization.getString("descOrder");
301
368
  const ascTitle = localization.getString("ascOrder");
302
- var btn = DocumentHelper.createSvgButton("sorting");
303
- btn.title = "";
369
+ var btn = DocumentHelper.createSvgButton("reorder-24x24");
370
+ btn.title = localization.getString("defaultOrder");
304
371
  var direction = "asc";
305
372
  btn.onclick = () => {
306
373
  if (direction == "asc") {
@@ -322,10 +389,9 @@ TableExtensions.registerExtension({
322
389
  TableExtensions.registerExtension({
323
390
  location: "column",
324
391
  name: "hide",
325
- visibleIndex: 2,
392
+ visibleIndex: 30,
326
393
  render: function (table, options) {
327
- var btn = DocumentHelper.createSvgButton("hide");
328
- btn.title = localization.getString("hideColumn");
394
+ var btn = DocumentHelper.createSvgButton("invisible-24x24", localization.getString("hideColumn"));
329
395
  btn.onclick = () => {
330
396
  table.setColumnVisibility(options.columnName, false);
331
397
  };
@@ -335,10 +401,9 @@ TableExtensions.registerExtension({
335
401
  TableExtensions.registerExtension({
336
402
  location: "column",
337
403
  name: "movetodetails",
338
- visibleIndex: 3,
404
+ visibleIndex: 10,
339
405
  render: function (table, options) {
340
- const button = DocumentHelper.createSvgButton("movetodetails");
341
- button.title = localization.getString("moveToDetail");
406
+ const button = DocumentHelper.createSvgButton("movetohorizontal-24x24", localization.getString("moveToDetail"));
342
407
  button.onclick = (e) => {
343
408
  e.stopPropagation();
344
409
  table.setColumnLocation(options.columnName, QuestionLocation.Row);
@@ -347,15 +412,23 @@ TableExtensions.registerExtension({
347
412
  },
348
413
  });
349
414
  TableExtensions.registerExtension({
350
- location: "column",
415
+ location: "columnfilter",
351
416
  name: "filter",
352
- visibleIndex: 4,
417
+ visibleIndex: 10,
353
418
  render: function (table, options) {
354
- var el = DocumentHelper.createInput("sa-table__filter", localization.getString("filterPlaceholder"));
355
- el.onclick = (e) => e.stopPropagation();
356
- el.onchange = (e) => {
357
- table.applyColumnFilter(options.columnName, el.value);
358
- };
419
+ const el = DocumentHelper.createTextEditor({
420
+ showIcon: false,
421
+ onchange: (val) => {
422
+ table.applyColumnFilter(options.columnName, val);
423
+ }
424
+ }
425
+ // "sa-table__filter",
426
+ // localization.getString("filterPlaceholder")
427
+ );
428
+ // el.onclick = (e) => e.stopPropagation();
429
+ // el.onchange = (e) => {
430
+ // table.applyColumnFilter(options.columnName, el.value);
431
+ // };
359
432
  return el;
360
433
  },
361
434
  });
@@ -403,8 +476,9 @@ class Details {
403
476
  this.targetNode = targetNode;
404
477
  this.location = "details";
405
478
  this.createShowAsColumnButton = (columnName) => {
406
- const button = DocumentHelper.createElement("button", "sa-table__btn sa-table__btn--gray");
407
- button.appendChild(document.createTextNode(localization.getString("showAsColumn")));
479
+ const button = DocumentHelper.createSvgButton("movetovertical-24x24", localization.getString("showAsColumn"));
480
+ // "button",
481
+ // "sa-table__btn sa-table__btn--gray"
408
482
  button.onclick = (e) => {
409
483
  e.stopPropagation();
410
484
  this.table.setColumnLocation(columnName, QuestionLocation.Column);
@@ -428,16 +502,20 @@ class Details {
428
502
  var td2 = DocumentHelper.createElement("td");
429
503
  td2.textContent = this.row.getRowData()[column.name];
430
504
  if (column.dataType === ColumnDataType.Image) {
431
- td2.innerHTML = "<image src='" + td2.textContent + "'/>";
505
+ const imageElement = DocumentHelper.createElement("img", "", {
506
+ src: td2.textContent
507
+ });
508
+ td2.innerHTML = "";
509
+ td2.appendChild(imageElement);
432
510
  }
433
511
  var td3 = DocumentHelper.createElement("td");
434
512
  td3.appendChild(this.createShowAsColumnButton(column.name));
513
+ row.appendChild(td3);
435
514
  row.appendChild(td1);
436
515
  row.appendChild(td2);
437
- row.appendChild(td3);
438
516
  rows.push(row);
439
517
  });
440
- var row = DocumentHelper.createElement("tr", "sa-table__detail");
518
+ var row = DocumentHelper.createElement("tr", "sa-table__detail sa-table-detail__actions");
441
519
  var td = DocumentHelper.createElement("td", "", { colSpan: 3 });
442
520
  var extensions = new TableExtensions(this.table);
443
521
  extensions.render(td, "details", { row: this.row });
@@ -1284,8 +1362,8 @@ const defaultDownloadOptions = {
1284
1362
  };
1285
1363
  const defaultOptions = {
1286
1364
  tabulatorOptions: {},
1287
- actionsColumnWidth: 60,
1288
- columnMinWidth: 248,
1365
+ actionsColumnWidth: 56,
1366
+ columnMinWidth: 384,
1289
1367
  downloadHiddenColumns: false,
1290
1368
  downloadButtons: ["csv"],
1291
1369
  downloadOptions: defaultDownloadOptions,
@@ -1323,6 +1401,7 @@ class Tabulator extends Table {
1323
1401
  }
1324
1402
  constructor(survey, data, options, _columnsData = []) {
1325
1403
  super(survey, data, options, _columnsData);
1404
+ this._theme = new DashboardTheme();
1326
1405
  this.onAfterRender = new Event();
1327
1406
  this.COLUMN_MIN_WIDTH = 155;
1328
1407
  this.tabulatorTables = null;
@@ -1334,7 +1413,8 @@ class Tabulator extends Table {
1334
1413
  };
1335
1414
  this.columnMovedCallback = (column, columns) => {
1336
1415
  var from = this._columns.indexOf(this.getColumnByName(column.getField()));
1337
- var to = columns.indexOf(column) - 1;
1416
+ const rowExtensions = TableExtensions.getExtensions("row").filter(e => e.visibleIndex >= 0);
1417
+ var to = columns.indexOf(column) - rowExtensions.length;
1338
1418
  this.moveColumn(from, to);
1339
1419
  this.disableColumnReorder();
1340
1420
  };
@@ -1394,13 +1474,25 @@ class Tabulator extends Table {
1394
1474
  targetNode = document.getElementById(targetNode);
1395
1475
  }
1396
1476
  targetNode.className += " sa-table sa-tabulator";
1477
+ if (!this._appliedTheme) {
1478
+ this._appliedTheme = this.theme;
1479
+ }
1480
+ if (this._appliedTheme) {
1481
+ this._appliedTheme.applyThemeToElement(targetNode);
1482
+ }
1397
1483
  const columns = this.getColumns();
1398
1484
  const data = this.tableData;
1485
+ var wrapper = DocumentHelper.createElement("div", "sa-tabulator__wrapper");
1486
+ var container = DocumentHelper.createElement("div", "sa-tabulator__container");
1399
1487
  var header = DocumentHelper.createElement("div", "sa-tabulator__header");
1488
+ var footer = DocumentHelper.createElement("div", "sa-tabulator__footer");
1400
1489
  var paginationElement = DocumentHelper.createElement("div", "sa-tabulator__pagination-container");
1401
- this.tableContainer = DocumentHelper.createElement("div");
1402
- targetNode.appendChild(header);
1403
- targetNode.appendChild(this.tableContainer);
1490
+ this.tableContainer = DocumentHelper.createElement("div", "sa-tabulator__table-container");
1491
+ container.appendChild(header);
1492
+ container.appendChild(this.tableContainer);
1493
+ container.appendChild(footer);
1494
+ wrapper.appendChild(container);
1495
+ targetNode.appendChild(wrapper);
1404
1496
  var config = {};
1405
1497
  Object.assign(config, {
1406
1498
  data,
@@ -1409,7 +1501,7 @@ class Tabulator extends Table {
1409
1501
  paginationMode: "local",
1410
1502
  paginationSize: this.currentPageSize,
1411
1503
  movableColumns: true,
1412
- // maxHeight: "100%",
1504
+ maxHeight: "50vw",
1413
1505
  columns,
1414
1506
  rowFormatter: this.rowFormatter,
1415
1507
  paginationElement: paginationElement,
@@ -1471,37 +1563,73 @@ class Tabulator extends Table {
1471
1563
  this.renderResult = targetNode;
1472
1564
  this.afterRender(targetNode);
1473
1565
  });
1474
- DocumentHelper.createElement("div", "sa-table__header-extensions");
1566
+ const extensionsContainer = DocumentHelper.createElement("div", "sa-table__header-extensions");
1567
+ this.extensions.render(extensionsContainer, "header");
1568
+ header.appendChild(extensionsContainer);
1475
1569
  header.appendChild(this.createDownloadsBar());
1476
- this.extensions.render(header, "header");
1477
- // header.appendChild(extensionsContainer);
1478
- header.appendChild(paginationElement);
1570
+ this.extensions.render(footer, "footer");
1571
+ footer.appendChild(paginationElement);
1572
+ this.renderResult = targetNode;
1479
1573
  }
1480
1574
  createDownloadsBar() {
1481
- var createDownloadButton = (type, caption) => {
1482
- const btn = DocumentHelper.createElement("button", "sa-table__btn sa-table__btn--small sa-table__btn--gray", {
1483
- innerText: caption,
1484
- onclick: () => {
1485
- this.download(type);
1486
- },
1487
- });
1488
- return btn;
1575
+ /*
1576
+ var createDownloadButton = (type: DownloadType, caption: string): HTMLElement => {
1577
+ const btn = DocumentHelper.createElement(
1578
+ "button",
1579
+ "sa-table__btn sa-table__btn--small sa-table__btn--gray",
1580
+ {
1581
+ innerText: caption,
1582
+ onclick: () => {
1583
+ this.download(type);
1584
+ },
1585
+ }
1586
+ );
1587
+ return btn;
1489
1588
  };
1490
- var container = DocumentHelper.createElement("div", "sa-tabulator__downloads-bar");
1491
- this._options.downloadButtons.forEach((type) => {
1492
- container.appendChild(createDownloadButton(type, localization.getString(`${type}DownloadCaption`)));
1589
+
1590
+ var container = DocumentHelper.createElement(
1591
+ "div",
1592
+ "sa-tabulator__downloads-bar"
1593
+ );
1594
+
1595
+ this._options.downloadButtons.forEach((type: DownloadType) => {
1596
+ container.appendChild(
1597
+ createDownloadButton(
1598
+ type,
1599
+ localization.getString(`${type}DownloadCaption`)
1600
+ )
1601
+ );
1493
1602
  });
1494
1603
  return container;
1604
+ */
1605
+ const values = this._options.downloadButtons.map(val => { return { value: val, text: localization.getString(`${val}DownloadCaption`) }; });
1606
+ const exportAsAction = DocumentHelper.createActionDropdown({
1607
+ options: values,
1608
+ isSelected: (option) => false,
1609
+ handler: (e) => {
1610
+ if (!!e) {
1611
+ this.download(e);
1612
+ }
1613
+ return true;
1614
+ },
1615
+ title: localization.getString("exportAs"),
1616
+ showArrow: false
1617
+ });
1618
+ exportAsAction.className += " sa-tabulator__downloads-bar sa-button-brand-secondary";
1619
+ return exportAsAction;
1495
1620
  }
1496
1621
  getTitleFormatter(cell, formatterParams, onRendered, columnName) {
1497
- var container = DocumentHelper.createElement("div");
1498
- var title = DocumentHelper.createElement("span", "", {
1622
+ var container = DocumentHelper.createElement("div", "sa-tabulator-column-header");
1623
+ var title = DocumentHelper.createElement("span", "sa-tabulator-column-title-text", {
1499
1624
  innerText: cell.getValue(),
1500
1625
  });
1501
- var actions = this.getHeaderActions(columnName);
1502
- container.appendChild(actions);
1626
+ const actionContainer = this.getHeaderActions(columnName);
1627
+ const containerFilter = DocumentHelper.createElement("div", "sa-table__filter-container");
1628
+ this.extensions.render(containerFilter, "columnfilter", { columnName: columnName });
1629
+ container.appendChild(actionContainer);
1503
1630
  container.appendChild(title);
1504
- ["mousemove", "mousedown"].forEach(eventName => actions.addEventListener(eventName, (event) => {
1631
+ container.appendChild(containerFilter);
1632
+ ["mousemove", "mousedown"].forEach(eventName => actionContainer.addEventListener(eventName, (event) => {
1505
1633
  if (!this.isColumnReorderEnabled) {
1506
1634
  event.stopPropagation();
1507
1635
  }
@@ -1540,20 +1668,22 @@ class Tabulator extends Table {
1540
1668
  },
1541
1669
  };
1542
1670
  });
1543
- // const rowExtensions = TableExtensions.getExtensions("row").filter(e => e.visibleIndex >= 0);
1671
+ const rowExtensions = TableExtensions.getExtensions("row").filter(e => e.visibleIndex >= 0);
1544
1672
  // const detailsExtension = TableExtensions.getExtensions("details").filter(e => e.visibleIndex >= 0);
1545
1673
  // const hasRowColumns = this.columns.some(c => c.location === QuestionLocation.Row);
1546
1674
  // if(rowExtensions.length > 1 || detailsExtension.length > 0
1547
1675
  // || rowExtensions.length == 1 && (rowExtensions[0].name == "details" && hasRowColumns || rowExtensions[0].name != "details")) {
1548
- columns.unshift({
1549
- download: false,
1550
- resizable: false,
1551
- headerSort: false,
1552
- minWidth: this._options.actionsColumnWidth,
1553
- width: this._options.actionsColumnWidth,
1554
- tooltip: (_, cell) => {
1555
- return localization.getString("actionsColumn");
1556
- }
1676
+ rowExtensions.forEach(ext => {
1677
+ columns.unshift({
1678
+ download: false,
1679
+ resizable: false,
1680
+ headerSort: false,
1681
+ minWidth: this._options.actionsColumnWidth,
1682
+ width: this._options.actionsColumnWidth,
1683
+ tooltip: (_, cell) => {
1684
+ return undefined;
1685
+ }
1686
+ });
1557
1687
  });
1558
1688
  // }
1559
1689
  return columns;
@@ -1651,6 +1781,20 @@ class Tabulator extends Table {
1651
1781
  dataItem["surveyOriginalData"] = item;
1652
1782
  return dataItem;
1653
1783
  }
1784
+ get theme() {
1785
+ return this._theme;
1786
+ }
1787
+ set theme(theme) {
1788
+ this._theme = theme;
1789
+ this._appliedTheme = undefined;
1790
+ }
1791
+ applyTheme(theme) {
1792
+ this.theme.setTheme(theme);
1793
+ this._appliedTheme = this.theme;
1794
+ if (this.renderResult) {
1795
+ this._appliedTheme.applyThemeToElement(this.renderResult);
1796
+ }
1797
+ }
1654
1798
  }
1655
1799
  class TabulatorRow extends TableRow {
1656
1800
  constructor(table, extensionsContainer, detailsContainer, innerRow) {
@@ -1673,6 +1817,17 @@ class TabulatorRow extends TableRow {
1673
1817
  }
1674
1818
  return null;
1675
1819
  }
1820
+ render() {
1821
+ let rowExtensions = TableExtensions.getExtensions("row").filter(e => e.visibleIndex >= 0);
1822
+ rowExtensions = this.extensions.sortExtensions(rowExtensions);
1823
+ rowExtensions.forEach((rowExt, index) => {
1824
+ const cellAction = this.innerRow.getCells()[index].getElement();
1825
+ cellAction.innerHTML = "";
1826
+ this.extensions.renderExtension(rowExt, cellAction, { row: this });
1827
+ cellAction.classList.add("sa-tabulator-cell__action");
1828
+ cellAction.classList.add("sa-tabulator-cell__action-" + rowExt.name.toLowerCase());
1829
+ });
1830
+ }
1676
1831
  remove() {
1677
1832
  this.innerRow.delete();
1678
1833
  super.remove();