mautourco-components 0.2.4 → 0.2.7

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 (297) hide show
  1. package/README.md +190 -190
  2. package/dist/components/atoms/Avatar/Avatar.d.ts +14 -14
  3. package/dist/components/atoms/Avatar/Avatar.js +31 -31
  4. package/dist/components/atoms/Button/Button.css +320 -320
  5. package/dist/components/atoms/Button/Button.d.ts +27 -27
  6. package/dist/components/atoms/Button/Button.js +35 -35
  7. package/dist/components/atoms/Checkbox/Checkbox.d.ts +13 -13
  8. package/dist/components/atoms/Checkbox/Checkbox.js +39 -39
  9. package/dist/components/atoms/Icon/Icon.d.ts +10 -10
  10. package/dist/components/atoms/Icon/Icon.js +123 -123
  11. package/dist/components/atoms/Icon/icons/ArrivalIcon.d.ts +8 -8
  12. package/dist/components/atoms/Icon/icons/ArrivalIcon.js +31 -31
  13. package/dist/components/atoms/Icon/icons/BuildingIcon.d.ts +8 -8
  14. package/dist/components/atoms/Icon/icons/BuildingIcon.js +36 -36
  15. package/dist/components/atoms/Icon/icons/CalendarIcon.d.ts +12 -12
  16. package/dist/components/atoms/Icon/icons/CalendarIcon.js +41 -41
  17. package/dist/components/atoms/Icon/icons/CalendarOutlineIcon.d.ts +8 -8
  18. package/dist/components/atoms/Icon/icons/CalendarOutlineIcon.js +36 -36
  19. package/dist/components/atoms/Icon/icons/CarIcon.d.ts +8 -8
  20. package/dist/components/atoms/Icon/icons/CarIcon.js +30 -30
  21. package/dist/components/atoms/Icon/icons/Check.d.ts +8 -8
  22. package/dist/components/atoms/Icon/icons/Check.js +30 -30
  23. package/dist/components/atoms/Icon/icons/CheckCircleIcon.d.ts +8 -8
  24. package/dist/components/atoms/Icon/icons/CheckCircleIcon.js +30 -30
  25. package/dist/components/atoms/Icon/icons/Chevron.d.ts +9 -9
  26. package/dist/components/atoms/Icon/icons/Chevron.js +54 -54
  27. package/dist/components/atoms/Icon/icons/ChevronDownIcon.d.ts +8 -8
  28. package/dist/components/atoms/Icon/icons/ChevronDownIcon.js +30 -30
  29. package/dist/components/atoms/Icon/icons/Close.d.ts +8 -8
  30. package/dist/components/atoms/Icon/icons/Close.js +30 -30
  31. package/dist/components/atoms/Icon/icons/DeleteIcon.d.ts +8 -8
  32. package/dist/components/atoms/Icon/icons/DeleteIcon.js +30 -30
  33. package/dist/components/atoms/Icon/icons/DepartureIcon.d.ts +8 -8
  34. package/dist/components/atoms/Icon/icons/DepartureIcon.js +30 -30
  35. package/dist/components/atoms/Icon/icons/EyeIcon.d.ts +8 -8
  36. package/dist/components/atoms/Icon/icons/EyeIcon.js +30 -30
  37. package/dist/components/atoms/Icon/icons/FacebookIcon.d.ts +8 -8
  38. package/dist/components/atoms/Icon/icons/FacebookIcon.js +36 -36
  39. package/dist/components/atoms/Icon/icons/HomeIcon.d.ts +8 -8
  40. package/dist/components/atoms/Icon/icons/HomeIcon.js +25 -25
  41. package/dist/components/atoms/Icon/icons/InfoIcon.d.ts +8 -8
  42. package/dist/components/atoms/Icon/icons/InfoIcon.js +30 -30
  43. package/dist/components/atoms/Icon/icons/LinkedInIcon.d.ts +8 -8
  44. package/dist/components/atoms/Icon/icons/LinkedInIcon.js +36 -36
  45. package/dist/components/atoms/Icon/icons/MapPinIcon.d.ts +8 -8
  46. package/dist/components/atoms/Icon/icons/MapPinIcon.js +30 -30
  47. package/dist/components/atoms/Icon/icons/MautoucoLogo.d.ts +8 -8
  48. package/dist/components/atoms/Icon/icons/MautoucoLogo.js +37 -37
  49. package/dist/components/atoms/Icon/icons/MenuIcon.d.ts +8 -8
  50. package/dist/components/atoms/Icon/icons/MenuIcon.js +37 -37
  51. package/dist/components/atoms/Icon/icons/MinusIcon.d.ts +8 -8
  52. package/dist/components/atoms/Icon/icons/MinusIcon.js +25 -25
  53. package/dist/components/atoms/Icon/icons/MoreIcon.d.ts +8 -8
  54. package/dist/components/atoms/Icon/icons/MoreIcon.js +30 -30
  55. package/dist/components/atoms/Icon/icons/PlaneIcon.d.ts +8 -8
  56. package/dist/components/atoms/Icon/icons/PlaneIcon.js +36 -36
  57. package/dist/components/atoms/Icon/icons/PlusIcon.d.ts +8 -8
  58. package/dist/components/atoms/Icon/icons/PlusIcon.js +25 -25
  59. package/dist/components/atoms/Icon/icons/Search.d.ts +8 -8
  60. package/dist/components/atoms/Icon/icons/Search.js +30 -30
  61. package/dist/components/atoms/Icon/icons/Settings.d.ts +8 -8
  62. package/dist/components/atoms/Icon/icons/Settings.js +30 -30
  63. package/dist/components/atoms/Icon/icons/ShipIcon.d.ts +8 -8
  64. package/dist/components/atoms/Icon/icons/ShipIcon.js +36 -36
  65. package/dist/components/atoms/Icon/icons/StrollerIcon.d.ts +8 -8
  66. package/dist/components/atoms/Icon/icons/StrollerIcon.js +30 -30
  67. package/dist/components/atoms/Icon/icons/TwitterIcon.d.ts +8 -8
  68. package/dist/components/atoms/Icon/icons/TwitterIcon.js +36 -36
  69. package/dist/components/atoms/Icon/icons/User.d.ts +8 -8
  70. package/dist/components/atoms/Icon/icons/User.js +30 -30
  71. package/dist/components/atoms/Icon/icons/UserIcon.d.ts +12 -12
  72. package/dist/components/atoms/Icon/icons/UserIcon.js +41 -41
  73. package/dist/components/atoms/Icon/icons/Youtube.d.ts +8 -8
  74. package/dist/components/atoms/Icon/icons/Youtube.js +36 -36
  75. package/dist/components/atoms/Illustration/Illustration.d.ts +14 -14
  76. package/dist/components/atoms/Illustration/Illustration.js +33 -33
  77. package/dist/components/atoms/Illustration/illustrations.d.ts +51 -51
  78. package/dist/components/atoms/Illustration/illustrations.js +97 -97
  79. package/dist/components/atoms/Inputs/DropdownInput/DropdownInput.d.ts +12 -12
  80. package/dist/components/atoms/Inputs/DropdownInput/DropdownInput.js +53 -53
  81. package/dist/components/atoms/Inputs/Input/Input.d.ts +15 -15
  82. package/dist/components/atoms/Inputs/Input/Input.js +27 -27
  83. package/dist/components/atoms/Inputs/Textarea/Textarea.d.ts +14 -14
  84. package/dist/components/atoms/Inputs/Textarea/Textarea.js +15 -15
  85. package/dist/components/atoms/Link/Link.d.ts +44 -44
  86. package/dist/components/atoms/Link/Link.js +76 -76
  87. package/dist/components/atoms/RatingStar/RatingStar.d.ts +40 -40
  88. package/dist/components/atoms/RatingStar/RatingStar.js +54 -54
  89. package/dist/components/atoms/SegmentedButton/SegmentedButton.d.ts +27 -27
  90. package/dist/components/atoms/SegmentedButton/SegmentedButton.js +49 -49
  91. package/dist/components/atoms/SelectedValue/SelectedValue.d.ts +11 -11
  92. package/dist/components/atoms/SelectedValue/SelectedValue.js +29 -29
  93. package/dist/components/atoms/Slider/Slider.d.ts +52 -52
  94. package/dist/components/atoms/Slider/Slider.js +30 -30
  95. package/dist/components/atoms/Spinner/Spinner.d.ts +9 -9
  96. package/dist/components/atoms/Spinner/Spinner.js +38 -38
  97. package/dist/components/atoms/Spinner/variants/ButtonSpinner.d.ts +8 -8
  98. package/dist/components/atoms/Spinner/variants/ButtonSpinner.js +19 -19
  99. package/dist/components/atoms/Spinner/variants/LoadingSpinner.d.ts +7 -7
  100. package/dist/components/atoms/Spinner/variants/LoadingSpinner.js +7 -7
  101. package/dist/components/atoms/Tab/Tab.css +266 -266
  102. package/dist/components/atoms/Tab/Tab.d.ts +22 -22
  103. package/dist/components/atoms/Tab/Tab.js +54 -54
  104. package/dist/components/atoms/Typography/Typography.d.ts +24 -24
  105. package/dist/components/atoms/Typography/Typography.js +100 -100
  106. package/dist/components/molecules/Calendar/CalendarInput.d.ts +34 -34
  107. package/dist/components/molecules/Calendar/CalendarInput.js +49 -49
  108. package/dist/components/molecules/Calendar/DateTime.d.ts +25 -25
  109. package/dist/components/molecules/Calendar/DateTime.js +106 -106
  110. package/dist/components/molecules/Calendar/TimePicker.d.ts +16 -16
  111. package/dist/components/molecules/Calendar/TimePicker.js +91 -91
  112. package/dist/components/molecules/LocationDropdown/LocationDropdown.d.ts +34 -34
  113. package/dist/components/molecules/LocationDropdown/LocationDropdown.js +120 -120
  114. package/dist/components/molecules/LocationDropdown/index.d.ts +2 -2
  115. package/dist/components/molecules/LocationDropdown/index.js +1 -1
  116. package/dist/components/molecules/MultiSelectDropdown/MultiSelectDropdown.d.ts +29 -29
  117. package/dist/components/molecules/MultiSelectDropdown/MultiSelectDropdown.js +106 -106
  118. package/dist/components/molecules/RatingTab/RatingTab.d.ts +39 -39
  119. package/dist/components/molecules/RatingTab/RatingTab.js +41 -41
  120. package/dist/components/molecules/TabGroup/TabGroup.d.ts +17 -17
  121. package/dist/components/molecules/TabGroup/TabGroup.js +30 -30
  122. package/dist/components/molecules/UserCard/UserCard.d.ts +20 -20
  123. package/dist/components/molecules/UserCard/UserCard.js +57 -57
  124. package/dist/components/organisms/CardContainer/CardContainer.d.ts +37 -37
  125. package/dist/components/organisms/CardContainer/CardContainer.js +27 -27
  126. package/dist/components/organisms/DateTimePicker/DateTimePicker.d.ts +15 -15
  127. package/dist/components/organisms/DateTimePicker/DateTimePicker.js +66 -66
  128. package/dist/components/organisms/Dialog/Dialog.d.ts +103 -103
  129. package/dist/components/organisms/Dialog/Dialog.js +162 -162
  130. package/dist/components/organisms/Footer/Footer.d.ts +38 -38
  131. package/dist/components/organisms/Footer/Footer.js +74 -74
  132. package/dist/components/organisms/PaxSelector/PaxSelector.d.ts +63 -63
  133. package/dist/components/organisms/PaxSelector/PaxSelector.js +402 -402
  134. package/dist/components/organisms/RoundTrip/RoundTrip.d.ts +54 -54
  135. package/dist/components/organisms/RoundTrip/RoundTrip.js +179 -179
  136. package/dist/components/organisms/RoundTrip/index.d.ts +2 -2
  137. package/dist/components/organisms/RoundTrip/index.js +1 -1
  138. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.d.ts +35 -35
  139. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.js +192 -192
  140. package/dist/components/organisms/SearchBarTransfer/index.d.ts +2 -2
  141. package/dist/components/organisms/SearchBarTransfer/index.js +1 -1
  142. package/dist/components/organisms/TopNavigation/DesktopNav.d.ts +33 -33
  143. package/dist/components/organisms/TopNavigation/DesktopNav.js +32 -26
  144. package/dist/components/organisms/TopNavigation/MobileNav.d.ts +32 -32
  145. package/dist/components/organisms/TopNavigation/MobileNav.js +45 -45
  146. package/dist/components/organisms/TopNavigation/TopNavigation.d.ts +33 -33
  147. package/dist/components/organisms/TopNavigation/TopNavigation.js +20 -20
  148. package/dist/components/organisms/TransferLine/TransferLine.d.ts +53 -53
  149. package/dist/components/organisms/TransferLine/TransferLine.js +179 -179
  150. package/dist/components/ui/button.d.ts +10 -10
  151. package/dist/components/ui/button.js +56 -56
  152. package/dist/components/ui/calendar.d.ts +8 -8
  153. package/dist/components/ui/calendar.js +87 -87
  154. package/dist/components/ui/popover.d.ts +7 -7
  155. package/dist/components/ui/popover.js +42 -42
  156. package/dist/hooks/useMobile.d.ts +5 -5
  157. package/dist/hooks/useMobile.js +26 -26
  158. package/dist/index.d.ts +49 -49
  159. package/dist/index.js +46 -46
  160. package/dist/lib/utils.d.ts +7 -7
  161. package/dist/lib/utils.js +13 -13
  162. package/dist/styles/components/avatar.css +122 -122
  163. package/dist/styles/components/calendar.css +140 -140
  164. package/dist/styles/components/checkbox.css +206 -206
  165. package/dist/styles/components/dropdown.css +269 -269
  166. package/dist/styles/components/forms.css +209 -209
  167. package/dist/styles/components/illustration.css +123 -123
  168. package/dist/styles/components/molecule/calendarInput.css +133 -133
  169. package/dist/styles/components/molecule/dateTime.css +126 -126
  170. package/dist/styles/components/molecule/location-dropdown.css +132 -132
  171. package/dist/styles/components/molecule/timePicker.css +122 -122
  172. package/dist/styles/components/multiselect-dropdown.css +286 -286
  173. package/dist/styles/components/organism/card-container.css +148 -148
  174. package/dist/styles/components/organism/dialog.css +168 -168
  175. package/dist/styles/components/organism/footer.css +119 -119
  176. package/dist/styles/components/organism/pax-selector.css +617 -617
  177. package/dist/styles/components/organism/round-trip.css +139 -139
  178. package/dist/styles/components/organism/search-bar-transfer.css +158 -161
  179. package/dist/styles/components/organism/topnavigation.css +143 -143
  180. package/dist/styles/components/organism/transfer-line.css +138 -138
  181. package/dist/styles/components/rating-star.css +145 -145
  182. package/dist/styles/components/rating-tab.css +179 -179
  183. package/dist/styles/components/scrollbar.css +155 -155
  184. package/dist/styles/components/segmented-button.css +214 -214
  185. package/dist/styles/components/selected-value.css +175 -175
  186. package/dist/styles/components/slider.css +182 -182
  187. package/dist/styles/components/typography.css +245 -245
  188. package/dist/styles/tokens/tokens.css +119 -119
  189. package/dist/styles/tokens/tokens.d.ts +3108 -3108
  190. package/dist/styles/tokens/tokens.js +2652 -2652
  191. package/package.json +103 -103
  192. package/src/components/atoms/Avatar/Avatar.tsx +60 -60
  193. package/src/components/atoms/Button/Button.css +200 -200
  194. package/src/components/atoms/Button/Button.tsx +82 -82
  195. package/src/components/atoms/Checkbox/Checkbox.tsx +83 -83
  196. package/src/components/atoms/Icon/Icon.tsx +163 -163
  197. package/src/components/atoms/Icon/icons/ArrivalIcon.tsx +52 -52
  198. package/src/components/atoms/Icon/icons/BuildingIcon.tsx +50 -50
  199. package/src/components/atoms/Icon/icons/CalendarIcon.tsx +63 -63
  200. package/src/components/atoms/Icon/icons/CalendarOutlineIcon.tsx +50 -50
  201. package/src/components/atoms/Icon/icons/CarIcon.tsx +44 -44
  202. package/src/components/atoms/Icon/icons/Check.tsx +36 -36
  203. package/src/components/atoms/Icon/icons/CheckCircleIcon.tsx +48 -48
  204. package/src/components/atoms/Icon/icons/Chevron.tsx +73 -73
  205. package/src/components/atoms/Icon/icons/ChevronDownIcon.tsx +46 -46
  206. package/src/components/atoms/Icon/icons/Close.tsx +39 -39
  207. package/src/components/atoms/Icon/icons/DeleteIcon.tsx +44 -44
  208. package/src/components/atoms/Icon/icons/DepartureIcon.tsx +50 -50
  209. package/src/components/atoms/Icon/icons/EyeIcon.tsx +44 -44
  210. package/src/components/atoms/Icon/icons/FacebookIcon.tsx +50 -50
  211. package/src/components/atoms/Icon/icons/HomeIcon.tsx +52 -52
  212. package/src/components/atoms/Icon/icons/InfoIcon.tsx +44 -44
  213. package/src/components/atoms/Icon/icons/LinkedInIcon.tsx +50 -50
  214. package/src/components/atoms/Icon/icons/MapPinIcon.tsx +44 -44
  215. package/src/components/atoms/Icon/icons/MautoucoLogo.tsx +93 -93
  216. package/src/components/atoms/Icon/icons/MenuIcon.tsx +49 -49
  217. package/src/components/atoms/Icon/icons/MinusIcon.tsx +45 -45
  218. package/src/components/atoms/Icon/icons/MoreIcon.tsx +44 -44
  219. package/src/components/atoms/Icon/icons/PlaneIcon.tsx +50 -50
  220. package/src/components/atoms/Icon/icons/PlusIcon.tsx +45 -45
  221. package/src/components/atoms/Icon/icons/Search.tsx +37 -37
  222. package/src/components/atoms/Icon/icons/Settings.tsx +38 -38
  223. package/src/components/atoms/Icon/icons/ShipIcon.tsx +50 -50
  224. package/src/components/atoms/Icon/icons/StrollerIcon.tsx +44 -44
  225. package/src/components/atoms/Icon/icons/TwitterIcon.tsx +50 -50
  226. package/src/components/atoms/Icon/icons/User.tsx +37 -37
  227. package/src/components/atoms/Icon/icons/UserIcon.tsx +63 -63
  228. package/src/components/atoms/Icon/icons/Youtube.tsx +50 -50
  229. package/src/components/atoms/Illustration/Illustration.tsx +28 -28
  230. package/src/components/atoms/Illustration/illustrations.ts +116 -116
  231. package/src/components/atoms/Inputs/DropdownInput/DropdownInput.tsx +96 -96
  232. package/src/components/atoms/Inputs/Textarea/Textarea.tsx +51 -51
  233. package/src/components/atoms/Link/Link.tsx +168 -168
  234. package/src/components/atoms/RatingStar/RatingStar.tsx +114 -114
  235. package/src/components/atoms/SegmentedButton/SegmentedButton.tsx +94 -94
  236. package/src/components/atoms/SelectedValue/SelectedValue.tsx +59 -59
  237. package/src/components/atoms/Slider/Slider.tsx +95 -95
  238. package/src/components/atoms/Spinner/Spinner.tsx +56 -56
  239. package/src/components/atoms/Spinner/variants/ButtonSpinner.tsx +37 -37
  240. package/src/components/atoms/Spinner/variants/LoadingSpinner.tsx +22 -22
  241. package/src/components/atoms/Tab/Tab.css +147 -147
  242. package/src/components/atoms/Tab/Tab.tsx +96 -96
  243. package/src/components/atoms/Typography/Typography.tsx +153 -153
  244. package/src/components/molecules/Calendar/CalendarInput.tsx +135 -135
  245. package/src/components/molecules/Calendar/DateTime.tsx +172 -172
  246. package/src/components/molecules/Calendar/TimePicker.tsx +174 -174
  247. package/src/components/molecules/LocationDropdown/LocationDropdown.tsx +234 -234
  248. package/src/components/molecules/LocationDropdown/index.ts +2 -2
  249. package/src/components/molecules/RatingTab/RatingTab.tsx +96 -96
  250. package/src/components/molecules/TabGroup/TabGroup.tsx +60 -60
  251. package/src/components/molecules/UserCard/UserCard.stories.tsx +36 -36
  252. package/src/components/molecules/UserCard/UserCard.tsx +173 -173
  253. package/src/components/organisms/CardContainer/CardContainer.tsx +66 -66
  254. package/src/components/organisms/DateTimePicker/DateTimePicker.tsx +110 -110
  255. package/src/components/organisms/Dialog/Dialog.tsx +352 -352
  256. package/src/components/organisms/Footer/Footer.tsx +290 -290
  257. package/src/components/organisms/PaxSelector/PaxSelector.tsx +979 -979
  258. package/src/components/organisms/RoundTrip/RoundTrip.tsx +335 -335
  259. package/src/components/organisms/RoundTrip/index.ts +2 -2
  260. package/src/components/organisms/SearchBarTransfer/SearchBarTransfer.tsx +388 -388
  261. package/src/components/organisms/SearchBarTransfer/index.ts +2 -2
  262. package/src/components/organisms/TopNavigation/DesktopNav.tsx +133 -122
  263. package/src/components/organisms/TopNavigation/MobileNav.tsx +212 -212
  264. package/src/components/organisms/TopNavigation/TopNavigation.tsx +45 -45
  265. package/src/components/organisms/TransferLine/TransferLine.tsx +369 -369
  266. package/src/components/ui/button.tsx +60 -60
  267. package/src/components/ui/calendar.tsx +246 -246
  268. package/src/components/ui/popover.tsx +46 -46
  269. package/src/styles/components/avatar.css +58 -58
  270. package/src/styles/components/calendar.css +85 -85
  271. package/src/styles/components/checkbox.css +130 -130
  272. package/src/styles/components/dropdown.css +214 -214
  273. package/src/styles/components/forms.css +147 -147
  274. package/src/styles/components/illustration.css +7 -7
  275. package/src/styles/components/molecule/calendarInput.css +156 -156
  276. package/src/styles/components/molecule/dateTime.css +14 -14
  277. package/src/styles/components/molecule/location-dropdown.css +204 -204
  278. package/src/styles/components/molecule/timePicker.css +78 -78
  279. package/src/styles/components/multiselect-dropdown.css +230 -230
  280. package/src/styles/components/organism/card-container.css +49 -49
  281. package/src/styles/components/organism/dialog.css +241 -241
  282. package/src/styles/components/organism/footer.css +113 -113
  283. package/src/styles/components/organism/pax-selector.css +702 -702
  284. package/src/styles/components/organism/round-trip.css +55 -55
  285. package/src/styles/components/organism/search-bar-transfer.css +128 -127
  286. package/src/styles/components/organism/topnavigation.css +161 -161
  287. package/src/styles/components/organism/transfer-line.css +86 -86
  288. package/src/styles/components/rating-star.css +39 -39
  289. package/src/styles/components/rating-tab.css +83 -83
  290. package/src/styles/components/scrollbar.css +63 -63
  291. package/src/styles/components/segmented-button.css +134 -134
  292. package/src/styles/components/selected-value.css +80 -80
  293. package/src/styles/components/slider.css +86 -86
  294. package/src/styles/components/typography.css +251 -251
  295. package/src/styles/fonts.css +50 -0
  296. package/src/styles/tokens/tokens.css +119 -119
  297. package/src/styles/tokens/tokens.js +12 -6
@@ -1,290 +1,290 @@
1
- import React, { useState } from "react";
2
- import { Text } from "../../atoms/Typography/Typography";
3
- import { Link } from "../../atoms/Link/Link";
4
- import Icon from "../../atoms/Icon/Icon";
5
-
6
- type FooterLink = {
7
- label: string;
8
- href?: string;
9
- onClick?: () => void;
10
- };
11
-
12
- type FooterColumn = {
13
- id: string;
14
- title: string;
15
- links: FooterLink[];
16
- };
17
-
18
- type SocialLink = {
19
- id: string;
20
- icon: React.ReactNode;
21
- label: string;
22
- href: string;
23
- };
24
-
25
- type ContactBlock = {
26
- title: string;
27
- addressLines: string[];
28
- phone?: string;
29
- fax?: string;
30
- email?: string;
31
- };
32
-
33
- export interface FooterProps {
34
- logo?: React.ReactNode; // SVG or img already styled
35
- columns?: FooterColumn[];
36
- contact?: ContactBlock;
37
- socials?: SocialLink[];
38
- className?: string;
39
- homeUrl?: string;
40
- onLinkClick?: (link: { label: string; route: string }) => void;
41
- }
42
-
43
- export const Footer: React.FC<FooterProps> = ({
44
- logo,
45
- columns = defaultColumns,
46
- contact = defaultContact,
47
- socials = defaultSocials,
48
- className = "",
49
- homeUrl,
50
- onLinkClick,
51
- }) => {
52
- const [openSection, setOpenSection] = useState<string | null>(columns[0]?.id);
53
-
54
- const toggleSection = (id: string) => {
55
- setOpenSection((prev) => (prev === id ? null : id));
56
- };
57
-
58
- const year = new Date().getFullYear();
59
-
60
- return (
61
- <footer className="footer">
62
- <div className="footer__wrapper">
63
- <div className="footer__desktop">
64
- <div className="footer__top-row">
65
- <div className="footer__content-left">
66
- {columns.map((col) => (
67
- <div key={col.id} className="footer__column">
68
- <Text
69
- as="h4"
70
- className="footer__column-title"
71
- >
72
- {col.title}
73
- </Text>
74
- <div className="footer__column-links">
75
- {col.links.map((link) => (
76
- <Link
77
- key={link.label}
78
- href={link.href}
79
- onClick={link.onClick}
80
- theme="dark"
81
- className="text-xs no-underline hover:opacity-80"
82
- >
83
- {link.label}
84
- </Link>
85
- ))}
86
- </div>
87
- </div>
88
- ))}
89
-
90
- <div className="footer__contact">
91
- <Text
92
- as="h4"
93
- className="footer__column-title"
94
- >
95
- {contact.title}
96
- </Text>
97
- <div className="footer__contact-info">
98
- {contact.addressLines.map((line) => (
99
- <p key={line}>{line}</p>
100
- ))}
101
- {contact.phone && <p>Tel: {contact.phone}</p>}
102
- {contact.fax && <p>Fax: {contact.fax}</p>}
103
- {contact.email && (
104
- <Link
105
- href={`mailto:${contact.email}`}
106
- theme="dark"
107
- className="text-xs no-underline"
108
- >
109
- {contact.email}
110
- </Link>
111
- )}
112
- </div>
113
- </div>
114
-
115
- <div className="footer__socials">
116
- <Text
117
- as="h4"
118
- className="footer__column-title"
119
- >
120
- Socials
121
- </Text>
122
- <div className="footer__socials-icons">
123
- {socials.map((s) => (
124
- <a
125
- key={s.id}
126
- href={s.href}
127
- aria-label={s.label}
128
- className="footer__social-link"
129
- >
130
- {s.icon}
131
- </a>
132
- ))}
133
- </div>
134
- </div>
135
- </div>
136
-
137
- {logo && (
138
- <div className="footer__logo-section">
139
- <div className="footer__logo-container">
140
- <a
141
- href={homeUrl ?? "/"}
142
- onClick={(e) => {
143
- e.preventDefault();
144
- onLinkClick?.({ label: "Home", route: homeUrl ?? "/" });
145
- }}
146
- >
147
- {logo}
148
- </a>
149
- <Text
150
- as="p"
151
- className="footer__copyright"
152
- >
153
- © {year} Mautourco, All Rights Reserved
154
- </Text>
155
- </div>
156
- </div>
157
- )}
158
- </div>
159
-
160
- {!logo && (
161
- <Text as="p" className="footer__copyright-standalone">
162
- © {year} Mautourco, All Rights Reserved
163
- </Text>
164
- )}
165
- </div>
166
-
167
- <div className="footer__mobile">
168
- {columns.map((col) => (
169
- <div key={col.id} className="footer__mobile-section">
170
- <button
171
- type="button"
172
- onClick={() => toggleSection(col.id)}
173
- className="footer__mobile-section-button"
174
- >
175
- <span>{col.title}</span>
176
- <span
177
- className={`footer__mobile-section-icon ${
178
- openSection === col.id ? "footer__mobile-section-icon--rotated" : ""
179
- }`}
180
- >
181
- <Icon name="chevron-down" size="sm" color="white" />
182
- </span>
183
- </button>
184
- {openSection === col.id && (
185
- <div className="footer__mobile-section-content">
186
- {col.links.map((link) => (
187
- <Link
188
- key={link.label}
189
- href={link.href}
190
- onClick={link.onClick}
191
- theme="dark"
192
- className="text-xs no-underline"
193
- >
194
- {link.label}
195
- </Link>
196
- ))}
197
- </div>
198
- )}
199
- </div>
200
- ))}
201
-
202
- <div className="footer__mobile-contact">
203
- <Text
204
- as="h4"
205
- className="footer__mobile-contact-title"
206
- >
207
- {contact.title}
208
- </Text>
209
- <div className="footer__mobile-contact-info">
210
- {contact.addressLines.map((line) => (
211
- <p key={line}>{line}</p>
212
- ))}
213
- {contact.phone && <p>Tel: {contact.phone}</p>}
214
- {contact.fax && <p>Fax: {contact.fax}</p>}
215
- {contact.email && (
216
- <Link
217
- href={`mailto:${contact.email}`}
218
- theme="dark"
219
- className="text-xs no-underline"
220
- >
221
- {contact.email}
222
- </Link>
223
- )}
224
- </div>
225
- </div>
226
-
227
- <div className="footer__mobile-footer">
228
- <a
229
- href={homeUrl ?? "/"}
230
- onClick={(e) => {
231
- e.preventDefault();
232
- onLinkClick?.({ label: "Home", route: homeUrl ?? "/" });
233
- }}
234
- >
235
- {logo}
236
- </a>
237
- <Text as="p" className="footer__mobile-copyright">
238
- © {year} Mautourco, All Rights Reserved
239
- </Text>
240
- </div>
241
- </div>
242
- </div>
243
- </footer>
244
- );
245
- };
246
-
247
- const defaultColumns: FooterColumn[] = [
248
- {
249
- id: "menu-1",
250
- title: "Menu Title",
251
- links: [
252
- { label: "Menu Item", href: "#" },
253
- { label: "Menu Item", href: "#" },
254
- { label: "Menu Item", href: "#" },
255
- { label: "Menu Item", href: "#" },
256
- { label: "Menu Item", href: "#" },
257
- { label: "Menu Item", href: "#" },
258
- ],
259
- },
260
- {
261
- id: "menu-2",
262
- title: "Menu Title",
263
- links: [
264
- { label: "Menu Item", href: "#" },
265
- { label: "Menu Item", href: "#" },
266
- { label: "Menu Item", href: "#" },
267
- { label: "Menu Item", href: "#" },
268
- { label: "Menu Item", href: "#" },
269
- { label: "Menu Item", href: "#" },
270
- ],
271
- },
272
- ];
273
-
274
- const defaultContact: ContactBlock = {
275
- title: "Contact Us",
276
- addressLines: [
277
- "84, Gustave Colin Street,",
278
- "Forest Side 74414, Mauritius",
279
- ],
280
- phone: "+ (230) 604 3000",
281
- fax: "+ (230) 674 3720",
282
- email: "info@mautourco.com",
283
- };
284
-
285
- const defaultSocials: SocialLink[] = [
286
- { id: "fb", label: "Facebook", href: "#", icon: <span></span> },
287
- { id: "ig", label: "Instagram", href: "#", icon: <span></span> },
288
- { id: "in", label: "LinkedIn", href: "#", icon: <span></span> },
289
- { id: "yt", label: "YouTube", href: "#", icon: <span></span> },
290
- ];
1
+ import React, { useState } from "react";
2
+ import { Text } from "../../atoms/Typography/Typography";
3
+ import { Link } from "../../atoms/Link/Link";
4
+ import Icon from "../../atoms/Icon/Icon";
5
+
6
+ type FooterLink = {
7
+ label: string;
8
+ href?: string;
9
+ onClick?: () => void;
10
+ };
11
+
12
+ type FooterColumn = {
13
+ id: string;
14
+ title: string;
15
+ links: FooterLink[];
16
+ };
17
+
18
+ type SocialLink = {
19
+ id: string;
20
+ icon: React.ReactNode;
21
+ label: string;
22
+ href: string;
23
+ };
24
+
25
+ type ContactBlock = {
26
+ title: string;
27
+ addressLines: string[];
28
+ phone?: string;
29
+ fax?: string;
30
+ email?: string;
31
+ };
32
+
33
+ export interface FooterProps {
34
+ logo?: React.ReactNode; // SVG or img already styled
35
+ columns?: FooterColumn[];
36
+ contact?: ContactBlock;
37
+ socials?: SocialLink[];
38
+ className?: string;
39
+ homeUrl?: string;
40
+ onLinkClick?: (link: { label: string; route: string }) => void;
41
+ }
42
+
43
+ export const Footer: React.FC<FooterProps> = ({
44
+ logo,
45
+ columns = defaultColumns,
46
+ contact = defaultContact,
47
+ socials = defaultSocials,
48
+ className = "",
49
+ homeUrl,
50
+ onLinkClick,
51
+ }) => {
52
+ const [openSection, setOpenSection] = useState<string | null>(columns[0]?.id);
53
+
54
+ const toggleSection = (id: string) => {
55
+ setOpenSection((prev) => (prev === id ? null : id));
56
+ };
57
+
58
+ const year = new Date().getFullYear();
59
+
60
+ return (
61
+ <footer className="footer">
62
+ <div className="footer__wrapper">
63
+ <div className="footer__desktop">
64
+ <div className="footer__top-row">
65
+ <div className="footer__content-left">
66
+ {columns.map((col) => (
67
+ <div key={col.id} className="footer__column">
68
+ <Text
69
+ as="h4"
70
+ className="footer__column-title"
71
+ >
72
+ {col.title}
73
+ </Text>
74
+ <div className="footer__column-links">
75
+ {col.links.map((link) => (
76
+ <Link
77
+ key={link.label}
78
+ href={link.href}
79
+ onClick={link.onClick}
80
+ theme="dark"
81
+ className="text-xs no-underline hover:opacity-80"
82
+ >
83
+ {link.label}
84
+ </Link>
85
+ ))}
86
+ </div>
87
+ </div>
88
+ ))}
89
+
90
+ <div className="footer__contact">
91
+ <Text
92
+ as="h4"
93
+ className="footer__column-title"
94
+ >
95
+ {contact.title}
96
+ </Text>
97
+ <div className="footer__contact-info">
98
+ {contact.addressLines.map((line) => (
99
+ <p key={line}>{line}</p>
100
+ ))}
101
+ {contact.phone && <p>Tel: {contact.phone}</p>}
102
+ {contact.fax && <p>Fax: {contact.fax}</p>}
103
+ {contact.email && (
104
+ <Link
105
+ href={`mailto:${contact.email}`}
106
+ theme="dark"
107
+ className="text-xs no-underline"
108
+ >
109
+ {contact.email}
110
+ </Link>
111
+ )}
112
+ </div>
113
+ </div>
114
+
115
+ <div className="footer__socials">
116
+ <Text
117
+ as="h4"
118
+ className="footer__column-title"
119
+ >
120
+ Socials
121
+ </Text>
122
+ <div className="footer__socials-icons">
123
+ {socials.map((s) => (
124
+ <a
125
+ key={s.id}
126
+ href={s.href}
127
+ aria-label={s.label}
128
+ className="footer__social-link"
129
+ >
130
+ {s.icon}
131
+ </a>
132
+ ))}
133
+ </div>
134
+ </div>
135
+ </div>
136
+
137
+ {logo && (
138
+ <div className="footer__logo-section">
139
+ <div className="footer__logo-container">
140
+ <a
141
+ href={homeUrl ?? "/"}
142
+ onClick={(e) => {
143
+ e.preventDefault();
144
+ onLinkClick?.({ label: "Home", route: homeUrl ?? "/" });
145
+ }}
146
+ >
147
+ {logo}
148
+ </a>
149
+ <Text
150
+ as="p"
151
+ className="footer__copyright"
152
+ >
153
+ © {year} Mautourco, All Rights Reserved
154
+ </Text>
155
+ </div>
156
+ </div>
157
+ )}
158
+ </div>
159
+
160
+ {!logo && (
161
+ <Text as="p" className="footer__copyright-standalone">
162
+ © {year} Mautourco, All Rights Reserved
163
+ </Text>
164
+ )}
165
+ </div>
166
+
167
+ <div className="footer__mobile">
168
+ {columns.map((col) => (
169
+ <div key={col.id} className="footer__mobile-section">
170
+ <button
171
+ type="button"
172
+ onClick={() => toggleSection(col.id)}
173
+ className="footer__mobile-section-button"
174
+ >
175
+ <span>{col.title}</span>
176
+ <span
177
+ className={`footer__mobile-section-icon ${
178
+ openSection === col.id ? "footer__mobile-section-icon--rotated" : ""
179
+ }`}
180
+ >
181
+ <Icon name="chevron-down" size="sm" color="white" />
182
+ </span>
183
+ </button>
184
+ {openSection === col.id && (
185
+ <div className="footer__mobile-section-content">
186
+ {col.links.map((link) => (
187
+ <Link
188
+ key={link.label}
189
+ href={link.href}
190
+ onClick={link.onClick}
191
+ theme="dark"
192
+ className="text-xs no-underline"
193
+ >
194
+ {link.label}
195
+ </Link>
196
+ ))}
197
+ </div>
198
+ )}
199
+ </div>
200
+ ))}
201
+
202
+ <div className="footer__mobile-contact">
203
+ <Text
204
+ as="h4"
205
+ className="footer__mobile-contact-title"
206
+ >
207
+ {contact.title}
208
+ </Text>
209
+ <div className="footer__mobile-contact-info">
210
+ {contact.addressLines.map((line) => (
211
+ <p key={line}>{line}</p>
212
+ ))}
213
+ {contact.phone && <p>Tel: {contact.phone}</p>}
214
+ {contact.fax && <p>Fax: {contact.fax}</p>}
215
+ {contact.email && (
216
+ <Link
217
+ href={`mailto:${contact.email}`}
218
+ theme="dark"
219
+ className="text-xs no-underline"
220
+ >
221
+ {contact.email}
222
+ </Link>
223
+ )}
224
+ </div>
225
+ </div>
226
+
227
+ <div className="footer__mobile-footer">
228
+ <a
229
+ href={homeUrl ?? "/"}
230
+ onClick={(e) => {
231
+ e.preventDefault();
232
+ onLinkClick?.({ label: "Home", route: homeUrl ?? "/" });
233
+ }}
234
+ >
235
+ {logo}
236
+ </a>
237
+ <Text as="p" className="footer__mobile-copyright">
238
+ © {year} Mautourco, All Rights Reserved
239
+ </Text>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ </footer>
244
+ );
245
+ };
246
+
247
+ const defaultColumns: FooterColumn[] = [
248
+ {
249
+ id: "menu-1",
250
+ title: "Menu Title",
251
+ links: [
252
+ { label: "Menu Item", href: "#" },
253
+ { label: "Menu Item", href: "#" },
254
+ { label: "Menu Item", href: "#" },
255
+ { label: "Menu Item", href: "#" },
256
+ { label: "Menu Item", href: "#" },
257
+ { label: "Menu Item", href: "#" },
258
+ ],
259
+ },
260
+ {
261
+ id: "menu-2",
262
+ title: "Menu Title",
263
+ links: [
264
+ { label: "Menu Item", href: "#" },
265
+ { label: "Menu Item", href: "#" },
266
+ { label: "Menu Item", href: "#" },
267
+ { label: "Menu Item", href: "#" },
268
+ { label: "Menu Item", href: "#" },
269
+ { label: "Menu Item", href: "#" },
270
+ ],
271
+ },
272
+ ];
273
+
274
+ const defaultContact: ContactBlock = {
275
+ title: "Contact Us",
276
+ addressLines: [
277
+ "84, Gustave Colin Street,",
278
+ "Forest Side 74414, Mauritius",
279
+ ],
280
+ phone: "+ (230) 604 3000",
281
+ fax: "+ (230) 674 3720",
282
+ email: "info@mautourco.com",
283
+ };
284
+
285
+ const defaultSocials: SocialLink[] = [
286
+ { id: "fb", label: "Facebook", href: "#", icon: <span></span> },
287
+ { id: "ig", label: "Instagram", href: "#", icon: <span></span> },
288
+ { id: "in", label: "LinkedIn", href: "#", icon: <span></span> },
289
+ { id: "yt", label: "YouTube", href: "#", icon: <span></span> },
290
+ ];