@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
@@ -16,7 +16,7 @@ var _Box = _interopRequireDefault(require("@mui/material/Box"));
16
16
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
17
17
  var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
18
18
  var _withBaseWrapper = require("@wavemaker/react-runtime/higherOrder/withBaseWrapper");
19
- var _excluded = ["iconurl", "iconclass", "iconwidth", "iconheight", "iconmargin", "iconposition", "caption", "badgevalue", "children", "styles", "conditionalstyles", "className", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onFocus", "onBlur", "onKeydown", "onKeyup", "listener", "name", "disabled", "type", "shortcutkey", "arialabel", "show"];
19
+ var _excluded = ["iconurl", "iconclass", "iconwidth", "iconheight", "iconmargin", "iconposition", "caption", "badgevalue", "children", "styles", "conditionalstyles", "className", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onFocus", "onBlur", "onKeydown", "onKeypress", "onKeyup", "listener", "name", "disabled", "type", "shortcutkey", "arialabel", "show"];
20
20
  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); }
21
21
  var __jsx = _react["default"].createElement;
22
22
  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; }
@@ -44,6 +44,7 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
44
44
  onFocus = props.onFocus,
45
45
  onBlur = props.onBlur,
46
46
  onKeydown = props.onKeydown,
47
+ onKeypress = props.onKeypress,
47
48
  onKeyup = props.onKeyup,
48
49
  listener = props.listener,
49
50
  name = props.name,
@@ -56,6 +57,7 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
56
57
  _props$show = props.show,
57
58
  show = _props$show === void 0 ? "true" : _props$show,
58
59
  restProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
60
+ var safeCaption = (caption === null || caption === void 0 ? void 0 : caption.toString().replace(/undefined|null/g, "")) || "";
59
61
  var btnRef = (0, _react.useRef)(null);
60
62
  (0, _react.useEffect)(function () {
61
63
  if (!shortcutkey) return;
@@ -73,7 +75,9 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
73
75
  }, [shortcutkey]);
74
76
  function handleClick(event) {
75
77
  event.preventDefault();
76
- event.stopPropagation();
78
+ if (!props.stopPropagation) {
79
+ event.stopPropagation();
80
+ }
77
81
  onClick === null || onClick === void 0 || onClick(event, props);
78
82
  }
79
83
  function handleOnBlur(event) {
@@ -109,7 +113,25 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
109
113
  event.stopPropagation();
110
114
  onKeyup === null || onKeyup === void 0 || onKeyup(event, props);
111
115
  }
112
- var EVENTS = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, onBlur && {
116
+ function handleKeyPress(event) {
117
+ event.preventDefault();
118
+ event.stopPropagation();
119
+ onKeypress === null || onKeypress === void 0 || onKeypress(event, props);
120
+ }
121
+ var handleMouseDown = function handleMouseDown(event) {
122
+ var formName = props.formName;
123
+ if (type == "reset" && formName) {
124
+ var _document;
125
+ event.preventDefault();
126
+ (_document = document) === null || _document === void 0 || (_document = _document.activeElement) === null || _document === void 0 || _document.blur();
127
+ setTimeout(function () {
128
+ var _listener$Widgets, _listener$Widgets$for;
129
+ (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 || (_listener$Widgets = _listener$Widgets[formName]) === null || _listener$Widgets === void 0 || (_listener$Widgets$for = _listener$Widgets.formreset) === null || _listener$Widgets$for === void 0 || _listener$Widgets$for.call(_listener$Widgets);
130
+ onClick === null || onClick === void 0 || onClick(event, props);
131
+ }, 0);
132
+ }
133
+ };
134
+ var EVENTS = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, onBlur && {
113
135
  onBlur: handleOnBlur
114
136
  }), onFocus && {
115
137
  onFocus: handleOnFocus
@@ -125,6 +147,10 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
125
147
  onKeyUp: handleKeyUp
126
148
  }), onClick && {
127
149
  onClick: handleClick
150
+ }), onKeypress && {
151
+ onKeyPress: handleKeyPress
152
+ }), {
153
+ onMouseDown: handleMouseDown
128
154
  });
129
155
  return __jsx(_Button["default"], (0, _extends2["default"])({
130
156
  sx: {
@@ -145,7 +171,7 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
145
171
  ref: btnRef,
146
172
  caption: caption,
147
173
  disabled: disabled,
148
- "aria-label": arialabel,
174
+ "aria-label": safeCaption,
149
175
  title: props.hint,
150
176
  show: show === null || show === void 0 ? void 0 : show.toString()
151
177
  }, restProps, EVENTS), iconurl && __jsx(_image["default"], {
@@ -172,11 +198,11 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
172
198
  }), __jsx(_Box["default"], {
173
199
  component: "span",
174
200
  className: "sr-only"
175
- }, caption, " ", listener === null || listener === void 0 || (_listener$appLocale = listener.appLocale) === null || _listener$appLocale === void 0 ? void 0 : _listener$appLocale.LABEL_ICON)), __jsx(_Box["default"], {
201
+ }, safeCaption, " ", listener === null || listener === void 0 || (_listener$appLocale = listener.appLocale) === null || _listener$appLocale === void 0 ? void 0 : _listener$appLocale.LABEL_ICON)), __jsx(_Box["default"], {
176
202
  component: "span",
177
203
  className: "btn-caption",
178
204
  dangerouslySetInnerHTML: {
179
- __html: caption || ""
205
+ __html: safeCaption || ""
180
206
  },
181
207
  sx: {
182
208
  color: "inherit",
@@ -207,7 +233,7 @@ var WmButton = exports.WmButton = /*#__PURE__*/(0, _react.memo)(function (props)
207
233
  }
208
234
  }));
209
235
  }, function (prev, current) {
210
- var keys = ["iconurl", "iconclass", "icon", "width", "iconheight", "iconmargin", "caption", "badgevalue", "disabled"];
236
+ var keys = ["iconurl", "iconclass", "icon", "width", "iconheight", "iconmargin", "caption", "badgevalue", "disabled", "hidden", "onClick"];
211
237
  return keys.every(function (key) {
212
238
  return prev[key] === current[key];
213
239
  });
@@ -28,6 +28,7 @@ var __jsx = _react["default"].createElement;
28
28
  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; }
29
29
  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; }
30
30
  var WmCalendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
31
+ var _props$hidden;
31
32
  var name = props.name,
32
33
  dataset = props.dataset,
33
34
  datavalue = props.datavalue,
@@ -122,24 +123,34 @@ var WmCalendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
122
123
  }
123
124
  }, [calendartype, controls]);
124
125
  var invokeCallback = (0, _react.useCallback)(function (eventName, eventData) {
126
+ var $start = eventData.$start,
127
+ $end = eventData.$end,
128
+ $view = eventData.$view,
129
+ $data = eventData.$data,
130
+ $event = eventData.$event,
131
+ $newData = eventData.$newData,
132
+ $oldData = eventData.$oldData,
133
+ $delta = eventData.$delta,
134
+ $revertFunc = eventData.$revertFunc,
135
+ $ui = eventData.$ui;
125
136
  switch (eventName) {
126
137
  case "select":
127
- onSelect === null || onSelect === void 0 || onSelect(eventData);
138
+ onSelect === null || onSelect === void 0 || onSelect($start, $end, $view, $data);
128
139
  break;
129
140
  case "beforerender":
130
141
  onBeforerender === null || onBeforerender === void 0 || onBeforerender(eventData, listener === null || listener === void 0 ? void 0 : listener.Widgets[name]);
131
142
  break;
132
143
  case "eventdrop":
133
- onEventdrop === null || onEventdrop === void 0 || onEventdrop(eventData);
144
+ onEventdrop === null || onEventdrop === void 0 || onEventdrop($event, $newData, $oldData, $delta, $revertFunc, $ui, $view);
134
145
  break;
135
146
  case "eventresize":
136
- onEventresize === null || onEventresize === void 0 || onEventresize(eventData);
147
+ onEventresize === null || onEventresize === void 0 || onEventresize($event, $newData, $oldData, $delta, $revertFunc, $ui, $view);
137
148
  break;
138
149
  case "eventclick":
139
- onEventclick === null || onEventclick === void 0 || onEventclick(eventData);
150
+ onEventclick === null || onEventclick === void 0 || onEventclick($event, $data, $view);
140
151
  break;
141
152
  case "eventrender":
142
- onEventrender === null || onEventrender === void 0 || onEventrender(eventData);
153
+ onEventrender === null || onEventrender === void 0 || onEventrender($event, $data, $view);
143
154
  break;
144
155
  case "viewrender":
145
156
  onViewrender === null || onViewrender === void 0 || onViewrender(eventData.$view);
@@ -164,7 +175,7 @@ var WmCalendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
164
175
  selectable: selectionmode !== _utils.SELECTION_MODES.NONE,
165
176
  longPressDelay: 1000,
166
177
  headerToolbar: _utils.defaultHeaderOptions,
167
- nextDayThreshold: _utils.NEXT_DAY_THRESHOLD.END,
178
+ nextDayThreshold: _utils.NEXT_DAY_THRESHOLD.START,
168
179
  eventSources: [dataSetEvents],
169
180
  views: {
170
181
  month: {
@@ -536,6 +547,7 @@ var WmCalendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
536
547
  "aria-label": view ? view + " view" : "month view"
537
548
  };
538
549
  return __jsx(_material.Box, (0, _extends2["default"])({
550
+ hidden: (_props$hidden = props.hidden) !== null && _props$hidden !== void 0 ? _props$hidden : false,
539
551
  className: "app-calendar"
540
552
  }, componentProps), __jsx(_material.Box, {
541
553
  className: props.className,
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
13
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
@@ -21,12 +22,15 @@ var _search = _interopRequireDefault(require("@wavemaker/react-runtime/component
21
22
  var _withBaseWrapper = require("@wavemaker/react-runtime/higherOrder/withBaseWrapper");
22
23
  var _SortableChip = _interopRequireDefault(require("./SortableChip"));
23
24
  var _utils = require("./utils");
25
+ var _withFormController = _interopRequireDefault(require("@wavemaker/react-runtime/components/data/form/form-controller/withFormController"));
26
+ var _constants = require("@wavemaker/react-runtime/components/constants");
24
27
  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); }
25
28
  var __jsx = _react["default"].createElement;
26
29
  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; }
27
30
  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; }
28
31
  var DEFAULT_CLASS = "app-chips nav nav-pills list-inline";
29
- var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
32
+ var WmChips = /*#__PURE__*/_react["default"].memo(function (props) {
33
+ var _props$hidden;
30
34
  var _props$allowonlyselec = props.allowonlyselect,
31
35
  allowonlyselect = _props$allowonlyselec === void 0 ? false : _props$allowonlyselec,
32
36
  _props$autofocus = props.autofocus,
@@ -38,7 +42,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
38
42
  _props$datafield = props.datafield,
39
43
  datafield = _props$datafield === void 0 ? "All Fields" : _props$datafield,
40
44
  _props$dataset = props.dataset,
41
- dataset = _props$dataset === void 0 ? ["Option 1", "Option 2", "Option 3"] : _props$dataset,
45
+ dataset = _props$dataset === void 0 ? _constants.DEFAULT_CHIPS_DATASET : _props$dataset,
42
46
  datavalue = props.datavalue,
43
47
  dateformat = props.dateformat,
44
48
  _props$disabled = props.disabled,
@@ -116,6 +120,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
116
120
  var _useState7 = (0, _react.useState)(false),
117
121
  isInitialized = _useState7[0],
118
122
  setIsInitialized = _useState7[1];
123
+ var backspaceArmedRef = (0, _react.useRef)(false);
119
124
 
120
125
  // Computed values
121
126
  var maxSizeReached = "Max size reached";
@@ -135,7 +140,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
135
140
  return key;
136
141
  }, [uniqueKeyCounter]);
137
142
  var processDatasetCb = (0, _react.useCallback)(function (data) {
138
- return (0, _utils.processDataset)(data, displayfield, displayexpression, displayimagesrc, datafield, generateStableKeyCb);
143
+ return (0, _utils.processDataset)(data, displayfield || "label", displayexpression, displayimagesrc, datafield, generateStableKeyCb);
139
144
  }, [displayfield, displayexpression, displayimagesrc, datafield, generateStableKeyCb]);
140
145
  (0, _react.useEffect)(function () {
141
146
  var items = processDatasetCb(dataset);
@@ -151,7 +156,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
151
156
  }, [displayfield, generateUniqueKey]);
152
157
  var updateMaxSize = (0, _react.useCallback)(function (currentLength) {
153
158
  var length = currentLength !== undefined ? currentLength : chipsList.length;
154
- setSaturate(maxsize > 0 && length === maxsize);
159
+ setSaturate((maxsize || 0) > 0 && length === maxsize);
155
160
  }, [maxsize, chipsList.length]);
156
161
  var updateQueryModel = (0, _react.useCallback)(/*#__PURE__*/function () {
157
162
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(data) {
@@ -208,8 +213,8 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
208
213
  var chipObj = {
209
214
  key: generateStableKeyCb(finalDataObj, i),
210
215
  value: finalDataObj,
211
- label: isCustom ? val : finalDataObj[displayfield || "label" || Object.keys(finalDataObj)[0]] || "",
212
- displayValue: isCustom ? val : finalDataObj[displayfield || Object.keys(finalDataObj)[0]] || "",
216
+ label: isCustom || typeof finalDataObj == "string" ? val : finalDataObj[displayfield || "label" || Object.keys(finalDataObj)[0]] || "",
217
+ displayValue: isCustom || typeof finalDataObj == "string" ? val : finalDataObj[displayfield || Object.keys(finalDataObj)[0]] || "",
213
218
  displayImage: null,
214
219
  dataObject: finalDataObj,
215
220
  active: false,
@@ -251,27 +256,32 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
251
256
  return function (_x) {
252
257
  return _ref.apply(this, arguments);
253
258
  };
254
- }(), [datasetItems, maxsize, datafield, displayfield, generateStableKeyCb, createCustomDataModel, isInitialized]);
259
+ }(), [datasetItems, maxsize, datafield, displayfield, generateStableKeyCb, isInitialized]);
255
260
  var debouncedUpdateQueryModel = (0, _react.useMemo)(function () {
256
261
  return (0, _lodash.debounce)(updateQueryModel, 150);
257
262
  }, [updateQueryModel]);
258
263
  (0, _react.useEffect)(function () {
259
264
  if (isInitialized && datavalue !== undefined) {
260
265
  debouncedUpdateQueryModel(datavalue);
266
+ } else if (datavalue == undefined || datavalue.length == 0) {
267
+ setChipsList([]);
268
+ setSearchQuery(undefined);
269
+ setModelByValue([]);
270
+ updateMaxSize(0);
261
271
  }
262
272
  }, [datavalue, debouncedUpdateQueryModel]);
263
273
  var addItem = (0, _react.useCallback)(function (newItem) {
264
- (0, _utils.performAddItem)(newItem, chipsList, modelByValue, setChipsList, setModelByValue, setSearchQuery, updateMaxSize, listener, name, datafield, displayfield, createCustomDataModel, generateUniqueKey, maxsize, onBeforeadd, onChange, onAdd, props);
265
- }, [chipsList, modelByValue, updateMaxSize, onChange, onAdd, onBeforeadd, listener, name, datafield, displayfield, createCustomDataModel, generateUniqueKey, maxsize, props]);
274
+ (0, _utils.performAddItem)(newItem, chipsList, modelByValue, setChipsList, setModelByValue, setSearchQuery, updateMaxSize, listener, name, datafield, displayfield || "label", createCustomDataModel, generateUniqueKey, maxsize || 0, onBeforeadd, onChange, onAdd, props);
275
+ }, [chipsList, modelByValue, updateMaxSize, onChange, onAdd, onBeforeadd, name, datafield, displayfield, createCustomDataModel, generateUniqueKey, maxsize, props]);
266
276
  var removeItem = (0, _react.useCallback)(function (event, item, index) {
267
277
  (0, _utils.performRemoveItem)(event, item, index, chipsList, modelByValue, setChipsList, setModelByValue, updateMaxSize, listener, name, onBeforeremove, onChange, onRemove, props);
268
- }, [chipsList, modelByValue, updateMaxSize, onChange, onRemove, onBeforeremove, listener, name, props]);
278
+ }, [chipsList, modelByValue, updateMaxSize, onChange, onRemove, onBeforeremove, name, props]);
269
279
  var handleChipClick = (0, _react.useCallback)(function (event, chip, index) {
270
280
  if (readonly) return;
271
281
  if (onChipclick && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
272
282
  onChipclick(event, listener.Widgets[name], chip);
273
283
  }
274
- }, [readonly, onChipclick, listener, name]);
284
+ }, [readonly, onChipclick, name]);
275
285
  var handleChipSelect = (0, _react.useCallback)(function (chip, index) {
276
286
  if (readonly) return;
277
287
  var newChipsList = chipsList.map(function (item, i) {
@@ -283,7 +293,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
283
293
  if (onChipselect && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
284
294
  onChipselect(new MouseEvent("focus"), listener.Widgets[name], chip);
285
295
  }
286
- }, [readonly, chipsList, onChipselect, listener, name]);
296
+ }, [readonly, chipsList, onChipselect, name]);
287
297
  var handleKeyDown = (0, _react.useCallback)(function (event, index) {
288
298
  if (readonly) return;
289
299
  if ((event.key == "Backspace" || event.key == "Delete") && index !== undefined) {
@@ -292,8 +302,9 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
292
302
  }, [readonly, chipsList, removeItem]);
293
303
  var handleSearchSelect = (0, _react.useCallback)(function (event, widget, selectedValue) {
294
304
  if (selectedValue) {
295
- addItem(selectedValue);
305
+ addItem(selectedValue.dataObject ? selectedValue.dataObject : selectedValue);
296
306
  setSearchQuery("");
307
+ backspaceArmedRef.current = false;
297
308
  }
298
309
  }, [addItem]);
299
310
  var handleSearchSubmit = (0, _react.useCallback)(function (event, widget) {
@@ -303,9 +314,13 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
303
314
  if (allowonlyselect) return;
304
315
  if (maxsize && chipsList.length >= maxsize) return;
305
316
  addItem(trimmedQuery);
317
+ setSearchQuery("");
318
+ backspaceArmedRef.current = false;
306
319
  }, [searchQuery, allowonlyselect, addItem, maxsize, chipsList.length]);
307
320
  var handleSearchChange = (0, _react.useCallback)(function (event, widget, newValue) {
308
321
  setSearchQuery(newValue || "");
322
+ // Any typing disarms backspace-delete
323
+ backspaceArmedRef.current = false;
309
324
  }, []);
310
325
  var handleSearchAction = (0, _react.useCallback)(function (event, widget) {
311
326
  var currentQuery = (widget === null || widget === void 0 ? void 0 : widget.query) || searchQuery;
@@ -316,10 +331,38 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
316
331
  addItem(trimmedQuery);
317
332
  }, [searchQuery, allowonlyselect, addItem, maxsize, chipsList.length]);
318
333
  var handleSearchKeyDown = (0, _react.useCallback)(function (event) {
319
- if (event.key === "Enter") {
334
+ // Two-step backspace: first focuses last chip, second deletes it
335
+ if (event.key === "Backspace") {
336
+ var _ref2, _inputElement$value;
320
337
  var inputElement = event.target;
321
- var currentQuery = (inputElement === null || inputElement === void 0 ? void 0 : inputElement.value) || searchQuery || "";
322
- var trimmedQuery = (0, _lodash.trim)(currentQuery);
338
+ var currentQuery = ((_ref2 = (_inputElement$value = inputElement === null || inputElement === void 0 ? void 0 : inputElement.value) !== null && _inputElement$value !== void 0 ? _inputElement$value : searchQuery) !== null && _ref2 !== void 0 ? _ref2 : "").trim();
339
+ if (!readonly && !disabled && currentQuery === "" && chipsList.length > 0) {
340
+ if (!backspaceArmedRef.current) {
341
+ // Mark last chip active and move focus to it
342
+ setChipsList(function (prev) {
343
+ return prev.map(function (c, i) {
344
+ return _objectSpread(_objectSpread({}, c), {}, {
345
+ active: i === prev.length - 1
346
+ });
347
+ });
348
+ });
349
+ event.preventDefault();
350
+ backspaceArmedRef.current = true;
351
+ return;
352
+ } else {
353
+ event.preventDefault();
354
+ var lastIndex = chipsList.length - 1;
355
+ removeItem(event, chipsList[lastIndex], lastIndex);
356
+ backspaceArmedRef.current = false;
357
+ return;
358
+ }
359
+ }
360
+ }
361
+ if (event.key === "Enter") {
362
+ event.preventDefault();
363
+ var _inputElement = event.target;
364
+ var _currentQuery = (_inputElement === null || _inputElement === void 0 ? void 0 : _inputElement.value) || searchQuery || "";
365
+ var trimmedQuery = (0, _lodash.trim)(_currentQuery);
323
366
  if (!trimmedQuery) {
324
367
  return;
325
368
  }
@@ -330,7 +373,28 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
330
373
  return;
331
374
  }
332
375
  }
333
- }, [searchQuery, allowonlyselect, maxsize, chipsList.length]);
376
+ // Any other key disarms backspace-delete
377
+ if (event.key !== "Backspace") {
378
+ backspaceArmedRef.current = false;
379
+ }
380
+ }, [searchQuery, readonly, disabled, chipsList, removeItem, allowonlyselect, maxsize]);
381
+
382
+ // Clear search input when the parent form emits a reset
383
+ var rootRef = (0, _react.useRef)(null);
384
+ (0, _react.useEffect)(function () {
385
+ // since this seach widget inside the form is not in control to make in control getting a dispatched event.
386
+ var container = rootRef.current;
387
+ var formEl = container === null || container === void 0 ? void 0 : container.closest("form");
388
+ if (!formEl) return;
389
+ var handleFormReset = function handleFormReset() {
390
+ setSearchQuery(undefined);
391
+ backspaceArmedRef.current = false;
392
+ };
393
+ formEl.addEventListener("wmformreset", handleFormReset);
394
+ return function () {
395
+ formEl.removeEventListener("wmformreset", handleFormReset);
396
+ };
397
+ }, []);
334
398
  var renderChipsList = function renderChipsList() {
335
399
  var sensors = (0, _core.useSensors)((0, _core.useSensor)(_core.PointerSensor, {
336
400
  activationConstraint: {
@@ -387,8 +451,7 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
387
451
  display: "flex",
388
452
  flexWrap: "wrap",
389
453
  gap: 1,
390
- className: DEFAULT_CLASS,
391
- name: name
454
+ className: (0, _clsx["default"])(DEFAULT_CLASS, className)
392
455
  }, inputposition === "first" && renderSearchInput(), chipsList.map(function (chip, index) {
393
456
  return __jsx(_SortableChip["default"], {
394
457
  key: chip.key,
@@ -412,8 +475,8 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
412
475
  display: "flex",
413
476
  flexWrap: "wrap",
414
477
  gap: 1,
415
- className: DEFAULT_CLASS,
416
- name: name
478
+ className: (0, _clsx["default"])(DEFAULT_CLASS, className),
479
+ "aria-readonly": readonly
417
480
  }, inputposition === "first" && renderSearchInput(), chipsList.map(function (chip, index) {
418
481
  return __jsx(_SortableChip["default"], {
419
482
  key: chip.key,
@@ -435,11 +498,11 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
435
498
  var renderSearchInput = function renderSearchInput() {
436
499
  return __jsx(_material.Box, {
437
500
  component: "li",
438
- className: (0, _clsx["default"])("app-chip-search", className, {
501
+ className: (0, _clsx["default"])("app-chip-search", {
439
502
  "full-width": isFullWidth
440
503
  })
441
- }, __jsx(_search["default"], {
442
- name: "app-chip-search",
504
+ }, __jsx(_search["default"], (0, _extends2["default"])({}, props, {
505
+ name: "".concat(name, "_app-chip-search"),
443
506
  disabled: disabled || saturate,
444
507
  readonly: readonly,
445
508
  datafield: datafield,
@@ -472,17 +535,25 @@ var WmChips = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
472
535
  "class": "app-chip-input",
473
536
  width: isFullWidth ? "100%" : undefined,
474
537
  autofocus: autofocus,
475
- dataPath: dataPath
476
- }));
538
+ isSearchInChips: true,
539
+ dataPath: dataPath,
540
+ ignoreInForm: true
541
+ })));
477
542
  };
478
543
  return __jsx(_material.Box, {
479
- ref: ref,
544
+ hidden: (_props$hidden = props.hidden) !== null && _props$hidden !== void 0 ? _props$hidden : false,
480
545
  component: "div",
546
+ ref: rootRef,
481
547
  style: _objectSpread({
482
548
  width: width,
483
549
  height: height
484
550
  }, styles)
485
551
  }, renderChipsList());
552
+ }, function (prev, next) {
553
+ var keys = ["allowonlyselect", "autofocus", "chipclass", "className", "datafield", "dataset", "datavalue", "dateformat", "disabled", "displayexpression", "displayfield", "displayimagesrc", "enablereorder", "groupby", "inputposition", "inputwidth", "limit", "match", "matchmode", "maxsize", "minchars", "name", "orderby", "placeholder", "readonly", "searchkey", "showsearchicon", "tabindex", "type", "debouncetime", "datacompletemsg", "width", "height", "styles", "dataPath", "hidden"];
554
+ return keys.every(function (key) {
555
+ return (0, _lodash.isEqual)(prev[key], next[key]);
556
+ });
486
557
  });
487
558
  WmChips.displayName = "WmChips";
488
- var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)(WmChips);
559
+ var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)((0, _withFormController["default"])(WmChips));
@@ -56,9 +56,22 @@ function processDataset(data, displayfield, displayexpression, displayimagesrc,
56
56
  return normalizedData.map(function (item, index) {
57
57
  if ((0, _typeof2["default"])(item) === "object" && item !== null) {
58
58
  var displayKey = displayfield || Object.keys(item)[0];
59
+ // Align with Angular: for non "All Fields", value should be the item's datafield (e.g., id)
60
+ var finalValue;
61
+ if (datafield === "All Fields") {
62
+ finalValue = item;
63
+ } else {
64
+ if (Object.prototype.hasOwnProperty.call(item, datafield)) {
65
+ finalValue = item[datafield];
66
+ } else if (Object.prototype.hasOwnProperty.call(item, "key")) {
67
+ finalValue = item.key;
68
+ } else {
69
+ finalValue = item;
70
+ }
71
+ }
59
72
  return {
60
73
  key: generateStableKeyFn(item, index),
61
- value: item,
74
+ value: finalValue,
62
75
  label: item[displayKey] || "",
63
76
  displayValue: displayexpression ? displayexpression(item) : item[displayKey] || "",
64
77
  displayImage: displayimagesrc ? item[displayimagesrc] : null,
@@ -125,9 +138,10 @@ function updateChipsListAndTriggerEvents(newChipsList, newModelByValue, setChips
125
138
 
126
139
  // Trigger listener.onChange if available
127
140
  if (listener !== null && listener !== void 0 && listener.onChange) {
128
- listener.onChange(name, _objectSpread(_objectSpread({}, props), {}, {
141
+ listener.onChange(props.fieldName || name, {
142
+ // ...props,
129
143
  datavalue: newModelByValue
130
- }));
144
+ });
131
145
  }
132
146
 
133
147
  // Trigger specific events (onAdd, onRemove)
@@ -198,6 +212,21 @@ function validateAddItem(newItem, chipsList, maxsize, datafield) {
198
212
  if (maxsize && chipsList.length >= maxsize) {
199
213
  return false;
200
214
  }
215
+ // Disallow empty/whitespace items
216
+ if (newItem && (0, _typeof2["default"])(newItem) === "object") {
217
+ if (datafield === "All Fields") {
218
+ var _ref, _newItem$label;
219
+ var text = (0, _lodash.toString)((_ref = (_newItem$label = newItem.label) !== null && _newItem$label !== void 0 ? _newItem$label : newItem.displayValue) !== null && _ref !== void 0 ? _ref : "").trim();
220
+ if (!text) {
221
+ return false;
222
+ }
223
+ } else {
224
+ var val = newItem.value;
225
+ if (val === undefined || val === null || (0, _lodash.toString)(val).trim() === "") {
226
+ return false;
227
+ }
228
+ }
229
+ }
201
230
  if (isDuplicate(chipsList, newItem, datafield)) {
202
231
  return false;
203
232
  }
@@ -215,6 +244,7 @@ function validateSearchInput(query, allowonlyselect, maxsize, chipsList) {
215
244
 
216
245
  // Common functionality for add item operation
217
246
  function performAddItem(newItem, chipsList, modelByValue, setChipsList, setModelByValue, setSearchQuery, updateMaxSizeFn, listener, name, datafield, displayfield, createCustomDataModel, generateUniqueKey, maxsize, onBeforeadd, onChange, onAdd, props) {
247
+ var _itemToAdd$dataObject, _itemToAdd$dataObject2;
218
248
  // Validate before adding
219
249
  if (!validateAddItem(newItem, chipsList, maxsize, datafield)) {
220
250
  setSearchQuery("");
@@ -232,7 +262,7 @@ function performAddItem(newItem, chipsList, modelByValue, setChipsList, setModel
232
262
  // Create chip item with proper structure
233
263
  var chipItem = createChipItemWithStructure(itemToAdd);
234
264
  var newChipsList = [].concat((0, _toConsumableArray2["default"])(chipsList), [chipItem]);
235
- var newModelByValue = [].concat((0, _toConsumableArray2["default"])(modelByValue), [itemToAdd.value]);
265
+ var newModelByValue = [].concat((0, _toConsumableArray2["default"])(modelByValue), [(_itemToAdd$dataObject = itemToAdd === null || itemToAdd === void 0 || (_itemToAdd$dataObject2 = itemToAdd.dataObject) === null || _itemToAdd$dataObject2 === void 0 ? void 0 : _itemToAdd$dataObject2.value) !== null && _itemToAdd$dataObject !== void 0 ? _itemToAdd$dataObject : itemToAdd.value]);
236
266
 
237
267
  // Update chips list and trigger events
238
268
  updateChipsListAndTriggerEvents(newChipsList, newModelByValue, setChipsList, setModelByValue, updateMaxSizeFn, listener, name, new MouseEvent("change"), onChange, onAdd, undefined, chipItem, modelByValue, props);