@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.
Files changed (52) hide show
  1. package/dist/App/App.module.css +34 -34
  2. package/dist/App/AppFunctions.d.ts +1 -1
  3. package/dist/App/AppHooks.d.ts +2 -2
  4. package/dist/Form/ConfirmationDialog/ConfirmationDialog.js +1 -1
  5. package/dist/Form/Form.js +8 -7
  6. package/dist/Form/FormFunctions.d.ts +17 -0
  7. package/dist/Form/FormFunctions.js +22 -0
  8. package/dist/Form/FormFunctions.test.js +28 -1
  9. package/dist/Form/FormTypes/ColumnForm/ColumnForm.module.css +19 -19
  10. package/dist/Form/Section/MaterialSection/MaterialSection.js +3 -7
  11. package/dist/Form/Section/MaterialSection/MaterialSection.module.css +6 -6
  12. package/dist/Form/Section/Section.js +1 -1
  13. package/dist/Form/Terms/Terms.js +1 -1
  14. package/dist/FormSteps/ApiSelectorStep/MaterialApiSelectorStep/MaterialApiSelectorStep.js +1 -1
  15. package/dist/FormSteps/CheckBoxStep/CheckBoxStep.mobileLabel.test.js +1 -3
  16. package/dist/FormSteps/CheckBoxStep/MaterialCheckBoxStep/MaterialCheckBoxStep.module.css +63 -63
  17. package/dist/FormSteps/CollapsibleStep/MaterialTitleStep/MaterialCollapsibleStep.module.css +68 -68
  18. package/dist/FormSteps/EntityValueStep/MaterialEntityValuePickerStep/MaterialEntityValuePickerStep.js +1 -1
  19. package/dist/FormSteps/FileUploadStep/MaterialFileUploadStep/MaterialFileUploadStep.js +1 -3
  20. package/dist/FormSteps/MapperStep/MaterialMapperStep/Element/PagedMapperElement/PagedMapperElement.js +1 -1
  21. package/dist/FormSteps/MapperStep/MaterialMapperStep/MaterialMapperStep.module.css +41 -41
  22. package/dist/FormSteps/RatingStep/MaterialRatingStep/MaterialRatingStep.module.css +30 -30
  23. package/dist/FormSteps/SelectorStep/MaterialSelectorStep/MaterialSelectorStep.module.css +9 -9
  24. package/dist/FormSteps/SeparatorStep/MaterialSeparatorStep/MaterialSeparatorStep.js +1 -3
  25. package/dist/FormSteps/SeparatorStep/MaterialSeparatorStep/MaterialSeparatorStep.module.css +7 -7
  26. package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/MaterialTextAreaEditorStep.js +1 -1
  27. package/dist/FormSteps/TextAreaStep/MaterialTextAreaStep/MaterialTextAreaStep.module.css +113 -113
  28. package/dist/FormSteps/TextInputStep/MaterialTextInputStep/MaterialTextInputStep.module.css +9 -9
  29. package/dist/FormSteps/TitleStep/MaterialTitleStep/MaterialTitleStep.module.css +18 -18
  30. package/dist/FormSteps/Utils/@StepFiller/StepFiller.js +1 -1
  31. package/dist/Services/ApiSelectorService.d.ts +134 -134
  32. package/dist/Services/DraftService.d.ts +8 -8
  33. package/dist/Services/IntegrationService.d.ts +8 -8
  34. package/dist/Shared/CustomBtn/CustomBtn.js +1 -1
  35. package/dist/Shared/ErkDatePicker/ErkDatePicker.js +1 -3
  36. package/dist/Shared/ErkMenuItem.d.ts +1 -1
  37. package/dist/Shared/ErkSelect/ErkSelect.d.ts +3 -3
  38. package/dist/Shared/ErkSelect/ErkSelect.js +1 -1
  39. package/dist/Shared/ErkTimePicker/ErkTimePicker.js +1 -1
  40. package/dist/Shared/Loader/Loader.module.css +12 -12
  41. package/dist/Shared/Navbar/Navbar.js +1 -1
  42. package/dist/Shared/SmartDraftRenderer/FormDecorator.module.css +1 -6
  43. package/dist/States/SiteSlice.d.ts +2 -2
  44. package/dist/Utils/AxiosAPI.d.ts +4 -4
  45. package/dist/Utils/PhoneFunctions.js +1 -1
  46. package/dist/Utils/TestUtils.d.ts +7 -7
  47. package/dist/Utils/_api.d.ts +4 -4
  48. package/dist/Utils/store.d.ts +1 -1
  49. package/dist/constants/ConditionTypes.d.ts +2 -2
  50. package/dist/hooks.d.ts +1 -1
  51. package/dist/index.module.css +14 -14
  52. package/package.json +14 -21
@@ -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, "previousSections" | "idCurrentSection" | "nextSections">;
23
+ export declare const calcInitialSections: (form: Form) => Pick<SiteState, 'previousSections' | 'idCurrentSection' | 'nextSections'>;
@@ -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, "isWidget">) => {
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, "apiKey" | "internal" | "postview" | "preview">) => void;
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 { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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
- form.size.blockNum,
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 (_jsx(StepComponent, { editable: editable, step: step }, idStep));
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 (_jsx(SectionContext.Provider, { value: props.idSection, children: renderSectionType() }));
16
+ return _jsx(SectionContext.Provider, { value: props.idSection, children: renderSectionType() });
17
17
  }
18
18
  export default SectionComponent;
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
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 { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
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 { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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';