@wavemaker/react-runtime 11.14.3-rc.6401 → 11.15.0-2.247

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 (245) hide show
  1. package/actions/base-action.js +5 -7
  2. package/actions/login-action.js +7 -8
  3. package/actions/logout-action.js +5 -7
  4. package/actions/navigation-action.js +73 -18
  5. package/actions/notification-action.js +22 -8
  6. package/actions/timer-action.js +13 -15
  7. package/actions/toast.js +4 -2
  8. package/actions/toast.service.js +1 -2
  9. package/components/advanced/carousel/index.js +1 -1
  10. package/components/advanced/carousel/template.js +1 -1
  11. package/components/basic/anchor/index.js +31 -11
  12. package/components/basic/html/index.js +115 -24
  13. package/components/basic/icon/index.js +2 -1
  14. package/components/basic/iframe/index.js +2 -1
  15. package/components/basic/label/index.js +12 -9
  16. package/components/basic/message/index.js +12 -3
  17. package/components/basic/picture/index.js +11 -4
  18. package/components/basic/progress-bar/index.js +4 -1
  19. package/components/basic/progress-circle/index.js +34 -28
  20. package/components/basic/progress-circle/props.js +10 -2
  21. package/components/basic/richtexteditor/index.js +95 -94
  22. package/components/basic/search/index.js +401 -156
  23. package/components/basic/search/providers.js +126 -61
  24. package/components/basic/spinner/index.js +2 -1
  25. package/components/basic/tree/index.js +34 -34
  26. package/components/basic/tree/utils.js +10 -4
  27. package/components/chart/components/barColumnChart/index.js +36 -33
  28. package/components/chart/components/bubbleChart/index.js +35 -25
  29. package/components/chart/components/chartLegend/utils.js +2 -1
  30. package/components/chart/components/cumulativeLineChart/index.js +30 -26
  31. package/components/chart/components/lineAreaChart/index.js +50 -32
  32. package/components/chart/components/pieDonutChart/index.js +13 -4
  33. package/components/chart/hooks/useXAxisConfig.js +15 -8
  34. package/components/chart/index.js +223 -53
  35. package/components/chart/utils.js +12 -1
  36. package/components/constants.js +5 -2
  37. package/components/container/accordion/accordion-pane/index.js +17 -12
  38. package/components/container/accordion/index.js +9 -4
  39. package/components/container/alignment-utils.js +56 -1
  40. package/components/container/index.js +49 -20
  41. package/components/container/panel/components/panel-header/index.js +3 -4
  42. package/components/container/panel/index.js +15 -10
  43. package/components/container/repeat-template/index.js +33 -0
  44. package/components/container/tabs/index.js +83 -14
  45. package/components/container/tabs/tab-pane/index.js +33 -10
  46. package/components/container/tabs/utils.js +51 -0
  47. package/components/container/wizard/components/StepComponents.js +2 -1
  48. package/components/container/wizard/components/WizardStep.js +2 -1
  49. package/components/container/wizard/index.js +64 -35
  50. package/components/container/wizard/utils.js +46 -1
  51. package/components/container/wizard/wizard-step/index.js +11 -1
  52. package/components/data/card/card-content/index.js +1 -1
  53. package/components/data/form/base-form/index.js +985 -183
  54. package/components/data/form/base-form/props.js +3 -1
  55. package/components/data/form/base-form/utils.js +159 -1
  56. package/components/data/form/dynamic-fields/constant.js +53 -0
  57. package/components/data/form/dynamic-fields/index.js +10 -45
  58. package/components/data/form/dynamic-fields/utils.js +37 -2
  59. package/components/data/form/form-action/index.js +5 -4
  60. package/components/data/form/form-context.js +5 -1
  61. package/components/data/form/form-controller/utils.js +84 -0
  62. package/components/data/form/form-controller/validation-contrustor.js +402 -189
  63. package/components/data/form/form-controller/withFormController.js +191 -52
  64. package/components/data/form/form-field/base-field.js +67 -45
  65. package/components/data/form/form-field/index.js +28 -5
  66. package/components/data/form/form-header/index.js +3 -4
  67. package/components/data/form/index.js +20 -1
  68. package/components/data/list/components/ListDND.js +2 -1
  69. package/components/data/list/components/ListItem.js +6 -2
  70. package/components/data/list/components/ListItemWithTemplate.js +46 -2
  71. package/components/data/list/components/ListItems.js +17 -26
  72. package/components/data/list/components/ListPagination.js +3 -3
  73. package/components/data/list/components/StandardListItems.js +3 -4
  74. package/components/data/list/hooks/useListEffects.js +55 -14
  75. package/components/data/list/hooks/useListEventHandlers.js +3 -1
  76. package/components/data/list/hooks/useListState.js +3 -1
  77. package/components/data/list/hooks/usePaginatedGroupedData.js +18 -5
  78. package/components/data/list/index.js +74 -55
  79. package/components/data/list/utils/list-helpers.js +73 -35
  80. package/components/data/list/utils/list-widget-methods.js +138 -95
  81. package/components/data/live-filter/index.js +26 -15
  82. package/components/data/live-form/index.js +51 -18
  83. package/components/data/live-form/props.js +1 -1
  84. package/components/data/pagination/components/BasicPagination.js +71 -16
  85. package/components/data/pagination/components/PageSizeSelector.js +8 -3
  86. package/components/data/pagination/components/TotalRecords.js +1 -5
  87. package/components/data/pagination/hooks/usePagination.js +349 -66
  88. package/components/data/pagination/index.js +137 -19
  89. package/components/data/table/components/AddNewRow.js +5 -1
  90. package/components/data/table/components/EditableCell.js +2 -2
  91. package/components/data/table/components/RowCells.js +64 -0
  92. package/components/data/table/components/RowExpansionButton.js +2 -2
  93. package/components/data/table/components/SummaryCell.js +111 -0
  94. package/components/data/table/components/SummaryRow.js +54 -0
  95. package/components/data/table/components/SummaryRowFooter.js +46 -0
  96. package/components/data/table/components/TableBody.js +61 -59
  97. package/components/data/table/components/TableDataRow.js +109 -0
  98. package/components/data/table/components/TableFilters.js +225 -121
  99. package/components/data/table/components/TableHeader.js +291 -23
  100. package/components/data/table/components/TablePanelHeading.js +139 -8
  101. package/components/data/table/components/index.js +22 -1
  102. package/components/data/table/hooks/use-edited-rows.js +141 -0
  103. package/components/data/table/hooks/useCellState.js +5 -12
  104. package/components/data/table/hooks/useFormWidget.js +58 -52
  105. package/components/data/table/hooks/usePaginationState.js +45 -24
  106. package/components/data/table/hooks/usePanelStructure.js +4 -4
  107. package/components/data/table/hooks/useRowHandlers.js +39 -5
  108. package/components/data/table/hooks/useRowSelection.js +244 -50
  109. package/components/data/table/hooks/useServerSideSorting.js +81 -37
  110. package/components/data/table/hooks/useTableColumns.js +211 -118
  111. package/components/data/table/hooks/useTableData.js +54 -9
  112. package/components/data/table/hooks/useTableEdit.js +272 -97
  113. package/components/data/table/hooks/useTableEffects.js +31 -13
  114. package/components/data/table/hooks/useTableFilter.js +1 -1
  115. package/components/data/table/hooks/useTableInitialization.js +23 -22
  116. package/components/data/table/hooks/useTableState.js +11 -5
  117. package/components/data/table/hooks/useTableStateManager.js +140 -65
  118. package/components/data/table/index.js +637 -274
  119. package/components/data/table/live-table/index.js +54 -22
  120. package/components/data/table/table-action/index.js +1 -1
  121. package/components/data/table/table-group/index.js +26 -0
  122. package/components/data/table/table-row-action/index.js +32 -18
  123. package/components/data/table/utils/buildSelectionColumns.js +12 -21
  124. package/components/data/table/utils/columnBuilder.js +29 -14
  125. package/components/data/table/utils/columnProxy.js +68 -1
  126. package/components/data/table/utils/constants.js +6 -2
  127. package/components/data/table/utils/crud-handlers.js +68 -63
  128. package/components/data/table/utils/groupHeaderUtils.js +102 -0
  129. package/components/data/table/utils/index.js +210 -21
  130. package/components/data/table/utils/renderDisplayCell.js +6 -6
  131. package/components/data/table/utils/selectionUtils.js +25 -26
  132. package/components/data/table/utils/validation.js +1 -0
  133. package/components/data/utils/filter-field-util.js +3 -3
  134. package/components/dialogs/alert-dialog/index.js +1 -1
  135. package/components/dialogs/confirm-dialog/index.js +1 -1
  136. package/components/dialogs/dialog/index.js +4 -1
  137. package/components/dialogs/dialog-content/index.js +3 -1
  138. package/components/dialogs/dialog-header/index.js +2 -2
  139. package/components/dialogs/iframe-dialog/index.js +11 -5
  140. package/components/dialogs/index.js +1 -1
  141. package/components/dialogs/login-dialog/index.js +1 -1
  142. package/components/dialogs/page-dialog/index.js +1 -1
  143. package/components/form/button/index.js +33 -7
  144. package/components/input/calendar/index.js +18 -6
  145. package/components/input/chips/index.js +99 -28
  146. package/components/input/chips/utils.js +34 -4
  147. package/components/input/color-picker/index.js +74 -25
  148. package/components/input/composite/index.js +3 -3
  149. package/components/input/currency/index.js +35 -49
  150. package/components/input/default/checkbox/index.js +23 -28
  151. package/components/input/default/checkboxset/index.js +38 -18
  152. package/components/input/default/checkboxset/utils.js +30 -0
  153. package/components/input/default/radioset/index.js +36 -39
  154. package/components/input/default/switch/index.js +30 -13
  155. package/components/input/epoch/date/index.js +130 -69
  156. package/components/input/epoch/date/utils.js +94 -1
  157. package/components/input/epoch/datetime/index.js +72 -22
  158. package/components/input/epoch/datetime/utils.js +49 -10
  159. package/components/input/epoch/time/index.js +68 -19
  160. package/components/input/epoch/time/utils.js +62 -14
  161. package/components/input/fileupload/Utils.js +12 -7
  162. package/components/input/fileupload/components/MultiUpload.js +2 -6
  163. package/components/input/fileupload/components/SingleUpload.js +3 -7
  164. package/components/input/fileupload/index.js +6 -10
  165. package/components/input/fileupload/useFileUpload.js +16 -5
  166. package/components/input/number/index.js +158 -43
  167. package/components/input/rating/index.js +90 -7
  168. package/components/input/select/index.js +209 -72
  169. package/components/input/slider/index.js +84 -26
  170. package/components/input/text/index.js +38 -18
  171. package/components/input/text/util.js +283 -130
  172. package/components/input/textarea/index.js +13 -10
  173. package/components/input/upload/index.js +124 -0
  174. package/components/input/upload/props.js +5 -0
  175. package/components/input/util/index.js +11 -0
  176. package/components/navbar/index.js +51 -3
  177. package/components/navbar/nav/index.js +46 -16
  178. package/components/navbar/nav-item/index.js +11 -5
  179. package/components/navigation/menu/components/ListItems.js +3 -0
  180. package/components/navigation/menu/constants.js +2 -1
  181. package/components/navigation/menu/hooks/useHoverState.hook.js +48 -0
  182. package/components/navigation/menu/hooks/useKeyboardMovements.hook.js +37 -0
  183. package/components/navigation/menu/hooks/useTransformedDataset.hook.js +15 -0
  184. package/components/navigation/menu/index.js +326 -188
  185. package/components/navigation/menu/utils/action-task.js +14 -0
  186. package/components/navigation/menu/utils/role-filter.js +76 -0
  187. package/components/navigation/popover/index.js +105 -32
  188. package/components/page/partial-container/index.js +34 -5
  189. package/components/prefab/index.js +2 -4
  190. package/context/PrefabContext.js +10 -6
  191. package/context/WidgetProvider.js +30 -31
  192. package/core/app.service.js +1 -1
  193. package/core/constants/events.js +57 -1
  194. package/core/dialog.service.js +1 -2
  195. package/core/event-notifier.js +1 -2
  196. package/core/formatter/array-formatters.js +33 -0
  197. package/core/formatter/date-formatters.js +2 -4
  198. package/core/formatter/index.js +2 -1
  199. package/core/formatter/number-formatters.js +5 -10
  200. package/core/formatter/security-formatters.js +2 -4
  201. package/core/formatter/string-formatters.js +3 -6
  202. package/core/proxy-service.js +85 -13
  203. package/core/script-registry.js +108 -48
  204. package/core/util/common.js +4 -4
  205. package/core/util/compare.js +30 -0
  206. package/core/util/dom.js +8 -8
  207. package/core/util/index.js +16 -6
  208. package/core/util/safe-is-equal.js +156 -0
  209. package/core/util/security.js +1 -2
  210. package/core/util/utils.js +16 -7
  211. package/higherOrder/BaseApp.js +108 -65
  212. package/higherOrder/BaseDateTime.js +31 -13
  213. package/higherOrder/BasePage.js +268 -144
  214. package/higherOrder/BasePartial.js +1 -1
  215. package/higherOrder/BasePrefab.js +33 -15
  216. package/higherOrder/DataNav.js +99 -16
  217. package/higherOrder/helper.js +41 -3
  218. package/higherOrder/withBaseWrapper.js +41 -28
  219. package/hooks/useAuth.js +11 -5
  220. package/hooks/useHttp.js +280 -94
  221. package/mui-config/theme-provider.js +1 -1
  222. package/mui-config/theme.js +1 -1
  223. package/package-lock.json +423 -331
  224. package/package.json +8 -8
  225. package/store/bindActions/i18nActions.js +18 -0
  226. package/store/index.js +3 -1
  227. package/store/slices/appConfigSlice.js +2 -2
  228. package/store/slices/authSlice.js +31 -28
  229. package/store/slices/i18nSlice.js +2 -2
  230. package/store/slices/navigationSlice.js +35 -0
  231. package/store/viewport.service.js +255 -0
  232. package/utils/attr.js +35 -0
  233. package/utils/dataset-util.js +1 -2
  234. package/utils/form-state.util.js +43 -12
  235. package/utils/form-utils.js +47 -2
  236. package/utils/format-util.js +28 -13
  237. package/utils/page-params-util.js +33 -1
  238. package/utils/state-persistance.js +72 -13
  239. package/utils/transformedDataset-utils.js +35 -24
  240. package/variables/base-variable.js +12 -14
  241. package/variables/crud-variable.js +225 -0
  242. package/variables/live-variable.js +56 -20
  243. package/variables/metadata.service.js +123 -0
  244. package/variables/model-variable.js +21 -15
  245. package/variables/service-variable.js +88 -83
@@ -14,6 +14,7 @@ var _withBaseWrapper = _interopRequireDefault(require("../../../../higherOrder/w
14
14
  var _dialog = _interopRequireDefault(require("../../../dialogs/dialog"));
15
15
  var _dialogBody = require("@wavemaker/react-runtime/components/dialogs/dialog-body");
16
16
  var _Box = _interopRequireDefault(require("@mui/material/Box"));
17
+ var _WidgetProvider = require("@wavemaker/react-runtime/context/WidgetProvider");
17
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
18
19
  var __jsx = _react["default"].createElement;
19
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -28,6 +29,9 @@ var WmLiveTable = function WmLiveTable(props) {
28
29
  var _useState3 = (0, _react.useState)(false),
29
30
  isAddingNewRow = _useState3[0],
30
31
  setIsAddingNewRow = _useState3[1];
32
+ var _useState4 = (0, _react.useState)(0),
33
+ formKey = _useState4[0],
34
+ setFormKey = _useState4[1]; // Key to force form re-creation
31
35
  var isDialogLayout = props.formlayout === "dialog";
32
36
  var _props$formlayout = props.formlayout,
33
37
  formlayout = _props$formlayout === void 0 ? "form" : _props$formlayout,
@@ -60,6 +64,8 @@ var WmLiveTable = function WmLiveTable(props) {
60
64
  }, [props.children]),
61
65
  tableChild = _useMemo.tableChild,
62
66
  formChild = _useMemo.formChild;
67
+ var tableWidget = (0, _WidgetProvider.useWidgetProxy)((tableChild === null || tableChild === void 0 ? void 0 : tableChild.props.name) || "");
68
+ var formWidget = (0, _WidgetProvider.useWidgetProxy)((formChild === null || formChild === void 0 ? void 0 : formChild.props.name) || "");
63
69
  var handleOpenDialog = (0, _react.useCallback)(function () {
64
70
  setIsDialogOpen(true);
65
71
  }, []);
@@ -71,18 +77,16 @@ var WmLiveTable = function WmLiveTable(props) {
71
77
 
72
78
  // Helper to get form widget - always get fresh value from listener
73
79
  var getFormWidget = (0, _react.useCallback)(function () {
74
- var _listener$Widgets;
75
80
  // Always get fresh value from listener to ensure we have the latest registered methods
76
- return listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets[formChild === null || formChild === void 0 ? void 0 : formChild.props.name];
81
+ return formWidget;
77
82
  }, [formChild === null || formChild === void 0 ? void 0 : formChild.props.name]);
78
83
  var getTableWidget = (0, _react.useCallback)(function () {
79
- var _listener$Widgets2;
80
- return listener === null || listener === void 0 || (_listener$Widgets2 = listener.Widgets) === null || _listener$Widgets2 === void 0 ? void 0 : _listener$Widgets2[tableChild === null || tableChild === void 0 ? void 0 : tableChild.props.name];
81
- }, [tableChild === null || tableChild === void 0 ? void 0 : tableChild.props.name]);
84
+ return tableWidget;
85
+ }, [tableWidget]);
82
86
 
83
87
  // Expose LiveTable methods through its own listener
84
88
  (0, _react.useEffect)(function () {
85
- if (!(listener !== null && listener !== void 0 && listener.onChange) || !(formChild !== null && formChild !== void 0 && formChild.props.name)) return;
89
+ if (!(listener !== null && listener !== void 0 && listener.onChange) || !(formChild !== null && formChild !== void 0 && formChild.props.name) || !tableWidget) return;
86
90
  var liveTableContext = {
87
91
  addNewRow: function addNewRow(event, widget, row) {
88
92
  var formWidget = getFormWidget();
@@ -91,11 +95,35 @@ var WmLiveTable = function WmLiveTable(props) {
91
95
  // Set flag to indicate we're adding a new row
92
96
  setIsAddingNewRow(true);
93
97
  if (isDialogLayout) {
94
- // Clear form data for new row
98
+ var _listener$Widgets;
99
+ // Clear form data for new row and increment key to force form re-creation
95
100
  setFormData({});
101
+ setFormKey(function (prev) {
102
+ return prev + 1;
103
+ }); // Force new form instance
104
+ // Clear the global widget registry to prevent stale form values
105
+ if (formChild !== null && formChild !== void 0 && formChild.props.name && listener !== null && listener !== void 0 && (_listener$Widgets = listener.Widgets) !== null && _listener$Widgets !== void 0 && _listener$Widgets[formChild.props.name]) {
106
+ listener.Widgets[formChild.props.name].formdata = {};
107
+ // Clear formfields to reset individual field values
108
+ if (listener.Widgets[formChild.props.name].formfields) {
109
+ Object.keys(listener.Widgets[formChild.props.name].formfields).forEach(function (key) {
110
+ var field = listener.Widgets[formChild.props.name].formfields[key];
111
+ if (field) {
112
+ field.datavalue = field.defaultvalue || "";
113
+ field.value = field.defaultvalue || "";
114
+ }
115
+ });
116
+ }
117
+ }
96
118
  handleOpenDialog();
97
119
  } else if (formlayout === "form") {
98
- // For non-dialog mode, just reset the form
120
+ // For non-dialog mode, clear form data by setting empty object
121
+ setFormData({});
122
+ // Also update the form widget's formdata in context
123
+ if (formWidget && formChild !== null && formChild !== void 0 && formChild.props.name && listener !== null && listener !== void 0 && listener.Widgets) {
124
+ listener.Widgets[formChild.props.name].formdata = {};
125
+ }
126
+ // Reset the form
99
127
  formWidget === null || formWidget === void 0 || formWidget["new"]();
100
128
  } else if (formlayout === "inline" || formlayout === "quickedit") {
101
129
  tableWidget === null || tableWidget === void 0 || tableWidget.addNewRow();
@@ -111,8 +139,8 @@ var WmLiveTable = function WmLiveTable(props) {
111
139
  setFormData(row);
112
140
  handleOpenDialog();
113
141
  } else if (formlayout === "form") {
114
- var formWidget = getFormWidget();
115
- formWidget === null || formWidget === void 0 || formWidget.edit(row);
142
+ var _formWidget = getFormWidget();
143
+ _formWidget === null || _formWidget === void 0 || _formWidget.edit(row);
116
144
  } else if (formlayout === "inline" || formlayout === "quickedit") {
117
145
  tableWidget === null || tableWidget === void 0 || tableWidget.editRow(event, widget, row);
118
146
  }
@@ -129,7 +157,7 @@ var WmLiveTable = function WmLiveTable(props) {
129
157
  // Create stable callbacks for form handlers
130
158
  var handleFormSuccess = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
131
159
  var _formChild$props, _formChild$props$onSu;
132
- var _formWidget$setShowVi, formWidget, tableWidget;
160
+ var _formWidget2$setShowV, _formWidget2, tableWidget;
133
161
  return _regenerator["default"].wrap(function _callee$(_context) {
134
162
  while (1) switch (_context.prev = _context.next) {
135
163
  case 0:
@@ -137,8 +165,8 @@ var WmLiveTable = function WmLiveTable(props) {
137
165
  handleCloseDialog();
138
166
  } else {
139
167
  // Set form to view mode after successful submission
140
- formWidget = getFormWidget();
141
- formWidget === null || formWidget === void 0 || (_formWidget$setShowVi = formWidget.setShowViewMode) === null || _formWidget$setShowVi === void 0 || _formWidget$setShowVi.call(formWidget, true);
168
+ _formWidget2 = getFormWidget();
169
+ _formWidget2 === null || _formWidget2 === void 0 || (_formWidget2$setShowV = _formWidget2.setShowViewMode) === null || _formWidget2$setShowV === void 0 || _formWidget2$setShowV.call(_formWidget2, true);
142
170
  }
143
171
  tableWidget = getTableWidget();
144
172
  if (!(tableWidget && tableWidget.datasource)) {
@@ -179,10 +207,10 @@ var WmLiveTable = function WmLiveTable(props) {
179
207
  // Call original cancel if it exists
180
208
  formChild === null || formChild === void 0 || (_formChild$props2 = formChild.props) === null || _formChild$props2 === void 0 || (_formChild$props2$can = _formChild$props2.cancel) === null || _formChild$props2$can === void 0 || _formChild$props2$can.call(_formChild$props2);
181
209
  if (formlayout === "form") {
182
- var _formWidget$setShowVi2;
210
+ var _formWidget3$setShowV;
183
211
  // Set form to view mode after successful submission
184
- var formWidget = getFormWidget();
185
- formWidget === null || formWidget === void 0 || (_formWidget$setShowVi2 = formWidget.setShowViewMode) === null || _formWidget$setShowVi2 === void 0 || _formWidget$setShowVi2.call(formWidget, true);
212
+ var _formWidget3 = getFormWidget();
213
+ _formWidget3 === null || _formWidget3 === void 0 || (_formWidget3$setShowV = _formWidget3.setShowViewMode) === null || _formWidget3$setShowV === void 0 || _formWidget3$setShowV.call(_formWidget3, true);
186
214
  }
187
215
  }, [handleCloseDialog, formChild === null || formChild === void 0 ? void 0 : formChild.props, formlayout, getFormWidget]);
188
216
 
@@ -193,17 +221,18 @@ var WmLiveTable = function WmLiveTable(props) {
193
221
  isLayoutDialog: isDialogLayout,
194
222
  onSuccess: handleFormSuccess,
195
223
  cancel: handleFormCancel
196
- }, isDialogLayout && formData !== null && {
224
+ }, formData !== null && {
197
225
  formdata: formData
198
226
  });
199
227
  return /*#__PURE__*/(0, _react.cloneElement)(formChild, newProps);
200
- }, [formChild, isDialogLayout, handleFormSuccess, handleFormCancel, formData]);
228
+ }, [formChild, isDialogLayout, handleFormSuccess, handleFormCancel, formData, formKey]);
201
229
  var enhancedTableChild = (0, _react.useMemo)(function () {
202
230
  if (!tableChild || ! /*#__PURE__*/(0, _react.isValidElement)(tableChild)) return tableChild;
203
231
  return /*#__PURE__*/(0, _react.cloneElement)(tableChild, _objectSpread(_objectSpread({}, tableChild.props), {}, {
204
- formName: formChild === null || formChild === void 0 ? void 0 : formChild.props.name
232
+ formName: formChild === null || formChild === void 0 ? void 0 : formChild.props.name,
233
+ hidden: props.hidden
205
234
  }));
206
- }, [tableChild]);
235
+ }, [tableChild, props.hidden]);
207
236
 
208
237
  // Render based on formlayout
209
238
  if (isDialogLayout) {
@@ -220,13 +249,16 @@ var WmLiveTable = function WmLiveTable(props) {
220
249
  }, __jsx(_dialogBody.WmDialogBody, {
221
250
  name: "popup-body",
222
251
  listener: {}
223
- }, enhancedFormChild)));
252
+ }, __jsx("div", {
253
+ key: "form-wrapper-".concat(formKey)
254
+ }, enhancedFormChild))));
224
255
  }
225
256
 
226
257
  // Default: render as form
227
258
  return __jsx(_Box["default"], {
228
259
  component: "div",
229
- className: "app-livegrid"
260
+ className: "app-livegrid",
261
+ hidden: props.hidden
230
262
  }, enhancedTableChild, enhancedFormChild);
231
263
  };
232
264
  var _default = exports["default"] = (0, _withBaseWrapper["default"])(WmLiveTable);
@@ -9,7 +9,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
12
- var _withBaseWrapper = _interopRequireDefault(require("../../../../higherOrder/withBaseWrapper"));
12
+ var _withBaseWrapper = _interopRequireDefault(require("@wavemaker/react-runtime/higherOrder/withBaseWrapper"));
13
13
  var _excluded = ["widgetType", "displayName", "iconclass", "action", "position", "shortcutkey", "listener", "children", "variant", "color", "onClick"];
14
14
  var __jsx = _react["default"].createElement;
15
15
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var __jsx = _react["default"].createElement;
10
+ /**
11
+ * WmTableGroup component for grouping table columns under a common header.
12
+ * Supports nested groups to create multi-level headers.
13
+ *
14
+ * @example
15
+ * <WmTableGroup name="personalInfo" caption="Personal Information">
16
+ * <WmTableColumn binding="firstName" caption="First Name" />
17
+ * <WmTableColumn binding="lastName" caption="Last Name" />
18
+ * </WmTableGroup>
19
+ */
20
+ function WmTableGroup(_ref) {
21
+ var children = _ref.children;
22
+ // This component is just a marker component for defining table structure
23
+ // The actual rendering logic is handled by the table header component
24
+ return __jsx(_react["default"].Fragment, null, children);
25
+ }
26
+ var _default = exports["default"] = WmTableGroup;
@@ -5,16 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = exports.WmTableRowAction = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
10
  var _react = _interopRequireDefault(require("react"));
12
- var _material = require("@mui/material");
13
11
  var _anchor = require("@wavemaker/react-runtime/components/basic/anchor");
12
+ var _button = require("@wavemaker/react-runtime/components/form/button");
14
13
  var _excluded = ["displayName", "title", "iconclass", "action", "row", "rowIndex", "listener", "children", "onClick", "widgettype", "show"];
15
14
  var __jsx = _react["default"].createElement;
16
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
17
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
15
  var WmTableRowActionComponent = function WmTableRowActionComponent(_ref) {
19
16
  var displayName = _ref.displayName,
20
17
  title = _ref.title,
@@ -29,11 +26,29 @@ var WmTableRowActionComponent = function WmTableRowActionComponent(_ref) {
29
26
  _ref$show = _ref.show,
30
27
  show = _ref$show === void 0 ? true : _ref$show,
31
28
  props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
32
- var handleClick = function handleClick(event) {
29
+ // Track if mousedown already triggered the action to prevent double-firing
30
+ var actionTriggeredRef = _react["default"].useRef(false);
31
+
32
+ // Use onMouseDown to trigger action BEFORE blur event fires
33
+ // This prevents the click from being lost when input has focus
34
+ var handleMouseDown = function handleMouseDown(event) {
33
35
  event.preventDefault();
34
36
  event.stopPropagation();
35
- if (onClick) {
36
- // Pass rowData as part of widget parameter
37
+ if (onClick && !actionTriggeredRef.current) {
38
+ actionTriggeredRef.current = true;
39
+ onClick(event, {}, row);
40
+ // Reset the flag after a short delay to allow subsequent clicks
41
+ setTimeout(function () {
42
+ actionTriggeredRef.current = false;
43
+ }, 100);
44
+ }
45
+ };
46
+ var handleClick = function handleClick(event, widget, newVal, oldVal) {
47
+ event === null || event === void 0 || event.preventDefault();
48
+ event === null || event === void 0 || event.stopPropagation();
49
+
50
+ // Only trigger if mousedown didn't already trigger (fallback for edge cases)
51
+ if (onClick && !actionTriggeredRef.current) {
37
52
  onClick(event, {}, row);
38
53
  }
39
54
  };
@@ -47,26 +62,25 @@ var WmTableRowActionComponent = function WmTableRowActionComponent(_ref) {
47
62
  name: props.name || displayName,
48
63
  listener: listener,
49
64
  onClick: handleClick,
65
+ onMouseDown: handleMouseDown,
50
66
  iconclass: iconclass,
51
67
  show: show.toString(),
52
68
  className: "wm-table-row-action ".concat(props.className || "")
53
69
  }));
54
70
  }
55
- return __jsx(_material.Button, {
71
+ return __jsx(_button.WmButton, {
56
72
  variant: "text",
57
73
  size: "small",
58
74
  className: "wm-table-row-action ".concat(props.className || ""),
59
75
  onClick: handleClick,
60
- title: title,
61
- startIcon: iconclass ? __jsx("i", {
62
- className: iconclass
63
- }) : undefined,
64
- sx: _objectSpread(_objectSpread({}, props.styles), {}, {
65
- padding: "0.25rem 0.5rem",
66
- marginRight: "0.25rem",
67
- minWidth: "auto",
68
- textTransform: "none"
69
- })
76
+ onMouseDown: handleMouseDown,
77
+ title: title
78
+ // startIcon={iconclass ? <i className={iconclass} /> : undefined}
79
+ ,
80
+ styles: props.styles,
81
+ name: props.name,
82
+ listener: props.listener,
83
+ iconclass: iconclass
70
84
  }, displayName);
71
85
  };
72
86
  WmTableRowActionComponent.displayName = "WmTableRowAction";
@@ -8,12 +8,10 @@ exports.buildSelectionColumns = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _material = require("@mui/material");
10
10
  var _index = require("./index");
11
- var _lodashEs = require("lodash-es");
12
11
  var __jsx = _react["default"].createElement;
13
12
  var buildSelectionColumns = exports.buildSelectionColumns = function buildSelectionColumns(_ref) {
14
13
  var useRadioSelect = _ref.useRadioSelect,
15
14
  useMultiSelect = _ref.useMultiSelect,
16
- selectedRowId = _ref.selectedRowId,
17
15
  selectedRowIds = _ref.selectedRowIds,
18
16
  handleRadioSelection = _ref.handleRadioSelection,
19
17
  handleMultiSelection = _ref.handleMultiSelection,
@@ -42,12 +40,10 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
42
40
  });
43
41
  },
44
42
  cell: function cell(_ref2) {
45
- var _table$getState$rowSe;
46
- var row = _ref2.row,
47
- table = _ref2.table;
43
+ var row = _ref2.row;
48
44
  var rowId = row.id;
49
- // Get selection state from table's rowSelection state
50
- var isSelected = ((_table$getState$rowSe = table.getState().rowSelection) === null || _table$getState$rowSe === void 0 ? void 0 : _table$getState$rowSe[rowId]) || false;
45
+ // Use TanStack Table's built-in selection state for reactive cell updates
46
+ var isSelected = row.getIsSelected();
51
47
  return __jsx(_material.Box, {
52
48
  sx: {
53
49
  display: "flex",
@@ -89,14 +85,11 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
89
85
  if (useMultiSelect) {
90
86
  return {
91
87
  id: "multiSelect",
92
- header: function header(_ref3) {
93
- var table = _ref3.table;
94
- // Get the current data and selection state from the table instance
95
- var currentData = table.options.data || [];
96
- var rowSelection = table.getState().rowSelection || {};
97
- var selectedCount = (0, _lodashEs.size)((0, _lodashEs.pickBy)(rowSelection));
98
- var isAllSelected = selectedCount > 0 && selectedCount === currentData.length;
99
- var isIndeterminate = selectedCount > 0 && selectedCount < currentData.length;
88
+ header: function header() {
89
+ // Use selectedRowIds and internalDataset directly for reliable state
90
+ var selectedCount = selectedRowIds.length;
91
+ var isAllSelected = selectedCount > 0 && selectedCount === internalDataset.length;
92
+ var isIndeterminate = selectedCount > 0 && selectedCount < internalDataset.length;
100
93
  return __jsx(_material.Box, {
101
94
  sx: {
102
95
  display: "flex",
@@ -121,13 +114,11 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
121
114
  className: "caption"
122
115
  })));
123
116
  },
124
- cell: function cell(_ref4) {
125
- var _table$getState$rowSe2;
126
- var row = _ref4.row,
127
- table = _ref4.table;
117
+ cell: function cell(_ref3) {
118
+ var row = _ref3.row;
128
119
  var rowId = row.id;
129
- // Get selection state from table's rowSelection state
130
- var isSelected = ((_table$getState$rowSe2 = table.getState().rowSelection) === null || _table$getState$rowSe2 === void 0 ? void 0 : _table$getState$rowSe2[rowId]) || false;
120
+ // Use TanStack Table's built-in selection state for reactive cell updates
121
+ var isSelected = row.getIsSelected();
131
122
  return __jsx(_material.Box, {
132
123
  sx: {
133
124
  display: "flex",
@@ -20,9 +20,9 @@ var createRowIndexColumn = exports.createRowIndexColumn = function createRowInde
20
20
  return {
21
21
  id: "rowIndex",
22
22
  header: "S. No.",
23
- size: 60,
24
- minSize: 60,
25
- maxSize: 60,
23
+ size: 70,
24
+ minSize: 70,
25
+ maxSize: 70,
26
26
  enableResizing: false,
27
27
  cell: function cell(_ref) {
28
28
  var row = _ref.row,
@@ -68,7 +68,7 @@ var createDataColumn = exports.createDataColumn = function createDataColumn(wmCo
68
68
  } else if ((_wmColumn$styles = wmColumn.styles) !== null && _wmColumn$styles !== void 0 && _wmColumn$styles.width) {
69
69
  columnSize = (0, _.parseWidth)(wmColumn.styles.width);
70
70
  }
71
- return {
71
+ return _objectSpread(_objectSpread({
72
72
  accessorKey: wmColumn.field,
73
73
  // Use sortby field for sorting if provided, otherwise use the display field
74
74
  // Supports nested properties like "department.store.employee"
@@ -77,12 +77,13 @@ var createDataColumn = exports.createDataColumn = function createDataColumn(wmCo
77
77
  } : undefined,
78
78
  header: wmColumn.caption,
79
79
  size: columnSize,
80
- minSize: 50,
81
- // Minimum column width in pixels
82
- maxSize: columnSize,
83
- // Set maxSize if we have a specific width to maintain the width
84
- enableResizing: !columnSize,
85
- // Disable resizing if width is specified
80
+ minSize: 50
81
+ }, columnSize ? {} : {
82
+ maxSize: 500
83
+ }), {}, {
84
+ // Only set maxSize for auto-sized columns
85
+ enableResizing: true,
86
+ // Enable resizing for all data columns
86
87
  cell: function cell(_ref2) {
87
88
  var row = _ref2.row;
88
89
  return renderCell(wmColumn, row);
@@ -92,7 +93,8 @@ var createDataColumn = exports.createDataColumn = function createDataColumn(wmCo
92
93
  meta: _objectSpread(_objectSpread({
93
94
  textAlign: wmColumn.textalignment,
94
95
  backgroundColor: wmColumn.backgroundcolor,
95
- className: wmColumn.colClass
96
+ className: wmColumn === null || wmColumn === void 0 ? void 0 : wmColumn.className,
97
+ colClass: wmColumn.colClass
96
98
  }, wmColumn.styles), {}, {
97
99
  // Include widget types for filter rendering
98
100
  widgetType: wmColumn.widgetType,
@@ -100,9 +102,11 @@ var createDataColumn = exports.createDataColumn = function createDataColumn(wmCo
100
102
  editinputtype: wmColumn.editinputtype,
101
103
  // Include column type for filtering
102
104
  type: wmColumn.type || wmColumn.columntype || "string",
103
- searchable: wmColumn.searchable !== false
105
+ searchable: wmColumn.searchable !== false,
106
+ // Custom cell renderer for optimized rendering in MemoizedRowCells
107
+ renderCellContent: wmColumn === null || wmColumn === void 0 ? void 0 : wmColumn.renderCellContent
104
108
  })
105
- };
109
+ });
106
110
  };
107
111
 
108
112
  /**
@@ -119,7 +123,7 @@ var createDataColumns = exports.createDataColumns = function createDataColumns(w
119
123
  };
120
124
 
121
125
  /**
122
- * Creates save/cancel action buttons for editing mode
126
+ * Creates save/cancel/delete action buttons for editing mode
123
127
  */
124
128
  var createEditingActionButtons = exports.createEditingActionButtons = function createEditingActionButtons() {
125
129
  return [{
@@ -144,6 +148,17 @@ var createEditingActionButtons = exports.createEditingActionButtons = function c
144
148
  action: "cancel",
145
149
  show: true,
146
150
  widgettype: "button"
151
+ }, {
152
+ key: "delete-edit",
153
+ name: "delete-row",
154
+ className: "delete row-action-button btn app-button btn-transparent delete-row-button",
155
+ dataActionKey: "deleteRow",
156
+ displayName: "",
157
+ title: "Delete",
158
+ iconclass: "wi wi-trash",
159
+ action: "delete",
160
+ show: true,
161
+ widgettype: "button"
147
162
  }];
148
163
  };
149
164
 
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.createColumnsProxy = createColumnsProxy;
7
8
  exports.keyMap = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
13
  var keyMap = exports.keyMap = {
9
14
  caption: "header",
10
15
  name: "accessorKey",
@@ -15,13 +20,36 @@ var keyMap = exports.keyMap = {
15
20
  colClass: "meta.className",
16
21
  style: "meta"
17
22
  };
18
- function createColumnsProxy(wmTableColumns, applyOverride, setColumnsVersion) {
23
+
24
+ // Types for summary row data
25
+
26
+ // Interface for aggregate methods
27
+
28
+ // Interface for enhanced column with aggregate and summary methods
29
+
30
+ // Function to create aggregate methods for a column
31
+
32
+ function createColumnsProxy(wmTableColumns, applyOverride, setColumnsVersion, setSummaryRowDef) {
19
33
  var proxy = {};
20
34
  wmTableColumns.forEach(function (col, idx) {
21
35
  var key = col.field;
22
36
  if (key) {
37
+ // Get column's show property (default to true if not specified)
38
+ var columnShow = col.show !== undefined ? col.show : true;
39
+
40
+ // Create setSummaryRowData method
41
+ var setSummaryRowData = function setSummaryRowData(data) {
42
+ var newData = Array.isArray(data) ? data : [data];
43
+ invokeSummaryRowData(key, newData, setSummaryRowDef, columnShow);
44
+ };
45
+
46
+ // Create the proxy for this column
23
47
  proxy[key] = new Proxy(col, {
24
48
  get: function get(target, prop) {
49
+ // Return setSummaryRowData method
50
+ if (prop === "setSummaryRowData") {
51
+ return setSummaryRowData;
52
+ }
25
53
  return target[prop];
26
54
  },
27
55
  set: function set(target, prop, value) {
@@ -45,4 +73,43 @@ function createColumnsProxy(wmTableColumns, applyOverride, setColumnsVersion) {
45
73
  }
46
74
  });
47
75
  return proxy;
76
+ }
77
+
78
+ // Helper function to invoke summary row data with Promise handling
79
+ function invokeSummaryRowData(columnKey, data, setSummaryRowDef, show) {
80
+ if (!setSummaryRowDef) return;
81
+ data.forEach(function (item, index) {
82
+ // Handle Promise values directly
83
+ if (item instanceof Promise) {
84
+ item.then(function (resolvedValue) {
85
+ setSummaryRowDef(columnKey, resolvedValue, index, true, show);
86
+ })["catch"](function (error) {
87
+ console.error("Error resolving summary row data for column ".concat(columnKey, ":"), error);
88
+ setSummaryRowDef(columnKey, "", index, true, show);
89
+ });
90
+ }
91
+ // Handle objects with Promise values
92
+ else if (item && (0, _typeof2["default"])(item) === "object" && "value" in item) {
93
+ var itemObj = item;
94
+ if (itemObj.value instanceof Promise) {
95
+ itemObj.value.then(function (resolvedValue) {
96
+ setSummaryRowDef(columnKey, _objectSpread(_objectSpread({}, itemObj), {}, {
97
+ value: resolvedValue
98
+ }), index, true, show);
99
+ })["catch"](function (error) {
100
+ console.error("Error resolving summary row data for column ".concat(columnKey, ":"), error);
101
+ setSummaryRowDef(columnKey, _objectSpread(_objectSpread({}, itemObj), {}, {
102
+ value: ""
103
+ }), index, true, show);
104
+ });
105
+ } else {
106
+ // Object with non-Promise value
107
+ setSummaryRowDef(columnKey, item, index, false, show);
108
+ }
109
+ }
110
+ // Handle regular values (string, number, etc.)
111
+ else {
112
+ setSummaryRowDef(columnKey, item, index, false, show);
113
+ }
114
+ });
48
115
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TABLE_MESSAGES = exports.TABLE_DATA_STATES = exports.TABLE_CSS_CLASSES = exports.INTERACTIVE_TAG_NAMES = exports.INTERACTIVE_ROLES = exports.INTERACTIVE_DATA_ROLES = exports.INTERACTIVE_CLASSES = exports.DYNAMIC_COLUMNS_CONFIG = void 0;
6
+ exports.UNSUPPORTED_STATE_PERSISTENCE_TYPES = exports.TABLE_MESSAGES = exports.TABLE_DATA_STATES = exports.TABLE_CSS_CLASSES = exports.INTERACTIVE_TAG_NAMES = exports.INTERACTIVE_ROLES = exports.INTERACTIVE_DATA_ROLES = exports.INTERACTIVE_CLASSES = exports.DYNAMIC_COLUMNS_CONFIG = void 0;
7
7
  // CSS Class Names Constants
8
8
  var TABLE_CSS_CLASSES = exports.TABLE_CSS_CLASSES = {
9
9
  tableRow: "app-datagrid-row",
@@ -77,4 +77,8 @@ var DYNAMIC_COLUMNS_CONFIG = exports.DYNAMIC_COLUMNS_CONFIG = {
77
77
  maxColumns: 10,
78
78
  // Maximum number of columns to generate from data (matching Angular behavior)
79
79
  sampleSize: 3 // Number of rows to sample for column detection
80
- };
80
+ };
81
+
82
+ // Navigation types that don't support state persistence
83
+ // These navigation types accumulate data and don't maintain traditional pagination state
84
+ var UNSUPPORTED_STATE_PERSISTENCE_TYPES = exports.UNSUPPORTED_STATE_PERSISTENCE_TYPES = ["Scroll", "On-Demand", "Inline"];