@axa-fr/design-system-look-and-feel-react 0.1.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.
Files changed (183) hide show
  1. package/dist/Accordion/Accordion.d.ts +12 -0
  2. package/dist/Accordion/Accordion.js +11 -0
  3. package/dist/Accordion/AccordionTagDateContainer.d.ts +10 -0
  4. package/dist/Accordion/AccordionTagDateContainer.js +10 -0
  5. package/dist/Accordion/index.d.ts +3 -0
  6. package/dist/Accordion/index.js +3 -0
  7. package/dist/AccordionCore/AccordionCore.d.ts +12 -0
  8. package/dist/AccordionCore/AccordionCore.js +13 -0
  9. package/dist/AccordionCore/index.d.ts +2 -0
  10. package/dist/AccordionCore/index.js +2 -0
  11. package/dist/Alert/Alert.d.ts +22 -0
  12. package/dist/Alert/Alert.js +27 -0
  13. package/dist/Button/Button.d.ts +17 -0
  14. package/dist/Button/Button.js +15 -0
  15. package/dist/Card/Card.d.ts +6 -0
  16. package/dist/Card/Card.js +9 -0
  17. package/dist/Card/index.d.ts +2 -0
  18. package/dist/Card/index.js +2 -0
  19. package/dist/Form/Checkbox/Checkbox.d.ts +7 -0
  20. package/dist/Form/Checkbox/Checkbox.js +15 -0
  21. package/dist/Form/Checkbox/CheckboxSelect.d.ts +15 -0
  22. package/dist/Form/Checkbox/CheckboxSelect.js +7 -0
  23. package/dist/Form/Checkbox/index.d.ts +2 -0
  24. package/dist/Form/Checkbox/index.js +2 -0
  25. package/dist/Form/FileUpload/FileUpload.d.ts +32 -0
  26. package/dist/Form/FileUpload/FileUpload.js +51 -0
  27. package/dist/Form/FileUpload/index.d.ts +1 -0
  28. package/dist/Form/FileUpload/index.js +1 -0
  29. package/dist/Form/InputError/InputError.d.ts +7 -0
  30. package/dist/Form/InputError/InputError.js +5 -0
  31. package/dist/Form/InputError/index.d.ts +1 -0
  32. package/dist/Form/InputError/index.js +1 -0
  33. package/dist/Form/Radio/Radio.d.ts +7 -0
  34. package/dist/Form/Radio/Radio.js +14 -0
  35. package/dist/Form/Radio/RadioSelect.d.ts +20 -0
  36. package/dist/Form/Radio/RadioSelect.js +16 -0
  37. package/dist/Form/Radio/index.d.ts +2 -0
  38. package/dist/Form/Radio/index.js +2 -0
  39. package/dist/Form/Select/CustomOption.d.ts +4 -0
  40. package/dist/Form/Select/CustomOption.js +8 -0
  41. package/dist/Form/Select/DropdownIndicator.d.ts +4 -0
  42. package/dist/Form/Select/DropdownIndicator.js +11 -0
  43. package/dist/Form/Select/Select.d.ts +27 -0
  44. package/dist/Form/Select/Select.js +27 -0
  45. package/dist/Form/Select/index.d.ts +1 -0
  46. package/dist/Form/Select/index.js +1 -0
  47. package/dist/Form/Text/Text.d.ts +13 -0
  48. package/dist/Form/Text/Text.js +16 -0
  49. package/dist/Form/Text/index.d.ts +1 -0
  50. package/dist/Form/Text/index.js +1 -0
  51. package/dist/Form/core/Field.d.ts +16 -0
  52. package/dist/Form/core/Field.js +12 -0
  53. package/dist/Form/core/FieldError.d.ts +7 -0
  54. package/dist/Form/core/FieldError.js +8 -0
  55. package/dist/Form/core/FieldForm.d.ts +59 -0
  56. package/dist/Form/core/FieldForm.js +151 -0
  57. package/dist/Form/core/FieldInput.d.ts +9 -0
  58. package/dist/Form/core/FieldInput.js +9 -0
  59. package/dist/Form/core/FormClassManager.d.ts +7 -0
  60. package/dist/Form/core/FormClassManager.js +33 -0
  61. package/dist/Form/core/HelpMessage.d.ts +7 -0
  62. package/dist/Form/core/HelpMessage.js +2 -0
  63. package/dist/Form/core/InputList.d.ts +8 -0
  64. package/dist/Form/core/InputList.js +4 -0
  65. package/dist/Form/core/MessageTypes.d.ts +5 -0
  66. package/dist/Form/core/MessageTypes.js +6 -0
  67. package/dist/Form/core/getComponentClassName.d.ts +1 -0
  68. package/dist/Form/core/getComponentClassName.js +27 -0
  69. package/dist/Form/core/getFirstId.d.ts +2 -0
  70. package/dist/Form/core/getFirstId.js +1 -0
  71. package/dist/Form/core/getOptionClassName.d.ts +1 -0
  72. package/dist/Form/core/getOptionClassName.js +10 -0
  73. package/dist/Form/core/index.d.ts +31 -0
  74. package/dist/Form/core/index.js +13 -0
  75. package/dist/Form/core/useInputClassModifier.d.ts +4 -0
  76. package/dist/Form/core/useInputClassModifier.js +12 -0
  77. package/dist/Form/core/useOptionsWithId.d.ts +2 -0
  78. package/dist/Form/core/useOptionsWithId.js +13 -0
  79. package/dist/IconBg/IconBg.d.ts +9 -0
  80. package/dist/IconBg/IconBg.js +13 -0
  81. package/dist/IconBg/index.d.ts +2 -0
  82. package/dist/IconBg/index.js +2 -0
  83. package/dist/Layout/Footer/DynamicIcons.d.ts +4 -0
  84. package/dist/Layout/Footer/DynamicIcons.js +20 -0
  85. package/dist/Layout/Footer/Footer.d.ts +14 -0
  86. package/dist/Layout/Footer/Footer.js +16 -0
  87. package/dist/Layout/Footer/MenuIcons.d.ts +9 -0
  88. package/dist/Layout/Footer/MenuIcons.js +8 -0
  89. package/dist/Layout/Footer/MenuLink.d.ts +11 -0
  90. package/dist/Layout/Footer/MenuLink.js +10 -0
  91. package/dist/Layout/Header/Header.d.ts +9 -0
  92. package/dist/Layout/Header/Header.js +11 -0
  93. package/dist/Layout/Header/NavBar/NavBar.d.ts +8 -0
  94. package/dist/Layout/Header/NavBar/NavBar.js +13 -0
  95. package/dist/Layout/Header/NavBar/index.d.ts +1 -0
  96. package/dist/Layout/Header/NavBar/index.js +1 -0
  97. package/dist/Layout/Header/PreviousLink/PreviousLink.d.ts +7 -0
  98. package/dist/Layout/Header/PreviousLink/PreviousLink.js +14 -0
  99. package/dist/Layout/Header/PreviousLink/index.d.ts +1 -0
  100. package/dist/Layout/Header/PreviousLink/index.js +1 -0
  101. package/dist/Layout/Header/index.d.ts +1 -0
  102. package/dist/Layout/Header/index.js +1 -0
  103. package/dist/Link/Link.d.ts +7 -0
  104. package/dist/Link/Link.js +11 -0
  105. package/dist/List/ClickList/ClickItem/ClickItem.d.ts +11 -0
  106. package/dist/List/ClickList/ClickItem/ClickItem.js +17 -0
  107. package/dist/List/ClickList/ClickItem/index.d.ts +1 -0
  108. package/dist/List/ClickList/ClickItem/index.js +1 -0
  109. package/dist/List/ClickList/ClickList.d.ts +8 -0
  110. package/dist/List/ClickList/ClickList.js +4 -0
  111. package/dist/List/ClickList/index.d.ts +3 -0
  112. package/dist/List/ClickList/index.js +3 -0
  113. package/dist/List/ContentItemDuo/ContentItemDuo.d.ts +13 -0
  114. package/dist/List/ContentItemDuo/ContentItemDuo.js +18 -0
  115. package/dist/List/ContentItemDuo/index.d.ts +2 -0
  116. package/dist/List/ContentItemDuo/index.js +2 -0
  117. package/dist/List/ContentItemMono/ContentItemMono.d.ts +16 -0
  118. package/dist/List/ContentItemMono/ContentItemMono.js +16 -0
  119. package/dist/List/ContentItemMono/constants.d.ts +4 -0
  120. package/dist/List/ContentItemMono/constants.js +5 -0
  121. package/dist/List/ContentItemMono/index.d.ts +3 -0
  122. package/dist/List/ContentItemMono/index.js +3 -0
  123. package/dist/List/ContentTabList/ContentTabItem/ContentTabItem.d.ts +6 -0
  124. package/dist/List/ContentTabList/ContentTabItem/ContentTabItem.js +6 -0
  125. package/dist/List/ContentTabList/ContentTabItem/index.d.ts +2 -0
  126. package/dist/List/ContentTabList/ContentTabItem/index.js +1 -0
  127. package/dist/List/ContentTabList/ContentTabList.d.ts +8 -0
  128. package/dist/List/ContentTabList/ContentTabList.js +9 -0
  129. package/dist/List/ContentTabList/index.d.ts +1 -0
  130. package/dist/List/ContentTabList/index.js +1 -0
  131. package/dist/List/List.d.ts +6 -0
  132. package/dist/List/List.js +9 -0
  133. package/dist/List/index.d.ts +1 -0
  134. package/dist/List/index.js +1 -0
  135. package/dist/Loader/Loader.d.ts +11 -0
  136. package/dist/Loader/Loader.js +10 -0
  137. package/dist/Loader/index.d.ts +1 -0
  138. package/dist/Loader/index.js +1 -0
  139. package/dist/ModalClient/Modal.d.ts +24 -0
  140. package/dist/ModalClient/Modal.js +53 -0
  141. package/dist/Pagination/Pagination.d.ts +9 -0
  142. package/dist/Pagination/Pagination.js +14 -0
  143. package/dist/Pagination/PaginationDesktop.d.ts +9 -0
  144. package/dist/Pagination/PaginationDesktop.js +31 -0
  145. package/dist/Pagination/PaginationMobile.d.ts +9 -0
  146. package/dist/Pagination/PaginationMobile.js +10 -0
  147. package/dist/Stepper/Stepper.d.ts +12 -0
  148. package/dist/Stepper/Stepper.js +22 -0
  149. package/dist/Svg/Svg.d.ts +7 -0
  150. package/dist/Svg/Svg.js +47 -0
  151. package/dist/Svg/index.d.ts +1 -0
  152. package/dist/Svg/index.js +1 -0
  153. package/dist/Svg/svgInjector.d.ts +12 -0
  154. package/dist/Svg/svgInjector.js +28 -0
  155. package/dist/Tabs/Tabs.d.ts +16 -0
  156. package/dist/Tabs/Tabs.js +48 -0
  157. package/dist/Tag/Tag.d.ts +6 -0
  158. package/dist/Tag/Tag.js +7 -0
  159. package/dist/Tag/index.d.ts +2 -0
  160. package/dist/Tag/index.js +2 -0
  161. package/dist/Title/Title.d.ts +14 -0
  162. package/dist/Title/Title.js +11 -0
  163. package/dist/Title/TitleWithSubtitles.d.ts +10 -0
  164. package/dist/Title/TitleWithSubtitles.js +6 -0
  165. package/dist/Title/constants.d.ts +5 -0
  166. package/dist/Title/constants.js +5 -0
  167. package/dist/Title/index.d.ts +3 -0
  168. package/dist/Title/index.js +3 -0
  169. package/dist/assets/svg/facebook.svg +1 -0
  170. package/dist/assets/svg/linkedin.svg +1 -0
  171. package/dist/assets/svg/twitterx.svg +1 -0
  172. package/dist/assets/svg/youtube.svg +1 -0
  173. package/dist/index.d.ts +30 -0
  174. package/dist/index.js +28 -0
  175. package/dist/utilities/constants.d.ts +6 -0
  176. package/dist/utilities/constants.js +7 -0
  177. package/dist/utilities/helpers/getComponentClassName.d.ts +1 -0
  178. package/dist/utilities/helpers/getComponentClassName.js +27 -0
  179. package/dist/utilities/hooks/useIsSmallScreen.d.ts +1 -0
  180. package/dist/utilities/hooks/useIsSmallScreen.js +14 -0
  181. package/dist/utilities.d.ts +3 -0
  182. package/dist/utilities.js +3 -0
  183. package/package.json +123 -0
@@ -0,0 +1,16 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from "react";
2
+ import { FieldForm } from "./FieldForm";
3
+ type FieldProps = Omit<ComponentPropsWithoutRef<typeof FieldForm>, "children"> & {
4
+ label: ReactNode;
5
+ children?: ReactNode;
6
+ id?: string;
7
+ classModifier?: string;
8
+ classNameContainerLabel?: string;
9
+ classNameContainerInput?: string;
10
+ isVisible?: boolean;
11
+ roleContainer?: string;
12
+ ariaLabelContainer?: string;
13
+ isLabelContainerLinkedToInput?: boolean;
14
+ };
15
+ export declare const Field: ({ id, message, messageType, label, children, forceDisplayMessage, classModifier, className, classNameContainerLabel, classNameContainerInput, isVisible, roleContainer, ariaLabelContainer, isLabelContainerLinkedToInput, }: FieldProps) => import("react/jsx-runtime").JSX.Element | null;
16
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getComponentClassName } from "./getComponentClassName";
3
+ import { FieldError } from "./FieldError";
4
+ import { MessageTypes } from "./MessageTypes";
5
+ import { FieldForm } from "./FieldForm";
6
+ export const Field = ({ id = "", message = "", messageType = MessageTypes.error, label, children, forceDisplayMessage, classModifier = "", className, classNameContainerLabel = "col-md-2", classNameContainerInput = "col-md-10", isVisible = true, roleContainer, ariaLabelContainer, isLabelContainerLinkedToInput = true, }) => {
7
+ if (!isVisible) {
8
+ return null;
9
+ }
10
+ const componentClassName = getComponentClassName(className, classModifier, "row af-form__group");
11
+ return (_jsxs("div", { className: componentClassName, role: roleContainer, "aria-label": ariaLabelContainer, children: [_jsx("div", { className: classNameContainerLabel, children: _jsx("label", { className: "af-form__group-label", htmlFor: isLabelContainerLinkedToInput ? id : undefined, children: label }) }), _jsxs(FieldForm, { className: classNameContainerInput, message: message, messageType: messageType, forceDisplayMessage: forceDisplayMessage, children: [children, _jsx(FieldError, { message: message, messageType: messageType })] })] }));
12
+ };
@@ -0,0 +1,7 @@
1
+ import { MessageTypes } from "./MessageTypes";
2
+ type FieldProps = {
3
+ message?: string | null;
4
+ messageType?: MessageTypes;
5
+ };
6
+ export declare const FieldError: ({ message, messageType, }: FieldProps) => "" | import("react/jsx-runtime").JSX.Element | null;
7
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getComponentClassName } from "./getComponentClassName";
3
+ import { MessageTypes } from "./MessageTypes";
4
+ const DEFAULT_CLASS_NAME = "af-form__message";
5
+ export const FieldError = ({ message = null, messageType = MessageTypes.error, }) => {
6
+ const className = getComponentClassName(DEFAULT_CLASS_NAME, messageType, DEFAULT_CLASS_NAME);
7
+ return (message && (_jsxs("small", { className: className, children: [_jsx("span", { className: "glyphicon glyphicon-exclamation-sign" }), _jsx("span", { className: `af-form__${messageType}-text`, children: message })] })));
8
+ };
@@ -0,0 +1,59 @@
1
+ import { BaseSyntheticEvent, ReactElement, ReactNode } from "react";
2
+ import { MessageTypes } from "./MessageTypes";
3
+ import { FormClassManager } from "./FormClassManager";
4
+ type Tmessage = {
5
+ message: string | null;
6
+ messageType: MessageTypes;
7
+ };
8
+ declare const INITIAL_STATE: {
9
+ hasLostFocusOnce: boolean;
10
+ hasFocus: boolean;
11
+ hasChange: boolean;
12
+ memory: Tmessage;
13
+ };
14
+ type EventFunction = {
15
+ onChange?: Function;
16
+ onBlur?: Function;
17
+ onFocus?: Function;
18
+ };
19
+ type FieldFormProps = Tmessage & {
20
+ className?: string;
21
+ classModifier?: string;
22
+ forceDisplayMessage?: boolean;
23
+ children: ReactNode;
24
+ setStateMemoryFn?: typeof setStateMemory;
25
+ onChangeByStateFn?: typeof onChangeByState;
26
+ setStateOnBlurFn?: typeof setStateOnBlur;
27
+ setStateOnFocusFn?: typeof setStateOnFocus;
28
+ initialState?: typeof INITIAL_STATE;
29
+ };
30
+ type SetState = (prevState: typeof INITIAL_STATE) => typeof INITIAL_STATE;
31
+ export declare const setStateMemory: ({ message, messageType }: Tmessage) => SetState;
32
+ export declare const setStateHasChange: () => SetState;
33
+ export declare const onChangeByState: (setState: Function, stateHasChange: boolean, setStateHasChangeFn?: () => SetState) => any;
34
+ export declare const setStateOnBlur: () => SetState;
35
+ export declare const setStateOnFocus: ({ message, messageType }: Tmessage) => SetState;
36
+ type GetMessageInfoProps = typeof INITIAL_STATE & Required<Pick<FieldFormProps, "message" | "messageType" | "forceDisplayMessage">>;
37
+ export declare const getMessageInfo: ({ forceDisplayMessage, hasLostFocusOnce, hasFocus, memory, hasChange, message, messageType, }: GetMessageInfoProps) => Pick<FieldFormProps, "message" | "messageType">;
38
+ type EventWrapperProps = {
39
+ props: EventFunction;
40
+ } & Pick<AddPropsClone, "wrapper">;
41
+ export declare const eventWrapper: ({ wrapper, props }: EventWrapperProps) => {
42
+ onChange: (ev: BaseSyntheticEvent) => void;
43
+ onBlur: (ev: BaseSyntheticEvent) => void;
44
+ onFocus: (ev: BaseSyntheticEvent) => void;
45
+ };
46
+ type AddPropsClone = Omit<RenderChildrenProps, "children"> & {
47
+ child: ReactElement;
48
+ classModifier: string;
49
+ name: string;
50
+ getMessageClassModifierFn?: typeof FormClassManager.getMessageClassModifier;
51
+ eventWrapperFn?: Function;
52
+ };
53
+ export declare const addPropsClone: ({ message, messageType, classModifier, wrapper, child, name, getMessageClassModifierFn, eventWrapperFn, ...rest }: AddPropsClone) => any;
54
+ type RenderChildrenProps = {
55
+ wrapper: EventFunction;
56
+ } & Partial<Pick<FieldFormProps, "children">> & ReturnType<typeof getMessageInfo>;
57
+ export declare const renderedChildren: ({ children, wrapper, message, messageType, }: RenderChildrenProps) => ReactNode;
58
+ export declare const FieldForm: ({ children, message, messageType, className, classModifier, forceDisplayMessage, setStateMemoryFn, onChangeByStateFn, setStateOnBlurFn, setStateOnFocusFn, initialState, }: FieldFormProps) => import("react/jsx-runtime").JSX.Element;
59
+ export {};
@@ -0,0 +1,151 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cloneElement, Children, useState, useRef, useEffect, isValidElement, } from "react";
3
+ import { getComponentClassName } from "./getComponentClassName";
4
+ import { MessageTypes } from "./MessageTypes";
5
+ import { FormClassManager } from "./FormClassManager";
6
+ const defaultClassName = "md-10";
7
+ const INITIAL_STATE = {
8
+ hasLostFocusOnce: false,
9
+ hasFocus: false,
10
+ hasChange: false,
11
+ memory: { message: "", messageType: MessageTypes.error },
12
+ };
13
+ export const setStateMemory = ({ message = null, messageType = MessageTypes.error }) => (prevState) => ({
14
+ ...prevState,
15
+ memory: {
16
+ message,
17
+ messageType,
18
+ },
19
+ });
20
+ export const setStateHasChange = () => (prevState) => ({
21
+ ...prevState,
22
+ hasChange: true,
23
+ });
24
+ export const onChangeByState = (setState, stateHasChange, setStateHasChangeFn = setStateHasChange) => !stateHasChange && setState(setStateHasChangeFn());
25
+ export const setStateOnBlur = () => (prevState) => ({
26
+ ...prevState,
27
+ hasLostFocusOnce: true,
28
+ hasFocus: false,
29
+ });
30
+ export const setStateOnFocus = ({ message = null, messageType = MessageTypes.error }) => (prevState) => ({
31
+ ...prevState,
32
+ hasFocus: true,
33
+ memory: { message, messageType },
34
+ });
35
+ export const getMessageInfo = ({ forceDisplayMessage, hasLostFocusOnce, hasFocus, memory, hasChange, message, messageType, }) => {
36
+ const isDisplayMessage = hasLostFocusOnce || forceDisplayMessage || (hasChange && !hasFocus);
37
+ if (!isDisplayMessage) {
38
+ return {
39
+ message: "",
40
+ messageType: "",
41
+ };
42
+ }
43
+ return hasFocus
44
+ ? memory
45
+ : {
46
+ message,
47
+ messageType,
48
+ };
49
+ };
50
+ export const eventWrapper = ({ wrapper, props }) => ({
51
+ onChange: (ev) => {
52
+ wrapper?.onChange?.(ev);
53
+ if (props.onChange) {
54
+ props.onChange(ev);
55
+ }
56
+ },
57
+ onBlur: (ev) => {
58
+ wrapper?.onBlur?.(ev);
59
+ if (props.onBlur) {
60
+ props.onBlur(ev);
61
+ }
62
+ },
63
+ onFocus: (ev) => {
64
+ wrapper?.onFocus?.(ev);
65
+ if (props.onFocus) {
66
+ props.onFocus(ev);
67
+ }
68
+ },
69
+ });
70
+ export const addPropsClone = ({ message, messageType, classModifier, wrapper, child, name, getMessageClassModifierFn = FormClassManager.getMessageClassModifier, eventWrapperFn = eventWrapper, ...rest }) => {
71
+ const messageClassModifier = getMessageClassModifierFn(messageType, message, classModifier);
72
+ const type = { ...rest };
73
+ const displayName = type?.displayName ?? name;
74
+ switch (displayName) {
75
+ case "HelpMessage":
76
+ return { isVisible: !message };
77
+ case "FieldError":
78
+ return { message };
79
+ case "FieldInput":
80
+ return { classModifier: messageClassModifier };
81
+ case "EnhancedInputRadio":
82
+ case "EnhancedInputCheckbox":
83
+ return {
84
+ ...eventWrapperFn({ wrapper, props: child.props }),
85
+ classModifier: messageClassModifier,
86
+ };
87
+ case "EnhancedInput":
88
+ return {
89
+ ...eventWrapperFn({ wrapper, props: child.props }),
90
+ };
91
+ default:
92
+ return {};
93
+ }
94
+ };
95
+ export const renderedChildren = ({ children, wrapper, message, messageType, }) => Children.map(children, (child) => {
96
+ if (!isValidElement(child) || typeof child.type === "string") {
97
+ return child;
98
+ }
99
+ const props = {
100
+ ...child.props,
101
+ };
102
+ if (child.props.children) {
103
+ const subChildren = renderedChildren({
104
+ children: child.props.children,
105
+ wrapper,
106
+ message,
107
+ messageType,
108
+ });
109
+ if (subChildren !== null) {
110
+ props.children = subChildren;
111
+ }
112
+ }
113
+ return cloneElement(child, {
114
+ ...props,
115
+ ...addPropsClone({
116
+ ...child.type,
117
+ name: child.type.name,
118
+ message,
119
+ messageType,
120
+ classModifier: props.classModifier,
121
+ wrapper,
122
+ child,
123
+ }),
124
+ });
125
+ });
126
+ export const FieldForm = ({ children, message = null, messageType = MessageTypes.error, className = defaultClassName, classModifier = "", forceDisplayMessage = false, setStateMemoryFn = setStateMemory, onChangeByStateFn = onChangeByState, setStateOnBlurFn = setStateOnBlur, setStateOnFocusFn = setStateOnFocus, initialState = INITIAL_STATE, }) => {
127
+ const [state, setState] = useState(initialState);
128
+ const previousForceDisplayMessage = useRef(forceDisplayMessage);
129
+ useEffect(() => {
130
+ if (previousForceDisplayMessage.current !== forceDisplayMessage) {
131
+ setState(setStateMemoryFn({ message, messageType }));
132
+ }
133
+ }, [
134
+ forceDisplayMessage,
135
+ message,
136
+ messageType,
137
+ previousForceDisplayMessage,
138
+ setState,
139
+ setStateMemoryFn,
140
+ ]);
141
+ const onChange = () => onChangeByStateFn(setState, state?.hasChange);
142
+ const onBlur = () => setState(setStateOnBlurFn());
143
+ const onFocus = () => setState(setStateOnFocusFn({ message, messageType }));
144
+ const childrenCloned = renderedChildren({
145
+ children,
146
+ wrapper: { onFocus, onChange, onBlur },
147
+ ...getMessageInfo({ ...state, forceDisplayMessage, message, messageType }),
148
+ });
149
+ const subComponentClassName = getComponentClassName(className, classModifier, defaultClassName);
150
+ return _jsx("div", { className: subComponentClassName, children: childrenCloned });
151
+ };
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from "react";
2
+ type FieldProps = {
3
+ isVisible?: boolean;
4
+ className?: string;
5
+ classModifier?: string;
6
+ children?: ReactNode;
7
+ };
8
+ export declare const FieldInput: ({ children, className, classModifier, isVisible, }: FieldProps) => import("react/jsx-runtime").JSX.Element | null;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getComponentClassName } from "./getComponentClassName";
3
+ export const FieldInput = ({ children, className = "", classModifier = "", isVisible = true, }) => {
4
+ if (!isVisible) {
5
+ return null;
6
+ }
7
+ const newClassName = getComponentClassName(className, classModifier, "");
8
+ return _jsx("div", { className: newClassName, children: children });
9
+ };
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from "react";
2
+ export declare const FormClassManager: {
3
+ getFieldInputClassModifier: (modifier: string, disabled: boolean) => string;
4
+ getInputClassModifier: (modifier: string, children: ReactNode) => string;
5
+ getModifier: (messageType: string) => string;
6
+ getMessageClassModifier: (messageType: "error" | "success" | "warning", message?: string | null, modifier?: string) => string;
7
+ };
@@ -0,0 +1,33 @@
1
+ import { MessageTypes } from "./MessageTypes";
2
+ const getFieldInputClassModifier = (modifier, disabled) => disabled ? `${modifier} disabled` : modifier;
3
+ const getInputClassModifier = (modifier, children) => children ? `${modifier} hasinfobulle` : modifier;
4
+ const getModifier = (messageType) => {
5
+ let modifier = "error";
6
+ switch (messageType) {
7
+ case MessageTypes.success:
8
+ modifier = "success";
9
+ break;
10
+ case MessageTypes.warning:
11
+ modifier = "warning";
12
+ break;
13
+ default:
14
+ break;
15
+ }
16
+ return modifier;
17
+ };
18
+ const getMessageClassModifier = (messageType, message, modifier) => {
19
+ if (!message) {
20
+ return "";
21
+ }
22
+ const messageModifier = getModifier(messageType);
23
+ if (!messageModifier) {
24
+ return "";
25
+ }
26
+ return modifier ? `${modifier} ${messageModifier}` : messageModifier;
27
+ };
28
+ export const FormClassManager = {
29
+ getFieldInputClassModifier,
30
+ getInputClassModifier,
31
+ getModifier,
32
+ getMessageClassModifier,
33
+ };
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from "react";
2
+ type HelpProps = {
3
+ message?: ReactNode;
4
+ isVisible?: boolean;
5
+ };
6
+ export declare const HelpMessage: ({ message, isVisible }: HelpProps) => false | import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,2 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const HelpMessage = ({ message, isVisible = true }) => isVisible && _jsx("small", { className: "af-form__help", children: message });
@@ -0,0 +1,8 @@
1
+ export declare const isDisabled: (option: {
2
+ disabled?: boolean;
3
+ }, disabled: boolean) => boolean;
4
+ export declare const InputList: {
5
+ isDisabled: (option: {
6
+ disabled?: boolean;
7
+ }, disabled: boolean) => boolean;
8
+ };
@@ -0,0 +1,4 @@
1
+ export const isDisabled = (option, disabled) => (option.disabled !== undefined ? option.disabled : disabled);
2
+ export const InputList = {
3
+ isDisabled,
4
+ };
@@ -0,0 +1,5 @@
1
+ export declare enum MessageTypes {
2
+ error = "error",
3
+ success = "success",
4
+ warning = "warning"
5
+ }
@@ -0,0 +1,6 @@
1
+ export var MessageTypes;
2
+ (function (MessageTypes) {
3
+ MessageTypes["error"] = "error";
4
+ MessageTypes["success"] = "success";
5
+ MessageTypes["warning"] = "warning";
6
+ })(MessageTypes || (MessageTypes = {}));
@@ -0,0 +1 @@
1
+ export declare const getComponentClassName: (className?: string, classModifier?: string, defaultClassName?: string) => string;
@@ -0,0 +1,27 @@
1
+ import classNames from "classnames";
2
+ const getLastClassName = (classNameToUse) => {
3
+ if (!classNameToUse) {
4
+ return null;
5
+ }
6
+ return classNameToUse.split(" ").filter(Boolean).at(-1);
7
+ };
8
+ const listClassModifier = (classModifier) => {
9
+ if (!classModifier) {
10
+ return [];
11
+ }
12
+ return classModifier.split(" ");
13
+ };
14
+ export const getComponentClassName = (className, classModifier, defaultClassName) => {
15
+ const classNameToUse = className || defaultClassName;
16
+ if (!classNameToUse) {
17
+ return "";
18
+ }
19
+ const classWithoutModifier = getLastClassName(classNameToUse);
20
+ const modifiers = listClassModifier(classModifier);
21
+ const modifiersObject = modifiers
22
+ .filter((it) => /\S/.test(it))
23
+ .map((it) => {
24
+ return `${classWithoutModifier}--${it}`;
25
+ });
26
+ return classNames(classNameToUse, modifiersObject);
27
+ };
@@ -0,0 +1,2 @@
1
+ import type { Option } from ".";
2
+ export declare const getFirstId: (options: Option[]) => string | undefined;
@@ -0,0 +1 @@
1
+ export const getFirstId = (options) => !options || options.length === 0 ? "" : options[0].id;
@@ -0,0 +1 @@
1
+ export declare function getOptionClassName(className: string, classModifier: string, defaultClassName: string, disabled: boolean): string;
@@ -0,0 +1,10 @@
1
+ import { getComponentClassName } from "./getComponentClassName";
2
+ export function getOptionClassName(className, classModifier, defaultClassName, disabled) {
3
+ const classModifierWithDisabled = [
4
+ classModifier,
5
+ disabled ? "disabled" : undefined,
6
+ ]
7
+ .filter(Boolean)
8
+ .join(" ");
9
+ return getComponentClassName(className, classModifierWithDisabled, defaultClassName);
10
+ }
@@ -0,0 +1,31 @@
1
+ import { ReactNode } from "react";
2
+ export { Field } from "./Field";
3
+ export { FieldInput } from "./FieldInput";
4
+ export { MessageTypes } from "./MessageTypes";
5
+ export { FieldError } from "./FieldError";
6
+ export { FormClassManager } from "./FormClassManager";
7
+ export { FieldForm } from "./FieldForm";
8
+ export { HelpMessage } from "./HelpMessage";
9
+ export { InputList } from "./InputList";
10
+ export { useInputClassModifier } from "./useInputClassModifier";
11
+ export { getOptionClassName } from "./getOptionClassName";
12
+ export { useOptionsWithId } from "./useOptionsWithId";
13
+ export { getComponentClassName } from "./getComponentClassName";
14
+ export { getFirstId } from "./getFirstId";
15
+ export type Option = {
16
+ id?: string;
17
+ icon?: ReactNode;
18
+ label: ReactNode;
19
+ description?: ReactNode;
20
+ value: string;
21
+ disabled?: boolean;
22
+ } & React.InputHTMLAttributes<HTMLInputElement>;
23
+ type BaseFormEvent = {
24
+ id: string;
25
+ name: string;
26
+ };
27
+ export type FormEvent = (BaseFormEvent & {
28
+ value: string;
29
+ }) | (BaseFormEvent & {
30
+ values: string[];
31
+ });
@@ -0,0 +1,13 @@
1
+ export { Field } from "./Field";
2
+ export { FieldInput } from "./FieldInput";
3
+ export { MessageTypes } from "./MessageTypes";
4
+ export { FieldError } from "./FieldError";
5
+ export { FormClassManager } from "./FormClassManager";
6
+ export { FieldForm } from "./FieldForm";
7
+ export { HelpMessage } from "./HelpMessage";
8
+ export { InputList } from "./InputList";
9
+ export { useInputClassModifier } from "./useInputClassModifier";
10
+ export { getOptionClassName } from "./getOptionClassName";
11
+ export { useOptionsWithId } from "./useOptionsWithId";
12
+ export { getComponentClassName } from "./getComponentClassName";
13
+ export { getFirstId } from "./getFirstId";
@@ -0,0 +1,4 @@
1
+ export declare function useInputClassModifier(classModifier: string, disabled: boolean, hasChildren: boolean): {
2
+ inputClassModifier: string;
3
+ inputFieldClassModifier: string;
4
+ };
@@ -0,0 +1,12 @@
1
+ export function useInputClassModifier(classModifier, disabled, hasChildren) {
2
+ return {
3
+ inputClassModifier: [
4
+ classModifier ?? "",
5
+ hasChildren ? "hasinfobulle" : "",
6
+ ].join(" "),
7
+ inputFieldClassModifier: [
8
+ classModifier ?? "",
9
+ disabled ? "disabled" : "",
10
+ ].join(" "),
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { Option } from ".";
2
+ export declare function useOptionsWithId(options?: Option[], id?: string): Option[];
@@ -0,0 +1,13 @@
1
+ import { useId } from "react";
2
+ export function useOptionsWithId(options, id) {
3
+ const reactId = useId();
4
+ if (!options) {
5
+ return [];
6
+ }
7
+ return options.map((option, index) => {
8
+ if (option.id) {
9
+ return option;
10
+ }
11
+ return { ...option, id: `${id ?? reactId}_${index}` };
12
+ });
13
+ }
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from "react";
2
+ type IconBgProps = {
3
+ isDisabled?: boolean;
4
+ className?: string;
5
+ classModifier?: string;
6
+ children: ReactNode;
7
+ };
8
+ export declare const IconBg: ({ children, className, classModifier, isDisabled, }: IconBgProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { getComponentClassName } from "../utilities";
4
+ export const IconBg = ({ children, className, classModifier, isDisabled = false, }) => {
5
+ const componentClassName = useMemo(() => {
6
+ let newClassModifier = classModifier;
7
+ if (isDisabled) {
8
+ newClassModifier += " disabled";
9
+ }
10
+ return getComponentClassName(className, newClassModifier, "af-icon-bg");
11
+ }, [classModifier, isDisabled, className]);
12
+ return _jsx("div", { className: componentClassName, children: children });
13
+ };
@@ -0,0 +1,2 @@
1
+ import "@axa-fr/design-system-look-and-feel-css/dist/IconBg/IconBg.scss";
2
+ export { IconBg } from "./IconBg";
@@ -0,0 +1,2 @@
1
+ import "@axa-fr/design-system-look-and-feel-css/dist/IconBg/IconBg.scss";
2
+ export { IconBg } from "./IconBg";
@@ -0,0 +1,4 @@
1
+ export declare const DynamicIcon: ({ iconName, className, }: {
2
+ iconName: string;
3
+ className?: string;
4
+ }) => string | import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import facebook from "../../assets/svg/facebook.svg";
3
+ import linkedin from "../../assets/svg/linkedin.svg";
4
+ import twitterx from "../../assets/svg/twitterx.svg";
5
+ import youtube from "../../assets/svg/youtube.svg";
6
+ import { Svg } from "../../Svg";
7
+ export const DynamicIcon = ({ iconName, className, }) => {
8
+ switch (iconName) {
9
+ case "facebook":
10
+ return _jsx(Svg, { src: facebook, className: className });
11
+ case "twitter":
12
+ return _jsx(Svg, { src: twitterx, className: className });
13
+ case "youtube":
14
+ return _jsx(Svg, { src: youtube, className: className });
15
+ case "linkedin":
16
+ return _jsx(Svg, { src: linkedin, className: className });
17
+ default:
18
+ return iconName;
19
+ }
20
+ };
@@ -0,0 +1,14 @@
1
+ import "@axa-fr/design-system-look-and-feel-css/dist/common/reboot.scss";
2
+ import "@axa-fr/design-system-look-and-feel-css/dist/Layout/Footer/Footer.scss";
3
+ import { FC } from "react";
4
+ import { SocialMedia } from "./MenuIcons";
5
+ import { Link } from "./MenuLink";
6
+ type Props = {
7
+ links: Link[];
8
+ socialMedias?: SocialMedia[];
9
+ copyright: string;
10
+ expandLinkText: string;
11
+ id?: string;
12
+ };
13
+ export declare const Footer: FC<Props>;
14
+ export {};
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import "@axa-fr/design-system-look-and-feel-css/dist/common/reboot.scss";
3
+ import "@axa-fr/design-system-look-and-feel-css/dist/Layout/Footer/Footer.scss";
4
+ import expandMore from "@material-symbols/svg-400/outlined/keyboard_arrow_down.svg";
5
+ import classNames from "classnames";
6
+ import { useCallback, useState } from "react";
7
+ import { MenuIcons } from "./MenuIcons";
8
+ import { MenuLink } from "./MenuLink";
9
+ import { Svg } from "../../Svg";
10
+ export const Footer = ({ links, socialMedias = [], copyright, expandLinkText, id, }) => {
11
+ const [isAboutOpen, setIsAboutOpen] = useState(false);
12
+ const handleClick = useCallback(() => {
13
+ setIsAboutOpen((isOpen) => !isOpen);
14
+ }, []);
15
+ return (_jsxs("footer", { id: id, className: "af-footer", children: [_jsxs("div", { className: "af-footer__footerTop", children: [_jsxs("nav", { className: "af-footer__menuTop", "aria-label": expandLinkText, children: [_jsxs("button", { type: "button", onClick: handleClick, className: "af-footer__menuAboutTrigger", children: [_jsx("span", { className: "af-footer__menuAboutTriggerText", children: expandLinkText }), _jsx(Svg, { src: expandMore, className: classNames("af-footer__icon", "af-footer__iconTrigger", isAboutOpen && "af-footer__iconTrigger--display") })] }), _jsx(MenuLink, { links: links, isAboutOpen: isAboutOpen })] }), _jsx(MenuIcons, { socialMedias: socialMedias })] }), _jsx("div", { className: "af-footer__footerBottom", children: _jsx("div", { className: "af-footer__footerBottomWidth", children: _jsx("span", { className: "af-footer__textCopyright", children: copyright }) }) })] }));
16
+ };
@@ -0,0 +1,9 @@
1
+ export type SocialMedia = {
2
+ icon: "facebook" | "twitter" | "youtube" | "linkedin";
3
+ link: string;
4
+ };
5
+ type MenuIconsProps = {
6
+ socialMedias: SocialMedia[];
7
+ };
8
+ export declare const MenuIcons: ({ socialMedias }: MenuIconsProps) => import("react/jsx-runtime").JSX.Element | null;
9
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DynamicIcon } from "./DynamicIcons";
3
+ export const MenuIcons = ({ socialMedias }) => {
4
+ if (socialMedias.length === 0) {
5
+ return null;
6
+ }
7
+ return (_jsx("nav", { className: "af-footer__footerMenuIcons", children: socialMedias.map((socialItem) => (_jsx("a", { "aria-label": `social media ${socialItem.icon}`, className: "af-footer__menuIconLinks", href: socialItem.link, target: "_blank", rel: "noopener noreferrer", children: _jsx(DynamicIcon, { iconName: socialItem.icon }) }, socialItem.icon))) }));
8
+ };
@@ -0,0 +1,11 @@
1
+ export type Link = {
2
+ link: string;
3
+ text: string;
4
+ openInCurrentTab?: boolean;
5
+ };
6
+ type MenuLinkProps = {
7
+ links: Link[];
8
+ isAboutOpen?: boolean;
9
+ };
10
+ export declare const MenuLink: ({ links, isAboutOpen }: MenuLinkProps) => import("react/jsx-runtime").JSX.Element | null;
11
+ export {};