mautourco-components 0.2.5 → 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 -32
  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 +142 -142
  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 -133
  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,369 +1,369 @@
1
- import React, { useState, useCallback, useRef, useEffect } from "react";
2
- import Icon from "../../atoms/Icon/Icon";
3
- import { Text } from "../../atoms/Typography/Typography";
4
- import PaxSelector, { PaxData } from "../PaxSelector/PaxSelector";
5
- import DateTimePicker from "../DateTimePicker/DateTimePicker";
6
- import LocationDropdown, {
7
- LocationOption,
8
- LocationGroup,
9
- LocationData,
10
- } from "../../molecules/LocationDropdown/LocationDropdown";
11
- import "../../../styles/components/organism/transfer-line.css";
12
-
13
- export type TransferType = "arrival" | "departure" | "inter-hotel";
14
-
15
- // Re-export LocationData for convenience
16
- export type { LocationData };
17
-
18
- export interface TransferLineData {
19
- id: string;
20
- type: TransferType;
21
- paxData?: PaxData;
22
- transferDate?: string;
23
- pickupPoint?: LocationData;
24
- dropoffPoint?: LocationData;
25
- }
26
-
27
- export interface TransferLineProps {
28
- /** Unique identifier for this transfer line */
29
- id: string;
30
- /** Type of transfer: arrival, departure, or inter-hotel */
31
- type: TransferType;
32
- /** Pax data */
33
- paxData?: PaxData;
34
- /** Transfer date */
35
- transferDate?: string;
36
- /** Selected pickup point ID (for initial value) */
37
- pickupPoint?: string | number;
38
- /** Selected dropoff point ID (for initial value) */
39
- dropoffPoint?: string | number;
40
- /** All location options - will be filtered based on transfer type */
41
- locations?: {
42
- options?: LocationOption[];
43
- groups?: LocationGroup[];
44
- };
45
- /** Callback when pax data changes */
46
- onPaxChange?: (paxData: PaxData) => void;
47
- /** Callback when transfer date changes */
48
- onDateChange?: (date: string) => void;
49
- /** Callback when pickup point changes */
50
- onPickupChange?: (location: LocationData | null) => void;
51
- /** Callback when dropoff point changes */
52
- onDropoffChange?: (location: LocationData | null) => void;
53
- /** Callback when any data changes - returns complete TransferLineData */
54
- onDataChange?: (data: TransferLineData) => void;
55
- /** Callback when delete button is clicked */
56
- onDelete?: () => void;
57
- /** Whether to show the delete button */
58
- showDelete?: boolean;
59
- /** Whether to show the title (Arrival, Departure, Inter-Hotel) */
60
- showTitle?: boolean;
61
- /** Additional CSS classes */
62
- className?: string;
63
- }
64
-
65
- const TransferLine: React.FC<TransferLineProps> = ({
66
- id,
67
- type,
68
- paxData,
69
- transferDate,
70
- pickupPoint,
71
- dropoffPoint,
72
- locations = { options: [], groups: [] },
73
- onPaxChange,
74
- onDateChange,
75
- onPickupChange,
76
- onDropoffChange,
77
- onDataChange,
78
- onDelete,
79
- showDelete = true,
80
- showTitle = false,
81
- className = "",
82
- }) => {
83
- const [internalPaxData, setInternalPaxData] = useState<PaxData | undefined>(
84
- paxData
85
- );
86
- const [internalTransferDate, setInternalTransferDate] = useState<
87
- string | undefined
88
- >(transferDate);
89
- const [internalPickupPoint, setInternalPickupPoint] = useState<
90
- LocationData | null
91
- >(null);
92
- const [internalDropoffPoint, setInternalDropoffPoint] = useState<
93
- LocationData | null
94
- >(null);
95
-
96
- // Helper function to get all locations (from options and groups)
97
- const getAllLocations = (
98
- options: LocationOption[],
99
- groups: LocationGroup[]
100
- ): LocationOption[] => {
101
- const groupOptions = groups.flatMap((group) => group.options);
102
- return [...options, ...groupOptions];
103
- };
104
-
105
- // Filter locations based on transfer type and position (pickup/dropoff)
106
- const filterLocations = (position: 'pickup' | 'dropoff') => {
107
- const allOptions = locations.options || [];
108
- const allGroups = locations.groups || [];
109
-
110
- let filterTypes: Array<'airport' | 'port' | 'accommodation'> = [];
111
-
112
- if (type === 'arrival') {
113
- filterTypes = position === 'pickup' ? ['airport', 'port'] : ['accommodation'];
114
- } else if (type === 'departure') {
115
- filterTypes = position === 'pickup' ? ['accommodation'] : ['airport', 'port'];
116
- } else if (type === 'inter-hotel') {
117
- filterTypes = ['accommodation'];
118
- }
119
-
120
- const filteredOptions = allOptions.filter(opt => filterTypes.includes(opt.type));
121
- const filteredGroups = allGroups
122
- .map(group => ({
123
- ...group,
124
- options: group.options.filter(opt => filterTypes.includes(opt.type))
125
- }))
126
- .filter(group => group.options.length > 0);
127
-
128
- return { options: filteredOptions, groups: filteredGroups };
129
- };
130
-
131
- // Get default location (first airport for arrival/departure)
132
- const getDefaultLocation = (position: 'pickup' | 'dropoff'): LocationOption | null => {
133
- const { options, groups } = filterLocations(position);
134
- const allLocations = getAllLocations(options, groups);
135
-
136
- // For arrival pickup or departure dropoff, default to first airport
137
- if ((type === 'arrival' && position === 'pickup') || (type === 'departure' && position === 'dropoff')) {
138
- return allLocations.find(loc => loc.type === 'airport') || allLocations[0] || null;
139
- }
140
-
141
- return null;
142
- };
143
-
144
- // Initialize location data from IDs or set defaults
145
- React.useEffect(() => {
146
- const { options, groups } = filterLocations('pickup');
147
- const allPickupLocations = getAllLocations(options, groups);
148
-
149
- if (pickupPoint) {
150
- const location = allPickupLocations.find((loc) => loc.id === pickupPoint);
151
- if (location) {
152
- setInternalPickupPoint({
153
- id: location.id,
154
- locationName: location.label,
155
- });
156
- }
157
- } else {
158
- // Set default location if applicable
159
- const defaultLocation = getDefaultLocation('pickup');
160
- if (defaultLocation) {
161
- const defaultData: LocationData = {
162
- id: defaultLocation.id,
163
- locationName: defaultLocation.label,
164
- };
165
- setInternalPickupPoint(defaultData);
166
- onPickupChange?.(defaultData);
167
- }
168
- }
169
- // eslint-disable-next-line react-hooks/exhaustive-deps
170
- }, [pickupPoint, type, locations]);
171
-
172
- React.useEffect(() => {
173
- const { options, groups } = filterLocations('dropoff');
174
- const allDropoffLocations = getAllLocations(options, groups);
175
-
176
- if (dropoffPoint) {
177
- const location = allDropoffLocations.find((loc) => loc.id === dropoffPoint);
178
- if (location) {
179
- setInternalDropoffPoint({
180
- id: location.id,
181
- locationName: location.label,
182
- });
183
- }
184
- } else {
185
- // Set default location if applicable
186
- const defaultLocation = getDefaultLocation('dropoff');
187
- if (defaultLocation) {
188
- const defaultData: LocationData = {
189
- id: defaultLocation.id,
190
- locationName: defaultLocation.label,
191
- };
192
- setInternalDropoffPoint(defaultData);
193
- onDropoffChange?.(defaultData);
194
- }
195
- }
196
- // eslint-disable-next-line react-hooks/exhaustive-deps
197
- }, [dropoffPoint, type, locations]);
198
-
199
- // Update complete data whenever any field changes
200
- React.useEffect(() => {
201
- const completeData: TransferLineData = {
202
- id,
203
- type,
204
- paxData: internalPaxData,
205
- transferDate: internalTransferDate,
206
- pickupPoint: internalPickupPoint || undefined,
207
- dropoffPoint: internalDropoffPoint || undefined,
208
- };
209
- onDataChange?.(completeData);
210
- // eslint-disable-next-line react-hooks/exhaustive-deps
211
- }, [id, type, internalPaxData, internalTransferDate, internalPickupPoint, internalDropoffPoint]);
212
-
213
- const getTypeIcon = () => {
214
- switch (type) {
215
- case "arrival":
216
- return "arrival";
217
- case "departure":
218
- return "departure";
219
- case "inter-hotel":
220
- return "building";
221
- default:
222
- return "arrival";
223
- }
224
- };
225
-
226
- const getTypeLabel = () => {
227
- switch (type) {
228
- case "arrival":
229
- return "Arrival";
230
- case "departure":
231
- return "Departure";
232
- case "inter-hotel":
233
- return "Inter-Hotel";
234
- default:
235
- return "Transfer";
236
- }
237
- };
238
-
239
- const handlePaxChange = (newPaxData: PaxData) => {
240
- setInternalPaxData(newPaxData);
241
- onPaxChange?.(newPaxData);
242
- };
243
-
244
- const handleDateChange = (newDate: string | string[]) => {
245
- const dateValue = Array.isArray(newDate) ? newDate[0] : newDate;
246
- setInternalTransferDate(dateValue);
247
- onDateChange?.(dateValue);
248
- };
249
-
250
- const handlePickupChange = (location: LocationData | null) => {
251
- setInternalPickupPoint(location);
252
- onPickupChange?.(location);
253
- };
254
-
255
- const handleDropoffChange = (location: LocationData | null) => {
256
- setInternalDropoffPoint(location);
257
- onDropoffChange?.(location);
258
- };
259
-
260
- return (
261
- <div
262
- className={`transfer-line transfer-line--${type} ${className}`}
263
- data-transfer-id={id}
264
- >
265
- {/* Transfer type header */}
266
- {showTitle && (
267
- <div className="transfer-line__header">
268
- <Icon
269
- name={getTypeIcon()}
270
- size="sm"
271
- className="transfer-line__header-icon"
272
- />
273
- <Text
274
- size="sm"
275
- variant="medium"
276
- className="transfer-line__header-label"
277
- >
278
- {getTypeLabel()}
279
- </Text>
280
- </div>
281
- )}
282
-
283
- {/* Transfer line content */}
284
- <div className="transfer-line__content-container">
285
- <div className="transfer-line__content">
286
- {/* Number of pax */}
287
- <div className="transfer-line__field transfer-line__field--pax">
288
- <PaxSelector
289
- label="Number of pax"
290
- value={internalPaxData}
291
- onChange={handlePaxChange}
292
- placeholder="2 pax"
293
- />
294
- </div>
295
-
296
- {/* Transfer date */}
297
- <div className="transfer-line__field transfer-line__field--date">
298
- <Text
299
- size="sm"
300
- variant="regular"
301
- className="transfer-line__field-label"
302
- >
303
- Transfer date
304
- </Text>
305
- <DateTimePicker
306
- placeholder="DD/MM/YYYY"
307
- mode="calendar"
308
- iconPosition="left"
309
- numberOfMonths={1}
310
- iconBGFull={false}
311
- showChevron={true}
312
- onValueChange={handleDateChange}
313
- selectionMode="single"
314
- />
315
- </div>
316
-
317
- {/* Pick-up point */}
318
- <div className="transfer-line__field transfer-line__field--pickup">
319
- <LocationDropdown
320
- label="Pick-up point"
321
- options={filterLocations('pickup').options}
322
- groups={filterLocations('pickup').groups}
323
- selectedValue={internalPickupPoint?.id || null}
324
- onSelectionChange={handlePickupChange}
325
- placeholder="Select a pick-up point"
326
- direction="pickup"
327
- type={type === 'inter-hotel' ? 'accommodation' : type === 'arrival' ? 'airport-port' : 'accommodation'}
328
- showGroupTitles={false}
329
- />
330
- </div>
331
-
332
- {/* Drop-off point */}
333
- <div className="transfer-line__field transfer-line__field--dropoff">
334
- <LocationDropdown
335
- label="Drop-off point"
336
- options={filterLocations('dropoff').options}
337
- groups={filterLocations('dropoff').groups}
338
- selectedValue={internalDropoffPoint?.id || null}
339
- onSelectionChange={handleDropoffChange}
340
- placeholder="Select a drop-off point"
341
- direction="dropoff"
342
- type={type === 'inter-hotel' ? 'accommodation' : type === 'departure' ? 'airport-port' : 'accommodation'}
343
- showGroupTitles={false}
344
- />
345
- </div>
346
- </div>
347
- {/* Delete button */}
348
- {showDelete && (
349
- <div className="transfer-line__delete">
350
- <button
351
- type="button"
352
- className="transfer-line__delete-btn"
353
- onClick={onDelete}
354
- aria-label="Delete transfer line"
355
- >
356
- <Icon
357
- name="delete"
358
- size="sm"
359
- className="transfer-line__delete-icon"
360
- />
361
- </button>
362
- </div>
363
- )}
364
- </div>
365
- </div>
366
- );
367
- };
368
-
369
- export default TransferLine;
1
+ import React, { useState, useCallback, useRef, useEffect } from "react";
2
+ import Icon from "../../atoms/Icon/Icon";
3
+ import { Text } from "../../atoms/Typography/Typography";
4
+ import PaxSelector, { PaxData } from "../PaxSelector/PaxSelector";
5
+ import DateTimePicker from "../DateTimePicker/DateTimePicker";
6
+ import LocationDropdown, {
7
+ LocationOption,
8
+ LocationGroup,
9
+ LocationData,
10
+ } from "../../molecules/LocationDropdown/LocationDropdown";
11
+ import "../../../styles/components/organism/transfer-line.css";
12
+
13
+ export type TransferType = "arrival" | "departure" | "inter-hotel";
14
+
15
+ // Re-export LocationData for convenience
16
+ export type { LocationData };
17
+
18
+ export interface TransferLineData {
19
+ id: string;
20
+ type: TransferType;
21
+ paxData?: PaxData;
22
+ transferDate?: string;
23
+ pickupPoint?: LocationData;
24
+ dropoffPoint?: LocationData;
25
+ }
26
+
27
+ export interface TransferLineProps {
28
+ /** Unique identifier for this transfer line */
29
+ id: string;
30
+ /** Type of transfer: arrival, departure, or inter-hotel */
31
+ type: TransferType;
32
+ /** Pax data */
33
+ paxData?: PaxData;
34
+ /** Transfer date */
35
+ transferDate?: string;
36
+ /** Selected pickup point ID (for initial value) */
37
+ pickupPoint?: string | number;
38
+ /** Selected dropoff point ID (for initial value) */
39
+ dropoffPoint?: string | number;
40
+ /** All location options - will be filtered based on transfer type */
41
+ locations?: {
42
+ options?: LocationOption[];
43
+ groups?: LocationGroup[];
44
+ };
45
+ /** Callback when pax data changes */
46
+ onPaxChange?: (paxData: PaxData) => void;
47
+ /** Callback when transfer date changes */
48
+ onDateChange?: (date: string) => void;
49
+ /** Callback when pickup point changes */
50
+ onPickupChange?: (location: LocationData | null) => void;
51
+ /** Callback when dropoff point changes */
52
+ onDropoffChange?: (location: LocationData | null) => void;
53
+ /** Callback when any data changes - returns complete TransferLineData */
54
+ onDataChange?: (data: TransferLineData) => void;
55
+ /** Callback when delete button is clicked */
56
+ onDelete?: () => void;
57
+ /** Whether to show the delete button */
58
+ showDelete?: boolean;
59
+ /** Whether to show the title (Arrival, Departure, Inter-Hotel) */
60
+ showTitle?: boolean;
61
+ /** Additional CSS classes */
62
+ className?: string;
63
+ }
64
+
65
+ const TransferLine: React.FC<TransferLineProps> = ({
66
+ id,
67
+ type,
68
+ paxData,
69
+ transferDate,
70
+ pickupPoint,
71
+ dropoffPoint,
72
+ locations = { options: [], groups: [] },
73
+ onPaxChange,
74
+ onDateChange,
75
+ onPickupChange,
76
+ onDropoffChange,
77
+ onDataChange,
78
+ onDelete,
79
+ showDelete = true,
80
+ showTitle = false,
81
+ className = "",
82
+ }) => {
83
+ const [internalPaxData, setInternalPaxData] = useState<PaxData | undefined>(
84
+ paxData
85
+ );
86
+ const [internalTransferDate, setInternalTransferDate] = useState<
87
+ string | undefined
88
+ >(transferDate);
89
+ const [internalPickupPoint, setInternalPickupPoint] = useState<
90
+ LocationData | null
91
+ >(null);
92
+ const [internalDropoffPoint, setInternalDropoffPoint] = useState<
93
+ LocationData | null
94
+ >(null);
95
+
96
+ // Helper function to get all locations (from options and groups)
97
+ const getAllLocations = (
98
+ options: LocationOption[],
99
+ groups: LocationGroup[]
100
+ ): LocationOption[] => {
101
+ const groupOptions = groups.flatMap((group) => group.options);
102
+ return [...options, ...groupOptions];
103
+ };
104
+
105
+ // Filter locations based on transfer type and position (pickup/dropoff)
106
+ const filterLocations = (position: 'pickup' | 'dropoff') => {
107
+ const allOptions = locations.options || [];
108
+ const allGroups = locations.groups || [];
109
+
110
+ let filterTypes: Array<'airport' | 'port' | 'accommodation'> = [];
111
+
112
+ if (type === 'arrival') {
113
+ filterTypes = position === 'pickup' ? ['airport', 'port'] : ['accommodation'];
114
+ } else if (type === 'departure') {
115
+ filterTypes = position === 'pickup' ? ['accommodation'] : ['airport', 'port'];
116
+ } else if (type === 'inter-hotel') {
117
+ filterTypes = ['accommodation'];
118
+ }
119
+
120
+ const filteredOptions = allOptions.filter(opt => filterTypes.includes(opt.type));
121
+ const filteredGroups = allGroups
122
+ .map(group => ({
123
+ ...group,
124
+ options: group.options.filter(opt => filterTypes.includes(opt.type))
125
+ }))
126
+ .filter(group => group.options.length > 0);
127
+
128
+ return { options: filteredOptions, groups: filteredGroups };
129
+ };
130
+
131
+ // Get default location (first airport for arrival/departure)
132
+ const getDefaultLocation = (position: 'pickup' | 'dropoff'): LocationOption | null => {
133
+ const { options, groups } = filterLocations(position);
134
+ const allLocations = getAllLocations(options, groups);
135
+
136
+ // For arrival pickup or departure dropoff, default to first airport
137
+ if ((type === 'arrival' && position === 'pickup') || (type === 'departure' && position === 'dropoff')) {
138
+ return allLocations.find(loc => loc.type === 'airport') || allLocations[0] || null;
139
+ }
140
+
141
+ return null;
142
+ };
143
+
144
+ // Initialize location data from IDs or set defaults
145
+ React.useEffect(() => {
146
+ const { options, groups } = filterLocations('pickup');
147
+ const allPickupLocations = getAllLocations(options, groups);
148
+
149
+ if (pickupPoint) {
150
+ const location = allPickupLocations.find((loc) => loc.id === pickupPoint);
151
+ if (location) {
152
+ setInternalPickupPoint({
153
+ id: location.id,
154
+ locationName: location.label,
155
+ });
156
+ }
157
+ } else {
158
+ // Set default location if applicable
159
+ const defaultLocation = getDefaultLocation('pickup');
160
+ if (defaultLocation) {
161
+ const defaultData: LocationData = {
162
+ id: defaultLocation.id,
163
+ locationName: defaultLocation.label,
164
+ };
165
+ setInternalPickupPoint(defaultData);
166
+ onPickupChange?.(defaultData);
167
+ }
168
+ }
169
+ // eslint-disable-next-line react-hooks/exhaustive-deps
170
+ }, [pickupPoint, type, locations]);
171
+
172
+ React.useEffect(() => {
173
+ const { options, groups } = filterLocations('dropoff');
174
+ const allDropoffLocations = getAllLocations(options, groups);
175
+
176
+ if (dropoffPoint) {
177
+ const location = allDropoffLocations.find((loc) => loc.id === dropoffPoint);
178
+ if (location) {
179
+ setInternalDropoffPoint({
180
+ id: location.id,
181
+ locationName: location.label,
182
+ });
183
+ }
184
+ } else {
185
+ // Set default location if applicable
186
+ const defaultLocation = getDefaultLocation('dropoff');
187
+ if (defaultLocation) {
188
+ const defaultData: LocationData = {
189
+ id: defaultLocation.id,
190
+ locationName: defaultLocation.label,
191
+ };
192
+ setInternalDropoffPoint(defaultData);
193
+ onDropoffChange?.(defaultData);
194
+ }
195
+ }
196
+ // eslint-disable-next-line react-hooks/exhaustive-deps
197
+ }, [dropoffPoint, type, locations]);
198
+
199
+ // Update complete data whenever any field changes
200
+ React.useEffect(() => {
201
+ const completeData: TransferLineData = {
202
+ id,
203
+ type,
204
+ paxData: internalPaxData,
205
+ transferDate: internalTransferDate,
206
+ pickupPoint: internalPickupPoint || undefined,
207
+ dropoffPoint: internalDropoffPoint || undefined,
208
+ };
209
+ onDataChange?.(completeData);
210
+ // eslint-disable-next-line react-hooks/exhaustive-deps
211
+ }, [id, type, internalPaxData, internalTransferDate, internalPickupPoint, internalDropoffPoint]);
212
+
213
+ const getTypeIcon = () => {
214
+ switch (type) {
215
+ case "arrival":
216
+ return "arrival";
217
+ case "departure":
218
+ return "departure";
219
+ case "inter-hotel":
220
+ return "building";
221
+ default:
222
+ return "arrival";
223
+ }
224
+ };
225
+
226
+ const getTypeLabel = () => {
227
+ switch (type) {
228
+ case "arrival":
229
+ return "Arrival";
230
+ case "departure":
231
+ return "Departure";
232
+ case "inter-hotel":
233
+ return "Inter-Hotel";
234
+ default:
235
+ return "Transfer";
236
+ }
237
+ };
238
+
239
+ const handlePaxChange = (newPaxData: PaxData) => {
240
+ setInternalPaxData(newPaxData);
241
+ onPaxChange?.(newPaxData);
242
+ };
243
+
244
+ const handleDateChange = (newDate: string | string[]) => {
245
+ const dateValue = Array.isArray(newDate) ? newDate[0] : newDate;
246
+ setInternalTransferDate(dateValue);
247
+ onDateChange?.(dateValue);
248
+ };
249
+
250
+ const handlePickupChange = (location: LocationData | null) => {
251
+ setInternalPickupPoint(location);
252
+ onPickupChange?.(location);
253
+ };
254
+
255
+ const handleDropoffChange = (location: LocationData | null) => {
256
+ setInternalDropoffPoint(location);
257
+ onDropoffChange?.(location);
258
+ };
259
+
260
+ return (
261
+ <div
262
+ className={`transfer-line transfer-line--${type} ${className}`}
263
+ data-transfer-id={id}
264
+ >
265
+ {/* Transfer type header */}
266
+ {showTitle && (
267
+ <div className="transfer-line__header">
268
+ <Icon
269
+ name={getTypeIcon()}
270
+ size="sm"
271
+ className="transfer-line__header-icon"
272
+ />
273
+ <Text
274
+ size="sm"
275
+ variant="medium"
276
+ className="transfer-line__header-label"
277
+ >
278
+ {getTypeLabel()}
279
+ </Text>
280
+ </div>
281
+ )}
282
+
283
+ {/* Transfer line content */}
284
+ <div className="transfer-line__content-container">
285
+ <div className="transfer-line__content">
286
+ {/* Number of pax */}
287
+ <div className="transfer-line__field transfer-line__field--pax">
288
+ <PaxSelector
289
+ label="Number of pax"
290
+ value={internalPaxData}
291
+ onChange={handlePaxChange}
292
+ placeholder="2 pax"
293
+ />
294
+ </div>
295
+
296
+ {/* Transfer date */}
297
+ <div className="transfer-line__field transfer-line__field--date">
298
+ <Text
299
+ size="sm"
300
+ variant="regular"
301
+ className="transfer-line__field-label"
302
+ >
303
+ Transfer date
304
+ </Text>
305
+ <DateTimePicker
306
+ placeholder="DD/MM/YYYY"
307
+ mode="calendar"
308
+ iconPosition="left"
309
+ numberOfMonths={1}
310
+ iconBGFull={false}
311
+ showChevron={true}
312
+ onValueChange={handleDateChange}
313
+ selectionMode="single"
314
+ />
315
+ </div>
316
+
317
+ {/* Pick-up point */}
318
+ <div className="transfer-line__field transfer-line__field--pickup">
319
+ <LocationDropdown
320
+ label="Pick-up point"
321
+ options={filterLocations('pickup').options}
322
+ groups={filterLocations('pickup').groups}
323
+ selectedValue={internalPickupPoint?.id || null}
324
+ onSelectionChange={handlePickupChange}
325
+ placeholder="Select a pick-up point"
326
+ direction="pickup"
327
+ type={type === 'inter-hotel' ? 'accommodation' : type === 'arrival' ? 'airport-port' : 'accommodation'}
328
+ showGroupTitles={false}
329
+ />
330
+ </div>
331
+
332
+ {/* Drop-off point */}
333
+ <div className="transfer-line__field transfer-line__field--dropoff">
334
+ <LocationDropdown
335
+ label="Drop-off point"
336
+ options={filterLocations('dropoff').options}
337
+ groups={filterLocations('dropoff').groups}
338
+ selectedValue={internalDropoffPoint?.id || null}
339
+ onSelectionChange={handleDropoffChange}
340
+ placeholder="Select a drop-off point"
341
+ direction="dropoff"
342
+ type={type === 'inter-hotel' ? 'accommodation' : type === 'departure' ? 'airport-port' : 'accommodation'}
343
+ showGroupTitles={false}
344
+ />
345
+ </div>
346
+ </div>
347
+ {/* Delete button */}
348
+ {showDelete && (
349
+ <div className="transfer-line__delete">
350
+ <button
351
+ type="button"
352
+ className="transfer-line__delete-btn"
353
+ onClick={onDelete}
354
+ aria-label="Delete transfer line"
355
+ >
356
+ <Icon
357
+ name="delete"
358
+ size="sm"
359
+ className="transfer-line__delete-icon"
360
+ />
361
+ </button>
362
+ </div>
363
+ )}
364
+ </div>
365
+ </div>
366
+ );
367
+ };
368
+
369
+ export default TransferLine;