@agilemotion/oui-react-js 1.8.78 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.TXT +10 -0
  2. package/dist/ApplicationManager.js +39 -2
  3. package/dist/BasicAppHome.js +4 -0
  4. package/dist/RestService.js +11 -2
  5. package/dist/RestUtils.js +11 -2
  6. package/dist/assets/jss/views/loginBasicStyle.js +5 -5
  7. package/dist/assets/jss/views/loginBasicStyle.jsx +5 -5
  8. package/dist/components/Button.js +47 -29
  9. package/dist/components/DocumentViewer.js +32 -19
  10. package/dist/components/Icon.js +3 -14
  11. package/dist/components/Toolbar.js +2 -2
  12. package/dist/components/Tree.js +237 -141
  13. package/dist/components/WordDocumentViewer.js +35 -7
  14. package/dist/components/dashboard/FoldingSideTabDashboard.js +10 -1
  15. package/dist/components/facialRecognition/FacialRegistration.js +15 -1
  16. package/dist/components/facialRecognition/FacialVerification.js +23 -2
  17. package/dist/components/form/FieldSet.js +8 -0
  18. package/dist/components/form/ImageEditor.js +64 -43
  19. package/dist/components/form/MultiFileUploadField.js +6 -5
  20. package/dist/components/form/RadioGroup.js +9 -1
  21. package/dist/components/form/Section.js +8 -2
  22. package/dist/components/form/TransferList.js +14 -10
  23. package/dist/components/form/UploadField.js +17 -4
  24. package/dist/components/layout/Layout.css +49 -1
  25. package/dist/components/layout/Layout.js +41 -1
  26. package/dist/components/layout/View.css +1 -1
  27. package/dist/components/navbars/PortalNavbar.js +5 -0
  28. package/dist/components/signatures/AgilitySignaturePanel.js +230 -22
  29. package/dist/components/signatures/DynamicSignatureDocumentContainer.js +487 -0
  30. package/dist/components/signatures/ImageSignatureInput.js +1 -2
  31. package/dist/event/EventType.js +3 -1
  32. package/package.json +2 -1
@@ -10,7 +10,9 @@ var _Observable = _interopRequireDefault(require("../../event/Observable"));
10
10
  var _Event = _interopRequireDefault(require("../../event/Event"));
11
11
  var _EventType = _interopRequireDefault(require("../../event/EventType"));
12
12
  var _FaceRecognitionComponent = _interopRequireDefault(require("./FaceRecognitionComponent"));
13
- var _ej2Base = require("@syncfusion/ej2-base");
13
+ var _ApplicationManager = _interopRequireWildcard(require("../../ApplicationManager"));
14
+ var _FoldingSideTabDashboard = require("../dashboard/FoldingSideTabDashboard");
15
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
17
  const status = response => {
16
18
  if (response.ok) {
@@ -28,6 +30,7 @@ const location = window.location.protocol + '//' + window.location.hostname + ':
28
30
  const FacialVerification = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
29
31
  const [visible, setVisible] = _react.default.useState(false);
30
32
  const [value, setValue] = _react.default.useState(null);
33
+ const [offset, setOffset] = _react.default.useState(_FoldingSideTabDashboard.DRAWER_WIDTH);
31
34
  _react.default.useEffect(() => {
32
35
  props.handle.api = api();
33
36
  });
@@ -38,13 +41,29 @@ const FacialVerification = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.
38
41
  let event = new _Event.default(props.handle, props.viewId, null);
39
42
  _Observable.default.fireEvent(_EventType.default.COMPONENT_LOAD, event);
40
43
  props.handle.api.refresh();
44
+ let listener = {};
45
+ listener.id = 'facialVerificationDashboardStateListener';
46
+ listener.type = _ApplicationManager.DASHBOARD_STATE;
47
+ listener.handler = state => {
48
+ setOffset(state.leftOffset);
49
+ };
50
+ _ApplicationManager.default.addApplicationListener(listener);
41
51
  return () => {
42
52
  _Observable.default.clearComponentEventListeners(props.handle);
53
+ _ApplicationManager.default.removeApplicationListener('facialVerificationDashboardStateListener');
43
54
  };
44
55
  }, []);
45
56
  _react.default.useEffect(() => {
46
57
  let event = new _Event.default(props.handle, props.viewId, value);
47
58
  _Observable.default.fireEvent(_EventType.default.VALUE_CHANGE, event);
59
+
60
+ // Fire FACIAL_VERIFICATION_SUCCESS only on a confirmed pass.
61
+ // Subscribers (e.g. forms with autoLoadData=false) use this to
62
+ // defer their loadData until the user is verified, instead of
63
+ // pulling sensitive data on view mount.
64
+ if (!_Utils.default.isNull(value) && value.outcome === 'SUCCESS') {
65
+ _Observable.default.fireEvent(_EventType.default.FACIAL_VERIFICATION_SUCCESS, event);
66
+ }
48
67
  }, [value]);
49
68
  const api = () => {
50
69
  return {
@@ -72,7 +91,9 @@ const FacialVerification = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.
72
91
  };
73
92
  };
74
93
  return visible && /*#__PURE__*/_react.default.createElement("div", {
75
- style: _Utils.default.mergeStyles({}, props.config)
94
+ style: _Utils.default.mergeStyles({
95
+ width: "calc(100% - ".concat(offset, "px)")
96
+ }, props.config)
76
97
  }, /*#__PURE__*/_react.default.createElement(_FaceRecognitionComponent.default, {
77
98
  mode: "verify",
78
99
  onComplete: response => {
@@ -36,6 +36,7 @@ var _Switch = _interopRequireDefault(require("./Switch"));
36
36
  var _IconField = _interopRequireDefault(require("./IconField"));
37
37
  var _DocumentTemplateDesigner = _interopRequireDefault(require("../DocumentTemplateDesigner"));
38
38
  var _DynamicJS = _interopRequireDefault(require("../../DynamicJS"));
39
+ var _Layout = require("../layout/Layout");
39
40
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
40
41
  const FieldSet = /*#__PURE__*/_react.default.memo(props => {
41
42
  const [fieldGrid] = _react.default.useState(_Utils.default.getFieldGrid(props.config.attributes, props.config.fields));
@@ -339,6 +340,13 @@ const FieldSet = /*#__PURE__*/_react.default.memo(props => {
339
340
  handle: createComponentHandle(component),
340
341
  viewId: props.viewId
341
342
  });
343
+ case 'LAYOUT':
344
+ return /*#__PURE__*/_react.default.createElement(_Layout.Layout, {
345
+ config: component,
346
+ form: props.form,
347
+ handle: createComponentHandle(component),
348
+ viewId: props.viewId
349
+ });
342
350
  case 'ICON':
343
351
  return /*#__PURE__*/_react.default.createElement(_IconField.default, {
344
352
  keyHandler: props.keyHandler,
@@ -48,7 +48,6 @@ const json = response => {
48
48
  };
49
49
  const location = window.location.protocol + "//" + window.location.hostname;
50
50
  const ImageEditorComponent = exports.ImageEditorComponent = /*#__PURE__*/_react.default.memo(props => {
51
- var _base$value;
52
51
  const [viewerFile, setViewerFile] = _react.default.useState(!_Utils.default.isNull(props.initialFile) ? props.initialFile : null);
53
52
  const [angle, setAngle] = _react.default.useState(0);
54
53
  const [zoomDepth, setZoomDepth] = _react.default.useState(null);
@@ -409,48 +408,70 @@ const ImageEditorComponent = exports.ImageEditorComponent = /*#__PURE__*/_react.
409
408
  startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
410
409
  id: 'ZOOM_IN'
411
410
  })
412
- }) : null)), !_Utils.default.isNull(base.value) || !_Utils.default.isNull(viewerFile) ? /*#__PURE__*/_react.default.createElement("div", {
413
- className: "row",
414
- style: {
415
- padding: "8px 0",
416
- marginLeft: '0',
417
- marginRight: '0'
418
- }
419
- }, /*#__PURE__*/_react.default.createElement("div", {
420
- id: "__image_parent",
421
- style: {
422
- width: "100%",
423
- height: height,
424
- backgroundRepeat: 'no-repeat',
425
- backgroundSize: 'cover',
426
- backgroundColor: 'transparent',
427
- backgroundImage: "url(".concat(require('./transparent.jpeg'), ")"),
428
- border: '4px solid #e1e1e1',
429
- borderRadius: '4px'
430
- },
431
- className: "col-*-*"
432
- }, /*#__PURE__*/_react.default.createElement("div", {
433
- className: classes.button,
434
- style: {
435
- width: 'auto',
436
- height: parseFloat(height.replace('px', '')) - 20 + 'px',
437
- maxHeight: parseFloat(height.replace('px', '')) - 20 + 'px',
438
- textAlign: 'center',
439
- overflow: 'auto',
440
- display: 'flex',
441
- justifyContent: 'center',
442
- alignItems: 'center'
443
- }
444
- }, /*#__PURE__*/_react.default.createElement("div", {
445
- id: "__image_container"
446
- }, /*#__PURE__*/_react.default.createElement("img", {
447
- id: "__image",
448
- src: (viewerFile === null || viewerFile === void 0 ? void 0 : viewerFile.base64) || ((_base$value = base.value) === null || _base$value === void 0 ? void 0 : _base$value.url),
449
- alt: '',
450
- style: {
451
- maxHeight: parseFloat(height.replace('px', '')) - 20 + 'px'
452
- }
453
- }))))) : null);
411
+ }) : null)), !_Utils.default.isNull(base.value) || !_Utils.default.isNull(viewerFile) ? (_base$value => {
412
+ // Two display modes:
413
+ // - default (no user-driven zoom): image fits the box,
414
+ // object-fit contain, parent overflow hidden → no scrollbars.
415
+ // - zoomed (user clicked Zoom In): explicit width/height
416
+ // applied by the zoom useEffect, parent overflow auto so
417
+ // the user can pan around the larger-than-box image.
418
+ const isZoomed = zoomDepth !== null && zoomDepth > 0;
419
+ return /*#__PURE__*/_react.default.createElement("div", {
420
+ className: "row",
421
+ style: {
422
+ padding: "8px 0",
423
+ marginLeft: '0',
424
+ marginRight: '0'
425
+ }
426
+ }, /*#__PURE__*/_react.default.createElement("div", {
427
+ id: "__image_parent",
428
+ style: {
429
+ width: "100%",
430
+ height: height,
431
+ backgroundRepeat: 'no-repeat',
432
+ backgroundSize: 'cover',
433
+ backgroundColor: 'transparent',
434
+ backgroundImage: "url(".concat(require('./transparent.jpeg'), ")"),
435
+ border: '1px solid #e1e1e1',
436
+ borderRadius: '4px',
437
+ overflow: isZoomed ? 'auto' : 'hidden',
438
+ boxSizing: 'border-box',
439
+ display: 'flex',
440
+ justifyContent: 'center',
441
+ alignItems: 'center',
442
+ padding: '6px'
443
+ },
444
+ className: "col-*-*"
445
+ }, /*#__PURE__*/_react.default.createElement("div", {
446
+ id: "__image_container",
447
+ style: isZoomed ? {
448
+ display: 'inline-block'
449
+ } : {
450
+ width: '100%',
451
+ height: '100%',
452
+ display: 'flex',
453
+ justifyContent: 'center',
454
+ alignItems: 'center'
455
+ }
456
+ }, /*#__PURE__*/_react.default.createElement("img", {
457
+ id: "__image",
458
+ src: (viewerFile === null || viewerFile === void 0 ? void 0 : viewerFile.base64) || ((_base$value = base.value) === null || _base$value === void 0 ? void 0 : _base$value.url),
459
+ alt: '',
460
+ draggable: false,
461
+ style: isZoomed ? {
462
+ display: 'block',
463
+ userSelect: 'none'
464
+ } : {
465
+ maxWidth: '100%',
466
+ maxHeight: '100%',
467
+ width: 'auto',
468
+ height: 'auto',
469
+ objectFit: 'contain',
470
+ display: 'block',
471
+ userSelect: 'none'
472
+ }
473
+ }))));
474
+ })() : null);
454
475
  });
455
476
  const ImageEditor = exports.ImageEditor = /*#__PURE__*/_react.default.memo(props => {
456
477
  const [file, setFile] = _react.default.useState(null);
@@ -48,7 +48,7 @@ const json = response => {
48
48
  };
49
49
  const location = window.location.protocol + '//' + window.location.hostname;
50
50
  const DocumentUpload = props => {
51
- var _props$config$attribu;
51
+ var _props$config$attribu, _props$config$attribu2;
52
52
  const [files, setFiles] = _react.default.useState(null);
53
53
  const [multiple] = _react.default.useState(props.multiple === true);
54
54
  const [payloadStorageMode] = _react.default.useState(props.config.payloadStorageMode || 'base64');
@@ -225,6 +225,7 @@ const DocumentUpload = props => {
225
225
  return /*#__PURE__*/_react.default.createElement("div", {
226
226
  style: _Utils.default.mergeStyles({}, props.config)
227
227
  }, /*#__PURE__*/_react.default.createElement("input", {
228
+ accept: ((_props$config$attribu = props.config.attributes) === null || _props$config$attribu === void 0 ? void 0 : _props$config$attribu.accept) || "application/pdf",
228
229
  className: classes.input,
229
230
  id: "contained-button-file-".concat(props.config.id),
230
231
  disabled: base.disabled,
@@ -234,7 +235,7 @@ const DocumentUpload = props => {
234
235
  type: "file"
235
236
  }), /*#__PURE__*/_react.default.createElement("div", null, !base.disabled && /*#__PURE__*/_react.default.createElement("div", {
236
237
  style: {
237
- height: (_props$config$attribu = props.config.attributes) !== null && _props$config$attribu !== void 0 && _props$config$attribu.showThumbImages ? null : '48px'
238
+ height: (_props$config$attribu2 = props.config.attributes) !== null && _props$config$attribu2 !== void 0 && _props$config$attribu2.showThumbImages ? null : '48px'
238
239
  }
239
240
  }, /*#__PURE__*/_react.default.createElement("label", {
240
241
  htmlFor: "contained-button-file-".concat(props.config.id)
@@ -256,19 +257,19 @@ const DocumentUpload = props => {
256
257
  marginBottom: '8px'
257
258
  }
258
259
  }, files ? files.map((file, index) => {
259
- var _props$config$attribu2, _props$config$attribu3;
260
+ var _props$config$attribu3, _props$config$attribu4;
260
261
  return /*#__PURE__*/_react.default.createElement("div", {
261
262
  key: index,
262
263
  style: {
263
264
  marginLeft: '0',
264
265
  marginRight: '8px',
265
- width: (_props$config$attribu2 = props.config.attributes) !== null && _props$config$attribu2 !== void 0 && _props$config$attribu2.showThumbImages ? null : '100%'
266
+ width: (_props$config$attribu3 = props.config.attributes) !== null && _props$config$attribu3 !== void 0 && _props$config$attribu3.showThumbImages ? null : '100%'
266
267
  }
267
268
  }, /*#__PURE__*/_react.default.createElement(_FileThumb.default, {
268
269
  key: file.name,
269
270
  file: file,
270
271
  disabled: base.disabled,
271
- showImage: (_props$config$attribu3 = props.config.attributes) === null || _props$config$attribu3 === void 0 ? void 0 : _props$config$attribu3.showThumbImages,
272
+ showImage: (_props$config$attribu4 = props.config.attributes) === null || _props$config$attribu4 === void 0 ? void 0 : _props$config$attribu4.showThumbImages,
272
273
  onDelete: file => {
273
274
  deleteFile(file);
274
275
  }
@@ -19,15 +19,23 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
19
19
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
20
20
  const RadioGroupWrapper = /*#__PURE__*/_react.default.memo(props => {
21
21
  const base = props.base;
22
- const label = _Utils.default.getComponentAttribute(props.config, 'label', null);
23
22
  // TODO : Support calling a rest end-point to get options
24
23
  const options = _Utils.default.getComponentAttribute(props.config, 'options', []);
25
24
  const [value, setValue] = _react.default.useState(base.value ? base.value : props.defaultValue);
25
+ const [label, setLabel] = _react.default.useState(base.value ? base.value : props.defaultValue);
26
26
  _react.default.useEffect(() => {
27
27
  if (base.value) {
28
28
  setValue(base.value);
29
29
  }
30
30
  }, [base.value]);
31
+ _react.default.useEffect(() => {
32
+ try {
33
+ let parsedConfig = _Utils.default.parseConfig(props.config, props.viewId);
34
+ setLabel(_Utils.default.prop(_Utils.default.getComponentAttribute(parsedConfig, 'label', null)));
35
+ } catch (e) {
36
+ setLabel(_Utils.default.getComponentAttribute(props.config, 'label', ''));
37
+ }
38
+ }, []);
31
39
  return /*#__PURE__*/_react.default.createElement(_FormControl.default, {
32
40
  error: base.hasError,
33
41
  style: _Utils.default.mergeStyles({
@@ -6,13 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _Utils = _interopRequireDefault(require("../../Utils"));
9
- var _Observable = _interopRequireDefault(require("../../event/Observable"));
10
9
  var _FieldSet = _interopRequireDefault(require("./FieldSet"));
11
10
  var _TabPanel = _interopRequireDefault(require("../TabPanel"));
12
11
  var _Grid = _interopRequireDefault(require("@mui/material/Grid"));
13
12
  var _HtmlPanel = _interopRequireDefault(require("../HtmlPanel"));
14
- var _Video = _interopRequireDefault(require("../media/Video"));
15
13
  var _VideoPlayer = _interopRequireDefault(require("../media/VideoPlayer"));
14
+ var _Layout = require("../layout/Layout");
16
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
16
  const Section = /*#__PURE__*/_react.default.memo(props => {
18
17
  const [fieldGrid, setFieldGrid] = _react.default.useState(null);
@@ -73,6 +72,13 @@ const Section = /*#__PURE__*/_react.default.memo(props => {
73
72
  viewId: props.viewId,
74
73
  key: componentKey++,
75
74
  values: props.values
75
+ }) : component.type === 'layout' ? /*#__PURE__*/_react.default.createElement(_Layout.Layout, {
76
+ config: component,
77
+ handle: createComponentHandle(component),
78
+ disabled: props.disabled,
79
+ viewId: props.viewId,
80
+ key: componentKey++,
81
+ values: props.values
76
82
  }) : /*#__PURE__*/_react.default.createElement("div", {
77
83
  key: componentKey++
78
84
  }, 'Unsupported form section component type ' + component.type);
@@ -189,19 +189,23 @@ const TransferList = /*#__PURE__*/_react.default.memo((props, ref) => {
189
189
  children.push(selectionListHandle);
190
190
  return children;
191
191
  },
192
- valueParser: value => {
193
- if (!_Utils.default.isNull(value)) {
194
- let objectArray = value;
195
- let val = [];
196
- if (objectArray.length > 0) {
197
- let type = objectArray[0].type;
198
- for (const objectArrayElement of objectArray) {
199
- val.push(objectArrayElement);
192
+ valueParser: (value, inbound) => {
193
+ if (inbound) {
194
+ if (!_Utils.default.isNull(value) && value.length > 0) {
195
+ let objectArray = value;
196
+ let val = [];
197
+ if (objectArray.length > 0) {
198
+ let type = objectArray[0].type;
199
+ for (const objectArrayElement of objectArray) {
200
+ val.push(objectArrayElement);
201
+ }
200
202
  }
203
+ return val;
201
204
  }
202
- return val;
205
+ return [];
206
+ } else {
207
+ return value;
203
208
  }
204
- return [];
205
209
  },
206
210
  loadDataHandler: () => loadData()
207
211
  }), base => /*#__PURE__*/_react.default.createElement(TransferListComponent, _extends({
@@ -20,6 +20,11 @@ var _EventType = _interopRequireDefault(require("../../event/EventType"));
20
20
  var _noimage = _interopRequireDefault(require("./noimage.png"));
21
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
22
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
23
+ 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; }
24
+ 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) { _defineProperty(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; }
25
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
26
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
27
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23
28
  const useStyles = (0, _styles.makeStyles)(theme => ({
24
29
  button: {
25
30
  margin: theme.spacing(1)
@@ -46,6 +51,7 @@ const json = response => {
46
51
  };
47
52
  const location = window.location.protocol + "//" + window.location.hostname;
48
53
  const DocumentUpload = exports.DocumentUpload = /*#__PURE__*/_react.default.memo(props => {
54
+ var _props$config$attribu, _props$config$attribu2, _props$config$attribu3;
49
55
  const [viewerFile, setViewerFile] = _react.default.useState(!_Utils.default.isNull(props.initialFile) ? props.initialFile : null);
50
56
  const [payloadStorageMode, setPayloadStorageMode] = _react.default.useState(props.config.payloadStorageMode || 'base64');
51
57
  const [files, setFiles] = _react.default.useState(!_Utils.default.isNull(props.initialFile) ? [props.initialFile] : null);
@@ -102,6 +108,10 @@ const DocumentUpload = exports.DocumentUpload = /*#__PURE__*/_react.default.memo
102
108
  metadata.documentRepositoryCacheId = data;
103
109
  cacheId.current = data;
104
110
  base.handleValueChange(metadata);
111
+ let event = new _Event.default(props.handle, props.viewId, _objectSpread(_objectSpread({}, metadata), {}, {
112
+ url: reader.result
113
+ }));
114
+ _Observable.default.fireEvent(_EventType.default.DOCUMENT_CACHED, event);
105
115
  }).catch(e => {
106
116
  if (e.code === 401) {
107
117
  _ApplicationManager.default.clear();
@@ -209,7 +219,7 @@ const DocumentUpload = exports.DocumentUpload = /*#__PURE__*/_react.default.memo
209
219
  }
210
220
  };
211
221
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("input", {
212
- accept: props.style === 'IMAGE' ? "image/jpeg,image/gif,image/png,image/x-eps" : "image/jpeg,image/gif,image/png,application/pdf,image/x-eps",
222
+ accept: props.style === 'IMAGE' ? "image/jpeg,image/gif,image/png,image/x-eps" : ((_props$config$attribu = props.config.attributes) === null || _props$config$attribu === void 0 ? void 0 : _props$config$attribu.accept) || "application/pdf",
213
223
  className: classes.input,
214
224
  id: "contained-button-file-".concat(props.config.id),
215
225
  disabled: base.disabled,
@@ -242,15 +252,18 @@ const DocumentUpload = exports.DocumentUpload = /*#__PURE__*/_react.default.memo
242
252
  }, base.errorMessage)) : null)) : /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("label", {
243
253
  htmlFor: "contained-button-file-".concat(props.config.id)
244
254
  }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Button.default, {
245
- variant: "contained",
255
+ variant: "text",
246
256
  component: "span",
247
257
  disabled: base.disabled,
248
258
  className: classes.button,
249
259
  style: {
250
260
  border: base.hasError ? "1px solid #f44336" : null,
251
261
  color: base.hasError ? "#f44336" : null
252
- }
253
- }, props.config.attributes['label'] ? props.config.attributes['label'] : "Upload File")), base.hasError ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
262
+ },
263
+ startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
264
+ id: 'UPLOAD'
265
+ })
266
+ }, (_props$config$attribu2 = props.config.attributes) !== null && _props$config$attribu2 !== void 0 && _props$config$attribu2.label ? (_props$config$attribu3 = props.config.attributes) === null || _props$config$attribu3 === void 0 ? void 0 : _props$config$attribu3.label : "")), base.hasError ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
254
267
  style: {
255
268
  color: "#f44336",
256
269
  padding: "0 8px"
@@ -4,5 +4,53 @@
4
4
  flex-direction: column;
5
5
  height: 100% !important;
6
6
  width: 100% !important;
7
- padding: 8px 0 0 0 !important;
7
+ padding: 0 !important;
8
+ }
9
+
10
+ /* ---------------------------------------------------------------------
11
+ * Resize splitters — emitted only when a Layout has splitter: true in
12
+ * its config. The library (react-resizable-panels) handles the cursor
13
+ * and drag mechanics; we only paint the handle.
14
+ * ------------------------------------------------------------------- */
15
+ .oui-splitter {
16
+ background: transparent;
17
+ transition: background-color 120ms ease;
18
+ flex: 0 0 auto;
19
+ position: relative;
20
+ }
21
+
22
+ .oui-splitter-h {
23
+ width: 6px;
24
+ cursor: col-resize;
25
+ }
26
+
27
+ .oui-splitter-v {
28
+ height: 6px;
29
+ cursor: row-resize;
30
+ }
31
+
32
+ .oui-splitter:hover,
33
+ .oui-splitter[data-resize-handle-active] {
34
+ background-color: rgba(0, 120, 215, 0.4);
35
+ }
36
+
37
+ /* Subtle middle dot to hint that the handle is draggable. */
38
+ .oui-splitter::after {
39
+ content: '';
40
+ position: absolute;
41
+ top: 50%;
42
+ left: 50%;
43
+ transform: translate(-50%, -50%);
44
+ background-color: rgba(0, 0, 0, 0.18);
45
+ border-radius: 1px;
46
+ }
47
+
48
+ .oui-splitter-h::after {
49
+ width: 2px;
50
+ height: 24px;
51
+ }
52
+
53
+ .oui-splitter-v::after {
54
+ width: 24px;
55
+ height: 2px;
8
56
  }
@@ -33,6 +33,7 @@ var _Chart = _interopRequireDefault(require("../Chart"));
33
33
  var _FacialRegistration = _interopRequireDefault(require("../facialRecognition/FacialRegistration"));
34
34
  var _FacialVerification = _interopRequireDefault(require("../facialRecognition/FacialVerification"));
35
35
  var _Spinner = _interopRequireDefault(require("../Spinner"));
36
+ var _reactResizablePanels = require("react-resizable-panels");
36
37
  require("./Layout.css");
37
38
  var _Chat = _interopRequireDefault(require("../media/Chat"));
38
39
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -369,9 +370,48 @@ const Layout = props => {
369
370
  }
370
371
  return style;
371
372
  }
373
+
374
+ /**
375
+ * Render children wrapped in a <PanelGroup> with <PanelResizeHandle>s
376
+ * between consecutive children. Activated when layout.splitter === true.
377
+ * Per-component sizing flows through these optional fields:
378
+ * splitterDefaultSize — initial size as a percentage (0-100)
379
+ * splitterMinSize — minimum size as a percentage
380
+ * splitterMaxSize — maximum size as a percentage
381
+ * splitterCollapsible — whether the panel can be dragged to collapse
382
+ */
383
+ function renderWithSplitters(layout) {
384
+ const direction = layout.orientation === 'VERTICAL' ? 'vertical' : 'horizontal';
385
+ const handleClass = direction === 'horizontal' ? 'oui-splitter oui-splitter-h' : 'oui-splitter oui-splitter-v';
386
+ const children = [];
387
+ layout.components.forEach((component, index) => {
388
+ if (index > 0) {
389
+ children.push(/*#__PURE__*/_react.default.createElement(_reactResizablePanels.Separator, {
390
+ key: "handle-".concat(component.id),
391
+ className: handleClass
392
+ }));
393
+ }
394
+ children.push(/*#__PURE__*/_react.default.createElement(_reactResizablePanels.Panel, {
395
+ key: "panel-".concat(component.id),
396
+ defaultSize: component.splitterDefaultSize,
397
+ minSize: component.splitterMinSize,
398
+ maxSize: component.splitterMaxSize,
399
+ collapsible: component.splitterCollapsible
400
+ }, renderComponent(component, null)));
401
+ });
402
+ return /*#__PURE__*/_react.default.createElement(_reactResizablePanels.Group, {
403
+ orientation: direction
404
+ }, children);
405
+ }
372
406
  function render(layout) {
373
407
  setMissingComponentIds();
374
- return _Utils.default.isNull(layout.components) || layout.components.length === 0 ? /*#__PURE__*/_react.default.createElement("div", null, "I am a dum empty Layout") : layout.orientation === 'VERTICAL' ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, layout.components.map((component, index) => {
408
+ if (_Utils.default.isNull(layout.components) || layout.components.length === 0) {
409
+ return /*#__PURE__*/_react.default.createElement("div", null, "I am a dum empty Layout");
410
+ }
411
+ if (layout.splitter === true) {
412
+ return renderWithSplitters(layout);
413
+ }
414
+ return layout.orientation === 'VERTICAL' ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, layout.components.map((component, index) => {
375
415
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
376
416
  key: index
377
417
  }, renderComponent(component, null));
@@ -1,4 +1,4 @@
1
- :root { --header-h: 72px; --view-header-h: 104px; --view-header-min: 104px}
1
+ :root { --header-h: 72px; --view-header-h: 92px; --view-header-min: 92px}
2
2
 
3
3
  .view {
4
4
  padding: 16px 8px 16px 32px;
@@ -14,6 +14,7 @@ var _reactstrap = require("reactstrap");
14
14
  var _ActionHandlers = _interopRequireDefault(require("../../event/ActionHandlers"));
15
15
  var _ApplicationManager = _interopRequireWildcard(require("../../ApplicationManager"));
16
16
  var _Utils = _interopRequireDefault(require("../../Utils"));
17
+ var _Observable = _interopRequireDefault(require("../../event/Observable"));
17
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
20
  const useStyles = (0, _styles.makeStyles)(theme => ({
@@ -34,6 +35,7 @@ const PortalNavbar = /*#__PURE__*/_react.default.memo(props => {
34
35
  _react.default.useEffect(() => {
35
36
  if (initializing.current) {
36
37
  let avatarListener = {};
38
+ avatarListener.id = 'portalNavBarAvatarListener';
37
39
  avatarListener.type = _ApplicationManager.AVATAR_LISTENER_TYPE;
38
40
  avatarListener.handler = avatar => {
39
41
  setAvatarUrl(avatar.url);
@@ -41,6 +43,9 @@ const PortalNavbar = /*#__PURE__*/_react.default.memo(props => {
41
43
  _ApplicationManager.default.addApplicationListener(avatarListener);
42
44
  initializing.current = false;
43
45
  }
46
+ return () => {
47
+ _ApplicationManager.default.removeApplicationListener('portalNavBarAvatarListener');
48
+ };
44
49
  }, []);
45
50
  const launchView = path => {
46
51
  let actionConfig = {};