@arquimedes.co/eureka-forms 3.0.59 → 3.0.60
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/App/App.module.css +34 -34
- package/dist/App/AppFunctions.d.ts +1 -1
- package/dist/App/AppHooks.d.ts +2 -2
- package/dist/Form/ConfirmationDialog/ConfirmationDialog.js +1 -1
- package/dist/Form/Form.js +8 -7
- package/dist/Form/FormFunctions.d.ts +17 -0
- package/dist/Form/FormFunctions.js +22 -0
- package/dist/Form/FormFunctions.test.js +28 -1
- package/dist/Form/FormTypes/ColumnForm/ColumnForm.module.css +19 -19
- package/dist/Form/Section/MaterialSection/MaterialSection.js +3 -7
- package/dist/Form/Section/MaterialSection/MaterialSection.module.css +6 -6
- package/dist/Form/Section/Section.js +1 -1
- package/dist/Form/Terms/Terms.js +1 -1
- package/dist/FormSteps/ApiSelectorStep/MaterialApiSelectorStep/MaterialApiSelectorStep.js +1 -1
- package/dist/FormSteps/CheckBoxStep/CheckBoxStep.mobileLabel.test.js +1 -3
- package/dist/FormSteps/CheckBoxStep/MaterialCheckBoxStep/MaterialCheckBoxStep.module.css +63 -63
- package/dist/FormSteps/CollapsibleStep/MaterialTitleStep/MaterialCollapsibleStep.module.css +68 -68
- package/dist/FormSteps/EntityValueStep/MaterialEntityValuePickerStep/MaterialEntityValuePickerStep.js +1 -1
- package/dist/FormSteps/FileUploadStep/MaterialFileUploadStep/MaterialFileUploadStep.js +1 -3
- package/dist/FormSteps/MapperStep/MaterialMapperStep/Element/PagedMapperElement/PagedMapperElement.js +1 -1
- package/dist/FormSteps/MapperStep/MaterialMapperStep/MaterialMapperStep.module.css +41 -41
- package/dist/FormSteps/RatingStep/MaterialRatingStep/MaterialRatingStep.module.css +30 -30
- package/dist/FormSteps/SelectorStep/MaterialSelectorStep/MaterialSelectorStep.module.css +9 -9
- package/dist/FormSteps/SeparatorStep/MaterialSeparatorStep/MaterialSeparatorStep.js +1 -3
- package/dist/FormSteps/SeparatorStep/MaterialSeparatorStep/MaterialSeparatorStep.module.css +7 -7
- package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/MaterialTextAreaEditorStep.js +1 -1
- package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/MaterialTextAreaStep.module.css +113 -113
- package/dist/FormSteps/TextInputStep/MaterialTextInputStep/MaterialTextInputStep.module.css +9 -9
- package/dist/FormSteps/TitleStep/MaterialTitleStep/MaterialTitleStep.module.css +18 -18
- package/dist/FormSteps/Utils/@StepFiller/StepFiller.js +1 -1
- package/dist/Services/ApiSelectorService.d.ts +134 -134
- package/dist/Services/DraftService.d.ts +8 -8
- package/dist/Services/IntegrationService.d.ts +8 -8
- package/dist/Shared/CustomBtn/CustomBtn.js +1 -1
- package/dist/Shared/ErkDatePicker/ErkDatePicker.js +1 -3
- package/dist/Shared/ErkMenuItem.d.ts +1 -1
- package/dist/Shared/ErkSelect/ErkSelect.d.ts +3 -3
- package/dist/Shared/ErkSelect/ErkSelect.js +1 -1
- package/dist/Shared/ErkTimePicker/ErkTimePicker.js +1 -1
- package/dist/Shared/Loader/Loader.module.css +12 -12
- package/dist/Shared/Navbar/Navbar.js +1 -1
- package/dist/Shared/SmartDraftRenderer/FormDecorator.module.css +1 -6
- package/dist/States/SiteSlice.d.ts +2 -2
- package/dist/Utils/AxiosAPI.d.ts +4 -4
- package/dist/Utils/PhoneFunctions.js +1 -1
- package/dist/Utils/TestUtils.d.ts +7 -7
- package/dist/Utils/_api.d.ts +4 -4
- package/dist/Utils/store.d.ts +1 -1
- package/dist/constants/ConditionTypes.d.ts +2 -2
- package/dist/hooks.d.ts +1 -1
- package/dist/index.module.css +14 -14
- package/package.json +14 -21
package/dist/App/App.module.css
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
.curtain {
|
|
2
|
-
position: absolute;
|
|
3
|
-
width: 100%;
|
|
4
|
-
height: 100%;
|
|
5
|
-
max-width: 100%;
|
|
6
|
-
display: flex;
|
|
7
|
-
justify-content: center;
|
|
8
|
-
align-items: center;
|
|
9
|
-
background-color: white;
|
|
10
|
-
z-index: 5000;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
#widget:eureka {
|
|
14
|
-
min-height: inherit;
|
|
15
|
-
}
|
|
16
|
-
.container {
|
|
17
|
-
width: 100%;
|
|
18
|
-
position: relative;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.widgetContainer {
|
|
22
|
-
position: relative;
|
|
23
|
-
max-width: 100%;
|
|
24
|
-
height: 100%;
|
|
25
|
-
min-height: inherit;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.container *,
|
|
29
|
-
.container *::after,
|
|
30
|
-
.container *::before {
|
|
31
|
-
-webkit-box-sizing: content-box;
|
|
32
|
-
-moz-box-sizing: content-box;
|
|
33
|
-
box-sizing: content-box;
|
|
34
|
-
}
|
|
1
|
+
.curtain {
|
|
2
|
+
position: absolute;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
display: flex;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
align-items: center;
|
|
9
|
+
background-color: white;
|
|
10
|
+
z-index: 5000;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
#widget:eureka {
|
|
14
|
+
min-height: inherit;
|
|
15
|
+
}
|
|
16
|
+
.container {
|
|
17
|
+
width: 100%;
|
|
18
|
+
position: relative;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.widgetContainer {
|
|
22
|
+
position: relative;
|
|
23
|
+
max-width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
min-height: inherit;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.container *,
|
|
29
|
+
.container *::after,
|
|
30
|
+
.container *::before {
|
|
31
|
+
-webkit-box-sizing: content-box;
|
|
32
|
+
-moz-box-sizing: content-box;
|
|
33
|
+
box-sizing: content-box;
|
|
34
|
+
}
|
|
@@ -20,4 +20,4 @@ export declare const mapOriginalValue: (orgInfo: {
|
|
|
20
20
|
idOrganization?: string;
|
|
21
21
|
countryCode?: CountryCode;
|
|
22
22
|
}, step: FormStep, value: any, values: ValuesStore, form?: Readonly<Form>, path?: string) => Promise<any>;
|
|
23
|
-
export declare const calcInitialSections: (form: Form) => Pick<SiteState,
|
|
23
|
+
export declare const calcInitialSections: (form: Form) => Pick<SiteState, 'previousSections' | 'idCurrentSection' | 'nextSections'>;
|
package/dist/App/AppHooks.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Form, Organization } from '../@Types';
|
|
2
2
|
import { AppProps } from './App';
|
|
3
3
|
import { Branding } from '../@Types/Branding';
|
|
4
|
-
export declare const useSetupApp: (isEmbedded: boolean, props: Omit<AppProps,
|
|
4
|
+
export declare const useSetupApp: (isEmbedded: boolean, props: Omit<AppProps, 'isWidget'>) => {
|
|
5
5
|
form: Form | undefined | null;
|
|
6
6
|
organization: Organization | undefined | null;
|
|
7
7
|
branding: Branding | undefined;
|
|
8
8
|
reload: () => void;
|
|
9
9
|
};
|
|
10
|
-
export declare const useLogRocket: (organization: Organization | null | undefined, form: Form | null | undefined, { apiKey, internal, postview, preview }: Pick<AppProps,
|
|
10
|
+
export declare const useLogRocket: (organization: Organization | null | undefined, form: Form | null | undefined, { apiKey, internal, postview, preview }: Pick<AppProps, 'apiKey' | 'internal' | 'postview' | 'preview'>) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import styles from './ConfirmationDialog.module.css';
|
|
3
3
|
import { Dialog } from '@mui/material';
|
|
4
4
|
import { useAppSelector } from '../../hooks';
|
package/dist/Form/Form.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import Navbar from '../Shared/Navbar/Navbar';
|
|
4
4
|
import styles from './Form.module.css';
|
|
@@ -6,7 +6,7 @@ import InternalFormStyle from '../constants/InternalFormStyle';
|
|
|
6
6
|
import ColumnForm from './FormTypes/ColumnForm/ColumnForm';
|
|
7
7
|
import StepperForm from './FormTypes/StepperForm/StepperForm';
|
|
8
8
|
import { FormStyleTypes, FormTypes } from '../constants/FormStepTypes';
|
|
9
|
-
import { calcValue } from './FormFunctions';
|
|
9
|
+
import { calcValue, resolveCaptchaToken } from './FormFunctions';
|
|
10
10
|
import { FormProvider, useForm } from 'react-hook-form';
|
|
11
11
|
import widgetInstance from '../Utils/AxiosWidget';
|
|
12
12
|
import axiosInstance from '../Utils/AxiosAPI';
|
|
@@ -38,15 +38,16 @@ function FormComponent({ form, apiKey, reload, isWidget, branding, setSubmit, sc
|
|
|
38
38
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
39
|
}, [idFocusStep]);
|
|
40
40
|
const onSubmit = useCallback(async (values) => {
|
|
41
|
-
let token = null;
|
|
42
|
-
if (form.hasCaptcha && !internal && !customSubmit) {
|
|
43
|
-
token = recaptchaRef.current?.getValue();
|
|
44
|
-
token ?? (token = await recaptchaRef?.current.executeAsync());
|
|
45
|
-
}
|
|
46
41
|
const ApiKey = internal ? form.apiKey : apiKey;
|
|
47
42
|
if (!ApiKey && !customSubmit && !customSubmitBtns)
|
|
48
43
|
return;
|
|
49
44
|
try {
|
|
45
|
+
// Resolved inside the try so a captcha that cannot mint a token surfaces through the same
|
|
46
|
+
// error path as any other submit failure, rather than rejecting out of the handler and
|
|
47
|
+
// leaving the submitter with no feedback at all.
|
|
48
|
+
const token = form.hasCaptcha && !internal && !customSubmit
|
|
49
|
+
? await resolveCaptchaToken(recaptchaRef.current)
|
|
50
|
+
: null;
|
|
50
51
|
const state = await dispatch(getAppState({ idForm })).unwrap();
|
|
51
52
|
const newValues = {
|
|
52
53
|
...state.site.values.global,
|
|
@@ -4,6 +4,23 @@ import { CustomStep } from '../FormSteps/CustomStep';
|
|
|
4
4
|
import { CBRFormStep } from '../@Types/CBRFormStep';
|
|
5
5
|
import { MapperElement } from '../@Types/MapperElement';
|
|
6
6
|
import { ValuesStore } from '../States/SiteSlice';
|
|
7
|
+
/** The reCAPTCHA widget surface a submission needs: the response it holds, and the challenge that mints one. */
|
|
8
|
+
export interface CaptchaWidget {
|
|
9
|
+
getValue(): string | null;
|
|
10
|
+
executeAsync(): Promise<string | null>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the reCAPTCHA response to send with a submission, running the invisible challenge when the widget
|
|
14
|
+
* is not holding one yet.
|
|
15
|
+
*
|
|
16
|
+
* An unsolved invisible widget answers `getValue()` with an EMPTY STRING rather than null, so emptiness —
|
|
17
|
+
* not nullishness — is what decides whether the challenge still has to run. A submission that skips the
|
|
18
|
+
* challenge carries no token, and the API rejects every captcha-protected public form with a 403.
|
|
19
|
+
*
|
|
20
|
+
* Yields null when no widget is mounted, leaving the caller to submit tokenless rather than throwing out of
|
|
21
|
+
* the submit handler.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveCaptchaToken(captcha: CaptchaWidget | null | undefined): Promise<string | null>;
|
|
7
24
|
/**
|
|
8
25
|
* Function that cals the value of a step to output on submit
|
|
9
26
|
*/
|
|
@@ -3,6 +3,28 @@ import FormStepTypes, { EntityValueDataTypes } from '../constants/FormStepTypes'
|
|
|
3
3
|
import { calcStepDeps } from '../FormSteps/StepHooks';
|
|
4
4
|
import { calcRecursiveData } from '../Utils/FormStepFunctions';
|
|
5
5
|
import { isValidPhoneNumber } from '../Utils/PhoneFunctions';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the reCAPTCHA response to send with a submission, running the invisible challenge when the widget
|
|
8
|
+
* is not holding one yet.
|
|
9
|
+
*
|
|
10
|
+
* An unsolved invisible widget answers `getValue()` with an EMPTY STRING rather than null, so emptiness —
|
|
11
|
+
* not nullishness — is what decides whether the challenge still has to run. A submission that skips the
|
|
12
|
+
* challenge carries no token, and the API rejects every captcha-protected public form with a 403.
|
|
13
|
+
*
|
|
14
|
+
* Yields null when no widget is mounted, leaving the caller to submit tokenless rather than throwing out of
|
|
15
|
+
* the submit handler.
|
|
16
|
+
*/
|
|
17
|
+
export async function resolveCaptchaToken(captcha) {
|
|
18
|
+
if (!captcha)
|
|
19
|
+
return null;
|
|
20
|
+
const held = captcha.getValue();
|
|
21
|
+
if (held)
|
|
22
|
+
return held;
|
|
23
|
+
const solved = await captcha.executeAsync();
|
|
24
|
+
if (solved)
|
|
25
|
+
return solved;
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
6
28
|
/**
|
|
7
29
|
* Function that cals the value of a step to output on submit
|
|
8
30
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/require-await */
|
|
2
2
|
import { ContentState, EditorState } from 'draft-js';
|
|
3
3
|
import FormStepTypes, { EntityValueDataTypes } from '../constants/FormStepTypes';
|
|
4
|
-
import { calcDependencies, calcValue } from './FormFunctions';
|
|
4
|
+
import { calcDependencies, calcValue, resolveCaptchaToken } from './FormFunctions';
|
|
5
5
|
import { stringToDraft } from '../Utils/DraftFunctions';
|
|
6
6
|
import { describe, expect, test } from 'vitest';
|
|
7
7
|
describe('FormFunctions', function () {
|
|
@@ -455,4 +455,31 @@ describe('FormFunctions', function () {
|
|
|
455
455
|
expect(dependencyStore.idStep.dependents.length).toBe(1);
|
|
456
456
|
});
|
|
457
457
|
});
|
|
458
|
+
describe('resolveCaptchaToken', function () {
|
|
459
|
+
test('Uses the token the widget already holds without re-running the challenge', async () => {
|
|
460
|
+
let executed = false;
|
|
461
|
+
const token = await resolveCaptchaToken({
|
|
462
|
+
getValue: () => 'already-solved',
|
|
463
|
+
executeAsync: async () => {
|
|
464
|
+
executed = true;
|
|
465
|
+
return 'freshly-solved';
|
|
466
|
+
},
|
|
467
|
+
});
|
|
468
|
+
expect(token).toBe('already-solved');
|
|
469
|
+
expect(executed).toBe(false);
|
|
470
|
+
});
|
|
471
|
+
test('Runs the challenge when the invisible widget reports an empty response', async () => {
|
|
472
|
+
// An unsolved invisible captcha answers `getValue()` with '' — not null — so emptiness is what
|
|
473
|
+
// must decide whether the challenge still has to run. Treating only nullish as unsolved leaves
|
|
474
|
+
// the submission tokenless and the API answers 403.
|
|
475
|
+
const token = await resolveCaptchaToken({
|
|
476
|
+
getValue: () => '',
|
|
477
|
+
executeAsync: async () => 'freshly-solved',
|
|
478
|
+
});
|
|
479
|
+
expect(token).toBe('freshly-solved');
|
|
480
|
+
});
|
|
481
|
+
test('Yields no token when the widget is not mounted', async () => {
|
|
482
|
+
expect(await resolveCaptchaToken(null)).toBeNull();
|
|
483
|
+
});
|
|
484
|
+
});
|
|
458
485
|
});
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
width: fit-content;
|
|
3
|
-
display: flex;
|
|
4
|
-
flex-direction: column;
|
|
5
|
-
align-items: center;
|
|
6
|
-
max-width: 100%;
|
|
7
|
-
position: relative;
|
|
8
|
-
}
|
|
9
|
-
.curtain {
|
|
10
|
-
position: absolute;
|
|
11
|
-
width: 100%;
|
|
12
|
-
height: 100%;
|
|
13
|
-
z-index: 2;
|
|
14
|
-
}
|
|
15
|
-
.submitBtnContainer {
|
|
16
|
-
margin-top: 10px;
|
|
17
|
-
width: 200px;
|
|
18
|
-
max-width: calc(100% - 40px);
|
|
19
|
-
}
|
|
1
|
+
.container {
|
|
2
|
+
width: fit-content;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
align-items: center;
|
|
6
|
+
max-width: 100%;
|
|
7
|
+
position: relative;
|
|
8
|
+
}
|
|
9
|
+
.curtain {
|
|
10
|
+
position: absolute;
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
z-index: 2;
|
|
14
|
+
}
|
|
15
|
+
.submitBtnContainer {
|
|
16
|
+
margin-top: 10px;
|
|
17
|
+
width: 200px;
|
|
18
|
+
max-width: calc(100% - 40px);
|
|
19
|
+
}
|
|
@@ -14,15 +14,11 @@ function MaterialSection({ idSection }) {
|
|
|
14
14
|
if (!section)
|
|
15
15
|
return _jsx(_Fragment, {});
|
|
16
16
|
return (_jsx("div", { className: styles.container, style: {
|
|
17
|
-
width: (form.size.blockSize + form.size.spacingSize) *
|
|
18
|
-
|
|
19
|
-
justifyContent: sendLabel !== undefined &&
|
|
20
|
-
currentBreakPoint < form.size.blockNum
|
|
21
|
-
? 'center'
|
|
22
|
-
: 'normal',
|
|
17
|
+
width: (form.size.blockSize + form.size.spacingSize) * form.size.blockNum,
|
|
18
|
+
justifyContent: sendLabel !== undefined && currentBreakPoint < form.size.blockNum ? 'center' : 'normal',
|
|
23
19
|
}, children: section.steps?.map((idStep) => {
|
|
24
20
|
const step = form.steps[idStep];
|
|
25
|
-
return
|
|
21
|
+
return _jsx(StepComponent, { editable: editable, step: step }, idStep);
|
|
26
22
|
}) }));
|
|
27
23
|
}
|
|
28
24
|
export default MaterialSection;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-flow: row wrap;
|
|
4
|
-
height: fit-content;
|
|
5
|
-
max-width: 100%;
|
|
6
|
-
}
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-flow: row wrap;
|
|
4
|
+
height: fit-content;
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
}
|
|
@@ -13,6 +13,6 @@ function SectionComponent(props) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
|
-
return
|
|
16
|
+
return _jsx(SectionContext.Provider, { value: props.idSection, children: renderSectionType() });
|
|
17
17
|
}
|
|
18
18
|
export default SectionComponent;
|
package/dist/Form/Terms/Terms.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useContext, useEffect, useState } from 'react';
|
|
3
3
|
import styles from './Terms.module.css';
|
|
4
4
|
import TermComponent from './Term/Term';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext, useMemo } from 'react';
|
|
3
3
|
import FormStepTypes, { ApiSelectorOptionTypes, ApiSelectorParamTypes } from '../../../constants/FormStepTypes';
|
|
4
4
|
import StepComponent from '../../Step';
|
|
@@ -63,9 +63,7 @@ function Harness({ currentBreakPoint }) {
|
|
|
63
63
|
}
|
|
64
64
|
function getLabelDiv() {
|
|
65
65
|
// the leaf div holding only the label text (the wrapping column also matches by textContent)
|
|
66
|
-
return screen.getByText((_, element) => element?.tagName === 'DIV' &&
|
|
67
|
-
element.children.length === 0 &&
|
|
68
|
-
element.textContent === `${LONG_LABEL}:`);
|
|
66
|
+
return screen.getByText((_, element) => element?.tagName === 'DIV' && element.children.length === 0 && element.textContent === `${LONG_LABEL}:`);
|
|
69
67
|
}
|
|
70
68
|
/** Makes every element report a 2-line-clamped overflow (jsdom has no layout). */
|
|
71
69
|
function mockLabelOverflow() {
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
max-width: 100%;
|
|
5
|
-
}
|
|
6
|
-
.checkboxLbl,
|
|
7
|
-
.overflowLbl {
|
|
8
|
-
font-size: 18px;
|
|
9
|
-
margin-right: 10px;
|
|
10
|
-
margin-left: 10px;
|
|
11
|
-
}
|
|
12
|
-
.overflowLbl {
|
|
13
|
-
white-space: nowrap;
|
|
14
|
-
overflow: hidden;
|
|
15
|
-
text-overflow: ellipsis;
|
|
16
|
-
}
|
|
17
|
-
.labelColumn {
|
|
18
|
-
display: flex;
|
|
19
|
-
flex-direction: column;
|
|
20
|
-
align-items: flex-start;
|
|
21
|
-
flex: 1 1 auto;
|
|
22
|
-
min-width: 0;
|
|
23
|
-
margin-right: 10px;
|
|
24
|
-
margin-left: 10px;
|
|
25
|
-
}
|
|
26
|
-
.clampLbl,
|
|
27
|
-
.expandedLbl {
|
|
28
|
-
font-size: 18px;
|
|
29
|
-
}
|
|
30
|
-
.clampLbl {
|
|
31
|
-
display: -webkit-box;
|
|
32
|
-
-webkit-box-orient: vertical;
|
|
33
|
-
-webkit-line-clamp: 2;
|
|
34
|
-
line-clamp: 2;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
}
|
|
37
|
-
.toggleLbl {
|
|
38
|
-
background: none;
|
|
39
|
-
border: none;
|
|
40
|
-
padding: 0;
|
|
41
|
-
margin-top: 2px;
|
|
42
|
-
font-size: 13px;
|
|
43
|
-
font-weight: 700;
|
|
44
|
-
font-family: inherit;
|
|
45
|
-
cursor: pointer;
|
|
46
|
-
}
|
|
47
|
-
.labelCheckBoxContainer {
|
|
48
|
-
display: flex;
|
|
49
|
-
align-items: center;
|
|
50
|
-
flex-direction: row;
|
|
51
|
-
align-items: center;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.descriptionPar {
|
|
55
|
-
font-size: 0.75rem;
|
|
56
|
-
margin-left: 14px;
|
|
57
|
-
margin-top: 4px;
|
|
58
|
-
font-weight: 400;
|
|
59
|
-
line-height: 1.66;
|
|
60
|
-
max-width: 100%;
|
|
61
|
-
overflow: hidden;
|
|
62
|
-
text-overflow: ellipsis;
|
|
63
|
-
}
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
max-width: 100%;
|
|
5
|
+
}
|
|
6
|
+
.checkboxLbl,
|
|
7
|
+
.overflowLbl {
|
|
8
|
+
font-size: 18px;
|
|
9
|
+
margin-right: 10px;
|
|
10
|
+
margin-left: 10px;
|
|
11
|
+
}
|
|
12
|
+
.overflowLbl {
|
|
13
|
+
white-space: nowrap;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
text-overflow: ellipsis;
|
|
16
|
+
}
|
|
17
|
+
.labelColumn {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
align-items: flex-start;
|
|
21
|
+
flex: 1 1 auto;
|
|
22
|
+
min-width: 0;
|
|
23
|
+
margin-right: 10px;
|
|
24
|
+
margin-left: 10px;
|
|
25
|
+
}
|
|
26
|
+
.clampLbl,
|
|
27
|
+
.expandedLbl {
|
|
28
|
+
font-size: 18px;
|
|
29
|
+
}
|
|
30
|
+
.clampLbl {
|
|
31
|
+
display: -webkit-box;
|
|
32
|
+
-webkit-box-orient: vertical;
|
|
33
|
+
-webkit-line-clamp: 2;
|
|
34
|
+
line-clamp: 2;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
.toggleLbl {
|
|
38
|
+
background: none;
|
|
39
|
+
border: none;
|
|
40
|
+
padding: 0;
|
|
41
|
+
margin-top: 2px;
|
|
42
|
+
font-size: 13px;
|
|
43
|
+
font-weight: 700;
|
|
44
|
+
font-family: inherit;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
}
|
|
47
|
+
.labelCheckBoxContainer {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
flex-direction: row;
|
|
51
|
+
align-items: center;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.descriptionPar {
|
|
55
|
+
font-size: 0.75rem;
|
|
56
|
+
margin-left: 14px;
|
|
57
|
+
margin-top: 4px;
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
line-height: 1.66;
|
|
60
|
+
max-width: 100%;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
text-overflow: ellipsis;
|
|
63
|
+
}
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: row;
|
|
4
|
-
width: 900px;
|
|
5
|
-
max-width: 100%;
|
|
6
|
-
margin-top: 5px;
|
|
7
|
-
margin-bottom: 10px;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.collapsibleLabel {
|
|
11
|
-
margin-left: 10px;
|
|
12
|
-
font-size: 20px;
|
|
13
|
-
font-weight: 600;
|
|
14
|
-
cursor: default;
|
|
15
|
-
text-align: start;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
-webkit-touch-callout: none; /* iOS Safari */
|
|
18
|
-
-webkit-user-select: none; /* Safari */
|
|
19
|
-
-khtml-user-select: none; /* Konqueror HTML */
|
|
20
|
-
-moz-user-select: none; /* Old versions of Firefox */
|
|
21
|
-
-ms-user-select: none; /* Internet Explorer/Edge */
|
|
22
|
-
-o-user-select: none;
|
|
23
|
-
user-select: none; /* Non-prefixed version, currently */
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.content {
|
|
27
|
-
width: 100%;
|
|
28
|
-
overflow: hidden;
|
|
29
|
-
transition: height ease 0.9s;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.contentContainer {
|
|
33
|
-
margin-left: auto;
|
|
34
|
-
margin-right: auto;
|
|
35
|
-
display: flex;
|
|
36
|
-
flex-flow: row wrap;
|
|
37
|
-
height: fit-content;
|
|
38
|
-
max-width: 100%;
|
|
39
|
-
width: 100%;
|
|
40
|
-
overflow-x: hidden;
|
|
41
|
-
overflow-y: hidden;
|
|
42
|
-
}
|
|
43
|
-
.expand {
|
|
44
|
-
display: flex;
|
|
45
|
-
justify-content: center;
|
|
46
|
-
align-items: center;
|
|
47
|
-
margin-left: 2px;
|
|
48
|
-
}
|
|
49
|
-
.expandIcon {
|
|
50
|
-
height: 24px;
|
|
51
|
-
width: 24px;
|
|
52
|
-
font-size: 24px;
|
|
53
|
-
cursor: pointer;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.separator {
|
|
57
|
-
height: 1px;
|
|
58
|
-
width: calc(100% - 20px);
|
|
59
|
-
margin-left: 10px;
|
|
60
|
-
margin-bottom: 10px;
|
|
61
|
-
border-radius: 20px;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@media print {
|
|
65
|
-
.content {
|
|
66
|
-
height: auto !important;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: row;
|
|
4
|
+
width: 900px;
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
margin-top: 5px;
|
|
7
|
+
margin-bottom: 10px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.collapsibleLabel {
|
|
11
|
+
margin-left: 10px;
|
|
12
|
+
font-size: 20px;
|
|
13
|
+
font-weight: 600;
|
|
14
|
+
cursor: default;
|
|
15
|
+
text-align: start;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
-webkit-touch-callout: none; /* iOS Safari */
|
|
18
|
+
-webkit-user-select: none; /* Safari */
|
|
19
|
+
-khtml-user-select: none; /* Konqueror HTML */
|
|
20
|
+
-moz-user-select: none; /* Old versions of Firefox */
|
|
21
|
+
-ms-user-select: none; /* Internet Explorer/Edge */
|
|
22
|
+
-o-user-select: none;
|
|
23
|
+
user-select: none; /* Non-prefixed version, currently */
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.content {
|
|
27
|
+
width: 100%;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
transition: height ease 0.9s;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.contentContainer {
|
|
33
|
+
margin-left: auto;
|
|
34
|
+
margin-right: auto;
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-flow: row wrap;
|
|
37
|
+
height: fit-content;
|
|
38
|
+
max-width: 100%;
|
|
39
|
+
width: 100%;
|
|
40
|
+
overflow-x: hidden;
|
|
41
|
+
overflow-y: hidden;
|
|
42
|
+
}
|
|
43
|
+
.expand {
|
|
44
|
+
display: flex;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
align-items: center;
|
|
47
|
+
margin-left: 2px;
|
|
48
|
+
}
|
|
49
|
+
.expandIcon {
|
|
50
|
+
height: 24px;
|
|
51
|
+
width: 24px;
|
|
52
|
+
font-size: 24px;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.separator {
|
|
57
|
+
height: 1px;
|
|
58
|
+
width: calc(100% - 20px);
|
|
59
|
+
margin-left: 10px;
|
|
60
|
+
margin-bottom: 10px;
|
|
61
|
+
border-radius: 20px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@media print {
|
|
65
|
+
.content {
|
|
66
|
+
height: auto !important;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useContext, useMemo, useState } from 'react';
|
|
3
3
|
import FormStepTypes, { EntityValueDataTypes, EntityValueOptionTypes } from '../../../constants/FormStepTypes';
|
|
4
4
|
import SmartSelect from '../../SmartSelectStep/MaterialSmartSelectStep/MaterialSmartSelectStep';
|
|
@@ -138,9 +138,7 @@ function FileUploadStep({ step, editable }) {
|
|
|
138
138
|
}
|
|
139
139
|
return '';
|
|
140
140
|
};
|
|
141
|
-
return (_jsxs("div", { className: styles.container +
|
|
142
|
-
(error || !!fieldError ? ' Erk-error' : '') +
|
|
143
|
-
(dragging ? ' ' + styles.dragging : ''), style: {
|
|
141
|
+
return (_jsxs("div", { className: styles.container + (error || !!fieldError ? ' Erk-error' : '') + (dragging ? ' ' + styles.dragging : ''), style: {
|
|
144
142
|
minHeight: editable === false || postview ? undefined : '100px',
|
|
145
143
|
}, "data-testid": step.id, onDragOver: (e) => {
|
|
146
144
|
if (!editable || postview)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useContext, useMemo } from 'react';
|
|
3
3
|
import styles from './PagedMapperElement.module.css';
|
|
4
4
|
import FormContext from '../../../../../Contexts/FormContext';
|