@genesislcap/foundation-forms 14.501.0 → 15.0.0-FUI-2571-formatters.1
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.
package/dist/dts/form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,aAAa,EAGd,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB1C,OAAO,EACL,aAAa,EAOb,yBAAyB,EACzB,aAAa,EAOb,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAWL,aAAa,EACd,MAAM,SAAS,CAAC;AAiBjB;;;GAGG;AACH,eAAO,MAAM,SAAS,OAwBrB,CAAC;;;;;;;;kBA5CyB,CAAC;;;;;;;;8BAmDqD,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAW7F,CAAC;4IAC6D,CAAC;wFACsB,CAAC;+IAUvF,CAAH;2FAG+C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA6BlC,CAAC;;;;;;;;;;;;;;;;;;;;;;;mBA0EZ,CAAC;;;;;;;;;;;;;6BAwBM,CAAC;8BAGmC,CAAC;kBAGvB,CAAC;;oBAG8C,CAAC;;sBAGrE,CAAD;oBAIC,CAAA;;;;;;;;gDAgBG,CAAC;;;;;;;;;;;;;;;;;;uBA4BkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAuHxB,CAAA;yBAGC,CAAA;UAAoD,GAAG;WAIxC,GAAG;;gBAEoB,GAAG;;;;;;;WActC,GAAH;YAAiD,GAAG;;;;;;;;;;;oBAyCQ,GAE/D,CAAE;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,16 @@ export declare function resolveResourceOptionLabel(raw: any, options: any): Prom
|
|
|
66
66
|
* @internal
|
|
67
67
|
*/
|
|
68
68
|
export declare function resolveEnumLabel(raw: any, fieldName: string, schema: any): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
71
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field, reusing
|
|
72
|
+
* `@genesislcap/foundation-utils`'s formatters rather than re-deriving display logic. Numbers
|
|
73
|
+
* are formatted with `getNumberFormatter`; dates/datetimes with `getDateFormatter`, adding
|
|
74
|
+
* hours/minutes for `GenesisType.DATETIME` fields. Returns `null` for non-number/date fields,
|
|
75
|
+
* or when no JSON schema is available to determine the field's type.
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
export declare function formatValueByFieldType(raw: any, fieldName: string, schema: any): string | null;
|
|
69
79
|
/**
|
|
70
80
|
* Navigates a `/properties/`-separated path in data to support nested object scopes
|
|
71
81
|
* such as `ADDRESS/properties/STREET` produced by Group layout UI schemas.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/review-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/review-utils.ts"],"names":[],"mappings":"AAQA,cAAc;AACd,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,cAAc;AACd,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,aAAa,EAAE,CAAC,CAwE1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAc9F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAMxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8B/F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAaxF;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAqB9F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAEpE;AAYD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAwBvD"}
|
package/dist/esm/form.js
CHANGED
|
@@ -393,26 +393,35 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
|
|
|
393
393
|
this.$emit('submit', { payload, errors: this.errors });
|
|
394
394
|
if (Object.entries(payload).length !== 0 && !this.hasValidationErrors() && this.resourceName) {
|
|
395
395
|
this.submitting = true;
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
396
|
+
try {
|
|
397
|
+
const formSubmitReq = yield this.connect.commitEvent(this.resourceName, commitPayload);
|
|
398
|
+
if (formSubmitReq.ERROR) {
|
|
399
|
+
const approvalError = formSubmitReq.ERROR.find((err) => err.CODE === 'APPROVAL_MESSAGE_MISSING');
|
|
400
|
+
// Only show modal if in REACTIVE mode (setApprovalMessage is false/not set)
|
|
401
|
+
// In proactive mode, the field is already visible, so just emit error normally
|
|
402
|
+
if (approvalError && !this.setApprovalMessage) {
|
|
403
|
+
this.pendingPayload = payload;
|
|
404
|
+
this.showApprovalModal();
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
this.applyServerFieldErrors(formSubmitReq.ERROR);
|
|
408
|
+
this.$emit('submit-failure', {
|
|
409
|
+
payload,
|
|
410
|
+
errors: formSubmitReq.ERROR,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
405
413
|
}
|
|
406
414
|
else {
|
|
407
|
-
this
|
|
408
|
-
this.$emit('submit-failure', {
|
|
409
|
-
payload,
|
|
410
|
-
errors: formSubmitReq.ERROR,
|
|
411
|
-
});
|
|
415
|
+
this.$emit('submit-success', { payload, response: formSubmitReq });
|
|
412
416
|
}
|
|
413
417
|
}
|
|
414
|
-
|
|
415
|
-
|
|
418
|
+
catch (error) {
|
|
419
|
+
const errors = [{ CODE: 'SUBMIT_ERROR', TEXT: String(error) }];
|
|
420
|
+
this.applyServerFieldErrors(errors);
|
|
421
|
+
this.$emit('submit-failure', { payload, errors });
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
this.submitting = false;
|
|
416
425
|
}
|
|
417
426
|
}
|
|
418
427
|
});
|
|
@@ -802,19 +811,31 @@ let Form = class Form extends LifecycleMixin(FoundationElement) {
|
|
|
802
811
|
DETAILS: this.pendingPayload,
|
|
803
812
|
APPROVAL_MESSAGE: this.approvalMessage,
|
|
804
813
|
};
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
814
|
+
try {
|
|
815
|
+
const formSubmitReq = yield this.connect.commitEvent(this.resourceName, commitPayload);
|
|
816
|
+
if (formSubmitReq.ERROR) {
|
|
817
|
+
this.applyServerFieldErrors(formSubmitReq.ERROR);
|
|
818
|
+
this.$emit('submit-failure', {
|
|
819
|
+
payload: this.pendingPayload,
|
|
820
|
+
errors: formSubmitReq.ERROR,
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
else {
|
|
824
|
+
this.$emit('submit-success', { payload: this.pendingPayload, response: formSubmitReq });
|
|
825
|
+
this.closeApprovalModal();
|
|
826
|
+
this.pendingPayload = null;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
catch (error) {
|
|
830
|
+
const errors = [{ CODE: 'SUBMIT_ERROR', TEXT: String(error) }];
|
|
831
|
+
this.applyServerFieldErrors(errors);
|
|
809
832
|
this.$emit('submit-failure', {
|
|
810
833
|
payload: this.pendingPayload,
|
|
811
|
-
errors
|
|
834
|
+
errors,
|
|
812
835
|
});
|
|
813
836
|
}
|
|
814
|
-
|
|
815
|
-
this
|
|
816
|
-
this.closeApprovalModal();
|
|
817
|
-
this.pendingPayload = null;
|
|
837
|
+
finally {
|
|
838
|
+
this.submitting = false;
|
|
818
839
|
}
|
|
819
840
|
});
|
|
820
841
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { getDatasource } from '@genesislcap/foundation-comms';
|
|
3
3
|
import { CriteriaBuilder, ExpressionBuilder } from '@genesislcap/foundation-criteria';
|
|
4
|
+
import { getDateFormatter, getNumberFormatter } from '@genesislcap/foundation-utils';
|
|
4
5
|
import { capitalCase } from 'change-case';
|
|
6
|
+
import { isOneOfDate } from '../jsonforms/testers/isDate';
|
|
7
|
+
import { isOneOfNumber } from '../jsonforms/testers/isOneOfNumber';
|
|
8
|
+
import { GenesisType } from './types';
|
|
5
9
|
/**
|
|
6
10
|
* Builds the review panel's fields grouped into sections by their nearest `Group` layout.
|
|
7
11
|
* Sections are formed from consecutive runs of the same group title as fields are
|
|
@@ -39,8 +43,8 @@ export function buildReviewSections(data, uiSchema, schema) {
|
|
|
39
43
|
}
|
|
40
44
|
};
|
|
41
45
|
const resolveDisplayValue = (raw, fieldName, options) => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
var _a, _b, _c;
|
|
43
|
-
const displayValue = (_c = (_b = (_a = resolveOptionLabel(raw, options)) !== null && _a !== void 0 ? _a : (yield resolveResourceOptionLabel(raw, options))) !== null && _b !== void 0 ? _b : resolveEnumLabel(raw, fieldName, schema)) !== null && _c !== void 0 ? _c : raw;
|
|
46
|
+
var _a, _b, _c, _d;
|
|
47
|
+
const displayValue = (_d = (_c = (_b = (_a = resolveOptionLabel(raw, options)) !== null && _a !== void 0 ? _a : (yield resolveResourceOptionLabel(raw, options))) !== null && _b !== void 0 ? _b : resolveEnumLabel(raw, fieldName, schema)) !== null && _c !== void 0 ? _c : formatValueByFieldType(raw, fieldName, schema)) !== null && _d !== void 0 ? _d : raw;
|
|
44
48
|
return formatValueForReview(displayValue);
|
|
45
49
|
});
|
|
46
50
|
const collect = (element, groupTitle) => {
|
|
@@ -170,21 +174,73 @@ export function resolveResourceOptionLabel(raw, options) {
|
|
|
170
174
|
* @internal
|
|
171
175
|
*/
|
|
172
176
|
export function resolveEnumLabel(raw, fieldName, schema) {
|
|
173
|
-
var _a, _b, _c
|
|
177
|
+
var _a, _b, _c;
|
|
174
178
|
if (typeof raw !== 'string')
|
|
175
179
|
return null;
|
|
180
|
+
const fieldSchema = resolveFieldSchema(fieldName, schema);
|
|
181
|
+
if (!fieldSchema)
|
|
182
|
+
return null;
|
|
183
|
+
// Matches plain `enum: [...]` or nullable `oneOf: [{ enum: [...] }, { type: 'null' }]`
|
|
184
|
+
const enumValues = (_a = fieldSchema.enum) !== null && _a !== void 0 ? _a : (_c = (_b = fieldSchema.oneOf) === null || _b === void 0 ? void 0 : _b.find((x) => x.enum)) === null || _c === void 0 ? void 0 : _c.enum;
|
|
185
|
+
if (Array.isArray(enumValues) && enumValues.includes(raw)) {
|
|
186
|
+
return capitalCase(raw);
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Navigates a `/properties/`-separated field name through `schema.properties` to find the
|
|
192
|
+
* JSON schema describing that field, honoring nested Group scopes
|
|
193
|
+
* (`ADDRESS/properties/STREET`). Returns `null` when `schema` has no `properties` (e.g. no
|
|
194
|
+
* JSON schema is available) or the path doesn't resolve.
|
|
195
|
+
* @internal
|
|
196
|
+
*/
|
|
197
|
+
function resolveFieldSchema(fieldName, schema) {
|
|
198
|
+
var _a;
|
|
176
199
|
if (!(schema === null || schema === void 0 ? void 0 : schema.properties))
|
|
177
200
|
return null;
|
|
178
201
|
let fieldSchema = schema;
|
|
179
202
|
for (const part of fieldName.split('/properties/')) {
|
|
180
203
|
fieldSchema = (_a = fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.properties) === null || _a === void 0 ? void 0 : _a[part];
|
|
181
204
|
}
|
|
205
|
+
return fieldSchema !== null && fieldSchema !== void 0 ? fieldSchema : null;
|
|
206
|
+
}
|
|
207
|
+
/** Minimal `Control` uischema used to drive the `isOneOfNumber`/`isOneOfDate` testers directly
|
|
208
|
+
* against an already-resolved field schema — `schemaMatches` only needs `scope` to be a
|
|
209
|
+
* non-empty string here, since a non-object field schema is tested as-is rather than resolved
|
|
210
|
+
* further via that scope. @internal */
|
|
211
|
+
const FIELD_SCHEMA_TESTER_CONTROL = { type: 'Control', scope: '#' };
|
|
212
|
+
const FIELD_SCHEMA_TESTER_CONTEXT = { config: {}, rootSchema: {} };
|
|
213
|
+
const REVIEW_NUMBER_FORMAT = '0,0.[000]';
|
|
214
|
+
const REVIEW_DATE_OPTIONS = {
|
|
215
|
+
year: 'numeric',
|
|
216
|
+
month: '2-digit',
|
|
217
|
+
day: '2-digit',
|
|
218
|
+
timeZone: 'UTC',
|
|
219
|
+
};
|
|
220
|
+
const REVIEW_DATETIME_OPTIONS = Object.assign(Object.assign({}, REVIEW_DATE_OPTIONS), { hour: '2-digit', minute: '2-digit' });
|
|
221
|
+
/**
|
|
222
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
223
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field, reusing
|
|
224
|
+
* `@genesislcap/foundation-utils`'s formatters rather than re-deriving display logic. Numbers
|
|
225
|
+
* are formatted with `getNumberFormatter`; dates/datetimes with `getDateFormatter`, adding
|
|
226
|
+
* hours/minutes for `GenesisType.DATETIME` fields. Returns `null` for non-number/date fields,
|
|
227
|
+
* or when no JSON schema is available to determine the field's type.
|
|
228
|
+
* @internal
|
|
229
|
+
*/
|
|
230
|
+
export function formatValueByFieldType(raw, fieldName, schema) {
|
|
231
|
+
var _a;
|
|
232
|
+
const fieldSchema = resolveFieldSchema(fieldName, schema);
|
|
182
233
|
if (!fieldSchema)
|
|
183
234
|
return null;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
235
|
+
if (isOneOfDate(FIELD_SCHEMA_TESTER_CONTROL, fieldSchema, FIELD_SCHEMA_TESTER_CONTEXT)) {
|
|
236
|
+
const isDatetime = fieldSchema.genesisType === GenesisType.DATETIME ||
|
|
237
|
+
((_a = fieldSchema.oneOf) === null || _a === void 0 ? void 0 : _a.some((branch) => branch.genesisType === GenesisType.DATETIME));
|
|
238
|
+
const formatted = getDateFormatter(undefined, isDatetime ? REVIEW_DATETIME_OPTIONS : REVIEW_DATE_OPTIONS)({ value: raw });
|
|
239
|
+
return formatted || null;
|
|
240
|
+
}
|
|
241
|
+
if (isOneOfNumber(FIELD_SCHEMA_TESTER_CONTROL, fieldSchema, FIELD_SCHEMA_TESTER_CONTEXT)) {
|
|
242
|
+
const formatted = getNumberFormatter(REVIEW_NUMBER_FORMAT)({ value: raw });
|
|
243
|
+
return formatted || null;
|
|
188
244
|
}
|
|
189
245
|
return null;
|
|
190
246
|
}
|
|
@@ -1970,6 +1970,17 @@ declare const Form_base: (new (...args: any[]) => {
|
|
|
1970
1970
|
focus(options?: FocusOptions): void;
|
|
1971
1971
|
}) & typeof FoundationElement;
|
|
1972
1972
|
|
|
1973
|
+
/**
|
|
1974
|
+
* Formats a raw value for the review panel by the same renderer type
|
|
1975
|
+
* (`NumberControlRenderer`/`DateControlRenderer`) the form would use for this field, reusing
|
|
1976
|
+
* `@genesislcap/foundation-utils`'s formatters rather than re-deriving display logic. Numbers
|
|
1977
|
+
* are formatted with `getNumberFormatter`; dates/datetimes with `getDateFormatter`, adding
|
|
1978
|
+
* hours/minutes for `GenesisType.DATETIME` fields. Returns `null` for non-number/date fields,
|
|
1979
|
+
* or when no JSON schema is available to determine the field's type.
|
|
1980
|
+
* @internal
|
|
1981
|
+
*/
|
|
1982
|
+
export declare function formatValueByFieldType(raw: any, fieldName: string, schema: any): string | null;
|
|
1983
|
+
|
|
1973
1984
|
/**
|
|
1974
1985
|
* Converts a raw field value to a display string for the review panel.
|
|
1975
1986
|
* Arrays of primitives are comma-joined; arrays of objects and plain objects
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/foundation-forms",
|
|
3
3
|
"description": "Genesis Foundation Forms",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "15.0.0-FUI-2571-formatters.1",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"license": "SEE LICENSE IN license.txt",
|
|
7
7
|
"main": "dist/esm/index.js",
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@genesislcap/foundation-testing": "
|
|
63
|
-
"@genesislcap/genx": "
|
|
64
|
-
"@genesislcap/rollup-builder": "
|
|
65
|
-
"@genesislcap/ts-builder": "
|
|
66
|
-
"@genesislcap/uvu-playwright-builder": "
|
|
67
|
-
"@genesislcap/vite-builder": "
|
|
68
|
-
"@genesislcap/webpack-builder": "
|
|
62
|
+
"@genesislcap/foundation-testing": "15.0.0-FUI-2571-formatters.1",
|
|
63
|
+
"@genesislcap/genx": "15.0.0-FUI-2571-formatters.1",
|
|
64
|
+
"@genesislcap/rollup-builder": "15.0.0-FUI-2571-formatters.1",
|
|
65
|
+
"@genesislcap/ts-builder": "15.0.0-FUI-2571-formatters.1",
|
|
66
|
+
"@genesislcap/uvu-playwright-builder": "15.0.0-FUI-2571-formatters.1",
|
|
67
|
+
"@genesislcap/vite-builder": "15.0.0-FUI-2571-formatters.1",
|
|
68
|
+
"@genesislcap/webpack-builder": "15.0.0-FUI-2571-formatters.1",
|
|
69
69
|
"@types/json-schema": "^7.0.11",
|
|
70
70
|
"@types/papaparse": "^5.3.14"
|
|
71
71
|
},
|
|
@@ -82,12 +82,12 @@
|
|
|
82
82
|
}
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@genesislcap/foundation-comms": "
|
|
86
|
-
"@genesislcap/foundation-criteria": "
|
|
87
|
-
"@genesislcap/foundation-logger": "
|
|
88
|
-
"@genesislcap/foundation-notifications": "
|
|
89
|
-
"@genesislcap/foundation-ui": "
|
|
90
|
-
"@genesislcap/foundation-utils": "
|
|
85
|
+
"@genesislcap/foundation-comms": "15.0.0-FUI-2571-formatters.1",
|
|
86
|
+
"@genesislcap/foundation-criteria": "15.0.0-FUI-2571-formatters.1",
|
|
87
|
+
"@genesislcap/foundation-logger": "15.0.0-FUI-2571-formatters.1",
|
|
88
|
+
"@genesislcap/foundation-notifications": "15.0.0-FUI-2571-formatters.1",
|
|
89
|
+
"@genesislcap/foundation-ui": "15.0.0-FUI-2571-formatters.1",
|
|
90
|
+
"@genesislcap/foundation-utils": "15.0.0-FUI-2571-formatters.1",
|
|
91
91
|
"@json-schema-tools/dereferencer": "^1.6.1",
|
|
92
92
|
"@jsonforms/core": "^3.2.1",
|
|
93
93
|
"@microsoft/fast-components": "2.30.6",
|
|
@@ -109,5 +109,5 @@
|
|
|
109
109
|
"access": "public"
|
|
110
110
|
},
|
|
111
111
|
"customElements": "dist/custom-elements.json",
|
|
112
|
-
"gitHead": "
|
|
112
|
+
"gitHead": "1fb4e0f61551cdc8dae073ce584869216efbfe9d"
|
|
113
113
|
}
|